File indexing completed on 2024-05-12 05:10:41

0001 /*
0002     SPDX-FileCopyrightText: 2009 Constantin Berzan <exit3219@gmail.com>
0003 
0004     SPDX-FileCopyrightText: 2010 Klarälvdalens Datakonsult AB,
0005         a KDAB Group company, info@kdab.net,
0006         author Tobias Koenig <tokoe@kdab.com>
0007 
0008     SPDX-License-Identifier: LGPL-2.0-or-later
0009 */
0010 
0011 #include "blockalarmsattribute.h"
0012 #include <Akonadi/AttributeFactory>
0013 #include <QByteArray>
0014 #include <QDataStream>
0015 #include <QIODevice>
0016 
0017 using namespace Akonadi;
0018 
0019 class Akonadi::BlockAlarmsAttributePrivate
0020 {
0021 public:
0022     int audio = 1;
0023     int display = 1;
0024     int email = 1;
0025     int procedure = 1;
0026 };
0027 
0028 BlockAlarmsAttribute::BlockAlarmsAttribute()
0029     : d(new BlockAlarmsAttributePrivate)
0030 {
0031 }
0032 
0033 BlockAlarmsAttribute::~BlockAlarmsAttribute() = default;
0034 
0035 void BlockAlarmsAttribute::blockAlarmType(KCalendarCore::Alarm::Type type, bool block)
0036 {
0037     switch (type) {
0038     case KCalendarCore::Alarm::Audio:
0039         d->audio = block;
0040         return;
0041     case KCalendarCore::Alarm::Display:
0042         d->display = block;
0043         return;
0044     case KCalendarCore::Alarm::Email:
0045         d->email = block;
0046         return;
0047     case KCalendarCore::Alarm::Procedure:
0048         d->procedure = block;
0049         return;
0050     default:
0051         return;
0052     }
0053 }
0054 
0055 void BlockAlarmsAttribute::blockEverything(bool block)
0056 {
0057     blockAlarmType(KCalendarCore::Alarm::Audio, block);
0058     blockAlarmType(KCalendarCore::Alarm::Display, block);
0059     blockAlarmType(KCalendarCore::Alarm::Email, block);
0060     blockAlarmType(KCalendarCore::Alarm::Procedure, block);
0061 }
0062 
0063 bool BlockAlarmsAttribute::isAlarmTypeBlocked(KCalendarCore::Alarm::Type type) const
0064 {
0065     switch (type) {
0066     case KCalendarCore::Alarm::Audio:
0067         return d->audio;
0068     case KCalendarCore::Alarm::Display:
0069         return d->display;
0070     case KCalendarCore::Alarm::Email:
0071         return d->email;
0072     case KCalendarCore::Alarm::Procedure:
0073         return d->procedure;
0074     default:
0075         return false;
0076     }
0077 }
0078 
0079 bool BlockAlarmsAttribute::isEverythingBlocked() const
0080 {
0081     return isAlarmTypeBlocked(KCalendarCore::Alarm::Audio) && isAlarmTypeBlocked(KCalendarCore::Alarm::Display)
0082         && isAlarmTypeBlocked(KCalendarCore::Alarm::Email) && isAlarmTypeBlocked(KCalendarCore::Alarm::Procedure);
0083 }
0084 
0085 QByteArray BlockAlarmsAttribute::type() const
0086 {
0087     static const QByteArray sType("BlockAlarmsAttribute");
0088     return sType;
0089 }
0090 
0091 BlockAlarmsAttribute *BlockAlarmsAttribute::clone() const
0092 {
0093     auto copy = new BlockAlarmsAttribute();
0094     copy->d->audio = d->audio;
0095     copy->d->display = d->display;
0096     copy->d->email = d->email;
0097     copy->d->procedure = d->procedure;
0098 
0099     return copy;
0100 }
0101 
0102 QByteArray BlockAlarmsAttribute::serialized() const
0103 {
0104     QByteArray ba;
0105     QDataStream stream(&ba, QIODevice::WriteOnly);
0106     stream << d->audio;
0107     stream << d->display;
0108     stream << d->email;
0109     stream << d->procedure;
0110 
0111     return ba;
0112 }
0113 
0114 void BlockAlarmsAttribute::deserialize(const QByteArray &data)
0115 {
0116     // Pre-4.11, default behavior
0117     if (data.isEmpty()) {
0118         d->audio = 1;
0119         d->display = 1;
0120         d->email = 1;
0121         d->procedure = 1;
0122     } else {
0123         QByteArray ba = data;
0124         QDataStream stream(&ba, QIODevice::ReadOnly);
0125         int i;
0126         stream >> i;
0127         d->audio = i;
0128         stream >> i;
0129         d->display = i;
0130         stream >> i;
0131         d->email = i;
0132         stream >> i;
0133         d->procedure = i;
0134     }
0135 }
0136 
0137 namespace
0138 {
0139 // Anonymous namespace; function is invisible outside this file.
0140 bool dummy()
0141 {
0142     Akonadi::AttributeFactory::registerAttribute<Akonadi::BlockAlarmsAttribute>();
0143 
0144     return true;
0145 }
0146 
0147 // Called when this library is loaded.
0148 const bool registered = dummy();
0149 } // namespace