]> git.tdb.fi Git - xinema.git/blob - remote/source/xinemacontrol.cpp
Add a remote control program for Sailfish OS
[xinema.git] / remote / source / xinemacontrol.cpp
1 #include "xinemacontrol.h"
2
3 XinemaControl::XinemaControl()
4 {
5         QObject::connect(&socket, &QAbstractSocket::connected, this, &XinemaControl::connected);
6         QObject::connect(&socket, &QAbstractSocket::disconnected, this, &XinemaControl::disconnected);
7         QObject::connect(&socket, &QIODevice::readyRead, this, &XinemaControl::data_available);
8 }
9
10 void XinemaControl::connect(const QHostAddress &addr)
11 {
12         socket.connectToHost(addr, 34588);
13 }
14
15 bool XinemaControl::is_connected() const
16 {
17         return socket.state()==QAbstractSocket::ConnectedState;
18 }
19
20 void XinemaControl::list_directory(const QString &dir)
21 {
22         if(!is_connected())
23                 return;
24
25         send_request("list_directory "+dir);
26 }
27
28 void XinemaControl::play_file(const QString &fn)
29 {
30         if(!is_connected())
31                 return;
32
33         send_request("play_file "+fn);
34 }
35
36 void XinemaControl::send_request(const QString &req)
37 {
38         socket.write(req.toUtf8());
39         socket.write("\n", 1);
40 }
41
42 void XinemaControl::data_available()
43 {
44         char rbuf[1024];
45         int len = socket.read(rbuf, sizeof(rbuf));
46         if(len<0)
47                 return;
48
49         buffer.append(rbuf, len);
50         unsigned start = 0;
51         while(1)
52         {
53                 int newline = buffer.indexOf('\n', start);
54                 if(newline<0)
55                         break;
56
57                 QString reply = QString::fromUtf8(buffer.mid(start, newline-start));
58                 process_reply(reply);
59
60                 start = newline+1;
61         }
62
63         buffer.remove(0, start);
64 }
65
66 void XinemaControl::process_reply(const QString &reply)
67 {
68         int space = reply.indexOf(' ');
69         QString keyword = reply.mid(0, space);
70         QString args;
71         if(space>=0)
72                 args = reply.mid(space+1);
73
74         if(keyword=="directory")
75                 emit directory_started(args);
76         else if(keyword=="subdir")
77                 emit subdirectory_added(args);
78         else if(keyword=="file")
79                 emit file_added(args);
80 }