feat: create stream and add members to stream
This commit is contained in:
+66
-1
@@ -5,10 +5,13 @@
|
||||
#include "MainWindow.h"
|
||||
#include "authdialog.h"
|
||||
#include "authmanager.h"
|
||||
#include "createstreamdialog.h"
|
||||
#include "memberpickerdialog.h"
|
||||
#include "settingsdialog.h"
|
||||
#include "textinputdialog.h"
|
||||
#include "ui_mainwindow.h"
|
||||
#include <QApplication>
|
||||
#include <QJsonDocument>
|
||||
#include <QHeaderView>
|
||||
#include <QItemSelectionModel>
|
||||
#include <QLabel>
|
||||
@@ -23,7 +26,7 @@
|
||||
MainWindow::MainWindow(QWidget *parent)
|
||||
: QMainWindow(parent), m_trayIcon(nullptr), m_authManager(new AuthManager(this)), m_settingsDialog(nullptr),
|
||||
m_authDialog(nullptr), m_store(nullptr), m_networkStreamModel(nullptr), m_particleListModel(nullptr),
|
||||
m_selectedParticleRow(-1), m_isDragging(false), m_textInputDialog(nullptr)
|
||||
m_selectedParticleRow(-1), m_isDragging(false), m_textInputDialog(nullptr), m_createStreamDialog(nullptr)
|
||||
{
|
||||
m_authDialog = new AuthDialog(this);
|
||||
m_textInputDialog = new TextInputDialog(this);
|
||||
@@ -110,6 +113,57 @@ MainWindow::MainWindow(QWidget *parent)
|
||||
// DocumentSend toolbar button opens text input dialog
|
||||
connect(ui->toolButton_3, &QToolButton::clicked, this, &MainWindow::showTextInputDialog);
|
||||
|
||||
// "New stream" button
|
||||
m_createStreamDialog = new CreateStreamDialog(this);
|
||||
connect(ui->pushButton, &QPushButton::clicked, this, [this]() {
|
||||
if (m_selectedNetworkName.isEmpty())
|
||||
return;
|
||||
const Network *network = m_store->networkById(m_selectedNetworkName);
|
||||
if (network)
|
||||
m_createStreamDialog->setNetworkMembers(network->members);
|
||||
m_createStreamDialog->show();
|
||||
m_createStreamDialog->raise();
|
||||
m_createStreamDialog->activateWindow();
|
||||
});
|
||||
connect(m_createStreamDialog, &CreateStreamDialog::streamRequested, this,
|
||||
[this](const QString &name, const QString &visibility, const QStringList &members) {
|
||||
m_store->createStream(m_selectedNetworkName, name, "", visibility, members);
|
||||
});
|
||||
|
||||
// "Add members" toolbar button (ListAdd icon in right sidebar)
|
||||
connect(ui->toolButton_7, &QToolButton::clicked, this, [this]() {
|
||||
if (m_selectedStreamId.isEmpty() || m_selectedNetworkName.isEmpty())
|
||||
return;
|
||||
const Network *network = m_store->networkById(m_selectedNetworkName);
|
||||
const Stream *stream = m_store->streamById(m_selectedStreamId);
|
||||
if (!network || !stream)
|
||||
return;
|
||||
|
||||
MemberPickerDialog picker("Add Members", this);
|
||||
picker.setMembers(network->members, stream->memberEmails);
|
||||
|
||||
if (picker.exec() == QDialog::Accepted)
|
||||
{
|
||||
QStringList emails = picker.selectedEmails();
|
||||
if (!emails.isEmpty())
|
||||
{
|
||||
auto *op = m_store->addStreamMembers(m_selectedStreamId, emails);
|
||||
connect(op, &Operation::success, this, [this](const QJsonDocument &) {
|
||||
auto *fetchOp = m_store->fetchStream(m_selectedStreamId);
|
||||
connect(fetchOp, &Operation::success, this, [this](const QJsonDocument &) {
|
||||
ui->membersList->clear();
|
||||
const Stream *s = m_store->streamById(m_selectedStreamId);
|
||||
if (s)
|
||||
{
|
||||
for (const QString &email : s->memberEmails)
|
||||
ui->membersList->addItem(email.split("@")[0]);
|
||||
}
|
||||
});
|
||||
});
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
m_authManager->tryRestoreSession();
|
||||
|
||||
setupTrayIcon();
|
||||
@@ -286,6 +340,12 @@ void MainWindow::onParticleSelectionChanged(const QItemSelection &selected, cons
|
||||
{
|
||||
ui->label->setText("");
|
||||
}
|
||||
|
||||
// Mark seen on selection
|
||||
if (!particle->seen)
|
||||
{
|
||||
m_store->markParticleSeen(particle->id);
|
||||
}
|
||||
}
|
||||
|
||||
updateStatusBar();
|
||||
@@ -407,6 +467,11 @@ bool MainWindow::eventFilter(QObject *obj, QEvent *event)
|
||||
showTextInputDialog();
|
||||
return true;
|
||||
}
|
||||
if (keyEvent->key() == Qt::Key_A && keyEvent->modifiers() == Qt::NoModifier && !m_selectedParticleId.isEmpty())
|
||||
{
|
||||
m_store->ackParticle(m_selectedParticleId);
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return QMainWindow::eventFilter(obj, event);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user