You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
127 lines
3.7 KiB
127 lines
3.7 KiB
/* |
|
SPDX-FileCopyrightText: 2014-2020 Laurent Montel <montel@kde.org> |
|
|
|
SPDX-License-Identifier: GPL-2.0-or-later |
|
*/ |
|
|
|
#include "followupreminderutil.h" |
|
#include "followupreminderinfo.h" |
|
#include <AkonadiCore/ServerManager> |
|
|
|
#include <QDBusInterface> |
|
#include "followupreminderagentsettings.h" |
|
|
|
namespace { |
|
QString serviceName() |
|
{ |
|
return Akonadi::ServerManager::agentServiceName(Akonadi::ServerManager::Agent, |
|
QStringLiteral("akonadi_followupreminder_agent")); |
|
} |
|
|
|
QString dbusPath() |
|
{ |
|
return QStringLiteral("/FollowUpReminder"); |
|
} |
|
} |
|
|
|
bool FollowUpReminder::FollowUpReminderUtil::followupReminderAgentWasRegistered() |
|
{ |
|
QDBusInterface interface(serviceName(), dbusPath()); |
|
return interface.isValid(); |
|
} |
|
|
|
bool FollowUpReminder::FollowUpReminderUtil::followupReminderAgentEnabled() |
|
{ |
|
return FollowUpReminderAgentSettings::self()->enabled(); |
|
} |
|
|
|
void FollowUpReminder::FollowUpReminderUtil::reload() |
|
{ |
|
QDBusInterface interface(serviceName(), dbusPath()); |
|
if (interface.isValid()) { |
|
interface.call(QStringLiteral("reload")); |
|
} |
|
} |
|
|
|
void FollowUpReminder::FollowUpReminderUtil::forceReparseConfiguration() |
|
{ |
|
FollowUpReminderAgentSettings::self()->save(); |
|
FollowUpReminderAgentSettings::self()->config()->reparseConfiguration(); |
|
} |
|
|
|
KSharedConfig::Ptr FollowUpReminder::FollowUpReminderUtil::defaultConfig() |
|
{ |
|
return KSharedConfig::openConfig(QStringLiteral("akonadi_followupreminder_agentrc"), KConfig::SimpleConfig); |
|
} |
|
|
|
void FollowUpReminder::FollowUpReminderUtil::writeFollowupReminderInfo(KSharedConfig::Ptr config, FollowUpReminder::FollowUpReminderInfo *info, bool forceReload) |
|
{ |
|
if (!info || !info->isValid()) { |
|
return; |
|
} |
|
|
|
KConfigGroup general = config->group(QStringLiteral("General")); |
|
int value = general.readEntry("Number", 0); |
|
int identifier = info->uniqueIdentifier(); |
|
if (identifier == -1) { |
|
identifier = value; |
|
} |
|
++value; |
|
|
|
const QString groupName = FollowUpReminder::FollowUpReminderUtil::followUpReminderPattern().arg(identifier); |
|
// first, delete all filter groups: |
|
const QStringList filterGroups = config->groupList(); |
|
for (const QString &group : filterGroups) { |
|
if (group == groupName) { |
|
config->deleteGroup(group); |
|
} |
|
} |
|
KConfigGroup group = config->group(groupName); |
|
info->writeConfig(group, identifier); |
|
|
|
general.writeEntry("Number", value); |
|
|
|
config->sync(); |
|
config->reparseConfiguration(); |
|
if (forceReload) { |
|
reload(); |
|
} |
|
} |
|
|
|
bool FollowUpReminder::FollowUpReminderUtil::removeFollowupReminderInfo(KSharedConfig::Ptr config, const QList<qint32> &listRemove, bool forceReload) |
|
{ |
|
if (listRemove.isEmpty()) { |
|
return false; |
|
} |
|
|
|
bool needSaveConfig = false; |
|
KConfigGroup general = config->group(QStringLiteral("General")); |
|
int value = general.readEntry("Number", 0); |
|
|
|
for (qint32 identifier : listRemove) { |
|
const QString groupName = FollowUpReminder::FollowUpReminderUtil::followUpReminderPattern().arg(identifier); |
|
const QStringList filterGroups = config->groupList(); |
|
for (const QString &group : filterGroups) { |
|
if (group == groupName) { |
|
config->deleteGroup(group); |
|
--value; |
|
needSaveConfig = true; |
|
} |
|
} |
|
} |
|
if (needSaveConfig) { |
|
general.writeEntry("Number", value); |
|
|
|
config->sync(); |
|
config->reparseConfiguration(); |
|
if (forceReload) { |
|
reload(); |
|
} |
|
} |
|
return needSaveConfig; |
|
} |
|
|
|
QString FollowUpReminder::FollowUpReminderUtil::followUpReminderPattern() |
|
{ |
|
return QStringLiteral("FollowupReminderItem %1"); |
|
}
|
|
|