File indexing completed on 2024-05-12 17:06:42
0001 /*************************************************************************** 0002 * * 0003 * SPDX-FileCopyrightText: 2021 Aditya Mehra <aix.m@outlook.com> * 0004 * SPDX-FileCopyrightText: 2015 Sebastian Kügler <sebas@kde.org> * 0005 * * 0006 * SPDX-License-Identifier: GPL-2.0-or-later * 0007 ***************************************************************************/ 0008 0009 #include "bigscreensettings.h" 0010 #include "themelistmodel.h" 0011 0012 #include <QQuickItem> 0013 #include <QDBusConnection> 0014 #include <QDBusMessage> 0015 0016 #include <KAboutData> 0017 #include <KLocalizedString> 0018 #include <KPluginFactory> 0019 0020 #include <Plasma/Svg> 0021 #include <Plasma/Theme> 0022 0023 #include "timedated_interface.h" 0024 0025 BigscreenSettings::BigscreenSettings(QObject *parent, const QVariantList &args) 0026 : KQuickAddons::ConfigModule(parent, args) 0027 , m_themeListModel(new ThemeListModel(this)) 0028 { 0029 KAboutData *about = new KAboutData(QStringLiteral("kcm_mediacenter_bigscreen_settings"), // 0030 i18n("Appearance"), 0031 QStringLiteral("2.0"), 0032 QString(), 0033 KAboutLicense::LGPL); 0034 setAboutData(about); 0035 setButtons(Apply | Default); 0036 0037 qmlRegisterAnonymousType<ThemeListModel>("ThemeListModel", 1); 0038 m_theme = new Plasma::Theme(this); 0039 m_theme->setUseGlobalSettings(true); 0040 m_themeName = m_theme->themeName(); 0041 0042 OrgFreedesktopTimedate1Interface timedateIface(QStringLiteral("org.freedesktop.timedate1"), 0043 QStringLiteral("/org/freedesktop/timedate1"), 0044 QDBusConnection::systemBus()); 0045 m_useNtp = timedateIface.nTP(); 0046 } 0047 0048 void BigscreenSettings::load() 0049 { 0050 } 0051 0052 void BigscreenSettings::applyPlasmaTheme(QQuickItem *item, const QString &themeName) 0053 { 0054 if (!item) { 0055 return; 0056 } 0057 0058 Plasma::Theme *theme = m_themes[themeName]; 0059 if (!theme) { 0060 theme = new Plasma::Theme(themeName, this); 0061 m_themes[themeName] = theme; 0062 } 0063 0064 Q_FOREACH (Plasma::Svg *svg, item->findChildren<Plasma::Svg *>()) { 0065 svg->setTheme(theme); 0066 svg->setUsingRenderingCache(false); 0067 } 0068 } 0069 0070 BigscreenSettings::~BigscreenSettings() = default; 0071 0072 void BigscreenSettings::setThemeName(const QString &theme) 0073 { 0074 if (theme != m_themeName) { 0075 m_themeName = theme; 0076 m_theme->setThemeName(theme); 0077 emit themeNameChanged(); 0078 } 0079 } 0080 0081 QString BigscreenSettings::themeName() const 0082 { 0083 return m_themeName; 0084 } 0085 0086 ThemeListModel *BigscreenSettings::themeListModel() 0087 { 0088 return m_themeListModel; 0089 } 0090 0091 bool BigscreenSettings::useColoredTiles() 0092 { 0093 QDBusMessage msg = QDBusMessage::createMethodCall("org.kde.biglauncher", "/BigLauncher", "", "coloredTilesActive"); 0094 QDBusMessage response = QDBusConnection::sessionBus().call(msg); 0095 QList<QVariant> responseArg = response.arguments(); 0096 return responseArg.at(0).toBool(); 0097 } 0098 0099 bool BigscreenSettings::useExpandingTiles() 0100 { 0101 QDBusMessage msg = QDBusMessage::createMethodCall("org.kde.biglauncher", "/BigLauncher", "", "expandableTilesActive"); 0102 QDBusMessage response = QDBusConnection::sessionBus().call(msg); 0103 QList<QVariant> responseArg = response.arguments(); 0104 return responseArg.at(0).toBool(); 0105 } 0106 0107 bool BigscreenSettings::mycroftIntegrationActive() 0108 { 0109 QDBusMessage msg = QDBusMessage::createMethodCall("org.kde.biglauncher", "/BigLauncher", "", "mycroftIntegrationActive"); 0110 QDBusMessage response = QDBusConnection::sessionBus().call(msg); 0111 QList<QVariant> responseArg = response.arguments(); 0112 return responseArg.at(0).toBool(); 0113 } 0114 0115 bool BigscreenSettings::pmInhibitionActive() 0116 { 0117 QDBusMessage msg = QDBusMessage::createMethodCall("org.kde.biglauncher", "/BigLauncher", "", "pmInhibitionActive"); 0118 QDBusMessage response = QDBusConnection::sessionBus().call(msg); 0119 QList<QVariant> responseArg = response.arguments(); 0120 return responseArg.at(0).toBool(); 0121 } 0122 0123 void BigscreenSettings::setUseColoredTiles(bool useColoredTiles) 0124 { 0125 QDBusMessage msg = QDBusMessage::createMethodCall("org.kde.biglauncher", "/BigLauncher", "", "useColoredTiles"); 0126 msg << useColoredTiles; 0127 QDBusConnection::sessionBus().send(msg); 0128 } 0129 0130 void BigscreenSettings::setUseExpandingTiles(bool useExpandingTiles) 0131 { 0132 QDBusMessage msg = QDBusMessage::createMethodCall("org.kde.biglauncher", "/BigLauncher", "", "useExpandableTiles"); 0133 msg << useExpandingTiles; 0134 QDBusConnection::sessionBus().send(msg); 0135 } 0136 0137 void BigscreenSettings::setMycroftIntegrationActive(bool mycroftIntegrationActive) 0138 { 0139 QDBusMessage msg = QDBusMessage::createMethodCall("org.kde.biglauncher", "/BigLauncher", "", "enableMycroftIntegration"); 0140 msg << mycroftIntegrationActive; 0141 QDBusConnection::sessionBus().send(msg); 0142 } 0143 0144 void BigscreenSettings::setPmInhibitionActive(bool pmInhibitionActive) 0145 { 0146 QDBusMessage msg = QDBusMessage::createMethodCall("org.kde.biglauncher", "/BigLauncher", "", "enablePmInhibition"); 0147 msg << pmInhibitionActive; 0148 QDBusConnection::sessionBus().send(msg); 0149 } 0150 0151 void BigscreenSettings::saveTimeZone(const QString &newtimezone) 0152 { 0153 qDebug() << "Saving timezone to config: " << newtimezone; 0154 OrgFreedesktopTimedate1Interface timedateIface(QStringLiteral("org.freedesktop.timedate1"), 0155 QStringLiteral("/org/freedesktop/timedate1"), 0156 QDBusConnection::systemBus()); 0157 0158 if (!newtimezone.isEmpty()) { 0159 qDebug() << "Setting timezone: " << newtimezone; 0160 auto reply = timedateIface.SetTimezone(newtimezone, true); 0161 reply.waitForFinished(); 0162 if (reply.isError()) { 0163 qDebug() << "Failed to set timezone" << reply.error().name() << reply.error().message(); 0164 } 0165 } 0166 } 0167 0168 void BigscreenSettings::setCurrentTime(const QTime ¤tTime) 0169 { 0170 if (m_currentTime != currentTime) { 0171 m_currentTime = currentTime; 0172 emit currentTimeChanged(); 0173 } 0174 } 0175 0176 0177 void BigscreenSettings::setCurrentDate(const QDate ¤tDate) 0178 { 0179 if (m_currentDate != currentDate) { 0180 m_currentDate = currentDate; 0181 emit currentDateChanged(); 0182 } 0183 } 0184 0185 QTime BigscreenSettings::currentTime() 0186 { 0187 return m_currentTime; 0188 } 0189 0190 0191 QDate BigscreenSettings::currentDate() 0192 { 0193 return m_currentDate; 0194 } 0195 0196 bool BigscreenSettings::useNtp() 0197 { 0198 return m_useNtp; 0199 } 0200 0201 void BigscreenSettings::setUseNtp(bool ntp) 0202 { 0203 if (m_useNtp != ntp) { 0204 m_useNtp = ntp; 0205 saveTime(); 0206 emit useNtpChanged(); 0207 } 0208 } 0209 0210 bool BigscreenSettings::saveTime() 0211 { 0212 OrgFreedesktopTimedate1Interface timedateIface(QStringLiteral("org.freedesktop.timedate1"), 0213 QStringLiteral("/org/freedesktop/timedate1"), 0214 QDBusConnection::systemBus()); 0215 0216 bool rc = true; 0217 // final arg in each method is "user-interaction" i.e whether it's OK for polkit to ask for auth 0218 0219 // we cannot send requests up front then block for all replies as we need NTP to be disabled before we can make a call to SetTime 0220 // timedated processes these in parallel and will return an error otherwise 0221 0222 auto reply = timedateIface.SetNTP(m_useNtp, true); 0223 reply.waitForFinished(); 0224 if (reply.isError()) { 0225 qWarning() << "Failed to enable NTP" << reply.error().name() << reply.error().message(); 0226 rc = false; 0227 } 0228 0229 if (!useNtp()) { 0230 QDateTime userTime; 0231 userTime.setTime(currentTime()); 0232 userTime.setDate(currentDate()); 0233 qDebug() << "Setting userTime: " << userTime; 0234 qint64 timeDiff = userTime.toMSecsSinceEpoch() - QDateTime::currentMSecsSinceEpoch(); 0235 auto reply = timedateIface.SetTime(timeDiff * 1000, true, true); 0236 reply.waitForFinished(); 0237 if (reply.isError()) { 0238 qWarning() << "Failed to set current time" << reply.error().name() << reply.error().message(); 0239 rc = false; 0240 } 0241 } 0242 return rc; 0243 } 0244 0245 K_PLUGIN_FACTORY_WITH_JSON(BigscreenSettingsFactory, "bigscreensettings.json", registerPlugin<BigscreenSettings>();) 0246 0247 #include "bigscreensettings.moc" 0248 #include "moc_bigscreensettings.cpp"