summaryrefslogtreecommitdiffstats
path: root/collectiondatesview.cpp
blob: 5544f72c2bee311d9b5634908c3e52b42404bdad (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
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
#include <QSqlDatabase>
#include <QSqlQuery>
#include <QStandardItem>
#include <QDate>

#include "collectiondatesview.h"
#include "copydialog.h"
#include "collectionwidgetproxy.h"

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

void CollectionDatesView::populate(){
    disableSorting();
    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);
        albumItem->setData(Album, TypeRole);
        albumItem->setData(q1.value(3), ArtistRole);
        albumItem->setData(q1.value(1), AlbumRole);
        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);
        }
    }
    enableSorting(Qt::DescendingOrder);
}

void CollectionDatesView::copyTo(){
    QModelIndexList sel = view()->selectionModel()->selectedRows();
    if(sel.isEmpty()){
        return;
    }
    QModelIndex first = sel.first();
    int type = first.data(TypeRole).toInt();
    if(type != Album){
        return;
    }
    CollectionWidgetProxy *proxy = static_cast<CollectionWidgetProxy*>(view()->model());
    QModelIndex srcIdx = proxy->mapToSource(first);
    QStandardItem *item = model()->itemFromIndex(srcIdx);
    QString src = QString("%1 (%2 files)").arg(srcIdx.data().toString()).arg(QString::number(item->rowCount()));
    CopyDialog *cdlg = new CopyDialog(this);
    cdlg->setSource(src);
    QString destDir = srcIdx.data().toString().toLower();
    destDir = destDir.replace(" - ", "-");
    destDir = destDir.replace(' ', '.');
    cdlg->setDestFolder(destDir);
    cdlg->show();
}