Changeset View
Changeset View
Standalone View
Standalone View
src/core/model/usersmodel.cpp
Show All 24 Lines | |||||
25 | 25 | | |||
26 | UsersModel::UsersModel(QObject *parent) | 26 | UsersModel::UsersModel(QObject *parent) | ||
27 | : QAbstractListModel(parent) | 27 | : QAbstractListModel(parent) | ||
28 | { | 28 | { | ||
29 | } | 29 | } | ||
30 | 30 | | |||
31 | UsersModel::~UsersModel() | 31 | UsersModel::~UsersModel() | ||
32 | { | 32 | { | ||
33 | qDeleteAll(mUsers); | | |||
34 | } | 33 | } | ||
35 | 34 | | |||
36 | int UsersModel::rowCount(const QModelIndex &parent) const | 35 | int UsersModel::rowCount(const QModelIndex &parent) const | ||
37 | { | 36 | { | ||
38 | Q_UNUSED(parent); | 37 | Q_UNUSED(parent); | ||
39 | return mUsers.size(); | 38 | return mUsers.size(); | ||
40 | } | 39 | } | ||
41 | 40 | | |||
42 | QVariant UsersModel::data(const QModelIndex &index, int role) const | 41 | QVariant UsersModel::data(const QModelIndex &index, int role) const | ||
43 | { | 42 | { | ||
44 | if (index.row() < 0 || index.row() >= mUsers.count()) { | 43 | if (index.row() < 0 || index.row() >= mUsers.count()) { | ||
45 | return QVariant(); | 44 | return QVariant(); | ||
46 | } | 45 | } | ||
47 | const User *user = mUsers.at(index.row()); | 46 | const User &user = mUsers.at(index.row()); | ||
48 | switch (role) { | 47 | switch (role) { | ||
49 | case UserName: | 48 | case UserName: | ||
50 | return user->name(); | 49 | return user.name(); | ||
51 | case UserId: | 50 | case UserId: | ||
52 | return user->userId(); | 51 | return user.userId(); | ||
53 | case UserStatus: | 52 | case UserStatus: | ||
54 | return user->status(); | 53 | return user.status(); | ||
55 | case UserIcon: | 54 | case UserIcon: | ||
56 | return user->iconFromStatus(); | 55 | return user.iconFromStatus(); | ||
57 | case UserStatusText: | 56 | case UserStatusText: | ||
58 | return user->statusText(); | 57 | return user.statusText(); | ||
59 | } | 58 | } | ||
60 | 59 | | |||
61 | return {}; | 60 | return {}; | ||
62 | } | 61 | } | ||
63 | 62 | | |||
64 | QString UsersModel::userStatusIconFileName(const QString &name) const | 63 | QString UsersModel::userStatusIconFileName(const QString &name) const | ||
65 | { | 64 | { | ||
66 | const int userCount = mUsers.count(); | 65 | const int userCount = mUsers.count(); | ||
67 | for (int i = 0; i < userCount; ++i) { | 66 | for (int i = 0; i < userCount; ++i) { | ||
68 | if (mUsers.at(i)->userName() == name) { | 67 | if (mUsers.at(i).userName() == name) { | ||
69 | return mUsers.at(i)->iconFromStatus(); | 68 | return mUsers.at(i).iconFromStatus(); | ||
70 | } | 69 | } | ||
71 | } | 70 | } | ||
72 | 71 | | |||
73 | //qCWarning(RUQOLA_LOG) << "User for name " << name << " not defined yet"; | 72 | //qCWarning(RUQOLA_LOG) << "User for name " << name << " not defined yet"; | ||
74 | return QStringLiteral("user-offline"); | 73 | return QStringLiteral("user-offline"); | ||
75 | } | 74 | } | ||
76 | 75 | | |||
77 | QString UsersModel::status(const QString &userId) const | 76 | QString UsersModel::status(const QString &userId) const | ||
78 | { | 77 | { | ||
79 | const int userCount = mUsers.count(); | 78 | const int userCount = mUsers.count(); | ||
80 | 79 | | |||
81 | for (int i = 0; i < userCount; ++i) { | 80 | for (int i = 0; i < userCount; ++i) { | ||
82 | if (mUsers.at(i)->userId() == userId) { | 81 | if (mUsers.at(i).userId() == userId) { | ||
83 | return mUsers.at(i)->status(); | 82 | return mUsers.at(i).status(); | ||
84 | } | 83 | } | ||
85 | } | 84 | } | ||
86 | //Return offline as default; | 85 | //Return offline as default; | ||
87 | return QStringLiteral("offline"); | 86 | return QStringLiteral("offline"); | ||
88 | } | 87 | } | ||
89 | 88 | | |||
90 | void UsersModel::removeUser(const QString &userId) | 89 | void UsersModel::removeUser(const QString &userId) | ||
91 | { | 90 | { | ||
92 | qCDebug(RUQOLA_LOG) << " User removed " << userId; | 91 | qCDebug(RUQOLA_LOG) << " User removed " << userId; | ||
93 | const int userCount = mUsers.count(); | 92 | const int userCount = mUsers.count(); | ||
94 | for (int i = 0; i < userCount; ++i) { | 93 | for (int i = 0; i < userCount; ++i) { | ||
95 | if (mUsers.at(i)->userId() == userId) { | 94 | if (mUsers.at(i).userId() == userId) { | ||
96 | qCDebug(RUQOLA_LOG) << " User removed " << mUsers.at(i)->name(); | 95 | qCDebug(RUQOLA_LOG) << " User removed " << mUsers.at(i).name(); | ||
97 | //Send info as it's disconnected. But don't remove it from list | 96 | //Send info as it's disconnected. But don't remove it from list | ||
98 | User *user = mUsers.at(i); | 97 | User &user = mUsers[i]; | ||
99 | user->setStatus(QStringLiteral("offline")); | 98 | user.setStatus(QStringLiteral("offline")); | ||
100 | const QModelIndex idx = createIndex(i, 0); | 99 | const QModelIndex idx = createIndex(i, 0); | ||
101 | Q_EMIT userStatusChanged(user); | 100 | Q_EMIT userStatusChanged(user); | ||
102 | Q_EMIT dataChanged(idx, idx); | 101 | Q_EMIT dataChanged(idx, idx); | ||
103 | break; | 102 | break; | ||
104 | } | 103 | } | ||
105 | } | 104 | } | ||
106 | } | 105 | } | ||
107 | 106 | | |||
108 | void UsersModel::addUser(User *newuser) | 107 | void UsersModel::addUser(const User &newuser) | ||
109 | { | 108 | { | ||
110 | //It can be duplicate as we don't remove user from list when user is disconnected. Otherwise it will not sync with | 109 | //It can be duplicate as we don't remove user from list when user is disconnected. Otherwise it will not sync with | ||
111 | // user for room list | 110 | // user for room list | ||
112 | qCDebug(RUQOLA_LOG) << " User added " << newuser; | 111 | qCDebug(RUQOLA_LOG) << " User added " << newuser; | ||
113 | const int userCount = mUsers.count(); | 112 | const int userCount = mUsers.count(); | ||
114 | bool found = false; | 113 | bool found = false; | ||
115 | for (int i = 0; i < userCount; ++i) { | 114 | for (int i = 0; i < userCount; ++i) { | ||
116 | if (mUsers.at(i)->userId() == newuser->userId()) { | 115 | if (mUsers.at(i).userId() == newuser.userId()) { | ||
117 | found = true; | 116 | found = true; | ||
118 | User *user = mUsers.at(i); | 117 | User &user = mUsers[i]; | ||
119 | user->setStatus(newuser->status()); | 118 | user.setStatus(newuser.status()); | ||
120 | const QModelIndex idx = createIndex(i, 0); | 119 | const QModelIndex idx = createIndex(i, 0); | ||
121 | Q_EMIT userStatusChanged(user); | 120 | Q_EMIT userStatusChanged(user); | ||
122 | Q_EMIT dataChanged(idx, idx); | 121 | Q_EMIT dataChanged(idx, idx); | ||
123 | delete newuser; | | |||
124 | break; | 122 | break; | ||
125 | } | 123 | } | ||
126 | } | 124 | } | ||
127 | if (!found) { | 125 | if (!found) { | ||
128 | const int pos = mUsers.size(); | 126 | const int pos = mUsers.size(); | ||
129 | beginInsertRows(QModelIndex(), pos, pos); | 127 | beginInsertRows(QModelIndex(), pos, pos); | ||
130 | mUsers.append(newuser); | 128 | mUsers.append(newuser); | ||
131 | endInsertRows(); | 129 | endInsertRows(); | ||
132 | } | 130 | } | ||
133 | } | 131 | } | ||
134 | 132 | | |||
135 | void UsersModel::updateUser(const QJsonObject &array) | 133 | void UsersModel::updateUser(const QJsonObject &array) | ||
136 | { | 134 | { | ||
137 | const QString id = array.value(QLatin1String("id")).toString(); | 135 | const QString id = array.value(QLatin1String("id")).toString(); | ||
138 | const int userCount = mUsers.count(); | 136 | const int userCount = mUsers.count(); | ||
139 | for (int i = 0; i < userCount; ++i) { | 137 | for (int i = 0; i < userCount; ++i) { | ||
140 | if (mUsers.at(i)->userId() == id) { | 138 | if (mUsers.at(i).userId() == id) { | ||
141 | User *user = mUsers.at(i); | 139 | User &user = mUsers[i]; | ||
142 | const QJsonObject fields = array.value(QLatin1String("fields")).toObject(); | 140 | const QJsonObject fields = array.value(QLatin1String("fields")).toObject(); | ||
143 | 141 | | |||
144 | const QString newStatus = fields.value(QLatin1String("status")).toString(); | 142 | const QString newStatus = fields.value(QLatin1String("status")).toString(); | ||
145 | bool userDataChanged = false; | 143 | bool userDataChanged = false; | ||
146 | if (!newStatus.isEmpty()) { | 144 | if (!newStatus.isEmpty()) { | ||
147 | user->setStatus(newStatus); | 145 | user.setStatus(newStatus); | ||
148 | const QModelIndex idx = createIndex(i, 0); | 146 | const QModelIndex idx = createIndex(i, 0); | ||
149 | Q_EMIT dataChanged(idx, idx); | 147 | Q_EMIT dataChanged(idx, idx); | ||
150 | Q_EMIT userStatusChanged(user); | 148 | Q_EMIT userStatusChanged(user); | ||
151 | userDataChanged = true; | 149 | userDataChanged = true; | ||
152 | } | 150 | } | ||
153 | const QString newName = fields.value(QLatin1String("name")).toString(); | 151 | const QString newName = fields.value(QLatin1String("name")).toString(); | ||
154 | if (!newName.isEmpty()) { | 152 | if (!newName.isEmpty()) { | ||
155 | user->setName(newName); | 153 | user.setName(newName); | ||
156 | const QModelIndex idx = createIndex(i, 0); | 154 | const QModelIndex idx = createIndex(i, 0); | ||
157 | Q_EMIT dataChanged(idx, idx); | 155 | Q_EMIT dataChanged(idx, idx); | ||
158 | Q_EMIT userNameChanged(user); | 156 | Q_EMIT userNameChanged(user); | ||
159 | userDataChanged = true; | 157 | userDataChanged = true; | ||
160 | } | 158 | } | ||
161 | const QString newuserName = fields.value(QLatin1String("username")).toString(); | 159 | const QString newuserName = fields.value(QLatin1String("username")).toString(); | ||
162 | if (!newuserName.isEmpty()) { | 160 | if (!newuserName.isEmpty()) { | ||
163 | user->setUserName(newuserName); | 161 | user.setUserName(newuserName); | ||
164 | const QModelIndex idx = createIndex(i, 0); | 162 | const QModelIndex idx = createIndex(i, 0); | ||
165 | Q_EMIT dataChanged(idx, idx); | 163 | Q_EMIT dataChanged(idx, idx); | ||
166 | Q_EMIT nameChanged(user); | 164 | Q_EMIT nameChanged(user); | ||
167 | userDataChanged = true; | 165 | userDataChanged = true; | ||
168 | } | 166 | } | ||
169 | const QString statusMessage = fields.value(QLatin1String("statusText")).toString(); | 167 | const QString statusMessage = fields.value(QLatin1String("statusText")).toString(); | ||
170 | if (!statusMessage.isEmpty()) { | 168 | if (!statusMessage.isEmpty()) { | ||
171 | user->setStatusText(statusMessage); | 169 | user.setStatusText(statusMessage); | ||
172 | const QModelIndex idx = createIndex(i, 0); | 170 | const QModelIndex idx = createIndex(i, 0); | ||
173 | Q_EMIT dataChanged(idx, idx); | 171 | Q_EMIT dataChanged(idx, idx); | ||
174 | Q_EMIT statusMessageChanged(user); | 172 | Q_EMIT statusMessageChanged(user); | ||
175 | userDataChanged = true; | 173 | userDataChanged = true; | ||
176 | } | 174 | } | ||
177 | if (!userDataChanged) { | 175 | if (!userDataChanged) { | ||
178 | qCWarning(RUQOLA_LOG) << " Unsupported yet user data modification " << array; | 176 | qCWarning(RUQOLA_LOG) << " Unsupported yet user data modification " << array; | ||
179 | } | 177 | } | ||
180 | break; | 178 | break; | ||
181 | } | 179 | } | ||
182 | } | 180 | } | ||
183 | } | 181 | } |