File indexing completed on 2024-04-28 04:45:39

0001 #include <QCommandLineParser>
0002 #include <QIcon>
0003 #include <QQmlApplicationEngine>
0004 #include <QQmlContext>
0005 
0006 #include <KI18n/KLocalizedString>
0007 
0008 #ifdef Q_OS_ANDROID
0009 #include <QGuiApplication>
0010 #include <MauiKit3/Core/mauiandroid.h>
0011 #else
0012 #include <QApplication>
0013 #endif
0014 
0015 #include <MauiKit3/Core/mauiapp.h>
0016 #include <MauiKit3/TextEditor/moduleinfo.h>
0017 
0018 #include "nota.h"
0019 #include "../nota_version.h"
0020 
0021 // Models
0022 #include "models/historymodel.h"
0023 
0024 #include "controllers/server.h"
0025 
0026 #define NOTA_URI "org.maui.nota"
0027 
0028 Q_DECL_EXPORT int main(int argc, char *argv[])
0029 {
0030     QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling);
0031     QCoreApplication::setAttribute(Qt::AA_UseHighDpiPixmaps, true);
0032 
0033 #ifdef Q_OS_ANDROID
0034     QGuiApplication app(argc, argv);
0035     if (!MAUIAndroid::checkRunTimePermissions({"android.permission.WRITE_EXTERNAL_STORAGE"}))
0036         return -1;
0037 #else
0038     QApplication app(argc, argv);
0039 #endif
0040 
0041     app.setOrganizationName(QStringLiteral("Maui"));
0042     app.setWindowIcon(QIcon(":/img/nota.svg"));
0043 
0044     KLocalizedString::setApplicationDomain("nota");
0045 
0046     KAboutData about(QStringLiteral("nota"),
0047                      QStringLiteral("Nota"),
0048                      NOTA_VERSION_STRING,
0049                      i18n("Browse, create and edit text files."),
0050                      KAboutLicense::LGPL_V3,
0051                      APP_COPYRIGHT_NOTICE,
0052                      QString(GIT_BRANCH) + "/" + QString(GIT_COMMIT_HASH));
0053 
0054     about.addAuthor(QStringLiteral("Camilo Higuita"), i18n("Developer"), QStringLiteral("milo.h@aol.com"));
0055     about.addAuthor(QStringLiteral("Anupam Basak"), i18n("Developer"), QStringLiteral("anupam.basak27@gmail.com"));
0056     about.setHomepage("https://mauikit.org");
0057     about.setProductName("maui/nota");
0058     about.setBugAddress("https://invent.kde.org/maui/nota/-/issues");
0059     about.setOrganizationDomain(NOTA_URI);
0060     about.setProgramLogo(app.windowIcon());
0061 
0062     const auto FBData = MauiKitTextEditor::aboutData();
0063     about.addComponent(FBData.name(), MauiKitTextEditor::buildVersion(), FBData.version(), FBData.webAddress());
0064 
0065     KAboutData::setApplicationData(about);
0066     MauiApp::instance()->setIconName("qrc:/img/nota.svg");
0067 
0068     QCommandLineParser parser;
0069 
0070     about.setupCommandLine(&parser);
0071     parser.process(app);
0072 
0073     about.processCommandLine(&parser);
0074     const QStringList args = parser.positionalArguments();
0075     QStringList paths;
0076 
0077     if (!args.isEmpty())
0078     {
0079         for(const auto &path : args)
0080             paths << QUrl::fromUserInput(path).toString();
0081     }
0082 
0083 #if (defined Q_OS_LINUX || defined Q_OS_FREEBSD) && !defined Q_OS_ANDROID
0084     if (AppInstance::attachToExistingInstance(QUrl::fromStringList(paths), false))
0085     {
0086         // Successfully attached to existing instance of Nota
0087         return 0;
0088     }else
0089     {
0090         //        const QString serviceName = QStringLiteral("org.kde.index-%1").arg(QCoreApplication::applicationPid());
0091         //        auto instances = IndexInstance::appInstances(serviceName);
0092         //        if(instances.size() > 0)
0093         //        {
0094         //            instances.first().first->activateWindow();
0095         //        }
0096     }
0097 
0098     AppInstance::registerService();
0099 #endif
0100 
0101     auto server = std::make_unique<Server>();
0102 
0103     QQmlApplicationEngine engine;
0104     const QUrl url(QStringLiteral("qrc:/main.qml"));
0105     QObject::connect(
0106                 &engine,
0107                 &QQmlApplicationEngine::objectCreated,
0108                 &app,
0109                 [url, args, &server](QObject *obj, const QUrl &objUrl) {
0110         if (!obj && url == objUrl)
0111             QCoreApplication::exit(-1);
0112 
0113         server->setQmlObject(obj);
0114         server->openFiles(args, false);
0115 
0116     },
0117     Qt::QueuedConnection);
0118 
0119     engine.rootContext()->setContextObject(new KLocalizedContext(&engine));
0120 
0121     qmlRegisterSingletonInstance<Server>(NOTA_URI, 1, 0, "Server", server.get());
0122     qmlRegisterSingletonInstance<Nota>(NOTA_URI, 1, 0, "Nota", Nota::instance());
0123     qmlRegisterType<HistoryModel>(NOTA_URI, 1, 0, "History");
0124 
0125     engine.load(url);
0126 
0127     return app.exec();
0128 }