diff options
author | Arno <arno@disconnect.de> | 2017-05-02 15:22:23 +0200 |
---|---|---|
committer | Arno <arno@disconnect.de> | 2017-05-02 15:22:23 +0200 |
commit | e95a548bfa65648c5526c464023ac0dbc9b1ea7b (patch) | |
tree | a0ea0bdf277a5a6049c08e1f5edd41226f40d4e5 /playerwidget.cpp | |
parent | 8264985db448b16c5f6e6cbe3c3296c631d8e93d (diff) | |
download | BeetPlayer-e95a548bfa65648c5526c464023ac0dbc9b1ea7b.tar.gz BeetPlayer-e95a548bfa65648c5526c464023ac0dbc9b1ea7b.tar.bz2 BeetPlayer-e95a548bfa65648c5526c464023ac0dbc9b1ea7b.zip |
Add view for added by date
Diffstat (limited to 'playerwidget.cpp')
-rw-r--r-- | playerwidget.cpp | 84 |
1 files changed, 84 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(); |