Skip to content

Commit

Permalink
jsonrpc: refactor to simplify includes
Browse files Browse the repository at this point in the history
First of all the "architecture" of Announcers has changed.
- Up until now every class that would like to listen to announcements going through CAnnouncementManager has to implement ANNOUNCEMENT::IAnnouncer. Furthermore they have to include AnnouncementUtils.h to get access to the CAnnouncementUtils::AnnouncementFlagToString method. AnnouncementUtils.h has been removed and the AnnouncementFlagToString method has been moved to IAnnouncer to get rid of that extra include.
- The EAnnouncementFlag enum has been renamed to AnnouncementFlag as IMO a type name containing "Flag" already indicates that it's an enum. This one causes a lot of small changes throughout the whole JSON-RPC code which is why this diff is so huge.
- A IJSONRPCAnnouncer has been introduced which derives from IAnnouncer and additionally contains the protected method AnnouncementToJSONRPC which translates any announcement into a valid JSON-RPC notification. This method was previously available as a protected method in CJSONUtils which required JSON-RPC announcers to derive from CJSONUtils just to use that specific method. As an example in the new code CTCPServer only needs to derive from IJSONRPCAnnouncer and not from both IAnnouncer and CJSONUtils.

The other change is splitting up CJSONUtils into CJSONUtils which provides JSON-related utility methods and CJSONRPCUtils which provides JSON-RPC-related utility methods and types, specifically JSONRPC_STATUS (which was renamed from JSON_STATUS which wasn't really a matching name), the callback/method definition for methods implementing JSON-RPC functionality, the OperationPermission enum which defines the different permissions needed by JSON-RPC methods and convenience methods to translate permissions from and to strings.

The work of seperating JSON-related stuff from JSON-RPC-related stuff is not 100% done yet but this commit contains most of that work.
  • Loading branch information
Montellese committed Mar 26, 2012
1 parent 0c59f55 commit a1b08ac
Show file tree
Hide file tree
Showing 40 changed files with 509 additions and 467 deletions.
4 changes: 3 additions & 1 deletion project/VS2010Express/XBMC.vcxproj
Original file line number Diff line number Diff line change
Expand Up @@ -795,6 +795,8 @@
<ClInclude Include="..\..\xbmc\network\websocket\WebSocketManager.h" />
<ClInclude Include="..\..\xbmc\network\websocket\WebSocketV13.h" />
<ClInclude Include="..\..\xbmc\network\websocket\WebSocketV8.h" />
<ClInclude Include="..\..\xbmc\interfaces\json-rpc\IJSONRPCAnnouncer.h" />
<ClInclude Include="..\..\xbmc\interfaces\json-rpc\JSONRPCUtils.h" />
<ClInclude Include="..\..\xbmc\threads\platform\win\Implementation.cpp" />
<ClCompile Include="..\..\xbmc\threads\SystemClock.cpp" />
<ClCompile Include="..\..\xbmc\threads\Thread.cpp" />
Expand Down Expand Up @@ -2213,4 +2215,4 @@
</VisualStudio>
</ProjectExtensions>
<Import Project="$(SolutionDir)\$(ProjectFileName).targets.user" Condition="Exists('$(SolutionDir)\$(ProjectFileName).targets.user')" />
</Project>
</Project>
8 changes: 7 additions & 1 deletion project/VS2010Express/XBMC.vcxproj.filters
Original file line number Diff line number Diff line change
Expand Up @@ -5202,6 +5202,12 @@
<ClInclude Include="..\..\xbmc\filesystem\windows\WINSMBDirectory.h">
<Filter>filesystem\windows</Filter>
</ClInclude>
<ClInclude Include="..\..\xbmc\interfaces\json-rpc\JSONRPCUtils.h">
<Filter>interfaces\json-rpc</Filter>
</ClInclude>
<ClInclude Include="..\..\xbmc\interfaces\json-rpc\IJSONRPCAnnouncer.h">
<Filter>interfaces\json-rpc</Filter>
</ClInclude>
</ItemGroup>
<ItemGroup>
<ResourceCompile Include="..\..\xbmc\win32\XBMC_PC.rc">
Expand All @@ -5213,4 +5219,4 @@
<Filter>win32</Filter>
</CustomBuild>
</ItemGroup>
</Project>
</Project>
8 changes: 4 additions & 4 deletions xbmc/interfaces/AnnouncementManager.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -62,27 +62,27 @@ void CAnnouncementManager::RemoveAnnouncer(IAnnouncer *listener)
}
}

void CAnnouncementManager::Announce(EAnnouncementFlag flag, const char *sender, const char *message)
void CAnnouncementManager::Announce(AnnouncementFlag flag, const char *sender, const char *message)
{
CVariant data;
Announce(flag, sender, message, data);
}

void CAnnouncementManager::Announce(EAnnouncementFlag flag, const char *sender, const char *message, CVariant &data)
void CAnnouncementManager::Announce(AnnouncementFlag flag, const char *sender, const char *message, CVariant &data)
{
CLog::Log(LOGDEBUG, "CAnnouncementManager - Announcement: %s from %s", message, sender);
CSingleLock lock (m_critSection);
for (unsigned int i = 0; i < m_announcers.size(); i++)
m_announcers[i]->Announce(flag, sender, message, data);
}

void CAnnouncementManager::Announce(EAnnouncementFlag flag, const char *sender, const char *message, CFileItemPtr item)
void CAnnouncementManager::Announce(AnnouncementFlag flag, const char *sender, const char *message, CFileItemPtr item)
{
CVariant data;
Announce(flag, sender, message, item, data);
}

void CAnnouncementManager::Announce(EAnnouncementFlag flag, const char *sender, const char *message, CFileItemPtr item, CVariant &data)
void CAnnouncementManager::Announce(AnnouncementFlag flag, const char *sender, const char *message, CFileItemPtr item, CVariant &data)
{
if (!item.get())
{
Expand Down
8 changes: 4 additions & 4 deletions xbmc/interfaces/AnnouncementManager.h
Original file line number Diff line number Diff line change
Expand Up @@ -32,10 +32,10 @@ namespace ANNOUNCEMENT
public:
static void AddAnnouncer(IAnnouncer *listener);
static void RemoveAnnouncer(IAnnouncer *listener);
static void Announce(EAnnouncementFlag flag, const char *sender, const char *message);
static void Announce(EAnnouncementFlag flag, const char *sender, const char *message, CVariant &data);
static void Announce(EAnnouncementFlag flag, const char *sender, const char *message, CFileItemPtr item);
static void Announce(EAnnouncementFlag flag, const char *sender, const char *message, CFileItemPtr item, CVariant &data);
static void Announce(AnnouncementFlag flag, const char *sender, const char *message);
static void Announce(AnnouncementFlag flag, const char *sender, const char *message, CVariant &data);
static void Announce(AnnouncementFlag flag, const char *sender, const char *message, CFileItemPtr item);
static void Announce(AnnouncementFlag flag, const char *sender, const char *message, CFileItemPtr item, CVariant &data);
private:
static std::vector<IAnnouncer *> m_announcers;
static CCriticalSection m_critSection;
Expand Down
57 changes: 0 additions & 57 deletions xbmc/interfaces/AnnouncementUtils.h

This file was deleted.

33 changes: 30 additions & 3 deletions xbmc/interfaces/IAnnouncer.h
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
#pragma once
/*
* Copyright (C) 2005-2010 Team XBMC
* Copyright (C) 2005-2012 Team XBMC
* http://www.xbmc.org
*
* This Program is free software; you can redistribute it and/or modify
Expand All @@ -23,7 +23,7 @@
class CVariant;
namespace ANNOUNCEMENT
{
enum EAnnouncementFlag
enum AnnouncementFlag
{
Player = 0x1,
GUI = 0x2,
Expand All @@ -35,11 +35,38 @@ namespace ANNOUNCEMENT

#define ANNOUNCE_ALL (Player | GUI | System | VideoLibrary | AudioLibrary | Other)

/*!
\brief Returns a string representation for the
given AnnouncementFlag
\param notification Specific AnnouncementFlag
\return String representation of the given AnnouncementFlag
*/
inline const char *AnnouncementFlagToString(const AnnouncementFlag &notification)
{
switch (notification)
{
case Player:
return "Player";
case GUI:
return "GUI";
case System:
return "System";
case VideoLibrary:
return "VideoLibrary";
case AudioLibrary:
return "AudioLibrary";
case Other:
return "Other";
default:
return "Unknown";
}
}

class IAnnouncer
{
public:
IAnnouncer() { };
virtual ~IAnnouncer() { };
virtual void Announce(EAnnouncementFlag flag, const char *sender, const char *message, const CVariant &data) = 0;
virtual void Announce(AnnouncementFlag flag, const char *sender, const char *message, const CVariant &data) = 0;
};
}
12 changes: 6 additions & 6 deletions xbmc/interfaces/json-rpc/ApplicationOperations.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -30,14 +30,14 @@

using namespace JSONRPC;

JSON_STATUS CApplicationOperations::GetProperties(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result)
JSONRPC_STATUS CApplicationOperations::GetProperties(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result)
{
CVariant properties = CVariant(CVariant::VariantTypeObject);
for (unsigned int index = 0; index < parameterObject["properties"].size(); index++)
{
CStdString propertyName = parameterObject["properties"][index].asString();
CVariant property;
JSON_STATUS ret;
JSONRPC_STATUS ret;
if ((ret = GetPropertyValue(propertyName, property)) != OK)
return ret;

Expand All @@ -49,7 +49,7 @@ JSON_STATUS CApplicationOperations::GetProperties(const CStdString &method, ITra
return OK;
}

JSON_STATUS CApplicationOperations::SetVolume(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result)
JSONRPC_STATUS CApplicationOperations::SetVolume(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result)
{
int oldVolume = g_application.GetVolume();
int volume = (int)parameterObject["volume"].asInteger();
Expand All @@ -61,7 +61,7 @@ JSON_STATUS CApplicationOperations::SetVolume(const CStdString &method, ITranspo
return GetPropertyValue("volume", result);
}

JSON_STATUS CApplicationOperations::SetMute(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result)
JSONRPC_STATUS CApplicationOperations::SetMute(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result)
{
if ((parameterObject["mute"].isString() && parameterObject["mute"].asString().compare("toggle") == 0) ||
(parameterObject["mute"].isBoolean() && parameterObject["mute"].asBoolean() != g_application.IsMuted()))
Expand All @@ -72,13 +72,13 @@ JSON_STATUS CApplicationOperations::SetMute(const CStdString &method, ITransport
return GetPropertyValue("muted", result);
}

JSON_STATUS CApplicationOperations::Quit(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result)
JSONRPC_STATUS CApplicationOperations::Quit(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result)
{
g_application.getApplicationMessenger().Quit();
return ACK;
}

JSON_STATUS CApplicationOperations::GetPropertyValue(const CStdString &property, CVariant &result)
JSONRPC_STATUS CApplicationOperations::GetPropertyValue(const CStdString &property, CVariant &result)
{
if (property.Equals("volume"))
result = g_application.GetVolume();
Expand Down
10 changes: 5 additions & 5 deletions xbmc/interfaces/json-rpc/ApplicationOperations.h
Original file line number Diff line number Diff line change
Expand Up @@ -29,13 +29,13 @@ namespace JSONRPC
class CApplicationOperations : CFileItemHandler
{
public:
static JSON_STATUS GetProperties(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result);
static JSONRPC_STATUS GetProperties(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result);

static JSON_STATUS SetVolume(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result);
static JSON_STATUS SetMute(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result);
static JSONRPC_STATUS SetVolume(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result);
static JSONRPC_STATUS SetMute(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result);

static JSON_STATUS Quit(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result);
static JSONRPC_STATUS Quit(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result);
private:
static JSON_STATUS GetPropertyValue(const CStdString &property, CVariant &result);
static JSONRPC_STATUS GetPropertyValue(const CStdString &property, CVariant &result);
};
}
24 changes: 12 additions & 12 deletions xbmc/interfaces/json-rpc/AudioLibrary.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@ using namespace MUSIC_INFO;
using namespace JSONRPC;
using namespace XFILE;

JSON_STATUS CAudioLibrary::GetArtists(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result)
JSONRPC_STATUS CAudioLibrary::GetArtists(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result)
{
CMusicDatabase musicdatabase;
if (!musicdatabase.Open())
Expand All @@ -62,7 +62,7 @@ JSON_STATUS CAudioLibrary::GetArtists(const CStdString &method, ITransportLayer
return OK;
}

JSON_STATUS CAudioLibrary::GetArtistDetails(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result)
JSONRPC_STATUS CAudioLibrary::GetArtistDetails(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result)
{
int artistID = (int)parameterObject["artistid"].asInteger();

Expand All @@ -88,7 +88,7 @@ JSON_STATUS CAudioLibrary::GetArtistDetails(const CStdString &method, ITransport
return OK;
}

JSON_STATUS CAudioLibrary::GetAlbums(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result)
JSONRPC_STATUS CAudioLibrary::GetAlbums(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result)
{
CMusicDatabase musicdatabase;
if (!musicdatabase.Open())
Expand All @@ -105,7 +105,7 @@ JSON_STATUS CAudioLibrary::GetAlbums(const CStdString &method, ITransportLayer *
return OK;
}

JSON_STATUS CAudioLibrary::GetAlbumDetails(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result)
JSONRPC_STATUS CAudioLibrary::GetAlbumDetails(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result)
{
int albumID = (int)parameterObject["albumid"].asInteger();

Expand All @@ -131,7 +131,7 @@ JSON_STATUS CAudioLibrary::GetAlbumDetails(const CStdString &method, ITransportL
return OK;
}

JSON_STATUS CAudioLibrary::GetSongs(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result)
JSONRPC_STATUS CAudioLibrary::GetSongs(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result)
{
CMusicDatabase musicdatabase;
if (!musicdatabase.Open())
Expand All @@ -149,7 +149,7 @@ JSON_STATUS CAudioLibrary::GetSongs(const CStdString &method, ITransportLayer *t
return OK;
}

JSON_STATUS CAudioLibrary::GetSongDetails(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result)
JSONRPC_STATUS CAudioLibrary::GetSongDetails(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result)
{
int idSong = (int)parameterObject["songid"].asInteger();

Expand All @@ -170,7 +170,7 @@ JSON_STATUS CAudioLibrary::GetSongDetails(const CStdString &method, ITransportLa
return OK;
}

JSON_STATUS CAudioLibrary::GetRecentlyAddedAlbums(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result)
JSONRPC_STATUS CAudioLibrary::GetRecentlyAddedAlbums(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result)
{
CMusicDatabase musicdatabase;
if (!musicdatabase.Open())
Expand Down Expand Up @@ -198,7 +198,7 @@ JSON_STATUS CAudioLibrary::GetRecentlyAddedAlbums(const CStdString &method, ITra
return OK;
}

JSON_STATUS CAudioLibrary::GetRecentlyAddedSongs(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result)
JSONRPC_STATUS CAudioLibrary::GetRecentlyAddedSongs(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result)
{
CMusicDatabase musicdatabase;
if (!musicdatabase.Open())
Expand All @@ -216,7 +216,7 @@ JSON_STATUS CAudioLibrary::GetRecentlyAddedSongs(const CStdString &method, ITran
return OK;
}

JSON_STATUS CAudioLibrary::GetGenres(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result)
JSONRPC_STATUS CAudioLibrary::GetGenres(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result)
{
CMusicDatabase musicdatabase;
if (!musicdatabase.Open())
Expand All @@ -236,13 +236,13 @@ JSON_STATUS CAudioLibrary::GetGenres(const CStdString &method, ITransportLayer *
return OK;
}

JSON_STATUS CAudioLibrary::Scan(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result)
JSONRPC_STATUS CAudioLibrary::Scan(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result)
{
g_application.getApplicationMessenger().ExecBuiltIn("updatelibrary(music)");
return ACK;
}

JSON_STATUS CAudioLibrary::Export(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result)
JSONRPC_STATUS CAudioLibrary::Export(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result)
{
CStdString cmd;
if (parameterObject["options"].isMember("path"))
Expand All @@ -256,7 +256,7 @@ JSON_STATUS CAudioLibrary::Export(const CStdString &method, ITransportLayer *tra
return ACK;
}

JSON_STATUS CAudioLibrary::Clean(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result)
JSONRPC_STATUS CAudioLibrary::Clean(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result)
{
g_application.getApplicationMessenger().ExecBuiltIn("cleanlibrary(music)");
return ACK;
Expand Down
Loading

0 comments on commit a1b08ac

Please sign in to comment.