File indexing completed on 2024-05-12 16:25:39
0001 /* 0002 SPDX-FileCopyrightText: 2019-2024 Laurent Montel <montel@kde.org> 0003 0004 SPDX-License-Identifier: LGPL-2.0-or-later 0005 */ 0006 0007 #include "discussions/discussions.h" 0008 #include "ruqola_debug.h" 0009 #include <QJsonArray> 0010 #include <QJsonObject> 0011 0012 Discussions::Discussions() = default; 0013 0014 QVector<Discussion> Discussions::discussions() const 0015 { 0016 return mDiscussion; 0017 } 0018 0019 void Discussions::append(const Discussion &discussion) 0020 { 0021 mDiscussion.append(discussion); 0022 } 0023 0024 void Discussions::setDiscussions(const QVector<Discussion> &discussion) 0025 { 0026 mDiscussion = discussion; 0027 } 0028 0029 void Discussions::parseDiscussions(const QJsonObject &discussionsObj) 0030 { 0031 mDiscussion.clear(); 0032 mDiscussionsCount = discussionsObj[QLatin1String("count")].toInt(); 0033 mOffset = discussionsObj[QLatin1String("offset")].toInt(); 0034 mTotal = discussionsObj[QLatin1String("total")].toInt(); 0035 mDiscussion.reserve(mDiscussionsCount); 0036 parseDiscussionsObj(discussionsObj); 0037 } 0038 0039 void Discussions::parseDiscussionsObj(const QJsonObject &discussionsObj) 0040 { 0041 const QJsonArray discussionsArray = discussionsObj[QLatin1String("discussions")].toArray(); 0042 for (const QJsonValue ¤t : discussionsArray) { 0043 if (current.type() == QJsonValue::Object) { 0044 const QJsonObject discussionObject = current.toObject(); 0045 Discussion m; 0046 m.parseDiscussion(discussionObject); 0047 mDiscussion.append(std::move(m)); 0048 } else { 0049 qCWarning(RUQOLA_LOG) << "Problem when parsing discussions" << current; 0050 } 0051 } 0052 } 0053 0054 void Discussions::parseMoreDiscussions(const QJsonObject &discussionsObj) 0055 { 0056 const int discussionsCount = discussionsObj[QLatin1String("count")].toInt(); 0057 mOffset = discussionsObj[QLatin1String("offset")].toInt(); 0058 mTotal = discussionsObj[QLatin1String("total")].toInt(); 0059 parseDiscussionsObj(discussionsObj); 0060 mDiscussionsCount += discussionsCount; 0061 } 0062 0063 bool Discussions::isEmpty() const 0064 { 0065 return mDiscussion.isEmpty(); 0066 } 0067 0068 void Discussions::clear() 0069 { 0070 mDiscussion.clear(); 0071 } 0072 0073 int Discussions::count() const 0074 { 0075 return mDiscussion.count(); 0076 } 0077 0078 Discussion Discussions::at(int index) const 0079 { 0080 if (index < 0 || index > mDiscussion.count()) { 0081 qCWarning(RUQOLA_LOG) << "Invalid index " << index; 0082 return {}; 0083 } 0084 return mDiscussion.at(index); 0085 } 0086 0087 int Discussions::discussionsCount() const 0088 { 0089 return mDiscussionsCount; 0090 } 0091 0092 void Discussions::setDiscussionsCount(int discussionsCount) 0093 { 0094 mDiscussionsCount = discussionsCount; 0095 } 0096 0097 int Discussions::offset() const 0098 { 0099 return mOffset; 0100 } 0101 0102 void Discussions::setOffset(int offset) 0103 { 0104 mOffset = offset; 0105 } 0106 0107 int Discussions::total() const 0108 { 0109 return mTotal; 0110 } 0111 0112 void Discussions::setTotal(int total) 0113 { 0114 mTotal = total; 0115 } 0116 0117 QDebug operator<<(QDebug d, const Discussions &t) 0118 { 0119 d.space() << "total" << t.total(); 0120 d.space() << "offset" << t.offset(); 0121 d.space() << "discussionsCount" << t.discussionsCount() << "\n"; 0122 for (int i = 0, total = t.discussions().count(); i < total; ++i) { 0123 d.space() << t.discussions().at(i) << "\n"; 0124 } 0125 return d; 0126 }