mirror of
https://github.com/laurent22/joplin.git
synced 2024-12-24 10:27:10 +02:00
Moved db operations under model
This commit is contained in:
parent
2491a8dab5
commit
bc6f419d1e
@ -101,7 +101,7 @@ void Application::afterSessionInitialization() {
|
|||||||
QString sessionId = settings.value("sessionId").toString();
|
QString sessionId = settings.value("sessionId").toString();
|
||||||
qDebug() << "Session:" << sessionId;
|
qDebug() << "Session:" << sessionId;
|
||||||
api_.setSessionId(sessionId);
|
api_.setSessionId(sessionId);
|
||||||
synchronizer_.start();
|
//synchronizer_.start();
|
||||||
}
|
}
|
||||||
|
|
||||||
void Application::view_currentFolderChanged() {
|
void Application::view_currentFolderChanged() {
|
||||||
|
@ -1,7 +1,68 @@
|
|||||||
#include "models/folder.h"
|
#include "models/folder.h"
|
||||||
|
|
||||||
|
#include "database.h"
|
||||||
|
#include "uuid.h"
|
||||||
|
|
||||||
using namespace jop;
|
using namespace jop;
|
||||||
|
|
||||||
Folder::Folder() {
|
Folder::Folder() {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool Folder::isNew() const {
|
||||||
|
return id().isEmpty();
|
||||||
|
}
|
||||||
|
|
||||||
|
bool Folder::save() {
|
||||||
|
bool isNew = this->isNew();
|
||||||
|
|
||||||
|
QStringList fields;
|
||||||
|
VariantVector values;
|
||||||
|
if (isNew) {
|
||||||
|
setId(uuid::createUuid());
|
||||||
|
fields << "id";
|
||||||
|
values << id();
|
||||||
|
}
|
||||||
|
fields << "title" << "synced";
|
||||||
|
values << title() << QVariant(0);
|
||||||
|
|
||||||
|
if (isNew) {
|
||||||
|
QSqlQuery q = jop::db().buildSqlQuery(Database::Insert, "folders", fields, values);
|
||||||
|
q.exec();
|
||||||
|
return jop::db().errorCheck(q);
|
||||||
|
} else {
|
||||||
|
QSqlQuery q = jop::db().buildSqlQuery(Database::Update, "folders", fields, values, "id = \"" + id() + "\"");
|
||||||
|
q.exec();
|
||||||
|
return jop::db().errorCheck(q);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
bool Folder::dispose() {
|
||||||
|
QSqlQuery q(jop::db().database());
|
||||||
|
q.prepare("DELETE FROM folders WHERE id = :id");
|
||||||
|
q.bindValue(":id", id());
|
||||||
|
q.exec();
|
||||||
|
return jop::db().errorCheck(q);
|
||||||
|
}
|
||||||
|
|
||||||
|
int Folder::count() {
|
||||||
|
QSqlQuery q = jop::db().query("SELECT count(*) as row_count FROM folders");
|
||||||
|
q.exec();
|
||||||
|
q.next();
|
||||||
|
return q.value(0).toInt();
|
||||||
|
}
|
||||||
|
|
||||||
|
QVector<Folder> Folder::all(const QString &orderBy) {
|
||||||
|
QSqlQuery q = jop::db().query("SELECT " + Folder::dbFields().join(",") + " FROM folders ORDER BY " + orderBy);
|
||||||
|
q.exec();
|
||||||
|
|
||||||
|
QVector<Folder> output;
|
||||||
|
|
||||||
|
while (q.next()) {
|
||||||
|
Folder folder;
|
||||||
|
folder.fromSqlQuery(q);
|
||||||
|
output.push_back(folder);
|
||||||
|
}
|
||||||
|
|
||||||
|
return output;
|
||||||
|
}
|
||||||
|
@ -11,8 +11,12 @@ class Folder : public Item {
|
|||||||
public:
|
public:
|
||||||
|
|
||||||
Folder();
|
Folder();
|
||||||
|
bool isNew() const;
|
||||||
|
bool save();
|
||||||
|
bool dispose();
|
||||||
|
|
||||||
|
static int count();
|
||||||
|
static QVector<Folder> all(const QString& orderBy);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
||||||
|
@ -8,11 +8,7 @@ FolderModel::FolderModel(Database &database) : QAbstractListModel(), db_(databas
|
|||||||
}
|
}
|
||||||
|
|
||||||
int FolderModel::rowCount(const QModelIndex & parent) const {
|
int FolderModel::rowCount(const QModelIndex & parent) const {
|
||||||
Q_UNUSED(parent);
|
return Folder::count() + (virtualItemShown_ ? 1 : 0);
|
||||||
QSqlQuery q = db_.query("SELECT count(*) as row_count FROM folders");
|
|
||||||
q.exec();
|
|
||||||
q.next();
|
|
||||||
return q.value(0).toInt() + (virtualItemShown_ ? 1 : 0);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// NOTE: to lazy load - send back "Loading..." if item not currently loaded
|
// NOTE: to lazy load - send back "Loading..." if item not currently loaded
|
||||||
@ -42,17 +38,8 @@ bool FolderModel::setData(const QModelIndex &index, const QVariant &value, int r
|
|||||||
Folder folder = atIndex(index.row());
|
Folder folder = atIndex(index.row());
|
||||||
|
|
||||||
if (role == Qt::EditRole) {
|
if (role == Qt::EditRole) {
|
||||||
emit dataChanging();
|
folder.setTitle(value.toString());
|
||||||
|
if (!folder.save()) return false;
|
||||||
QStringList fields;
|
|
||||||
VariantVector values;
|
|
||||||
fields << "title" << "synced";
|
|
||||||
values << value << QVariant(0);
|
|
||||||
|
|
||||||
QSqlQuery q = db_.buildSqlQuery(Database::Update, "folders", fields, values, "id = \"" + folder.id() + "\"");
|
|
||||||
q.exec();
|
|
||||||
if (!db_.errorCheck(q)) return false;
|
|
||||||
|
|
||||||
cache_.clear();
|
cache_.clear();
|
||||||
|
|
||||||
QVector<int> roles;
|
QVector<int> roles;
|
||||||
@ -77,14 +64,7 @@ Folder FolderModel::atIndex(int index) const {
|
|||||||
|
|
||||||
cache_.clear();
|
cache_.clear();
|
||||||
|
|
||||||
QSqlQuery q = db_.query("SELECT " + Folder::dbFields().join(",") + " FROM folders ORDER BY " + orderBy_);
|
cache_ = Folder::all(orderBy_);
|
||||||
q.exec();
|
|
||||||
|
|
||||||
while (q.next()) {
|
|
||||||
Folder folder;
|
|
||||||
folder.fromSqlQuery(q);
|
|
||||||
cache_.push_back(folder);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!cache_.size()) {
|
if (!cache_.size()) {
|
||||||
qWarning() << "Invalid folder index:" << index;
|
qWarning() << "Invalid folder index:" << index;
|
||||||
@ -144,19 +124,13 @@ QHash<int, QByteArray> FolderModel::roleNames() const {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void FolderModel::addData(const QString &title) {
|
void FolderModel::addData(const QString &title) {
|
||||||
QStringList fields;
|
Folder folder;
|
||||||
VariantVector values;
|
folder.setTitle(title);
|
||||||
QString folderId = uuid::createUuid();
|
if (!folder.save()) return;
|
||||||
fields << "id" << "title" << "synced";
|
|
||||||
values << folderId << QVariant(title) << QVariant(0);
|
|
||||||
|
|
||||||
QSqlQuery q = db_.buildSqlQuery(Database::Insert, "folders", fields, values);
|
|
||||||
q.exec();
|
|
||||||
if (!db_.errorCheck(q)) return;
|
|
||||||
|
|
||||||
cache_.clear();
|
cache_.clear();
|
||||||
|
|
||||||
lastInsertId_ = folderId;
|
lastInsertId_ = folder.id();
|
||||||
|
|
||||||
QVector<int> roles;
|
QVector<int> roles;
|
||||||
roles << Qt::DisplayRole;
|
roles << Qt::DisplayRole;
|
||||||
@ -173,13 +147,8 @@ void FolderModel::addData(const QString &title) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void FolderModel::deleteData(const int index) {
|
void FolderModel::deleteData(const int index) {
|
||||||
QString folderId = idAtIndex(index);
|
Folder folder = atIndex(index);
|
||||||
|
if (!folder.dispose()) return;
|
||||||
QSqlQuery q(db_.database());
|
|
||||||
q.prepare("DELETE FROM folders WHERE id = :id");
|
|
||||||
q.bindValue(":id", folderId);
|
|
||||||
q.exec();
|
|
||||||
if (!db_.errorCheck(q)) return;
|
|
||||||
|
|
||||||
cache_.clear();
|
cache_.clear();
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user