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"