diff options
Diffstat (limited to 'collectionfoldersview.cpp')
-rw-r--r-- | collectionfoldersview.cpp | 59 |
1 files changed, 59 insertions, 0 deletions
diff --git a/collectionfoldersview.cpp b/collectionfoldersview.cpp new file mode 100644 index 0000000..4f1ad84 --- /dev/null +++ b/collectionfoldersview.cpp @@ -0,0 +1,59 @@ +#include <QSettings> +#include <QStandardItem> +#include <QDir> +#include <QMimeDatabase> + +#include <taglib/fileref.h> + +#include "collectionfoldersview.h" + +CollectionFoldersView::CollectionFoldersView(QWidget *parent) : CollectionWidget(parent){ + readSettings(); +} + +void CollectionFoldersView::populate(){ + model()->clear(); + model()->setHorizontalHeaderLabels(headers()); + QStandardItem *root = model()->invisibleRootItem(); + QDir d(mCurrentFolder); + QMimeDatabase db; + QIcon songIcon(":/song.png"); + QIcon otherIcon(":/belly_right_and_clear.png"); + QIcon dirIcon(":/folder.png"); + QFileInfoList fl = d.entryInfoList(QStringList() << "*", QDir::Files | QDir::Dirs | QDir::NoDot, QDir::Name | QDir::DirsFirst); + for(const QFileInfo &fi : fl){ + QStandardItem *cur = new QStandardItem; + cur->setEditable(false); + cur->setText(fi.fileName()); + if(fi.isDir()){ + cur->setIcon(dirIcon); + }else if(fi.isFile()){ + QMimeType mt = db.mimeTypeForFile(fi); + if(mt.name().startsWith("audio")){ + cur->setIcon(songIcon); + cur->setData(Song, TypeRole); + cur->setData(-1, IdRole); + TagLib::FileRef file(fi.absoluteFilePath().toUtf8()); + if(!file.isNull()){ + QString artist = QString::fromStdWString(file.tag()->artist().toWString()); + cur->setData(artist.toLower(), ArtistRole); + QString album = QString::fromStdWString(file.tag()->album().toWString()); + cur->setData(album.toLower(), AlbumRole); + QString genre = QString::fromStdWString(file.tag()->genre().toWString()); + cur->setData(genre.toLower(), GenreRole); + QString title = QString::fromStdWString(file.tag()->title().toWString()); + cur->setData(title.toLower(), TitleRole); + } + }else{ + cur->setIcon(otherIcon); + } + } + cur->setData(fi.absoluteFilePath(), FullPathRole); + root->appendRow(cur); + } +} + +void CollectionFoldersView::readSettings(){ + QSettings s; + mCurrentFolder = s.value("folderdir", QDir::homePath()).toString(); +} |