[pim/kalarm] /: Add preferences option to enable/disable Akonadi plugin
David Jarvie
null at kde.org
Sun Apr 24 18:49:09 BST 2022
Git commit 9ce69fac1d318fb3ebf2a9808eb2c06891c17ea3 by David Jarvie.
Committed on 24/04/2022 at 17:48.
Pushed by djarvie into branch 'master'.
Add preferences option to enable/disable Akonadi plugin
M +2 -2 Changelog
M +18 -6 doc/index.docbook
M +4 -5 src/birthdaydlg.cpp
M +5 -0 src/data/kalarmconfig.kcfg
M +2 -3 src/editdlgtypes.cpp
M +2 -3 src/functions.cpp
M +2 -3 src/kamail.cpp
M +2 -3 src/mainwindow.cpp
M +2 -3 src/messagewindow.cpp
M +40 -1 src/prefdlg.cpp
M +4 -0 src/prefdlg_p.h
M +28 -4 src/preferences.cpp
M +17 -0 src/preferences.h
M +2 -2 src/resources/migration/fileresourcemigrator.cpp
https://invent.kde.org/pim/kalarm/commit/9ce69fac1d318fb3ebf2a9808eb2c06891c17ea3
diff --git a/Changelog b/Changelog
index 3099a66c..6171ab49 100644
--- a/Changelog
+++ b/Changelog
@@ -1,7 +1,7 @@
KAlarm Change Log
-=== Version 3.5.0 (KDE Gear 22.08) --- 22 April 2022 ===
-* Provide option to build KAlarm without any Akonadi dependency.
+=== Version 3.5.0 (KDE Gear 22.08) --- 24 April 2022 ===
+* Provide options to build and/or run KAlarm without any Akonadi dependency.
=== Version 3.4.1 (KDE Gear 22.04.1) --- 20 April 2022 ===
* Fix checkboxes being disabled in Preferences dialogue.
diff --git a/doc/index.docbook b/doc/index.docbook
index 19c855c0..cac9a6ba 100644
--- a/doc/index.docbook
+++ b/doc/index.docbook
@@ -39,7 +39,7 @@
<!-- Don't change format of date and version of the documentation -->
-<date>2022-4-22</date>
+<date>2022-4-24</date>
<releaseinfo>3.5.0 (KDE Gear 22.08)</releaseinfo>
<abstract>
@@ -1088,7 +1088,7 @@ context menu.</para>
<note><para>This function is only available if &kalarm;'s
<link linkend="akonadi-plugin">Akonadi plugin</link> is
-installed.</para>
+installed and enabled.</para>
</note>
<para>You can set up display alarms for birthdays stored in
@@ -1527,7 +1527,8 @@ message body in the three edit fields. Use the button beside the
addressee edit box to display your &kde; address book from which you
can select email recipients. (Note that the button is only shown if
&kalarm;'s
-<link linkend="akonadi-plugin">Akonadi plugin</link> is installed.)
+<link linkend="akonadi-plugin">Akonadi plugin</link> is installed and
+enabled.)
Attachments may be added using the <guibutton>Add...</guibutton>
button. Note that attached files must still exist when the alarm is
triggered; no copy is stored at the time the alarm is configured. To
@@ -2677,6 +2678,13 @@ codes:</para>
quoted before being inserted into the terminal window command.</para>
</listitem>
+<listitem><para><guilabel>Enable Akonadi</guilabel>:
+Choose whether to use &akonadi; to provide features which depend on it.
+See <link linkend="akonadi-plugin">Akonadi plugin</link> for details.
+Note that this option is only shown if the Akonadi plugin is
+installed.</para>
+</listitem>
+
</itemizedlist>
</sect1>
@@ -2801,7 +2809,8 @@ be archived according to the selected options.</para>
for sending and addressing email alarms:</para>
<note><para>Options dependent on &kmail; are only available if &kalarm;'s
-<link linkend="akonadi-plugin">Akonadi plugin</link> is installed.</para>
+<link linkend="akonadi-plugin">Akonadi plugin</link> is installed and
+enabled.</para>
</note>
<itemizedlist>
@@ -5049,8 +5058,8 @@ distributed with &kalarm;.</para>
<answer>
<para>&kalarm; uses its Akonadi plugin to provide all features which
depend on &akonadi; (the &kde; &PIM; cross-desktop storage service).
-If this plugin is not installed, &kalarm; will lack the following
-features:
+If this plugin is not installed and enabled, &kalarm; will lack the
+following features:
<itemizedlist>
<listitem>
<simpara>Sending emails via &kmail;, leaving &Sendmail; as the only
@@ -5072,6 +5081,9 @@ run of a new version of &kalarm;.</simpara>
</listitem>
</itemizedlist>
</para>
+<para>If the plugin is installed, it can be enabled or disabled in the
+<link linkend="preferences-general">General</link> tab of the
+Configuration dialog.</para>
</answer>
</qandaentry>
diff --git a/src/birthdaydlg.cpp b/src/birthdaydlg.cpp
index 3dde3e2c..62a0fd0b 100644
--- a/src/birthdaydlg.cpp
+++ b/src/birthdaydlg.cpp
@@ -8,7 +8,6 @@
#include "birthdaydlg.h"
-#include "akonadiplugin/akonadiplugin.h"
#include "editdlgtypes.h"
#include "fontcolourbutton.h"
#include "kalarmapp.h"
@@ -20,8 +19,8 @@
#include "soundpicker.h"
#include "specialactions.h"
#include "lib/checkbox.h"
-#include "pluginmanager.h"
#include "lib/shellprocess.h"
+#include "akonadiplugin/akonadiplugin.h"
#include "kalarm_debug.h"
#include <KLocalizedString>
@@ -106,9 +105,9 @@ BirthdayDlg::BirthdayDlg(QWidget* parent)
auto layout = new QVBoxLayout(group);
layout->setContentsMargins(0, 0, 0, 0);
- AkonadiPlugin* akonadiPlugin = PluginManager::instance()->akonadiPlugin();
+ AkonadiPlugin* akonadiPlugin = Preferences::akonadiPlugin();
if (!akonadiPlugin)
- return; // no error message - this constructor should only be called if Akonadi plugin exists
+ return; // no error message - this constructor should only be called if using Akonadi plugin
mBirthdaySortModel = akonadiPlugin->createBirthdayModels(mainWidget, this);
connect(akonadiPlugin, &AkonadiPlugin::birthdayModelDataChanged, this, &BirthdayDlg::resizeViewColumns);
setSortModelSelectionList();
@@ -365,7 +364,7 @@ void BirthdayDlg::slotTextLostFocus()
*/
void BirthdayDlg::setSortModelSelectionList()
{
- AkonadiPlugin* akonadiPlugin = PluginManager::instance()->akonadiPlugin();
+ AkonadiPlugin* akonadiPlugin = Preferences::akonadiPlugin();
if (!akonadiPlugin)
return;
diff --git a/src/data/kalarmconfig.kcfg b/src/data/kalarmconfig.kcfg
index 88eaf3b1..dbcb9d1b 100644
--- a/src/data/kalarmconfig.kcfg
+++ b/src/data/kalarmconfig.kcfg
@@ -71,6 +71,11 @@ SPDX-License-Identifier: GPL-2.0-or-later
<choice name="FileResources"><label context="@option">File Resources</label></choice>
</choices>
</entry>
+ <entry name="UseAkonadiIfAvailable" type="Bool">
+ <label context="@label">Enable Akonadi plugin</label>
+ <whatsthis context="@info:whatsthis">Choose whether to enable KAlarm's Akonadi plugin, which uses Akonadi to provide features including birthday import, some email functions, email address book lookup, and Akonadi resource migration on first run.</whatsthis>
+ <default>true</default>
+ </entry>
<entry name="Base_TimeZone" key="TimeZone" type="String">
<label context="@label">Time zone</label>
<whatsthis context="@info:whatsthis">Select the time zone which KAlarm should use as its default for displaying and entering dates and times.</whatsthis>
diff --git a/src/editdlgtypes.cpp b/src/editdlgtypes.cpp
index 4174e87b..482b412b 100644
--- a/src/editdlgtypes.cpp
+++ b/src/editdlgtypes.cpp
@@ -18,7 +18,6 @@
#include "mainwindow.h"
#include "messagewindow.h"
#include "pickfileradio.h"
-#include "pluginmanager.h"
#include "reminder.h"
#include "soundpicker.h"
#include "sounddlg.h"
@@ -1196,7 +1195,7 @@ void EditEmailAlarmDlg::type_init(QWidget* parent, QVBoxLayout* frameLayout)
"commas or semicolons."));
connect(mEmailToEdit, &LineEdit::textChanged, this, &EditEmailAlarmDlg::contentsChanged);
- if (PluginManager::instance()->akonadiPlugin())
+ if (Preferences::useAkonadi())
{
grid->addWidget(mEmailToEdit, 1, 1);
@@ -1505,7 +1504,7 @@ void EditEmailAlarmDlg::slotTrySuccess()
*/
void EditEmailAlarmDlg::openAddressBook()
{
- AkonadiPlugin* akonadiPlugin = PluginManager::instance()->akonadiPlugin();
+ AkonadiPlugin* akonadiPlugin = Preferences::akonadiPlugin();
if (akonadiPlugin)
{
Person person;
diff --git a/src/functions.cpp b/src/functions.cpp
index 4b5c5ea7..3c9b16e9 100644
--- a/src/functions.cpp
+++ b/src/functions.cpp
@@ -14,7 +14,6 @@
#include "kamail.h"
#include "mainwindow.h"
#include "messagewindow.h"
-#include "pluginmanager.h"
#include "preferences.h"
#include "resourcescalendar.h"
#include "templatelistview.h"
@@ -1871,7 +1870,7 @@ bool dropAkonadiEmail(const QMimeData* data, QUrl& url, AlarmText& alarmText)
else
{
url = urls.at(0);
- AkonadiPlugin* akonadiPlugin = PluginManager::instance()->akonadiPlugin();
+ AkonadiPlugin* akonadiPlugin = Preferences::akonadiPlugin();
if (akonadiPlugin)
{
KAEvent::EmailId emailId;
@@ -2090,7 +2089,7 @@ KAlarm::UpdateResult sendToKOrganizer(const KAEvent& event)
*/
KAlarm::UpdateResult deleteFromKOrganizer(const QString& eventID)
{
- AkonadiPlugin* akonadiPlugin = PluginManager::instance()->akonadiPlugin();
+ AkonadiPlugin* akonadiPlugin = Preferences::akonadiPlugin();
if (!akonadiPlugin)
return KAlarm::UpdateResult(KAlarm::UPDATE_KORG_ERR);
diff --git a/src/kamail.cpp b/src/kamail.cpp
index 2b4857cf..5f453fa9 100644
--- a/src/kamail.cpp
+++ b/src/kamail.cpp
@@ -12,7 +12,6 @@
#include "functions.h"
#include "kalarmapp.h"
#include "mainwindow.h"
-#include "pluginmanager.h"
#include "preferences.h"
#include "lib/messagebox.h"
#include "kalarmcalendar/identities.h"
@@ -202,7 +201,7 @@ int KAMail::send(JobData& jobdata, QStringList& errmsgs)
notifyQueued(jobdata.event);
return 1;
}
- else if (PluginManager::instance()->akonadiPlugin())
+ else if (Preferences::useAkonadi())
{
qCDebug(KALARM_LOG) << "KAMail::send: Sending via KDE";
initHeaders(*message, jobdata);
@@ -216,7 +215,7 @@ int KAMail::send(JobData& jobdata, QStringList& errmsgs)
if (!mAkonadiPlugin)
{
- mAkonadiPlugin = PluginManager::instance()->akonadiPlugin();
+ mAkonadiPlugin = Preferences::akonadiPlugin();
connect(mAkonadiPlugin, &AkonadiPlugin::emailSent, instance(), &KAMail::akonadiEmailSent);
connect(mAkonadiPlugin, &AkonadiPlugin::emailQueued, instance(), [](const KAEvent& e) { notifyQueued(e); });
}
diff --git a/src/mainwindow.cpp b/src/mainwindow.cpp
index 8636af53..37eb6a90 100644
--- a/src/mainwindow.cpp
+++ b/src/mainwindow.cpp
@@ -18,7 +18,6 @@
#include "kamail.h"
#include "messagedisplay.h"
#include "newalarmaction.h"
-#include "pluginmanager.h"
#include "prefdlg.h"
#include "preferences.h"
#include "resourcescalendar.h"
@@ -540,7 +539,7 @@ void MainWindow::initActions()
actions->addAction(QStringLiteral("importAlarms"), mActionImportAlarms);
connect(mActionImportAlarms, &QAction::triggered, this, &MainWindow::slotImportAlarms);
- if (PluginManager::instance()->akonadiPlugin())
+ if (Preferences::useAkonadi())
{
mActionImportBirthdays = new QAction(i18nc("@action", "Import Birthdays..."), this);
actions->addAction(QStringLiteral("importBirthdays"), mActionImportBirthdays);
@@ -959,7 +958,7 @@ void MainWindow::slotExportAlarms()
*/
void MainWindow::slotBirthdays()
{
- if (PluginManager::instance()->akonadiPlugin())
+ if (Preferences::useAkonadi())
{
// Use AutoQPointer to guard against crash on application exit while
// the dialogue is still open. It prevents double deletion (both on
diff --git a/src/messagewindow.cpp b/src/messagewindow.cpp
index 9380eb64..7b33c852 100644
--- a/src/messagewindow.cpp
+++ b/src/messagewindow.cpp
@@ -15,7 +15,6 @@
#include "functions.h"
#include "kalarmapp.h"
#include "mainwindow.h"
-#include "pluginmanager.h"
#include "preferences.h"
#include "resourcescalendar.h"
#include "lib/config.h"
@@ -467,7 +466,7 @@ void MessageWindow::setUpDisplay()
mHelper->setSilenceButton(mSilenceButton);
}
- if (mEmailId() >= 0 && PluginManager::instance()->akonadiPlugin())
+ if (mEmailId() >= 0 && Preferences::useAkonadi())
{
// KMail button
mKMailButton = new PushButton(topWidget);
@@ -1092,7 +1091,7 @@ void MessageWindow::slotOk()
*/
void MessageWindow::slotShowKMailMessage()
{
- AkonadiPlugin* akonadiPlugin = PluginManager::instance()->akonadiPlugin();
+ AkonadiPlugin* akonadiPlugin = Preferences::akonadiPlugin();
if (!akonadiPlugin)
return;
qCDebug(KALARM_LOG) << "MessageWindow::slotShowKMailMessage";
diff --git a/src/prefdlg.cpp b/src/prefdlg.cpp
index 37e55f44..2a4a4c52 100644
--- a/src/prefdlg.cpp
+++ b/src/prefdlg.cpp
@@ -537,6 +537,22 @@ MiscPrefTab::MiscPrefTab(StackedScrollGroup* scrollGroup)
radio->setWhatsThis(wt);
mXtermCommand->setWhatsThis(wt);
+ if (PluginManager::instance()->akonadiPlugin())
+ {
+ // Plugins
+ group = new QGroupBox(i18nc("@title:group", "Plugins"));
+ topLayout()->addWidget(group);
+ vlayout = new QVBoxLayout(group);
+
+ // Akonadi plugin
+ mUseAkonadi = new QCheckBox(i18nc("@option:check", "Enable Akonadi"), group);
+ mUseAkonadi->setToolTip(i18nc("@info:tooltip",
+ "Enable the use of Akonadi to provide features including birthday import, some email functions, and email address book lookup."));
+ mUseAkonadi->setWhatsThis(i18nc("@info:whatsthis",
+ "Enable the use of Akonadi to provide features including birthday import, some email functions, and email address book lookup."));
+ vlayout->addWidget(mUseAkonadi, 0, Qt::AlignLeft);
+ }
+
topLayout()->addStretch(); // top adjust the widgets
}
@@ -560,6 +576,8 @@ void MiscPrefTab::restore(bool defaults, bool)
mXtermType->setButton(id);
mXtermCommand->setEnabled(id == mXtermCount);
mXtermCommand->setText(id == mXtermCount ? xtermCmd : QString());
+ if (mUseAkonadi)
+ mUseAkonadi->setChecked(Preferences::useAkonadi());
}
void MiscPrefTab::apply(bool syncToDisc)
@@ -617,6 +635,12 @@ void MiscPrefTab::apply(bool syncToDisc)
QString text = (xtermID < mXtermCount) ? xtermCommands[xtermID] : mXtermCommand->text();
if (text != Preferences::cmdXTermCommand())
Preferences::setCmdXTermCommand(text);
+ if (mUseAkonadi)
+ {
+ b = mUseAkonadi->isChecked();
+ if (b != Preferences::useAkonadi())
+ Preferences::setUseAkonadi(b);
+ }
PrefsTabBase::apply(syncToDisc);
}
@@ -1150,6 +1174,21 @@ void EmailPrefTab::apply(bool syncToDisc)
PrefsTabBase::apply(syncToDisc);
}
+void EmailPrefTab::showEvent(QShowEvent* e)
+{
+ bool enable = Preferences::useAkonadiIfAvailable();
+ if (mKMailButton)
+ {
+ mKMailButton->setEnabled(enable);
+ if (!enable)
+ mEmailClient->setButton(Preferences::sendmail);
+ }
+ if (mEmailCopyToKMail)
+ mEmailCopyToKMail->setEnabled(enable);
+
+ PrefsTabBase::showEvent(e);
+}
+
void EmailPrefTab::setEmailAddress(Preferences::MailFrom from, const QString& address)
{
mFromAddressGroup->setButton(from);
@@ -1165,7 +1204,7 @@ void EmailPrefTab::setEmailBccAddress(bool useSystemSettings, const QString& add
void EmailPrefTab::slotEmailClientChanged(QAbstractButton* button)
{
if (mEmailCopyToKMail)
- mEmailCopyToKMail->setEnabled(button == mSendmailButton);
+ mEmailCopyToKMail->setEnabled(button == mSendmailButton && Preferences::useAkonadiIfAvailable());
}
void EmailPrefTab::slotFromAddrChanged(QAbstractButton* button)
diff --git a/src/prefdlg_p.h b/src/prefdlg_p.h
index bbc6698e..1c5fb8ee 100644
--- a/src/prefdlg_p.h
+++ b/src/prefdlg_p.h
@@ -86,6 +86,7 @@ private:
QCheckBox* mQuitWarn;
QCheckBox* mUseAlarmNames;
QCheckBox* mConfirmAlarmDeletion;
+ QCheckBox* mUseAkonadi {nullptr};
TimeSpinBox* mDefaultDeferTime;
ButtonGroup* mXtermType;
QLineEdit* mXtermCommand;
@@ -158,6 +159,9 @@ public:
void restore(bool defaults, bool allTabs) override;
void apply(bool syncToDisc) override;
+protected:
+ void showEvent(QShowEvent*) override;
+
private Q_SLOTS:
void slotEmailClientChanged(QAbstractButton*);
void slotFromAddrChanged(QAbstractButton*);
diff --git a/src/preferences.cpp b/src/preferences.cpp
index e1772e20..173a9b77 100644
--- a/src/preferences.cpp
+++ b/src/preferences.cpp
@@ -103,6 +103,30 @@ Preferences::Preferences()
setVersion(QStringLiteral(KALARM_VERSION));
}
+/******************************************************************************
+* Get whether the Akonadi plugin should be used, if available.
+*/
+bool Preferences::useAkonadi()
+{
+ return self()->mUseAkonadiIfAvailable && PluginManager::instance()->akonadiPlugin();
+}
+
+/******************************************************************************
+* Return the Akonadi plugin to use, or null if not being used or not available.
+*/
+AkonadiPlugin* Preferences::akonadiPlugin()
+{
+ if (!self()->mUseAkonadiIfAvailable)
+ return nullptr;
+ return PluginManager::instance()->akonadiPlugin();
+}
+
+void Preferences::setUseAkonadi(bool yes)
+{
+ if (PluginManager::instance()->akonadiPlugin())
+ self()->setUseAkonadiIfAvailable(yes);
+}
+
/******************************************************************************
* Auto hiding of the system tray icon is only allowed on desktops which provide
* GUI controls to show hidden icons.
@@ -380,28 +404,28 @@ void Preferences::workTimeChange(const QDateTime& start, const QDateTime& end, i
Preferences::MailClient Preferences::emailClient()
{
- if (!PluginManager::instance()->akonadiPlugin())
+ if (!useAkonadi())
return sendmail;
return static_cast<MailClient>(self()->mBase_EmailClient);
}
void Preferences::setEmailClient(MailClient client)
{
- if (!PluginManager::instance()->akonadiPlugin())
+ if (!useAkonadi())
client = sendmail;
self()->setBase_EmailClient(client);
}
bool Preferences::emailCopyToKMail()
{
- if (!PluginManager::instance()->akonadiPlugin())
+ if (!useAkonadi())
return false;
return self()->mBase_EmailCopyToKMail && static_cast<MailClient>(self()->mBase_EmailClient) == sendmail;
}
void Preferences::setEmailCopyToKMail(bool yes)
{
- if (!PluginManager::instance()->akonadiPlugin())
+ if (!useAkonadi())
yes = false;
self()->setBase_EmailCopyToKMail(yes);
}
diff --git a/src/preferences.h b/src/preferences.h
index eb2c744d..2bda10ef 100644
--- a/src/preferences.h
+++ b/src/preferences.h
@@ -18,6 +18,7 @@
using namespace KAlarmCal;
namespace KHolidays { class HolidayRegion; }
+class AkonadiPlugin;
// Settings configured in the Preferences dialog
@@ -36,6 +37,22 @@ public:
{
QObject::connect(self(), signal, receiver, member);
}
+
+ /** Return whether Akonadi plugin is available and should be used.
+ * @see useAkonadiIfAvailable().
+ */
+ static bool useAkonadi();
+
+ /** Return the Akonadi plugin.
+ * @return the Akonadi plugin, or null if not available or not to be used.
+ */
+ static AkonadiPlugin* akonadiPlugin();
+
+ /** Set whether to use the Akonadi plugin if available.
+ * @see setUseAkonadiIfAvailable().
+ */
+ static void setUseAkonadi(bool yes);
+
static int autoHideSystemTray();
static void setAutoHideSystemTray(int timeout);
static bool autoStartChangedByUser() { return mAutoStartChangedByUser; }
diff --git a/src/resources/migration/fileresourcemigrator.cpp b/src/resources/migration/fileresourcemigrator.cpp
index 13ea3f59..9451a923 100644
--- a/src/resources/migration/fileresourcemigrator.cpp
+++ b/src/resources/migration/fileresourcemigrator.cpp
@@ -9,7 +9,7 @@
#include "fileresourcemigrator.h"
#include "dirresourceimportdialog.h"
-#include "pluginmanager.h"
+#include "preferences.h"
#include "resources/calendarfunctions.h"
#include "resources/fileresourcecalendarupdater.h"
#include "resources/fileresourceconfigmanager.h"
@@ -109,7 +109,7 @@ void FileResourceMigrator::start()
else
{
// There are no file system resources, so migrate any Akonadi resources.
- mAkonadiPlugin = PluginManager::instance()->akonadiPlugin();
+ mAkonadiPlugin = Preferences::akonadiPlugin();
if (!mAkonadiPlugin)
akonadiMigrationComplete(false); // Akonadi plugin is not available
else
More information about the kde-doc-english
mailing list