auto-connect + GUI per-channel indicators
- chat_core_connect_auto: direct ETCP connect from SQLite (no BGP) - auto_connect: parallel connect to peers with 3s timeout, retry 10s - RTT saved to node_addresses on disconnect - vertical status bar + circle badge with online count per channel - ChannelListView prevents deselection
This commit is contained in:
1 parent
1a0229fd4f
commit
dccf54b30b
22 files changed
+909
-10
No files matched your search
@@ -8,6 +8,28 @@
|
||||
#include <QPainter>
|
||||
#include <QPixmap>
|
||||
#include <QMenu>
|
||||
#include <QMouseEvent>
|
||||
|
||||
/* QListView that prevents deselection */
|
||||
class ChannelListView : public QListView {
|
||||
public:
|
||||
using QListView::QListView;
|
||||
protected:
|
||||
void mousePressEvent(QMouseEvent* e) override {
|
||||
if (indexAt(e->pos()).isValid())
|
||||
QListView::mousePressEvent(e);
|
||||
}
|
||||
QItemSelectionModel::SelectionFlags selectionCommand(const QModelIndex& idx, const QEvent* e) const override {
|
||||
if (idx.isValid())
|
||||
return QItemSelectionModel::ClearAndSelect | QItemSelectionModel::Current;
|
||||
return QItemSelectionModel::NoUpdate;
|
||||
}
|
||||
void selectionChanged(const QItemSelection& sel, const QItemSelection& desel) override {
|
||||
QListView::selectionChanged(sel, desel);
|
||||
if (selectionModel() && !selectionModel()->hasSelection() && currentIndex().isValid())
|
||||
selectionModel()->select(currentIndex(), QItemSelectionModel::ClearAndSelect);
|
||||
}
|
||||
};
|
||||
|
||||
static QIcon makeChannelIcon(const QColor &color, const QString &letter) {
|
||||
QPixmap pix(32, 32);
|
||||
@@ -29,7 +51,7 @@ static QIcon makeChannelIcon(const QColor &color, const QString &letter) {
|
||||
|
||||
ChannelList::ChannelList(DbManager* db, QWidget *parent)
|
||||
: QWidget(parent)
|
||||
, m_listView(new QListView(this))
|
||||
, m_listView(new ChannelListView(this))
|
||||
, m_model(new QStandardItemModel(this))
|
||||
, m_db(db)
|
||||
{
|
||||
@@ -161,3 +183,22 @@ void ChannelList::onContextMenu(const QPoint& pos) {
|
||||
if (menu.exec(m_listView->viewport()->mapToGlobal(pos)) == inviteAction)
|
||||
emit inviteRequested(cid);
|
||||
}
|
||||
|
||||
void ChannelList::setChannelPeersOnline(const QString& channelId, int count) {
|
||||
for (int row = 0; row < m_model->rowCount(); row++) {
|
||||
QStandardItem* item = m_model->item(row);
|
||||
if (item && item->data(ChannelChannelIdRole).toString() == channelId) {
|
||||
item->setData(count, ChannelPeersOnlineRole);
|
||||
item->setData(m_autoConnectActive ? 1 : 0, ChannelAutoConnectActiveRole);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void ChannelList::setAutoConnectActive(bool active) {
|
||||
m_autoConnectActive = active;
|
||||
for (int row = 0; row < m_model->rowCount(); row++) {
|
||||
QStandardItem* item = m_model->item(row);
|
||||
if (item) item->setData(active ? 1 : 0, ChannelAutoConnectActiveRole);
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user