summaryrefslogtreecommitdiffstats
path: root/src/main.cpp
diff options
context:
space:
mode:
authorJan Darmochwal2010-07-13 17:55:06 +0200
committerJan Darmochwal2010-07-13 17:55:06 +0200
commitf29300c556e541f2bf1b63ed8c6399a6c2044c8d (patch)
tree4a549ef967177e82e6b20536f9484e8461893c7b /src/main.cpp
parentinitial qt4 version (diff)
downloadvmchooser-f29300c556e541f2bf1b63ed8c6399a6c2044c8d.tar.gz
vmchooser-f29300c556e541f2bf1b63ed8c6399a6c2044c8d.tar.xz
vmchooser-f29300c556e541f2bf1b63ed8c6399a6c2044c8d.zip
qmake -> cmake; (mostly) cosmetic changes
Switched to cmake: CMakeLists.txt in base directory use ./build.sh to build vmchooser (or mkdir -p build; cd build cmake .. && make) updated README removed fltk/ removed libxml2/ removed mesgdisp/ renamed vmchooser/ to src/ moved all header files (.h) from vmchooser/inc/ to src/ added files to repository that must have slipped the last time
Diffstat (limited to 'src/main.cpp')
-rw-r--r--src/main.cpp214
1 files changed, 214 insertions, 0 deletions
diff --git a/src/main.cpp b/src/main.cpp
new file mode 100644
index 0000000..452bb89
--- /dev/null
+++ b/src/main.cpp
@@ -0,0 +1,214 @@
+#include <QtGui/QApplication>
+#include "dialog.h"
+
+#include <iostream>
+#include <stdlib.h>
+#include "DataEntry.h"
+#include "functions.h"
+#include "anyoption.h"
+#include "paths.h"
+
+#include <libxml/parser.h>
+#include <libxml/tree.h>
+#include <libxml/xpath.h>
+
+#include <boost/filesystem.hpp>
+
+namespace bfs=boost::filesystem;
+
+using namespace std;
+
+// defined in readXmlDir.h
+extern DataEntry* get_entry(xmlDoc * doc);
+
+int main(int argc, char *argv[]) {
+ string version = "0.0.13";
+ AnyOption* opt = new AnyOption();
+ char* xmlpath = NULL;
+ char* lsesspath = NULL;
+ char* dsession = NULL;
+ int width=0, height=0;
+
+ //opt->setVerbose();
+ opt->autoUsagePrint(false);
+
+ opt->addUsage("");
+ opt->addUsage("SessionChooser Usage: vmchooser [OPTS|image.xml]");
+ opt->addUsage("\t{-d |--default=} name of session to select (part of)");
+ opt->addUsage("\t{-p |--path=} path to vmware (.xml) files");
+ opt->addUsage("\t{-l |--lpath=} path to linux session (.desktop) files");
+ opt->addUsage("\t{-s |--size=} [widthxheight]");
+ opt->addUsage("\t{-v |--version} print out version");
+ opt->addUsage("\t{-h |--help} prints help");
+ opt->addUsage("");
+ opt->addUsage("Run with xml-file as additional argument to start image at once.");
+
+ opt->setFlag("help",'h');
+ opt->setFlag("version",'v');
+ opt->setOption("default", 'd');
+ opt->setOption("path", 'p');
+ opt->setOption("lpath", 'l');
+ opt->setOption("size",'s');
+
+ opt->processCommandArgs(argc, argv);
+
+ /** HELP */
+ if(opt->getFlag("help") || opt->getFlag('h')) {
+ opt->printUsage();
+ return 0;
+ }
+
+ /**
+ * XML - PATH
+ *
+ * 1. read from stage3.conf
+ * 2. option -p
+ * 3. option --path
+ * 4. default value "/var/lib/virt/vmware/"
+ *
+ **/
+
+ ifstream ifs (
+ string(VMCHOOSER_ETC_BASE_PATH).append("vmchooser.conf").c_str(),
+ ifstream::in
+ );
+ if(ifs) {
+ int n = 255;
+ char buf[n];
+ string s = "";
+ while(!ifs.eof()) {
+ ifs.getline(buf, n);
+ s = buf;
+ if(s.substr(0,17) == "vmchooser_xmlpath") {
+ xmlpath = (char*)strdup(s.substr(19,s.length()-20).append("/").c_str());
+ }
+ }
+
+ }
+
+ if(opt->getValue('d')!=NULL) {
+ dsession = opt->getValue('d');
+ }
+
+ if(opt->getValue("default")!= NULL) {
+ dsession = opt->getValue("default");
+ }
+
+ if(opt->getValue('p')!=NULL) {
+ xmlpath = opt->getValue('p');
+ }
+
+ if(opt->getValue("path")!= NULL) {
+ xmlpath = opt->getValue("path");
+ }
+
+ if (xmlpath == NULL) {
+ // Default Path comes here
+ xmlpath = (char *) VMCHOOSER_VMPATH;
+ }
+
+ /* VERSION */
+ if(opt->getFlag('v') || opt->getFlag("version")) {
+ // just print out version information - helps testing
+ cout << "virtual machine chooser " << version << endl;
+ delete opt;
+ return 0;
+
+ }
+
+ /** LINUX SESSION PATH */
+ if(opt->getValue('l')!=NULL) {
+ lsesspath = opt->getValue('l');
+ }
+ if(opt->getValue("lpath")!= NULL) {
+ lsesspath = opt->getValue("lpath");
+ }
+ if (lsesspath == NULL) {
+ lsesspath = (char *) "/usr/share/xsessions/";
+ }
+
+ /** Size of Window */
+ string size;
+ unsigned int i;
+
+ if(opt->getValue('s')!=NULL) {
+ size = opt->getValue('s');
+ }
+ if(opt->getValue("size")!= NULL) {
+ size = opt->getValue("size");
+ }
+
+ if (size.empty()) {
+ width = 500;
+ height = 550;
+ }
+ else {
+ i = size.find_first_of("x");
+ if( i == string::npos) {
+ cerr << "Please write <width>x<height> as argument for -s|--size." << endl;
+ return 1;
+ }
+ height = atoi(size.substr(i+1).c_str());
+ width = atoi(size.substr(0, size.size()-i).c_str());
+ }
+
+
+ // additional xml argument -> start image directly
+ if(opt->getArgc() > 0) {
+ string single_arg = opt->getArgv(0);
+ if(bfs::is_directory(single_arg)) {
+ fprintf(stderr, "Only argument is a folder, should be a valid xml file!\n");
+ return 1;
+ }
+ // read xml image
+ xmlDoc* doc = xmlReadFile(single_arg.c_str(), NULL, XML_PARSE_RECOVER);
+ if (doc == NULL) {
+ fprintf(stderr, "Error: could not parse file %s\n", single_arg.c_str());
+ return 1;
+ }
+
+ DataEntry* result = get_entry(doc);
+ if(result) {
+ runImage(*result, single_arg );
+ }
+ else {
+ fprintf(stderr, "Error: can not start image from xml\n\tcheck your <active> setting!\n");
+ return 1;
+ }
+ }
+
+ delete opt;
+
+ /* read xml files */
+ std::vector<DataEntry> sessions;
+ std::vector<DataEntry> lsessions;
+printf("dummy\n");
+ sessions = readXmlDir(xmlpath);
+printf("dummy2\n");
+ lsessions = readLinSess(lsesspath);
+printf("dummy3\n");
+
+printf ("%d sessions\n", sessions.size());
+printf ("%d lsessions\n", lsessions.size());
+
+ bool lin_entries=false;
+ bool vm_entries=false;
+
+ if(lsessions.size()) {
+ //win.set_lin_entries(lsessions);
+ lin_entries = true;
+ }
+ if (sessions.size()) {
+ //win.set_entries(sessions);
+ vm_entries = true;
+ }
+
+ sessions.insert(sessions.begin(), lsessions.begin(), lsessions.end());
+
+ QApplication a(argc, argv);
+ Dialog w;
+ w.addItems(sessions);
+ w.show();
+ return a.exec();
+}
+