[cosmetics] update date in GPL header
[vuplus_xbmc] / xbmc / interfaces / json-rpc / XBMCOperations.cpp
1 /*
2  *      Copyright (C) 2005-2013 Team XBMC
3  *      http://www.xbmc.org
4  *
5  *  This Program is free software; you can redistribute it and/or modify
6  *  it under the terms of the GNU General Public License as published by
7  *  the Free Software Foundation; either version 2, or (at your option)
8  *  any later version.
9  *
10  *  This Program is distributed in the hope that it will be useful,
11  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
12  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13  *  GNU General Public License for more details.
14  *
15  *  You should have received a copy of the GNU General Public License
16  *  along with XBMC; see the file COPYING.  If not, see
17  *  <http://www.gnu.org/licenses/>.
18  *
19  */
20
21 #include "XBMCOperations.h"
22 #include "ApplicationMessenger.h"
23 #include "Util.h"
24 #include "utils/Variant.h"
25 #include "powermanagement/PowerManager.h"
26
27 using namespace JSONRPC;
28
29 JSONRPC_STATUS CXBMCOperations::GetInfoLabels(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result)
30 {
31   std::vector<CStdString> info;
32
33   for (unsigned int i = 0; i < parameterObject["labels"].size(); i++)
34   {
35    CStdString field = parameterObject["labels"][i].asString();
36     field = field.ToLower();
37
38     info.push_back(parameterObject["labels"][i].asString());
39   }
40
41   if (info.size() > 0)
42   {
43     std::vector<CStdString> infoLabels = CApplicationMessenger::Get().GetInfoLabels(info);
44     for (unsigned int i = 0; i < info.size(); i++)
45     {
46       if (i >= infoLabels.size())
47         break;
48       result[info[i].c_str()] = infoLabels[i];
49     }
50   }
51
52   return OK;
53 }
54
55 JSONRPC_STATUS CXBMCOperations::GetInfoBooleans(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result)
56 {
57   std::vector<CStdString> info;
58
59   bool CanControlPower = (client->GetPermissionFlags() & ControlPower) > 0;
60
61   for (unsigned int i = 0; i < parameterObject["booleans"].size(); i++)
62   {
63     CStdString field = parameterObject["booleans"][i].asString();
64     field = field.ToLower();
65
66     // Need to override power management of whats in infomanager since jsonrpc
67     // have a security layer aswell.
68     if (field.Equals("system.canshutdown"))
69       result[parameterObject["booleans"][i].asString()] = (g_powerManager.CanPowerdown() && CanControlPower);
70     else if (field.Equals("system.canpowerdown"))
71       result[parameterObject["booleans"][i].asString()] = (g_powerManager.CanPowerdown() && CanControlPower);
72     else if (field.Equals("system.cansuspend"))
73       result[parameterObject["booleans"][i].asString()] = (g_powerManager.CanSuspend() && CanControlPower);
74     else if (field.Equals("system.canhibernate"))
75       result[parameterObject["booleans"][i].asString()] = (g_powerManager.CanHibernate() && CanControlPower);
76     else if (field.Equals("system.canreboot"))
77       result[parameterObject["booleans"][i].asString()] = (g_powerManager.CanReboot() && CanControlPower);
78     else
79       info.push_back(parameterObject["booleans"][i].asString());
80   }
81
82   if (info.size() > 0)
83   {
84     std::vector<bool> infoLabels = CApplicationMessenger::Get().GetInfoBooleans(info);
85     for (unsigned int i = 0; i < info.size(); i++)
86     {
87       if (i >= infoLabels.size())
88         break;
89       result[info[i].c_str()] = CVariant(infoLabels[i]);
90     }
91   }
92
93   return OK;
94 }