summaryrefslogblamecommitdiffstats
path: root/src/main.cpp
blob: a6dc1b27b88407875841129553236a555ff33914 (plain) (tree)
1
2
3
4
5
6
7
8
9
10
                       
                    





                   

                









                                                                                                             



                                



                                                              
 


                                                        
 










































                                                                               
 

                                    
 



                                                          
 
















                                                                            
 


                                                                         
 









                                                                            
 








                                                                                               
 

                                                                                           
         
                                                      
 






                                                                                             

                              

                                                                




                                                                                              
                                                                              
                                                                  




                                                                      
                                                                  

                      


                          
 
#include <QApplication>
#include <QSettings>
#include <QtCore>
#include <getopt.h>
#include <cstdlib>
#include <iostream>
#include "fbgui.h"

void printHelp()
{
	QTextStream qout(stdout);
	qout << QObject::tr("Usage: ./fbgui [OPTIONS]") << endl;
	qout << QObject::tr("Options:") << endl;
	qout << "-u <URL>, --url=<URL>           " << QObject::tr("Set which URL to load.") << endl;
	qout << "-d <dir>, --download=<dir>      " << QObject::tr("Specify the download directory.") << endl;
	qout << "-c <path>, --config=<path>      " << QObject::tr("Path to config file.") << endl;
	qout << "-D <level>, --debug=<level>     " << QObject::tr("Activate debug mode.") << endl;
	qout << "-h, --help                      " << QObject::tr("Prints usage information.") << endl;
	qout.flush();
	exit(EXIT_SUCCESS);
}

int main(int argc, char *argv[])
{
	QApplication app(argc, argv, QApplication::GuiServer);
	app.setOrganizationName("team_projekt_2011");
	app.setApplicationName("prebootGUI");
	binPath = QApplication::applicationDirPath();

	QTranslator translator;
	translator.load(":" + QLocale::system().name());
	app.installTranslator(&translator);

	// parse command line arguments
	QMap<QString, QString> clOpts;
	int longIndex = 0;
	static const char *optString = "c:u:d:s:t:D:h";
	static const struct option longOpts[] =
	{
			{"config", required_argument, NULL, 'c'},
			{"url", required_argument, NULL, 'u'},
			{"download", required_argument, NULL, 'd'},
			{"serial", required_argument, NULL, 's'},
			{"trigger", required_argument, NULL, 't'},
			{"debug", required_argument, NULL, 'D'},
			{"help", no_argument, NULL, 'h'}
	};
	int opt = getopt_long(argc, argv, optString, longOpts, &longIndex);
	while (opt != -1)
	{
		switch(opt)
		{
			case 'c':
				clOpts.insert("configFile", optarg);
				break;
			case 'u':
				clOpts.insert("url", optarg);
				break;
			case 'd':
				clOpts.insert("downloadDir", optarg);
				break;
			case 's':
				clOpts.insert("serialLocation", optarg);
				break;
			case 't':
				clOpts.insert("trigger", optarg);
				break;
			case 'D':
				clOpts.insert("debug", optarg);
				break;
			case 'h':
				clOpts.insert("help", "help");
				break;
		}
		opt = getopt_long(argc, argv, optString, longOpts, &longIndex);
	}

	if (clOpts.contains("help"))
		printHelp();

	if (clOpts.contains("debug"))
		debugMode = clOpts.value("debug").toInt();
	else
		debugMode = -1;

	// look for config file
	QString configFilePath;
	QFileInfo confInfo;
	if (clOpts.contains("configFile"))
		configFilePath = clOpts.value("configFile");
	else {
		confInfo = QFileInfo(QDir::home(),  ".fbgui.conf");
		if (confInfo.exists())
			configFilePath = confInfo.absoluteFilePath();
		else {
			confInfo = QFileInfo(QString("/etc/fbgui.conf"));
			if (confInfo.exists())
				configFilePath = QString("/etc/fbgui.conf");
			else
				configFilePath = DEFAULT_CONFIG_PATH;
		}
	}

	// read the config file
	QSettings confFileSettings(configFilePath, QSettings::IniFormat);
	confFileSettings.setIniCodec("UTF-8");

	// set base URL to be loaded
	if (clOpts.contains("url")) {
		baseURL = QUrl(clOpts.value("url"));
	}
	else if (confFileSettings.contains("default/pbs_url")) {
		baseURL = confFileSettings.value("default/pbs_url").toUrl();
	}
	else {
		baseURL = DEFAULT_URL;
	}

	// set directory for downloads
	if (clOpts.contains("downloadDir")){
		downloadPath = clOpts.value("downloadDir");
	}
	else if (confFileSettings.contains("default/download_directory")){
		downloadPath = confFileSettings.value("default/download_directory").toString();
	}
	else
		downloadPath = DEFAULT_DOWNLOAD_DIR;

	if (confFileSettings.contains("default/update_interval")){
		updateInterval = confFileSettings.value("default/update_interval").toInt();
	}
	else updateInterval = DEFAULT_UPDATE_INTERVAL;

	// sets which file to watch to trigger loading of URL
	if (clOpts.contains("trigger"))
		fileToTriggerURL = clOpts.value("trigger");
	else if (confFileSettings.contains("default/file_trigger"))
		fileToTriggerURL = confFileSettings.value("default/file_trigger").toString();
	else
		fileToTriggerURL = DEFAULT_FILE_TRIGGER;

	// set serial location
	if (clOpts.contains("serialLocation"))
		serialLocation = clOpts.value("serialLocation");
	else if (confFileSettings.contains("default/serial_location"))
		serialLocation = confFileSettings.value("default/serial_location").toString();
	else
		serialLocation = QString("/serial");

	// basic std out engine is ugly... not yet initialised so using qDebug
	qDebug() << "*************   CONFIG INFO   *************";
	qDebug() << "configFilePath: " << configFilePath.toUtf8();
	qDebug() << "baseURL:        " << baseURL.toString().toUtf8();
	qDebug() << "downloadDir :   " << downloadPath.toUtf8();
	qDebug() << "trigger:        " << fileToTriggerURL.toUtf8();
	qDebug() << "serialLocation: " << serialLocation.toUtf8();
	qDebug() << "*******************************************";

	// start fbgui
	fbgui gui;
	gui.show();
	return app.exec();
}