1 #ifndef USERDATADBMGR_H
2 #define USERDATADBMGR_H
3 
4 #include <QObject>
5 #include <QSqlDatabase>
6 #include <QSqlDriver>
7 #include <QString>
8 #include <QStringList>
9 #include <QList>
10 #include <QHash>
11 
12 class UserDataDatabaseManager : public QObject
13 {
14 	Q_OBJECT
15 
16 	public:
17 		explicit UserDataDatabaseManager(QObject *parent);
18 		~UserDataDatabaseManager();
19 
20 		QString emulatorVersion();
21 		void setEmulatorVersion(QString emu_version);
22 		QString qmc2Version();
23 		void setQmc2Version(QString qmc2_version);
24 		int userDataVersion();
25 		void setUserDataVersion(int userdata_version);
26 		int rank(QString id);
27 		int rank(int rowid);
28 		void setRank(QString id, int rank);
29 		QString comment(QString id);
30 		QString comment(int rowid);
31 		void setComment(QString id, QString comment);
32 		QString &id(int rowid);
33 		bool exists(QString id);
34 		void cleanUp();
35 		void remove(QString id);
36 
37 		void setHiddenLists(QString id, QStringList lists);
38 		QStringList hiddenLists(QString id);
39 		void removeHiddenLists(QString id);
40 
41 		void setListFavorites(QString id, QStringList favorites);
42 		QStringList listFavorites(QString id);
43 		void removeListFavorites(QString id);
44 
45 		void setDeviceConfigs(QString id, QStringList device_configs);
46 		QStringList deviceConfigs(QString id);
47 		void removeDeviceConfigs(QString id);
48 
49 		void setSelectedSoftware(QString id, QString softwareList, QString softwareName);
50 		bool getSelectedSoftware(QString id, QString *softwareList, QString *softwareName);
51 		void removeSelectedSoftware(QString id);
52 
logActive()53 		bool logActive() { return m_logActive; }
setLogActive(bool enable)54 		void setLogActive(bool enable) { m_logActive = enable; }
55 
56 		qint64 userDataRowCount();
57 		qint64 nextRowId(bool refreshRowIds = false);
58 
rankCacheComplete()59 		bool rankCacheComplete() { return userDataRowCount() == m_rankCache.count(); }
60 		void fillUpRankCache();
rankCache()61 		QHash<QString, int> &rankCache() { return m_rankCache; }
commentCacheComplete()62 		bool commentCacheComplete() { return userDataRowCount() == m_commentCache.count(); }
63 		void fillUpCommentCache();
commentCache()64 		QHash<QString, QString> &commentCache() { return m_commentCache; }
65 
66 		void setSystemManualPath(const QString &id, const QString &path);
67 		QString systemManualPath(const QString &id);
68 		QStringList systemManualPaths(const QString &id);
69 		void setSoftwareManualPath(const QString &list, const QString &id, const QString &path);
70 		QString softwareManualPath(const QString &list, const QString &id);
71 		QStringList softwareManualPaths(const QString &list, const QString &id);
72 
connectionName()73 		QString connectionName() { return m_connectionName; }
databasePath()74 		QString databasePath() { return m_db.databaseName(); }
75 		quint64 databaseSize();
76 		void setCacheSize(quint64 kiloBytes);
77 		void setSyncMode(uint syncMode);
78 		void setJournalMode(uint journalMode);
79 
80 		QStringList columnNames(QString tableName);
81 
82 	public slots:
83 		void recreateDatabase();
beginTransaction()84 		void beginTransaction() { m_db.driver()->beginTransaction(); }
commitTransaction()85 		void commitTransaction() { m_db.driver()->commitTransaction(); }
clearRankCache()86 		void clearRankCache() { m_rankCache.clear(); }
clearCommentCache()87 		void clearCommentCache() { m_commentCache.clear(); }
88 		void recreateSoftListTable();
89 		void recreateSystemManualTable();
90 		void recreateSoftwareManualTable();
91 
92 	private:
93 		void addSoftListFavoritesColumn();
94 		void addSoftListDeviceConfigsColumn();
95 		void addSoftListSelectedSoftwareColumn();
96 		void renameSoftListTable();
97 
98 		mutable QSqlDatabase m_db;
99 		QString m_tableBasename;
100 		QString m_tableBasenameSL;
101 		QString m_oldTableBasenameSL;
102 		QString m_tableBasenameSystemManuals;
103 		QString m_tableBasenameSoftwareManuals;
104 		QString m_connectionName;
105 		QString m_idString;
106 		bool m_logActive;
107 		QList<qint64> m_rowIdList;
108 		qint64 m_lastRowId;
109 		QHash<QString, int> m_rankCache;
110 		QHash<QString, QString> m_commentCache;
111 };
112 
113 #endif
114