File indexing completed on 2024-04-28 09:49:44

0001 /*
0002  * SPDX-FileCopyrightText: 2017 Elvis Angelaccio <elvis.angelaccio@kde.org>
0003  *
0004  * SPDX-License-Identifier: GPL-2.0-or-later
0005  *
0006  */
0007 
0008 #include "compositejob.h"
0009 #include "symmydebug.h"
0010 #include "symmyversion.h"
0011 
0012 #include <KAboutData>
0013 #include <KLocalizedString>
0014 
0015 #include <QApplication>
0016 #include <QCommandLineParser>
0017 
0018 #include <iostream>
0019 
0020 int main(int argc, char **argv)
0021 {
0022     KLocalizedString::setApplicationDomain("symmy");
0023 
0024     QCoreApplication::setAttribute(Qt::AA_UseHighDpiPixmaps, true);
0025     QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling, true);
0026     QApplication app {argc, argv};
0027     auto aboutData = KAboutData {QStringLiteral("symmy"), i18nc("display name for 'symmy' binary", "GPG Symmetric Encryption Frontend"), QStringLiteral(SYMMY_VERSION_STRING),
0028                                  i18n("Encrypt/decrypt one ore more files using GPG symmetric encryption."), KAboutLicense::GPL, i18n("(c) 2017 Elvis Angelaccio")};
0029     aboutData.addAuthor(i18n("Elvis Angelaccio"), {}, QStringLiteral("elvis.angelaccio@kde.org"));
0030     KAboutData::setApplicationData(aboutData);
0031 
0032     QCommandLineParser parser;
0033     parser.addPositionalArgument(QStringLiteral("files"), i18n("List of files to encrypt or decrypt."));
0034     parser.addOption(QCommandLineOption {QStringList {QStringLiteral("e"), QStringLiteral("encrypt")},
0035                                          i18n("Encrypt the given list of files (this is the default if there are no other options).")});
0036     parser.addOption(QCommandLineOption {QStringList {QStringLiteral("d"), QStringLiteral("decrypt")},
0037                                          i18n("Decrypt the given list of files.")});
0038 
0039     app.setQuitOnLastWindowClosed(false);
0040 
0041     aboutData.setupCommandLine(&parser);
0042     parser.process(app);
0043     aboutData.processCommandLine(&parser);
0044 
0045     if (parser.isSet(QStringLiteral("encrypt")) && parser.isSet(QStringLiteral("decrypt"))) {
0046         std::cerr << qPrintable(i18nc("--encrypt and --decrypt are CLI args, don't translate them", "Error: either --encrypt or --decrypt, not both.")) << '\n';
0047         parser.showHelp(-1);
0048     }
0049 
0050     if (parser.positionalArguments().isEmpty()) {
0051         parser.showHelp(-1);
0052     }
0053 
0054     const auto files = parser.positionalArguments();
0055 
0056     if (parser.isSet(QStringLiteral("encrypt")) || !parser.isSet(QStringLiteral("decrypt"))) {
0057         qCDebug(SYMMY) << "Going to encrypt:" << files;
0058         auto job = new Symmy::CompositeJob {files, Symmy::CompositeJob::Task::Encryption};
0059         QObject::connect(job, &KJob::result, &app, &QCoreApplication::quit, Qt::QueuedConnection);
0060         job->start();
0061     } else {
0062         qCDebug(SYMMY) << "Going to decrypt:" << files;
0063         auto job = new Symmy::CompositeJob {files, Symmy::CompositeJob::Task::Decryption};
0064         QObject::connect(job, &KJob::result, &app, &QCoreApplication::quit, Qt::QueuedConnection);
0065         job->start();
0066     }
0067 
0068     qCDebug(SYMMY) << "Starting event loop...";
0069     return app.exec();
0070 }