From ec3f00561af85a33926bb8039eeb7e52503a5990 Mon Sep 17 00:00:00 2001 From: druid23 Date: Sun, 5 Sep 2010 11:49:12 +0100 Subject: [PATCH] Added Network status checking to fix Bug [#6294] Becoming disconnected from network whilst running causes multiple restore connection popups. vlc-remote will now not let you use the interface without an active connection (wlan or gprs). This will break the use case of using vlc-remote to control a local (on device) vlc instance! modified: src/accountdialog.cpp modified: src/appsettings.cpp modified: src/appsettings.h modified: src/playermainwindow.cpp --- src/accountdialog.cpp | 17 +++++++- src/appsettings.cpp | 13 ++++++ src/appsettings.h | 1 + src/playermainwindow.cpp | 98 +++++++++++++++++++++++++++++----------------- 4 files changed, 91 insertions(+), 38 deletions(-) diff --git a/src/accountdialog.cpp b/src/accountdialog.cpp index ecdb02f..a5fe39e 100644 --- a/src/accountdialog.cpp +++ b/src/accountdialog.cpp @@ -24,6 +24,10 @@ #include #include #include +#include "appsettings.h" +#if defined(Q_WS_S60) || defined(Q_WS_MAEMO_5) +#include +#endif @@ -111,7 +115,9 @@ void AccountDialog::load() item->setFont(font); } ui->listWidget->addItem(item); - asycItems.append(*item); + if (AppSettings::isConnected()) { + asycItems.append(*item); + } } settings.endGroup(); @@ -121,7 +127,14 @@ void AccountDialog::load() // QFuture itemFutur = QtConcurrent::mapped(asycItems, asyncTestItem); - mFuturWatcher->setFuture(QtConcurrent::mapped(asycItems, asyncTestItem)); + if (AppSettings::isConnected()) { + mFuturWatcher->setFuture(QtConcurrent::mapped(asycItems, asyncTestItem)); + } + else { +#if defined(Q_WS_S60) || defined(Q_WS_MAEMO_5) + QMaemo5InformationBox::information(this, tr("No network connection available!"), QMaemo5InformationBox::DefaultTimeout); +#endif + } } QListWidgetItem AccountDialog::asyncTestItem(const QListWidgetItem& item) diff --git a/src/appsettings.cpp b/src/appsettings.cpp index babef8c..e910978 100644 --- a/src/appsettings.cpp +++ b/src/appsettings.cpp @@ -16,6 +16,7 @@ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include +#include #include "appsettings.h" AppSettings::AppSettings() { @@ -24,7 +25,19 @@ AppSettings::AppSettings() { AppSettings::~AppSettings() { ; } +bool AppSettings::isConnected() { + QNetworkInterface wlan = QNetworkInterface::interfaceFromName("wlan0"); + QNetworkInterface gprs = QNetworkInterface::interfaceFromName("gprs0"); + if( (wlan.isValid() && wlan.flags().testFlag(QNetworkInterface::IsUp)) || (gprs.isValid() && gprs.flags().testFlag(QNetworkInterface::IsUp)) ) + { + return true; + } + else + { + return false; + } +} QString AppSettings::getCurrentKey() { QSettings sets; return sets.value("config/currentKey", "").toString(); diff --git a/src/appsettings.h b/src/appsettings.h index 407b5a2..98b287b 100644 --- a/src/appsettings.h +++ b/src/appsettings.h @@ -42,6 +42,7 @@ public: static bool setHomeDirectory(VlcDirectory dir); static Orientation setOrientation(Orientation orientation); static Orientation getOrientation(); + static bool isConnected(); //private: //static QSettings settings; }; diff --git a/src/playermainwindow.cpp b/src/playermainwindow.cpp index 26ea30e..f34a9c8 100644 --- a/src/playermainwindow.cpp +++ b/src/playermainwindow.cpp @@ -24,6 +24,9 @@ #include "aboutdialog.h" #include "accountdialog.h" #include "appsettings.h" +#if defined(Q_WS_S60) || defined(Q_WS_MAEMO_5) +#include +#endif PlayerMainWindow::PlayerMainWindow(QWidget *parent) : QMainWindow(parent), @@ -116,38 +119,46 @@ // check if last used connection is still valid or showConfig - QSettings settings; - QString last_ip = AccountDialog::currentIp(); - if (!last_ip.isNull() && !last_ip.isEmpty()) { - QTcpSocket * socket = new QTcpSocket; - if(last_ip.contains(":")) - { - QStringList hostSplit = last_ip.split(":"); - QString ip = hostSplit.at(0); - QString port = hostSplit.at(1); - socket->connectToHost(ip,port.toInt()); - } - else { - socket->connectToHost(last_ip,8080); + + // check for network + if (AppSettings::isConnected()) { + QSettings settings; + QString last_ip = AccountDialog::currentIp(); + if (!last_ip.isNull() && !last_ip.isEmpty()) { + QTcpSocket * socket = new QTcpSocket; + if(last_ip.contains(":")) + { + QStringList hostSplit = last_ip.split(":"); + QString ip = hostSplit.at(0); + QString port = hostSplit.at(1); + socket->connectToHost(ip,port.toInt()); + } + else { + socket->connectToHost(last_ip,8080); + } + if (!socket->waitForConnected(1000)) { + showConfig(); + } + else { + mIp= last_ip; + + mPlayListMainWindow->init(); + mBrowserMainWindow->init(); + mTimer->start(5000); + askStatus(); + } + delete socket; } - if (!socket->waitForConnected(1000)) { - showConfig(); - } else { - mIp= last_ip; - - mPlayListMainWindow->init(); - mBrowserMainWindow->init(); - mTimer->start(5000); - askStatus(); + showConfig(); } - delete socket; } else { - showConfig(); +#if defined(Q_WS_S60) || defined(Q_WS_MAEMO_5) + QMaemo5InformationBox::information(this, tr("Network unavailable!"), QMaemo5InformationBox::DefaultTimeout); +#endif + showConfig(); } - - } @@ -290,15 +301,24 @@ void PlayerMainWindow::showConfig() { mTimer->stop(); - AccountDialog * dialog = new AccountDialog; - dialog->exec(); - - mIp= AccountDialog::currentIp(); + // check for network + if (AppSettings::isConnected()) { + AccountDialog * dialog = new AccountDialog(this); + dialog->exec(); - mPlayListMainWindow->init(); - mBrowserMainWindow->init(); - mTimer->start(5000); - askStatus(); + mIp= AccountDialog::currentIp(); + + mPlayListMainWindow->init(); + mBrowserMainWindow->init(); + mTimer->start(5000); + askStatus(); + } + else { +#if defined(Q_WS_S60) || defined(Q_WS_MAEMO_5) + QMaemo5InformationBox::information(this, tr("Network unavailable!"), QMaemo5InformationBox::DefaultTimeout); +#endif + QTimer::singleShot(20000, this, SLOT(showConfig())); + } } void PlayerMainWindow::showAbout() { @@ -311,8 +331,14 @@ void PlayerMainWindow::askStatus() { //qDebug() << "Status requested. at:" << QTime::currentTime().toString("hh::mm:ss"); - QNetworkReply * reply = mNetManager->get(QNetworkRequest(QUrl("http://"+mIp+"/requests/status.xml"))); - connect(reply,SIGNAL(readyRead()),this,SLOT(parseXmlStatus())); + if (AppSettings::isConnected()) { + QNetworkReply * reply = mNetManager->get(QNetworkRequest(QUrl("http://"+mIp+"/requests/status.xml"))); + connect(reply,SIGNAL(readyRead()),this,SLOT(parseXmlStatus())); + connect(reply,SIGNAL(error(QNetworkReply::NetworkError)),this,SLOT(error(QNetworkReply::NetworkError))); + } + else { + showConfig(); // this will handle stopping and restarting the timer. + } } void PlayerMainWindow::parseXmlStatus() -- 1.7.9.5