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.
 
 
 

144 lines
5.5 KiB

/*
Copyright (C) 2013-2020 Laurent Montel <montel@kde.org>
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public
License as published by the Free Software Foundation; either
version 2 of the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; see the file COPYING. If not, write to
the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
Boston, MA 02110-1301, USA.
*/
#include "sendlaterutil.h"
#include "sendlateragentsettings.h"
#include "sendlateragent_debug.h"
#include <MessageComposer/SendLaterInfo>
#include <KConfigGroup>
#include <AkonadiCore/ServerManager>
#include <QStringList>
bool SendLaterUtil::compareSendLaterInfo(MessageComposer::SendLaterInfo *left,
MessageComposer::SendLaterInfo *right)
{
if (left->dateTime() == right->dateTime()) {
//Set no recursive first.
if (left->isRecurrence()) {
return false;
}
}
return left->dateTime() < right->dateTime();
}
static QDateTime updateRecurence(MessageComposer::SendLaterInfo *info, QDateTime dateTime)
{
switch (info->recurrenceUnit()) {
case MessageComposer::SendLaterInfo::Days:
dateTime = dateTime.addDays(info->recurrenceEachValue());
break;
case MessageComposer::SendLaterInfo::Weeks:
dateTime = dateTime.addDays(info->recurrenceEachValue() * 7);
break;
case MessageComposer::SendLaterInfo::Months:
dateTime = dateTime.addMonths(info->recurrenceEachValue());
break;
case MessageComposer::SendLaterInfo::Years:
dateTime = dateTime.addYears(info->recurrenceEachValue());
break;
}
return dateTime;
}
void SendLaterUtil::changeRecurrentDate(MessageComposer::SendLaterInfo *info)
{
if (info && info->isRecurrence()) {
qCDebug(SENDLATERAGENT_LOG) << "BEFORE SendLaterUtil::changeRecurrentDate " << info->dateTime().toString();
QDateTime newInfoDateTime = info->dateTime();
newInfoDateTime = updateRecurence(info, newInfoDateTime);
qCDebug(SENDLATERAGENT_LOG) << " QDateTime::currentDateTime()" << QDateTime::currentDateTime().toString();
while (newInfoDateTime <= QDateTime::currentDateTime()) {
newInfoDateTime = updateRecurence(info, newInfoDateTime);
}
info->setDateTime(newInfoDateTime);
qCDebug(SENDLATERAGENT_LOG) << "AFTER SendLaterUtil::changeRecurrentDate " << info->dateTime().toString() << " info" << info << "New date" << newInfoDateTime;
writeSendLaterInfo(defaultConfig(), info);
}
}
KSharedConfig::Ptr SendLaterUtil::defaultConfig()
{
return KSharedConfig::openConfig(QStringLiteral("akonadi_sendlater_agentrc"), KConfig::SimpleConfig);
}
MessageComposer::SendLaterInfo *SendLaterUtil::readSendLaterInfo(KConfigGroup &config)
{
auto info = new MessageComposer::SendLaterInfo;
if (config.hasKey(QStringLiteral("lastDateTimeSend"))) {
info->setLastDateTimeSend(QDateTime::fromString(config.readEntry("lastDateTimeSend"), Qt::ISODate));
}
info->setDateTime(config.readEntry("date", QDateTime::currentDateTime()));
info->setRecurrence(config.readEntry("recurrence", false));
info->setRecurrenceEachValue(config.readEntry("recurrenceValue", 1));
info->setRecurrenceUnit(static_cast<MessageComposer::SendLaterInfo::RecurrenceUnit>(config.readEntry("recurrenceUnit", static_cast<int>(MessageComposer::SendLaterInfo::Days))));
info->setItemId(config.readEntry("itemId", -1));
info->setSubject(config.readEntry("subject"));
info->setTo(config.readEntry("to"));
return info;
}
void SendLaterUtil::writeSendLaterInfo(KSharedConfig::Ptr config, MessageComposer::SendLaterInfo *info)
{
if (!info || !info->isValid()) {
return;
}
const QString groupName = SendLaterUtil::sendLaterPattern().arg(info->itemId());
// 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);
if (info->lastDateTimeSend().isValid()) {
group.writeEntry("lastDateTimeSend", info->lastDateTimeSend().toString(Qt::ISODate));
}
group.writeEntry("date", info->dateTime());
group.writeEntry("recurrence", info->isRecurrence());
group.writeEntry("recurrenceValue", info->recurrenceEachValue());
group.writeEntry("recurrenceUnit", static_cast<int>(info->recurrenceUnit()));
group.writeEntry("itemId", info->itemId());
group.writeEntry("subject", info->subject());
group.writeEntry("to", info->to());
config->sync();
config->reparseConfiguration();
qCDebug(SENDLATERAGENT_LOG) << " reparse config";
}
void SendLaterUtil::forceReparseConfiguration()
{
SendLaterAgentSettings::self()->save();
SendLaterAgentSettings::self()->config()->reparseConfiguration();
}
bool SendLaterUtil::sentLaterAgentEnabled()
{
return SendLaterAgentSettings::self()->enabled();
}
QString SendLaterUtil::sendLaterPattern()
{
return QStringLiteral("SendLaterItem %1");
}