summaryrefslogtreecommitdiffstats
path: root/collectiondatesview.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'collectiondatesview.cpp')
-rw-r--r--collectiondatesview.cpp74
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);
+ }
+ }
+}