summaryrefslogtreecommitdiffstats
path: root/collectionartistsview.cpp
blob: 13b98b1a7641634e0759d003b84b6ffad01d67ed (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
#include <QSqlDatabase>
#include <QSqlQuery>
#include <QStandardItem>

#include "collectionartistsview.h"

CollectionArtistsView::CollectionArtistsView(QWidget *parent) : CollectionWidget(parent) {
}

void CollectionArtistsView::populate(){
    model()->clear();
    model()->setHorizontalHeaderLabels(headers());
    QSqlDatabase db = QSqlDatabase::database("beetplayerdb");
    QStandardItem *root = model()->invisibleRootItem();
    QSqlQuery albumQ(db);
    albumQ.prepare("SELECT DISTINCT(songs.ialbums_id), talbum_name, siyear FROM songs, albums WHERE songs.iartists_id = :artistid AND songs.ialbums_id = albums.ialbums_id ORDER BY siyear ASC");
    QSqlQuery songQ(db);
    songQ.prepare("SELECT sipos, ttitle, tfullpath, igenres_id, ilength FROM songs WHERE ialbums_id = :alid AND iartists_id = :arid ORDER BY sipos ASC");
    QIcon songIcon(":/song.png");
    QIcon albumIcon(":/album.png");
    QIcon artistIcon(":/artist.png");
    QSqlQuery artistsQ("SELECT iartists_id, tartists_name FROM artists ORDER BY tartists_name ASC", db);
    while(artistsQ.next()){
        QStandardItem *curArtist = new QStandardItem;
        curArtist->setEditable(false);
        curArtist->setFont(QFont("courier"));
        curArtist->setText(artistsQ.value(1).toString());
        curArtist->setIcon(artistIcon);
        curArtist->setData(Artist, TypeRole);
        curArtist->setData(artistsQ.value(0).toInt(), IdRole);
        curArtist->setData(artistsQ.value(1), ArtistRole);
        root->appendRow(curArtist);
        albumQ.bindValue(":artistid", artistsQ.value(0));
        albumQ.exec();
        while(albumQ.next()){
            QStandardItem *curAlbum = new QStandardItem;
            curAlbum->setEditable(false);
            curAlbum->setFont(QFont("courier"));
            QString albumText = QString(tr("%1 - %2")).arg(QString::number(albumQ.value(2).toInt())).arg(albumQ.value(1).toString());
            curAlbum->setText(albumText);
            curAlbum->setIcon(albumIcon);
            curAlbum->setData(Album, TypeRole);
            curAlbum->setData(albumQ.value(0), IdRole);
            curAlbum->setData(artistsQ.value(1), ArtistRole);
            curAlbum->setData(albumQ.value(1), AlbumRole);
            curArtist->appendRow(curAlbum);
            songQ.bindValue(":alid", albumQ.value(0));
            songQ.bindValue(":arid", artistsQ.value(0));
            songQ.exec();
            while(songQ.next()){
                QStandardItem *curSong = new QStandardItem;
                curSong->setEditable(false);
                curSong->setFont(QFont("courier"));
                QString songText = QString(tr("%1 - %2")).arg(songQ.value(0).toInt(), 3, 10, QChar('0')).arg(songQ.value(1).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(artistsQ.value(1), ArtistRole);
                curSong->setData(songQ.value(1), TitleRole);
                curSong->setData(songQ.value(4), LengthRole);
                curSong->setData(albumQ.value(1), AlbumRole);
                curAlbum->appendRow(curSong);
            }
        }
    }
}