summaryrefslogtreecommitdiffstats
path: root/playerwidget.cpp
diff options
context:
space:
mode:
authorArno <arno@disconnect.de>2017-09-21 19:53:05 +0200
committerArno <arno@disconnect.de>2017-09-21 19:53:05 +0200
commitff7e948a9494b82ac3daae00e2c35675a2bb7233 (patch)
tree9907de7221ad33c99f34c3f24108b31d6ac25f3a /playerwidget.cpp
parente2d0533a7cb1ac3dcc80df20d2710c12d67f15e0 (diff)
downloadBeetPlayer-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.cpp60
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(){