diff options
author | Arno <arno@disconnect.de> | 2018-02-17 06:51:05 +0100 |
---|---|---|
committer | Arno <arno@disconnect.de> | 2018-02-17 06:51:05 +0100 |
commit | ca1d008ebaa5a28284cdba97046b48be421ccacd (patch) | |
tree | 9846b9645b031a70d2293d802827fa387d700388 /collectiondatesview.cpp | |
parent | 691bbc7b764f38c31c82bfa9527a8bfd35713942 (diff) | |
download | BeetPlayer-ca1d008ebaa5a28284cdba97046b48be421ccacd.tar.gz BeetPlayer-ca1d008ebaa5a28284cdba97046b48be421ccacd.tar.bz2 BeetPlayer-ca1d008ebaa5a28284cdba97046b48be421ccacd.zip |
New class: CollectionDatesView
Basically the same as populateByDate, just wrapped in a shiny, new
CollectionWidget.
Diffstat (limited to 'collectiondatesview.cpp')
-rw-r--r-- | collectiondatesview.cpp | 74 |
1 files changed, 74 insertions, 0 deletions
diff --git a/collectiondatesview.cpp b/collectiondatesview.cpp new file mode 100644 index 0000000..3589c18 --- /dev/null +++ b/collectiondatesview.cpp @@ -0,0 +1,74 @@ +#include <QSqlDatabase> +#include <QSqlQuery> +#include <QStandardItem> +#include <QDate> + +#include "collectiondatesview.h" + +CollectionDatesView::CollectionDatesView(QWidget *parent) : CollectionWidget(parent){ +} + +void CollectionDatesView::populate(){ + model()->clear(); + model()->setHorizontalHeaderLabels(headers()); + QSqlDatabase db = QSqlDatabase::database("beetplayerdb"); + QStandardItem *root = model()->invisibleRootItem(); + QIcon dateIcon(":/bizarre_amputee.png"); + root->setIcon(dateIcon); + QIcon albumIcon(":/album.png"); + QIcon songIcon(":/song.png"); + 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; + 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); + 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); + } + } +} |