#include "fbgui.h" #include "loggerEngine.h" #include "downloadManager.h" #include "javascriptInterface.h" #include #include #include QUrl baseURL(DEFAULT_URL); QString binPath(""); QString downloadPath("/tmp/fbgui/downloads"); int updateInterval = DEFAULT_UPDATE_INTERVAL; int debugMode = -1; //------------------------------------------------------------------------------------------- fbgui::fbgui(){ /* setup basic debug */ qxtLog->disableLoggerEngine("DEFAULT"); qxtLog->enableLogLevels(QxtLogger::DebugLevel); if (debugMode == 0){ qxtLog->addLoggerEngine("std_logger", new loggerEngine_std); qxtLog->initLoggerEngine("std_logger"); qxtLog->setMinimumLevel("std_logger", QxtLogger::DebugLevel); qxtLog->debug() << "Initializing fbgui..."; } /* base of the gui */ createActions(); checkHost(); _webView = new QWebView(this); _webView->load(baseURL); /* debug console split or normal browser */ if (debugMode == 1) setupDebugSplit(); else setCentralWidget(_webView); /* initialize javascript interface */ javascriptInterface* jsi = new javascriptInterface(_webView->page()->mainFrame()); QObject::connect(jsi, SIGNAL(quitFbgui()), this, SLOT(close())); QObject::connect(_webView->page()->mainFrame(), SIGNAL(javaScriptWindowObjectCleared()), jsi, SLOT(attachToDOM())); /* initialize download manager */ downloadManager* dm = new downloadManager(); QObject::connect(dm, SIGNAL(downloadInfo(QString, double)), jsi, SLOT(downloadInfo(QString, double))); QObject::connect(dm, SIGNAL(notify(QString)), jsi, SLOT(notify(QString))); QObject::connect(jsi, SIGNAL(requestFile(QString&)), dm, SLOT(downloadFile(QString&))); QObject::connect(dm, SIGNAL(updateProgress(int, double, QString)), jsi, SLOT(updateProgressBar(int, double, QString))); QObject::connect(dm, SIGNAL(downloadQueueEmpty()), jsi, SLOT(callbackOnDlQueueFinished())); /* set properties */ setWindowTitle("fbgui"); setAttribute(Qt::WA_QuitOnClose, true); setWindowFlags(Qt::FramelessWindowHint); showFullScreen(); } //------------------------------------------------------------------------------------------- void fbgui::createActions(){ /* CTRL + X to kill the gui */ _quit = new QAction(tr("&quit"), this); _quit->setShortcut(QKeySequence(Qt::CTRL + Qt::Key_X)); this->addAction(_quit); connect(_quit, SIGNAL(triggered()), this, SLOT(close())); } //------------------------------------------------------------------------------------------- void fbgui::setupDebugSplit(){ _debugConsole = new QTextEdit(this); _debugConsole->setWindowFlags(Qt::FramelessWindowHint); QPalette pal; pal.setColor(QPalette::Base, Qt::black); _debugConsole->setPalette(pal); _debugConsole->setTextColor(Qt::cyan); _debugConsole->insertPlainText("Debug console initialized.\n"); /* enable custom logger engine */ qxtLog->addLoggerEngine("fb_logger", new loggerEngine_fb(_debugConsole)); qxtLog->initLoggerEngine("fb_logger"); qxtLog->setMinimumLevel("fb_logger", QxtLogger::DebugLevel); /* display browser and debug in a splitter */ _splitter = new QSplitter(Qt::Vertical, this); _splitter->addWidget(_webView); _splitter->addWidget(_debugConsole); /* CTRL + D toggles debug window */ _toggleDebug = new QAction(tr("&toggleDebug"), this); _toggleDebug->setShortcut(QKeySequence(Qt::CTRL + Qt::Key_D)); addAction(_toggleDebug); connect(_toggleDebug, SIGNAL(triggered()), this, SLOT(toggleDebug())); setCentralWidget(_splitter); } //------------------------------------------------------------------------------------------- void fbgui::toggleDebug(){ if (_debugConsole->isVisible()) _debugConsole->hide(); else _debugConsole->show(); } //------------------------------------------------------------------------------------------- void fbgui::checkHost() const{ // TODO instead of closing app, show error page from qrc QHostInfo hostInfo = QHostInfo::fromName(baseURL.host()); if (hostInfo.error() != QHostInfo::NoError){ qxtLog->debug() << "Lookup of " << baseURL.host() << "failed. Exiting..."; exit(EXIT_FAILURE); } }