rssguard/src/core/systemfactory.h
2014-02-20 17:08:12 +01:00

102 lines
2.7 KiB
C++

#ifndef SYSTEMFACTORY_H
#define SYSTEMFACTORY_H
#include <QObject>
#include <QPointer>
#include <QMutex>
#include <QMetaType>
#include <QHash>
#include <QPair>
#include <QNetworkReply>
class UpdateUrl {
public:
QString m_fileUrl;
QString m_platform;
QString m_os;
};
class UpdateInfo {
public:
enum UpdateType {
// Corresponding enum to "maintenace" from UPDATES file.
Maintenance,
// Corresponding enum to "evolution" from UPDATES file.
Evolution
};
QString m_availableVersion;
QString m_changes;
UpdateType m_type;
QHash<QString, UpdateUrl> m_urls;
};
Q_DECLARE_METATYPE(UpdateInfo)
class SystemFactory : public QObject {
Q_OBJECT
private:
// Constructors and destructors.
explicit SystemFactory(QObject *parent = 0);
// Performs parsing of downloaded file with list of updates.
UpdateInfo parseUpdatesFile(const QByteArray &updates_file);
public:
// Constructors and destructors.
virtual ~SystemFactory();
// Specifies possible states of auto-start functionality.
enum AutoStartStatus {
Enabled,
Disabled,
Unavailable
};
// Returns current status of auto-start function.
SystemFactory::AutoStartStatus getAutoStartStatus();
// Sets new status for auto-start function.
// Function returns false if setting of
// new status failed.
bool setAutoStartStatus(const SystemFactory::AutoStartStatus &new_status);
#if defined(Q_OS_LINUX)
// Returns standard location where auto-start .desktop files
// should be placed.
QString getAutostartDesktopFileLocation();
#endif
// Tries to download list with new updates.
QPair<UpdateInfo, QNetworkReply::NetworkError> checkForUpdates();
// Access to application-wide close lock.
inline QMutex *applicationCloseLock() const {
return m_applicationCloseLock;
}
// Singleton getter.
static SystemFactory *instance();
private:
// This read-write lock is used by application on its close.
// Application locks this lock for WRITING.
// This means that if application locks that lock, then
// no other transaction-critical action can acquire lock
// for reading and won't be executed, so no critical action
// will be running when application quits
//
// EACH critical action locks this lock for READING.
// Several actions can lock this lock for reading.
// But of user decides to close the application (in other words,
// tries to lock the lock for writing), then no other
// action will be allowed to lock for reading.
QMutex *m_applicationCloseLock;
static QPointer<SystemFactory> s_instance;
};
#endif // SYSTEMFACTORY_H