aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authortrialuser02 <trialuser02@90c681e8-e032-0410-971d-27865f9a5e38>2021-10-24 14:11:41 +0000
committertrialuser02 <trialuser02@90c681e8-e032-0410-971d-27865f9a5e38>2021-10-24 14:11:41 +0000
commit3a92defd77b55a416e90f9db9e38afe451b0456c (patch)
treede388f34874eb54e9e283066756d23f3e5e0a779
parent8bb61aac38bdfc0947a74fdfd0fa06011396faf3 (diff)
downloadqmmp-3a92defd77b55a416e90f9db9e38afe451b0456c.tar.gz
qmmp-3a92defd77b55a416e90f9db9e38afe451b0456c.tar.bz2
qmmp-3a92defd77b55a416e90f9db9e38afe451b0456c.zip
history: added feature to remove tracks from history
git-svn-id: http://svn.code.sf.net/p/qmmp-dev/code/trunk/qmmp@10369 90c681e8-e032-0410-971d-27865f9a5e38
-rw-r--r--src/plugins/General/history/historywindow.cpp37
-rw-r--r--src/plugins/General/history/historywindow.h4
2 files changed, 37 insertions, 4 deletions
diff --git a/src/plugins/General/history/historywindow.cpp b/src/plugins/General/history/historywindow.cpp
index 164f87e4e..7bf53808f 100644
--- a/src/plugins/General/history/historywindow.cpp
+++ b/src/plugins/General/history/historywindow.cpp
@@ -26,6 +26,7 @@
#include <QProgressBar>
#include <QTreeWidgetItem>
#include <QFile>
+#include <QMenu>
#include <QtDebug>
#include <qmmp/qmmp.h>
#include <qmmpui/mediaplayer.h>
@@ -36,6 +37,7 @@
#include "ui_historywindow.h"
#define PathRole (Qt::UserRole + 4)
+#define IdRole (Qt::UserRole + 5)
HistoryWindow::HistoryWindow(QSqlDatabase db, QWidget *parent) :
QWidget(parent),
@@ -60,6 +62,7 @@ HistoryWindow::HistoryWindow(QSqlDatabase db, QWidget *parent) :
m_ui->historyTreeWidget->header()->setSortIndicator(0, Qt::AscendingOrder);
m_ui->historyTreeWidget->header()->setSortIndicatorShown(true);
m_ui->historyTreeWidget->header()->setSectionsClickable(true);
+ m_ui->historyTreeWidget->setContextMenuPolicy(Qt::CustomContextMenu);
readSettings();
connect(m_ui->historyTreeWidget->header(), SIGNAL(sortIndicatorChanged(int, Qt::SortOrder)),
SLOT(onSortIndicatorChanged(int, Qt::SortOrder)));
@@ -84,12 +87,12 @@ void HistoryWindow::loadHistory()
if(m_ui->historyTreeWidget->header()->sortIndicatorOrder() == Qt::DescendingOrder)
{
- query.prepare("SELECT Timestamp,Title,Artist,AlbumArtist,Album,Comment,Genre,Composer,Track,Year,Duration,URL "
+ query.prepare("SELECT Timestamp,Title,Artist,AlbumArtist,Album,Comment,Genre,Composer,Track,Year,Duration,URL,ID "
"FROM track_history WHERE Timestamp BETWEEN :from and :to ORDER BY id DESC");
}
else
{
- query.prepare("SELECT Timestamp,Title,Artist,AlbumArtist,Album,Comment,Genre,Composer,Track,Year,Duration,URL "
+ query.prepare("SELECT Timestamp,Title,Artist,AlbumArtist,Album,Comment,Genre,Composer,Track,Year,Duration,URL,ID "
"FROM track_history WHERE Timestamp BETWEEN :from and :to");
}
query.bindValue(":from", m_ui->fromDateEdit->dateTime().toUTC().toString("yyyy-MM-dd hh:mm:ss"));
@@ -140,6 +143,7 @@ void HistoryWindow::loadHistory()
item->setText(0, timeStr);
item->setText(1, m_formatter.format(info));
item->setData(1, PathRole, info.path());
+ item->setData(1, IdRole, query.value(12).toLongLong());
topLevelItem->addChild(item);
}
@@ -360,6 +364,21 @@ void HistoryWindow::readSettings()
settings.endGroup();
}
+void HistoryWindow::removeTrack(QTreeWidgetItem *item)
+{
+ if(!m_db.isOpen())
+ return;
+
+ qint64 id = item->data(1, IdRole).toLongLong();
+
+ QSqlQuery query(m_db);
+
+ query.prepare("DELETE FROM track_history WHERE ID=:id");
+ query.bindValue(":id", id);
+ if(query.exec())
+ delete item;
+}
+
void HistoryWindow::closeEvent(QCloseEvent *)
{
QSettings settings(Qmmp::configFile(), QSettings::IniFormat);
@@ -426,6 +445,20 @@ void HistoryWindow::on_historyTreeWidget_itemDoubleClicked(QTreeWidgetItem *item
on_topSongsTreeWidget_itemDoubleClicked(item, 0);
}
+void HistoryWindow::on_historyTreeWidget_customContextMenuRequested(const QPoint &pos)
+{
+ QTreeWidgetItem *item = m_ui->historyTreeWidget->itemAt(pos);
+ if(item && item->parent())
+ {
+ QString path = item->data(1, PathRole).toString();
+ QMenu menu(this);
+ menu.addAction(QIcon::fromTheme("list-add"),tr("Add to Playlist"), [=] { PlayListManager::instance()->add(path); } );
+ menu.addSeparator();
+ menu.addAction(QIcon::fromTheme("edit-delete"), tr("Remove from History"), [=] { removeTrack(item); } );
+ menu.exec(m_ui->historyTreeWidget->viewport()->mapToGlobal(pos));
+ }
+}
+
void HistoryWindow::on_topSongsTreeWidget_itemDoubleClicked(QTreeWidgetItem *item, int)
{
QString path = item->data(1, PathRole).toString();
diff --git a/src/plugins/General/history/historywindow.h b/src/plugins/General/history/historywindow.h
index d75340866..4a92bd39a 100644
--- a/src/plugins/General/history/historywindow.h
+++ b/src/plugins/General/history/historywindow.h
@@ -47,13 +47,12 @@ private slots:
void on_fromButton_clicked();
void on_toButton_clicked();
void on_historyTreeWidget_itemDoubleClicked(QTreeWidgetItem *item, int);
+ void on_historyTreeWidget_customContextMenuRequested(const QPoint &pos);
void on_topSongsTreeWidget_itemDoubleClicked(QTreeWidgetItem *item, int);
void onSortIndicatorChanged(int index, Qt::SortOrder order);
void playTrack(PlayListTrack *item);
void disconnectPl();
-
-
private:
void loadHistory();
void loadDistribution();
@@ -61,6 +60,7 @@ private:
void loadTopArtists();
void loadTopGenres();
void readSettings();
+ void removeTrack(QTreeWidgetItem *item);
void closeEvent(QCloseEvent *) override;
Ui::HistoryWindow *m_ui;