summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--playerwidget.cpp52
-rw-r--r--playerwidget.h2
2 files changed, 52 insertions, 2 deletions
diff --git a/playerwidget.cpp b/playerwidget.cpp
index 07ad1ba..b238f62 100644
--- a/playerwidget.cpp
+++ b/playerwidget.cpp
@@ -8,6 +8,7 @@
#include <QTreeView>
#include <QSplitter>
#include <QStandardItemModel>
+#include <QStandardItem>
#include <QSortFilterProxyModel>
#include <QHBoxLayout>
#include <QVBoxLayout>
@@ -50,6 +51,7 @@ void PlayerWidget::setupGui(){
mViewModel = new QStandardItemModel;
mViewProxy = new QSortFilterProxyModel;
mViewProxy->setSourceModel(mViewModel);
+ mView->setModel(mViewProxy);
//left widget
QWidget *leftWidget = new QWidget;
@@ -108,10 +110,11 @@ void PlayerWidget::setupGui(){
QVBoxLayout *mainLayout = new QVBoxLayout;
mainLayout->addWidget(splitter);
setLayout(mainLayout);
+ refreshSort();
}
void PlayerWidget::populateBy(QString selector){
- if(selector == tr("Artist")){
+ if(selector == tr("Artists")){
populateByArtist();
}
}
@@ -121,5 +124,50 @@ void PlayerWidget::refreshSort(){
}
void PlayerWidget::populateByArtist(){
-
+ //prepare Queries
+ QSqlDatabase db = QSqlDatabase::database("beetplayerdb");
+ QSqlQuery artistsQ(db);
+ artistsQ.prepare("SELECT iartists_id, tartists_name FROM artists ORDER BY tartists_name ASC");
+ QSqlQuery albumQ(db);
+ albumQ.prepare("SELECT ialbums_id, talbum_name, siyear FROM albums WHERE iartists_id = :aid ORDER BY talbum_name ASC");
+ QSqlQuery songQ(db);
+ songQ.prepare("SELECT sipos, ttitle, tfullpath FROM songs WHERE ialbums_id = :alid ORDER BY sipos ASC");
+
+ //reset view+model
+ mView->setSortingEnabled(false);
+ mViewModel->clear();
+ mViewModel->setHorizontalHeaderLabels(QStringList() << tr("Name"));
+ QStandardItem *root = mViewModel->invisibleRootItem();
+
+ //read data
+ artistsQ.exec();
+ while(artistsQ.next()){
+ QStandardItem *curArtist = new QStandardItem;
+ QString artistText = QString(tr("%1 - %2")).arg(QString("🅐")).arg(artistsQ.value(1).toString()); //I guess this will bite me!
+ curArtist->setText(artistText);
+ curArtist->setData(Artist, TypeRole);
+ curArtist->setData(artistsQ.value(0).toInt(), IdRole);
+ root->appendRow(curArtist);
+ albumQ.bindValue(":aid", artistsQ.value(0));
+ albumQ.exec();
+ while(albumQ.next()){
+ QStandardItem *curAlbum = new QStandardItem;
+ QString albumText = QString(tr("%1 - %2 (%3)")).arg(QChar(0x29BE)).arg(albumQ.value(1).toString()).arg(QString::number(albumQ.value(2).toInt()));
+ curAlbum->setText(albumText);
+ curAlbum->setData(Album, TypeRole);
+ curAlbum->setData(albumQ.value(0), IdRole);
+ curArtist->appendRow(curAlbum);
+ songQ.bindValue(":alid", albumQ.value(0));
+ songQ.exec();
+ while(songQ.next()){
+ QStandardItem *curSong = new QStandardItem;
+ QString songText = QString(tr("%1 %2 - %3")).arg(QChar(0x266C)).arg(songQ.value(0).toInt(), 3, 10, QChar('0')).arg(songQ.value(1).toString());
+ curSong->setText(songText);
+ curSong->setData(Song, TypeRole);
+ curSong->setData(songQ.value(0), IdRole);
+ curSong->setData(songQ.value(2), FullPathRole);
+ curAlbum->appendRow(curSong);
+ }
+ }
+ }
}
diff --git a/playerwidget.h b/playerwidget.h
index 66c813a..e6e20d5 100644
--- a/playerwidget.h
+++ b/playerwidget.h
@@ -16,6 +16,8 @@ class QMediaPlayer;
class PlayerWidget : public QWidget {
Q_OBJECT
public:
+ enum ItemType { Artist, Album, Song };
+ enum CustomRoles { TypeRole = Qt::UserRole + 1, IdRole = Qt::UserRole + 2, FullPathRole = Qt::UserRole + 3 };
explicit PlayerWidget(QWidget *parent = 0);
public slots: