File indexing completed on 2025-02-16 04:50:12

0001 /*
0002     SPDX-FileCopyrightText: 2011-2013 Daniel Vrátil <dvratil@redhat.com>
0003 
0004     SPDX-License-Identifier: GPL-3.0-or-later
0005 */
0006 
0007 #include "defaultreminderattribute.h"
0008 
0009 #include <QJsonDocument>
0010 #include <QVariant>
0011 
0012 #include <KGAPI/Calendar/Reminder>
0013 
0014 using namespace KGAPI2;
0015 
0016 DefaultReminderAttribute::DefaultReminderAttribute() = default;
0017 
0018 Akonadi::Attribute *DefaultReminderAttribute::clone() const
0019 {
0020     auto attr = new DefaultReminderAttribute();
0021     attr->setReminders(m_reminders);
0022 
0023     return attr;
0024 }
0025 
0026 void DefaultReminderAttribute::setReminders(const RemindersList &reminders)
0027 {
0028     m_reminders = reminders;
0029 }
0030 
0031 void DefaultReminderAttribute::deserialize(const QByteArray &data)
0032 {
0033     QJsonDocument json = QJsonDocument::fromJson(data);
0034     if (json.isNull()) {
0035         return;
0036     }
0037 
0038     const QVariant var = json.toVariant();
0039     const QVariantList list = var.toList();
0040     for (const QVariant &l : list) {
0041         const QVariantMap reminder = l.toMap();
0042 
0043         KGAPI2::ReminderPtr rem(new KGAPI2::Reminder);
0044 
0045         const QString reminderType = reminder[QStringLiteral("type")].toString();
0046         if (reminderType == QLatin1StringView("display")) {
0047             rem->setType(KCalendarCore::Alarm::Display);
0048         } else if (reminderType == QLatin1StringView("email")) {
0049             rem->setType(KCalendarCore::Alarm::Email);
0050         }
0051 
0052         KCalendarCore::Duration offset(reminder[QStringLiteral("time")].toInt(), KCalendarCore::Duration::Seconds);
0053         rem->setStartOffset(offset);
0054 
0055         m_reminders << rem;
0056     }
0057 }
0058 
0059 QByteArray DefaultReminderAttribute::serialized() const
0060 {
0061     QVariantList list;
0062     list.reserve(m_reminders.count());
0063 
0064     for (const ReminderPtr &rem : std::as_const(m_reminders)) {
0065         QVariantMap reminder;
0066 
0067         if (rem->type() == KCalendarCore::Alarm::Display) {
0068             reminder[QStringLiteral("type")] = QLatin1StringView("display");
0069         } else if (rem->type() == KCalendarCore::Alarm::Email) {
0070             reminder[QStringLiteral("type")] = QLatin1StringView("email");
0071         }
0072 
0073         reminder[QStringLiteral("time")] = rem->startOffset().asSeconds();
0074 
0075         list << reminder;
0076     }
0077     QJsonDocument serialized = QJsonDocument::fromVariant(list);
0078     return serialized.toJson();
0079 }
0080 
0081 KCalendarCore::Alarm::List DefaultReminderAttribute::alarms(KCalendarCore::Incidence *incidence) const
0082 {
0083     KCalendarCore::Alarm::List alarms;
0084     alarms.reserve(m_reminders.count());
0085     for (const ReminderPtr &reminder : std::as_const(m_reminders)) {
0086         KCalendarCore::Alarm::Ptr alarm(new KCalendarCore::Alarm(incidence));
0087 
0088         alarm->setType(reminder->type());
0089         alarm->setTime(incidence->dtStart());
0090         alarm->setStartOffset(reminder->startOffset());
0091         alarm->setEnabled(true);
0092 
0093         alarms << alarm;
0094     }
0095 
0096     return alarms;
0097 }
0098 
0099 QByteArray DefaultReminderAttribute::type() const
0100 {
0101     static const QByteArray sType("defaultReminders");
0102     return sType;
0103 }