X-Git-Url: https://git.quassel-irc.org/?a=blobdiff_plain;f=src%2Fqtui%2Fmainwin.cpp;h=2e1ae409956d0ebb221263c1014fece77145da92;hb=a8c38cbe8d8686cc36c42b04d556a3d51d37576d;hp=ed467cd46d0b66979b30a401326235db125edf7d;hpb=8f7204aa8928f769a9cd74b3bfca4a4c5982c393;p=quassel.git diff --git a/src/qtui/mainwin.cpp b/src/qtui/mainwin.cpp index ed467cd4..2e1ae409 100644 --- a/src/qtui/mainwin.cpp +++ b/src/qtui/mainwin.cpp @@ -55,6 +55,7 @@ #include "clientbufferviewconfig.h" #include "clientbufferviewmanager.h" #include "clientignorelistmanager.h" +#include "coreconfigwizard.h" #include "coreconnectdlg.h" #include "coreconnection.h" #include "coreconnectionstatuswidget.h" @@ -95,6 +96,10 @@ # include "knotificationbackend.h" #endif /* HAVE_KDE */ +#ifdef HAVE_SSL +# include "sslinfodlg.h" +#endif + #ifdef HAVE_INDICATEQT #include "indicatornotificationbackend.h" #endif @@ -107,7 +112,6 @@ #include "settingspages/chatviewsettingspage.h" #include "settingspages/connectionsettingspage.h" #include "settingspages/coreaccountsettingspage.h" -#include "settingspages/generalsettingspage.h" #include "settingspages/highlightsettingspage.h" #include "settingspages/identitiessettingspage.h" #include "settingspages/ignorelistsettingspage.h" @@ -124,8 +128,6 @@ MainWin::MainWin(QWidget *parent) #else : QMainWindow(parent), #endif - coreLagLabel(new QLabel()), - sslLabel(new QLabel()), _msgProcessorStatusWidget(new MsgProcessorStatusWidget(this)), _coreConnectionStatusWidget(new CoreConnectionStatusWidget(Client::coreConnection(), this)), _titleSetter(this), @@ -158,7 +160,15 @@ void MainWin::init() { SLOT(messagesInserted(const QModelIndex &, int, int))); connect(GraphicalUi::contextMenuActionProvider(), SIGNAL(showChannelList(NetworkId)), SLOT(showChannelList(NetworkId))); connect(GraphicalUi::contextMenuActionProvider(), SIGNAL(showIgnoreList(QString)), SLOT(showIgnoreList(QString))); + + connect(Client::coreConnection(), SIGNAL(startCoreSetup(QVariantList)), SLOT(showCoreConfigWizard(QVariantList))); + connect(Client::coreConnection(), SIGNAL(connectionErrorPopup(QString)), SLOT(handleCoreConnectionError(QString))); connect(Client::coreConnection(), SIGNAL(userAuthenticationRequired(CoreAccount *, bool *, QString)), SLOT(userAuthenticationRequired(CoreAccount *, bool *, QString))); + connect(Client::coreConnection(), SIGNAL(handleNoSslInClient(bool*)), SLOT(handleNoSslInClient(bool *))); + connect(Client::coreConnection(), SIGNAL(handleNoSslInCore(bool*)), SLOT(handleNoSslInCore(bool *))); +#ifdef HAVE_SSL + connect(Client::coreConnection(), SIGNAL(handleSslErrors(const QSslSocket *, bool *, bool *)), SLOT(handleSslErrors(const QSslSocket *, bool *, bool *))); +#endif // Setup Dock Areas setDockNestingEnabled(true); @@ -633,17 +643,6 @@ void MainWin::setupStatusBar() { _coreConnectionStatusWidget->update(); statusBar()->addPermanentWidget(_coreConnectionStatusWidget); - // Core Lag: - updateLagIndicator(); - statusBar()->addPermanentWidget(coreLagLabel); - coreLagLabel->hide(); - connect(Client::signalProxy(), SIGNAL(lagUpdated(int)), this, SLOT(updateLagIndicator(int))); - - // SSL indicator - sslLabel->setPixmap(QPixmap()); - statusBar()->addPermanentWidget(sslLabel); - sslLabel->hide(); - QAction *showStatusbar = QtUi::actionCollection("General")->action("ToggleStatusBar"); QtUiSettings uiSettings; @@ -737,14 +736,7 @@ void MainWin::setConnectedState() { else statusBar()->clearMessage(); - if(Client::signalProxy()->isSecure()) { - sslLabel->setPixmap(SmallIcon("security-high")); - } else { - sslLabel->setPixmap(SmallIcon("security-low")); - } - - sslLabel->setVisible(!Client::internalCore()); - coreLagLabel->setVisible(!Client::internalCore()); + _coreConnectionStatusWidget->setVisible(!Client::internalCore()); updateIcon(); systemTray()->setState(SystemTray::Active); @@ -775,15 +767,6 @@ void MainWin::saveLayout() { if(accountId > 0) s.setValue(QString("MainWinState-%1").arg(accountId) , saveState(accountId)); } -void MainWin::updateLagIndicator(int lag) { - QString text = tr("Core Lag: %1"); - if(lag == -1) - text = text.arg('-'); - else - text = text.arg("%1 msec").arg(lag); - coreLagLabel->setText(text); -} - void MainWin::disconnectedFromCore() { // save core specific layout and remove bufferviews; saveLayout(); @@ -818,20 +801,80 @@ void MainWin::setDisconnectedState() { coll->action("CoreInfo")->setEnabled(false); //_viewMenu->setEnabled(false); statusBar()->showMessage(tr("Not connected to core.")); - sslLabel->setPixmap(QPixmap()); - sslLabel->hide(); - updateLagIndicator(); - coreLagLabel->hide(); if(_msgProcessorStatusWidget) _msgProcessorStatusWidget->setProgress(0, 0); updateIcon(); systemTray()->setState(SystemTray::Inactive); } -void MainWin::startInternalCore() { +void MainWin::userAuthenticationRequired(CoreAccount *account, bool *valid, const QString &errorMessage) { + Q_UNUSED(errorMessage) + CoreConnectAuthDlg dlg(account, this); + *valid = (dlg.exec() == QDialog::Accepted); +} + +void MainWin::handleNoSslInClient(bool *accepted) { + QMessageBox box(QMessageBox::Warning, tr("Unencrypted Connection"), tr("Your client does not support SSL encryption"), + QMessageBox::Ignore|QMessageBox::Cancel, this); + box.setInformativeText(tr("Sensitive data, like passwords, will be transmitted unencrypted to your Quassel core.")); + box.setDefaultButton(QMessageBox::Ignore); + *accepted = box.exec() == QMessageBox::Ignore; +} + +void MainWin::handleNoSslInCore(bool *accepted) { + QMessageBox box(QMessageBox::Warning, tr("Unencrypted Connection"), tr("Your core does not support SSL encryption"), + QMessageBox::Ignore|QMessageBox::Cancel, this); + box.setInformativeText(tr("Sensitive data, like passwords, will be transmitted unencrypted to your Quassel core.")); + box.setDefaultButton(QMessageBox::Ignore); + *accepted = box.exec() == QMessageBox::Ignore; } +#ifdef HAVE_SSL + +void MainWin::handleSslErrors(const QSslSocket *socket, bool *accepted, bool *permanently) { + QString errorString = ""; + + QMessageBox box(QMessageBox::Warning, + tr("Untrusted Security Certificate"), + tr("The SSL certificate provided by the core at %1 is untrusted for the following reasons:").arg(socket->peerName()), + QMessageBox::Cancel, this); + box.setInformativeText(errorString); + box.addButton(tr("Continue"), QMessageBox::AcceptRole); + box.setDefaultButton(box.addButton(tr("Show Certificate"), QMessageBox::HelpRole)); + + QMessageBox::ButtonRole role; + do { + box.exec(); + role = box.buttonRole(box.clickedButton()); + if(role == QMessageBox::HelpRole) { + SslInfoDlg dlg(socket, this); + dlg.exec(); + } + } while(role == QMessageBox::HelpRole); + + *accepted = role == QMessageBox::AcceptRole; + if(*accepted) { + QMessageBox box2(QMessageBox::Warning, + tr("Untrusted Security Certificate"), + tr("Would you like to accept this certificate forever without being prompted?"), + 0, this); + box2.setDefaultButton(box2.addButton(tr("Current Session Only"), QMessageBox::NoRole)); + box2.addButton(tr("Forever"), QMessageBox::YesRole); + box2.exec(); + *permanently = box2.buttonRole(box2.clickedButton()) == QMessageBox::YesRole; + } +} + +#endif /* HAVE_SSL */ + +void MainWin::handleCoreConnectionError(const QString &error) { + QMessageBox::critical(this, tr("Core Connection Error"), error, QMessageBox::Ok); +} + void MainWin::showCoreConnectionDlg() { CoreConnectDlg dlg(this); if(dlg.exec() == QDialog::Accepted) { @@ -841,10 +884,10 @@ void MainWin::showCoreConnectionDlg() { } } -void MainWin::userAuthenticationRequired(CoreAccount *account, bool *valid, const QString &errorMessage) { - Q_UNUSED(errorMessage) - CoreConnectAuthDlg dlg(account, this); - *valid = (dlg.exec() == QDialog::Accepted); +void MainWin::showCoreConfigWizard(const QVariantList &backends) { + CoreConfigWizard *wizard = new CoreConfigWizard(Client::coreConnection(), backends, this); + + wizard->show(); } void MainWin::showChannelList(NetworkId netId) { @@ -894,23 +937,23 @@ void MainWin::showSettingsDlg() { //Category: Interface dlg->registerSettingsPage(new AppearanceSettingsPage(dlg)); dlg->registerSettingsPage(new ChatViewSettingsPage(dlg)); + dlg->registerSettingsPage(new ChatMonitorSettingsPage(dlg)); dlg->registerSettingsPage(new ItemViewSettingsPage(dlg)); + dlg->registerSettingsPage(new BufferViewSettingsPage(dlg)); dlg->registerSettingsPage(new InputWidgetSettingsPage(dlg)); dlg->registerSettingsPage(new TopicWidgetSettingsPage(dlg)); dlg->registerSettingsPage(new HighlightSettingsPage(dlg)); dlg->registerSettingsPage(new NotificationsSettingsPage(dlg)); dlg->registerSettingsPage(new BacklogSettingsPage(dlg)); - dlg->registerSettingsPage(new BufferViewSettingsPage(dlg)); - dlg->registerSettingsPage(new ChatMonitorSettingsPage(dlg)); - //Category: Misc - dlg->registerSettingsPage(new GeneralSettingsPage(dlg)); + //Category: IRC dlg->registerSettingsPage(new ConnectionSettingsPage(dlg)); dlg->registerSettingsPage(new IdentitiesSettingsPage(dlg)); dlg->registerSettingsPage(new NetworksSettingsPage(dlg)); dlg->registerSettingsPage(new AliasesSettingsPage(dlg)); dlg->registerSettingsPage(new IgnoreListSettingsPage(dlg)); + // Category: Remote Cores if(Quassel::runMode() != Quassel::Monolithic) { dlg->registerSettingsPage(new CoreAccountSettingsPage(dlg)); }