File indexing completed on 2024-05-12 05:35:38

0001 /*
0002     SPDX-FileCopyrightText: 2020 Tobias Fella <fella@posteo.de>
0003     SPDX-FileCopyrightText: 2022 Méven Car <meven@kde.org>
0004 
0005     SPDX-License-Identifier: GPL-2.0-or-later
0006 */
0007 
0008 #include "kcm_componentchooser.h"
0009 
0010 #include <QApplication>
0011 #include <QDBusConnection>
0012 #include <QDBusMessage>
0013 
0014 #include <KBuildSycocaProgressDialog>
0015 #include <KLocalizedString>
0016 #include <KPluginFactory>
0017 
0018 #include "components/componentchooserarchivemanager.h"
0019 #include "components/componentchooserbrowser.h"
0020 #include "components/componentchooseremail.h"
0021 #include "components/componentchooserfilemanager.h"
0022 #include "components/componentchoosergeo.h"
0023 #include "components/componentchooserimageviewer.h"
0024 #include "components/componentchoosermusicplayer.h"
0025 #include "components/componentchooserpdfviewer.h"
0026 #include "components/componentchoosertel.h"
0027 #include "components/componentchooserterminal.h"
0028 #include "components/componentchoosertexteditor.h"
0029 #include "components/componentchooservideoplayer.h"
0030 
0031 extern KSERVICE_EXPORT int ksycoca_ms_between_checks;
0032 
0033 K_PLUGIN_FACTORY_WITH_JSON(KcmComponentChooserFactory, "kcm_componentchooser.json", registerPlugin<KcmComponentChooser>();)
0034 
0035 KcmComponentChooser::KcmComponentChooser(QObject *parent, const KPluginMetaData &metaData)
0036     : KQuickManagedConfigModule(parent, metaData)
0037     , m_browsers(new ComponentChooserBrowser(this))
0038     , m_fileManagers(new ComponentChooserFileManager(this))
0039     , m_terminalEmulators(new ComponentChooserTerminal(this))
0040     , m_emailClients(new ComponentChooserEmail(this))
0041     , m_geoUriHandlers(new ComponentChooserGeo(this))
0042     , m_telUriHandlers(new ComponentChooserTel(this))
0043     , m_textEditors(new ComponentChooserTextEditor(this))
0044     , m_imageViewers(new ComponentChooserImageViewer(this))
0045     , m_musicPlayers(new ComponentChooserMusicPlayer(this))
0046     , m_videoPlayers(new ComponentChooserVideoPlayer(this))
0047     , m_pdfViewers(new ComponentChooserPdfViewer(this))
0048     , m_archiveManagers(new ComponentChooserArchiveManager(this))
0049 {
0050     setButtons(Help | Default | Apply);
0051 
0052     connect(browsers(), &ComponentChooser::indexChanged, this, &KcmComponentChooser::settingsChanged);
0053     connect(fileManagers(), &ComponentChooser::indexChanged, this, &KcmComponentChooser::settingsChanged);
0054     connect(terminalEmulators(), &ComponentChooser::indexChanged, this, &KcmComponentChooser::settingsChanged);
0055     connect(emailClients(), &ComponentChooser::indexChanged, this, &KcmComponentChooser::settingsChanged);
0056     connect(geoUriHandlers(), &ComponentChooser::indexChanged, this, &KcmComponentChooser::settingsChanged);
0057     connect(telUriHandlers(), &ComponentChooser::indexChanged, this, &KcmComponentChooser::settingsChanged);
0058     connect(textEditors(), &ComponentChooser::indexChanged, this, &KcmComponentChooser::settingsChanged);
0059     connect(imageViewers(), &ComponentChooser::indexChanged, this, &KcmComponentChooser::settingsChanged);
0060     connect(musicPlayers(), &ComponentChooser::indexChanged, this, &KcmComponentChooser::settingsChanged);
0061     connect(videoPlayers(), &ComponentChooser::indexChanged, this, &KcmComponentChooser::settingsChanged);
0062     connect(pdfViewers(), &ComponentChooser::indexChanged, this, &KcmComponentChooser::settingsChanged);
0063     connect(archiveManagers(), &ComponentChooser::indexChanged, this, &KcmComponentChooser::settingsChanged);
0064 }
0065 
0066 ComponentChooser *KcmComponentChooser::browsers() const
0067 {
0068     return m_browsers;
0069 }
0070 
0071 ComponentChooser *KcmComponentChooser::emailClients() const
0072 {
0073     return m_emailClients;
0074 }
0075 
0076 ComponentChooser *KcmComponentChooser::terminalEmulators() const
0077 {
0078     return m_terminalEmulators;
0079 }
0080 
0081 ComponentChooser *KcmComponentChooser::fileManagers() const
0082 {
0083     return m_fileManagers;
0084 }
0085 
0086 ComponentChooser *KcmComponentChooser::geoUriHandlers() const
0087 {
0088     return m_geoUriHandlers;
0089 }
0090 
0091 ComponentChooser *KcmComponentChooser::telUriHandlers() const
0092 {
0093     return m_telUriHandlers;
0094 }
0095 
0096 ComponentChooser *KcmComponentChooser::textEditors() const
0097 {
0098     return m_textEditors;
0099 }
0100 
0101 ComponentChooser *KcmComponentChooser::imageViewers() const
0102 {
0103     return m_imageViewers;
0104 }
0105 
0106 ComponentChooser *KcmComponentChooser::musicPlayers() const
0107 {
0108     return m_musicPlayers;
0109 }
0110 
0111 ComponentChooser *KcmComponentChooser::videoPlayers() const
0112 {
0113     return m_videoPlayers;
0114 }
0115 
0116 ComponentChooser *KcmComponentChooser::pdfViewers() const
0117 {
0118     return m_pdfViewers;
0119 }
0120 
0121 ComponentChooser *KcmComponentChooser::archiveManagers() const
0122 {
0123     return m_archiveManagers;
0124 }
0125 
0126 void KcmComponentChooser::defaults()
0127 {
0128     m_browsers->defaults();
0129     m_fileManagers->defaults();
0130     m_terminalEmulators->defaults();
0131     m_emailClients->defaults();
0132     m_geoUriHandlers->defaults();
0133     m_telUriHandlers->defaults();
0134     m_textEditors->defaults();
0135     m_imageViewers->defaults();
0136     m_musicPlayers->defaults();
0137     m_videoPlayers->defaults();
0138     m_pdfViewers->defaults();
0139     m_archiveManagers->defaults();
0140 }
0141 
0142 void KcmComponentChooser::load()
0143 {
0144     m_browsers->load();
0145     m_fileManagers->load();
0146     m_terminalEmulators->load();
0147     m_emailClients->load();
0148     m_geoUriHandlers->load();
0149     m_telUriHandlers->load();
0150     m_textEditors->load();
0151     m_imageViewers->load();
0152     m_musicPlayers->load();
0153     m_videoPlayers->load();
0154     m_pdfViewers->load();
0155     m_archiveManagers->load();
0156 }
0157 
0158 void KcmComponentChooser::save()
0159 {
0160     QList<ComponentChooser *> componentsSaved;
0161 
0162     auto handleSave = [&componentsSaved](ComponentChooser *chooser) {
0163         if (chooser->isSaveNeeded()) {
0164             chooser->save();
0165             componentsSaved.append(chooser);
0166         }
0167     };
0168     handleSave(m_browsers);
0169     handleSave(m_fileManagers);
0170     handleSave(m_terminalEmulators);
0171     handleSave(m_emailClients);
0172     handleSave(m_geoUriHandlers);
0173     handleSave(m_telUriHandlers);
0174     handleSave(m_textEditors);
0175     handleSave(m_imageViewers);
0176     handleSave(m_musicPlayers);
0177     handleSave(m_videoPlayers);
0178     handleSave(m_pdfViewers);
0179     handleSave(m_archiveManagers);
0180 
0181     QDBusMessage message = QDBusMessage::createMethodCall(QStringLiteral("org.kde.klauncher5"),
0182                                                           QStringLiteral("/KLauncher"),
0183                                                           QStringLiteral("org.kde.KLauncher"),
0184                                                           QStringLiteral("reparseConfiguration"));
0185     QDBusConnection::sessionBus().send(message);
0186 
0187     // HACK to ensure mime cache is updated right away
0188     ComponentChooser::forceReloadServiceCache();
0189 
0190     for (auto *componentSaved : componentsSaved) {
0191         componentSaved->onSaved();
0192     }
0193 }
0194 
0195 bool KcmComponentChooser::isDefaults() const
0196 {
0197     return m_browsers->isDefaults() && m_fileManagers->isDefaults() && m_terminalEmulators->isDefaults() && m_emailClients->isDefaults()
0198         && m_geoUriHandlers->isDefaults() && m_telUriHandlers->isDefaults() && m_textEditors->isDefaults() && m_imageViewers->isDefaults()
0199         && m_musicPlayers->isDefaults() && m_videoPlayers->isDefaults() && m_pdfViewers->isDefaults() && m_archiveManagers->isDefaults();
0200 }
0201 
0202 bool KcmComponentChooser::isSaveNeeded() const
0203 {
0204     return m_browsers->isSaveNeeded() || m_fileManagers->isSaveNeeded() || m_terminalEmulators->isSaveNeeded() || m_emailClients->isSaveNeeded()
0205         || m_geoUriHandlers->isSaveNeeded() || m_telUriHandlers->isSaveNeeded() || m_textEditors->isSaveNeeded() || m_imageViewers->isSaveNeeded()
0206         || m_musicPlayers->isSaveNeeded() || m_videoPlayers->isSaveNeeded() || m_pdfViewers->isSaveNeeded() || m_archiveManagers->isSaveNeeded();
0207 }
0208 
0209 #include "kcm_componentchooser.moc"