#pragma once #include #include #include #include class TimelineModel : public QAbstractListModel { Q_OBJECT public: explicit TimelineModel(QString room_id, QObject *parent = 0); enum Roles { Section, Type, Body, FormattedBody, UserId, UserName, Timestamp, }; QHash roleNames() const override; int rowCount(const QModelIndex &parent = QModelIndex()) const; QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const; Q_INVOKABLE QColor userColor(QString id, QColor background); Q_INVOKABLE QString displayName(QString id) const; void addEvents(const mtx::responses::Timeline &events); public slots: void fetchHistory(); private slots: // Add old events at the top of the timeline. void addBackwardsEvents(const mtx::responses::Messages &msgs); signals: void oldMessagesRetrieved(const mtx::responses::Messages &res); private: QHash events; std::vector eventOrder; QString room_id_; QString prev_batch_token_; bool isInitialSync = true; bool paginationInProgress = false; QHash userColors; };