diff --git a/src/transcoder/transcodedialog.cpp b/src/transcoder/transcodedialog.cpp index 72948b08b..172d27a7b 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,31 @@ void TranscodeDialog::Add() { s.setValue("last_add_dir", last_add_dir_); } +void TranscodeDialog::Import() { + QString path = QFileDialog::getExistingDirectory( + this, tr("Open a directory to import music from"), + last_import_dir_, QFileDialog::ShowDirsOnly); + + if (path.isEmpty()) return; + + QStringList filenames; + QStringList audioTypes = QString(FileView::kFileFilter).split(" ", + QString::SkipEmptyParts); + QDirIterator files(path, audioTypes, QDir::Files | QDir::Readable, + QDirIterator::Subdirectories); + + while (files.hasNext()) { + filenames << files.next(); + } + + SetFilenames(filenames); + + last_import_dir_ = path; + 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..7d62374cb 100644 --- a/src/transcoder/transcodedialog.ui +++ b/src/transcoder/transcodedialog.ui @@ -88,6 +88,16 @@ + + + + Add all tracks from a directory and all its subdirectories + + + Import... + + +