-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathdatabasemanager.cpp
More file actions
153 lines (134 loc) · 4.35 KB
/
Copy pathdatabasemanager.cpp
File metadata and controls
153 lines (134 loc) · 4.35 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
#include "databasemanager.h"
#include <QStandardPaths>
#include <QDir>
#include <QDebug>
#include <QtSql/QSqlQuery>
#include <QtSql/QSqlError>
DatabaseManager& DatabaseManager::instance() {
static DatabaseManager mgr;
return mgr;
}
bool DatabaseManager::open() {
QString appDataPath = QStandardPaths::writableLocation(QStandardPaths::AppDataLocation);
QDir().mkpath(appDataPath);
QString dbPath = appDataPath + "/storage.sqlite3";
db = QSqlDatabase::addDatabase("QSQLITE");
db.setDatabaseName(dbPath);
if (!db.open()) {
qWarning() << "Could not open database:" << db.lastError().text();
return false;
}
createTablesIfNeeded();
return true;
}
void DatabaseManager::createTablesIfNeeded() {
QSqlQuery q;
q.exec("CREATE TABLE IF NOT EXISTS folders ("
"RecID INTEGER PRIMARY KEY AUTOINCREMENT,"
"SortBy INTEGER,"
"Folder TEXT)");
q.exec("CREATE TABLE IF NOT EXISTS snippets ("
"RecID INTEGER PRIMARY KEY AUTOINCREMENT,"
"FolderID INTEGER,"
"SnippetTitle TEXT,"
"SnippetDesc TEXT,"
"SnippetCode TEXT,"
"SnippetNote TEXT)");
q.exec("CREATE TABLE IF NOT EXISTS settings ("
"Key TEXT PRIMARY KEY,"
"Value TEXT)");
}
QList<Folder> DatabaseManager::fetchFolders() {
QList<Folder> folders;
QSqlQuery q("SELECT RecID, SortBy, Folder FROM folders ORDER BY SortBy ASC");
while (q.next()) {
folders.append({ q.value(0).toInt(), q.value(1).toInt(), q.value(2).toString() });
}
return folders;
}
int DatabaseManager::insertFolder(const QString& name) {
QSqlQuery q;
q.prepare("INSERT INTO folders (SortBy, Folder) VALUES (0, ?)");
q.addBindValue(name);
q.exec();
return q.lastInsertId().toInt();
}
void DatabaseManager::renameFolder(int id, const QString& newName) {
QSqlQuery q;
q.prepare("UPDATE folders SET Folder = ? WHERE RecID = ?");
q.addBindValue(newName);
q.addBindValue(id);
q.exec();
}
void DatabaseManager::deleteFolder(int id) {
QSqlQuery q;
q.prepare("DELETE FROM snippets WHERE FolderID = ?");
q.addBindValue(id);
q.exec();
q.prepare("DELETE FROM folders WHERE RecID = ?");
q.addBindValue(id);
q.exec();
}
void DatabaseManager::updateFolderSortOrder(int folderID, int sortOrder) {
QSqlQuery q;
q.prepare("UPDATE folders SET SortBy = ? WHERE RecID = ?");
q.addBindValue(sortOrder);
q.addBindValue(folderID);
q.exec();
}
QList<Snippet> DatabaseManager::fetchSnippets(int folderID) {
QList<Snippet> list;
QSqlQuery q;
q.prepare("SELECT RecID, FolderID, SnippetTitle, SnippetDesc, SnippetCode, SnippetNote "
"FROM snippets WHERE FolderID = ? ORDER BY SnippetTitle ASC");
q.addBindValue(folderID);
q.exec();
while (q.next()) {
list.append({
q.value(0).toInt(), q.value(1).toInt(),
q.value(2).toString(), q.value(3).toString(),
q.value(4).toString(), q.value(5).toString()
});
}
return list;
}
int DatabaseManager::insertSnippet(int folderID) {
QSqlQuery q;
q.prepare("INSERT INTO snippets (FolderID, SnippetTitle, SnippetDesc, SnippetCode, SnippetNote) "
"VALUES (?, '', '', '', '')");
q.addBindValue(folderID);
q.exec();
return q.lastInsertId().toInt();
}
void DatabaseManager::updateSnippet(const Snippet& s) {
QSqlQuery q;
q.prepare("UPDATE snippets SET SnippetTitle=?, SnippetDesc=?, SnippetCode=?, SnippetNote=? "
"WHERE RecID=?");
q.addBindValue(s.title);
q.addBindValue(s.description);
q.addBindValue(s.code);
q.addBindValue(s.note);
q.addBindValue(s.id);
q.exec();
}
void DatabaseManager::deleteSnippet(int id) {
QSqlQuery q;
q.prepare("DELETE FROM snippets WHERE RecID = ?");
q.addBindValue(id);
q.exec();
}
void DatabaseManager::saveSetting(const QString& key, const QString& value) {
QSqlQuery q;
q.prepare("REPLACE INTO settings (Key, Value) VALUES (?, ?)");
q.addBindValue(key);
q.addBindValue(value);
q.exec();
}
QString DatabaseManager::getSetting(const QString& key, const QString& defaultValue) {
QSqlQuery q;
q.prepare("SELECT Value FROM settings WHERE Key = ? LIMIT 1");
q.addBindValue(key);
q.exec();
if (q.next()) return q.value(0).toString();
return defaultValue;
}