mirror of
https://github.com/clementine-player/Clementine
synced 2025-02-05 21:53:28 +01:00
Use the playlist's name as the default filename when saving it
This commit is contained in:
parent
a21b7541e5
commit
7e29c772af
@ -256,9 +256,32 @@ void PlaylistContainer::LoadPlaylist() {
|
|||||||
|
|
||||||
void PlaylistContainer::SavePlaylist(int id = -1) {
|
void PlaylistContainer::SavePlaylist(int id = -1) {
|
||||||
QString filename = settings_.value("last_save_playlist").toString();
|
QString filename = settings_.value("last_save_playlist").toString();
|
||||||
|
|
||||||
|
// We want to use the playlist tab name as a default filename, but in the
|
||||||
|
// same directory as the last saved file.
|
||||||
|
|
||||||
|
// Strip off filename components until we find something that's a folder
|
||||||
|
forever {
|
||||||
|
QFileInfo fileinfo(filename);
|
||||||
|
if (filename.isEmpty() || fileinfo.isDir())
|
||||||
|
break;
|
||||||
|
|
||||||
|
filename = filename.section('/', 0, -2);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Use the home directory as a fallback in case the path is empty.
|
||||||
|
if (filename.isEmpty())
|
||||||
|
filename = QDir::homePath();
|
||||||
|
|
||||||
|
// Add the suggested filename based on the tab name
|
||||||
|
filename += "/" + ui_->tab_bar->tabText(ui_->tab_bar->currentIndex()) +
|
||||||
|
"." + manager_->parser()->default_extension();
|
||||||
|
|
||||||
|
QString default_filter = manager_->parser()->default_filter();
|
||||||
|
|
||||||
filename = QFileDialog::getSaveFileName(
|
filename = QFileDialog::getSaveFileName(
|
||||||
this, tr("Save playlist"), filename,
|
this, tr("Save playlist"), filename,
|
||||||
manager_->parser()->filters());
|
manager_->parser()->filters(), &default_filter);
|
||||||
|
|
||||||
if (filename.isNull())
|
if (filename.isNull())
|
||||||
return;
|
return;
|
||||||
|
@ -28,8 +28,9 @@ const int PlaylistParser::kMagicSize = 512;
|
|||||||
PlaylistParser::PlaylistParser(QObject *parent)
|
PlaylistParser::PlaylistParser(QObject *parent)
|
||||||
: QObject(parent)
|
: QObject(parent)
|
||||||
{
|
{
|
||||||
|
default_parser_ = new XSPFParser(this);
|
||||||
parsers_ << new M3UParser(this);
|
parsers_ << new M3UParser(this);
|
||||||
parsers_ << new XSPFParser(this);
|
parsers_ << default_parser_;
|
||||||
parsers_ << new PLSParser(this);
|
parsers_ << new PLSParser(this);
|
||||||
parsers_ << new ASXParser(this);
|
parsers_ << new ASXParser(this);
|
||||||
parsers_ << new AsxIniParser(this);
|
parsers_ << new AsxIniParser(this);
|
||||||
@ -50,12 +51,7 @@ QString PlaylistParser::filters() const {
|
|||||||
QStringList filters;
|
QStringList filters;
|
||||||
QStringList all_extensions;
|
QStringList all_extensions;
|
||||||
foreach (ParserBase* parser, parsers_) {
|
foreach (ParserBase* parser, parsers_) {
|
||||||
QStringList extensions;
|
filters << FilterForParser(parser, &all_extensions);
|
||||||
foreach (const QString& extension, parser->file_extensions())
|
|
||||||
extensions << "*." + extension;
|
|
||||||
all_extensions << extensions;
|
|
||||||
|
|
||||||
filters << tr("%1 playlists (%2)").arg(parser->name(), extensions.join(" "));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
filters.prepend(tr("All playlists (%1)").arg(all_extensions.join(" ")));
|
filters.prepend(tr("All playlists (%1)").arg(all_extensions.join(" ")));
|
||||||
@ -63,6 +59,25 @@ QString PlaylistParser::filters() const {
|
|||||||
return filters.join(";;");
|
return filters.join(";;");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
QString PlaylistParser::FilterForParser(const ParserBase *parser, QStringList *all_extensions) const {
|
||||||
|
QStringList extensions;
|
||||||
|
foreach (const QString& extension, parser->file_extensions())
|
||||||
|
extensions << "*." + extension;
|
||||||
|
|
||||||
|
if (all_extensions)
|
||||||
|
*all_extensions << extensions;
|
||||||
|
|
||||||
|
return tr("%1 playlists (%2)").arg(parser->name(), extensions.join(" "));
|
||||||
|
}
|
||||||
|
|
||||||
|
QString PlaylistParser::default_extension() const {
|
||||||
|
return default_parser_->file_extensions()[0];
|
||||||
|
}
|
||||||
|
|
||||||
|
QString PlaylistParser::default_filter() const {
|
||||||
|
return FilterForParser(default_parser_);
|
||||||
|
}
|
||||||
|
|
||||||
ParserBase* PlaylistParser::ParserForExtension(const QString& suffix) const {
|
ParserBase* PlaylistParser::ParserForExtension(const QString& suffix) const {
|
||||||
foreach (ParserBase* p, parsers_) {
|
foreach (ParserBase* p, parsers_) {
|
||||||
if (p->file_extensions().contains(suffix))
|
if (p->file_extensions().contains(suffix))
|
||||||
|
@ -34,6 +34,9 @@ public:
|
|||||||
QStringList file_extensions() const;
|
QStringList file_extensions() const;
|
||||||
QString filters() const;
|
QString filters() const;
|
||||||
|
|
||||||
|
QString default_extension() const;
|
||||||
|
QString default_filter() const;
|
||||||
|
|
||||||
ParserBase* MaybeGetParserForMagic(const QByteArray& data,
|
ParserBase* MaybeGetParserForMagic(const QByteArray& data,
|
||||||
const QString& mime_type = QString()) const;
|
const QString& mime_type = QString()) const;
|
||||||
ParserBase* ParserForExtension(const QString& suffix) const;
|
ParserBase* ParserForExtension(const QString& suffix) const;
|
||||||
@ -41,8 +44,13 @@ public:
|
|||||||
SongList Load(const QString& filename, ParserBase* parser = 0) const;
|
SongList Load(const QString& filename, ParserBase* parser = 0) const;
|
||||||
void Save(const SongList& songs, const QString& filename) const;
|
void Save(const SongList& songs, const QString& filename) const;
|
||||||
|
|
||||||
|
private:
|
||||||
|
QString FilterForParser(const ParserBase* parser,
|
||||||
|
QStringList* all_extensions = NULL) const;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
QList<ParserBase*> parsers_;
|
QList<ParserBase*> parsers_;
|
||||||
|
ParserBase* default_parser_;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // PLAYLISTPARSER_H
|
#endif // PLAYLISTPARSER_H
|
||||||
|
Loading…
x
Reference in New Issue
Block a user