summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--playerwidget.cpp84
-rw-r--r--playerwidget.h2
2 files changed, 86 insertions, 0 deletions
diff --git a/playerwidget.cpp b/playerwidget.cpp
index 66ca04c..ce62306 100644
--- a/playerwidget.cpp
+++ b/playerwidget.cpp
@@ -23,6 +23,7 @@
#include <QTimer>
#include <QStackedLayout>
#include <QApplication>
+#include <QDateTime>
#include <algorithm>
#include <taglib/fileref.h>
@@ -90,6 +91,10 @@ void PlayerWidget::setupGui(){
viewByGenreA->setCheckable(true);
viewAG->addAction(viewByGenreA);
connect(viewByGenreA, &QAction::triggered, this, &PlayerWidget::doPopulateByGenre);
+ QAction *viewByDateA = new QAction(QIcon(":/bizarre_amputee.png"), tr("View by date"), this);
+ viewByDateA->setCheckable(true);
+ viewAG->addAction(viewByDateA);
+ connect(viewByDateA, &QAction::triggered, this, &PlayerWidget::doPopulateByDate);
viewAG->addAction(Helper::createSeparator(this));
QAction *viewByFolderA = new QAction(QIcon(":/folder.png"), tr("View by folder"), this);
viewByFolderA->setCheckable(true);
@@ -536,6 +541,69 @@ void PlayerWidget::populateBySong(QStandardItem *parent, const QVariant &filter,
}
}
+void PlayerWidget::populateByDate(QStandardItem *parent){
+ QSqlDatabase db = QSqlDatabase::database("beetplayerdb");
+ QStandardItem *root = parent;
+ QIcon dateIcon(":/bizarre_amputee.png");
+ root->setIcon(dateIcon);
+ QIcon albumIcon(":/album.png");
+ QIcon songIcon(":/song.png");
+ QSqlQuery q1("SELECT DISTINCT(albums.ialbums_id), talbum_name, dadded, tartists_name FROM albums, artists, songs WHERE albums.ialbums_id = songs.ialbums_id AND songs.iartists_id = artists.iartists_id ORDER BY dadded DESC", db);
+ QSqlQuery songQ(db);
+ songQ.prepare("SELECT sipos, ttitle, tfullpath, igenres_id, artists.tartists_name, albums.talbum_name, ilength FROM songs, artists, albums WHERE albums.ialbums_id = :id AND songs.iartists_id = artists.iartists_id and songs.ialbums_id = albums.ialbums_id ORDER BY sipos");
+ QHash<int, QStandardItem*> years;
+ QHash<QString, QStandardItem*> yearMonths;
+ while(q1.next()){
+ QDate added = q1.value(2).toDate();
+ int year = added.year();
+ QStandardItem *yearItem = nullptr;
+ QStandardItem *ymItem = nullptr;
+ if(years.contains(year)){
+ yearItem = years.value(year);
+ }else{
+ yearItem = new QStandardItem;
+ yearItem->setText(QString::number(year));
+ years.insert(year, yearItem);
+ yearItem->setIcon(dateIcon);
+ root->appendRow(yearItem);
+ }
+ QString yearMonth = QString("%1-%2").arg(QString::number(added.year())).arg(added.month(), 2, 10, QChar('0'));
+ if(yearMonths.contains(yearMonth)){
+ ymItem = yearMonths.value(yearMonth);
+ }else{
+ ymItem = new QStandardItem;
+ ymItem->setText(yearMonth);
+ ymItem->setIcon(dateIcon);
+ yearMonths.insert(yearMonth, ymItem);
+ yearItem->appendRow(ymItem);
+ }
+ QStandardItem *albumItem = new QStandardItem;
+ QString albumText = QString("%1 - %2").arg(q1.value(3).toString()).arg(q1.value(1).toString());
+ albumItem->setText(albumText);
+ albumItem->setIcon(albumIcon);
+ ymItem->appendRow(albumItem);
+ songQ.bindValue(":id", q1.value(0));
+ songQ.exec();
+ while(songQ.next()){
+ QStandardItem *curSong = new QStandardItem;
+ curSong->setEditable(false);
+ curSong->setFont(QFont("courier"));
+ QString songText = QString(tr("%1 - %2 - %3")).arg(songQ.value(0).toInt(), 3, 10, QChar('0')).arg(songQ.value(1).toString()).arg(songQ.value(4).toString());
+ curSong->setText(songText);
+ curSong->setIcon(songIcon);
+ curSong->setData(Song, TypeRole);
+ curSong->setData(songQ.value(0), IdRole);
+ curSong->setData(songQ.value(2), FullPathRole);
+ curSong->setData(songQ.value(3), GenreRole);
+ curSong->setData(songQ.value(4), ArtistRole);
+ curSong->setData(songQ.value(1), TitleRole);
+ curSong->setData(songQ.value(5), AlbumRole);
+ curSong->setData(songQ.value(6), LengthRole);
+ albumItem->appendRow(curSong);
+ }
+ }
+}
+
void PlayerWidget::populateByGenre(QStandardItem *parent, const QString &filter){
QSqlDatabase db = QSqlDatabase::database("beetplayerdb");
QStandardItem *root = parent;
@@ -898,6 +966,22 @@ void PlayerWidget::doPopulateBySong(){
emit modelChanged();
}
+void PlayerWidget::doPopulateByDate(){
+ qApp->setOverrideCursor(Qt::BusyCursor);
+ mView->setModel(mViewModel);
+ mCurrentModel = mViewModel;
+ mViewModel->clear();
+ mViewModel->setHorizontalHeaderLabels(QStringList() << tr("Date added"));
+ QStandardItem *root = mViewModel->invisibleRootItem();
+ emit message(QString(tr("Populating by date... Please wait!")));
+ qApp->processEvents();
+ populateByDate(root);
+ qApp->restoreOverrideCursor();
+ emit viewModeChanged(tr("Date"));
+ emit message(QString(tr("Done!")));
+ emit modelChanged();
+}
+
void PlayerWidget::doFilter(){
mSearchDirStack->setCurrentIndex(0);
QString filter = mSearch->text();
diff --git a/playerwidget.h b/playerwidget.h
index 3d08067..58f8603 100644
--- a/playerwidget.h
+++ b/playerwidget.h
@@ -35,6 +35,7 @@ class PlayerWidget : public QWidget {
void doPopulateByAlbum();
void doPopulateByGenre();
void doPopulateBySong();
+ void doPopulateByDate();
void doPopulateByFolder();
void doModelChanged();
void viewDoubleClicked(const QModelIndex &idx);
@@ -87,6 +88,7 @@ class PlayerWidget : public QWidget {
void populateByArtist(QStandardItem *parent, const QString &filter);
void populateByAlbum(QStandardItem *parent, const QVariant &filter, int type);
void populateBySong(QStandardItem *parent, const QVariant &filter, int type);
+ void populateByDate(QStandardItem *parent);
void populateByGenre(QStandardItem *parent, const QString &filter);
void recurse(const QModelIndex &parent);
void addSong(const QModelIndex &idx);