File indexing completed on 2024-04-21 05:50:49
0001 /* 0002 SPDX-FileCopyrightText: 2002 Jean-Baptiste Mardelle <bj@altern.org> 0003 SPDX-FileCopyrightText: 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015 Rolf Eike Beer <kde@opensource.sf-tec.de> 0004 SPDX-License-Identifier: GPL-2.0-or-later 0005 */ 0006 0007 #include "kgpgoptions.h" 0008 0009 #include "kgpg_general_debug.h" 0010 #include "kgpgsettings.h" 0011 #include "kgpginterface.h" 0012 #include "conf_encryption.h" 0013 #include "core/images.h" 0014 #include "model/gpgservermodel.h" 0015 #include "model/keylistproxymodel.h" 0016 #include "model/kgpgitemmodel.h" 0017 0018 #include <kmessagebox.h> 0019 #include <kwidgetsaddons_version.h> 0020 #include <KConfig> 0021 #include <KConfigGroup> 0022 #include <KDesktopFile> 0023 #include <KFontChooser> 0024 #include <KLocalizedString> 0025 #include <KMessageBox> 0026 #include <KProcess> 0027 #include <QUrl> 0028 0029 #include <QCheckBox> 0030 0031 #include <QFile> 0032 #include <QFileDialog> 0033 #include <QInputDialog> 0034 #include <QTextStream> 0035 #include <QVBoxLayout> 0036 #include <QRegularExpression> 0037 #include <QStandardPaths> 0038 0039 using namespace KgpgCore; 0040 using namespace Qt::Literals::StringLiterals; 0041 0042 // main window 0043 kgpgOptions::kgpgOptions(QWidget *parent, KGpgItemModel *model) 0044 : KConfigDialog(parent, QLatin1String( "settings" ), KGpgSettings::self()), 0045 m_config(new KConfig( QLatin1String( "kgpgrc" ), KConfig::SimpleConfig)), 0046 m_page1(new Encryption()), 0047 m_page2(new Decryption()), 0048 m_page3(new UIConf()), 0049 m_page4(new GPGConf()), 0050 m_page6(new ServerConf()), 0051 m_page7(new MiscConf()), 0052 m_serverModel(new GpgServerModel(m_page6)), 0053 m_fontchooser(new KFontChooser(KFontChooser::NoDisplayFlags, m_page3->tabWidget3->widget(1))), 0054 m_model(model), 0055 m_combomodel(new KeyListProxyModel(this, KeyListProxyModel::SingleColumnIdFirst)) 0056 { 0057 m_page7->EmailTemplateEdit->setPlainText(KGpgSettings::emailTemplate()); 0058 0059 m_combomodel->setKeyModel(m_model); 0060 m_combomodel->setTrustFilter(KgpgCore::TRUST_MARGINAL); 0061 m_combomodel->setEncryptionKeyFilter(true); 0062 m_combomodel->sort(0); 0063 0064 // Initialize the default server and the default server list. 0065 defaultKeyServer = QLatin1String("hkp://keyserver.ubuntu.com"); 0066 defaultServerList << defaultKeyServer 0067 << QLatin1String("hkp://keys.openpgp.org") 0068 << QLatin1String("hkp://subkeys.pgp.net") 0069 << QLatin1String("hkp://wwwkeys.pgp.net"); 0070 0071 // Read the default keyserver from the GnuPG settings. 0072 keyServer = KgpgInterface::getGpgSetting(QLatin1String( "keyserver" ), KGpgSettings::gpgConfigPath()); 0073 0074 // Read the servers stored in kgpgrc 0075 serverList = KGpgSettings::keyServers(); 0076 0077 // Remove everything after a whitespace. This will normally be 0078 // ' (Default)' from KDE 3.x.x 0079 serverList.replaceInStrings(QRegularExpression(QStringLiteral(" .*")), QString()); 0080 0081 m_serverModel->setStringList(serverList); 0082 // if the server from GnuPG config is set and is not in the list of servers put it there 0083 if (!keyServer.isEmpty() && !serverList.contains(keyServer)) 0084 serverList.prepend(keyServer); 0085 m_page6->ServerBox->setModel(m_serverModel); 0086 0087 defaultConfigPath = QUrl::fromLocalFile(gpgConfigPath).fileName(); 0088 defaultHomePath = QUrl::fromLocalFile(gpgConfigPath).adjusted(QUrl::RemoveFilename).path(); 0089 defaultBinPath = KGpgSettings::gpgBinaryPath(); 0090 0091 m_showsystray = KGpgSettings::showSystray(); 0092 m_trayaction = KGpgSettings::leftClick(); 0093 m_mailUats = KGpgSettings::mailUats(); 0094 0095 QVBoxLayout *fontlayout = new QVBoxLayout(m_page3->tabWidget3->widget(1)); 0096 0097 m_fontchooser->setObjectName( QLatin1String("kcfg_Font" )); 0098 fontlayout->addWidget(m_fontchooser); 0099 0100 m_page3->kcfg_EmailSorting->addItem(i18n("Left to right, account first")); ///< KGpgSettings::EnumEmailSorting::Alphabetical 0101 m_page3->kcfg_EmailSorting->addItem(i18n("Right to left, TLD first")); ///< KGpgSettings::EnumEmailSorting::TLDfirst 0102 m_page3->kcfg_EmailSorting->addItem(i18n("Right to left, domain first")); ///< KGpgSettings::EnumEmailSorting::DomainFirst 0103 m_page3->kcfg_EmailSorting->addItem(i18n("Right to left, FQDN first")); ///< KGpgSettings::EnumEmailSorting::FQDNFirst 0104 m_emailSortingIndex = KGpgSettings::emailSorting(); 0105 0106 addPage(m_page1, i18n("Encryption"), QLatin1String( "document-encrypt" )); 0107 addPage(m_page2, i18n("Decryption"), QLatin1String( "document-decrypt") ); 0108 addPage(m_page3, i18n("Appearance"), QLatin1String( "preferences-desktop-theme" )); 0109 addPage(m_page4, i18n("GnuPG Settings"), QLatin1String( "kgpg" )); 0110 addPage(m_page6, i18n("Key Servers"), QLatin1String( "network-wired" )); 0111 addPage(m_page7, i18n("Misc"), QLatin1String( "preferences-other" )); 0112 0113 // The following widgets are managed manually. 0114 connect(m_page1->encrypt_to_always, &QCheckBox::toggled, this, &kgpgOptions::slotChangeEncryptTo); 0115 connect(m_page4->changeHome, &QPushButton::clicked, this, &kgpgOptions::slotChangeHome); 0116 connect(m_page6->server_add, &QPushButton::clicked, this, &kgpgOptions::slotAddKeyServer); 0117 connect(m_page6->server_del, &QPushButton::clicked, this, &kgpgOptions::slotDelKeyServer); 0118 connect(m_page6->server_edit, &QPushButton::clicked, this, QOverload<>::of(&kgpgOptions::slotEditKeyServer)); 0119 connect(m_page6->server_default, &QPushButton::clicked, this, &kgpgOptions::slotDefaultKeyServer); 0120 connect(m_page6->ServerBox->selectionModel(), &QItemSelectionModel::selectionChanged, this, &kgpgOptions::slotChangeKeyServerButtonEnable); 0121 connect(m_page6->ServerBox, &QListView::doubleClicked, this, QOverload<const QModelIndex &>::of(&kgpgOptions::slotEditKeyServer)); 0122 connect(m_page7->kcfg_ShowSystray, &QPushButton::clicked, this, &kgpgOptions::slotSystrayEnable); 0123 0124 keyUltimate = KGpgSettings::colorUltimate(); 0125 keyGood = KGpgSettings::colorGood(); 0126 keyMarginal = KGpgSettings::colorMarginal(); 0127 keyExpired = KGpgSettings::colorExpired(); 0128 keyUnknown = KGpgSettings::colorUnknown(); 0129 keyRev = KGpgSettings::colorRev(); 0130 keyBad = KGpgSettings::colorBad(); 0131 } 0132 0133 kgpgOptions::~kgpgOptions() 0134 { 0135 delete m_config; 0136 delete m_page1; 0137 delete m_page2; 0138 delete m_page3; 0139 delete m_page4; 0140 delete m_page6; 0141 delete m_page7; 0142 } 0143 0144 void kgpgOptions::slotChangeHome() 0145 { 0146 QString gpgHome = QFileDialog::getExistingDirectory(this, i18n("New GnuPG Home Location"), m_page4->gpg_home_path->text()); 0147 if (gpgHome.isEmpty()) 0148 return; 0149 0150 if (!gpgHome.endsWith(QLatin1Char( '/' ))) 0151 gpgHome.append(QLatin1Char( '/' )); 0152 0153 QString confPath = QLatin1String( "options" ); 0154 if (!QFile(gpgHome + confPath).exists()) { 0155 confPath = QLatin1String( "gpg.conf" ); 0156 if (!QFile(gpgHome + confPath).exists()) { 0157 // Try to create config File by running gpg once 0158 if (KMessageBox::PrimaryAction == KMessageBox::questionTwoActions(this, 0159 i18n("No configuration file was found in the selected location.\nDo you want to create it now?\n\nWithout a configuration file, neither KGpg nor GnuPG will work properly."), 0160 i18n("No Configuration File Found"), 0161 KGuiItem(i18n("Create")), 0162 KGuiItem(i18n("Ignore")))) { 0163 // start GnuPG so that it will create a config file 0164 QString gpgbin = m_page4->kcfg_GpgBinaryPath->text(); 0165 if (!QFile::exists(gpgbin)) 0166 gpgbin = QLatin1String( "gpg" ); 0167 0168 KProcess p; 0169 p << gpgbin << QLatin1String( "--homedir" ) << gpgHome << QLatin1String( "--no-tty" ) << QLatin1String( "--list-secret-keys" ); 0170 p.execute(); 0171 // end of creating config file 0172 0173 confPath = QLatin1String( "gpg.conf" ); 0174 QFile confFile(gpgHome + confPath); 0175 if (!confFile.open(QIODevice::WriteOnly)) { 0176 KMessageBox::error(this, i18n("Cannot create configuration file. Please check if destination media is mounted and if you have write access.")); 0177 return; 0178 } else { 0179 QTextStream stream(&confFile); 0180 stream << "# Config file created by KGpg\n\n"; 0181 confFile.close(); 0182 } 0183 } else { 0184 confPath.clear(); 0185 } 0186 } 0187 } 0188 0189 m_page4->gpg_conf_path->setText(confPath); 0190 m_page4->gpg_home_path->setText(gpgHome); 0191 } 0192 0193 bool kgpgOptions::isValidKeyserver(const QString &server) 0194 { 0195 if (server.isEmpty()) 0196 return false; 0197 0198 if (server.contains(QLatin1Char( ' ' ))) { 0199 KMessageBox::error(this, i18n("Key server URLs may not contain whitespace.")); 0200 return false; 0201 } 0202 0203 if (serverList.contains(server)) { 0204 KMessageBox::error(this, i18n("Key server already in the list.")); 0205 return false; 0206 } 0207 0208 return true; 0209 } 0210 0211 void kgpgOptions::slotAddKeyServer() 0212 { 0213 const QString newServer(QInputDialog::getText(this, i18n("Add New Key Server"), i18n("Server URL:"))); 0214 0215 if (!isValidKeyserver(newServer)) 0216 return; 0217 0218 m_serverModel->setStringList(m_serverModel->stringList() << newServer); 0219 settingsChangedSlot(); 0220 } 0221 0222 void kgpgOptions::slotChangeEncryptTo() 0223 { 0224 settingsChangedSlot(); 0225 } 0226 0227 void kgpgOptions::slotDelKeyServer() 0228 { 0229 QModelIndex cur = m_page6->ServerBox->selectionModel()->currentIndex(); 0230 m_serverModel->removeRows(cur.row(), 1); 0231 0232 settingsChangedSlot(); 0233 } 0234 0235 void kgpgOptions::slotEditKeyServer() 0236 { 0237 slotEditKeyServer(m_page6->ServerBox->selectionModel()->currentIndex()); 0238 } 0239 0240 void kgpgOptions::slotEditKeyServer(const QModelIndex &index) 0241 { 0242 if (!index.isValid()) 0243 return; 0244 0245 m_page6->ServerBox->edit(index); 0246 0247 settingsChangedSlot(); 0248 } 0249 0250 void kgpgOptions::slotDefaultKeyServer() 0251 { 0252 QModelIndex cur = m_page6->ServerBox->selectionModel()->currentIndex(); 0253 0254 m_serverModel->setDefault(cur.row()); 0255 0256 settingsChangedSlot(); 0257 } 0258 0259 void kgpgOptions::slotChangeKeyServerButtonEnable() 0260 { 0261 QModelIndex cur = m_page6->ServerBox->selectionModel()->currentIndex(); 0262 0263 m_page6->server_del->setEnabled(cur.isValid()); 0264 m_page6->server_edit->setEnabled(cur.isValid()); 0265 m_page6->server_default->setEnabled(cur.isValid() && 0266 (cur.row() != m_serverModel->defaultRow())); 0267 } 0268 0269 void kgpgOptions::updateWidgets() 0270 { 0271 alwaysKeyID = KgpgInterface::getGpgSetting(QLatin1String( "encrypt-to" ), KGpgSettings::gpgConfigPath()); 0272 0273 m_page7->EmailTemplateEdit->setPlainText(KGpgSettings::emailTemplate()); 0274 0275 m_encrypttoalways = !alwaysKeyID.isEmpty(); 0276 m_defaultencrypttoalways = false; 0277 0278 m_page1->encrypt_to_always->setChecked(m_encrypttoalways); 0279 0280 listKeys(); 0281 fileEncryptionKey = KGpgSettings::fileEncryptionKey(); 0282 // the contents are totally mess. There were key id, name and email stored 0283 // try to extract the key id, that's the only thing we really need 0284 if (!fileEncryptionKey.isEmpty()) { 0285 int idpos = m_page1->file_key->findText(fileEncryptionKey); 0286 if (idpos == -1) { 0287 idpos = fileEncryptionKey.indexOf(QRegularExpression(QStringLiteral("([0-9A-Fa-f]{8})+"))); 0288 if (idpos >= 0) { 0289 QString fileId = fileEncryptionKey.mid(idpos); 0290 idpos = fileId.indexOf(QRegularExpression(QStringLiteral("[^a-fA-F0-9]"))); 0291 if (idpos >= 0) { 0292 fileId.truncate(idpos); 0293 fileId.chop(fileId.length() % 8); 0294 } 0295 0296 KGpgKeyNode *anode = m_combomodel->getModel()->findKeyNode(fileId); 0297 0298 if (anode != nullptr) 0299 idpos = m_combomodel->nodeIndex(anode).row(); 0300 } 0301 } 0302 m_page1->file_key->setCurrentIndex(idpos); 0303 } 0304 0305 if (!alwaysKeyID.isEmpty()) { 0306 KGpgKeyNode *anode = m_combomodel->getModel()->findKeyNode(alwaysKeyID); 0307 if (anode != nullptr) { 0308 const QModelIndex midx(m_combomodel->nodeIndex(anode)); 0309 m_page1->always_key->setCurrentIndex(midx.row()); 0310 } 0311 } 0312 0313 gpgConfigPath = KGpgSettings::gpgConfigPath(); 0314 m_page4->gpg_conf_path->setText(QUrl::fromLocalFile(gpgConfigPath).fileName()); 0315 m_page4->gpg_home_path->setText(QUrl::fromLocalFile(gpgConfigPath).adjusted(QUrl::RemoveFilename).path()); 0316 0317 m_useagent = KgpgInterface::getGpgBoolSetting(QLatin1String( "use-agent" ), KGpgSettings::gpgConfigPath()); 0318 m_defaultuseagent = false; 0319 0320 m_page4->use_agent->setChecked(m_useagent); 0321 0322 m_emailSortingIndex = KGpgSettings::emailSorting(); 0323 m_page3->kcfg_EmailSorting->setCurrentIndex(m_emailSortingIndex); 0324 0325 m_serverModel->setStringList(serverList); 0326 if (!serverList.isEmpty()) 0327 m_serverModel->setDefault(keyServer); 0328 0329 qCDebug(KGPG_LOG_GENERAL) << "Finishing options"; 0330 } 0331 0332 void kgpgOptions::updateWidgetsDefault() 0333 { 0334 m_page7->EmailTemplateEdit->setPlainText(m_emailTemplate); 0335 0336 m_page1->encrypt_to_always->setChecked(m_defaultencrypttoalways); 0337 m_page4->use_agent->setChecked(m_defaultuseagent); 0338 0339 m_page4->gpg_conf_path->setText(defaultConfigPath); 0340 m_page4->gpg_home_path->setText(defaultHomePath); 0341 0342 m_serverModel->setStringList(defaultServerList); 0343 m_serverModel->setDefault(0); 0344 0345 m_page3->kcfg_EmailSorting->setCurrentIndex(KGpgSettings::EnumEmailSorting::Alphabetical); 0346 0347 qCDebug(KGPG_LOG_GENERAL) << "Finishing default options" ; 0348 } 0349 0350 void kgpgOptions::updateSettings() 0351 { 0352 // Update config path first! 0353 const QString newConfigFile = m_page4->gpg_home_path->text() + m_page4->gpg_conf_path->text(); 0354 if (newConfigFile != gpgConfigPath) { 0355 KGpgSettings::setGpgConfigPath(newConfigFile); 0356 Q_EMIT homeChanged(); 0357 0358 gpgConfigPath = newConfigFile; 0359 } 0360 0361 // save selected keys for file encryption & always encrypt with 0362 if (m_page1->kcfg_EncryptFilesTo->isChecked()) 0363 fileEncryptionKey = m_page1->file_key->itemData(m_page1->file_key->currentIndex(), Qt::ToolTipRole).toString(); 0364 else 0365 fileEncryptionKey.clear(); 0366 0367 if (fileEncryptionKey != KGpgSettings::fileEncryptionKey()) 0368 KGpgSettings::setFileEncryptionKey(fileEncryptionKey); 0369 0370 m_encrypttoalways = m_page1->encrypt_to_always->isChecked(); 0371 0372 if (m_encrypttoalways) 0373 alwaysKeyID = m_page1->always_key->itemData(m_page1->always_key->currentIndex(), Qt::ToolTipRole).toString(); 0374 else 0375 alwaysKeyID.clear(); 0376 0377 KgpgInterface::setGpgSetting(QLatin1String( "encrypt-to" ), alwaysKeyID, KGpgSettings::gpgConfigPath()); 0378 0379 Q_EMIT changeFont(m_fontchooser->font()); 0380 0381 // install service menus 0382 if (m_page7->kcfg_SignMenu->currentIndex() == KGpgSettings::EnumSignMenu::AllFiles) 0383 slotInstallSign(QLatin1String( "application/octet-stream" )); 0384 else 0385 slotRemoveMenu(QLatin1String( "signfile.desktop" )); 0386 0387 if (m_page7->kcfg_DecryptMenu->currentIndex() == KGpgSettings::EnumDecryptMenu::AllFiles) 0388 slotInstallDecrypt(QLatin1String( "application/octet-stream" )); 0389 else 0390 if (m_page7->kcfg_DecryptMenu->currentIndex() == KGpgSettings::EnumDecryptMenu::EncryptedFiles) 0391 slotInstallDecrypt(QLatin1String( "application/pgp-encrypted,application/pgp-signature,application/pgp-keys" )); 0392 else 0393 slotRemoveMenu(QLatin1String( "decryptfile.desktop" )); 0394 0395 m_useagent = m_page4->use_agent->isChecked(); 0396 0397 if (m_useagent) { 0398 KgpgInterface::setGpgBoolSetting(QLatin1String( "use-agent" ), true, KGpgSettings::gpgConfigPath()); 0399 KgpgInterface::setGpgBoolSetting(QLatin1String( "no-use-agent" ), false, KGpgSettings::gpgConfigPath()); 0400 } else { 0401 KgpgInterface::setGpgBoolSetting(QLatin1String( "use-agent" ), false, KGpgSettings::gpgConfigPath()); 0402 } 0403 0404 // Store the default server in ~/.gnupg 0405 KgpgInterface::setGpgSetting(QLatin1String("keyserver"), m_serverModel->defaultServer(), KGpgSettings::gpgConfigPath()); 0406 0407 // Store additional servers in kgpgrc. 0408 serverList = m_serverModel->stringList(); 0409 int defaultRow = m_serverModel->defaultRow(); 0410 if (!serverList.isEmpty()) 0411 serverList.move(defaultRow, 0); 0412 0413 KGpgSettings::setKeyServers(serverList); 0414 0415 if (keyUltimate != m_page3->kcfg_ColorUltimate->color()) 0416 Q_EMIT refreshTrust(TRUST_ULTIMATE, m_page3->kcfg_ColorUltimate->color()); 0417 0418 if (keyGood != m_page3->kcfg_ColorGood->color()) 0419 Q_EMIT refreshTrust(TRUST_FULL, m_page3->kcfg_ColorGood->color()); 0420 0421 if (keyExpired != m_page3->kcfg_ColorExpired->color()) 0422 Q_EMIT refreshTrust(TRUST_EXPIRED, m_page3->kcfg_ColorExpired->color()); 0423 0424 if (keyMarginal != m_page3->kcfg_ColorMarginal->color()) 0425 Q_EMIT refreshTrust(TRUST_MARGINAL, m_page3->kcfg_ColorMarginal->color()); 0426 0427 if (keyBad != m_page3->kcfg_ColorBad->color()) { 0428 Q_EMIT refreshTrust(TRUST_INVALID, m_page3->kcfg_ColorBad->color()); 0429 Q_EMIT refreshTrust(TRUST_DISABLED, m_page3->kcfg_ColorBad->color()); 0430 } 0431 0432 if (keyUnknown != m_page3->kcfg_ColorUnknown->color()) { 0433 Q_EMIT refreshTrust(TRUST_UNDEFINED, m_page3->kcfg_ColorUnknown->color()); 0434 Q_EMIT refreshTrust(TRUST_NONE, m_page3->kcfg_ColorUnknown->color()); 0435 Q_EMIT refreshTrust(TRUST_UNKNOWN, m_page3->kcfg_ColorUnknown->color()); 0436 } 0437 0438 if (keyRev != m_page3->kcfg_ColorRev->color()) 0439 Q_EMIT refreshTrust(TRUST_REVOKED, m_page3->kcfg_ColorRev->color()); 0440 0441 m_showsystray = m_page7->kcfg_ShowSystray->isChecked(); 0442 KGpgSettings::setShowSystray(m_showsystray); 0443 0444 m_trayaction = m_page7->kcfg_LeftClick->currentIndex(); 0445 KGpgSettings::setLeftClick(m_trayaction); 0446 0447 m_mailUats = m_page7->kcfg_MailUats->currentIndex(); 0448 KGpgSettings::setMailUats(m_mailUats); 0449 0450 m_emailTemplate = m_page7->EmailTemplateEdit->toPlainText(); 0451 KGpgSettings::setEmailTemplate(m_emailTemplate); 0452 0453 m_emailSortingIndex = m_page3->kcfg_EmailSorting->currentIndex(); 0454 KGpgSettings::setEmailSorting(m_emailSortingIndex); 0455 0456 KGpgSettings::self()->save(); 0457 m_config->sync(); 0458 0459 Q_EMIT settingsUpdated(); 0460 } 0461 0462 void kgpgOptions::listKeys() 0463 { 0464 if (m_model->rowCount(QModelIndex()) == 0) { 0465 ids += QLatin1String("0"); 0466 m_page1->file_key->addItem(i18nc("no key available", "none")); 0467 m_page1->file_key->setModel(nullptr); 0468 m_page1->always_key->addItem(i18nc("no key available", "none")); 0469 m_page1->always_key->setModel(nullptr); 0470 } else { 0471 m_page1->file_key->setModel(m_combomodel); 0472 m_page1->always_key->setModel(m_combomodel); 0473 } 0474 } 0475 0476 void kgpgOptions::slotInstallDecrypt(const QString &mimetype) 0477 { 0478 const QString path(QStandardPaths::writableLocation(QStandardPaths::GenericDataLocation) + QLatin1String("/konqueror/servicemenus/decryptfile.desktop" )); 0479 KDesktopFile configl2(path); 0480 if (!configl2.isImmutable()) { 0481 KConfigGroup gr(configl2.group(u"Desktop Entry"_s)); 0482 0483 gr.writeXdgListEntry("MimeType", QStringList(mimetype)); 0484 gr.writeEntry("X-KDE-ServiceTypes", "KonqPopupMenu/Plugin"); 0485 gr.writeEntry("Actions", "decrypt"); 0486 0487 gr = configl2.group(u"Desktop Action decrypt"_s); 0488 gr.writeEntry("Name", i18n("Decrypt File")); 0489 //gr.writeEntry("Icon", "decrypt_file"); 0490 gr.writeEntry("Exec", "kgpg %U"); 0491 } 0492 } 0493 0494 void kgpgOptions::slotInstallSign(const QString &mimetype) 0495 { 0496 QString path(QStandardPaths::writableLocation(QStandardPaths::GenericDataLocation) + QLatin1String("/kde5/services/") + QLatin1String( "ServiceMenus/signfile.desktop" )); 0497 KDesktopFile configl2(path); 0498 if (!configl2.isImmutable()) { 0499 KConfigGroup gr = configl2.group(u"Desktop Entry"_s); 0500 gr.writeXdgListEntry("MimeType", QStringList(mimetype)); 0501 gr.writeEntry("X-KDE-ServiceTypes", "KonqPopupMenu/Plugin"); 0502 gr.writeEntry("Actions", "sign"); 0503 0504 gr = configl2.group(u"Desktop Action sign"_s); 0505 gr.writeEntry("Name", i18n("Sign File")); 0506 //gr.writeEntry("Icon", "sign_file"); 0507 gr.writeEntry("Exec","kgpg -S %F"); 0508 } 0509 } 0510 0511 void kgpgOptions::slotRemoveMenu(const QString &menu) 0512 { 0513 QString path = QStandardPaths::writableLocation(QStandardPaths::GenericDataLocation) + QLatin1String("/kde5/services/") + QLatin1String( "ServiceMenus/" ) + menu; 0514 QFile qfile(path); 0515 if (qfile.exists()) 0516 qfile.remove(); 0517 } 0518 0519 bool kgpgOptions::hasChanged() 0520 { 0521 if (m_page1->kcfg_EncryptFilesTo->isChecked() && (m_page1->file_key->currentText() != fileEncryptionKey)) 0522 return true; 0523 0524 if (m_page1->encrypt_to_always->isChecked() != m_encrypttoalways) 0525 return true; 0526 0527 if (m_page1->encrypt_to_always->isChecked() && 0528 (m_page1->always_key->itemData(m_page1->always_key->currentIndex(), Qt::ToolTipRole).toString()) != alwaysKeyID) 0529 return true; 0530 0531 if (m_page4->gpg_conf_path->text() != QUrl::fromLocalFile(gpgConfigPath).fileName()) 0532 return true; 0533 0534 if (m_page4->gpg_home_path->text() != QUrl::fromLocalFile(gpgConfigPath).adjusted(QUrl::RemoveFilename).path()) 0535 return true; 0536 0537 if (m_page4->use_agent->isChecked() != m_useagent) 0538 return true; 0539 0540 // Did the default server change 0541 if (m_serverModel->defaultServer() != keyServer) 0542 return true; 0543 0544 // Did the servers change? 0545 if (m_serverModel->stringList() != serverList) 0546 return true; 0547 0548 if (m_page7->kcfg_ShowSystray->isChecked() != m_showsystray) 0549 return true; 0550 0551 if (m_page7->kcfg_LeftClick->currentIndex() != m_trayaction) 0552 return true; 0553 0554 if (m_page7->kcfg_MailUats->currentIndex() != m_mailUats) 0555 return true; 0556 0557 if (m_page3->kcfg_EmailSorting->currentIndex() != m_emailSortingIndex) 0558 return true; 0559 0560 return false; 0561 } 0562 0563 bool kgpgOptions::isDefault() 0564 { 0565 if (m_page1->encrypt_to_always->isChecked() != m_defaultencrypttoalways) 0566 return false; 0567 0568 if (m_page4->gpg_conf_path->text() != defaultConfigPath) 0569 return false; 0570 0571 if (m_page4->gpg_home_path->text() != defaultHomePath) 0572 return false; 0573 0574 if (m_page4->use_agent->isChecked() != m_defaultuseagent) 0575 return false; 0576 0577 if (m_serverModel->defaultServer() != defaultKeyServer) 0578 return false; 0579 0580 if (m_serverModel->stringList() != defaultServerList) 0581 return false; 0582 0583 if (m_page7->kcfg_ShowSystray->isChecked() != m_showsystray) 0584 return false; 0585 0586 if (m_page7->kcfg_LeftClick->currentIndex() != KGpgSettings::EnumLeftClick::KeyManager) 0587 return false; 0588 0589 if (m_page7->kcfg_MailUats->currentIndex() != KGpgSettings::EnumMailUats::All) 0590 return false; 0591 0592 if (m_page3->kcfg_EmailSorting->currentIndex() != KGpgSettings::EnumEmailSorting::Alphabetical) 0593 return false; 0594 0595 return true; 0596 } 0597 0598 void kgpgOptions::slotSystrayEnable() 0599 { 0600 m_page7->kcfg_LeftClick->setEnabled(m_page7->kcfg_ShowSystray->isChecked()); 0601 }