diff options
Diffstat (limited to 'archivemodel.cpp')
-rw-r--r-- | archivemodel.cpp | 27 |
1 files changed, 27 insertions, 0 deletions
diff --git a/archivemodel.cpp b/archivemodel.cpp index 3fb8188..774265f 100644 --- a/archivemodel.cpp +++ b/archivemodel.cpp @@ -106,6 +106,9 @@ QVariant ArchiveModel::data(const QModelIndex &index, int role) const{ if(role == SubtitleRole){ return item->data(Subtitle); } + if(role == FavoriteRole){ + return item->data(Favorite); + } if(role == Qt::DecorationRole){ if(index.column() == 0){ return mNodeIcons.value(item->data(Type).toInt()); @@ -481,6 +484,25 @@ bool ArchiveModel::setPartNo(int partId, int newPartId, const QString &subtitle) return true; } +bool ArchiveModel::setFavorite(int partId, bool favorite){ + QSqlQuery favQ(mDb); + favQ.prepare("UPDATE seriesparts SET bfavorite = :fav WHERE iseriesparts_id = :id"); + favQ.bindValue(":id", partId); + favQ.bindValue(":fav", favorite); + if(favQ.exec()){ + QMutexLocker l(&mRootAccessMx); + QModelIndex idx = findRecursive(partId, SeriesPartId, rootIndex()); + if(idx.isValid()){ + SmTreeItem *item = itemAt(idx); + item->setData(Favorite, favorite); + emit dataChanged(idx, idx); + refresh(); + return true; + } + } + return false; +} + QStringList ArchiveModel::allSources() const{ QSqlQuery sQ("SELECT DISTINCT(tsourcemedium) FROM metadata ORDER BY tsourcemedium ASC", mDb); QStringList retval; @@ -545,9 +567,14 @@ void ArchiveModel::collectorFinished(QObject *thread){ if(t->isCancelled()){ return; } + // don't block the GUI if we're already running again! + if(t->isRunning()){ + return; + } SmTreeItem *rootCopy = t->rootItem(); int sortOrder = t->sortOrder(); if(sortOrder == mOrder){ + QMutexLocker l(&mRootAccessMx); setRoot(rootCopy); } writeCache(sortOrder, rootCopy); |