From fc48e4b44760d0bb432a238e4c1b986062a91311 Mon Sep 17 00:00:00 2001 From: Nils Schwabe Date: Fri, 4 Apr 2014 15:00:58 +0200 Subject: removed addPrinters() and addScanners introduced "change the run-virt.sh path" in cmd line and config file --- src/main.cpp | 443 ++++++++++++++++++++++++++++++----------------------------- 1 file changed, 226 insertions(+), 217 deletions(-) (limited to 'src/main.cpp') diff --git a/src/main.cpp b/src/main.cpp index d55f01c..e646620 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -21,221 +21,230 @@ #include "choosersettings.h" int main(int argc, char *argv[]) { - QApplication a(argc, argv); - - QTranslator translator; - translator.load(":" + QLocale::system().name()); - a.installTranslator(&translator); - - CommandLineOptions cmdOptions(argc, argv); - - std::string usage(a.translate( - "Console", - "Usage: vmchooser [ OPTIONS ]\n\n" - " -d, --default name of default session\n" - " -c, --config alternative config file\n" - " -e, --env name of the environment\n" - " -f, --file direct boot .desktop file\n" - " -x, --xpath path of X Session .desktop files\n" - " -u, --url url of vmware .xml file\n" - " -s, --size window size x\n" - " -t, --theme theme\n" - " -b, --pvs show pvs options\n" - " -D, --debug print debug information\n" - " -v, --version print version and exit\n" - " -h, --help print usage information and exit\n" - "\nFILE can be a vmware .xml or an X .desktop file\n") - .toUtf8().data()); - - if (cmdOptions.contains("error")) { - std::cerr << usage; - return EXIT_FAILURE; - } - - if (cmdOptions.contains("usage")) { - std::cout << usage; - return EXIT_SUCCESS; - } - - if (cmdOptions.contains("version")) { - std::cout << "vmchooser " << VMCHOOSER_VERSION << std::endl; - return EXIT_SUCCESS; - } - - if (cmdOptions.contains("file")) { - QString file(cmdOptions.value("file")); - - if (file.endsWith(".desktop")) { - XSession s; - if (s.init(file) && s.run()) { - return EXIT_SUCCESS; - } - std::cerr << a.translate( - "Console", - "vmchooser: failed to run session").toUtf8().data() << - std::endl; - return EXIT_FAILURE; - } else { - std::cerr << a.translate( - "Console", - "vmchooser: invalid session file").toUtf8().data() << - std::endl; - return EXIT_FAILURE; - } - } - - // read configuration file: - // file supplied as command line option or - // user vmchooser.conf or - // global vmchooser.conf - QString confFile; - if (cmdOptions.contains("config")) { - confFile = cmdOptions.value("config"); - } else if (QFileInfo(userConfFile).exists()) { - confFile = userConfFile; - } else { - confFile = globalConfFile; - } - QSettings settings(confFile, QSettings::IniFormat); - settings.setIniCodec("UTF-8"); - - QString defaultSession; - if (cmdOptions.contains("default")) { - defaultSession = cmdOptions.value("default"); - } else if (settings.contains("default")) { - defaultSession = settings.value("default").toString(); - } else { - defaultSession = ChooserSettings::getSetting("last-session"); - } - - if (cmdOptions.contains("path")) { - vSessionPath = cmdOptions.value("path"); - } else if (settings.contains("path")) { - vSessionPath = settings.value("path").toString(); - } // else keep default path - - if (cmdOptions.contains("xpath")) { - xSessionPath = cmdOptions.value("xpath"); - } else if (settings.contains("xpath")) { - xSessionPath = settings.value("xpath").toString(); - } // else keep default path - - if (cmdOptions.contains("url")) { - urlBase = cmdOptions.value("url"); - } else if (settings.contains("url")) { - urlBase = settings.value("url").toString(); - } else { - std::cerr << a.translate("Console", "vmchooser: no URL given").toUtf8().data() << std::endl; - return EXIT_FAILURE; - } - - /* PARSE URL */ - if (!urlBase.startsWith("http://")) { - std::cerr << a.translate("Console", "vmchooser: invalid URL").toUtf8().data() << std::endl; - return EXIT_FAILURE; - } else { - if (!urlBase.endsWith("/")) { - urlBase += "/"; - } - } - - QString size; - if (cmdOptions.contains("size")) { - size = cmdOptions.value("size"); - } else if (settings.contains("size")) { - size = settings.value("size").toString(); - } - - int width, height; - QRegExp rx("^(\\d+)x(\\d+)$"); - if (rx.indexIn(size) != -1) { - QStringList list = rx.capturedTexts(); - width = list.value(1).toInt(); - height = list.value(2).toInt(); - } else if (!size.isEmpty()) { - std::cerr << a.translate( - "Console", - "vmchooser: invalid size argument").toUtf8().data() - << std::endl; - return EXIT_FAILURE; - } else { - width = VMCHOOSER_DEFAULT_WIDTH; - height = VMCHOOSER_DEFAULT_HEIGHT; - } - - if (cmdOptions.contains("env")) { - pool = cmdOptions.value("env"); - } else if (settings.contains("pool")) { - pool = settings.value("pool").toString(); - } - - if (cmdOptions.contains("theme")) { - theme = cmdOptions.value("theme"); - } else if (settings.contains("theme")) { - theme = settings.value("theme").toString(); - } - - if (cmdOptions.contains("debugMode")) { - debugMode = true; - } - - /* read session files */ - QList xsessions(XSession::readSessions(xSessionPath)); - - Dialog w; - - /* DOWNLOAD VSESSIONS */ - HttpXmlDownloader httpxmldownloader; - httpxmldownloader.connectSlot(&w, SLOT(addSessionsAfterDownload(QNetworkReply*))); - - // read xml and add items later - httpxmldownloader.makeRequest(urlBase + "list.php"); - - /* DOWNLOAD NEWS */ - HttpXmlDownloader news_downloader; - news_downloader.connectSlot(&w, SLOT(addNewsAfterDownload(QNetworkReply*))); - news_downloader.makeRequest(urlBase + "news.php"); - - /* DOWNLOAD HELP-SECTION */ - HttpXmlDownloader help_downloader; - help_downloader.connectSlot(&w, SLOT(addHelpAfterDownload(QNetworkReply*))); - help_downloader.makeRequest(urlBase + "help.php"); - - w.setTheme(); - - w.setWindowFlags(Qt::FramelessWindowHint); - if (cmdOptions.contains("pvs")) { - pvsEnabled = true; - } else if (settings.contains("pvs")) { - if (settings.value("pvs").toInt() == 1) - pvsEnabled = true; - } - - if ( pvsEnabled ) - w.showSettingsPVS(); - - w.resize(width, height); - - if (xsessions.size()) { - qSort(xsessions.begin(), xsessions.end(), myLessThan); - w.addItems(xsessions, 0); - } - - w.addLabelItem(a.translate("Dialog", "Loading..."), 1); - - QSettings SLXsettings(OPENSLXCONFIG, QSettings::NativeFormat); - if ( SLXsettings.contains("SLX_BENCHMARK_VM") ) { - QString vm = SLXsettings.value("SLX_BENCHMARK_VM").toString(); - vm.remove('\''); - w.startSession(vm); - } - w.show(); - - // center dialog on primary screen - QRect desktopRect = QApplication::desktop()->availableGeometry(&w); - QPoint center = desktopRect.center(); - w.move(center.x()-w.width()*0.5, center.y()-w.height()*0.5); - a.setActiveWindow(&w); - - return a.exec(); + QApplication a(argc, argv); + + QTranslator translator; + translator.load(":" + QLocale::system().name()); + a.installTranslator(&translator); + + CommandLineOptions cmdOptions(argc, argv); + + std::string usage( + a.translate("Console", "Usage: vmchooser [ OPTIONS ]\n\n" + " -d, --default name of default session\n" + " -c, --config alternative config file\n" + " -e, --env name of the environment\n" + " -f, --file direct boot .desktop file\n" + " -x, --xpath path of X Session .desktop files\n" + " -u, --url url of vmware .xml file\n" + " -s, --size window size x\n" + " -t, --theme theme\n" + " -b, --pvs show pvs options\n" + " -D, --debug print debug information\n" + " -v, --version print version and exit\n" + " -h, --help print usage information and exit\n" + " -S, --runscript change path to run-virt.sh\n" + "\nFILE can be a vmware .xml or an X .desktop file\n").toUtf8().data()); + + if (cmdOptions.contains("error")) { + std::cerr << usage; + return EXIT_FAILURE; + } + + if (cmdOptions.contains("usage")) { + std::cout << usage; + return EXIT_SUCCESS; + } + + if (cmdOptions.contains("version")) { + std::cout << "vmchooser " << VMCHOOSER_VERSION << std::endl; + return EXIT_SUCCESS; + } + + if (cmdOptions.contains("file")) { + QString file(cmdOptions.value("file")); + + if (file.endsWith(".desktop")) { + XSession s; + if (s.init(file) && s.run()) { + return EXIT_SUCCESS; + } + std::cerr + << a.translate("Console", + "vmchooser: failed to run session").toUtf8().data() + << std::endl; + return EXIT_FAILURE; + } else { + std::cerr + << a.translate("Console", "vmchooser: invalid session file").toUtf8().data() + << std::endl; + return EXIT_FAILURE; + } + } + + // read configuration file: + // file supplied as command line option or + // user vmchooser.conf or + // global vmchooser.conf + QString confFile; + if (cmdOptions.contains("config")) { + confFile = cmdOptions.value("config"); + } else if (QFileInfo(userConfFile).exists()) { + confFile = userConfFile; + } else { + confFile = globalConfFile; + } + QSettings settings(confFile, QSettings::IniFormat); + settings.setIniCodec("UTF-8"); + + QString defaultSession; + if (cmdOptions.contains("default")) { + defaultSession = cmdOptions.value("default"); + } else if (settings.contains("default")) { + defaultSession = settings.value("default").toString(); + } else { + defaultSession = ChooserSettings::getSetting("last-session"); + } + + if (cmdOptions.contains("path")) { + vSessionPath = cmdOptions.value("path"); + } else if (settings.contains("path")) { + vSessionPath = settings.value("path").toString(); + } // else keep default path + + if (cmdOptions.contains("xpath")) { + xSessionPath = cmdOptions.value("xpath"); + } else if (settings.contains("xpath")) { + xSessionPath = settings.value("xpath").toString(); + } // else keep default path + + if (cmdOptions.contains("url")) { + urlBase = cmdOptions.value("url"); + } else if (settings.contains("url")) { + urlBase = settings.value("url").toString(); + } else { + std::cerr + << a.translate("Console", "vmchooser: no URL given").toUtf8().data() + << std::endl; + return EXIT_FAILURE; + } + + // Change the runVmScript path + if (cmdOptions.contains("runscript")) { + runVmScript = cmdOptions.value("runscript"); + } else if (settings.contains("runscript")) { + runVmScript = settings.value("runscript").toString(); + } + + /* PARSE URL */ + if (!urlBase.startsWith("http://")) { + std::cerr + << a.translate("Console", "vmchooser: invalid URL").toUtf8().data() + << std::endl; + return EXIT_FAILURE; + } else { + if (!urlBase.endsWith("/")) { + urlBase += "/"; + } + } + + QString size; + if (cmdOptions.contains("size")) { + size = cmdOptions.value("size"); + } else if (settings.contains("size")) { + size = settings.value("size").toString(); + } + + int width, height; + QRegExp rx("^(\\d+)x(\\d+)$"); + if (rx.indexIn(size) != -1) { + QStringList list = rx.capturedTexts(); + width = list.value(1).toInt(); + height = list.value(2).toInt(); + } else if (!size.isEmpty()) { + std::cerr + << a.translate("Console", "vmchooser: invalid size argument").toUtf8().data() + << std::endl; + return EXIT_FAILURE; + } else { + width = VMCHOOSER_DEFAULT_WIDTH; + height = VMCHOOSER_DEFAULT_HEIGHT; + } + + if (cmdOptions.contains("env")) { + pool = cmdOptions.value("env"); + } else if (settings.contains("pool")) { + pool = settings.value("pool").toString(); + } + + if (cmdOptions.contains("theme")) { + theme = cmdOptions.value("theme"); + } else if (settings.contains("theme")) { + theme = settings.value("theme").toString(); + } + + if (cmdOptions.contains("debugMode")) { + debugMode = true; + } + + /* read session files */ + QList xsessions(XSession::readSessions(xSessionPath)); + + Dialog w; + + /* DOWNLOAD VSESSIONS */ + HttpXmlDownloader httpxmldownloader; + httpxmldownloader.connectSlot(&w, + SLOT(addSessionsAfterDownload(QNetworkReply*))); + + // read xml and add items later + httpxmldownloader.makeRequest(urlBase + "list.php"); + + /* DOWNLOAD NEWS */ + HttpXmlDownloader news_downloader; + news_downloader.connectSlot(&w, SLOT(addNewsAfterDownload(QNetworkReply*))); + news_downloader.makeRequest(urlBase + "news.php"); + + /* DOWNLOAD HELP-SECTION */ + HttpXmlDownloader help_downloader; + help_downloader.connectSlot(&w, SLOT(addHelpAfterDownload(QNetworkReply*))); + help_downloader.makeRequest(urlBase + "help.php"); + + w.setTheme(); + + w.setWindowFlags(Qt::FramelessWindowHint); + if (cmdOptions.contains("pvs")) { + pvsEnabled = true; + } else if (settings.contains("pvs")) { + if (settings.value("pvs").toInt() == 1) + pvsEnabled = true; + } + + if (pvsEnabled) + w.showSettingsPVS(); + + w.resize(width, height); + + if (xsessions.size()) { + qSort(xsessions.begin(), xsessions.end(), myLessThan); + w.addItems(xsessions, 0); + } + + w.addLabelItem(a.translate("Dialog", "Loading..."), 1); + + QSettings SLXsettings(OPENSLXCONFIG, QSettings::NativeFormat); + if (SLXsettings.contains("SLX_BENCHMARK_VM")) { + QString vm = SLXsettings.value("SLX_BENCHMARK_VM").toString(); + vm.remove('\''); + w.startSession(vm); + } + w.show(); + + // center dialog on primary screen + QRect desktopRect = QApplication::desktop()->availableGeometry(&w); + QPoint center = desktopRect.center(); + w.move(center.x() - w.width() * 0.5, center.y() - w.height() * 0.5); + a.setActiveWindow(&w); + + return a.exec(); } -- cgit v1.2.3-55-g7522