1 #include "xinemacontrol.h"
3 XinemaControl::XinemaControl():
4 playback_state(STOPPED),
8 QObject::connect(&socket, &QAbstractSocket::connected, this, &XinemaControl::connected);
9 QObject::connect(&socket, &QAbstractSocket::disconnected, this, &XinemaControl::disconnected);
10 QObject::connect(&socket, &QIODevice::readyRead, this, &XinemaControl::data_available);
13 void XinemaControl::connect(const QHostAddress &addr)
15 socket.connectToHost(addr, 34588);
18 bool XinemaControl::is_connected() const
20 return socket.state()==QAbstractSocket::ConnectedState;
23 void XinemaControl::list_directory(const QString &dir)
28 send_request("list_directory "+dir);
31 void XinemaControl::play_file(const QString &fn)
36 send_request("play_file "+fn);
39 void XinemaControl::play()
44 void XinemaControl::seek(float time)
46 send_request(QString("seek %1").arg(time));
49 void XinemaControl::pause()
51 send_request("pause");
54 void XinemaControl::stop()
59 void XinemaControl::send_request(const QString &req)
61 socket.write(req.toUtf8());
62 socket.write("\n", 1);
65 void XinemaControl::data_available()
67 while(socket.bytesAvailable())
70 int len = socket.read(rbuf, sizeof(rbuf));
74 buffer.append(rbuf, len);
80 int newline = buffer.indexOf('\n', start);
84 QString reply = QString::fromUtf8(buffer.mid(start, newline-start));
90 buffer.remove(0, start);
93 void XinemaControl::process_reply(const QString &reply)
95 int space = reply.indexOf(' ');
96 QString keyword = reply.mid(0, space);
99 args = reply.mid(space+1);
101 if(keyword=="directory")
102 emit directory_started(args);
103 else if(keyword=="subdir")
104 emit subdirectory_added(args);
105 else if(keyword=="file")
106 emit file_added(args);
107 else if(keyword=="state")
110 playback_state = STOPPED;
111 else if(args=="PAUSED")
112 playback_state = PAUSED;
113 else if(args=="PLAYING")
114 playback_state = PLAYING;
115 emit playback_state_changed(playback_state);
117 else if(keyword=="title")
120 emit title_changed(title);
122 else if(keyword=="duration")
124 duration = args.toFloat();
125 emit duration_changed(duration);
127 else if(keyword=="position")
129 position = args.toFloat();
130 emit position_changed(position);