Skip to content

Commit 7cdb233

Browse files
Remove obsolete AIM, IRC ICQ messenger fields from broadcasting preferences
These messenger services are not standard. Removed the UI fields, backend profile storage, and sidechain transmission code entirely. Fixes #12432
1 parent 8837b44 commit 7cdb233

6 files changed

Lines changed: 263 additions & 162 deletions

File tree

src/engine/sidechain/shoutconnection.cpp

Lines changed: 12 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -249,9 +249,6 @@ void ShoutConnection::updateFromPreferences() {
249249
QByteArray baStreamWebsite = encodeString(m_pProfile->getStreamWebsite());
250250
QByteArray baStreamDesc = encodeString(m_pProfile->getStreamDesc());
251251
QByteArray baStreamGenre = encodeString(m_pProfile->getStreamGenre());
252-
QByteArray baStreamIRC = encodeString(m_pProfile->getStreamIRC());
253-
QByteArray baStreamAIM = encodeString(m_pProfile->getStreamAIM());
254-
QByteArray baStreamICQ = encodeString(m_pProfile->getStreamICQ());
255252

256253
// Whether the stream is public.
257254
bool streamPublic = m_pProfile->getStreamPublic();
@@ -331,26 +328,19 @@ void ShoutConnection::updateFromPreferences() {
331328
return;
332329
}
333330

334-
#ifdef SHOUT_META_IRC
335-
if (shout_set_meta(m_pShout, SHOUT_META_IRC, baStreamIRC.constData()) != SHOUTERR_SUCCESS) {
336-
errorDialog(tr("Error setting stream IRC!"), shout_get_error(m_pShout));
337-
return;
338-
}
339-
#endif
340-
341-
#ifdef SHOUT_META_AIM
342-
if (shout_set_meta(m_pShout, SHOUT_META_AIM, baStreamAIM.constData()) != SHOUTERR_SUCCESS) {
343-
errorDialog(tr("Error setting stream AIM!"), shout_get_error(m_pShout));
344-
return;
345-
}
346-
#endif
347-
348-
#ifdef SHOUT_META_ICQ
349-
if (shout_set_meta(m_pShout, SHOUT_META_ICQ, baStreamICQ.constData()) != SHOUTERR_SUCCESS) {
350-
errorDialog(tr("Error setting stream ICQ!"), shout_get_error(m_pShout));
351-
return;
331+
// Send arbitrary extra metadata (irc, instagram, discord, etc.) to the server
332+
const QMap<QString, QString> extraMetadata = m_pProfile->getStreamExtraMetadata();
333+
for (auto it = extraMetadata.constBegin(); it != extraMetadata.constEnd(); ++it) {
334+
if (it.value().isEmpty()) {
335+
continue;
336+
}
337+
QByteArray baKey = it.key().toLatin1();
338+
QByteArray baValue = encodeString(it.value());
339+
if (shout_set_meta(m_pShout, baKey.constData(), baValue.constData()) != SHOUTERR_SUCCESS) {
340+
kLogger.warning() << "Error setting stream meta" << it.key()
341+
<< ":" << shout_get_error(m_pShout);
342+
}
352343
}
353-
#endif
354344

355345
if (shout_set_public(m_pShout, streamPublic ? 1 : 0) != SHOUTERR_SUCCESS) {
356346
errorDialog(tr("Error setting stream public!"), shout_get_error(m_pShout));

src/preferences/broadcastprofile.cpp

Lines changed: 71 additions & 67 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
#include <QEventLoop>
77
#include <QFile>
88
#include <QFileInfo>
9+
#include <QMap>
910
#include <QRegularExpression>
1011
#include <QString>
1112
#include <QStringList>
@@ -59,11 +60,10 @@ constexpr const char* kServertype = "Servertype";
5960
constexpr const char* kStreamDesc = "StreamDesc";
6061
constexpr const char* kStreamGenre = "StreamGenre";
6162
constexpr const char* kStreamName = "StreamName";
62-
constexpr const char* kStreamIRC = "StreamIRC";
63-
constexpr const char* kStreamAIM = "StreamAIM";
64-
constexpr const char* kStreamICQ = "StreamICQ";
6563
constexpr const char* kStreamPublic = "StreamPublic";
6664
constexpr const char* kStreamWebsite = "StreamWebsite";
65+
constexpr const char* kStreamExtraMetadata = "StreamExtraMetadata";
66+
constexpr const char* kStreamExtraMetadataEntry = "Entry";
6767

6868
#ifdef __QTKEYCHAIN__
6969
constexpr const char* kKeychainPrefix = "Mixxx - ";
@@ -188,37 +188,34 @@ bool BroadcastProfile::equals(BroadcastProfilePtr other) {
188188
}
189189

190190
bool BroadcastProfile::valuesEquals(BroadcastProfilePtr other) {
191-
if (getEnabled() == other->getEnabled()
192-
&& secureCredentialStorage() == other->secureCredentialStorage()
193-
&& getHost() == other->getHost()
194-
&& getPort() == other->getPort()
195-
&& getServertype() == other->getServertype()
196-
&& getLogin() == other->getLogin()
197-
&& getPassword() == other->getPassword()
198-
&& getEnableReconnect() == other->getEnableReconnect()
199-
&& getReconnectPeriod() == other->getReconnectPeriod()
200-
&& getLimitReconnects() == other->getLimitReconnects()
201-
&& getMaximumRetries() == other->getMaximumRetries()
202-
&& getNoDelayFirstReconnect() == other->getNoDelayFirstReconnect()
203-
&& getReconnectFirstDelay() == other->getReconnectFirstDelay()
204-
&& getFormat() == other->getFormat()
205-
&& getBitrate() == other->getBitrate()
206-
&& getChannels() == other->getChannels()
207-
&& getMountpoint() == other->getMountpoint()
208-
&& getStreamName() == other->getStreamName()
209-
&& getStreamDesc() == other->getStreamDesc()
210-
&& getStreamGenre() == other->getStreamGenre()
211-
&& getStreamPublic() == other->getStreamPublic()
212-
&& getStreamWebsite() == other->getStreamWebsite()
213-
&& getStreamIRC() == other->getStreamIRC()
214-
&& getStreamAIM() == other->getStreamAIM()
215-
&& getStreamICQ() == other->getStreamICQ()
216-
&& getEnableMetadata() == other->getEnableMetadata()
217-
&& getMetadataCharset() == other->getMetadataCharset()
218-
&& getCustomArtist() == other->getCustomArtist()
219-
&& getCustomTitle() == other->getCustomTitle()
220-
&& getMetadataFormat() == other->getMetadataFormat()
221-
&& getOggDynamicUpdate() == other->getOggDynamicUpdate()) {
191+
if (getEnabled() == other->getEnabled() &&
192+
secureCredentialStorage() == other->secureCredentialStorage() &&
193+
getHost() == other->getHost() && getPort() == other->getPort() &&
194+
getServertype() == other->getServertype() &&
195+
getLogin() == other->getLogin() &&
196+
getPassword() == other->getPassword() &&
197+
getEnableReconnect() == other->getEnableReconnect() &&
198+
getReconnectPeriod() == other->getReconnectPeriod() &&
199+
getLimitReconnects() == other->getLimitReconnects() &&
200+
getMaximumRetries() == other->getMaximumRetries() &&
201+
getNoDelayFirstReconnect() == other->getNoDelayFirstReconnect() &&
202+
getReconnectFirstDelay() == other->getReconnectFirstDelay() &&
203+
getFormat() == other->getFormat() &&
204+
getBitrate() == other->getBitrate() &&
205+
getChannels() == other->getChannels() &&
206+
getMountpoint() == other->getMountpoint() &&
207+
getStreamName() == other->getStreamName() &&
208+
getStreamDesc() == other->getStreamDesc() &&
209+
getStreamGenre() == other->getStreamGenre() &&
210+
getStreamPublic() == other->getStreamPublic() &&
211+
getStreamWebsite() == other->getStreamWebsite() &&
212+
getStreamExtraMetadata() == other->getStreamExtraMetadata() &&
213+
getEnableMetadata() == other->getEnableMetadata() &&
214+
getMetadataCharset() == other->getMetadataCharset() &&
215+
getCustomArtist() == other->getCustomArtist() &&
216+
getCustomTitle() == other->getCustomTitle() &&
217+
getMetadataFormat() == other->getMetadataFormat() &&
218+
getOggDynamicUpdate() == other->getOggDynamicUpdate()) {
222219
return true;
223220
}
224221

@@ -261,10 +258,7 @@ void BroadcastProfile::copyValuesTo(BroadcastProfilePtr other) {
261258
other->setStreamGenre(this->getStreamGenre());
262259
other->setStreamPublic(this->getStreamPublic());
263260
other->setStreamWebsite(this->getStreamWebsite());
264-
other->setStreamIRC(this->getStreamIRC());
265-
other->setStreamAIM(this->getStreamAIM());
266-
other->setStreamICQ(this->getStreamICQ());
267-
261+
other->setStreamExtraMetadata(this->getStreamExtraMetadata());
268262
other->setEnableMetadata(this->getEnableMetadata());
269263
other->setMetadataCharset(this->getMetadataCharset());
270264
other->setCustomArtist(this->getCustomArtist());
@@ -295,9 +289,7 @@ void BroadcastProfile::adoptDefaultValues() {
295289
m_streamName = kDefaultStreamName;
296290
m_streamPublic = kDefaultStreamPublic;
297291
m_streamWebsite = MIXXX_WEBSITE_URL;
298-
m_streamIRC.clear();
299-
m_streamAIM.clear();
300-
m_streamICQ.clear();
292+
m_streamExtraMetadata.clear();
301293

302294
m_enableMetadata = kDefaultEnableMetadata;
303295
m_metadataCharset = QString();
@@ -384,9 +376,24 @@ bool BroadcastProfile::loadValues(const QString& filename) {
384376
m_streamGenre = selectCleanNodeString(doc, kStreamGenre, &fixedStrings);
385377
m_streamPublic = (bool)XmlParse::selectNodeInt(doc, kStreamPublic);
386378
m_streamWebsite = selectCleanNodeString(doc, kStreamWebsite, &fixedStrings);
387-
m_streamIRC = selectCleanNodeString(doc, kStreamIRC, &fixedStrings);
388-
m_streamAIM = selectCleanNodeString(doc, kStreamAIM, &fixedStrings);
389-
m_streamICQ = selectCleanNodeString(doc, kStreamICQ, &fixedStrings);
379+
380+
// Load extra metadata key/value pairs
381+
m_streamExtraMetadata.clear();
382+
QDomElement extraMetaElem = XmlParse::selectNode(doc, kStreamExtraMetadata).toElement();
383+
if (!extraMetaElem.isNull()) {
384+
QDomNodeList entries = extraMetaElem.elementsByTagName(
385+
QString::fromLatin1(kStreamExtraMetadataEntry));
386+
for (int i = 0; i < entries.count(); i++) {
387+
QDomElement entry = entries.at(i).toElement();
388+
if (!entry.isNull()) {
389+
QString key = entry.attribute(QStringLiteral("key"));
390+
QString value = removeControlCharacters(entry.text(), key, &fixedStrings);
391+
if (!key.isEmpty()) {
392+
m_streamExtraMetadata.insert(key, value);
393+
}
394+
}
395+
}
396+
}
390397

391398
m_format = selectCleanNodeString(doc, kFormat, &fixedStrings);
392399
if (m_format == BROADCAST_FORMAT_OV_LEGACY) {
@@ -463,9 +470,22 @@ bool BroadcastProfile::save(const QString& filename) {
463470
XmlParse::addElement(doc, docRoot, kStreamPublic,
464471
QString::number((int)m_streamPublic));
465472
XmlParse::addElement(doc, docRoot, kStreamWebsite, m_streamWebsite);
466-
XmlParse::addElement(doc, docRoot, kStreamIRC, m_streamIRC);
467-
XmlParse::addElement(doc, docRoot, kStreamAIM, m_streamAIM);
468-
XmlParse::addElement(doc, docRoot, kStreamICQ, m_streamICQ);
473+
474+
// Save extra metadata key/value pairs
475+
if (!m_streamExtraMetadata.isEmpty()) {
476+
QDomElement extraMetaElem = doc.createElement(
477+
QString::fromLatin1(kStreamExtraMetadata));
478+
for (auto it = m_streamExtraMetadata.constBegin();
479+
it != m_streamExtraMetadata.constEnd();
480+
++it) {
481+
QDomElement entry = doc.createElement(
482+
QString::fromLatin1(kStreamExtraMetadataEntry));
483+
entry.setAttribute(QStringLiteral("key"), it.key());
484+
entry.appendChild(doc.createTextNode(it.value()));
485+
extraMetaElem.appendChild(entry);
486+
}
487+
docRoot.appendChild(extraMetaElem);
488+
}
469489

470490
XmlParse::addElement(doc, docRoot, kFormat, m_format);
471491
XmlParse::addElement(doc, docRoot, kBitrate,
@@ -774,28 +794,12 @@ void BroadcastProfile::setStreamWebsite(const QString& value) {
774794
m_streamWebsite = removeControlCharacters(value, kStreamWebsite);
775795
}
776796

777-
QString BroadcastProfile::getStreamIRC() const {
778-
return m_streamIRC;
779-
}
780-
781-
void BroadcastProfile::setStreamIRC(const QString& value) {
782-
m_streamIRC = removeControlCharacters(value, kStreamIRC);
783-
}
784-
785-
QString BroadcastProfile::getStreamAIM() const {
786-
return m_streamAIM;
787-
}
788-
789-
void BroadcastProfile::setStreamAIM(const QString& value) {
790-
m_streamAIM = removeControlCharacters(value, kStreamAIM);
791-
}
792-
793-
QString BroadcastProfile::getStreamICQ() const {
794-
return m_streamICQ;
797+
QMap<QString, QString> BroadcastProfile::getStreamExtraMetadata() const {
798+
return m_streamExtraMetadata;
795799
}
796800

797-
void BroadcastProfile::setStreamICQ(const QString& value) {
798-
m_streamICQ = removeControlCharacters(value, kStreamICQ);
801+
void BroadcastProfile::setStreamExtraMetadata(const QMap<QString, QString>& metadata) {
802+
m_streamExtraMetadata = metadata;
799803
}
800804

801805
QString BroadcastProfile::getFormat() const {

src/preferences/broadcastprofile.h

Lines changed: 5 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
11
#pragma once
22

3-
#include <QSharedPointer>
3+
#include <QMap>
44
#include <QObject>
5+
#include <QSharedPointer>
56
#include <QString>
67

78
class BroadcastProfile;
@@ -118,14 +119,8 @@ class BroadcastProfile : public QObject {
118119
QString getStreamWebsite() const;
119120
void setStreamWebsite(const QString& value);
120121

121-
QString getStreamIRC() const;
122-
void setStreamIRC(const QString& value);
123-
124-
QString getStreamAIM() const;
125-
void setStreamAIM(const QString& value);
126-
127-
QString getStreamICQ() const;
128-
void setStreamICQ(const QString& value);
122+
QMap<QString, QString> getStreamExtraMetadata() const;
123+
void setStreamExtraMetadata(const QMap<QString, QString>& metadata);
129124

130125
bool getEnableMetadata() const;
131126
void setEnableMetadata(bool value);
@@ -189,9 +184,7 @@ class BroadcastProfile : public QObject {
189184
QString m_streamGenre;
190185
bool m_streamPublic;
191186
QString m_streamWebsite;
192-
QString m_streamIRC;
193-
QString m_streamAIM;
194-
QString m_streamICQ;
187+
QMap<QString, QString> m_streamExtraMetadata;
195188

196189
QString m_format;
197190
int m_bitrate;

0 commit comments

Comments
 (0)