Changeset View
Changeset View
Standalone View
Standalone View
src/core/model/usersforroommodel.cpp
Show All 26 Lines | |||||
27 | 27 | | |||
28 | UsersForRoomModel::UsersForRoomModel(QObject *parent) | 28 | UsersForRoomModel::UsersForRoomModel(QObject *parent) | ||
29 | : QAbstractListModel(parent) | 29 | : QAbstractListModel(parent) | ||
30 | { | 30 | { | ||
31 | } | 31 | } | ||
32 | 32 | | |||
33 | UsersForRoomModel::~UsersForRoomModel() | 33 | UsersForRoomModel::~UsersForRoomModel() | ||
34 | { | 34 | { | ||
35 | qDeleteAll(mUsers); | | |||
36 | } | 35 | } | ||
37 | 36 | | |||
38 | void UsersForRoomModel::removeUser(const QString &userId) | 37 | void UsersForRoomModel::removeUser(const QString &userId) | ||
39 | { | 38 | { | ||
40 | //TODO verify if it | 39 | //TODO verify if it | ||
41 | } | 40 | } | ||
42 | 41 | | |||
43 | void UsersForRoomModel::addUser(const User &users) | 42 | void UsersForRoomModel::addUser(const User &users) | ||
44 | { | 43 | { | ||
45 | //TODO verify if it | 44 | //TODO verify if it | ||
46 | } | 45 | } | ||
47 | 46 | | |||
48 | void UsersForRoomModel::setUsers(const QVector<User *> &users) | 47 | void UsersForRoomModel::setUsers(const QVector<User> &users) | ||
49 | { | 48 | { | ||
50 | if (mUsers.isEmpty()) { | 49 | if (mUsers.isEmpty()) { | ||
51 | if (rowCount() != 0) { | 50 | if (rowCount() != 0) { | ||
52 | beginRemoveRows(QModelIndex(), 0, mUsers.count() - 1); | 51 | beginRemoveRows(QModelIndex(), 0, mUsers.count() - 1); | ||
53 | qDeleteAll(mUsers); | | |||
54 | mUsers.clear(); | 52 | mUsers.clear(); | ||
55 | endRemoveRows(); | 53 | endRemoveRows(); | ||
56 | } | 54 | } | ||
57 | if (!users.isEmpty()) { | 55 | if (!users.isEmpty()) { | ||
58 | beginInsertRows(QModelIndex(), 0, users.count() - 1); | 56 | beginInsertRows(QModelIndex(), 0, users.count() - 1); | ||
59 | mUsers = users; | 57 | mUsers = users; | ||
60 | endInsertRows(); | 58 | endInsertRows(); | ||
61 | } | 59 | } | ||
62 | } else { | 60 | } else { | ||
63 | const int numberOfElement = mUsers.count(); | 61 | const int numberOfElement = mUsers.count(); | ||
64 | mUsers << users; | 62 | mUsers << users; | ||
65 | beginInsertRows(QModelIndex(), numberOfElement, mUsers.count() - 1); | 63 | beginInsertRows(QModelIndex(), numberOfElement, mUsers.count() - 1); | ||
66 | endInsertRows(); | 64 | endInsertRows(); | ||
67 | } | 65 | } | ||
68 | checkFullList(); | 66 | checkFullList(); | ||
69 | } | 67 | } | ||
70 | 68 | | |||
71 | void UsersForRoomModel::clear() | 69 | void UsersForRoomModel::clear() | ||
72 | { | 70 | { | ||
73 | if (!mUsers.isEmpty()) { | 71 | if (!mUsers.isEmpty()) { | ||
74 | beginRemoveRows(QModelIndex(), 0, mUsers.count() - 1); | 72 | beginRemoveRows(QModelIndex(), 0, mUsers.count() - 1); | ||
75 | qDeleteAll(mUsers); | | |||
76 | mUsers.clear(); | 73 | mUsers.clear(); | ||
77 | endRemoveRows(); | 74 | endRemoveRows(); | ||
78 | } | 75 | } | ||
79 | } | 76 | } | ||
80 | 77 | | |||
81 | int UsersForRoomModel::rowCount(const QModelIndex &parent) const | 78 | int UsersForRoomModel::rowCount(const QModelIndex &parent) const | ||
82 | { | 79 | { | ||
83 | Q_UNUSED(parent); | 80 | Q_UNUSED(parent); | ||
84 | return mUsers.count(); | 81 | return mUsers.count(); | ||
85 | } | 82 | } | ||
86 | 83 | | |||
87 | QVariant UsersForRoomModel::data(const QModelIndex &index, int role) const | 84 | QVariant UsersForRoomModel::data(const QModelIndex &index, int role) const | ||
88 | { | 85 | { | ||
89 | if (index.row() < 0 || index.row() >= mUsers.count()) { | 86 | if (index.row() < 0 || index.row() >= mUsers.count()) { | ||
90 | return QVariant(); | 87 | return QVariant(); | ||
91 | } | 88 | } | ||
92 | 89 | | |||
93 | User *user = mUsers.at(index.row()); | 90 | const User &user = mUsers.at(index.row()); | ||
94 | switch (role) { | 91 | switch (role) { | ||
95 | case DisplayName: | 92 | case DisplayName: | ||
96 | return generateDisplayName(*user); | 93 | return generateDisplayName(user); | ||
97 | case UserName: | 94 | case UserName: | ||
98 | return user->userName(); | 95 | return user.userName(); | ||
99 | case IconStatus: | 96 | case IconStatus: | ||
100 | return user->iconFromStatus(); | 97 | return user.iconFromStatus(); | ||
101 | case UserId: | 98 | case UserId: | ||
102 | return user->userId(); | 99 | return user.userId(); | ||
103 | case Name: | 100 | case Name: | ||
104 | return user->name(); | 101 | return user.name(); | ||
105 | } | 102 | } | ||
106 | 103 | | |||
107 | return {}; | 104 | return {}; | ||
108 | } | 105 | } | ||
109 | 106 | | |||
110 | QString UsersForRoomModel::generateDisplayName(const User &user) const | 107 | QString UsersForRoomModel::generateDisplayName(const User &user) const | ||
111 | { | 108 | { | ||
112 | const QString displayName = QStringLiteral("<a href=\'%1\'>%1</a>").arg(user.userName().isEmpty() ? user.name() : user.userName()); | 109 | const QString displayName = QStringLiteral("<a href=\'%1\'>%1</a>").arg(user.userName().isEmpty() ? user.name() : user.userName()); | ||
▲ Show 20 Lines • Show All 55 Lines • ▼ Show 20 Line(s) | |||||
168 | } | 165 | } | ||
169 | 166 | | |||
170 | void UsersForRoomModel::parseUsersForRooms(const QJsonObject &root, UsersModel *model, bool restapi) | 167 | void UsersForRoomModel::parseUsersForRooms(const QJsonObject &root, UsersModel *model, bool restapi) | ||
171 | { | 168 | { | ||
172 | if (restapi) { | 169 | if (restapi) { | ||
173 | mTotal = root[QLatin1String("total")].toInt(); | 170 | mTotal = root[QLatin1String("total")].toInt(); | ||
174 | mOffset = root[QLatin1String("offset")].toInt(); | 171 | mOffset = root[QLatin1String("offset")].toInt(); | ||
175 | const QJsonArray members = root[QStringLiteral("members")].toArray(); | 172 | const QJsonArray members = root[QStringLiteral("members")].toArray(); | ||
176 | QVector<User *> users; | 173 | QVector<User> users; | ||
177 | users.reserve(members.count()); | 174 | users.reserve(members.count()); | ||
178 | for (const QJsonValue ¤t : members) { | 175 | for (const QJsonValue ¤t : members) { | ||
179 | if (current.type() == QJsonValue::Object) { | 176 | if (current.type() == QJsonValue::Object) { | ||
180 | const QJsonObject userObject = current.toObject(); | 177 | const QJsonObject userObject = current.toObject(); | ||
181 | const QString userName = userObject[QStringLiteral("username")].toString(); | 178 | const QString userName = userObject[QStringLiteral("username")].toString(); | ||
182 | const QString name = userObject[QStringLiteral("name")].toString(); | 179 | const QString name = userObject[QStringLiteral("name")].toString(); | ||
183 | const QString id = userObject[QStringLiteral("_id")].toString(); | 180 | const QString id = userObject[QStringLiteral("_id")].toString(); | ||
184 | const double utcOffset = userObject[QStringLiteral("utcOffset")].toDouble(); | 181 | const double utcOffset = userObject[QStringLiteral("utcOffset")].toDouble(); | ||
185 | const QString status = userObject[QStringLiteral("status")].toString(); | 182 | const QString status = userObject[QStringLiteral("status")].toString(); | ||
186 | QScopedPointer<User> user(new User); | 183 | User user; | ||
187 | user->setName(name); | 184 | user.setName(name); | ||
188 | user->setUserName(userName); | 185 | user.setUserName(userName); | ||
189 | user->setUserId(id); | 186 | user.setUserId(id); | ||
190 | user->setUtcOffset(utcOffset); | 187 | user.setUtcOffset(utcOffset); | ||
191 | user->setStatus(status); | 188 | user.setStatus(status); | ||
192 | if (user->isValid()) { | 189 | if (user.isValid()) { | ||
193 | users.append(user.take()); | 190 | users.append(user); | ||
194 | } else { | 191 | } else { | ||
195 | qCWarning(RUQOLA_LOG) << "Invalid user" << *user; | 192 | qCWarning(RUQOLA_LOG) << "Invalid user" << user; | ||
196 | mTotal--; | 193 | mTotal--; | ||
197 | } | 194 | } | ||
198 | } else { | 195 | } else { | ||
199 | qCWarning(RUQOLA_LOG) << "Parse records: Error in users for rooms json" << root; | 196 | qCWarning(RUQOLA_LOG) << "Parse records: Error in users for rooms json" << root; | ||
200 | } | 197 | } | ||
201 | } | 198 | } | ||
202 | setUsers(users); | 199 | setUsers(users); | ||
203 | } else { | 200 | } else { | ||
204 | const QJsonObject result = root[QLatin1String("result")].toObject(); | 201 | const QJsonObject result = root[QLatin1String("result")].toObject(); | ||
205 | if (!result.isEmpty()) { | 202 | if (!result.isEmpty()) { | ||
206 | const QJsonArray records = result[QStringLiteral("records")].toArray(); | 203 | const QJsonArray records = result[QStringLiteral("records")].toArray(); | ||
207 | mTotal = result[QLatin1String("total")].toInt(); | 204 | mTotal = result[QLatin1String("total")].toInt(); | ||
208 | mOffset = root[QLatin1String("offset")].toInt(); //TODO verify if a day we use no rest api | 205 | mOffset = root[QLatin1String("offset")].toInt(); //TODO verify if a day we use no rest api | ||
209 | 206 | | |||
210 | QVector<User *> users; | 207 | QVector<User> users; | ||
211 | users.reserve(records.count()); | 208 | users.reserve(records.count()); | ||
212 | for (const QJsonValue ¤t : records) { | 209 | for (const QJsonValue ¤t : records) { | ||
213 | if (current.type() == QJsonValue::Object) { | 210 | if (current.type() == QJsonValue::Object) { | ||
214 | const QJsonObject userObject = current.toObject(); | 211 | const QJsonObject userObject = current.toObject(); | ||
215 | const QString userName = userObject[QStringLiteral("username")].toString(); | 212 | const QString userName = userObject[QStringLiteral("username")].toString(); | ||
216 | const QString name = userObject[QStringLiteral("name")].toString(); | 213 | const QString name = userObject[QStringLiteral("name")].toString(); | ||
217 | const QString id = userObject[QStringLiteral("_id")].toString(); | 214 | const QString id = userObject[QStringLiteral("_id")].toString(); | ||
218 | User *user = new User; | 215 | User user; | ||
219 | user->setName(name); | 216 | user.setName(name); | ||
220 | user->setUserName(userName); | 217 | user.setUserName(userName); | ||
221 | user->setUserId(id); | 218 | user.setUserId(id); | ||
222 | if (model) { | 219 | if (model) { | ||
223 | user->setStatus(model->status(id)); | 220 | user.setStatus(model->status(id)); | ||
224 | } | 221 | } | ||
225 | //Add status! | 222 | //Add status! | ||
226 | if (user->isValid()) { | 223 | if (user.isValid()) { | ||
227 | users.append(user); | 224 | users.append(user); | ||
228 | } else { | 225 | } else { | ||
229 | qCWarning(RUQOLA_LOG) << "Invalid user" << *user; | 226 | qCWarning(RUQOLA_LOG) << "Invalid user" << user; | ||
230 | mTotal--; | 227 | mTotal--; | ||
231 | } | 228 | } | ||
232 | } else { | 229 | } else { | ||
233 | qCWarning(RUQOLA_LOG) << "Parse records: Error in users for rooms json" << root; | 230 | qCWarning(RUQOLA_LOG) << "Parse records: Error in users for rooms json" << root; | ||
234 | } | 231 | } | ||
235 | } | 232 | } | ||
236 | setUsers(users); | 233 | setUsers(users); | ||
237 | } else { | 234 | } else { | ||
238 | qCWarning(RUQOLA_LOG) << "Error in users for rooms json" << root; | 235 | qCWarning(RUQOLA_LOG) << "Error in users for rooms json" << root; | ||
239 | } | 236 | } | ||
240 | } | 237 | } | ||
241 | } | 238 | } | ||
242 | 239 | | |||
243 | void UsersForRoomModel::userStatusChanged(User *newuser) | 240 | void UsersForRoomModel::userStatusChanged(const User &newuser) | ||
244 | { | 241 | { | ||
245 | const int roomCount = mUsers.count(); | 242 | const int roomCount = mUsers.count(); | ||
246 | for (int i = 0; i < roomCount; ++i) { | 243 | for (int i = 0; i < roomCount; ++i) { | ||
247 | User *user = mUsers.at(i); | 244 | User &user = mUsers[i]; | ||
248 | if (newuser->userId() == user->userId()) { | 245 | if (newuser.userId() == user.userId()) { | ||
249 | user->setStatus(newuser->status()); | 246 | user.setStatus(newuser.status()); | ||
250 | const QModelIndex idx = createIndex(i, 0); | 247 | const QModelIndex idx = createIndex(i, 0); | ||
251 | Q_EMIT dataChanged(idx, idx); | 248 | Q_EMIT dataChanged(idx, idx); | ||
252 | } | 249 | } | ||
253 | } | 250 | } | ||
254 | } | 251 | } |