added notification via libnotify and QMaemo5InformationBox.
[simple-xmbc-rem] / src / xbmc.cpp
1 #include "xbmc.h"
2 #include "constants.h"
3 #include "genericnotify.h"
4
5 #include <QSettings>
6 #include <QTextStream>
7 #include <QNetworkReply>
8
9 // XBMC constants -- from https://github.com/xbmc/xbmc/blob/master/xbmc/guilib/Key.h
10 #define ACTION_MOVE_LEFT                1
11 #define ACTION_MOVE_RIGHT               2
12 #define ACTION_MOVE_UP                  3
13 #define ACTION_MOVE_DOWN                4
14 #define ACTION_NEXT_SUBTITLE            26 // switch to next subtitle of movie. Can b used in videoFullScreen.xml window id=2005
15 #define ACTION_SUBTITLE_DELAY_MIN       52 // Decrease subtitle/movie Delay. Can b used in videoFullScreen.xml window id=2005
16 #define ACTION_SUBTITLE_DELAY_PLUS      53 // Increase subtitle/movie Delay. Can b used in videoFullScreen.xml window id=2005
17 #define ACTION_AUDIO_DELAY_MIN          54 // Increase avsync delay. Can b used in videoFullScreen.xml window id=2005
18 #define ACTION_AUDIO_DELAY_PLUS         55 // Decrease avsync delay. Can b used in videoFullScreen.xml window id=2005
19 #define ACTION_AUDIO_NEXT_LANGUAGE      56 // Select next language in movie. Can b used in videoFullScreen.xml window id=2005
20 #define ACTION_ENTER                    135
21 #define ACTION_SHOW_GUI                 18 // toggle between GUI and movie or GUI and visualisation.
22 #define ACTION_STEP_FORWARD             20 // seek +1% in the movie. Can b used in videoFullScreen.xml window id=2005
23 #define ACTION_STEP_BACK                21 // seek -1% in the movie. Can b used in videoFullScreen.xml window id=2005
24 #define ACTION_BIG_STEP_FORWARD         22 // seek +10% in the movie. Can b used in videoFullScreen.xml window id=2005
25 #define ACTION_BIG_STEP_BACK            23 // seek -10% in the movie. Can b used in videoFullScreen.xml window id=2005
26
27 #define ACTION_PLAYER_PLAY              79 // Play current song. Unpauses song and sets playspeed to 1x. global action, can be used anywhere
28 #define ACTION_SELECT_ITEM              7
29 #define ACTION_HIGHLIGHT_ITEM           8
30 #define ACTION_PARENT_DIR               9
31
32 Xbmc::Xbmc(QObject *parent) : QObject(parent)
33 {
34     m_manager = new QNetworkAccessManager(this);
35 }
36
37 Xbmc::~Xbmc()
38 {
39     delete m_manager;
40 }
41
42 void Xbmc::do_command_action(int action)
43 {
44     QSettings settings;
45     QString server = settings.value(SETUP_XBMC_SERVER, SETUP_XBMC_SERVER_DEFAULT).toString();
46     QString port = settings.value(SETUP_XBMC_PORT, SETUP_XBMC_PORT_DEFAULT).toString();
47
48     QUrl url = QUrl(QString("http://%1:%2/xbmcCmds/xbmcHttp?command=Action(%3)").arg(server).arg(port).arg(action));
49
50     QNetworkRequest request;
51     request.setUrl(url);
52
53     QNetworkReply *reply = m_manager->get(request);
54     connect(reply, SIGNAL(finished()), this, SLOT(commandActionFinished()));
55 }
56
57 void Xbmc::actionMoveRight()
58 {
59     do_command_action(ACTION_MOVE_RIGHT);
60 }
61
62 void Xbmc::actionMoveLeft()
63 {
64     do_command_action(ACTION_MOVE_LEFT);
65 }
66
67 void Xbmc::actionMoveUp()
68 {
69     do_command_action(ACTION_MOVE_UP);
70 }
71
72 void Xbmc::actionMoveDown()
73 {
74     do_command_action(ACTION_MOVE_DOWN);
75 }
76
77 void Xbmc::commandActionFinished()
78 {
79     QNetworkReply* reply = qobject_cast<QNetworkReply *>(sender());
80     if (reply) {
81         if (reply->error() == QNetworkReply::NoError) {
82             QTextStream stream(reply);
83             QString msg = stream.readAll();
84             qDebug("Xbmc::commandActionFinished: %s", qPrintable(msg));
85         } else {
86             notify::notify(reply->errorString());
87         }
88         reply->deleteLater();
89     }
90 }