Merge pull request #4314 from MartijnKaijser/beta1
[vuplus_xbmc] / xbmc / interfaces / json-rpc / InputOperations.cpp
1 /*
2  *      Copyright (C) 2005-2013 Team XBMC
3  *      http://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 "InputOperations.h"
22 #include "Application.h"
23 #include "ApplicationMessenger.h"
24 #include "guilib/GUIAudioManager.h"
25 #include "guilib/GUIWindow.h"
26 #include "guilib/GUIWindowManager.h"
27 #include "input/ButtonTranslator.h"
28 #include "input/XBMC_keyboard.h"
29 #include "input/XBMC_vkeys.h"
30 #include "threads/SingleLock.h"
31
32 using namespace JSONRPC;
33
34 //TODO the breakage of the screensaver should be refactored
35 //to one central super duper place for getting rid of
36 //1 million dupes
37 bool CInputOperations::handleScreenSaver()
38 {
39   g_application.ResetScreenSaver();
40   if (g_application.WakeUpScreenSaverAndDPMS())
41     return true;
42
43   return false;
44 }
45
46 JSONRPC_STATUS CInputOperations::SendAction(int actionID, bool wakeScreensaver /* = true */, bool waitResult /* = false */)
47 {
48   if(!wakeScreensaver || !handleScreenSaver())
49   {
50     g_application.ResetSystemIdleTimer();
51     g_audioManager.PlayActionSound(actionID);
52     CApplicationMessenger::Get().SendAction(CAction(actionID), WINDOW_INVALID, waitResult);
53   }
54   return ACK;
55 }
56
57 JSONRPC_STATUS CInputOperations::activateWindow(int windowID)
58 {
59   if(!handleScreenSaver())
60     CApplicationMessenger::Get().ActivateWindow(windowID, std::vector<CStdString>(), false);
61
62   return ACK;
63 }
64
65 JSONRPC_STATUS CInputOperations::SendText(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result)
66 {
67   CApplicationMessenger::Get().SendText(parameterObject["text"].asString(), parameterObject["done"].asBoolean());
68   return ACK;
69 }
70
71 JSONRPC_STATUS CInputOperations::ExecuteAction(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result)
72 {
73   int action;
74   if (!CButtonTranslator::TranslateActionString(parameterObject["action"].asString().c_str(), action))
75     return InvalidParams;
76
77   return SendAction(action);
78 }
79
80 JSONRPC_STATUS CInputOperations::Left(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result)
81 {
82   return SendAction(ACTION_MOVE_LEFT);
83 }
84
85 JSONRPC_STATUS CInputOperations::Right(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result)
86 {
87   return SendAction(ACTION_MOVE_RIGHT);
88 }
89
90 JSONRPC_STATUS CInputOperations::Down(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result)
91 {
92   return SendAction(ACTION_MOVE_DOWN);
93 }
94
95 JSONRPC_STATUS CInputOperations::Up(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result)
96 {
97   return SendAction(ACTION_MOVE_UP);
98 }
99
100 JSONRPC_STATUS CInputOperations::Select(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result)
101 {
102   return SendAction(ACTION_SELECT_ITEM);
103 }
104
105 JSONRPC_STATUS CInputOperations::Back(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result)
106 {
107   return SendAction(ACTION_NAV_BACK);
108 }
109
110 JSONRPC_STATUS CInputOperations::ContextMenu(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result)
111 {
112   return SendAction(ACTION_CONTEXT_MENU);
113 }
114
115 JSONRPC_STATUS CInputOperations::Info(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result)
116 {
117   return SendAction(ACTION_SHOW_INFO);
118 }
119
120 JSONRPC_STATUS CInputOperations::Home(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result)
121 {
122   return activateWindow(WINDOW_HOME);
123 }
124
125 JSONRPC_STATUS CInputOperations::ShowCodec(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result)
126 {
127   return SendAction(ACTION_SHOW_CODEC);
128 }
129
130 JSONRPC_STATUS CInputOperations::ShowOSD(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result)
131 {
132   return SendAction(ACTION_SHOW_OSD);
133 }