File indexing completed on 2024-05-12 16:23:45
0001 // SPDX-FileCopyrightText: 2020-2021 Jonah BrĂ¼chert <jbb.prv@gmx.de> 0002 // 0003 // SPDX-License-Identifier: LGPL-2.0-or-later 0004 0005 #include "webappcreator.h" 0006 0007 #include <QDebug> 0008 #include <QDir> 0009 #include <QFile> 0010 #include <QProcess> 0011 #include <QQmlEngine> 0012 #include <QQuickImageProvider> 0013 #include <QStandardPaths> 0014 0015 #include <KConfigGroup> 0016 #include <KDesktopFile> 0017 0018 #include "webappmanager.h" 0019 0020 WebAppCreator::WebAppCreator(QObject *parent) 0021 : QObject(parent) 0022 , m_webAppMngr(WebAppManager::instance()) 0023 { 0024 connect(this, &WebAppCreator::websiteNameChanged, this, &WebAppCreator::existsChanged); 0025 connect(&m_webAppMngr, &WebAppManager::applicationsChanged, this, &WebAppCreator::existsChanged); 0026 } 0027 0028 bool WebAppCreator::exists() const 0029 { 0030 return m_webAppMngr.exists(m_websiteName); 0031 } 0032 0033 const QString &WebAppCreator::websiteName() const 0034 { 0035 return m_websiteName; 0036 } 0037 0038 void WebAppCreator::setWebsiteName(const QString &websiteName) 0039 { 0040 m_websiteName = websiteName; 0041 Q_EMIT websiteNameChanged(); 0042 } 0043 0044 void WebAppCreator::createDesktopFile(const QString &name, const QString &url, const QString &iconUrl) 0045 { 0046 m_webAppMngr.addApp(name, url, fetchIcon(iconUrl)); 0047 0048 // Refresh homescreen entries on Plasma Mobile 0049 QProcess buildsycoca; 0050 buildsycoca.setProgram(QStringLiteral("kbuildsycoca5")); 0051 buildsycoca.startDetached(); 0052 } 0053 0054 QImage WebAppCreator::fetchIcon(const QString &url) 0055 { 0056 auto *provider = static_cast<QQuickImageProvider *>(qmlEngine(this)->imageProvider(QStringLiteral("favicon"))); 0057 0058 const QStringView prefixFavicon = QStringView(u"image://favicon/"); 0059 const QString providerIconName = url.mid(prefixFavicon.size()); 0060 0061 const QSize szRequested; 0062 0063 switch (provider->imageType()) { 0064 case QQmlImageProviderBase::Image: { 0065 return provider->requestImage(providerIconName, nullptr, szRequested); 0066 } 0067 case QQmlImageProviderBase::Pixmap: { 0068 return provider->requestPixmap(providerIconName, nullptr, szRequested).toImage(); 0069 } 0070 default: 0071 qDebug() << "Failed to save unhandled image type"; 0072 } 0073 0074 return QImage(); 0075 } 0076 0077 #include "moc_webappcreator.cpp"