Added code to connect to the XBMC server.
authorIonutz Borcoman <iborco@gmail.com>
Tue, 1 Feb 2011 16:00:18 +0000 (18:00 +0200)
committerIonutz Borcoman <iborco@gmail.com>
Thu, 10 Mar 2011 08:10:13 +0000 (10:10 +0200)
src/mainwindow.cpp
src/mainwindow.h
src/mainwindow.ui
src/xbmcnetmoviesremote.pro

index 7c7115a..ef57d3b 100644 (file)
 #include "mainwindow.h"
 #include "ui_mainwindow.h"
 
+#include "constants.h"
 #include "setupdialog.h"
 #include "json.h"
 
 #include <QtCore/QCoreApplication>
+#include <QtCore/QSettings>
+#include <QtCore/QTimer>
+#include <QtCore/QTextStream>
 
 #if defined(Q_OS_SYMBIAN) && defined(ORIENTATIONLOCK)
 #include <eikenv.h>
@@ -26,6 +30,13 @@ MainWindow::MainWindow(QWidget *parent)
     : QMainWindow(parent), ui(new Ui::MainWindow)
 {
     ui->setupUi(this);
+
+    connect(&serverSocket, SIGNAL(connected()), this, SLOT(serverConnected()));
+    connect(&serverSocket, SIGNAL(disconnected()), this, SLOT(serverDisconnected()));
+    connect(&serverSocket, SIGNAL(readyRead()), this, SLOT(serverDataAvailable()));
+    connect(&serverSocket, SIGNAL(error(QAbstractSocket::SocketError)), this, SLOT(serverError()));
+
+    connectToServer();
 }
 
 MainWindow::~MainWindow()
@@ -90,3 +101,65 @@ void MainWindow::on_actionSetup_triggered()
         dialog.save();
     }
 }
+
+void MainWindow::connectToServer()
+{
+    // 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;
+
+    serverSocket.connectToHost(settings.value(SETUP_XBMC_SERVER, SETUP_XBMC_SERVER_DEFAULT).toString(),
+                               settings.value(SETUP_XBMC_PORT, SETUP_XBMC_PORT_DEFAULT).toInt());
+}
+
+void MainWindow::disconnectFromServer()
+{
+    serverSocket.disconnectFromHost();
+}
+
+void MainWindow::serverConnected()
+{
+    ui->testButton->setEnabled(true);
+    ui->actionConnect->setChecked(true);
+}
+
+void MainWindow::serverDisconnected()
+{
+    ui->testButton->setEnabled(false);
+    ui->actionConnect->setChecked(false);
+}
+
+void MainWindow::serverDataAvailable()
+{
+    QTextStream stream(&serverSocket);
+    ui->textEdit->setText(stream.readAll());
+}
+
+void MainWindow::serverError()
+{
+    ui->textEdit->setText(serverSocket.errorString());
+    ui->actionConnect->setChecked(serverSocket.state() == QTcpSocket::ConnectedState);
+    // clean the error window after 2 secs
+    QTimer::singleShot(2000, this, SLOT(cleanError()));
+}
+
+void MainWindow::cleanError()
+{
+    ui->textEdit->clear();
+}
+
+void MainWindow::on_testButton_clicked()
+{
+    QTextStream stream(&serverSocket);
+    stream << JsonEngine().playerGetActivePlayers();
+}
+
+void MainWindow::on_actionConnect_triggered(bool checked)
+{
+    qDebug("menu state: %d", checked);
+    if (checked) {
+        connectToServer();
+    } else {
+        disconnectFromServer();
+    }
+}
index b33aec6..001368a 100644 (file)
@@ -11,6 +11,7 @@
 #define MAINWINDOW_H
 
 #include <QtGui/QMainWindow>
+#include <QtNetwork/QTcpSocket>
 
 namespace Ui {
     class MainWindow;
@@ -33,9 +34,25 @@ public:
     void showExpanded();
 
 private slots:
+    // manual connected slots
+    void serverConnected();
+    void serverDisconnected();
+    void serverDataAvailable();
+    void serverError();
+    void cleanError();
+
+    // auto-connected slots
     void on_actionSetup_triggered();
+    void on_actionConnect_triggered(bool checked);
+    void on_testButton_clicked();
 
 private:
+    void pendingNetworkOperation(bool pending);
+
+    void connectToServer();
+    void disconnectFromServer();
+
+    QTcpSocket serverSocket;
     Ui::MainWindow *ui;
 };
 
index cfd23aa..731518d 100644 (file)
   <property name="windowTitle">
    <string>XBMC Net Movies RC</string>
   </property>
-  <widget class="QWidget" name="centralWidget"/>
+  <widget class="QWidget" name="centralWidget">
+   <layout class="QVBoxLayout" name="verticalLayout">
+    <item>
+     <widget class="QPushButton" name="testButton">
+      <property name="enabled">
+       <bool>false</bool>
+      </property>
+      <property name="text">
+       <string>test</string>
+      </property>
+     </widget>
+    </item>
+    <item>
+     <widget class="QTextEdit" name="textEdit">
+      <property name="enabled">
+       <bool>false</bool>
+      </property>
+     </widget>
+    </item>
+   </layout>
+  </widget>
   <widget class="QMenuBar" name="menuBar">
    <property name="geometry">
     <rect>
@@ -28,6 +48,7 @@
      <string>MainMenu</string>
     </property>
     <addaction name="actionSetup"/>
+    <addaction name="actionConnect"/>
    </widget>
    <addaction name="menuSetup"/>
   </widget>
     <string>Setup</string>
    </property>
   </action>
+  <action name="actionConnect">
+   <property name="checkable">
+    <bool>true</bool>
+   </property>
+   <property name="text">
+    <string>Connect</string>
+   </property>
+  </action>
  </widget>
  <layoutdefault spacing="6" margin="11"/>
  <resources/>
index afbc8a2..f64f4ae 100644 (file)
@@ -8,7 +8,8 @@ DEPLOYMENTFOLDERS = # file1 dir1
 #DEFINES += ORIENTATIONLOCK
 
 # Needs to be defined for Symbian
-#DEFINES += NETWORKACCESS
+DEFINES += NETWORKACCESS
+QT += network
 
 symbian:TARGET.UID3 = 0xED8FBFF1