refactor: decouple network detail widget from business logic
This commit is contained in:
+41
-13
@@ -108,7 +108,6 @@ MainWindow::MainWindow(QWidget *parent)
|
||||
m_splitter->setStretchFactor(0, 1);
|
||||
m_splitter->setStretchFactor(1, 4);
|
||||
m_splitter->setStretchFactor(2, 1);
|
||||
m_splitter->setStretchFactor(3, 5);
|
||||
|
||||
setupModels();
|
||||
|
||||
@@ -124,7 +123,6 @@ MainWindow::MainWindow(QWidget *parent)
|
||||
connect(m_authManager, &AuthManager::signedOut, m_authDialog, &AuthDialog::show);
|
||||
connect(m_authManager, &AuthManager::signedIn, this, [this]() {
|
||||
m_store->setCurrentUserEmail(m_authManager->sessionData()->email);
|
||||
m_networkDetailWidget->setCurrentUserEmail(m_authManager->sessionData()->email);
|
||||
m_store->loadStartupData();
|
||||
});
|
||||
connect(m_store, &Store::startupDataLoaded, this, [this]() {
|
||||
@@ -158,9 +156,9 @@ MainWindow::MainWindow(QWidget *parent)
|
||||
// "New stream" button
|
||||
m_createStreamDialog = new CreateStreamDialog(this);
|
||||
connect(m_newStreamButton, &QPushButton::clicked, this, [this]() {
|
||||
if (m_selectedNetworkName.isEmpty())
|
||||
if (m_selectedNetworkId.isEmpty())
|
||||
return;
|
||||
const Network *network = m_store->networkById(m_selectedNetworkName);
|
||||
const Network *network = m_store->networkById(m_selectedNetworkId);
|
||||
if (network)
|
||||
m_createStreamDialog->setNetworkMembers(network->members);
|
||||
m_createStreamDialog->show();
|
||||
@@ -169,14 +167,14 @@ MainWindow::MainWindow(QWidget *parent)
|
||||
});
|
||||
connect(m_createStreamDialog, &CreateStreamDialog::streamRequested, this,
|
||||
[this](const QString &name, const QString &visibility, const QStringList &members) {
|
||||
m_store->createStream(m_selectedNetworkName, name, "", visibility, members);
|
||||
m_store->createStream(m_selectedNetworkId, name, "", visibility, members);
|
||||
});
|
||||
|
||||
// "Add members" toolbar button (ListAdd icon in right sidebar)
|
||||
connect(m_addMembersButton, &QToolButton::clicked, this, [this]() {
|
||||
if (m_selectedStreamId.isEmpty() || m_selectedNetworkName.isEmpty())
|
||||
if (m_selectedStreamId.isEmpty() || m_selectedNetworkId.isEmpty())
|
||||
return;
|
||||
const Network *network = m_store->networkById(m_selectedNetworkName);
|
||||
const Network *network = m_store->networkById(m_selectedNetworkId);
|
||||
const Stream *stream = m_store->streamById(m_selectedStreamId);
|
||||
if (!network || !stream)
|
||||
return;
|
||||
@@ -446,10 +444,32 @@ void MainWindow::setupModels()
|
||||
// Create store (data loaded after sign-in via loadStartupData)
|
||||
m_store = new Store(this);
|
||||
|
||||
m_networkDetailWidget = new NetworkDetailWidget(m_store);
|
||||
m_networkDetailWidget = new NetworkDetailWidget(this);
|
||||
m_splitter->addWidget(m_networkDetailWidget);
|
||||
m_splitter->setStretchFactor(3, 4);
|
||||
m_networkDetailWidget->hide();
|
||||
|
||||
// Push fresh data when networks change
|
||||
connect(m_store, &Store::networksChanged, this, [this]() {
|
||||
if (!m_selectedNetworkId.isEmpty() && m_networkDetailWidget->isVisible())
|
||||
{
|
||||
const Network *network = m_store->networkById(m_selectedNetworkId);
|
||||
if (network)
|
||||
m_networkDetailWidget->setNetwork(*network, m_authManager->sessionData() ? m_authManager->sessionData()->email : QString());
|
||||
else
|
||||
m_networkDetailWidget->clear();
|
||||
}
|
||||
});
|
||||
|
||||
// Handle add-member requests from the widget
|
||||
connect(m_networkDetailWidget, &NetworkDetailWidget::addMemberRequested, this,
|
||||
[this](const QString &networkId, const QString &email) {
|
||||
auto *op = m_store->addNetworkMembers(networkId, {email});
|
||||
connect(op, &Operation::success, this, [this, networkId](const QJsonDocument &) {
|
||||
m_store->fetchNetwork(networkId);
|
||||
});
|
||||
});
|
||||
|
||||
// Create and set tree model
|
||||
m_networkStreamModel = new NetworkStreamModel(m_store, this);
|
||||
m_treeView->setModel(m_networkStreamModel);
|
||||
@@ -514,7 +534,7 @@ void MainWindow::onTreeSelectionChanged(const QItemSelection &selected, const QI
|
||||
// Also track the parent network
|
||||
QModelIndex parentIndex = m_networkStreamModel->parent(index);
|
||||
QString networkId = m_networkStreamModel->networkIdFromIndex(parentIndex);
|
||||
m_selectedNetworkName = networkId;
|
||||
m_selectedNetworkId = networkId;
|
||||
|
||||
// Show stream members
|
||||
m_membersList->clear();
|
||||
@@ -548,10 +568,18 @@ void MainWindow::onTreeSelectionChanged(const QItemSelection &selected, const QI
|
||||
m_membersList->clear();
|
||||
|
||||
QString networkId = m_networkStreamModel->networkIdFromIndex(index);
|
||||
m_selectedNetworkName = networkId;
|
||||
m_selectedNetworkId = networkId;
|
||||
|
||||
// Show network detail widget
|
||||
m_networkDetailWidget->setNetwork(networkId);
|
||||
const Network *network = m_store->networkById(networkId);
|
||||
if (network)
|
||||
{
|
||||
m_networkDetailWidget->setNetwork(*network, m_authManager->sessionData() ? m_authManager->sessionData()->email : QString());
|
||||
}
|
||||
else
|
||||
{
|
||||
m_networkDetailWidget->clear();
|
||||
}
|
||||
m_contentView->hide();
|
||||
m_rightSidebar->hide();
|
||||
m_networkDetailWidget->show();
|
||||
@@ -622,9 +650,9 @@ void MainWindow::updateStatusBar()
|
||||
QStringList pathComponents;
|
||||
|
||||
// Add network if selected
|
||||
if (!m_selectedNetworkName.isEmpty())
|
||||
if (!m_selectedNetworkId.isEmpty())
|
||||
{
|
||||
const Network *network = m_store->networkById(m_selectedNetworkName);
|
||||
const Network *network = m_store->networkById(m_selectedNetworkId);
|
||||
if (network)
|
||||
{
|
||||
pathComponents << network->name;
|
||||
|
||||
Reference in New Issue
Block a user