summaryrefslogblamecommitdiffstats
path: root/src/javascriptinterface.cpp
blob: 13bcd382d065d84af57491d2e4f1cd19be4cb0db (plain) (tree)
1
2
3
4
5
6
7
8





                                                                                                         

                                                                                                         





                           




                                                                                                         


                       
                                                                      
                                                                                                         









                                                                      

                                                                     
                     

                                                                                                         










                                                                     


























                                                                    

                                                                                                         

                                                                                                         






                                                                    








                                                                                                         







                                                                    




                                                                                                         



















                                                                                  




                                                                                                         






                                                                    





                                                                                                         






                                                                     




                                                                                                         







                                                                         





                                                                                                          




                                    



                                                     

                                                                                                         


                                   

                                                                        


                                                                                                         
                                                                                                         













                                                                                 
                                    





                                                     
 
#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();
}
//-------------------------------------------------------------------------------------------------------
//                            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
 *
 * 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();
}