#include "ndgui.h"
ndgui::ndgui(QMainWindow *parent) :
QMainWindow(parent) {
_tag = "[nd:ndgui]";
_started = false;
_userChoice = false;
createAction();
connect(&networkDiscovery, SIGNAL(addInterface(const QString &)), this, SLOT(addInterface( const QString &)));
connect(&networkDiscovery, SIGNAL(changeProgressBarValue(const QString & , const int& )), this, SLOT(updateIfProgressBar(const QString & , const int&)));
connect(&networkDiscovery, SIGNAL(connectionEstablished(QString)), this, SLOT(handleConnectionEstablished(QString)));
connect(&networkDiscovery, SIGNAL(abortBoot(QString)), this, SLOT(abortBoot(const QString)));
connect(&networkDiscovery, SIGNAL(updateStatusLabel(QString,QString)), this, SLOT(updateIfStatus(const QString &, const QString &)));
connect(&networkDiscovery, SIGNAL(allProcessesFinished()), this, SLOT(handleAllProcessesFinished()));
connect(&networkDiscovery, SIGNAL(continueBoot(QString, int)), this, SLOT(continueBoot(QString, int)));
_webView = new QWebView(this);
connect(_webView->page()->mainFrame(), SIGNAL(
javaScriptWindowObjectCleared()), this, SLOT(attachToDOM()));
setCentralWidget(_webView);
setWindowTitle(tr("NetD"));
setAttribute(Qt::WA_QuitOnClose, true);
setWindowFlags(Qt::FramelessWindowHint);
_webView->load(QUrl("qrc:html/networkdiscovery_userchoice.html"));
_webView->show();
QTimer::singleShot(2000, this, SLOT(prepareNetworkDiscover()));
}
ndgui::~ndgui() {
}
void ndgui::createAction() {
_allowUserChoice = new QAction(tr("&quit"), this);
_allowUserChoice->setShortcut(QKeySequence(Qt::Key_F5));
connect(_allowUserChoice, SIGNAL(triggered()), this, SLOT(setUserChoiceTrue()));
this->addAction(_allowUserChoice);
}
void ndgui::setUserChoiceTrue() {
_userChoice = true;
}
void ndgui::prepareNetworkDiscover() {
connect(_webView, SIGNAL(loadFinished(bool)), this,
SLOT(startNetworkDiscovery()));
this->removeAction(_allowUserChoice);
_webView->load(QUrl("qrc:html/networkdiscovery.html"));
_webView->show();
}
void ndgui::startNetworkDiscovery(){
disconnect(_webView,SIGNAL(loadFinished(bool)), this, SLOT(startNetworkDiscovery()));
if(!_started) {
_started = true;
networkDiscovery.initAndRun("209.85.148.105", _userChoice, true, "/var/tmp/logfile","/var/tmp/qt_c_socket_custom");
}
else {
qDebug() << _tag << "NetworkDiscovery already started";
}
}
void ndgui::handleConnectionEstablished(QString ifName) {
_ifNameList.append(ifName);
}
void ndgui::handleAllProcessesFinished() {
qDebug() << _tag << "all Processes finished";
if(_ifNameList.size() > 0) {
QString jsonArr = "[";
for(int i = 0; i < _ifNameList.size()-1; i++) {
jsonArr += "\"" + _ifNameList.value(i) + "\",";
}
jsonArr += "\"" + _ifNameList.last() + "\"]";
chooseInterfaceDialog(jsonArr);
} else {
abortBoot("No usable interfaces found!");
}
}
void ndgui::restartSystem() {
}
void ndgui::shutDownSystem() {
}
void ndgui::continueBoot(QString ifName, int userChoice) {
if (!userChoice) {
QString text = "continue with interface: " + ifName;
qDebug() << _tag << text << "no user choice";
} else {
QString text = "continue with interface: " + ifName;
qDebug() << _tag << text << "with user choice";
QString gateway = networkDiscovery.getGatewayForInterface(ifName);
networkDiscovery.ip4_replaceDefaultRoute(ifName,gateway,0);
}
_webView->load(QUrl("qrc:html/continueBoot.html"));
}
QString ndgui::readLogFile() {
qDebug() << _tag << "show log";
return networkDiscovery.readLogFile();
}
/*test html gui version*/
QVariantList ndgui::getManualConfInterfaces() {
qDebug() << _tag << "call getManualConfInterfaces";
QVariantList jsonArr;
foreach (QString s, _manConfList) {
QVariant e(s);
jsonArr << e;
}
qDebug() << _tag << "value of jsonArr:" << jsonArr;
return jsonArr;
}
int ndgui::ip4_setManualConfiguration(QVariantMap jsonArr) {
return networkDiscovery.ip4_setManualConfiguration(jsonArr);
}
/* slots */
/************************************************/
//////////////////////////////////////////////////
/************************************************/
void ndgui::attachToDOM(){
_webView->page()->mainFrame()->addToJavaScriptWindowObject(QString("fbgui"), this);
loadJQuery();
}
void ndgui::loadJQuery() {
QString js;
QString pathToJsDir(":/html");
pathToJsDir.append("/js");
QDir qrcJSDir(pathToJsDir);
QFileInfoList fiList = qrcJSDir.entryInfoList();
QFileInfo fi;
foreach(fi, fiList)
{
if (fi.suffix() == "js") {
//qDebug()<< fi.fileName();
//qxtLog->debug() << fi.fileName();
if (fi.fileName() != "test.js" && fi.fileName() != "nd-functions.js") {
QFile file;
file.setFileName(pathToJsDir + "/" + fi.fileName());
file.open(QIODevice::ReadOnly);
js = file.readAll();
file.close();
_webView->page()->mainFrame()->evaluateJavaScript(js);
//qxtLog->debug() << "evaluated " + fi.fileName();
}
}
}
}
//diese methoden müssen später in die javascriptInterface Klasse eingefügt werden.
// dieser code muss später in die javascriptInterface klasse der fbgui eingefügt werden
// tausche dazu ndgui zu javascriptinterface
// und _webView->page()->mainFrame() zu _parent
void ndgui::abortBoot(const QString msg) {
qDebug() << _tag << "call abortBoot:" << msg;
QString code = QString("abortBootDialog('\%1')").arg(msg);
_webView->page()->mainFrame()->evaluateJavaScript(code);
}
void ndgui::chooseInterfaceDialog(const QString msg) {
QString code = QString("chooseInterfaceDialog(\%1)").arg(msg);
_webView->page()->mainFrame()->evaluateJavaScript(code);
}
void ndgui::updateStatus(const QString &status) {
if (status == "")
return;
QString code = QString("updateStatus('\%1')").arg(status);
_webView->page()->mainFrame()->evaluateJavaScript(code);
}
void ndgui::updateIfProgressBar(const QString &ifName, const int& percent) {
if (percent == 0)
return;
qDebug() << _tag << "call updateIfProgressBar";
QString code = QString("updateIfProgressBar('\%1',\%2)").arg(ifName).arg(percent);
_webView->page()->mainFrame()->evaluateJavaScript(code);
}
void ndgui::updateIfStatus(const QString &ifName, const QString &status) {
if (ifName == "")
return;
QString code = QString("updateIfStatus('\%1','\%2')").arg(ifName).arg(status);
_webView->page()->mainFrame()->evaluateJavaScript(code);
}
void ndgui::addInterface(const QString &ifName) {
if (ifName == "")
return;
qDebug() << _tag << "call addInterface";
_manConfList.append(ifName);
QString code = QString("addInterface('\%1')").arg(ifName);
_webView->page()->mainFrame()->evaluateJavaScript(code);
}
void ndgui::notifyCall(QString msg){
qDebug() << _tag << "------ called:" << msg;
}