aboutsummaryrefslogtreecommitdiff
path: root/src/plugins/General/converter/converterdialog.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/plugins/General/converter/converterdialog.cpp')
-rw-r--r--src/plugins/General/converter/converterdialog.cpp107
1 files changed, 80 insertions, 27 deletions
diff --git a/src/plugins/General/converter/converterdialog.cpp b/src/plugins/General/converter/converterdialog.cpp
index 125d7e035..8a54a1885 100644
--- a/src/plugins/General/converter/converterdialog.cpp
+++ b/src/plugins/General/converter/converterdialog.cpp
@@ -21,6 +21,8 @@
#include <QSettings>
#include <QDesktopServices>
#include <QMenu>
+#include <QFile>
+#include <QDir>
#include <qmmpui/playlistitem.h>
#include <qmmpui/metadataformatter.h>
#include <qmmpui/filedialog.h>
@@ -48,8 +50,14 @@ ConverterDialog::ConverterDialog(QList <PlayListItem *> items, QWidget *parent)
ui.outFileEdit->setText(settings.value("file_name","%p - %t").toString());
settings.endGroup();
createMenus();
- readPresets(":/default_converter_preset");
- readPresets(QDir::homePath() + "/.qmmp/converterrc");
+
+ readPresets(":/converter/presets.conf");
+ readPresets(QDir::homePath() + "/.qmmp/converter/presets.conf");
+}
+
+ConverterDialog::~ConverterDialog()
+{
+ savePresets();
}
QStringList ConverterDialog::selectedUrls() const
@@ -79,7 +87,7 @@ void ConverterDialog::accept()
settings.value("file_name", ui.outFileEdit->text());
settings.endGroup();
- QSettings preset_settings(QDir::homePath() + "/.qmmp/converterrc", QSettings::IniFormat);
+ /*QSettings preset_settings(QDir::homePath() + "/.qmmp/converterrc", QSettings::IniFormat);
preset_settings.clear();
for(int i = 0; i < ui.presetComboBox->count(); ++i)
{
@@ -93,7 +101,7 @@ void ConverterDialog::accept()
preset_settings.setValue("use_16bit", data["use_16bit"].toBool());
preset_settings.setValue("tags", data["tags"].toBool());
preset_settings.endGroup();
- }
+ }*/
QDialog::accept();
}
@@ -136,13 +144,13 @@ void ConverterDialog::addTitleString(QAction *a)
void ConverterDialog::createPreset()
{
- PresetEditor *editor = new PresetEditor(QString(), QVariantMap(), this);
+ PresetEditor *editor = new PresetEditor(QVariantMap(), this);
if(editor->exec() == QDialog::Accepted)
{
- QString name = uniqueName(editor->name());
QVariantMap data = editor->data();
- if(!name.isEmpty() && data["ext"].isValid() && data["command"].isValid())
- ui.presetComboBox->addItem (name, data);
+ data["name"] = uniqueName(data["name"].toString());
+ if(data["name"].isValid() && data["ext"].isValid() && data["command"].isValid())
+ ui.presetComboBox->addItem (data["name"].toString(), data);
}
editor->deleteLater();
}
@@ -154,15 +162,15 @@ void ConverterDialog::editPreset()
int index = ui.presetComboBox->currentIndex();
if(ui.presetComboBox->itemData(index).toMap()["read_only"].toBool())
return;
- PresetEditor *editor = new PresetEditor(ui.presetComboBox->currentText(),
- ui.presetComboBox->itemData(index).toMap(), this);
+ PresetEditor *editor = new PresetEditor(ui.presetComboBox->itemData(index).toMap(), this);
if(editor->exec() == QDialog::Accepted)
{
- QString name = uniqueName(editor->name());
QVariantMap data = editor->data();
- if(!name.isEmpty() && data["ext"].isValid() && data["command"].isValid())
+ if(ui.presetComboBox->currentText() != data["name"].toString())
+ data["name"] = uniqueName(data["name"].toString());
+ if(data["name"].isValid() && data["ext"].isValid() && data["command"].isValid())
{
- ui.presetComboBox->setItemText(index, name);
+ ui.presetComboBox->setItemText(index, data["name"].toString());
ui.presetComboBox->setItemData(index, data);
}
}
@@ -174,9 +182,9 @@ void ConverterDialog::copyPreset()
if(ui.presetComboBox->currentIndex() == -1)
return;
int index = ui.presetComboBox->currentIndex();
- QString name = ui.presetComboBox->currentText();
- QVariant data = ui.presetComboBox->itemData(index);
- ui.presetComboBox->addItem (uniqueName(name), data);
+ QVariantMap data = ui.presetComboBox->itemData(index).toMap();
+ data["name"] = uniqueName(data["name"].toString());
+ ui.presetComboBox->addItem (data["name"].toString(), data);
}
void ConverterDialog::deletePreset()
@@ -190,18 +198,63 @@ void ConverterDialog::deletePreset()
void ConverterDialog::readPresets(const QString &path)
{
- QSettings settings(path, QSettings::IniFormat);
- foreach(QString group_name, settings.childGroups())
+ QFile file(path);
+ if(!file.open(QIODevice::ReadOnly))
+ return;
+
+ QList <QVariantMap> dataList;
+ while(!file.atEnd())
{
- settings.beginGroup(group_name);
- QVariantMap data;
- data.insert("ext", settings.value("ext").toString());
- data.insert("command", settings.value("command").toString());
- data.insert("use_16bit", settings.value("use_16bit").toBool());
- data.insert("tags", settings.value("tags").toBool());
- data.insert("read_only", path.startsWith(":/"));
- ui.presetComboBox->addItem (group_name, data);
- settings.endGroup();
+ QString line = QString::fromUtf8(file.readLine().trimmed());
+ if(!line.contains("="))
+ continue;
+ QString key = line.split("=").at(0);
+ QString value = line.split("=").at(1);
+ if(key == "name")
+ dataList.append(QVariantMap());
+ if(dataList.isEmpty())
+ continue;
+ if(key == "use_16bit" && key == "tags") //boolean keys
+ dataList.last()[key] = (value == "true");
+ else
+ dataList.last()[key] = value;
+ }
+
+ foreach(QVariantMap data, dataList)
+ {
+ data["read_only"] = path.startsWith(":/");
+ QString title = data["name"].toString();
+ if(data["read_only"].toBool())
+ title += " *" ;
+ ui.presetComboBox->addItem (title, data);
+ }
+}
+
+void ConverterDialog::savePresets()
+{
+ QDir dir(QDir::homePath() + "/.qmmp/");
+ dir.mkdir("converter");
+
+ QFile file(QDir::homePath() + "/.qmmp/converter/presets.conf");
+ if(!file.open(QIODevice::WriteOnly | QIODevice::Truncate))
+ {
+ qWarning("ConverterDialog: unable to save presets; error %s", qPrintable(file.errorString()));
+ return;
+ }
+
+ for(int i = 0; i < ui.presetComboBox->count(); ++i)
+ {
+ QVariantMap data = ui.presetComboBox->itemData(i).toMap();
+ if(data["read_only"].toBool())
+ continue;
+ file.write(QString("%1=%2\n").arg("name").arg(data["name"].toString()).toUtf8());
+ file.write(QString("%1=%2\n").arg("ext").arg(data["ext"].toString()).toUtf8());
+ file.write(QString("%1=%2\n").arg("command").arg(data["command"].toString()).toUtf8());
+ file.write(QString("%1=%2\n").arg("use_16bit")
+ .arg(data["use_16bit"].toBool() ? "true" : "false" ).toUtf8());
+ file.write(QString("%1=%2\n").arg("tags")
+ .arg(data["tags"].toBool() ? "true" : "false" ).toUtf8());
+ file.write("\n");
}
}