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