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 }