#include #include #include #include #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 years; QHash 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(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); QStringList sources; for(int i = 0; i < item->rowCount(); ++i){ QStandardItem *childItem = item->child(i); sources << childItem->data(FullPathRole).toString(); } cdlg->setSources(sources); cdlg->show(); }