diff options
author | Arno <arno@disconnect.de> | 2017-09-21 19:53:05 +0200 |
---|---|---|
committer | Arno <arno@disconnect.de> | 2017-09-21 19:53:05 +0200 |
commit | ff7e948a9494b82ac3daae00e2c35675a2bb7233 (patch) | |
tree | 9907de7221ad33c99f34c3f24108b31d6ac25f3a /playerwidget.cpp | |
parent | e2d0533a7cb1ac3dcc80df20d2710c12d67f15e0 (diff) | |
download | BeetPlayer-ff7e948a9494b82ac3daae00e2c35675a2bb7233.tar.gz BeetPlayer-ff7e948a9494b82ac3daae00e2c35675a2bb7233.tar.bz2 BeetPlayer-ff7e948a9494b82ac3daae00e2c35675a2bb7233.zip |
Implement Favorites view
And make it possible to remove songs from favorites!
Diffstat (limited to 'playerwidget.cpp')
-rw-r--r-- | playerwidget.cpp | 60 |
1 files changed, 46 insertions, 14 deletions
diff --git a/playerwidget.cpp b/playerwidget.cpp index bc30aa0..ff5633d 100644 --- a/playerwidget.cpp +++ b/playerwidget.cpp @@ -40,7 +40,7 @@ #include "webdownloader.h" #include "webradiodialog.h" -PlayerWidget::PlayerWidget(QWidget *parent) : QWidget(parent), mDurSecs(0), mPlayListLength(0), mIsStream(false){ +PlayerWidget::PlayerWidget(QWidget *parent) : QWidget(parent), mDurSecs(0), mPlayListLength(0), mIsStream(false), mModelType(DoNotCare){ mStarting = true; setupGui(); createActions(); @@ -132,6 +132,8 @@ void PlayerWidget::setupGui(){ connect(mDeleteFilesA, &QAction::triggered, this, &PlayerWidget::doDeleteFiles); mRefreshA = new QAction(QIcon(":/refresh.png"), tr("Refresh"), this); connect(mRefreshA, &QAction::triggered, this, &PlayerWidget::doPopulateByFolder); + mRemoveFromFavoritesA = new QAction(QIcon(":/used_tampon.png"), tr("Remove from Favorites"), this); + connect(mRemoveFromFavoritesA, &QAction::triggered, this, &PlayerWidget::removeFromFavorites); //filter QGroupBox *filterGB = new QGroupBox(tr("Search")); @@ -398,6 +400,7 @@ void PlayerWidget::createActions(){ mView->addAction(miscMusicBrainzLeftA); mView->addAction(Helper::createSeparator(this)); mView->addAction(mRefreshA); + mView->addAction(mRemoveFromFavoritesA); mView->addAction(Helper::createSeparator(this)); mView->addAction(addToWebRadioA); mView->addAction(Helper::createSeparator(this)); @@ -742,6 +745,7 @@ void PlayerWidget::populateByWebradio(QStandardItem *parent){ void PlayerWidget::doPopulateByFolder(){ mCurrentModel = mFolderModel; + mModelType = Folders; mFolderModel->clear(); mFolderModel->setHorizontalHeaderLabels(QStringList() << tr("Name")); QDir d(mCurDir); @@ -796,6 +800,7 @@ void PlayerWidget::doPopulateByWebradio(){ mWebRadioModel->setHorizontalHeaderLabels(QStringList() << tr("Description")); QStandardItem *root = mWebRadioModel->invisibleRootItem(); populateByWebradio(root); + mModelType = WebRadio; mView->setModel(mWebRadioModel); emit viewModeChanged("WebRadio"); emit modelChanged(); @@ -811,6 +816,7 @@ void PlayerWidget::doPopulateByFavorites(){ emit message(QString(tr("Populating by Favorites... Please wait!"))); qApp->processEvents(); populateByFavorites(root); + mModelType = Favorites; qApp->restoreOverrideCursor(); emit viewModeChanged(tr("Favorites")); emit message(QString(tr("Done!"))); @@ -844,19 +850,12 @@ void PlayerWidget::populateByFavorites(QStandardItem *parent){ } void PlayerWidget::doModelChanged(){ - if(mCurrentModel == mFolderModel){ - mSelectFilesA->setEnabled(true); - mDeselectAllA->setEnabled(true); - mDeleteFilesA->setEnabled(true); - mRefreshA->setEnabled(true); - mSearchDirStack->setCurrentIndex(1); - }else{ - mSelectFilesA->setEnabled(false); - mDeselectAllA->setEnabled(false); - mDeleteFilesA->setEnabled(false); - mRefreshA->setEnabled(false); - mSearchDirStack->setCurrentIndex(0); - } + mSelectFilesA->setEnabled(mModelType == Folders); + mDeselectAllA->setEnabled(mModelType == Folders); + mDeleteFilesA->setEnabled(mModelType == Folders); + mRefreshA->setEnabled(mModelType == Folders); + mSearchDirStack->setCurrentIndex(1 ? mModelType == Folders : 0); + mRemoveFromFavoritesA->setEnabled(mModelType == Favorites); } void PlayerWidget::viewDoubleClicked(const QModelIndex &idx){ @@ -1275,6 +1274,38 @@ void PlayerWidget::removeFromPlayList(){ emit playListLengthChanged(mPlayListLength); } +void PlayerWidget::removeFromFavorites(){ + QModelIndexList sel = mView->selectionModel()->selectedRows(); + QSqlDatabase db = QSqlDatabase::database("beetplayerdb"); + QSqlQuery favRemoveQ(db); + favRemoveQ.prepare("DELETE FROM persistent_favorites WHERE tartist_name = :artist AND talbum_name = :album AND ttitle = :title"); + QVector<QStringList> toRemove; + foreach(QModelIndex i, sel){ + QStringList cur; + cur << i.data(ArtistRole).toString(); + cur << i.data(AlbumRole).toString(); + cur << i.data(TitleRole).toString(); + toRemove << cur; + } + int cnt = 0; + foreach(QStringList sl, toRemove){ + favRemoveQ.bindValue(":artist", sl.at(0)); + favRemoveQ.bindValue(":album", sl.at(1)); + favRemoveQ.bindValue(":title", sl.at(2)); + if(favRemoveQ.exec()){ + ++cnt; + } + } + QString msg; + if(cnt){ + doPopulateByFavorites(); + msg = QString(tr("Removed %1 favorites")).arg(QString::number(cnt)); + }else{ + msg = QString(tr("Failed to remove Favorite!")); + } + emit message(msg); +} + void PlayerWidget::addToFavorites(){ QModelIndexList sel = mPlayListView->selectionModel()->selectedRows(); QSqlDatabase db = QSqlDatabase::database("beetplayerdb"); @@ -1295,6 +1326,7 @@ void PlayerWidget::addToFavorites(){ } emit message(msg); } + doPopulateByFavorites(); } void PlayerWidget::clearPlayList(){ |