summary refs log tree commit diff
path: root/src/ImagePackListModel.cpp
diff options
context:
space:
mode:
authorJoseph Donofry <joedonofry@gmail.com>2021-08-10 19:29:58 -0400
committerJoseph Donofry <joedonofry@gmail.com>2021-08-10 19:29:58 -0400
commitc91e771d538d99c9353b779ac4dd0d93a77cca6b (patch)
treea0b583cf945b5cd09622ccb68b9fc8ad0e369794 /src/ImagePackListModel.cpp
parentMerge remote-tracking branch 'nheko-im/master' into video_player_enhancements (diff)
parentProtect against replay attacks (diff)
downloadnheko-c91e771d538d99c9353b779ac4dd0d93a77cca6b.tar.xz
Merge origin/master and fix conflicts
Diffstat (limited to 'src/ImagePackListModel.cpp')
-rw-r--r--src/ImagePackListModel.cpp94
1 files changed, 94 insertions, 0 deletions
diff --git a/src/ImagePackListModel.cpp b/src/ImagePackListModel.cpp
new file mode 100644

index 00000000..6392de22 --- /dev/null +++ b/src/ImagePackListModel.cpp
@@ -0,0 +1,94 @@ +// SPDX-FileCopyrightText: 2021 Nheko Contributors +// +// SPDX-License-Identifier: GPL-3.0-or-later + +#include "ImagePackListModel.h" + +#include <QQmlEngine> + +#include "Cache_p.h" +#include "SingleImagePackModel.h" + +ImagePackListModel::ImagePackListModel(const std::string &roomId, QObject *parent) + : QAbstractListModel(parent) + , room_id(roomId) +{ + auto packs_ = cache::client()->getImagePacks(room_id, std::nullopt); + + for (const auto &pack : packs_) { + packs.push_back( + QSharedPointer<SingleImagePackModel>(new SingleImagePackModel(pack))); + } +} + +int +ImagePackListModel::rowCount(const QModelIndex &) const +{ + return (int)packs.size(); +} + +QHash<int, QByteArray> +ImagePackListModel::roleNames() const +{ + return { + {Roles::DisplayName, "displayName"}, + {Roles::AvatarUrl, "avatarUrl"}, + {Roles::FromAccountData, "fromAccountData"}, + {Roles::FromCurrentRoom, "fromCurrentRoom"}, + {Roles::StateKey, "statekey"}, + {Roles::RoomId, "roomid"}, + }; +} + +QVariant +ImagePackListModel::data(const QModelIndex &index, int role) const +{ + if (hasIndex(index.row(), index.column(), index.parent())) { + const auto &pack = packs.at(index.row()); + switch (role) { + case Roles::DisplayName: + return pack->packname(); + case Roles::AvatarUrl: + return pack->avatarUrl(); + case Roles::FromAccountData: + return pack->roomid().isEmpty(); + case Roles::FromCurrentRoom: + return pack->roomid().toStdString() == this->room_id; + case Roles::StateKey: + return pack->statekey(); + case Roles::RoomId: + return pack->roomid(); + default: + return {}; + } + } + return {}; +} + +SingleImagePackModel * +ImagePackListModel::packAt(int row) +{ + if (row < 0 || static_cast<size_t>(row) >= packs.size()) + return {}; + auto e = packs.at(row).get(); + QQmlEngine::setObjectOwnership(e, QQmlEngine::CppOwnership); + return e; +} + +SingleImagePackModel * +ImagePackListModel::newPack(bool inRoom) +{ + ImagePackInfo info{}; + if (inRoom) + info.source_room = room_id; + return new SingleImagePackModel(info); +} + +bool +ImagePackListModel::containsAccountPack() const +{ + for (const auto &p : packs) + if (p->roomid().isEmpty()) + return true; + return false; +}