#pragma once #include #include #include #include #include #include class MemberListModel; class DbManager; struct DetailAddress { int family; int protocol; QByteArray addr; int port; }; class AccountList : public QWidget { Q_OBJECT public: explicit AccountList(DbManager* db = nullptr, QWidget *parent = nullptr); void setChannel(const QString& channelId); void refresh(); private slots: void onMemberClicked(const QModelIndex& index); void onMemberDoubleClicked(const QModelIndex& index); void onMemberContextMenu(const QPoint& pos); void onDetailTimerTick(); private: void showMemberDetail(quint64 nodeId); void updateDetailDisplay(); static QString relativeTimeStr(qint64 timestamp); static QString addrStr(const void* addr, int family); QListView *m_listView; MemberListModel *m_model; DbManager *m_db; QTextEdit *m_detailText; QTimer *m_refreshTimer; QTimer *m_detailTimer; QString m_channelId; quint64 m_detailNodeId = 0; QString m_detailName; bool m_detailOnline = false; qint64 m_detailLastSeen = 0; qint64 m_detailCreated = 0; QVector m_detailAddrs; };