summaryrefslogtreecommitdiffstats
path: root/src/fbgui/javascriptinterface.cpp
diff options
context:
space:
mode:
authorNiklas Goby2011-11-23 11:56:19 +0100
committerNiklas Goby2011-11-23 11:56:19 +0100
commitc0b6b199a9878bc1e95907200501211c09c1e66c (patch)
tree0079c34c6536e5f1d0414aebde1793db60a78f35 /src/fbgui/javascriptinterface.cpp
parentdeleted the NetworkDiscovery and UnixDomainSocketServer folder (diff)
downloadfbgui-c0b6b199a9878bc1e95907200501211c09c1e66c.tar.gz
fbgui-c0b6b199a9878bc1e95907200501211c09c1e66c.tar.xz
fbgui-c0b6b199a9878bc1e95907200501211c09c1e66c.zip
created modules
Diffstat (limited to 'src/fbgui/javascriptinterface.cpp')
-rw-r--r--src/fbgui/javascriptinterface.cpp235
1 files changed, 235 insertions, 0 deletions
diff --git a/src/fbgui/javascriptinterface.cpp b/src/fbgui/javascriptinterface.cpp
new file mode 100644
index 0000000..b45a2f9
--- /dev/null
+++ b/src/fbgui/javascriptinterface.cpp
@@ -0,0 +1,235 @@
+#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() {
+ // to test if this actually works...
+ 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 calls a Javascript function to update the progress bar of the download.
+ * Javascript must have a function called "updateProgress" to receive this information.
+ *
+ * @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 out messages to Javascript. A corresponding function must be implemented
+ * on the webpage to receive these.
+ */
+void JavascriptInterface::notify(const QString& msg) {
+ qxtLog->debug() << "[jsi] Notifying: " << msg;
+ QString code = QString("notify('\%1')").arg(msg);
+ _parent->evaluateJavaScript(code);
+}
+//-------------------------------------------------------------------------------------------------------
+/**
+ * Sets a callback function for when downloads are finished (will be called when the queue is empty).
+ */
+void JavascriptInterface::callbackOnFinished() {
+ QString code = QString("\%1").arg(_callbackOnDownloadsFinished);
+ _parent->evaluateJavaScript(code);
+}
+//-------------------------------------------------------------------------------------------------------
+/**
+ * This method triggers the URL load *FOR DEBUGGING/TESTING PURPOSES*
+
+ */
+void JavascriptInterface::trigger() {
+ QFile file(fileToTriggerURL);
+ if (file.open(QIODevice::WriteOnly)) {
+ file.write("data\n");
+ qxtLog->debug() << "[jsi] *trigger watcher*";
+ }
+ file.close();
+}