Skip to content
Snippets Groups Projects
TimelineViewManager.h 4.88 KiB
Newer Older
  • Learn to ignore specific revisions
  • CH Chethan Reddy's avatar
    CH Chethan Reddy committed
    #include <QLinkedList>
    
    Nicolas Werner's avatar
    Nicolas Werner committed
    #include <QQuickView>
    #include <QQuickWidget>
    
    #include <QSharedPointer>
    
    Nicolas Werner's avatar
    Nicolas Werner committed
    #include <QWidget>
    
    #include <mtx/common.hpp>
    
    Nicolas Werner's avatar
    Nicolas Werner committed
    #include <mtx/responses.hpp>
    
    Nicolas Werner's avatar
    Nicolas Werner committed
    #include "Cache.h"
    
    #include "DeviceVerificationFlow.h"
    
    Nicolas Werner's avatar
    Nicolas Werner committed
    #include "Logging.h"
    #include "TimelineModel.h"
    
    #include "Utils.h"
    
    #include "emoji/EmojiModel.h"
    #include "emoji/Provider.h"
    
    Nicolas Werner's avatar
    Nicolas Werner committed
    class MxcImageProvider;
    
    class BlurhashProvider;
    
    Nicolas Werner's avatar
    Nicolas Werner committed
    class ColorImageProvider;
    
    class UserSettings;
    
    class DeviceVerificationList : public QObject
    {
            Q_OBJECT
    public:
            Q_INVOKABLE void add(QString tran_id);
            Q_INVOKABLE void remove(QString tran_id);
            Q_INVOKABLE bool exist(QString tran_id);
    
    private:
    
    CH Chethan Reddy's avatar
    CH Chethan Reddy committed
            QLinkedList<QString> dv_list;
    
    Nicolas Werner's avatar
    Nicolas Werner committed
    class TimelineViewManager : public QObject
    
    Konstantinos Sideris's avatar
    Konstantinos Sideris committed
    {
    
            Q_OBJECT
    
    Nicolas Werner's avatar
    Nicolas Werner committed
            Q_PROPERTY(
              TimelineModel *timeline MEMBER timeline_ READ activeTimeline NOTIFY activeTimelineChanged)
    
            Q_PROPERTY(
              bool isInitialSync MEMBER isInitialSync_ READ isInitialSync NOTIFY initialSyncChanged)
    
    Nicolas Werner's avatar
    Nicolas Werner committed
    public:
    
    Nicolas Werner's avatar
    Nicolas Werner committed
            TimelineViewManager(QSharedPointer<UserSettings> userSettings, QWidget *parent = nullptr);
    
    Nicolas Werner's avatar
    Nicolas Werner committed
            QWidget *getWidget() const { return container; }
    
            void sync(const mtx::responses::Rooms &rooms);
    
    Nicolas Werner's avatar
    Nicolas Werner committed
            void addRoom(const QString &room_id);
    
    Nicolas Werner's avatar
    Nicolas Werner committed
            void clearAll() { models.clear(); }
    
            Q_INVOKABLE TimelineModel *activeTimeline() const { return timeline_; }
    
            Q_INVOKABLE bool isInitialSync() const { return isInitialSync_; }
    
            Q_INVOKABLE void openImageOverlay(QString mxcUrl, QString eventId) const;
    
            Q_INVOKABLE QColor userColor(QString id, QColor background);
    
            // Q_INVOKABLE QString userPresence(QString id) const;
    
            Q_INVOKABLE QString userStatus(QString id) const;
    
    
            void clearRoomMessageCount(QString roomid);
    
    Nicolas Werner's avatar
    Nicolas Werner committed
            void updateRoomsLastMessage(QString roomid, const DescInfo &info);
            void activeTimelineChanged(TimelineModel *timeline);
    
            void initialSyncChanged(bool isInitialSync);
    
            void replyingEventChanged(QString replyingEvent);
    
            void newDeviceVerificationRequest(DeviceVerificationFlow *flow,
                                              QString transactionId,
                                              QString userId,
                                              QString deviceId);
    
    Konstantinos Sideris's avatar
    Konstantinos Sideris committed
    public slots:
    
            void updateReadReceipts(const QString &room_id, const std::vector<QString> &event_ids);
    
            void initWithMessages(const std::map<QString, mtx::responses::Timeline> &msgs);
    
            void setHistoryView(const QString &room_id);
    
    Nicolas Werner's avatar
    Nicolas Werner committed
            void updateColorPalette();
    
    Nicolas Werner's avatar
    Nicolas Werner committed
            void queueReactionMessage(const QString &reactedEvent, const QString &reactionKey);
    
    Nicolas Werner's avatar
    Nicolas Werner committed
            void queueTextMessage(const QString &msg);
    
            void queueEmoteMessage(const QString &msg);
    
            void queueImageMessage(const QString &roomid,
                                   const QString &filename,
    
    Nicolas Werner's avatar
    Nicolas Werner committed
                                   const std::optional<mtx::crypto::EncryptedFile> &file,
    
                                   const QString &url,
                                   const QString &mime,
    
                                   const QSize &dimensions,
    
    Nicolas Werner's avatar
    Nicolas Werner committed
                                   const QString &blurhash);
    
            void queueFileMessage(const QString &roomid,
                                  const QString &filename,
    
    Nicolas Werner's avatar
    Nicolas Werner committed
                                  const std::optional<mtx::crypto::EncryptedFile> &file,
    
                                  const QString &url,
                                  const QString &mime,
    
    Nicolas Werner's avatar
    Nicolas Werner committed
                                  uint64_t dsize);
    
            void queueAudioMessage(const QString &roomid,
                                   const QString &filename,
    
    Nicolas Werner's avatar
    Nicolas Werner committed
                                   const std::optional<mtx::crypto::EncryptedFile> &file,
    
                                   const QString &url,
                                   const QString &mime,
    
    Nicolas Werner's avatar
    Nicolas Werner committed
                                   uint64_t dsize);
    
            void queueVideoMessage(const QString &roomid,
                                   const QString &filename,
    
    Nicolas Werner's avatar
    Nicolas Werner committed
                                   const std::optional<mtx::crypto::EncryptedFile> &file,
    
                                   const QString &url,
                                   const QString &mime,
    
    Nicolas Werner's avatar
    Nicolas Werner committed
                                   uint64_t dsize);
    
            void updateEncryptedDescriptions();
    
    Konstantinos Sideris's avatar
    Konstantinos Sideris committed
    private:
    
    Nicolas Werner's avatar
    Nicolas Werner committed
    #ifdef USE_QUICK_VIEW
            QQuickView *view;
    #else
            QQuickWidget *view;
    #endif
            QWidget *container;
    
    Nicolas Werner's avatar
    Nicolas Werner committed
            MxcImageProvider *imgProvider;
            ColorImageProvider *colorImgProvider;
    
            BlurhashProvider *blurhashProvider;
    
    Nicolas Werner's avatar
    Nicolas Werner committed
    
            QHash<QString, QSharedPointer<TimelineModel>> models;
    
            TimelineModel *timeline_ = nullptr;
    
    
            bool isInitialSync_ = true;
    
    
            QSharedPointer<UserSettings> settings;
    
            QHash<QString, QColor> userColors;
    
    Konstantinos Sideris's avatar
    Konstantinos Sideris committed
    };
    
    Q_DECLARE_METATYPE(mtx::events::collections::DeviceEvents)