diff options
author | Arno <am@disconnect.de> | 2013-08-11 03:42:04 +0200 |
---|---|---|
committer | Arno <am@disconnect.de> | 2013-08-11 03:42:04 +0200 |
commit | fa226c66caf80f9f5041f9616d057309e8f958c0 (patch) | |
tree | df6c66d76c69358f95c60bd1079896b07b658183 | |
parent | 43fe74b668dd3927f01f2aad8c8c995d498007e1 (diff) | |
download | SheMov-fa226c66caf80f9f5041f9616d057309e8f958c0.tar.gz SheMov-fa226c66caf80f9f5041f9616d057309e8f958c0.tar.bz2 SheMov-fa226c66caf80f9f5041f9616d057309e8f958c0.zip |
Implement Favorites
Re-Implement mark as Favorites in new ArchiveView.
Also, don't block when the Collector is running again and we're trying
to update the view.
-rw-r--r-- | archivemodel.cpp | 27 | ||||
-rw-r--r-- | archivemodel.h | 2 | ||||
-rw-r--r-- | archiveview.cpp | 11 | ||||
-rw-r--r-- | archiveview.h | 1 | ||||
-rw-r--r-- | shemov.cpp | 14 | ||||
-rw-r--r-- | shemov.h | 3 |
6 files changed, 53 insertions, 5 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); diff --git a/archivemodel.h b/archivemodel.h index 8323385..e4ed513 100644 --- a/archivemodel.h +++ b/archivemodel.h @@ -52,6 +52,7 @@ class ArchiveModel : public SmTreeModel { QStringList allSources() const; QStringList allReleaseGroups() const; bool setPartNo(int partId, int newPartId, const QString &subtitle); + bool setFavorite(int partId, bool favorite); signals: void needRefresh(); @@ -83,6 +84,7 @@ class ArchiveModel : public SmTreeModel { QList<ArchiveCollector*> mCollectors; QHash<int, QIcon> mNodeIcons; QMutex mCacheMx; + QMutex mRootAccessMx; int mOrder; }; diff --git a/archiveview.cpp b/archiveview.cpp index 27aacc9..295ddae 100644 --- a/archiveview.cpp +++ b/archiveview.cpp @@ -371,6 +371,17 @@ void ArchiveTree::editSeriesPart(){ } } +void ArchiveTree::markAsFavorite(){ + QModelIndex idx = firstSelected(); + if(!idx.isValid()){ + return; + } + int pId = idx.data(ArchiveModel::SeriesPartIdRole).toInt(); + bool fav = idx.data(ArchiveModel::FavoriteRole).toBool(); + ArchiveController *c = SmGlobals::instance()->archiveController(); + c->archiveTreeModel()->setFavorite(pId, !fav); +} + void ArchiveTree::impossible(const QString msg){ QMessageBox::critical(this, tr("Error"), msg); } diff --git a/archiveview.h b/archiveview.h index c786b33..36e915c 100644 --- a/archiveview.h +++ b/archiveview.h @@ -89,6 +89,7 @@ class ArchiveTree : public SmTreeView { void editGenres(); void editMetadata(); void editSeriesPart(); + void markAsFavorite(); private: void impossible(const QString msg = tr("Unable to perform function!")); @@ -583,9 +583,13 @@ void SheMov::createActions(){ mArchiveViewMetadataA->setData(ArchiveModel::SeriesPartNode); connect(mArchiveViewMetadataA, SIGNAL(triggered()), c->archiveTree(), SLOT(editMetadata())); // refresh all - mRefreshArchiveA = new QAction(tr("Refresh"), this); - mRefreshArchiveA->setData(ArchiveModel::AllNodes); - connect(mRefreshArchiveA, SIGNAL(triggered()), c->archiveView(), SLOT(refreshArchive())); + mArchiveViewRefreshA = new QAction(tr("Refresh"), this); + mArchiveViewRefreshA->setData(ArchiveModel::AllNodes); + connect(mArchiveViewRefreshA, SIGNAL(triggered()), c->archiveView(), SLOT(refreshArchive())); + // mark as favorite + mArchiveViewMarkFavA = new QAction(tr("Mark as favorite"), this); + mArchiveViewMarkFavA->setData(ArchiveModel::SeriesPartNode); + connect(mArchiveViewMarkFavA, SIGNAL(triggered()), c->archiveTree(), SLOT(markAsFavorite())); // ArchiveFiles actions <- ArchiveView! // play selected @@ -778,7 +782,9 @@ void SheMov::createMenus(){ c->addActionForTree(mArchiveViewPartnoA); c->addActionForTree(mArchiveViewMetadataA); c->addActionForTree(createSeparator()); - c->addActionForTree(mRefreshArchiveA); + c->addActionForTree(mArchiveViewMarkFavA); + c->addActionForTree(createSeparator()); + c->addActionForTree(mArchiveViewRefreshA); QMenu *archiveTreeM = new QMenu(tr("Archive"), this); archiveTreeM->addActions(c->archiveTree()->actions()); @@ -141,7 +141,8 @@ class SheMov : public QMainWindow { QAction *mArchiveViewGenresA; QAction *mArchiveViewPartnoA; QAction *mArchiveViewMetadataA; - QAction *mRefreshArchiveA; + QAction *mArchiveViewRefreshA; + QAction *mArchiveViewMarkFavA; QActionGroup *mArchiveFilesAG; //ArchiveFiles actions |