File indexing completed on 2024-04-21 04:58:38

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 }