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 }