removed browser actions, added browse item

master
Boernsman 2019-10-18 20:45:59 +02:00
parent 83003d0270
commit ac3ce25b6b
3 changed files with 55 additions and 12 deletions

View File

@ -81,6 +81,11 @@ void DevicePluginSonos::setupDevice(DeviceSetupInfo *info)
QByteArray refreshToken = pluginStorage()->value("refresh_token").toByteArray();
pluginStorage()->endGroup();
if (refreshToken.isEmpty()) {
info->finish(Device::DeviceErrorAuthenticationFailure);
return;
}
sonos = new Sonos(hardwareManager()->networkManager(), "0a8f6d44-d9d1-4474-bcfa-cfb41f8b66e8", "3095ce48-0c5d-47ce-a1f4-6005c7b8fdb5", this);
connect(sonos, &Sonos::connectionChanged, this, &DevicePluginSonos::onConnectionChanged);
connect(sonos, &Sonos::householdIdsReceived, this, &DevicePluginSonos::onHouseholdIdsReceived);
@ -345,14 +350,14 @@ void DevicePluginSonos::browseDevice(BrowseResult *result)
QString householdId = result->device()->paramValue(sonosGroupDeviceHouseholdIdParamTypeId).toString();
if (result->itemId().isEmpty()){
BrowserItem item;
item.setId("favorites");
item.setId("/favorites");
item.setIcon(BrowserItem::BrowserIconFavorites);
item.setExecutable(false);
item.setBrowsable(true);
item.setDisplayName("Favorites");
result->addItem(item);
result->finish(Device::DeviceErrorNoError);
} else if (result->itemId() == "favorites") {
} else if (result->itemId() == "/favorites") {
sonosConnection->getFavorites(householdId);
m_pendingBrowseResult.insert(householdId, result);
connect(result, &BrowseResult::aborted,[householdId, this](){m_pendingBrowseResult.remove(householdId);});
@ -364,7 +369,18 @@ void DevicePluginSonos::browseDevice(BrowseResult *result)
void DevicePluginSonos::browserItem(BrowserItemResult *result)
{
Q_UNUSED(result)
Device *parentDevice = myDevices().findById(result->device()->parentId());
Sonos *sonosConnection = m_sonosConnections.value(parentDevice);
if (!sonosConnection)
return;
qCDebug(dcSonos()) << "Browser Item" << result->itemId();
QString householdId = result->device()->paramValue(sonosGroupDeviceHouseholdIdParamTypeId).toString();
if (result->itemId().startsWith("/favorites")) {
sonosConnection->getFavorites(householdId);
m_pendingBrowserItemResult.insert(householdId, result);
connect(result, &BrowserItemResult::aborted,[householdId, this](){m_pendingBrowserItemResult.remove(householdId);});
}
}
void DevicePluginSonos::executeBrowserItem(BrowserActionInfo *info)
@ -375,9 +391,12 @@ void DevicePluginSonos::executeBrowserItem(BrowserActionInfo *info)
return;
QString groupId = info->device()->paramValue(sonosGroupDeviceGroupIdParamTypeId).toString();
QUuid requestId = sonosConnection->loadFavorite(groupId, info->browserAction().itemId());
m_pendingBrowserExecution.insert(requestId, info);
connect(info, &BrowserActionInfo::aborted,[requestId, this](){m_pendingBrowserExecution.remove(requestId);});
if (info->browserAction().itemId().startsWith("/favorites")) {
QString favoriteId = info->browserAction().itemId().remove("/favorite/");
QUuid requestId = sonosConnection->loadFavorite(groupId, favoriteId);
m_pendingBrowserExecution.insert(requestId, info);
connect(info, &BrowserActionInfo::aborted,[requestId, this](){m_pendingBrowserExecution.remove(requestId);});
}
}
void DevicePluginSonos::onConnectionChanged(bool connected)
@ -428,11 +447,11 @@ void DevicePluginSonos::onFavouritesReceived(const QString &householdId, QList<S
foreach(Sonos::FavouriteObject favourite, favourites) {
MediaBrowserItem item;
item.setId(favourite.id);
item.setId(result->itemId() + "/" + favourite.id);
item.setExecutable(true);
item.setBrowsable(false);
if (!favourite.imageUrl.isEmpty()) {
item.setThumbnail(favourite.imageUrl);
item.setThumbnail(favourite.imageUrl);
} else {
item.setIcon(BrowserItem::BrowserIconFavorites);
}
@ -442,8 +461,30 @@ void DevicePluginSonos::onFavouritesReceived(const QString &householdId, QList<S
qDebug(dcSonos()) << "Favourite: " << favourite.name << favourite.description;
}
result->finish(Device::DeviceErrorNoError);
} else {
qDebug(dcSonos()) << "Received unhandled favourites list";
}
if (m_pendingBrowserItemResult.contains(householdId)) {
BrowserItemResult *result = m_pendingBrowserItemResult.take(householdId);
if (!result)
return;
QString favoriteId = result->itemId().remove("/favorites/");
foreach(Sonos::FavouriteObject favourite, favourites) {
if (favourite.id == favoriteId) {
MediaBrowserItem item;
item.setId(result->itemId());
item.setExecutable(true);
item.setBrowsable(false);
if (!favourite.imageUrl.isEmpty()) {
item.setThumbnail(favourite.imageUrl);
} else {
item.setIcon(BrowserItem::BrowserIconFavorites);
}
item.setDisplayName(favourite.name);
item.setDescription(favourite.description);
result->finish(item);
}
}
}
}

View File

@ -66,6 +66,7 @@ private:
QHash<QUuid, QPointer<DeviceActionInfo> > m_pendingActions;
QHash<QString, BrowseResult *> m_pendingBrowseResult;
QHash<QString, BrowserItemResult *> m_pendingBrowserItemResult;
QHash<QUuid, BrowserActionInfo *> m_pendingBrowserExecution;

View File

@ -24,8 +24,9 @@
"name": "connected",
"displayName": "Connected",
"displayNameEvent": "Connected changed",
"defaultValue": true,
"type": "bool"
"defaultValue": false,
"type": "bool",
"cached": false
},
{
"id": "48b5c1bf-7df0-45d0-9ba3-290fc3acddc3",