summaryrefslogtreecommitdiffstats
path: root/collectionfoldersview.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'collectionfoldersview.cpp')
-rw-r--r--collectionfoldersview.cpp59
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();
+}