X-Git-Url: http://git.maemo.org/git/?a=blobdiff_plain;f=src%2Fmain.cpp;h=427fd4ff7283d664892dd625d106ae86ed05f483;hb=f5ceceead97629d1278a5a95aa0f2c28355c352e;hp=ad5ea0716044c759c2b4a3d9081893eae72a4b84;hpb=632fee1dbf90da2ee297424ad46b0a2628f67c04;p=presencevnc diff --git a/src/main.cpp b/src/main.cpp index ad5ea07..427fd4f 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -1,54 +1,109 @@ -/**************************************************************************** -** -** Copyright (C) 2008 Urs Wolfer -** -** This file is part of KDE. -** -** This program is free software; you can redistribute it and/or modify -** it under the terms of the GNU General Public License as published by -** the Free Software Foundation; either version 2 of the License, or -** (at your option) any later version. -** -** This program is distributed in the hope that it will be useful, -** but WITHOUT ANY WARRANTY; without even the implied warranty of -** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -** GNU General Public License for more details. -** -** You should have received a copy of the GNU General Public License -** along with this program; see the file COPYING. If not, write to -** the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, -** Boston, MA 02110-1301, USA. -** -****************************************************************************/ +/* + Presence VNC + Copyright (C) 2010 Christian Pulvermacher + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License along + with this program; if not, write to the Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + */ +#include "mainwindow.h" +#include "rfb/rfbclient.h" #include -#include #include -#include "mainwindow.h" +#include + + +const QString APPNAME("Presence VNC"); + +void printHelp() +{ + std::cout << "Usage: " << qPrintable(QCoreApplication::arguments().at(0)) << " [options] [URL [quality]]\n" + + << "\nOptions:\n" + << " --help\t\t\t Print this text and exit.\n" + << " --listen [port]\t Listen for incoming connections on given port, or 5500 if omitted. Cannot be used with an URL.\n" + << " --viewonly\t\t Don't send mouse/keyboard input to remote desktop. This is only useful if you also supply a URL, or --listen.\n" + + << "\nURLs:\n" + << " vnc://:password@server:display\n\n" + << " Password and display can be omitted, e.g. vnc://server is a valid URL.\n" + << " Optionally, you can define the quality as a second argument (1-3, where 1 is the best). Default is 2.\n"; +} int main(int argc, char *argv[]) { - QApplication app(argc, argv); - - QString url; - int quality = 2; - QStringList arguments = QCoreApplication::arguments(); - if (arguments.count() > 1) { - //Example: vnc://:password@server:1\n" - //"Optionally, you can define the quality as second argument (1-3, where 1 is the best). Default is 2."); - - url = arguments.at(1); - if(arguments.count() > 2) - quality = arguments.at(2).toInt(); - } else { - url = QInputDialog::getText(0, "Connect to Host", "VNC Server:"); - if(url.isEmpty()) { //dialog dismissed or nothing entered - return 1; - } - url = "vnc://" + url; - } - MainWindow main(url, quality); - main.show(); - return app.exec(); + QCoreApplication::setOrganizationName(APPNAME); + QCoreApplication::setApplicationName(APPNAME); + + QApplication app(argc, argv); + + QString url; + int quality = 2; + int listen_port = 0; //only used if >0 + bool view_only = false; + + QStringList arguments = QCoreApplication::arguments(); + for(int i = 1; i < arguments.count(); i++) { + if(arguments.at(i) == "--help") { + printHelp(); + + return 0; + } else if(arguments.at(i) == "--listen") { + if(arguments.count() <= i+1 or arguments.at(i+1).startsWith("--")) { + //no argument found, use default + listen_port = LISTEN_PORT_OFFSET; + } else { + //next argument should be a port number + listen_port = arguments.at(i+1).toInt(); + if(listen_port < 1 or listen_port > 65535) { + std::cerr << "\"" << qPrintable(arguments.at(i+1)) << "\" is not a valid port number!\n\n"; + return 1; + } + + //everything ok + i++; + } + } else if(arguments.at(i) == "--viewonly") { + view_only = true; + } else { //not a valid command line option, should be the url + url = arguments.at(i); + + //check url + if(!url.startsWith("vnc://")) { + std::cerr << "\"" << qPrintable(url) << "\" is not a valid command line option!\n\n"; + printHelp(); + + return 1; + } + + if(arguments.count() > i+1) { //TODO: having a --quality option would make more sense. + int arg = arguments.at(i+1).toInt(); + if(1 <= arg and arg <= 3) { //check if arg is valid, might also be another option + quality = arg; + i++; + } + } + } + } + + if(!url.isNull() and listen_port > 0) { + std::cerr << "--listen cannot be used with an URL!\n"; + return 1; + } + + MainWindow main(url, quality, listen_port, view_only); + main.show(); + return app.exec(); }