aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/qmmpui/playlistparser.cpp12
-rw-r--r--src/qmmpui/playlistparser.h1
-rw-r--r--src/qmmpui/uihelper.cpp42
3 files changed, 49 insertions, 6 deletions
diff --git a/src/qmmpui/playlistparser.cpp b/src/qmmpui/playlistparser.cpp
index da2e64eec..cef3ef655 100644
--- a/src/qmmpui/playlistparser.cpp
+++ b/src/qmmpui/playlistparser.cpp
@@ -46,6 +46,18 @@ QStringList PlayListParser::nameFilters()
return filters;
}
+QStringList PlayListParser::filters()
+{
+ loadFormats();
+ QStringList filters;
+ for(const PlayListFormat *format : qAsConst(*m_formats))
+ {
+ if (!format->properties().filters.isEmpty())
+ filters << format->properties().shortName.toUpper() + " (" + format->properties().filters.join(" ") + ")";
+ }
+ return filters;
+}
+
bool PlayListParser::isPlayList(const QString &url)
{
for(const QString &filter : nameFilters())
diff --git a/src/qmmpui/playlistparser.h b/src/qmmpui/playlistparser.h
index d84c69ede..64cb4cbbf 100644
--- a/src/qmmpui/playlistparser.h
+++ b/src/qmmpui/playlistparser.h
@@ -40,6 +40,7 @@ public:
* Returns a list of the supported files name filters, i.e. "*.m3u *.pls"
*/
static QStringList nameFilters();
+ static QStringList filters();
/*!
* Returns \b true if file \b url is playlist. Otherwise returns \b false.
* \param url Local file path or URL.
diff --git a/src/qmmpui/uihelper.cpp b/src/qmmpui/uihelper.cpp
index b566fc98d..1edcd9fae 100644
--- a/src/qmmpui/uihelper.cpp
+++ b/src/qmmpui/uihelper.cpp
@@ -24,6 +24,8 @@
#include <QAction>
#include <QSettings>
#include <QApplication>
+#include <QMessageBox>
+#include <QFileInfo>
#include <qmmp/soundcore.h>
#include <qmmp/metadatamanager.h>
#include "filedialog.h"
@@ -195,16 +197,44 @@ void UiHelper::loadPlayList(QWidget *parent, PlayListModel *model)
void UiHelper::savePlayList(QWidget *parent, PlayListModel *model)
{
- if(PlayListParser::nameFilters().isEmpty())
+ QStringList nameFilters = PlayListParser::nameFilters();
+
+ if(nameFilters.isEmpty())
{
qWarning("UiHelper: There is no registered playlist parsers");
return;
}
- QString ext = PlayListParser::nameFilters().at(0);
- ext.replace("*.", "."); //extract extension from name filter
- QString mask = tr("Playlist Files") + " (" + PlayListParser::nameFilters().join(" ") + ")";
- QString f_name = FileDialog::getSaveFileName(parent, tr("Save Playlist"),m_lastDir + "/" +
- model->name() + ext,mask);
+
+ QStringList filters;
+ filters << tr("Playlist Files") + " (" + nameFilters.join(" ") + ")";
+ filters << PlayListParser::filters();
+ QString selectedFilter = filters.at(1);
+ QString f_name = FileDialog::getSaveFileName(parent, tr("Save Playlist"), m_lastDir + "/" +
+ model->name(), filters.join(";;"), &selectedFilter);
+
+ if(f_name.isEmpty())
+ return;
+
+ if(!PlayListParser::isPlayList(f_name)) //append selected extension
+ {
+ QStringList selectedFilters = selectedFilter.section("(", 1).remove(")").split(" ");
+ if(selectedFilters.isEmpty())
+ return;
+
+ QString ext = selectedFilters.first().remove("*"); //use first extension
+ f_name.append(ext);
+
+ QFileInfo info(f_name);
+
+ if(info.exists())
+ {
+ if (QMessageBox::question(parent, tr("Save Playlist"), tr("%1 already exists.\nDo you want to replace it?")
+ .arg(info.fileName()), QMessageBox::Ok | QMessageBox::Cancel) != QMessageBox::Ok)
+ {
+ return;
+ }
+ }
+ }
if (!f_name.isEmpty())
{