summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorArno <arno@disconnect.de>2018-02-17 06:51:05 +0100
committerArno <arno@disconnect.de>2018-02-17 06:51:05 +0100
commitca1d008ebaa5a28284cdba97046b48be421ccacd (patch)
tree9846b9645b031a70d2293d802827fa387d700388
parent691bbc7b764f38c31c82bfa9527a8bfd35713942 (diff)
downloadBeetPlayer-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.
-rw-r--r--BeetPlayer.pro6
-rw-r--r--collectiondatesview.cpp74
-rw-r--r--collectiondatesview.h14
3 files changed, 92 insertions, 2 deletions
diff --git a/BeetPlayer.pro b/BeetPlayer.pro
index 4495107..7f42954 100644
--- a/BeetPlayer.pro
+++ b/BeetPlayer.pro
@@ -37,7 +37,8 @@ SOURCES += main.cpp\
webradiodialog.cpp \
collectionwidget.cpp \
collectionartistsview.cpp \
- collectionalbumsview.cpp
+ collectionalbumsview.cpp \
+ collectiondatesview.cpp
HEADERS += beetplayer.h \
configurationdialog.h \
@@ -51,7 +52,8 @@ HEADERS += beetplayer.h \
webradiodialog.h \
collectionwidget.h \
collectionartistsview.h \
- collectionalbumsview.h
+ collectionalbumsview.h \
+ collectiondatesview.h
LIBS += -ltag
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);
+ }
+ }
+}
diff --git a/collectiondatesview.h b/collectiondatesview.h
new file mode 100644
index 0000000..5b1bc0c
--- /dev/null
+++ b/collectiondatesview.h
@@ -0,0 +1,14 @@
+#ifndef COLLECTIONDATESVIEW_H
+#define COLLECTIONDATESVIEW_H
+
+#include "collectionwidget.h"
+
+class CollectionDatesView : public CollectionWidget {
+ public:
+ CollectionDatesView(QWidget *parent = nullptr);
+
+ public slots:
+ virtual void populate();
+};
+
+#endif // COLLECTIONDATESVIEW_H