fixed command url

This commit is contained in:
nymea 2019-09-27 21:27:22 +02:00 committed by bernhard.trinnes
parent e8be8fc7b9
commit 8c06d6cbb3
4 changed files with 70 additions and 40 deletions

View File

@ -297,14 +297,15 @@ void Heos::clearQueue(int playerId)
void Heos::moveQueue(int playerId, int sourcQueueId, int destinationQueueId) void Heos::moveQueue(int playerId, int sourcQueueId, int destinationQueueId)
{ {
QUrl url("player"); QByteArray cmd("heos://player/move_queue_item?");
url.setScheme("heos"); QUrlQuery queryParams;
url.setPath("move_queue_item"); queryParams.addQueryItem("pid", QString::number(playerId));
url.setQuery(QString("pid=%1").arg(playerId)); queryParams.addQueryItem("sqid", QString::number(sourcQueueId));
url.setQuery(QString("sqid=%1").arg(sourcQueueId)); queryParams.addQueryItem("dqid", QString::number(destinationQueueId));
url.setQuery(QString("dqid=%1").arg(destinationQueueId)); cmd.append(queryParams.toString());
qCDebug(dcDenon) << "moving queue:" << url; cmd.append("\r\n");
m_socket->write(url.toEncoded()); qCDebug(dcDenon) << "moving queue:" << cmd;
m_socket->write(cmd);
} }
void Heos::checkForFirmwareUpdate(int playerId) void Heos::checkForFirmwareUpdate(int playerId)
@ -382,49 +383,53 @@ void Heos::browseSource(SOURCE_ID sourceId)
void Heos::playStation(int playerId, const QString &sourceId, const QString &containerId, const QString &mediaId, const QString &stationName) void Heos::playStation(int playerId, const QString &sourceId, const QString &containerId, const QString &mediaId, const QString &stationName)
{ {
QUrl url("browse"); QByteArray cmd("heos://browse/play_stream?");
url.setScheme("heos"); QUrlQuery queryParams;
url.setPath("play_stream"); queryParams.addQueryItem("pid", QString::number(playerId));
url.setQuery(QString("pid=%1").arg(playerId)); queryParams.addQueryItem("sid", sourceId);
url.setQuery(QString("sid=%1").arg(sourceId)); queryParams.addQueryItem("cid", containerId);
url.setQuery(QString("cid=%1").arg(containerId)); queryParams.addQueryItem("mid", mediaId);
url.setQuery(QString("mid=%1").arg(mediaId)); queryParams.addQueryItem("name", stationName);
url.setQuery(QString("name=%1").arg(stationName)); cmd.append(queryParams.toString());
qCDebug(dcDenon) << "playing url:" << url; cmd.append("\r\n");
m_socket->write(url.toEncoded()); qCDebug(dcDenon) << "playing station:" << cmd;
m_socket->write(cmd);
} }
void Heos::playPresetStation(int playerId, int presetNumber) void Heos::playPresetStation(int playerId, int presetNumber)
{ {
QUrl url("browse"); QByteArray cmd("heos://browse/play_preset?");
url.setScheme("heos"); QUrlQuery queryParams;
url.setPath("play_preset"); queryParams.addQueryItem("pid", QString::number(playerId));
url.setQuery(QString("pid=%1").arg(playerId)); queryParams.addQueryItem("preset", QString::number(presetNumber));
url.setQuery(QString("preset=%1").arg(presetNumber)); cmd.append(queryParams.toString());
qCDebug(dcDenon) << "playing url:" << url; cmd.append("\r\n");
m_socket->write(url.toEncoded()); qCDebug(dcDenon) << "playing preset station:" << cmd;
m_socket->write(cmd);
} }
void Heos::playInputSource(int playerId, const QString &inputName) void Heos::playInputSource(int playerId, const QString &inputName)
{ {
QUrl url("browse"); QByteArray cmd("heos://browse/play_input?");
url.setScheme("heos"); QUrlQuery queryParams;
url.setPath("play_input"); queryParams.addQueryItem("pid", QString::number(playerId));
url.setQuery(QString("pid=%1").arg(playerId)); queryParams.addQueryItem("input", inputName);
url.setQuery(QString("input=%1").arg(inputName)); cmd.append(queryParams.toString());
qCDebug(dcDenon) << "playing url:" << url; cmd.append("\r\n");
m_socket->write(url.toEncoded()); qCDebug(dcDenon) << "playing input source:" << cmd;
m_socket->write(cmd);
} }
void Heos::playUrl(int playerId, const QUrl &mediaUrl) void Heos::playUrl(int playerId, const QUrl &mediaUrl)
{ {
QUrl url("browse"); QByteArray cmd("heos://browse/play_stream?");
url.setScheme("heos"); QUrlQuery queryParams;
url.setPath("play_stream"); queryParams.addQueryItem("pid", QString::number(playerId));
url.setQuery(QString("pid=%1").arg(playerId)); queryParams.addQueryItem("url", mediaUrl.toString());
url.setQuery(QString("url=%1").arg(mediaUrl.toString())); cmd.append(queryParams.toString());
qCDebug(dcDenon) << "playing url:" << url; cmd.append("\r\n");
m_socket->write(url.toEncoded()); qCDebug(dcDenon) << "playing url:" << cmd;
m_socket->write(cmd);
} }
/* This command is used to perform the following actions: /* This command is used to perform the following actions:

View File

@ -67,6 +67,7 @@ IntegrationPluginDenon::IntegrationPluginDenon()
{ {
} }
void IntegrationPluginDenon::discoverThings(ThingDiscoveryInfo *info) void IntegrationPluginDenon::discoverThings(ThingDiscoveryInfo *info)
{ {
if (info->thingClassId() == AVRX1000ThingClassId) { if (info->thingClassId() == AVRX1000ThingClassId) {
@ -306,7 +307,7 @@ void IntegrationPluginDenon::executeAction(ThingActionInfo *info)
int playerId = thing->paramValue(heosPlayerThingPlayerIdParamTypeId).toInt(); int playerId = thing->paramValue(heosPlayerThingPlayerIdParamTypeId).toInt();
if (action.actionTypeId() == heosPlayerAlertActionTypeId) { if (action.actionTypeId() == heosPlayerAlertActionTypeId) {
heos->playUrl(playerId, QUrl("https://downloads.nymea.io/notification-sounds/definite.mp3")); heos->playUrl(playerId, m_notificationUrl);
return Device::DeviceErrorNoError; return Device::DeviceErrorNoError;
} }
@ -738,3 +739,14 @@ void IntegrationPluginDenon::onAvahiServiceEntryRemoved(const ZeroConfServiceEnt
{ {
qCDebug(dcDenon()) << "Avahi service entry removed:" << serviceEntry; qCDebug(dcDenon()) << "Avahi service entry removed:" << serviceEntry;
} }
void DevicePluginDenon::onPluginConfigurationChanged(const ParamTypeId &paramTypeId, const QVariant &value)
{
qCDebug(dcDenon()) << "Plugin configuration changed";
// Check advanced mode
if (paramTypeId == denonPluginNotificationUrlParamTypeId) {
qCDebug(dcDenon()) << "Advanced mode" << (value.toBool() ? "enabled." : "disabled.");
m_notificationUrl = value.toUrl();
}
}

View File

@ -56,6 +56,7 @@ class IntegrationPluginDenon : public IntegrationPlugin
public: public:
explicit IntegrationPluginDenon(); explicit IntegrationPluginDenon();
void init() override;
void discoverThings(ThingDiscoveryInfo *info) override; void discoverThings(ThingDiscoveryInfo *info) override;
void setupThing(ThingSetupInfo *info) override; void setupThing(ThingSetupInfo *info) override;
void postSetupThing(Thing *thing) override; void postSetupThing(Thing *thing) override;
@ -75,6 +76,7 @@ private:
QHash<int, Thing *> m_playerIds; QHash<int, Thing *> m_playerIds;
QHash<int, Thing *> m_discoveredPlayerIds; QHash<int, Thing *> m_discoveredPlayerIds;
QHash<const Action *, int> m_asyncActions; QHash<const Action *, int> m_asyncActions;
QUrl m_notificationUrl;
private slots: private slots:
@ -98,6 +100,8 @@ private slots:
void onAvrMuteChanged(bool mute); void onAvrMuteChanged(bool mute);
void onAvrPowerChanged(bool power); void onAvrPowerChanged(bool power);
void onAvrSurroundModeChanged(const QByteArray &surroundMode); void onAvrSurroundModeChanged(const QByteArray &surroundMode);
void onPluginConfigurationChanged(const ParamTypeId &paramTypeId, const QVariant &value);
}; };
#endif // INTEGRATIONPLUGINDENON_H #endif // INTEGRATIONPLUGINDENON_H

View File

@ -2,6 +2,15 @@
"displayName": "Denon", "displayName": "Denon",
"name": "Denon", "name": "Denon",
"id": "cd758269-dbbb-4ef0-80ab-48bd9a8a2765", "id": "cd758269-dbbb-4ef0-80ab-48bd9a8a2765",
"paramTypes": [
{
"id": "5a3cd3eb-8ff5-4110-aef0-7b0608450e60",
"name": "notificationUrl",
"displayName": "Notification url",
"type" : "QString",
"defaultValue": "https://downloads.nymea.io/notification-sounds/doorbell.mp3"
}
],
"vendors": [ "vendors": [
{ {
"id": "cf0a9644-2c13-4daf-85c1-ad88d6745b42", "id": "cf0a9644-2c13-4daf-85c1-ad88d6745b42",