From 72df64f423d579bcd2fd156e48007055faf57ca7 Mon Sep 17 00:00:00 2001 From: Niklas Date: Thu, 22 Sep 2011 13:49:46 +0200 Subject: the html gui is working now. problem solved: LogReceiver/NetworkDiscovery started to early. so javascript jquery was not usable. also put the js code into the html file. it seems that qt has a problem using the code if it is not in the html file. also implemented the fast version. if one interface is usable we now go on directly to the continue boot screen --- LogReceiver/html/continueBoot.html | 24 ++++++++++ LogReceiver/html/js/nd-functions.js | 4 +- LogReceiver/html/networkdiscovery.html | 31 ++++++++++++ LogReceiver/logreceiver.cpp | 69 +++++++++++++++++++++----- LogReceiver/logreceiver.h | 5 +- LogReceiver/nd.qrc | 1 + LogReceiver/ndgui.cpp | 88 +++++++--------------------------- LogReceiver/ndgui.h | 30 ++---------- 8 files changed, 143 insertions(+), 109 deletions(-) create mode 100644 LogReceiver/html/continueBoot.html diff --git a/LogReceiver/html/continueBoot.html b/LogReceiver/html/continueBoot.html new file mode 100644 index 0000000..89020b7 --- /dev/null +++ b/LogReceiver/html/continueBoot.html @@ -0,0 +1,24 @@ + + + + + + + + + + + +
+
+
+

Continue Boot

+
+
+ +
+ + + diff --git a/LogReceiver/html/js/nd-functions.js b/LogReceiver/html/js/nd-functions.js index 7480763..ac8f273 100644 --- a/LogReceiver/html/js/nd-functions.js +++ b/LogReceiver/html/js/nd-functions.js @@ -3,6 +3,7 @@ var updateStatus = function (s){ }; var updateIfProgressBar = function (i, p){ + fbgui.notifyCall(); if (p >= 0 && p <= 100){ $("#"+i+"_progress").progressbar({ value: p }); }else{ @@ -11,10 +12,11 @@ var updateIfProgressBar = function (i, p){ }; var updateIfStatus = function(i, s){ - + }; var addInterface = function (i){ + fbgui.notifyCall(); $("#nd_progress_container").append( "
"+ " Interface: " +i+ diff --git a/LogReceiver/html/networkdiscovery.html b/LogReceiver/html/networkdiscovery.html index 9ae0c5b..5e7aa64 100644 --- a/LogReceiver/html/networkdiscovery.html +++ b/LogReceiver/html/networkdiscovery.html @@ -5,6 +5,37 @@ + + +
diff --git a/LogReceiver/logreceiver.cpp b/LogReceiver/logreceiver.cpp index 7f573bf..011d5f3 100644 --- a/LogReceiver/logreceiver.cpp +++ b/LogReceiver/logreceiver.cpp @@ -1,4 +1,3 @@ - #include "logreceiver.h" #include "../common/fbgui.h" @@ -15,6 +14,9 @@ LogReceiver::~LogReceiver() { void LogReceiver::initAndRun(QString serverPath, QString pathToExe, QStringList* args) { + _userChoice = false; + _blocked = false; + if (serverPath != DEFAULT_QTSOCKETADDRESS) { dhcpcdArguments.append("-q"); dhcpcdArguments.append(serverPath); @@ -179,7 +181,7 @@ void LogReceiver::runDHCPCD(QString interface) { dhcpcdArguments.removeLast(); } -void LogReceiver::checkConnectivity(QString ifName) { +bool LogReceiver::checkConnectivity(QString ifName) { int metric = 0; // get gateway address @@ -197,16 +199,24 @@ void LogReceiver::checkConnectivity(QString ifName) { if (!tcpSocket->waitForConnected(500)) { qDebug() << "no internet connection with interface" << ifName; qDebug() << tcpSocket->errorString(); - emit updateStatusLabel(ifName, "connection not possible"); + emit + updateStatusLabel(ifName, "connection not possible"); + return false; } else { qDebug() << "internet: check passed! for interface" << ifName; - emit - updateStatusLabel(ifName, "connection possible"); - emit connectionEstablished(&ifConf); + emit updateStatusLabel(ifName, "connection possible"); + if (!_userChoice) { + // blockiere jeden weiteren check + // emite continueBoot + _blocked = true; + emit continueBoot(ifName); + } else { + emit connectionEstablished(&ifConf); + } + return true; } } - /** * */ @@ -346,7 +356,7 @@ void LogReceiver::handleNewInputLine(QLocalSocket * client, QString data) { emit changeProgressBarValue(interface, 80); break; case DHCPCD_EXIT: - //emit changeProgressBarValue(interface, 100); + emit changeProgressBarValue(interface, 100); break; case DHCPCD_LOG: @@ -355,7 +365,7 @@ void LogReceiver::handleNewInputLine(QLocalSocket * client, QString data) { } break; case LOG_ERR: - qDebug() << "received stat_error"; + qDebug() << "received error:" << msg; break; default: //qDebug() << logMsg; @@ -391,6 +401,7 @@ void LogReceiver::handleNewInputLine(QLocalSocket * client, QString data) { * * @see LogReceiver::getListOfNetworkInterfaces() */ +/* void LogReceiver::handleProcessFinished(int exitCode, QProcess::ExitStatus exitStatus) { QProcess* p = qobject_cast (QObject::sender()); @@ -412,8 +423,6 @@ void LogReceiver::handleProcessFinished(int exitCode, changeProgressBarValue(ifName, 100); emit updateStatusLabel(ifName, "check connectivity"); - //checkInternetConnection(ifName); - //checkInternetConnectionViaTCP(ifName); checkConnectivity(ifName); } } @@ -426,6 +435,44 @@ void LogReceiver::handleProcessFinished(int exitCode, emit allProcessesFinished(); } } +*/ +void LogReceiver::handleProcessFinished(int exitCode, + QProcess::ExitStatus exitStatus) { + + QProcess* p = qobject_cast (QObject::sender()); + QString ifName = clientProcessToIfNameMap.value(p, "ifName"); + if (!_blocked) { + if (ifName.compare("ifName") == 0) { + qDebug() + << "--- \t [LogReceiver::handleProcessFinished] haven't found process!"; + } else { + qDebug() << "process for interface" << ifName << "finished" + << exitCode << exitStatus; + if (exitCode > 0) { + qDebug() << "process exited unexpected"; + emit updateStatusLabel(ifName, "process exited unexpected"); + } else { + qDebug() << "process normal exit"; + emit changeProgressBarValue(ifName, 100); + emit updateStatusLabel(ifName, "check connectivity"); + checkConnectivity(ifName); + } + } + if (!_blocked) { + QLocalSocket *client = ifNameToClient.value(ifName, 0); + if (client != 0) { + handleNewInput(client); + } + numberOfProcesses = numberOfProcesses - 1; + if (numberOfProcesses <= 0 && _userChoice) { + emit allProcessesFinished(); + } + } + } else { + qDebug() << "already blocked"; + emit updateStatusLabel(ifName, "finished DHCP"); + } +} /** * This Method is called when a process is started. * diff --git a/LogReceiver/logreceiver.h b/LogReceiver/logreceiver.h index 172b1ae..41cd3c7 100644 --- a/LogReceiver/logreceiver.h +++ b/LogReceiver/logreceiver.h @@ -62,6 +62,7 @@ signals: void abortBoot(QString msg); void updateStatusLabel(QString ifName, QString status); void allProcessesFinished(); + void continueBoot(QString ifName); private: QLocalServer *server; @@ -78,6 +79,8 @@ private: QNetworkAccessManager *accessManager; int numberOfProcesses; routemanager rm; + bool _userChoice; + bool _blocked; void handleNewInput(QLocalSocket * client); @@ -85,7 +88,7 @@ private: void runDHCPCD(QString interface); QListcheckCarrierState(QList &interfaces); bool checkCarrierState(QString interface); - void checkConnectivity(QString ifName); + bool checkConnectivity(QString ifName); QList getListOfNetworkInterfaces(); bool checkBlackList(QString i); diff --git a/LogReceiver/nd.qrc b/LogReceiver/nd.qrc index d9d4921..1719e6c 100644 --- a/LogReceiver/nd.qrc +++ b/LogReceiver/nd.qrc @@ -21,5 +21,6 @@ html/css/images/ui-icons_ef8c08_256x240.png html/css/images/ui-icons_ffd27a_256x240.png html/css/images/ui-icons_ffffff_256x240.png + html/continueBoot.html diff --git a/LogReceiver/ndgui.cpp b/LogReceiver/ndgui.cpp index 7514d8a..ccd67da 100644 --- a/LogReceiver/ndgui.cpp +++ b/LogReceiver/ndgui.cpp @@ -7,16 +7,19 @@ ndgui::ndgui(QMainWindow *parent) : connect(&logReceiver, SIGNAL(changeProgressBarValue(const QString & , const int& )), this, SLOT(updateIfProgressBar(const QString & , const int&))); //connect(&logReceiver, SIGNAL(connectionEstablished(interfaceconfiguration*)), this, SLOT(handleConnectionEstablished(interfaceconfiguration*))); //connect(&logReceiver, SIGNAL(abortBoot(QString)), this, SLOT(handleAbortBoot(QString))); - //connect(&logReceiver, SIGNAL(updateStatusLabel(QString,QString)), this, SLOT(handleUpdateStatusLabel(QString, QString))); + connect(&logReceiver, SIGNAL(updateStatusLabel(QString,QString)), this, SLOT(updateIfStatus(const QString &, const QString &))); //connect(&logReceiver, SIGNAL(allProcessesFinished()), this, SLOT(handleAllProcessesFinished())); + connect(&logReceiver, SIGNAL(continueBoot(QString)), this, SLOT(continueBoot(QString))); + _started = false; _webView = new QWebView(this); + connect(_webView->page()->mainFrame(), SIGNAL( + javaScriptWindowObjectCleared()), this, SLOT(attachToDOM())); connect(_webView, SIGNAL(loadFinished(bool)), this, - SLOT(loadFinished(bool))); + SLOT(startNetworkDiscovery())); + - connect(_webView->page()->mainFrame(), SIGNAL( - javaScriptWindowObjectCleared()), this, SLOT(attachToDOM())); setCentralWidget(_webView); _webView->load(QUrl("qrc:html/networkdiscovery.html")); @@ -25,71 +28,19 @@ ndgui::ndgui(QMainWindow *parent) : setAttribute(Qt::WA_QuitOnClose, true); setWindowFlags(Qt::FramelessWindowHint); - logReceiver.initAndRun("/var/tmp/qt_c_socket_custom"); - numberOfInterfaces = 0; - - } ndgui::~ndgui() { } -void ndgui::buildGui() { - - ndStatusLabel = new QLabel(tr("test")); - ndStatusLabel->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); - ndStatusLabel->setAlignment(Qt::AlignCenter); - ndStatusLabel->setMinimumSize(100, 20); - - // create interface group box - createInterfaceGroupBox(); - - mainLayout = new QVBoxLayout; - mainLayout->addWidget(ndStatusLabel); - mainLayout->addWidget(interfaceGroupBox); - - setLayout(mainLayout); -} - -void ndgui::createInterfaceGroupBox() { - interfaceGroupBox = new QGroupBox(tr("Interfaces")); - - interfaceGroupBoxLayout = new QVBoxLayout; - /* add interfaces via addInterfacesToGroupBox()*/ - - interfaceGroupBox->setLayout(interfaceGroupBoxLayout); -} - -void ndgui::addNewInterface(QString ifName) { - qDebug() << "receive interface to add:" << ifName; - QHBoxLayout *hBoxLayout = new QHBoxLayout; - QLabel *label = new QLabel(ifName); - QLabel *labelStatus = new QLabel("waiting"); - QProgressBar *pBar = new QProgressBar(this); - pBar->setRange(1, 100); - pBar->setMaximumSize(200, 20); - - statusLabels.insert(ifName, labelStatus); - progressBars.insert(ifName, pBar); - - hBoxLayout->addWidget(label, Qt::AlignLeft); - hBoxLayout->addWidget(labelStatus, Qt::AlignCenter); - hBoxLayout->addWidget(pBar, Qt::AlignRight); - - numberOfInterfaces++; - - interfaceGroupBoxLayout->addLayout(hBoxLayout, 2); -} - -void ndgui::handleProgress(QString ifName, int newValue) { - qDebug() << "<[---]> SLOT handleProgress activated with: " << ifName - << newValue; - QProgressBar * pBar = progressBars.value(ifName); - if (newValue >= pBar->value()) { - pBar->setValue(newValue); - } else { - qDebug() << "Error: new value is smaller than the old value!"; +void ndgui::startNetworkDiscovery(){ + if(!_started) { + _started = true; + logReceiver.initAndRun("/var/tmp/qt_c_socket_custom"); + } + else { + qDebug() << "NetworkDiscovery already started"; } } @@ -102,10 +53,6 @@ void ndgui::handleAbortBoot(QString msg) { showAbortBootDialog(); } -void ndgui::handleUpdateStatusLabel(QString ifName, QString status) { - QLabel* label = statusLabels.value(ifName); - label->setText(status); -} void ndgui::handleAllProcessesFinished() { qDebug() << "all Processes finished"; @@ -166,7 +113,9 @@ void ndgui::shutDownSystem() { void ndgui::continueBoot(QString ifName) { QString text = "continue with interface: " + ifName; - cID->close(); + qDebug() << text; + _webView->load(QUrl("qrc:html/continueBoot.html")); + //cID->close(); } void ndgui::showLog() { @@ -176,9 +125,6 @@ void ndgui::showLog() { /*test html gui version*/ /* slots */ -void ndgui::loadFinished(bool ok) { - qDebug() << "load finished:" << ok; -} /************************************************/ ////////////////////////////////////////////////// diff --git a/LogReceiver/ndgui.h b/LogReceiver/ndgui.h index fd34ec4..d0752e7 100644 --- a/LogReceiver/ndgui.h +++ b/LogReceiver/ndgui.h @@ -22,11 +22,8 @@ public: ~ndgui(); public slots: - void handleProgress(QString ifName, int newValue); - void addNewInterface(QString ifName); void handleConnectionEstablished(interfaceconfiguration *ifConf); void handleAbortBoot(QString msg); - void handleUpdateStatusLabel(QString ifName, QString status); void handleAllProcessesFinished(); void restartSystem(); @@ -37,6 +34,8 @@ public slots: void showAbortBootDialog(); void showChooseInterfaceDialog(); + void startNetworkDiscovery(); + /*test for html gui version*/ void attachToDOM(); void loadJQuery(); @@ -44,11 +43,12 @@ public slots: void updateIfStatus(const QString &ifName, const QString &status); void updateStatus(const QString &status); void updateIfProgressBar(const QString &ifName, const int& percent); - void loadFinished(bool ok); void notifyCall(); + private: - Ui::ndguiClass ui; + + bool _started; QWebView * _webView; @@ -56,29 +56,9 @@ private: QMap finalUsableIntefacesMap; // maps interfaceName to its gateway - int numberOfInterfaces; - ChooseInterfaceDialog *cID; AbortBootDialog *aBD; - /*gui elements*/ - QMap progressBars; - QMap statusLabels; - QLabel *ndStatusLabel; - QGroupBox *interfaceGroupBox; - QVBoxLayout *mainLayout; - QVBoxLayout *interfaceGroupBoxLayout; - /**/ - - - - - /*gui functions*/ - void buildGui(); - void createInterfaceGroupBox(); - - - }; #endif // NDGUI_H -- cgit v1.2.3-55-g7522