#include <QSettings>
#include <QTimer>
#include <QTextStream>
+#include <QNetworkReply>
#if defined(Q_OS_SYMBIAN) && defined(ORIENTATIONLOCK)
#include <eikenv.h>
#include <aknappui.h>
#endif // Q_OS_SYMBIAN && ORIENTATIONLOCK
+/////////////////////////////////////////////////////////////////////
+//
+DisconnectedState::DisconnectedState(QAbstractButton *button, QTcpSocket* socket, QState *parent)
+ : QState(parent), m_socket(socket)
+{
+ assignProperty(button, "text", "Connect");
+ assignProperty(button, "enabled", true);
+}
+
+void DisconnectedState::onEntry(QEvent */*event*/)
+{
+ qDebug("DisconnectedState::onEntry");
+}
+
+void DisconnectedState::onExit(QEvent */*event*/)
+{
+ qDebug("DisconnectedState::onExit");
+}
+
+/////////////////////////////////////////////////////////////////////
+//
+ConnectingState::ConnectingState(QAbstractButton *button, QTcpSocket* socket, QState *parent)
+ : QState(parent), m_socket(socket)
+{
+ assignProperty(button, "text", "Connecting");
+ assignProperty(button, "enabled", false);
+}
+
+void ConnectingState::onEntry(QEvent */*event*/)
+{
+ qDebug("ConnectingState::onEntry");
+
+ connect(m_socket, SIGNAL(connected()), this, SIGNAL(connected()));
+ connect(m_socket, SIGNAL(error(QAbstractSocket::SocketError)), this, SLOT(onSocketError(QAbstractSocket::SocketError)));
+
+ // TODO: we asume the socket is not already connected
+ // TODO: we should add code to do nothing if the connection is ok, or close and open a new one if the server or port changed
+ QSettings settings;
+
+ m_socket->connectToHost(settings.value(SETUP_XBMC_SERVER, SETUP_XBMC_SERVER_DEFAULT).toString(),
+ settings.value(SETUP_XBMC_PORT, SETUP_XBMC_PORT_DEFAULT).toInt());
+}
+
+void ConnectingState::onExit(QEvent */*event*/)
+{
+ disconnect(m_socket, 0, this, 0);
+ qDebug("ConnectingState::onExit");
+}
+
+void ConnectingState::onSocketError(QAbstractSocket::SocketError)
+{
+ qDebug("ConnectingState::onSocketError: %s", qPrintable(m_socket->errorString()));
+ emit failed();
+}
+
+/////////////////////////////////////////////////////////////////////
+//
+ConnectedState::ConnectedState(QAbstractButton *button, QTcpSocket* socket, QState *parent)
+ : QState(parent), m_socket(socket)
+{
+ assignProperty(button, "text", "Disconnect");
+ assignProperty(button, "enabled", true);
+}
+
+void ConnectedState::onEntry(QEvent */*event*/)
+{
+ qDebug("ConnectedState::onEntry");
+
+ connect(m_socket, SIGNAL(readyRead()), this, SLOT(onSocketData()));
+ connect(m_socket, SIGNAL(disconnected()), this, SIGNAL(disconnected()));
+ connect(m_socket, SIGNAL(error(QAbstractSocket::SocketError)), this, SLOT(onSocketError(QAbstractSocket::SocketError)));
+}
+
+void ConnectedState::onExit(QEvent */*event*/)
+{
+ disconnect(m_socket, 0, this, 0);
+ qDebug("ConnectedState::onExit");
+}
+
+void ConnectedState::onSocketError(QAbstractSocket::SocketError)
+{
+ qDebug("ConnectedState::onSocketError: %s", qPrintable(m_socket->errorString()));
+}
+
+void ConnectedState::onSocketData()
+{
+ QTextStream stream(m_socket);
+ QString msg = stream.readAll();
+ qDebug("ConnectedState::onSocketData: %s", qPrintable(msg));
+}
+
+/////////////////////////////////////////////////////////////////////
+//
+DisconnectingState::DisconnectingState(QAbstractButton *button, QTcpSocket* socket, QState *parent)
+ : QState(parent), m_socket(socket)
+{
+ assignProperty(button, "text", "Disconnecting");
+ assignProperty(button, "enabled", false);
+}
+
+void DisconnectingState::onEntry(QEvent */*event*/)
+{
+ qDebug("DisconnectingState::onEntry");
+
+ connect(m_socket, SIGNAL(disconnected()), this, SIGNAL(disconnected()));
+ connect(m_socket, SIGNAL(error(QAbstractSocket::SocketError)), this, SLOT(onSocketError(QAbstractSocket::SocketError)));
+
+ if (m_socket->state() != QTcpSocket::UnconnectedState) {
+ qDebug("DisconnectingState::disconnectFromHost");
+ m_socket->disconnectFromHost();
+ }
+ else {
+ qDebug("DisconnectingState::disconnect");
+ QTimer::singleShot(0, this, SIGNAL(disconnected()));
+ }
+}
+
+void DisconnectingState::onExit(QEvent */*event*/)
+{
+ disconnect(m_socket, 0, this, 0);
+ qDebug("DisconnectingState::onExit");
+}
+
+void DisconnectingState::onSocketError(QAbstractSocket::SocketError)
+{
+ qDebug("DisconnectingState::onSocketError: %s", qPrintable(m_socket->errorString()));
+}
+
+/////////////////////////////////////////////////////////////////////
+//
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent), m_ui(new Ui::MainWindow)
{
m_ui->setupUi(this);
+ m_manager = new QNetworkAccessManager(this);
createStates();
createTransitions();
MainWindow::~MainWindow()
{
delete m_ui;
+ delete m_manager;
}
void MainWindow::setOrientation(ScreenOrientation orientation)
void MainWindow::createConnections()
{
+ connect(m_manager, SIGNAL(finished(QNetworkReply*)), this, SLOT(onNetworAccesskManagerReplyFinished(QNetworkReply*)));
}
-/////////////////////////////////////////////////////////////////////
-//
-DisconnectedState::DisconnectedState(QAbstractButton *button, QTcpSocket* socket, QState *parent)
- : QState(parent), m_socket(socket)
+void MainWindow::on_videoPlayerStateBtn_clicked()
{
- assignProperty(button, "text", "Connect");
- assignProperty(button, "enabled", true);
+ QTextStream stream(&m_serverSocket);
+ stream << JsonEngine().videoPlayerState();
}
-void DisconnectedState::onEntry(QEvent */*event*/)
+void MainWindow::on_videoPlayerPlayPauseBtn_clicked()
{
- qDebug("DisconnectedState::onEntry");
+ QTextStream stream(&m_serverSocket);
+ stream << JsonEngine().videoPlayerPlayPause();
}
-void DisconnectedState::onExit(QEvent */*event*/)
+void MainWindow::on_videoPlayerStopBtn_clicked()
{
- qDebug("DisconnectedState::onExit");
+ QTextStream stream(&m_serverSocket);
+ stream << JsonEngine().serialize("VideoPlayer.Stop");
}
-/////////////////////////////////////////////////////////////////////
-//
-ConnectingState::ConnectingState(QAbstractButton *button, QTcpSocket* socket, QState *parent)
- : QState(parent), m_socket(socket)
+void MainWindow::on_videoPlayerSkipPreviousBtn_clicked()
{
- assignProperty(button, "text", "Connecting");
- assignProperty(button, "enabled", false);
+ QTextStream stream(&m_serverSocket);
+ stream << JsonEngine().serialize("VideoPlayer.SkipPrevious");
}
-void ConnectingState::onEntry(QEvent */*event*/)
+void MainWindow::on_videoPlayerSkipNextBtn_clicked()
{
- qDebug("ConnectingState::onEntry");
-
- connect(m_socket, SIGNAL(connected()), this, SIGNAL(connected()));
- connect(m_socket, SIGNAL(error(QAbstractSocket::SocketError)), this, SLOT(onSocketError(QAbstractSocket::SocketError)));
+ QTextStream stream(&m_serverSocket);
+ stream << JsonEngine().serialize("VideoPlayer.SkipNext");
+}
- // TODO: we asume the socket is not already connected
- // TODO: we should add code to do nothing if the connection is ok, or close and open a new one if the server or port changed
- QSettings settings;
+void MainWindow::on_videoPlayerBigSkipBackwardBtn_clicked()
+{
+ QTextStream stream(&m_serverSocket);
+ stream << JsonEngine().serialize("VideoPlayer.BigSkipBackward");
+}
- m_socket->connectToHost(settings.value(SETUP_XBMC_SERVER, SETUP_XBMC_SERVER_DEFAULT).toString(),
- settings.value(SETUP_XBMC_PORT, SETUP_XBMC_PORT_DEFAULT).toInt());
+void MainWindow::on_videoPlayerBigSkipForwardBtn_clicked()
+{
+ QTextStream stream(&m_serverSocket);
+ stream << JsonEngine().serialize("VideoPlayer.BigSkipForward");
}
-void ConnectingState::onExit(QEvent */*event*/)
+void MainWindow::on_videoPlayerSmallSkipBackwardBtn_clicked()
{
- disconnect(m_socket, 0, this, 0);
- qDebug("ConnectingState::onExit");
+ QTextStream stream(&m_serverSocket);
+ stream << JsonEngine().serialize("VideoPlayer.SmallSkipBackward");
}
-void ConnectingState::onSocketError(QAbstractSocket::SocketError)
+void MainWindow::on_videoPlayerSmallSkipForwardBtn_clicked()
{
- qDebug("ConnectingState::onSocketError: %s", qPrintable(m_socket->errorString()));
- emit failed();
+ QTextStream stream(&m_serverSocket);
+ stream << JsonEngine().serialize("VideoPlayer.SmallSkipForward");
}
-/////////////////////////////////////////////////////////////////////
-//
-ConnectedState::ConnectedState(QAbstractButton *button, QTcpSocket* socket, QState *parent)
- : QState(parent), m_socket(socket)
+void MainWindow::on_videoPlayerGetTimeBtn_clicked()
{
- assignProperty(button, "text", "Disconnect");
- assignProperty(button, "enabled", true);
+ QTextStream stream(&m_serverSocket);
+ stream << JsonEngine().serialize("VideoPlayer.GetTime");
}
-void ConnectedState::onEntry(QEvent */*event*/)
+void MainWindow::on_xbmcGetVolumeBtn_clicked()
{
- qDebug("ConnectedState::onEntry");
+ QTextStream stream(&m_serverSocket);
+ stream << JsonEngine().serialize("XBMC.GetVolume");
+}
- connect(m_socket, SIGNAL(readyRead()), this, SLOT(onSocketData()));
- connect(m_socket, SIGNAL(disconnected()), this, SIGNAL(disconnected()));
- connect(m_socket, SIGNAL(error(QAbstractSocket::SocketError)), this, SLOT(onSocketError(QAbstractSocket::SocketError)));
+void MainWindow::on_xbmcToggleMuteBtn_clicked()
+{
+ QTextStream stream(&m_serverSocket);
+ stream << JsonEngine().serialize("XBMC.ToggleMute");
+}
- QTextStream stream(m_socket);
- stream << JsonEngine().playerGetActivePlayers();
+void MainWindow::on_xbmcPlayBtn_clicked()
+{
+ QTextStream stream(&m_serverSocket);
+ stream << JsonEngine().serialize("XBMC.Play");
+}
- qDebug("ConnectedState::onEntry - request sent");
+void MainWindow::on_xbmcQuitBtn_clicked()
+{
+ QTextStream stream(&m_serverSocket);
+ stream << JsonEngine().serialize("XBMC.Quit");
}
-void ConnectedState::onExit(QEvent */*event*/)
+void MainWindow::on_playerGetActivePlayers_clicked()
{
- disconnect(m_socket, 0, this, 0);
- qDebug("ConnectedState::onExit");
+ QTextStream stream(&m_serverSocket);
+ stream << JsonEngine().playerGetActivePlayers();
}
-void ConnectedState::onSocketError(QAbstractSocket::SocketError)
+void MainWindow::on_actionLeftBtn_clicked()
{
- qDebug("ConnectedState::onSocketError: %s", qPrintable(m_socket->errorString()));
+ m_manager->get(QNetworkRequest(QUrl(QString("http://localhost:8080/xbmcCmds/xbmcHttp?command=Action(%1)").arg(ACTION_MOVE_LEFT))));
}
-void ConnectedState::onSocketData()
+void MainWindow::onNetworAccesskManagerReplyFinished(QNetworkReply *reply)
{
- QTextStream stream(m_socket);
+ QTextStream stream(reply);
QString msg = stream.readAll();
- qDebug("ConnectedState::onSocketData: %s", qPrintable(msg));
+ qDebug("MainWindow::onNetworAccesskManagerReplyFinished: %s", qPrintable(msg));
+
+ reply->deleteLater();
}
-/////////////////////////////////////////////////////////////////////
-//
-DisconnectingState::DisconnectingState(QAbstractButton *button, QTcpSocket* socket, QState *parent)
- : QState(parent), m_socket(socket)
+void MainWindow::on_actionRightBtn_clicked()
{
- assignProperty(button, "text", "Disconnecting");
- assignProperty(button, "enabled", false);
+ m_manager->get(QNetworkRequest(QUrl(QString("http://localhost:8080/xbmcCmds/xbmcHttp?command=Action(%1)").arg(ACTION_MOVE_RIGHT))));
}
-void DisconnectingState::onEntry(QEvent */*event*/)
+void MainWindow::on_actionUpBtn_clicked()
{
- qDebug("DisconnectingState::onEntry");
+ m_manager->get(QNetworkRequest(QUrl(QString("http://localhost:8080/xbmcCmds/xbmcHttp?command=Action(%1)").arg(ACTION_MOVE_UP))));
+}
- connect(m_socket, SIGNAL(disconnected()), this, SIGNAL(disconnected()));
- connect(m_socket, SIGNAL(error(QAbstractSocket::SocketError)), this, SLOT(onSocketError(QAbstractSocket::SocketError)));
+void MainWindow::on_actionDownBtn_clicked()
+{
+ m_manager->get(QNetworkRequest(QUrl(QString("http://localhost:8080/xbmcCmds/xbmcHttp?command=Action(%1)").arg(ACTION_MOVE_DOWN))));
+}
- if (m_socket->state() != QTcpSocket::UnconnectedState) {
- qDebug("DisconnectingState::disconnectFromHost");
- m_socket->disconnectFromHost();
- }
- else {
- qDebug("DisconnectingState::disconnect");
- QTimer::singleShot(0, this, SIGNAL(disconnected()));
- }
+void MainWindow::on_actionEnterBtn_clicked()
+{
+ m_manager->get(QNetworkRequest(QUrl(QString("http://localhost:8080/xbmcCmds/xbmcHttp?command=Action(%1)").arg(ACTION_ENTER))));
}
-void DisconnectingState::onExit(QEvent */*event*/)
+void MainWindow::on_actionPlayBtn_clicked()
{
- disconnect(m_socket, 0, this, 0);
- qDebug("DisconnectingState::onExit");
+ m_manager->get(QNetworkRequest(QUrl(QString("http://localhost:8080/xbmcCmds/xbmcHttp?command=Action(%1)").arg(ACTION_PLAYER_PLAY))));
}
-void DisconnectingState::onSocketError(QAbstractSocket::SocketError)
+void MainWindow::on_actionSelectItemBtn_clicked()
{
- qDebug("DisconnectingState::onSocketError: %s", qPrintable(m_socket->errorString()));
+ m_manager->get(QNetworkRequest(QUrl(QString("http://localhost:8080/xbmcCmds/xbmcHttp?command=Action(%1)").arg(ACTION_SELECT_ITEM))));
+}
+
+void MainWindow::on_actionParentDirBtn_clicked()
+{
+ m_manager->get(QNetworkRequest(QUrl(QString("http://localhost:8080/xbmcCmds/xbmcHttp?command=Action(%1)").arg(ACTION_PARENT_DIR))));
}
</property>
<widget class="QWidget" name="infoPage">
<layout class="QVBoxLayout" name="verticalLayout">
- <property name="margin">
- <number>0</number>
- </property>
+ <item>
+ <layout class="QGridLayout" name="gridLayout">
+ <item row="0" column="0">
+ <widget class="QToolButton" name="videoPlayerStateBtn">
+ <property name="toolTip">
+ <string>VideoPlayer.State</string>
+ </property>
+ <property name="text">
+ <string>...</string>
+ </property>
+ </widget>
+ </item>
+ <item row="0" column="1">
+ <widget class="QToolButton" name="videoPlayerPlayPauseBtn">
+ <property name="toolTip">
+ <string>VideoPlayer.PlayPause</string>
+ </property>
+ <property name="text">
+ <string>...</string>
+ </property>
+ </widget>
+ </item>
+ <item row="0" column="2">
+ <widget class="QToolButton" name="videoPlayerStopBtn">
+ <property name="toolTip">
+ <string>VideoPlayer.Stop</string>
+ </property>
+ <property name="text">
+ <string>...</string>
+ </property>
+ </widget>
+ </item>
+ <item row="3" column="0">
+ <widget class="QToolButton" name="actionLeftBtn">
+ <property name="toolTip">
+ <string>left</string>
+ </property>
+ <property name="text">
+ <string>...</string>
+ </property>
+ </widget>
+ </item>
+ <item row="2" column="0">
+ <widget class="QToolButton" name="xbmcGetVolumeBtn">
+ <property name="toolTip">
+ <string>XBMC.GetVolume</string>
+ </property>
+ <property name="text">
+ <string>...</string>
+ </property>
+ </widget>
+ </item>
+ <item row="1" column="0">
+ <widget class="QToolButton" name="videoPlayerBigSkipBackwardBtn">
+ <property name="toolTip">
+ <string>VideoPlayer.BigSkipBackward</string>
+ </property>
+ <property name="text">
+ <string>...</string>
+ </property>
+ </widget>
+ </item>
+ <item row="1" column="1">
+ <widget class="QToolButton" name="videoPlayerBigSkipForwardBtn">
+ <property name="toolTip">
+ <string>VideoPlayer.BigSkipForward</string>
+ </property>
+ <property name="text">
+ <string>...</string>
+ </property>
+ </widget>
+ </item>
+ <item row="1" column="2">
+ <widget class="QToolButton" name="videoPlayerSmallSkipBackwardBtn">
+ <property name="toolTip">
+ <string>VideoPlayer.SmallSkipBackward</string>
+ </property>
+ <property name="text">
+ <string>...</string>
+ </property>
+ </widget>
+ </item>
+ <item row="2" column="1">
+ <widget class="QToolButton" name="xbmcToggleMuteBtn">
+ <property name="toolTip">
+ <string>XBMC.ToggleMute</string>
+ </property>
+ <property name="text">
+ <string>...</string>
+ </property>
+ </widget>
+ </item>
+ <item row="2" column="2">
+ <widget class="QToolButton" name="xbmcPlayBtn">
+ <property name="toolTip">
+ <string>XBMC.Play</string>
+ </property>
+ <property name="text">
+ <string>...</string>
+ </property>
+ </widget>
+ </item>
+ <item row="3" column="1">
+ <widget class="QToolButton" name="actionRightBtn">
+ <property name="toolTip">
+ <string>right</string>
+ </property>
+ <property name="text">
+ <string>...</string>
+ </property>
+ </widget>
+ </item>
+ <item row="3" column="2">
+ <widget class="QToolButton" name="actionUpBtn">
+ <property name="toolTip">
+ <string>up</string>
+ </property>
+ <property name="text">
+ <string>...</string>
+ </property>
+ </widget>
+ </item>
+ <item row="0" column="3">
+ <widget class="QToolButton" name="videoPlayerSkipPreviousBtn">
+ <property name="toolTip">
+ <string>VideoPlayer.SkipPrevious</string>
+ </property>
+ <property name="text">
+ <string>...</string>
+ </property>
+ </widget>
+ </item>
+ <item row="1" column="3">
+ <widget class="QToolButton" name="videoPlayerSmallSkipForwardBtn">
+ <property name="toolTip">
+ <string>VideoPlayer.SmallSkipForward</string>
+ </property>
+ <property name="text">
+ <string>...</string>
+ </property>
+ </widget>
+ </item>
+ <item row="2" column="3">
+ <widget class="QToolButton" name="xbmcQuitBtn">
+ <property name="toolTip">
+ <string>XBMC.Quit</string>
+ </property>
+ <property name="text">
+ <string>...</string>
+ </property>
+ </widget>
+ </item>
+ <item row="3" column="3">
+ <widget class="QToolButton" name="actionDownBtn">
+ <property name="toolTip">
+ <string>down</string>
+ </property>
+ <property name="text">
+ <string>...</string>
+ </property>
+ </widget>
+ </item>
+ <item row="3" column="4">
+ <widget class="QToolButton" name="actionEnterBtn">
+ <property name="toolTip">
+ <string>enter</string>
+ </property>
+ <property name="text">
+ <string>...</string>
+ </property>
+ </widget>
+ </item>
+ <item row="2" column="4">
+ <widget class="QToolButton" name="playerGetActivePlayers">
+ <property name="toolTip">
+ <string>playerGetActivePlayers</string>
+ </property>
+ <property name="text">
+ <string>...</string>
+ </property>
+ </widget>
+ </item>
+ <item row="1" column="4">
+ <widget class="QToolButton" name="videoPlayerGetTimeBtn">
+ <property name="toolTip">
+ <string>VideoPlayer.GetTime</string>
+ </property>
+ <property name="text">
+ <string>...</string>
+ </property>
+ </widget>
+ </item>
+ <item row="0" column="4">
+ <widget class="QToolButton" name="videoPlayerSkipNextBtn">
+ <property name="toolTip">
+ <string>VideoPlayer.SkipNext</string>
+ </property>
+ <property name="text">
+ <string>...</string>
+ </property>
+ </widget>
+ </item>
+ <item row="4" column="0">
+ <widget class="QToolButton" name="actionPlayBtn">
+ <property name="toolTip">
+ <string>play</string>
+ </property>
+ <property name="text">
+ <string>...</string>
+ </property>
+ </widget>
+ </item>
+ <item row="4" column="1">
+ <widget class="QToolButton" name="actionSelectItemBtn">
+ <property name="toolTip">
+ <string>select item</string>
+ </property>
+ <property name="text">
+ <string>...</string>
+ </property>
+ </widget>
+ </item>
+ <item row="4" column="2">
+ <widget class="QToolButton" name="actionParentDirBtn">
+ <property name="toolTip">
+ <string>parent dir</string>
+ </property>
+ <property name="text">
+ <string>...</string>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </item>
<item>
<widget class="QTextEdit" name="textEdit">
<property name="enabled">