kodi
JSONRPCUtils.h
1 /*
2  * Copyright (C) 2012-2018 Team Kodi
3  * This file is part of Kodi - https://kodi.tv
4  *
5  * SPDX-License-Identifier: GPL-2.0-or-later
6  * See LICENSES/README.md for more information.
7  */
8 
9 #pragma once
10 
11 #include "IClient.h"
12 #include "ITransportLayer.h"
13 
14 #include <map>
15 #include <memory>
16 #include <string>
17 
18 class CFileItem;
19 class CVariant;
20 class CVideoInfoTag;
21 
22 namespace JSONRPC
23 {
30  {
31  OK = 0,
32  ACK = -1,
33  InvalidRequest = -32600,
34  MethodNotFound = -32601,
35  InvalidParams = -32602,
36  InternalError = -32603,
37  ParseError = -32700,
38  //-32099..-32000 Reserved for implementation-defined server-errors.
39  BadPermission = -32099,
40  FailedToExecute = -32100
41  };
42 
46  typedef JSONRPC_STATUS (*MethodCall) (const std::string &method, ITransportLayer *transport, IClient *client, const CVariant& parameterObject, CVariant &result);
47 
57  {
58  ReadData = 0x1,
59  ControlPlayback = 0x2,
60  ControlNotify = 0x4,
61  ControlPower = 0x8,
62  UpdateData = 0x10,
63  RemoveData = 0x20,
64  Navigate = 0x40,
65  WriteFile = 0x80,
66  ControlSystem = 0x100,
67  ControlGUI = 0x200,
68  ManageAddon = 0x400,
69  ExecuteAddon = 0x800,
70  ControlPVR = 0x1000
71  };
72 
73  const int OPERATION_PERMISSION_ALL = (ReadData | ControlPlayback | ControlNotify | ControlPower |
74  UpdateData | RemoveData | Navigate | WriteFile | ControlSystem |
75  ControlGUI | ManageAddon | ExecuteAddon | ControlPVR);
76 
77  const int OPERATION_PERMISSION_NOTIFICATION = (ControlPlayback | ControlNotify | ControlPower | UpdateData |
78  RemoveData | Navigate | WriteFile | ControlSystem |
79  ControlGUI | ManageAddon | ExecuteAddon | ControlPVR);
80 
87  inline const char *PermissionToString(const OperationPermission &permission)
88  {
89  switch (permission)
90  {
91  case ReadData:
92  return "ReadData";
93  case ControlPlayback:
94  return "ControlPlayback";
95  case ControlNotify:
96  return "ControlNotify";
97  case ControlPower:
98  return "ControlPower";
99  case UpdateData:
100  return "UpdateData";
101  case RemoveData:
102  return "RemoveData";
103  case Navigate:
104  return "Navigate";
105  case WriteFile:
106  return "WriteFile";
107  case ControlSystem:
108  return "ControlSystem";
109  case ControlGUI:
110  return "ControlGUI";
111  case ManageAddon:
112  return "ManageAddon";
113  case ExecuteAddon:
114  return "ExecuteAddon";
115  case ControlPVR:
116  return "ControlPVR";
117  default:
118  return "Unknown";
119  }
120  }
121 
128  inline OperationPermission StringToPermission(const std::string& permission)
129  {
130  if (permission.compare("ControlPlayback") == 0)
131  return ControlPlayback;
132  if (permission.compare("ControlNotify") == 0)
133  return ControlNotify;
134  if (permission.compare("ControlPower") == 0)
135  return ControlPower;
136  if (permission.compare("UpdateData") == 0)
137  return UpdateData;
138  if (permission.compare("RemoveData") == 0)
139  return RemoveData;
140  if (permission.compare("Navigate") == 0)
141  return Navigate;
142  if (permission.compare("WriteFile") == 0)
143  return WriteFile;
144  if (permission.compare("ControlSystem") == 0)
145  return ControlSystem;
146  if (permission.compare("ControlGUI") == 0)
147  return ControlGUI;
148  if (permission.compare("ManageAddon") == 0)
149  return ManageAddon;
150  if (permission.compare("ExecuteAddon") == 0)
151  return ExecuteAddon;
152  if (permission.compare("ControlPVR") == 0)
153  return ControlPVR;
154 
155  return ReadData;
156  }
157 
159  {
160  public:
161  static void NotifyItemUpdated();
162  static void NotifyItemUpdated(const std::shared_ptr<CFileItem>& item);
163  static void NotifyItemUpdated(const CVideoInfoTag& info,
164  const std::map<std::string, std::string>& artwork);
165  };
166 }
Definition: AddonsOperations.h:23
Definition: Variant.h:31
JSONRPC_STATUS
Possible statuc codes of a response to a JSON-RPC request.
Definition: JSONRPCUtils.h:29
OperationPermission
Permission categories for json rpc methods.
Definition: JSONRPCUtils.h:56
Definition: ITransportLayer.h:27
Definition: IClient.h:13
Definition: VideoInfoTag.h:53
Represents a file on a share.
Definition: FileItem.h:102
Definition: JSONRPCUtils.h:158