// SPDX-FileCopyrightText: 2021 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later #pragma once #include #include #include #include #include class TimelineModel; class TimelineViewManager; class RoomlistModel : public QAbstractListModel { Q_OBJECT public: enum Roles { AvatarUrl = Qt::UserRole, RoomName, LastMessage, HasUnreadMessages, NotificationCount, }; RoomlistModel(TimelineViewManager *parent = nullptr); QHash roleNames() const override; int rowCount(const QModelIndex &parent = QModelIndex()) const override { (void)parent; return (int)roomids.size(); } QVariant data(const QModelIndex &index, int role) const override; QSharedPointer getRoomById(QString id) const { if (models.contains(id)) return models.value(id); else return {}; } public slots: void initializeRooms(const std::vector &roomids); void sync(const mtx::responses::Rooms &rooms); void clear(); private: void addRoom(const QString &room_id, bool suppressInsertNotification = false); TimelineViewManager *manager = nullptr; std::vector roomids; QHash> models; };