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 &current : 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 }