File indexing completed on 2024-12-01 10:39:43
0001 /* 0002 SPDX-FileCopyrightText: 2022-2024 Laurent Montel <montel@kde.org> 0003 0004 SPDX-License-Identifier: LGPL-2.0-or-later 0005 */ 0006 0007 #include "notificationinfo.h" 0008 #include "ruqola_debug.h" 0009 #include <QJsonObject> 0010 0011 NotificationInfo::NotificationInfo() = default; 0012 0013 NotificationInfo::~NotificationInfo() = default; 0014 0015 QDebug operator<<(QDebug d, const NotificationInfo &t) 0016 { 0017 d << " accountName " << t.accountName(); 0018 d << " message " << t.message(); 0019 d << " title " << t.title(); 0020 d << " sender " << t.senderId(); 0021 d << " senderName " << t.senderName(); 0022 d << " mSenderUserName " << t.senderUserName(); 0023 d << " roomName " << t.roomName(); 0024 d << " roomId " << t.roomId(); 0025 d << " type " << t.channelType(); 0026 d << " tmId " << t.tmId(); 0027 d << " pixmap is null ? " << t.pixmap().isNull(); 0028 d << " date time " << t.dateTime(); 0029 d << " messageId " << t.messageId(); 0030 d << " mNotificationType " << t.notificationType(); 0031 return d; 0032 } 0033 0034 const QString &NotificationInfo::accountName() const 0035 { 0036 return mAccountName; 0037 } 0038 0039 void NotificationInfo::setAccountName(const QString &newAccountName) 0040 { 0041 mAccountName = newAccountName; 0042 } 0043 0044 const QString &NotificationInfo::message() const 0045 { 0046 return mMessage; 0047 } 0048 0049 void NotificationInfo::setMessage(const QString &newMessage) 0050 { 0051 mMessage = newMessage; 0052 } 0053 0054 const QString &NotificationInfo::title() const 0055 { 0056 return mTitle; 0057 } 0058 0059 void NotificationInfo::setTitle(const QString &newTitle) 0060 { 0061 mTitle = newTitle; 0062 } 0063 0064 const QString &NotificationInfo::senderId() const 0065 { 0066 return mSenderId; 0067 } 0068 0069 void NotificationInfo::setSenderId(const QString &newSenderId) 0070 { 0071 mSenderId = newSenderId; 0072 } 0073 0074 const QString &NotificationInfo::senderName() const 0075 { 0076 return mSenderName; 0077 } 0078 0079 void NotificationInfo::setSenderName(const QString &newSenderName) 0080 { 0081 mSenderName = newSenderName; 0082 } 0083 0084 const QString &NotificationInfo::senderUserName() const 0085 { 0086 return mSenderUserName; 0087 } 0088 0089 void NotificationInfo::setSenderUserName(const QString &newSenderUserName) 0090 { 0091 mSenderUserName = newSenderUserName; 0092 } 0093 0094 const QString &NotificationInfo::roomName() const 0095 { 0096 return mRoomName; 0097 } 0098 0099 void NotificationInfo::setRoomName(const QString &newRoomName) 0100 { 0101 mRoomName = newRoomName; 0102 } 0103 0104 const QString &NotificationInfo::roomId() const 0105 { 0106 return mRoomId; 0107 } 0108 0109 void NotificationInfo::setRoomId(const QString &newRoomId) 0110 { 0111 mRoomId = newRoomId; 0112 } 0113 0114 const QString &NotificationInfo::channelType() const 0115 { 0116 return mChannelType; 0117 } 0118 0119 void NotificationInfo::setChannelType(const QString &newChannelType) 0120 { 0121 mChannelType = newChannelType; 0122 } 0123 0124 const QString &NotificationInfo::tmId() const 0125 { 0126 return mTmId; 0127 } 0128 0129 void NotificationInfo::setTmId(const QString &newTmId) 0130 { 0131 mTmId = newTmId; 0132 } 0133 0134 const QPixmap &NotificationInfo::pixmap() const 0135 { 0136 return mPixmap; 0137 } 0138 0139 void NotificationInfo::setPixmap(const QPixmap &newPixmap) 0140 { 0141 mPixmap = newPixmap; 0142 } 0143 0144 void NotificationInfo::parseNotification(const QJsonArray &contents) 0145 { 0146 // qDebug() << " NotificationInfo::parseNotification(const QJsonArray &contents)" << contents; 0147 const QJsonObject obj = contents.at(0).toObject(); 0148 setTitle(obj[QLatin1String("title")].toString()); 0149 const QJsonObject payloadObj = obj.value(QLatin1String("payload")).toObject(); 0150 if (!payloadObj.isEmpty()) { 0151 setMessageId(payloadObj[QLatin1String("_id")].toString()); 0152 setRoomId(payloadObj[QLatin1String("rid")].toString()); 0153 setRoomName(payloadObj[QLatin1String("name")].toString()); 0154 setChannelType(payloadObj[QLatin1String("type")].toString()); 0155 setTmId(payloadObj[QLatin1String("tmid")].toString()); 0156 const QJsonObject senderObj = payloadObj.value(QLatin1String("sender")).toObject(); 0157 if (!senderObj.isEmpty()) { 0158 setSenderId(senderObj.value(QLatin1String("_id")).toString()); 0159 setSenderName(senderObj.value(QLatin1String("name")).toString()); 0160 setSenderUserName(senderObj.value(QLatin1String("username")).toString()); 0161 } else { 0162 qCDebug(RUQOLA_LOG) << "Problem with notification json: missing sender"; 0163 } 0164 const QJsonObject messageObj = payloadObj.value(QLatin1String("message")).toObject(); 0165 if (messageObj.isEmpty()) { 0166 qCDebug(RUQOLA_LOG) << "Problem with notification json: missing message"; 0167 setMessage(obj[QLatin1String("text")].toString()); 0168 } else { 0169 if (messageObj[QLatin1String("t")].toString() == QLatin1String("videoconf")) { 0170 mNotificationType = ConferenceCall; 0171 } else { 0172 setMessage(messageObj[QLatin1String("msg")].toString()); 0173 if (message().isEmpty()) { 0174 // Fallback to text 0175 setMessage(obj[QLatin1String("text")].toString()); 0176 } 0177 } 0178 } 0179 } else { 0180 qCDebug(RUQOLA_LOG) << "Problem with notification json: missing payload"; 0181 } 0182 qCDebug(RUQOLA_LOG) << "info " << *this; 0183 } 0184 0185 bool NotificationInfo::isValid() const 0186 { 0187 bool valid = !mSenderId.isEmpty() && !mChannelType.isEmpty(); 0188 if (mNotificationType == ConferenceCall) { 0189 return valid; 0190 } 0191 return valid && !mMessage.isEmpty(); 0192 } 0193 0194 const QString &NotificationInfo::dateTime() const 0195 { 0196 return mDateTime; 0197 } 0198 0199 void NotificationInfo::setDateTime(const QString &newDateTime) 0200 { 0201 mDateTime = newDateTime; 0202 } 0203 0204 const QString &NotificationInfo::messageId() const 0205 { 0206 return mMessageId; 0207 } 0208 0209 void NotificationInfo::setMessageId(const QString &newMessageId) 0210 { 0211 mMessageId = newMessageId; 0212 } 0213 0214 NotificationInfo::NotificationType NotificationInfo::notificationType() const 0215 { 0216 return mNotificationType; 0217 } 0218 0219 void NotificationInfo::setNotificationType(const NotificationType &newNotificationType) 0220 { 0221 mNotificationType = newNotificationType; 0222 } 0223 0224 bool NotificationInfo::operator==(const NotificationInfo &other) const 0225 { 0226 return other.mMessageId == mMessageId && other.mAccountName == mAccountName && other.mMessage == mMessage && other.mTitle == mTitle 0227 && other.mSenderId == mSenderId && other.mSenderName == mSenderName && other.mSenderUserName == mSenderUserName && other.mRoomName == mRoomName 0228 && other.mRoomId == mRoomId && other.mChannelType == mChannelType && other.mTmId == mTmId && other.mDateTime == mDateTime 0229 && other.mPixmap.cacheKey() == mPixmap.cacheKey() && other.mNotificationType == mNotificationType; 0230 } 0231 0232 #include "moc_notificationinfo.cpp"