summaryrefslogtreecommitdiffstats
path: root/collectionalbumsview.cpp
blob: 673a837aa910b1ae77218b8341078d13c81c15a8 (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
#include <QSqlDatabase>
#include <QSqlQuery>
#include <QStandardItem>
#include <QTreeView>

#include "collectionalbumsview.h"

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

void CollectionAlbumsView::populate(){
    disableSorting();
    model()->clear();
    model()->setHorizontalHeaderLabels(headers());
    QSqlDatabase db = QSqlDatabase::database("beetplayerdb");
    QStandardItem *root = model()->invisibleRootItem();
    QIcon albumIcon(":/album.png");
    QIcon songIcon(":/song.png");
    QSqlQuery albumQ("SELECT DISTINCT(ialbums_id), talbum_name, siyear FROM albums ORDER BY talbum_name", db);
    while(albumQ.next()){
        QHash<QString, int> artistcount;
        QStandardItem *curAlbum = new QStandardItem;
        curAlbum->setEditable(false);
        curAlbum->setFont(QFont("courier"));

        curAlbum->setIcon(albumIcon);
        curAlbum->setData(Album, TypeRole);
        curAlbum->setData(albumQ.value(0), IdRole);
        curAlbum->setData(albumQ.value(1), AlbumRole);
        root->appendRow(curAlbum);
        QSqlQuery songQ = QSqlQuery(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");
        songQ.bindValue(":id", albumQ.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);
            ++artistcount[songQ.value(4).toString()];
            curSong->setData(songQ.value(1), TitleRole);
            curSong->setData(songQ.value(5), AlbumRole);
            curSong->setData(songQ.value(6), LengthRole);
            curAlbum->appendRow(curSong);
        }
        QString albumText;
        if(artistcount.keys().count() > 1){
            albumText = QString(tr("%1 - VA - (%2)")).arg(albumQ.value(1).toString()).arg(QString::number(albumQ.value(2).toInt()));
        }else{
            albumText = QString(tr("%1 - %2 - (%3)")).arg(albumQ.value(1).toString()).arg(artistcount.keys().first()). arg(QString::number(albumQ.value(2).toInt()));
        }
        curAlbum->setText(albumText);
    }
    enableSorting();
}