File indexing completed on 2024-04-28 04:00:33
0001 /* 0002 SPDX-FileCopyrightText: 2014 Aleix Pol Gonzalez <aleixpol@blue-systems.com> 0003 0004 SPDX-License-Identifier: LGPL-2.1-or-later 0005 */ 0006 0007 #include "qqml.h" 0008 #include <KAboutData> 0009 #include <KLocalizedContext> 0010 #include <KLocalizedString> 0011 #include <QApplication> 0012 #include <QCommandLineParser> 0013 #include <QDebug> 0014 #include <QJsonArray> 0015 #include <QJsonDocument> 0016 #include <QMimeDatabase> 0017 #include <QQmlApplicationEngine> 0018 #include <QQmlContext> 0019 #include <purpose/alternativesmodel.h> 0020 #include <purpose/job.h> 0021 0022 int main(int argc, char **argv) 0023 { 0024 QApplication app(argc, argv); 0025 KAboutData data(QStringLiteral("sharetool"), i18n("Share Tool"), QStringLiteral("1.0"), i18n("Share random information"), KAboutLicense::GPL); 0026 data.addAuthor(QStringLiteral("Aleix Pol i Gonzalez"), i18n("Implementation"), QStringLiteral("aleixpol@kde.org")); 0027 KAboutData::setApplicationData(data); 0028 0029 QJsonObject inputData; 0030 QStringList files; 0031 { 0032 QCommandLineParser parser; 0033 parser.addPositionalArgument(QStringLiteral("files"), i18n("Files to share"), i18n("[files...]")); 0034 parser.addOption(QCommandLineOption(QStringLiteral("data"), i18n("Data tuple to initialize the process with"), QStringLiteral("json"))); 0035 0036 data.setupCommandLine(&parser); 0037 parser.addHelpOption(); 0038 parser.addVersionOption(); 0039 parser.process(app); 0040 data.processCommandLine(&parser); 0041 0042 if (parser.isSet(QStringLiteral("data"))) { 0043 QJsonParseError error; 0044 QJsonDocument doc = QJsonDocument::fromJson(parser.value(QStringLiteral("data")).toLatin1(), &error); 0045 if (error.error) { 0046 qCritical() << qPrintable(i18n("Error in the data argument formatting: %1 at %2", error.errorString(), error.offset)); 0047 parser.showHelp(2); 0048 } else if (!doc.isObject()) { 0049 qCritical() << qPrintable(i18n("Error in the data argument type, it should be a json object.")); 0050 parser.showHelp(3); 0051 } 0052 inputData = doc.object(); 0053 } 0054 0055 files = parser.positionalArguments(); 0056 if (files.isEmpty() && !inputData.contains(QStringLiteral("urls"))) { 0057 qCritical() << qPrintable(i18n("Must specify some files to share")); 0058 parser.showHelp(1); 0059 } 0060 } 0061 0062 QMimeType common; 0063 QJsonArray urls; 0064 if (!files.isEmpty() && (!inputData.contains(QStringLiteral("urls")) || !inputData.contains(QStringLiteral("mimeType")))) { 0065 QMimeDatabase db; 0066 for (const QString &file : std::as_const(files)) { 0067 const QUrl url = QUrl::fromUserInput(file, QString(), QUrl::AssumeLocalFile); 0068 QMimeType type = db.mimeTypeForUrl(url); 0069 if (!common.isValid()) 0070 common = type; 0071 else if (common.inherits(type.name())) { 0072 common = type; 0073 } else if (type.inherits(common.name())) { 0074 ; 0075 } else { 0076 common = db.mimeTypeForName(QStringLiteral("application/octet-stream")); 0077 } 0078 urls += url.toString(); 0079 } 0080 inputData.insert(QStringLiteral("urls"), urls); 0081 inputData.insert(QStringLiteral("mimeType"), common.name()); 0082 } 0083 0084 QQmlApplicationEngine engine; 0085 engine.rootContext()->setContextObject(new KLocalizedContext); 0086 engine.load(QUrl(QStringLiteral("qrc:/main.qml"))); 0087 0088 engine.rootObjects().at(0)->setProperty("inputData", inputData); 0089 engine.rootObjects().at(0)->setProperty("visible", true); 0090 0091 return app.exec(); 0092 }