From f54e2da535bc7f0c629fe3395aba3b23f2bbd1a0 Mon Sep 17 00:00:00 2001 From: Matthew Scheirer Date: Tue, 9 Sep 2014 19:09:19 -0400 Subject: [PATCH 1/4] Adds an import button to the transcode UI, allowing the user to pull in all files in a folder heirarchy to be transcoded. --- src/transcoder/transcodedialog.cpp | 48 ++++++++++++++++++++++++++++++ src/transcoder/transcodedialog.h | 2 ++ src/transcoder/transcodedialog.ui | 10 +++++++ 3 files changed, 60 insertions(+) diff --git a/src/transcoder/transcodedialog.cpp b/src/transcoder/transcodedialog.cpp index 72948b08b..93dc45ed8 100644 --- a/src/transcoder/transcodedialog.cpp +++ b/src/transcoder/transcodedialog.cpp @@ -26,6 +26,7 @@ #include #include +#include #include #include @@ -73,6 +74,7 @@ TranscodeDialog::TranscodeDialog(QWidget* parent) QSettings s; s.beginGroup(kSettingsGroup); last_add_dir_ = s.value("last_add_dir", QDir::homePath()).toString(); + last_import_dir_ = s.value("last_import_dir", QDir::homePath()).toString(); QString last_output_format = s.value("last_output_format", "ogg").toString(); for (int i = 0; i < ui_->format->count(); ++i) { @@ -97,6 +99,7 @@ TranscodeDialog::TranscodeDialog(QWidget* parent) // Connect stuff connect(ui_->add, SIGNAL(clicked()), SLOT(Add())); + connect(ui_->import, SIGNAL(clicked()), SLOT(Import())); connect(ui_->remove, SIGNAL(clicked()), SLOT(Remove())); connect(start_button_, SIGNAL(clicked()), SLOT(Start())); connect(cancel_button_, SIGNAL(clicked()), SLOT(Cancel())); @@ -226,6 +229,51 @@ void TranscodeDialog::Add() { s.setValue("last_add_dir", last_add_dir_); } +void TranscodeDialog::Import() { + QString rootPath = QFileDialog::getExistingDirectory( + this, tr("Open music directory to recursively import"), + last_import_dir_, QFileDialog::ShowDirsOnly); + + if(rootPath.isEmpty()) return; + + QStringList filenames; + QStringList audioTypes = QString(FileView::kFileFilter).split(" ", + QString::SkipEmptyParts); + + QLinkedList dirs; + dirs.append(rootPath); + QString current; + + do { + current = dirs.first(); + QDir dir(current); + + // Don't follow symlinks to avoid looping + QStringList subdirs = dir.entryList( + QDir::Dirs | QDir::NoSymLinks | + QDir::Readable | QDir::NoDotAndDotDot); + + for (QString& subdir : subdirs) { + dirs.append(current + '/' + subdir); + } + + QStringList songNames = dir.entryList(audioTypes, + QDir::Files | QDir::Readable); + for(QString& songName : songNames) { + filenames.append(current + '/' + songName); + } + + dirs.removeFirst(); + } while(!dirs.empty()); + + SetFilenames(filenames); + + last_import_dir_ = rootPath; + QSettings settings; + settings.beginGroup(kSettingsGroup); + settings.setValue("last_import_dir", last_import_dir_); +} + void TranscodeDialog::SetFilenames(const QStringList& filenames) { for (const QString& filename : filenames) { QString name = filename.section('/', -1, -1); diff --git a/src/transcoder/transcodedialog.h b/src/transcoder/transcodedialog.h index d68a92e6e..77a035a05 100644 --- a/src/transcoder/transcodedialog.h +++ b/src/transcoder/transcodedialog.h @@ -45,6 +45,7 @@ class TranscodeDialog : public QDialog { private slots: void Add(); + void Import(); void Remove(); void Start(); void Cancel(); @@ -74,6 +75,7 @@ class TranscodeDialog : public QDialog { QPushButton* close_button_; QString last_add_dir_; + QString last_import_dir_; Transcoder* transcoder_; int queued_; diff --git a/src/transcoder/transcodedialog.ui b/src/transcoder/transcodedialog.ui index d6daedd05..bf8c29e33 100644 --- a/src/transcoder/transcodedialog.ui +++ b/src/transcoder/transcodedialog.ui @@ -88,6 +88,16 @@ + + + + Add all tracks in a folder heirarchy + + + Import... + + + From 431f2e297820e0effef45520b0b27a7dea917fe5 Mon Sep 17 00:00:00 2001 From: Matthew Scheirer Date: Mon, 15 Sep 2014 16:45:47 -0400 Subject: [PATCH 2/4] Changed the transcode import tooltip and reimplemented using QDirIterator. --- src/transcoder/transcodedialog.cpp | 32 ++++++------------------------ src/transcoder/transcodedialog.ui | 2 +- 2 files changed, 7 insertions(+), 27 deletions(-) diff --git a/src/transcoder/transcodedialog.cpp b/src/transcoder/transcodedialog.cpp index 93dc45ed8..753deb862 100644 --- a/src/transcoder/transcodedialog.cpp +++ b/src/transcoder/transcodedialog.cpp @@ -26,7 +26,7 @@ #include #include -#include +#include #include #include @@ -239,32 +239,12 @@ void TranscodeDialog::Import() { QStringList filenames; QStringList audioTypes = QString(FileView::kFileFilter).split(" ", QString::SkipEmptyParts); + QDirIterator files(rootPath, audioTypes, QDir::Files | QDir::Readable, + QDirIterator::Subdirectories); - QLinkedList dirs; - dirs.append(rootPath); - QString current; - - do { - current = dirs.first(); - QDir dir(current); - - // Don't follow symlinks to avoid looping - QStringList subdirs = dir.entryList( - QDir::Dirs | QDir::NoSymLinks | - QDir::Readable | QDir::NoDotAndDotDot); - - for (QString& subdir : subdirs) { - dirs.append(current + '/' + subdir); - } - - QStringList songNames = dir.entryList(audioTypes, - QDir::Files | QDir::Readable); - for(QString& songName : songNames) { - filenames.append(current + '/' + songName); - } - - dirs.removeFirst(); - } while(!dirs.empty()); + while(files.hasNext()) { + filenames << files.next(); + } SetFilenames(filenames); diff --git a/src/transcoder/transcodedialog.ui b/src/transcoder/transcodedialog.ui index bf8c29e33..7d62374cb 100644 --- a/src/transcoder/transcodedialog.ui +++ b/src/transcoder/transcodedialog.ui @@ -91,7 +91,7 @@ - Add all tracks in a folder heirarchy + Add all tracks from a directory and all its subdirectories Import... From 3587e4197d2081bc7bbc3968541a87f48262dc90 Mon Sep 17 00:00:00 2001 From: Matthew Scheirer Date: Wed, 24 Sep 2014 19:53:13 -0400 Subject: [PATCH 3/4] Renamed rootPath to just path, changed dialog message to reflect UI message. --- src/transcoder/transcodedialog.cpp | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/transcoder/transcodedialog.cpp b/src/transcoder/transcodedialog.cpp index 753deb862..ac1ac1171 100644 --- a/src/transcoder/transcodedialog.cpp +++ b/src/transcoder/transcodedialog.cpp @@ -230,16 +230,16 @@ void TranscodeDialog::Add() { } void TranscodeDialog::Import() { - QString rootPath = QFileDialog::getExistingDirectory( - this, tr("Open music directory to recursively import"), + QString path = QFileDialog::getExistingDirectory( + this, tr("Open a directory to import music from"), last_import_dir_, QFileDialog::ShowDirsOnly); - if(rootPath.isEmpty()) return; + if(path.isEmpty()) return; QStringList filenames; QStringList audioTypes = QString(FileView::kFileFilter).split(" ", QString::SkipEmptyParts); - QDirIterator files(rootPath, audioTypes, QDir::Files | QDir::Readable, + QDirIterator files(path, audioTypes, QDir::Files | QDir::Readable, QDirIterator::Subdirectories); while(files.hasNext()) { @@ -248,7 +248,7 @@ void TranscodeDialog::Import() { SetFilenames(filenames); - last_import_dir_ = rootPath; + last_import_dir_ = path; QSettings settings; settings.beginGroup(kSettingsGroup); settings.setValue("last_import_dir", last_import_dir_); From fdb88d4738df0b33fd0e104d35512934319f14bd Mon Sep 17 00:00:00 2001 From: Matthew Scheirer Date: Sun, 28 Sep 2014 19:34:28 -0400 Subject: [PATCH 4/4] Fixed formatting for merge. --- src/transcoder/transcodedialog.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/transcoder/transcodedialog.cpp b/src/transcoder/transcodedialog.cpp index ac1ac1171..172d27a7b 100644 --- a/src/transcoder/transcodedialog.cpp +++ b/src/transcoder/transcodedialog.cpp @@ -234,7 +234,7 @@ void TranscodeDialog::Import() { this, tr("Open a directory to import music from"), last_import_dir_, QFileDialog::ShowDirsOnly); - if(path.isEmpty()) return; + if (path.isEmpty()) return; QStringList filenames; QStringList audioTypes = QString(FileView::kFileFilter).split(" ", @@ -242,7 +242,7 @@ void TranscodeDialog::Import() { QDirIterator files(path, audioTypes, QDir::Files | QDir::Readable, QDirIterator::Subdirectories); - while(files.hasNext()) { + while (files.hasNext()) { filenames << files.next(); }