When adding a stream to the play queue, encode name using #StreamName:name and not just #name - as MPD 0.22 uses this for #icy-metadata

Closes #1547
This commit is contained in:
Craig Drummond
2019-11-02 10:29:08 +00:00
committed by Craig Drummond
parent 69f687c162
commit a05d81fb03
4 changed files with 22 additions and 11 deletions

View File

@@ -49,6 +49,8 @@
37. Remove 'Show Unplayed Only' podcasts action, reported to cause crash when
refreshing lists.
38. Remove zooming from context view.
39. When adding a stream to the play queue, encode name using #StreamName:name
and not just #name - as MPD 0.22 uses this for #icy-metadata
2.3.3
-----

View File

@@ -2034,7 +2034,7 @@ void MPDConnection::listStreams()
void MPDConnection::saveStream(const QString &url, const QString &name)
{
if (sendCommand("playlistadd "+encodeName(constStreamsPlayListName)+" "+encodeName(MPDParseUtils::addStreamName(url, name))).ok) {
if (sendCommand("playlistadd "+encodeName(constStreamsPlayListName)+" "+encodeName(MPDParseUtils::addStreamName(url, name, true))).ok) {
emit savedStream(url, name);
}
}

View File

@@ -372,7 +372,7 @@ Song MPDParseUtils::parseSong(const QList<QByteArray> &lines, Location location)
song.guessTags();
song.fillEmptyFields();
} else if (Loc_Streams==location) {
song.setName(getAndRemoveStreamName(song.file));
song.setName(getAndRemoveStreamName(song.file, true));
} else {
QString origFile=song.file;
bool modifiedFile=false;
@@ -825,11 +825,12 @@ QList<MPDParseUtils::Sticker> MPDParseUtils::parseStickers(const QByteArray &dat
return stickers;
}
QString MPDParseUtils::addStreamName(const QString &url, const QString &name)
static const QString constStreamNameHash("#StreamName:");
QString MPDParseUtils::addStreamName(const QString &url, const QString &name, bool singleHash)
{
return name.isEmpty()
? url
: (url+(QUrl(url).path().isEmpty() ? "/#" : "#")+name);
: (url+(QUrl(url).path().isEmpty() ? "/" : "")+(singleHash ? QLatin1String("#") : constStreamNameHash)+name);
}
// Previous versions replaced '#' in a stream's name with ${hash}.
@@ -839,21 +840,27 @@ static const QString constHashReplacement=QLatin1String("${hash}");
QString MPDParseUtils::getStreamName(const QString &url)
{
int idx=url.indexOf('#');
QString name=-1==idx ? QString() : url.mid(idx+1);
int idx=url.indexOf(constStreamNameHash);
QString name=-1==idx ? QString() : url.mid(idx+constStreamNameHash.length());
while (name.contains(constHashReplacement)) {
name.replace(constHashReplacement, "#");
}
return name;
}
QString MPDParseUtils::getAndRemoveStreamName(QString &url)
QString MPDParseUtils::getAndRemoveStreamName(QString &url, bool checkSingleHash)
{
int idx=url.indexOf('#');
int idx=url.indexOf(constStreamNameHash);
int len=constStreamNameHash.length();
if (-1==idx && checkSingleHash) {
idx=url.indexOf('#');
len=1;
}
if (-1==idx) {
return QString();
}
QString name=url.mid(idx+1);
QString name=url.mid(idx+len);
while (name.contains(constHashReplacement)) {
name.replace(constHashReplacement, "#");
}

View File

@@ -91,9 +91,11 @@ namespace MPDParseUtils
extern QList<Output> parseOuputs(const QByteArray &data);
extern QByteArray parseSticker(const QByteArray &data, const QByteArray &sticker);
extern QList<Sticker> parseStickers(const QByteArray &data, const QByteArray &sticker);
extern QString addStreamName(const QString &url, const QString &name);
// Single hash when saving streams to [Radio Streams] - for compatability
extern QString addStreamName(const QString &url, const QString &name, bool singleHash=false);
extern QString getStreamName(const QString &url);
extern QString getAndRemoveStreamName(QString &url);
// checkSingleHash - check for #<Name> as well as #StreamName:<Name>
extern QString getAndRemoveStreamName(QString &url, bool checkSingleHash=false);
};
#endif