summaryrefslogtreecommitdiffstats
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
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!
-rw-r--r--beetplayer.qrc1
-rw-r--r--playerwidget.cpp60
-rw-r--r--playerwidget.h4
-rw-r--r--used_tampon.pngbin0 -> 757 bytes
4 files changed, 51 insertions, 14 deletions
diff --git a/beetplayer.qrc b/beetplayer.qrc
index 83c18e5..b8b0ab0 100644
--- a/beetplayer.qrc
+++ b/beetplayer.qrc
@@ -31,5 +31,6 @@
<file>quadd.png</file>
<file>dog_hood.png</file>
<file>male_chastity_belt.png</file>
+ <file>used_tampon.png</file>
</qresource>
</RCC>
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(){
diff --git a/playerwidget.h b/playerwidget.h
index 44896db..e5764e5 100644
--- a/playerwidget.h
+++ b/playerwidget.h
@@ -31,6 +31,7 @@ class PlayerWidget : public QWidget {
enum ItemType { Artist, Album, Song, Genre, WebRadio };
enum PopulateType { FilterType, IdType, EmptyType };
enum CustomRoles { TypeRole = Qt::UserRole + 1, IdRole = Qt::UserRole + 2, FullPathRole = Qt::UserRole + 3, GenreRole = Qt::UserRole + 4, ArtistRole = Qt::UserRole + 5, TitleRole = Qt::UserRole + 6, AlbumRole = Qt::UserRole + 7, LengthRole = Qt::UserRole + 8, UrlRole = Qt::UserRole + 9, RemoteRole = Qt::UserRole + 10 };
+ enum ModelType { Webradio, Favorites, Folders, DoNotCare };
explicit PlayerWidget(QWidget *parent = 0);
~PlayerWidget();
const QMediaPlayer* player() const { return mPlayer; }
@@ -65,6 +66,7 @@ class PlayerWidget : public QWidget {
void addToPlayList();
void addToPlayListAndClear();
void removeFromPlayList();
+ void removeFromFavorites();
void addToFavorites();
void clearPlayList();
void shufflePlayList();
@@ -149,6 +151,7 @@ class PlayerWidget : public QWidget {
QAction *mDeselectAllA;
QAction *mDeleteFilesA;
QAction *mRefreshA;
+ QAction *mRemoveFromFavoritesA;
qint64 mDurSecs;
quint64 mPlayListLength;
QString mCurDir;
@@ -161,6 +164,7 @@ class PlayerWidget : public QWidget {
WebDownloader *mWebDownloader;
QMap<QString, QVariant> mOtherMeta;
bool mIsStream;
+ int mModelType;
};
#endif // PLAYERWIDGET_H
diff --git a/used_tampon.png b/used_tampon.png
new file mode 100644
index 0000000..73c318f
--- /dev/null
+++ b/used_tampon.png
Binary files differ