File indexing completed on 2024-05-12 16:23:40
0001 /* 0002 SPDX-FileCopyrightText: 2019 Jonah BrĂ¼chert <jbb.prv@gmx.de> 0003 0004 SPDX-License-Identifier: LGPL-2.0-or-later 0005 */ 0006 0007 #include <QApplication> 0008 #include <QCommandLineOption> 0009 #include <QCommandLineParser> 0010 #include <QIcon> 0011 #include <QQmlApplicationEngine> 0012 #include <QQuickStyle> 0013 #include <QUrl> 0014 #include <QtQml> 0015 #include <QtWebEngineQuick> 0016 0017 #include <KAboutData> 0018 #include <KDesktopFile> 0019 #include <KLocalizedContext> 0020 #include <KLocalizedString> 0021 0022 #include "angelfishsettings.h" 0023 #include "angelfishwebprofile.h" 0024 #include "bookmarkshistorymodel.h" 0025 #include "browsermanager.h" 0026 #include "iconimageprovider.h" 0027 #include "tabsmodel.h" 0028 #include "urlutils.h" 0029 #include "useragent.h" 0030 0031 constexpr auto APPLICATION_ID = "org.kde.angelfish"; 0032 0033 QString desktopFileDirectory() 0034 { 0035 if (!QStandardPaths::locate(QStandardPaths::RuntimeLocation, QStringLiteral("flatpak-info")).isEmpty()) { 0036 return qEnvironmentVariable("HOME") % u"/.local/share/applications/"; 0037 } 0038 return QStandardPaths::writableLocation(QStandardPaths::ApplicationsLocation); 0039 } 0040 0041 Q_DECL_EXPORT int main(int argc, char *argv[]) 0042 { 0043 // set default style and icon theme 0044 QIcon::setFallbackThemeName(QStringLiteral("breeze")); 0045 if (qEnvironmentVariableIsEmpty("QT_QUICK_CONTROLS_STYLE") && QQuickStyle::name().isEmpty()) { 0046 QQuickStyle::setStyle(QStringLiteral("org.kde.desktop")); 0047 } 0048 QGuiApplication::setAttribute(Qt::AA_ShareOpenGLContexts); 0049 0050 KLocalizedString::setApplicationDomain("angelfish"); 0051 0052 // Setup QtWebEngine 0053 qputenv("QTWEBENGINE_DIALOG_SET", "QtQuickControls2"); 0054 QString chromiumFlags; 0055 if (AngelfishSettings::self()->webSmoothScrollingEnabled()) { 0056 chromiumFlags.append(QStringLiteral(" --enable-smooth-scrolling")); 0057 } 0058 if (AngelfishSettings::self()->webDarkModeEnabled()) { 0059 chromiumFlags.append(QStringLiteral(" --blink-settings=forceDarkModeEnabled=true")); 0060 } 0061 qputenv("QTWEBENGINE_CHROMIUM_FLAGS", chromiumFlags.toUtf8()); 0062 QtWebEngineQuick::initialize(); 0063 0064 QApplication app(argc, argv); 0065 // QCoreApplication::setOrganizationName("KDE"); 0066 // QCoreApplication::setOrganizationDomain("mobile.kde.org"); 0067 // QCoreApplication::setApplicationName("angelfish"); 0068 0069 // Command line parser 0070 QCommandLineParser parser; 0071 parser.addPositionalArgument(QStringLiteral("desktopfile"), i18n("desktop file to open"), QStringLiteral("[file]")); 0072 parser.addHelpOption(); 0073 parser.process(app); 0074 0075 // QML loading 0076 QQmlApplicationEngine engine; 0077 engine.rootContext()->setContextObject(new KLocalizedContext(&engine)); 0078 0079 engine.addImageProvider(IconImageProvider::providerId(), new IconImageProvider()); 0080 0081 if (parser.positionalArguments().isEmpty()) { 0082 return 1; 0083 } 0084 0085 const QString fileName = parser.positionalArguments().constFirst(); 0086 const QString path = desktopFileDirectory() % QDir::separator() % fileName; 0087 const KDesktopFile desktopFile(path); 0088 if (desktopFile.readUrl().isEmpty()) { 0089 qDebug() << "Failed to find url in" << path; 0090 return 2; 0091 } 0092 const QUrl initialUrl = QUrl::fromUserInput(desktopFile.readUrl()); 0093 0094 const QString appName = desktopFile.readName().toLower().replace(QLatin1Char(' '), QLatin1Char('-')) + QStringLiteral("-angelfish-webapp"); 0095 KAboutData aboutData(appName.toLower(), 0096 desktopFile.readName(), 0097 QStringLiteral("0.1"), 0098 i18n("Angelfish Web App runtime"), 0099 KAboutLicense::GPL, 0100 i18n("Copyright 2020 Angelfish developers")); 0101 QApplication::setWindowIcon(QIcon::fromTheme(desktopFile.readIcon())); 0102 aboutData.addAuthor(i18n("Marco Martin"), QString(), QStringLiteral("mart@kde.org")); 0103 0104 KAboutData::setApplicationData(aboutData); 0105 0106 // Exported types 0107 qmlRegisterType<BookmarksHistoryModel>(APPLICATION_ID, 1, 0, "BookmarksHistoryModel"); 0108 qmlRegisterType<UserAgent>(APPLICATION_ID, 1, 0, "UserAgentGenerator"); 0109 qmlRegisterType<TabsModel>(APPLICATION_ID, 1, 0, "TabsModel"); 0110 qmlRegisterType<AngelfishWebProfile>(APPLICATION_ID, 1, 0, "AngelfishWebProfile"); 0111 0112 // URL utils 0113 qmlRegisterSingletonType<UrlUtils>(APPLICATION_ID, 1, 0, "UrlUtils", [](QQmlEngine *, QJSEngine *) -> QObject * { 0114 return new UrlUtils(); 0115 }); 0116 0117 BrowserManager::instance()->setInitialUrl(initialUrl); 0118 0119 // Browser Manager 0120 qmlRegisterSingletonType<BrowserManager>(APPLICATION_ID, 1, 0, "BrowserManager", [](QQmlEngine *, QJSEngine *) -> QObject * { 0121 return BrowserManager::instance(); 0122 }); 0123 0124 // Settings are read from WebView which we use as super class for WebAppView 0125 qmlRegisterSingletonInstance<AngelfishSettings>(APPLICATION_ID, 1, 0, "Settings", AngelfishSettings::self()); 0126 0127 Q_INIT_RESOURCE(resources_angelfish_generated); 0128 0129 // Load QML 0130 engine.load(QUrl(QStringLiteral("qrc:///webapp.qml"))); 0131 0132 // Error handling 0133 if (engine.rootObjects().isEmpty()) { 0134 return -1; 0135 } 0136 0137 return app.exec(); 0138 }