blob: b4806356c7e14bdbed7054b83eeda2e819cf444f (
plain) (
tree)
|
|
#include "fbgui.h"
#include "javascriptinterface.h"
#include "sysinfo.h"
//-------------------------------------------------------------------------------------------------------
// Initialisation
//-------------------------------------------------------------------------------------------------------
/**
* A constructor.
*
* @param parent
* Is of type QWebFrame.
*/
JavascriptInterface::JavascriptInterface(QWebFrame *parent) {
qxtLog->debug() << "Initializing javascript interface...";
_parent = parent;
}
//-------------------------------------------------------------------------------------------------------
/**
* An empty destructor.
*/
JavascriptInterface::~JavascriptInterface() { /* destructor dummy */
}
//-------------------------------------------------------------------------------------------------------
/**
* Attaches an instance of this class to the DOM of the HTML page.
*
* Attaches an instance of this class to the DOM of the HTML page.
* This enables the possibility to call slots/methods of this class in
* JavaScript functions of HTML page. It also calls the
* JavascriptInterface::loadJQuery() method.
*
* @see JavascriptInterface::loadJQuery()
*/
void JavascriptInterface::attachToDOM() {
_parent->addToJavaScriptWindowObject(QString("fbgui"), this);
loadJQuery();
}
//-------------------------------------------------------------------------------------------------------
/**
* This method load the required jQuery libraries into the HTML page.
*
* This method load the required jQuery libraries into the HTML page.
* The libraries are contained in the fbgui.qrc file.
* The Path to the files is: ":/html/js".
* Each library will be read and loaded into the HTML page via
* the evaluateJavaScript() method.
*
* @see JavascriptInterface::attachToDOM()
*/
void JavascriptInterface::loadJQuery() {
QString js;
QString pathToJsDir(DEFAULT_QRC_HTML_DIR);
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") {
QFile file;
file.setFileName(pathToJsDir + "/" + fi.fileName());
file.open(QIODevice::ReadOnly);
js = file.readAll();
file.close();
_parent->evaluateJavaScript(js);
//qxtLog->debug() << "evaluated " + fi.fileName();
}
}
}
}
//-------------------------------------------------------------------------------------------------------
// Javascript functions for webpage
//-------------------------------------------------------------------------------------------------------
/**
* This method start a download.
*
* This method start a download.
* Can be called from inside a JavaScript function of the HTML page.
* Emits the JavascriptInterface::requestFile(const QString) signal.
*/
void JavascriptInterface::startDownload(const QString& filename) {
// ignore if empty filename
if (filename.isEmpty()) {
_parent->evaluateJavaScript("alert(\"No filename!\")");
return;
}
emit requestFile(filename);
}
//-------------------------------------------------------------------------------------------------------
/**
* This method start a download.
*
* This method start a download.
* Can be called from inside a JavaScript function of the HTML page.
*
* @todo add some more informations
*/
void JavascriptInterface::setCallbackOnFinished(const QString& function) {
qxtLog->debug() << "[jsi] Callback set: " << function;
_callbackOnDownloadsFinished = QString(function);
}
//-------------------------------------------------------------------------------------------------------
/**
* This method delivers system informations.
*
* This method delivers system informations. Type of informations, are defined by
* the parameter. The output of this method depends on the parameter.
* Can be called from inside a JavaScript function of the HTML page.
*
* @param infoName
* Is of type QString. Defines which method will be called. Possible values are:
* - mac
* - ip
* - mbserial
* - usb
*
* @return QString
* the output of the called method or "info_error" if an error occurred
* (e. g. invalid parameter).
*
* @see SysInfo::getInfo(const QString& infoName)
*/
const QString JavascriptInterface::getSysInfo(const QString& info) {
SysInfo si;
return si.getInfo(info);
}
//-------------------------------------------------------------------------------------------------------
/**
* This method quits the whole program.
*
* This method quits the whole program.
* Can be called from inside a JavaScript function of the HTML page.
* Emits JavascriptInterface::quitFbgui() signal
*/
void JavascriptInterface::quit() {
emit quitFbgui();
}
//-------------------------------------------------------------------------------------------------------
/**
* This method performs a shutdown of the client.
*
* This method performs a shutdown of the client.
* Emits the JavascriptInterface::shutDownClient() signal.It is
* connected with the fbgui::performShutDown() method.
*
* @see fbgui::performShutDown()
*/
void JavascriptInterface::shutDown() {
emit shutDownClient();
}
//-------------------------------------------------------------------------------------------------------
/**
* This method performs a reboot of the client.
*
* This method performs a reboot of the client.
* Emits the JavascriptInterface::rebootClient() signal. It is
* connected with the fbgui::performReboot() method.
*
* @see fbgui::performReboot()
*/
void JavascriptInterface::reboot() {
emit rebootClient();
}
//-------------------------------------------------------------------------------------------------------
// Download Manager information exchange
//-------------------------------------------------------------------------------------------------------
/**
* This method delivers some informations about the downloading file.
*
* This method delivers some informations about the downloading file.
*
* @todo add some more informations
*/
void JavascriptInterface::downloadInfo(const QString& filename, const double& filesize) {
QString code = QString("downloadInfo('\%1', \%2)").arg(filename).arg(filesize);
_parent->evaluateJavaScript(code);
}
//-------------------------------------------------------------------------------------------------------
/**
* This method updates the progress bar.
*
* This method updates the progress bar of the HTML page when an download
* happens.
*
* @todo add some more informations
*/
void JavascriptInterface::updateProgressBar(const int& percent, const double& speed,
const QString& unit) {
if (percent == 0)
return;
QString code = QString("updateProgress(\%1, \%2, '\%3')").arg(percent).arg(speed).arg(unit);
_parent->evaluateJavaScript(code);
}
//-------------------------------------------------------------------------------------------------------
/**
* This method sends notifications.
*
* @todo add some more informations.
*/
void JavascriptInterface::notify(const QString& msg) {
qxtLog->debug() << "[jsi] Notifying: " << msg;
QString code = QString("notify('\%1')").arg(msg);
_parent->evaluateJavaScript(code);
}
//-------------------------------------------------------------------------------------------------------
/**
* @todo add some more informations
*/
void JavascriptInterface::callbackOnFinished() {
QString code = QString("\%1").arg(_callbackOnDownloadsFinished);
_parent->evaluateJavaScript(code);
}
//-------------------------------------------------------------------------------------------------------
//-------------------------------------------------------------------------------------------------------
/**
* This method triggers the arriving of the IP address *FOR TESTING PURPOSES*
*
* Used for testing. This method triggers the arriving of the IP address.
* Not needed in the final version since the here simulated event will be
* fired automaticali by the udhcpc command.
* This methods writes some data into a specific file. This file is watched by an
* other process which will fire an event as soon as the file changes.
*
* @see fbgui::watchForTrigger()
* @see fbgui::checkForTrigger(const QString& dirname)
* @see bool fbgui::checkHost()
* @see void fbgui::loadURL()
*/
void JavascriptInterface::trigger() {
QFile file(fileToTriggerURL);
if (file.open(QIODevice::WriteOnly)) {
file.write("data\n");
qxtLog->debug() << "[jsi] *trigger watcher*";
}
file.close();
}
//-------------------------------------------------------------------------------------------------------
void JavascriptInterface::alert(const QString& message) {
// expects a formatted message.
_parent->evaluateJavaScript(QString("alert(").append(message));
}
|