PlaylistParser: Fix saving relative playlists to new files

Fixes #1092
This commit is contained in:
Jonas Kvinge
2023-01-04 17:40:54 +01:00
parent 1dfe07003f
commit 70f829a2e5

View File

@@ -200,19 +200,35 @@ SongList PlaylistParser::LoadFromDevice(QIODevice *device, const QString &path_h
void PlaylistParser::Save(const SongList &songs, const QString &filename, const PlaylistSettingsPage::PathType path_type) const { void PlaylistParser::Save(const SongList &songs, const QString &filename, const PlaylistSettingsPage::PathType path_type) const {
QFileInfo fileinfo(filename); QFileInfo fileinfo(filename);
QDir dir(fileinfo.path());
if (!dir.exists()) {
qLog(Warning) << "Directory does not exist" << dir.path();
return;
}
// Find a parser that supports this file extension // Find a parser that supports this file extension
ParserBase *parser = ParserForExtension(Type_Save, fileinfo.suffix()); ParserBase *parser = ParserForExtension(Type_Save, fileinfo.suffix());
if (!parser) { if (!parser) {
qLog(Warning) << "Unknown filetype:" << filename; qLog(Warning) << "Unknown filetype" << filename;
return; return;
} }
// Open the file if (path_type == PlaylistSettingsPage::PathType_Absolute && dir.path() != dir.absolutePath()) {
QFile file(path_type == PlaylistSettingsPage::PathType_Absolute ? fileinfo.absoluteFilePath() : fileinfo.canonicalFilePath()); dir.setPath(dir.absolutePath());
if (!file.open(QIODevice::WriteOnly)) return; }
else if (path_type != PlaylistSettingsPage::PathType_Absolute && !dir.canonicalPath().isEmpty() && dir.path() != dir.canonicalPath()) {
dir.setPath(dir.canonicalPath());
}
parser->Save(songs, &file, path_type == PlaylistSettingsPage::PathType_Absolute ? fileinfo.absolutePath() : fileinfo.canonicalPath(), path_type); // Open the file
QFile file(fileinfo.absoluteFilePath());
if (!file.open(QIODevice::WriteOnly)) {
qLog(Warning) << "Failed to open" << filename << "for writing.";
return;
}
parser->Save(songs, &file, dir, path_type);
file.close(); file.close();