summary refs log tree commit diff
path: root/src/ReadReceiptsModel.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/ReadReceiptsModel.cpp')
-rw-r--r--src/ReadReceiptsModel.cpp147
1 files changed, 73 insertions, 74 deletions
diff --git a/src/ReadReceiptsModel.cpp b/src/ReadReceiptsModel.cpp

index 25262c59..ff93f7d8 100644 --- a/src/ReadReceiptsModel.cpp +++ b/src/ReadReceiptsModel.cpp
@@ -16,116 +16,115 @@ ReadReceiptsModel::ReadReceiptsModel(QString event_id, QString room_id, QObject , event_id_{event_id} , room_id_{room_id} { - try { - addUsers(cache::readReceipts(event_id_, room_id_)); - } catch (const lmdb::error &) { - nhlog::db()->warn("failed to retrieve read receipts for {} {}", - event_id_.toStdString(), - room_id_.toStdString()); - - return; - } + try { + addUsers(cache::readReceipts(event_id_, room_id_)); + } catch (const lmdb::error &) { + nhlog::db()->warn("failed to retrieve read receipts for {} {}", + event_id_.toStdString(), + room_id_.toStdString()); + + return; + } - connect(cache::client(), &Cache::newReadReceipts, this, &ReadReceiptsModel::update); + connect(cache::client(), &Cache::newReadReceipts, this, &ReadReceiptsModel::update); } void ReadReceiptsModel::update() { - try { - addUsers(cache::readReceipts(event_id_, room_id_)); - } catch (const lmdb::error &) { - nhlog::db()->warn("failed to retrieve read receipts for {} {}", - event_id_.toStdString(), - room_id_.toStdString()); - - return; - } + try { + addUsers(cache::readReceipts(event_id_, room_id_)); + } catch (const lmdb::error &) { + nhlog::db()->warn("failed to retrieve read receipts for {} {}", + event_id_.toStdString(), + room_id_.toStdString()); + + return; + } } QHash<int, QByteArray> ReadReceiptsModel::roleNames() const { - // Note: RawTimestamp is purposely not included here - return { - {Mxid, "mxid"}, - {DisplayName, "displayName"}, - {AvatarUrl, "avatarUrl"}, - {Timestamp, "timestamp"}, - }; + // Note: RawTimestamp is purposely not included here + return { + {Mxid, "mxid"}, + {DisplayName, "displayName"}, + {AvatarUrl, "avatarUrl"}, + {Timestamp, "timestamp"}, + }; } QVariant ReadReceiptsModel::data(const QModelIndex &index, int role) const { - if (!index.isValid() || index.row() >= (int)readReceipts_.size() || index.row() < 0) - return {}; - - switch (role) { - case Mxid: - return readReceipts_[index.row()].first; - case DisplayName: - return cache::displayName(room_id_, readReceipts_[index.row()].first); - case AvatarUrl: - return cache::avatarUrl(room_id_, readReceipts_[index.row()].first); - case Timestamp: - return dateFormat(readReceipts_[index.row()].second); - case RawTimestamp: - return readReceipts_[index.row()].second; - default: - return {}; - } + if (!index.isValid() || index.row() >= (int)readReceipts_.size() || index.row() < 0) + return {}; + + switch (role) { + case Mxid: + return readReceipts_[index.row()].first; + case DisplayName: + return cache::displayName(room_id_, readReceipts_[index.row()].first); + case AvatarUrl: + return cache::avatarUrl(room_id_, readReceipts_[index.row()].first); + case Timestamp: + return dateFormat(readReceipts_[index.row()].second); + case RawTimestamp: + return readReceipts_[index.row()].second; + default: + return {}; + } } void ReadReceiptsModel::addUsers( const std::multimap<uint64_t, std::string, std::greater<uint64_t>> &users) { - auto newReceipts = users.size() - readReceipts_.size(); - - if (newReceipts > 0) { - beginInsertRows( - QModelIndex{}, readReceipts_.size(), readReceipts_.size() + newReceipts - 1); + auto newReceipts = users.size() - readReceipts_.size(); - for (const auto &user : users) { - QPair<QString, QDateTime> item = { - QString::fromStdString(user.second), - QDateTime::fromMSecsSinceEpoch(user.first)}; - if (!readReceipts_.contains(item)) - readReceipts_.push_back(item); - } + if (newReceipts > 0) { + beginInsertRows( + QModelIndex{}, readReceipts_.size(), readReceipts_.size() + newReceipts - 1); - endInsertRows(); + for (const auto &user : users) { + QPair<QString, QDateTime> item = {QString::fromStdString(user.second), + QDateTime::fromMSecsSinceEpoch(user.first)}; + if (!readReceipts_.contains(item)) + readReceipts_.push_back(item); } + + endInsertRows(); + } } QString ReadReceiptsModel::dateFormat(const QDateTime &then) const { - auto now = QDateTime::currentDateTime(); - auto days = then.daysTo(now); - - if (days == 0) - return QLocale::system().toString(then.time(), QLocale::ShortFormat); - else if (days < 2) - return tr("Yesterday, %1") - .arg(QLocale::system().toString(then.time(), QLocale::ShortFormat)); - else if (days < 7) - //: %1 is the name of the current day, %2 is the time the read receipt was read. The - //: result may look like this: Monday, 7:15 - return QString("%1, %2") - .arg(then.toString("dddd")) - .arg(QLocale::system().toString(then.time(), QLocale::ShortFormat)); + auto now = QDateTime::currentDateTime(); + auto days = then.daysTo(now); + if (days == 0) return QLocale::system().toString(then.time(), QLocale::ShortFormat); + else if (days < 2) + return tr("Yesterday, %1") + .arg(QLocale::system().toString(then.time(), QLocale::ShortFormat)); + else if (days < 7) + //: %1 is the name of the current day, %2 is the time the read receipt was read. The + //: result may look like this: Monday, 7:15 + return QString("%1, %2") + .arg(then.toString("dddd")) + .arg(QLocale::system().toString(then.time(), QLocale::ShortFormat)); + + return QLocale::system().toString(then.time(), QLocale::ShortFormat); } ReadReceiptsProxy::ReadReceiptsProxy(QString event_id, QString room_id, QObject *parent) : QSortFilterProxyModel{parent} , model_{event_id, room_id, this} { - setSourceModel(&model_); - setSortRole(ReadReceiptsModel::RawTimestamp); - sort(0, Qt::DescendingOrder); - setDynamicSortFilter(true); + setSourceModel(&model_); + setSortRole(ReadReceiptsModel::RawTimestamp); + sort(0, Qt::DescendingOrder); + setDynamicSortFilter(true); }