diff --git a/libnymea-core/jsonrpc/jsontypes.cpp b/libnymea-core/jsonrpc/jsontypes.cpp index 88326016..72de8895 100644 --- a/libnymea-core/jsonrpc/jsontypes.cpp +++ b/libnymea-core/jsonrpc/jsontypes.cpp @@ -490,8 +490,8 @@ QVariantMap JsonTypes::allTypes() allTypes.insert("UserError", userError()); allTypes.insert("TagError", tagError()); allTypes.insert("CloudConnectionState", cloudConnectionState()); - allTypes.insert("BrowserIcon", browserIconRef()); - allTypes.insert("MediaBrowserIcon", mediaBrowserIconRef()); + allTypes.insert("BrowserIcon", browserIcon()); + allTypes.insert("MediaBrowserIcon", mediaBrowserIcon()); allTypes.insert("StateType", stateTypeDescription()); allTypes.insert("StateDescriptor", stateDescriptorDescription()); diff --git a/libnymea/types/mediabrowseritem.cpp b/libnymea/types/mediabrowseritem.cpp index cbc6142d..b2880361 100644 --- a/libnymea/types/mediabrowseritem.cpp +++ b/libnymea/types/mediabrowseritem.cpp @@ -22,8 +22,8 @@ #include "mediabrowseritem.h" -MediaBrowserItem::MediaBrowserItem(const QString &id, const QString &displayName, bool browsable): - BrowserItem(id, displayName, browsable) +MediaBrowserItem::MediaBrowserItem(const QString &id, const QString &displayName, bool browsable, bool executable): + BrowserItem(id, displayName, browsable, executable) { // Init defaults m_extendedProperties["mediaIcon"] = static_cast(MediaBrowserIconNone); diff --git a/libnymea/types/mediabrowseritem.h b/libnymea/types/mediabrowseritem.h index 0d496d8e..64df18b2 100644 --- a/libnymea/types/mediabrowseritem.h +++ b/libnymea/types/mediabrowseritem.h @@ -50,10 +50,13 @@ public: MediaBrowserIconVTuner = 204, MediaBrowserIconTidal = 205, MediaBrowserIconAirable = 206, + MediaBrowserIconDeezer = 207, + MediaBrowserIconNapster = 208, + MediaBrowserIconSoundCloud = 209, }; Q_ENUM(MediaBrowserIcon) - MediaBrowserItem(const QString &id = QString(), const QString &displayName = QString(), bool browsable = false); + MediaBrowserItem(const QString &id = QString(), const QString &displayName = QString(), bool browsable = false, bool executable = false); MediaBrowserIcon mediaIcon() const; void setMediaIcon(MediaBrowserIcon mediaIcon); diff --git a/plugins/mock/devicepluginmock.cpp b/plugins/mock/devicepluginmock.cpp index 7ce9ab32..716f8665 100644 --- a/plugins/mock/devicepluginmock.cpp +++ b/plugins/mock/devicepluginmock.cpp @@ -41,6 +41,7 @@ #include "devicepluginmock.h" #include "httpdaemon.h" +#include "types/mediabrowseritem.h" #include "devices/device.h" #include "devices/devicediscoveryinfo.h" #include "devices/devicepairinginfo.h" @@ -960,4 +961,90 @@ void DevicePluginMock::generateBrowseItems() item.setIcon(BrowserItem::BrowserIconFile); folderNode->addChild(new VirtualFsNode(item)); + item = BrowserItem("mediaservices", "Media services", true, false); + item.setDescription("I list media icons"); + item.setIcon(BrowserItem::BrowserIconMusic); + VirtualFsNode *mediaNode = new VirtualFsNode(item); + m_virtualFs->addChild(mediaNode); + + MediaBrowserItem mediaItem = MediaBrowserItem("playlist", "Playlists", false, false); + mediaItem.setMediaIcon(MediaBrowserItem::MediaBrowserIconPlaylist); + mediaNode->addChild(new VirtualFsNode(mediaItem)); + + mediaItem = MediaBrowserItem("recent", "Recently played", false, false); + mediaItem.setMediaIcon(MediaBrowserItem::MediaBrowserIconRecentlyPlayed); + mediaNode->addChild(new VirtualFsNode(mediaItem)); + + mediaItem = MediaBrowserItem("library", "Library", false, false); + mediaItem.setMediaIcon(MediaBrowserItem::MediaBrowserIconLibrary); + mediaNode->addChild(new VirtualFsNode(mediaItem)); + + mediaItem = MediaBrowserItem("musiclibrary", "Music Library", false, false); + mediaItem.setMediaIcon(MediaBrowserItem::MediaBrowserIconMusicLibrary); + mediaNode->addChild(new VirtualFsNode(mediaItem)); + + mediaItem = MediaBrowserItem("videolibrary", "Video library", false, false); + mediaItem.setMediaIcon(MediaBrowserItem::MediaBrowserIconVideoLibrary); + mediaNode->addChild(new VirtualFsNode(mediaItem)); + + mediaItem = MediaBrowserItem("picturelibrary", "picture library", false, false); + mediaItem.setMediaIcon(MediaBrowserItem::MediaBrowserIconPictureLibrary); + mediaNode->addChild(new VirtualFsNode(mediaItem)); + + + mediaItem = MediaBrowserItem("disk", "CD", false, false); + mediaItem.setMediaIcon(MediaBrowserItem::MediaBrowserIconDisk); + mediaNode->addChild(new VirtualFsNode(mediaItem)); + + mediaItem = MediaBrowserItem("usb", "USB", false, false); + mediaItem.setMediaIcon(MediaBrowserItem::MediaBrowserIconUSB); + mediaNode->addChild(new VirtualFsNode(mediaItem)); + + mediaItem = MediaBrowserItem("network", "Network", false, false); + mediaItem.setMediaIcon(MediaBrowserItem::MediaBrowserIconNetwork); + mediaNode->addChild(new VirtualFsNode(mediaItem)); + + mediaItem = MediaBrowserItem("aux", "AUX", false, false); + mediaItem.setMediaIcon(MediaBrowserItem::MediaBrowserIconAux); + mediaNode->addChild(new VirtualFsNode(mediaItem)); + + mediaItem = MediaBrowserItem("spotify", "Spotify", false, false); + mediaItem.setMediaIcon(MediaBrowserItem::MediaBrowserIconSpotify); + mediaNode->addChild(new VirtualFsNode(mediaItem)); + + mediaItem = MediaBrowserItem("amazon", "Amazon Music", false, false); + mediaItem.setMediaIcon(MediaBrowserItem::MediaBrowserIconAmazon); + mediaNode->addChild(new VirtualFsNode(mediaItem)); + + mediaItem = MediaBrowserItem("tunein", "TuneIn", false, false); + mediaItem.setMediaIcon(MediaBrowserItem::MediaBrowserIconTuneIn); + mediaNode->addChild(new VirtualFsNode(mediaItem)); + + mediaItem = MediaBrowserItem("siriusxm", "Sirius XM", false, false); + mediaItem.setMediaIcon(MediaBrowserItem::MediaBrowserIconSiriusXM); + mediaNode->addChild(new VirtualFsNode(mediaItem)); + + mediaItem = MediaBrowserItem("vTuner", "vTuner", false, false); + mediaItem.setMediaIcon(MediaBrowserItem::MediaBrowserIconVTuner); + mediaNode->addChild(new VirtualFsNode(mediaItem)); + + mediaItem = MediaBrowserItem("tidal", "Tidal", false, false); + mediaItem.setMediaIcon(MediaBrowserItem::MediaBrowserIconTidal); + mediaNode->addChild(new VirtualFsNode(mediaItem)); + + mediaItem = MediaBrowserItem("airable", "airable", false, false); + mediaItem.setMediaIcon(MediaBrowserItem::MediaBrowserIconAirable); + mediaNode->addChild(new VirtualFsNode(mediaItem)); + + mediaItem = MediaBrowserItem("deezer", "Deezer", false, false); + mediaItem.setMediaIcon(MediaBrowserItem::MediaBrowserIconDeezer); + mediaNode->addChild(new VirtualFsNode(mediaItem)); + + mediaItem = MediaBrowserItem("napster", "Napster", false, false); + mediaItem.setMediaIcon(MediaBrowserItem::MediaBrowserIconNapster); + mediaNode->addChild(new VirtualFsNode(mediaItem)); + + mediaItem = MediaBrowserItem("soundcloud", "SoundCloud", false, false); + mediaItem.setMediaIcon(MediaBrowserItem::MediaBrowserIconSoundCloud); + mediaNode->addChild(new VirtualFsNode(mediaItem)); } diff --git a/tests/auto/api.json b/tests/auto/api.json index 666f5406..82f9952a 100644 --- a/tests/auto/api.json +++ b/tests/auto/api.json @@ -1406,7 +1406,18 @@ "Time", "Object" ], - "BrowserIcon": "$ref:BrowserIcon", + "BrowserIcon": [ + "BrowserIconNone", + "BrowserIconFolder", + "BrowserIconFile", + "BrowserIconMusic", + "BrowserIconVideo", + "BrowserIconPictures", + "BrowserIconApplication", + "BrowserIconDocument", + "BrowserIconPackage", + "BrowserIconFavorites" + ], "BrowserItem": { "actionTypeIds": [ "Uuid" @@ -1614,7 +1625,29 @@ "LoggingSourceRules", "LoggingSourceBrowserActions" ], - "MediaBrowserIcon": "$ref:MediaBrowserIcon", + "MediaBrowserIcon": [ + "MediaBrowserIconNone", + "MediaBrowserIconPlaylist", + "MediaBrowserIconRecentlyPlayed", + "MediaBrowserIconLibrary", + "MediaBrowserIconMusicLibrary", + "MediaBrowserIconVideoLibrary", + "MediaBrowserIconPictureLibrary", + "MediaBrowserIconDisk", + "MediaBrowserIconUSB", + "MediaBrowserIconNetwork", + "MediaBrowserIconAux", + "MediaBrowserIconSpotify", + "MediaBrowserIconAmazon", + "MediaBrowserIconTuneIn", + "MediaBrowserIconSiriusXM", + "MediaBrowserIconVTuner", + "MediaBrowserIconTidal", + "MediaBrowserIconAirable", + "MediaBrowserIconDeezer", + "MediaBrowserIconNapster", + "MediaBrowserIconSoundCloud" + ], "MqttPolicy": { "allowedPublishTopicFilters": "StringList", "allowedSubscribeTopicFilters": "StringList", diff --git a/tests/auto/jsonrpc/testjsonrpc.cpp b/tests/auto/jsonrpc/testjsonrpc.cpp index 86dea687..48121703 100644 --- a/tests/auto/jsonrpc/testjsonrpc.cpp +++ b/tests/auto/jsonrpc/testjsonrpc.cpp @@ -616,6 +616,7 @@ void TestJSONRPC::introspect() QString typeId = ref; typeId.remove("$ref:"); QVERIFY2(types.contains(typeId), QString("Undefined ref: %1. Did you forget to add it to JsonTypes::allTypes()?").arg(ref).toLatin1().data()); + QVERIFY2(!types.value(typeId).toString().startsWith("$ref:"), QString("Definition for %1 must not be a reference itself").arg(ref).toLatin1().data()); } } }