File indexing completed on 2025-04-27 04:37:42
0001 /* 0002 SPDX-FileCopyrightText: 2001-2003 Tim Jansen <tim@tjansen.de> 0003 SPDX-FileCopyrightText: 2007-2012 Urs Wolfer <uwolfer@kde.org> 0004 0005 SPDX-License-Identifier: GPL-2.0-or-later 0006 */ 0007 0008 #include "krdc_debug.h" 0009 #include "krdc_version.h" 0010 #include "mainwindow.h" 0011 #include "settings.h" 0012 0013 #include <KAboutData> 0014 #if QT_VERSION < QT_VERSION_CHECK(6, 0, 0) 0015 #include <Kdelibs4ConfigMigrator> 0016 #include <Kdelibs4Migration> 0017 #endif 0018 #include <KLocalizedString> 0019 #include <QCommandLineOption> 0020 #include <QCommandLineParser> 0021 #include <QDir> 0022 #include <QElapsedTimer> 0023 #include <QFile> 0024 #include <QPluginLoader> 0025 #include <QStandardPaths> 0026 0027 int main(int argc, char **argv) 0028 { 0029 const QString appName = QStringLiteral("krdc"); 0030 QApplication app(argc, argv); 0031 KLocalizedString::setApplicationDomain("krdc"); 0032 QElapsedTimer startupTimer; 0033 startupTimer.start(); 0034 #if QT_VERSION < QT_VERSION_CHECK(6, 0, 0) 0035 app.setAttribute(Qt::AA_UseHighDpiPixmaps, true); 0036 0037 Kdelibs4ConfigMigrator migrate(appName); 0038 migrate.setConfigFiles(QStringList() << QStringLiteral("krdcrc")); 0039 if (migrate.migrate()) { 0040 Kdelibs4Migration dataMigrator; 0041 const QString sourceBasePath = dataMigrator.saveLocation("data", QStringLiteral("krdc")); 0042 const QString targetBasePath = QStandardPaths::writableLocation(QStandardPaths::GenericDataLocation) + QStringLiteral("/krdc/"); 0043 QString targetFilePath; 0044 QDir sourceDir(sourceBasePath); 0045 QDir targetDir(targetBasePath); 0046 if (sourceDir.exists()) { 0047 if (!targetDir.exists()) { 0048 QDir().mkpath(targetBasePath); 0049 } 0050 const QStringList fileNames = sourceDir.entryList(QDir::Files | QDir::NoDotAndDotDot | QDir::NoSymLinks); 0051 for (const QString &fileName : fileNames) { 0052 targetFilePath = targetBasePath + fileName; 0053 if (!QFile::exists(targetFilePath)) { 0054 QFile::copy(sourceBasePath + fileName, targetFilePath); 0055 } 0056 } 0057 } 0058 } 0059 #endif 0060 KAboutData aboutData(appName, i18n("KRDC"), QStringLiteral(KRDC_VERSION_STRING), i18n("KDE Remote Desktop Client"), KAboutLicense::LicenseKey::GPL); 0061 0062 aboutData.setCopyrightStatement( 0063 i18n("(c) 2007-2016, Urs Wolfer\n" 0064 "(c) 2001-2003, Tim Jansen\n" 0065 "(c) 2002-2003, Arend van Beelen jr.\n" 0066 "(c) 2000-2002, Const Kaplinsky\n" 0067 "(c) 2000, Tridia Corporation\n" 0068 "(c) 1999, AT&T Laboratories Boston\n" 0069 "(c) 1999-2003, Matthew Chapman\n" 0070 "(c) 2009, Collabora Ltd")); 0071 0072 aboutData.addAuthor(i18n("Urs Wolfer"), i18n("Developer, Maintainer"), QStringLiteral("uwolfer@kde.org")); 0073 aboutData.addAuthor(i18n("Tony Murray"), i18n("Developer"), QStringLiteral("murraytony@gmail.com")); 0074 aboutData.addAuthor(i18n("Tim Jansen"), i18n("Former Developer"), QStringLiteral("tim@tjansen.de")); 0075 aboutData.addAuthor(i18n("Arend van Beelen jr."), i18n("Initial RDP backend"), QStringLiteral("arend@auton.nl")); 0076 aboutData.addCredit(i18n("Brad Hards"), i18n("Google Summer of Code 2007 KRDC project mentor"), QStringLiteral("bradh@frogmouth.net")); 0077 aboutData.addCredit(i18n("LibVNCServer / LibVNCClient developers"), 0078 i18n("VNC client library"), 0079 QStringLiteral("libvncserver-common@lists.sf.net"), 0080 QStringLiteral("http://libvncserver.sourceforge.net/")); 0081 aboutData.addAuthor(i18n("Abner Silva"), i18n("Telepathy Tubes Integration"), QStringLiteral("abner.silva@kdemail.net")); 0082 aboutData.setOrganizationDomain("kde.org"); 0083 0084 KAboutData::setApplicationData(aboutData); 0085 app.setWindowIcon(QIcon::fromTheme(appName)); 0086 0087 QCommandLineParser parser; 0088 aboutData.setupCommandLine(&parser); 0089 0090 // command line options 0091 parser.addOption(QCommandLineOption(QStringList() << QStringLiteral("fullscreen"), 0092 i18n("Start KRDC with the provided URL in fullscreen mode (works only with one URL)"))); 0093 parser.addPositionalArgument(QStringLiteral("url"), i18n("URLs to connect after startup")); 0094 0095 parser.process(app); 0096 aboutData.processCommandLine(&parser); 0097 MainWindow *mainwindow = new MainWindow; 0098 mainwindow->show(); 0099 const QStringList args = parser.positionalArguments(); 0100 if (args.length() > 0) { 0101 for (int i = 0; i < args.length(); ++i) { 0102 QUrl url = QUrl(args.at(i)); 0103 // no URL scheme, assume argument is only a hostname 0104 if (url.scheme().isEmpty()) { 0105 QString defaultProto = Settings::defaultProtocol(); 0106 url.setScheme(defaultProto); 0107 url.setHost(args.at(i)); 0108 url.setPath(QString()); 0109 } 0110 if (!url.isValid()) { 0111 continue; 0112 } 0113 0114 mainwindow->newConnection(url, parser.isSet(QStringLiteral("fullscreen"))); 0115 } 0116 } 0117 qCDebug(KRDC) << "########## KRDC ready:" << startupTimer.elapsed() << "ms ##########"; 0118 0119 return app.exec(); 0120 }