File indexing completed on 2024-04-28 04:44:39
0001 // Copyright 2018-2023 Camilo Higuita <milo.h@aol.com> 0002 // Copyright 2018-2023 Nitrux Latinoamericana S.C. 0003 // 0004 // SPDX-License-Identifier: GPL-3.0-or-later 0005 #include <QCommandLineParser> 0006 #include <QIcon> 0007 #include <QQmlApplicationEngine> 0008 #include <QQmlContext> 0009 #include <QUrl> 0010 0011 #ifdef Q_OS_ANDROID 0012 #include <QGuiApplication> 0013 #include <MauiKit3/Core/mauiandroid.h> 0014 #else 0015 #include <QApplication> 0016 #endif 0017 0018 #ifdef Q_OS_MACOS 0019 #include <MauiKit3/Core/mauimacos.h> 0020 #endif 0021 0022 #include <MauiKit3/Core/mauiapp.h> 0023 #include <MauiKit3/FileBrowsing/moduleinfo.h> 0024 0025 #include <KIO/kio_version.h> 0026 #include <KAboutData> 0027 #include <KI18n/KLocalizedString> 0028 0029 #include "../index_version.h" 0030 0031 #include "controllers/compressedfile.h" 0032 #include "controllers/filepreviewer.h" 0033 #include "controllers/dirinfo.h" 0034 #include "controllers/folderconfig.h" 0035 #include "controllers/fileproperties.h" 0036 #include "controllers/patharrowbackground.h" 0037 0038 #include "index.h" 0039 0040 #include "models/recentfilesmodel.h" 0041 #include "models/pathlist.h" 0042 0043 #define INDEX_URI "org.maui.index" 0044 0045 Q_DECL_EXPORT int main(int argc, char *argv[]) 0046 { 0047 QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling); 0048 QCoreApplication::setAttribute(Qt::AA_UseHighDpiPixmaps, true); 0049 0050 #ifdef Q_OS_WIN32 0051 qputenv("QT_MULTIMEDIA_PREFERRED_PLUGINS", "w"); 0052 #endif 0053 0054 #ifdef Q_OS_ANDROID 0055 QGuiApplication app(argc, argv); 0056 if (!MAUIAndroid::checkRunTimePermissions({"android.permission.WRITE_EXTERNAL_STORAGE"})) 0057 return -1; 0058 #else 0059 QApplication app(argc, argv); 0060 #endif 0061 0062 app.setOrganizationName(QStringLiteral("Maui")); 0063 app.setWindowIcon(QIcon(":/index.png")); 0064 0065 KLocalizedString::setApplicationDomain("index-fm"); 0066 0067 KAboutData about(QStringLiteral("index"), 0068 i18n("Index"), 0069 INDEX_VERSION_STRING, 0070 i18n("Browse, organize and preview your files."), 0071 KAboutLicense::LGPL_V3, 0072 INDEX_COPYRIGHT_NOTICE, 0073 QString(GIT_BRANCH) + "/" + QString(GIT_COMMIT_HASH)); 0074 0075 about.addAuthor(QStringLiteral("Camilo Higuita"), i18n("Developer"), QStringLiteral("milo.h@aol.com")); 0076 about.addAuthor(QStringLiteral("Gabriel Dominguez"), i18n("Developer"), QStringLiteral("gabriel@gabrieldominguez.es")); 0077 about.setHomepage("https://mauikit.org"); 0078 about.setProductName("maui/index"); 0079 about.setBugAddress("https://invent.kde.org/maui/index-fm/-/issues"); 0080 about.setOrganizationDomain(INDEX_URI); 0081 about.setProgramLogo(app.windowIcon()); 0082 about.addComponent("KIO", "", KIO_VERSION_STRING); 0083 0084 const auto FBData = MauiKitFileBrowsing::aboutData(); 0085 about.addComponent(FBData.name(), MauiKitFileBrowsing::buildVersion(), FBData.version(), FBData.webAddress()); 0086 0087 KAboutData::setApplicationData(about); 0088 MauiApp::instance()->setIconName("qrc:/assets/index.png"); 0089 0090 QCommandLineOption newWindowOption(QStringList() << "n" << "new", "Open url in a new window.", "url"); 0091 0092 QCommandLineParser parser; 0093 0094 parser.addOption(newWindowOption); 0095 0096 parser.setApplicationDescription(about.shortDescription()); 0097 parser.process(app); 0098 about.processCommandLine(&parser); 0099 0100 const QStringList args = parser.positionalArguments(); 0101 QStringList paths; 0102 0103 if (!args.isEmpty()) 0104 { 0105 for(const auto &path : args) 0106 paths << QUrl::fromUserInput(path).toString(); 0107 } 0108 0109 0110 #if (defined Q_OS_LINUX || defined Q_OS_FREEBSD) && !defined Q_OS_ANDROID 0111 0112 if(parser.isSet(newWindowOption)) 0113 { 0114 paths = QStringList() << QUrl::fromUserInput(parser.value(newWindowOption)).toString() ; 0115 }else 0116 { 0117 if (IndexInstance::attachToExistingInstance(QUrl::fromStringList(paths), false, false)) 0118 { 0119 // Successfully attached to existing instance of Index 0120 return 0; 0121 } 0122 } 0123 0124 IndexInstance::registerService(); 0125 #endif 0126 0127 auto index = std::make_unique<Index>(nullptr); 0128 0129 QQmlApplicationEngine engine; 0130 const QUrl url(QStringLiteral("qrc:/main.qml")); 0131 0132 QObject::connect( 0133 &engine, 0134 &QQmlApplicationEngine::objectCreated, 0135 &app, 0136 [url, &index](QObject *obj, const QUrl &objUrl) { 0137 if (!obj && url == objUrl) 0138 QCoreApplication::exit(-1); 0139 0140 index->setQmlObject(obj); 0141 0142 }, Qt::QueuedConnection); 0143 0144 engine.rootContext()->setContextObject(new KLocalizedContext(&engine)); 0145 0146 engine.rootContext()->setContextProperty("initPaths", paths); 0147 0148 engine.rootContext()->setContextProperty("inx", index.get()); 0149 qmlRegisterType<CompressedFile>(INDEX_URI, 1, 0, "CompressedFile"); 0150 qmlRegisterType<FilePreviewer>(INDEX_URI, 1, 0, "FilePreviewProvider"); 0151 qmlRegisterType<RecentFilesModel>(INDEX_URI, 1, 0, "RecentFiles"); 0152 qmlRegisterType<DirInfo>(INDEX_URI, 1, 0, "DirInfo"); 0153 qmlRegisterType<PathList>(INDEX_URI, 1, 0, "PathList"); 0154 qmlRegisterType<FolderConfig>(INDEX_URI, 1, 0, "FolderConfig"); 0155 qmlRegisterType<FileProperties>(INDEX_URI, 1, 0, "FileProperties"); 0156 qmlRegisterType<Permission>(INDEX_URI, 1, 0, "Permission"); 0157 qmlRegisterType<PathArrowBackground>(INDEX_URI, 1, 0, "PathArrowBackground"); 0158 0159 engine.load(url); 0160 0161 #ifdef Q_OS_MACOS 0162 // MAUIMacOS::removeTitlebarFromWindow(); 0163 // MauiApp::instance()->setEnableCSD(true); //for now index can not handle cloud accounts 0164 #endif 0165 return app.exec(); 0166 }