From 5dbcc16c289d7067132d133b374a9b7dcd2c7fd2 Mon Sep 17 00:00:00 2001 From: Arno Date: Sun, 23 Jun 2013 03:27:31 +0200 Subject: Fix renaming items, protect colletor-vars with Mutexes This should be 2 commits, really... Fix: write cache after renaming an item Protect: protect the accessors of ArchiveCollector with Mutexes --- archivemodel.cpp | 27 +++++++++++++++++++++------ archivemodel.h | 5 ++++- 2 files changed, 25 insertions(+), 7 deletions(-) diff --git a/archivemodel.cpp b/archivemodel.cpp index c169b4d..a5d2298 100644 --- a/archivemodel.cpp +++ b/archivemodel.cpp @@ -9,6 +9,7 @@ #include #include #include +#include #include "smtreeitem.h" #include "archivemodel.h" @@ -70,6 +71,10 @@ bool ArchiveModel::setData(const QModelIndex &idx, const QVariant &value, int ro if(role != Qt::EditRole){ return false; } + // any other column is invisible, hence... + if(idx.column() != Name){ + return false; + } SmTreeItem *item = itemAt(idx); int nodeType = item->data(Type).toInt(); QSqlQuery updateQuery(mDb); @@ -86,15 +91,14 @@ bool ArchiveModel::setData(const QModelIndex &idx, const QVariant &value, int ro updateQuery.bindValue(":value", value); updateQuery.bindValue(":id", id); if(updateQuery.exec()){ - if(nodeType == GenreNode || nodeType == ActorNode){ - item->setData(Name, value); - emit dataChanged(idx, idx); - return true; - }else if(nodeType == SeriesNode){ - item->setData(Name, value); + item->setData(Name, value); + emit dataChanged(idx, idx); + if(nodeType == SeriesNode){ emit needRefresh(); return true; } + writeCache(mOrder); + return true; }else{ emitDatabaseError(updateQuery.lastError()); } @@ -333,7 +337,18 @@ ArchiveCollector::ArchiveCollector(int numFields, QObject *parent) : QThread(par mDb.open(); } +SmTreeItem *ArchiveCollector::rootItem() { + QMutexLocker l(&mAccessMx); + return mRootItem; +} + +int ArchiveCollector::sortOrder() { + QMutexLocker l(&mAccessMx); + return mSortOrder; +} + void ArchiveCollector::populate(int order, SmTreeItem *rootItem){ + QMutexLocker l(&mAccessMx); mRootItem = rootItem; mSortOrder = order; } diff --git a/archivemodel.h b/archivemodel.h index 08b4fd3..0e3e29c 100644 --- a/archivemodel.h +++ b/archivemodel.h @@ -12,6 +12,7 @@ #include #include #include +#include #include "smtreemodel.h" @@ -67,7 +68,8 @@ class ArchiveCollector : public QThread { Q_OBJECT public: explicit ArchiveCollector(int numFields, QObject *parent = 0); - SmTreeItem *rootItem() { return mRootItem; } + SmTreeItem *rootItem(); + int sortOrder(); public slots: void populate(int order, SmTreeItem *rootItem); @@ -87,6 +89,7 @@ class ArchiveCollector : public QThread { void fetchParts(const QVariant &id, SmTreeItem *parent); QSqlDatabase mDb; SmTreeItem *mRootItem; + QMutex mAccessMx; int mNumFields; int mSortOrder; }; -- cgit v1.2.3-70-g09d2