#ifndef SESSIONMODEL_H #define SESSIONMODEL_H #include #include #include #include #include class Ollie9pClient; class SessionModel : public QAbstractListModel { Q_OBJECT Q_PROPERTY(int count READ rowCount NOTIFY countChanged) public: enum Roles { TypeRole = Qt::UserRole + 1, IdRole, ParentIdRole, AgentIdRole, LevelRole, ExpandedRole, ParentExpandedRole, StateRole, ModelRole, DisplayNameRole, BaseNameRole, ConnectionColorRole, PausedRole }; explicit SessionModel(Ollie9pClient *client, QObject *parent = nullptr); int rowCount(const QModelIndex &parent = {}) const override; QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override; QHash roleNames() const override; Q_INVOKABLE QVariantMap get(int index) const; Q_INVOKABLE void setExpanded(int index, bool expanded); Q_INVOKABLE QString firstAgentId(const QString &sessionId) const; signals: void countChanged(); private slots: void rebuild(); void updateAgentState(const QString &sessionId, const QString &agentId, const QString &state); private: struct Row { QString type; QString id; QString parentId; QString agentId; int level = 0; bool expanded = true; bool parentExpanded = true; QString state; QString model; QString displayName; QString baseName; QString connectionColor; bool paused = false; }; static QString connectionColor(const QVariantMap &session); void appendSession(const QVariantMap &session); void updateVisibility(); Ollie9pClient *m_client; QList m_rows; QHash m_expanded; }; #endif