From d59fa8d83f96888014307dd365fd0bbfd39d7452 Mon Sep 17 00:00:00 2001 From: "craig.p.drummond" Date: Tue, 4 Feb 2014 19:10:18 +0000 Subject: [PATCH] Only want local files from Mopidy for library and folders --- mpd/mpdconnection.cpp | 6 +++--- mpd/mpdparseutils.cpp | 12 ++++++------ mpd/mpdparseutils.h | 5 +++-- 3 files changed, 12 insertions(+), 11 deletions(-) diff --git a/mpd/mpdconnection.cpp b/mpd/mpdconnection.cpp index 9aabe190d..ce1574f76 100644 --- a/mpd/mpdconnection.cpp +++ b/mpd/mpdconnection.cpp @@ -1234,7 +1234,7 @@ void MPDConnection::loadLibrary() MusicLibraryItemRoot *root=0; if (response.ok) { root = new MusicLibraryItemRoot; - MPDParseUtils::parseLibraryItems(response.data, details.dir, ver, root); + MPDParseUtils::parseLibraryItems(response.data, details.dir, ver, mopidy, root); } else { // MPD >=0.18 can fail listallinfo for large DBs, so get info dir by dir... root = new MusicLibraryItemRoot; if (!listDirInfo("/", root)) { @@ -1255,7 +1255,7 @@ void MPDConnection::loadFolders() emit updatingFileList(); Response response=sendCommand("listall"); if (response.ok) { - emit dirViewUpdated(MPDParseUtils::parseDirViewItems(response.data), dbUpdate); + emit dirViewUpdated(MPDParseUtils::parseDirViewItems(response.data, mopidy), dbUpdate); } emit updatedFileList(); } @@ -1482,7 +1482,7 @@ bool MPDConnection::listDirInfo(const QString &dir, MusicLibraryItemRoot *root) Response response=sendCommand(topLevel ? "lsinfo" : ("lsinfo "+encodeName(dir))); if (response.ok) { QSet childDirs; - MPDParseUtils::parseLibraryItems(response.data, details.dir, ver, root, !topLevel, &childDirs); + MPDParseUtils::parseLibraryItems(response.data, details.dir, ver, mopidy, root, !topLevel, &childDirs); foreach (const QString &child, childDirs) { if (!listDirInfo(child, root)) { return false; diff --git a/mpd/mpdparseutils.cpp b/mpd/mpdparseutils.cpp index cce92d8b1..8492e6020 100644 --- a/mpd/mpdparseutils.cpp +++ b/mpd/mpdparseutils.cpp @@ -432,7 +432,8 @@ void MPDParseUtils::setGroupMultiple(bool g) } void MPDParseUtils::parseLibraryItems(const QByteArray &data, const QString &mpdDir, long mpdVersion, - MusicLibraryItemRoot *rootItem, bool parsePlaylists, QSet *childDirs) + bool isMopidy, MusicLibraryItemRoot *rootItem, bool parsePlaylists, + QSet *childDirs) { bool canSplitCue=mpdVersion>=MPD_MAKE_VERSION(0,17,0); QByteArray currentItem; @@ -452,7 +453,7 @@ void MPDParseUtils::parseLibraryItems(const QByteArray &data, const QString &mpd if (i == amountOfLines - 1 || lines.at(i + 1).startsWith("file:") || lines.at(i + 1).startsWith("playlist:")) { Song currentSong = parseSong(currentItem, Library); currentItem.clear(); - if (currentSong.file.isEmpty()) { + if (currentSong.file.isEmpty() || (isMopidy && !currentSong.file.startsWith(Song::constMopidyLocal))) { continue; } @@ -639,7 +640,7 @@ void MPDParseUtils::parseLibraryItems(const QByteArray &data, const QString &mpd } } -DirViewItemRoot * MPDParseUtils::parseDirViewItems(const QByteArray &data) +DirViewItemRoot * MPDParseUtils::parseDirViewItems(const QByteArray &data, bool isMopidy) { QList lines = data.split('\n'); DirViewItemRoot *rootItem = new DirViewItemRoot; @@ -656,10 +657,9 @@ DirViewItemRoot * MPDParseUtils::parseDirViewItems(const QByteArray &data) } else if (line.startsWith("playlist: ")) { path=line.remove(0, 10); } - - if (!path.isEmpty()) { + qWarning() << path << isMopidy << path.startsWith(Song::constMopidyLocal); + if (!path.isEmpty() && (!isMopidy || path.startsWith(Song::constMopidyLocal))) { QString mopidyPath; - bool isMopidy=path.startsWith(Song::constMopidyLocal); if (isMopidy) { mopidyPath=path; path=Song::decodePath(path); diff --git a/mpd/mpdparseutils.h b/mpd/mpdparseutils.h index 94a23efa2..95c6ebb4c 100644 --- a/mpd/mpdparseutils.h +++ b/mpd/mpdparseutils.h @@ -69,8 +69,9 @@ namespace MPDParseUtils extern bool groupMultiple(); extern void setGroupMultiple(bool g); extern void parseLibraryItems(const QByteArray &data, const QString &mpdDir, long mpdVersion, - MusicLibraryItemRoot *rootItem, bool parsePlaylists=true, QSet *childDirs=0); - extern DirViewItemRoot * parseDirViewItems(const QByteArray &data); + bool isMopidy, MusicLibraryItemRoot *rootItem, bool parsePlaylists=true, + QSet *childDirs=0); + extern DirViewItemRoot * parseDirViewItems(const QByteArray &data, bool isMopidy); extern QList parseOuputs(const QByteArray &data); extern QString addStreamName(const QString &url, const QString &name); extern QString getStreamName(const QString &url);