/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Copyright (C) 2019 Bernhard Trinnes . * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ #ifndef DEVICEPLUGINSONOS_H #define DEVICEPLUGINSONOS_H #include "devices/deviceplugin.h" #include "plugintimer.h" #include "sonos.h" #include #include #include class DevicePluginSonos : public DevicePlugin { Q_OBJECT Q_PLUGIN_METADATA(IID "io.nymea.DevicePlugin" FILE "devicepluginsonos.json") Q_INTERFACES(DevicePlugin) public: explicit DevicePluginSonos(); ~DevicePluginSonos() override; Device::DeviceSetupStatus setupDevice(Device *device) override; DevicePairingInfo pairDevice(DevicePairingInfo &devicePairingInfo) override; DevicePairingInfo confirmPairing(DevicePairingInfo &devicePairingInfo, const QString &username, const QString &secret) override; void postSetupDevice(Device *device) override; void startMonitoringAutoDevices() override; void deviceRemoved(Device *device) override; Device::DeviceError executeAction(Device *device, const Action &action) override; private: PluginTimer *m_pluginTimer = nullptr; QTimer *m_tokenRefreshTimer = nullptr; QHash m_sonosConnections; QList m_householdIds; QByteArray m_sonosConnectionAccessToken; QByteArray m_sonosConnectionRefreshToken; QHash m_pendingActions; private slots: void onPluginTimer(); void onConnectionChanged(bool connected); void onRefreshTimeout(); void onHouseholdIdsReceived(QList householdIds); void onGroupsReceived(QList groupIds); void onPlayBackStatusReceived(const QString &groupId, Sonos::PlayBackObject playBack); void onMetadataStatusReceived(const QString &groupId, Sonos::MetadataStatus metaDataStatus); void onVolumeReceived(const QString &groupId, Sonos::GroupVolumeObject groupVolume); void onActionExecuted(QUuid actionId, bool success); }; #endif // DEVICEPLUGINSONOS_H