summaryrefslogtreecommitdiffstats
path: root/collectionfavoritesview.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'collectionfavoritesview.cpp')
-rw-r--r--collectionfavoritesview.cpp42
1 files changed, 42 insertions, 0 deletions
diff --git a/collectionfavoritesview.cpp b/collectionfavoritesview.cpp
index 54ce2f5..b948c41 100644
--- a/collectionfavoritesview.cpp
+++ b/collectionfavoritesview.cpp
@@ -2,6 +2,10 @@
#include <QSqlQuery>
#include <QStandardItem>
#include <QAction>
+#include <QFileDialog>
+#include <QDirIterator>
+#include <QMessageBox>
+#include <QSettings>
#include "collectionfavoritesview.h"
#include "helper.h"
@@ -9,7 +13,10 @@
CollectionFavoritesView::CollectionFavoritesView(QWidget *parent) : CollectionWidget(parent) {
QAction *removeFromFavoritesA = new QAction(QIcon(":/delete.png"), tr("Remove from Favorites"), this);
connect(removeFromFavoritesA, &QAction::triggered, [this] { removeFromFavorites(view()->selectionModel()->selectedRows()); });
+ QAction *syncA = new QAction(QIcon(":/sissyd.png"), tr("Sync to dir..."), this);
+ connect(syncA, &QAction::triggered, this, &CollectionFavoritesView::syncToDir);
customActions()->addAction(Helper::createSeparator(this));
+ customActions()->addAction(syncA);
customActions()->addAction(removeFromFavoritesA);
}
@@ -67,3 +74,38 @@ void CollectionFavoritesView::removeFromFavorites(const QModelIndexList &idxs){
populate();
}
}
+
+void CollectionFavoritesView::syncToDir(){
+ QSettings s;
+ QString dir = s.value("syncdir", QDir::homePath()).toString();
+ QString destDir = QFileDialog::getExistingDirectory(this, tr("Sync to..."), dir);
+ if(!destDir.isEmpty()){
+ s.setValue("syncdir", destDir);
+ QStandardItemModel *m = model();
+ QStandardItem *root = m->invisibleRootItem();
+ QDirIterator it(destDir);
+ if(it.hasNext()){
+ int retval = QMessageBox::warning(this, tr("Clear directory"), tr("Target directory is not empty. Delete all files?"), QMessageBox::Yes | QMessageBox::No);
+ if(retval == QMessageBox::Yes){
+ while(it.hasNext()){
+ QFileInfo fi = it.fileInfo();
+ if(fi.isSymLink()){
+ QFile::remove(fi.filePath());
+ }
+ it.next();
+ }
+ }
+ }
+ for(int i = 0; i < root->rowCount(); ++i){
+ QStandardItem *child = root->child(i, 0);
+ QString src = child->data(FullPathRole).toString();
+ QFileInfo fi(src);
+ QString artist = child->data(ArtistRole).toString();
+ QString title = child->data(TitleRole).toString();
+ QString ext = fi.suffix();
+ QString linkTo = QString("%1/%2-%3.%4").arg(destDir).arg(artist).arg(title).arg(ext);
+ QFile f(src);
+ f.link(linkTo);
+ }
+ }
+}