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:
committed by
Craig Drummond
parent
69f687c162
commit
a05d81fb03
@@ -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
|
||||
-----
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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, "#");
|
||||
}
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user