From 046c82260408c11134abf66b1e2bea07c2786dde Mon Sep 17 00:00:00 2001 From: Jonas Kvinge Date: Fri, 22 Mar 2019 23:23:22 +0100 Subject: [PATCH] Fix loading playlists correctly --- src/playlistparsers/parserbase.cpp | 25 ++++++++++++++----------- src/playlistparsers/xspfparser.cpp | 9 ++++----- 2 files changed, 18 insertions(+), 16 deletions(-) diff --git a/src/playlistparsers/parserbase.cpp b/src/playlistparsers/parserbase.cpp index c41a8c386..e7f8b8611 100644 --- a/src/playlistparsers/parserbase.cpp +++ b/src/playlistparsers/parserbase.cpp @@ -44,20 +44,23 @@ void ParserBase::LoadSong(const QString &filename_or_url, qint64 beginning, cons if (filename_or_url.contains(QRegExp("^[a-z]{2,}:"))) { QUrl url(filename_or_url); - if (url.scheme() == "file") { + song->set_source(Song::SourceFromURL(url)); + if (song->source() == Song::Source_LocalFile) { filename = url.toLocalFile(); } - //else { - // song->set_url(QUrl::fromUserInput(filename_or_url)); - // song->set_filetype(Song::Type_Stream); - // song->set_valid(true); - // return; - // } + else if (song->source() == Song::Source_Stream || song->source() == Song::Source_Tidal) { + song->set_url(QUrl::fromUserInput(filename_or_url)); + song->set_filetype(Song::FileType_Stream); + song->set_valid(true); + return; + } + else { + qLog(Error) << "Don't know how to handle" << url; + } } - // Strawberry always wants / separators internally. Using - // QDir::fromNativeSeparators() only works on the same platform the playlist - // was created on/for, using replace() lets playlists work on any platform. + // Strawberry always wants / separators internally. + // Using QDir::fromNativeSeparators() only works on the same platform the playlist was created on/for, using replace() lets playlists work on any platform. filename = filename.replace('\\', '/'); // Make the path absolute @@ -74,6 +77,7 @@ void ParserBase::LoadSong(const QString &filename_or_url, qint64 beginning, cons // Search in the collection Song collection_song; + collection_song.set_source(Song::Source_Collection); if (collection_) { collection_song = collection_->GetSongByUrl(url, beginning); } @@ -91,7 +95,6 @@ void ParserBase::LoadSong(const QString &filename_or_url, qint64 beginning, cons Song ParserBase::LoadSong(const QString &filename_or_url, qint64 beginning, const QDir &dir) const { Song song; - song.set_source(Song::Source_LocalFile); LoadSong(filename_or_url, beginning, dir, &song); return song; diff --git a/src/playlistparsers/xspfparser.cpp b/src/playlistparsers/xspfparser.cpp index 85633d611..ac88ea51c 100644 --- a/src/playlistparsers/xspfparser.cpp +++ b/src/playlistparsers/xspfparser.cpp @@ -162,21 +162,20 @@ void XSPFParser::Save(const SongList &songs, QIODevice *device, const QDir &dir, writer.writeTextElement("album", song.album()); } if (song.length_nanosec() != -1) { - writer.writeTextElement( - "duration", QString::number(song.length_nanosec() / kNsecPerMsec)); + writer.writeTextElement("duration", QString::number(song.length_nanosec() / kNsecPerMsec)); } if (song.track() > 0) { writer.writeTextElement("trackNum", QString::number(song.track())); } - QString art = song.art_manual().isEmpty() ? song.art_automatic() - : song.art_manual(); + QString art = song.art_manual().isEmpty() ? song.art_automatic() : song.art_manual(); // Ignore images that are in our resource bundle. if (!art.startsWith(":") && !art.isEmpty()) { QString art_filename; if (!art.contains("://")) { art_filename = art; - } else if (QUrl(art).scheme() == "file") { + } + else if (QUrl(art).scheme() == "file") { art_filename = QUrl(art).toLocalFile(); }