: QObject(parent),
_model(model),
_blockSize(0),
+ _state(Disconnected),
_progressMinimum(0),
_progressMaximum(-1),
_progressValue(-1)
_netsToSync.clear();
_numNetsToSync = 0;
+ _state = Disconnected;
setProgressMaximum(-1); // disable
emit connectionMsg(tr("Disconnected from core."));
}
void CoreConnection::disconnectFromCore() {
- if(isConnected()) {
- Client::signalProxy()->removeAllPeers();
- resetConnection();
- }
+ Client::signalProxy()->removeAllPeers();
+ resetConnection();
}
void CoreConnection::reconnectToCore() {
resetWarningsHandler();
}
-void CoreConnection::loginToCore() {
+void CoreConnection::loginToCore(const QString &prevError) {
emit connectionMsg(tr("Logging in..."));
- if(currentAccount().user().isEmpty() || currentAccount().password().isEmpty()) {
- emit userAuthenticationRequired(&_account); // *must* be a synchronous call
- if(currentAccount().user().isEmpty() || currentAccount().password().isEmpty()) {
+ if(currentAccount().user().isEmpty() || currentAccount().password().isEmpty() || !prevError.isEmpty()) {
+ bool valid = false;
+ emit userAuthenticationRequired(&_account, &valid, prevError); // *must* be a synchronous call
+ if(!valid || currentAccount().user().isEmpty() || currentAccount().password().isEmpty()) {
disconnectFromCore();
+ emit connectionError(tr("Login canceled"));
return;
}
}
}
void CoreConnection::loginFailed(const QString &error) {
- emit userAuthenticationRequired(&_account, error); // *must* be a synchronous call
- if(currentAccount().user().isEmpty() || currentAccount().password().isEmpty()) {
- disconnectFromCore();
- return;
- }
- loginToCore();
+ loginToCore(error);
}
void CoreConnection::loginSuccess() {
updateProgress(0, 0);
+
+ // save current account data
+ _model->createOrUpdateAccount(currentAccount());
+ _model->save();
+
setProgressText(tr("Receiving session state"));
setState(Synchronizing);
emit connectionMsg(tr("Synchronizing to %1...").arg(currentAccount().accountName()));
void startCoreSetup(const QVariantList &);
// This signal MUST be handled synchronously!
- void userAuthenticationRequired(CoreAccount *, const QString &errorMessage = QString());
+ void userAuthenticationRequired(CoreAccount *, bool *valid, const QString &errorMessage = QString());
void handleIgnoreWarnings(bool permanently);
void connectionReady();
//void doCoreSetup(const QVariant &setupData);
- void loginToCore();
+ void loginToCore(const QString &previousError = QString());
void loginSuccess();
void loginFailed(const QString &errorMessage);
coreconfigwizardadminuserpage.ui
coreconfigwizardstorageselectionpage.ui
coreconfigwizardsyncpage.ui
+ coreconnectauthdlg.ui
coreinfodlg.ui
debugbufferviewoverlay.ui
debugconsole.ui
_settingsPage->save();
QDialog::accept();
}
+
+/******** CoreConnectAuthDlg ****************************************************************/
+
+CoreConnectAuthDlg::CoreConnectAuthDlg(CoreAccount *account, QWidget *parent)
+ : QDialog(parent),
+ _account(account)
+{
+ ui.setupUi(this);
+
+ connect(ui.user, SIGNAL(textChanged(QString)), SLOT(setButtonStates()));
+ connect(ui.password, SIGNAL(textChanged(QString)), SLOT(setButtonStates()));
+
+ ui.label->setText(tr("Please enter your credentials for %1:").arg(account->accountName()));
+ ui.user->setText(account->user());
+ ui.password->setText(account->password());
+ ui.rememberPasswd->setChecked(account->storePassword());
+}
+
+void CoreConnectAuthDlg::accept() {
+ _account->setUser(ui.user->text());
+ _account->setPassword(ui.password->text());
+ _account->setStorePassword(ui.rememberPasswd->isChecked());
+
+ QDialog::accept();
+}
+
+void CoreConnectAuthDlg::setButtonStates() {
+ bool valid = !(ui.user->text().isEmpty() || ui.password->text().isEmpty());
+ ui.buttonBox->button(QDialogButtonBox::Ok)->setEnabled(valid);
+}
#include "coreaccount.h"
+#include "ui_coreconnectauthdlg.h"
+
class CoreAccountSettingsPage;
class CoreConnectDlg : public QDialog {
CoreAccountSettingsPage *_settingsPage;
};
+class CoreConnectAuthDlg : public QDialog {
+ Q_OBJECT
+
+public:
+ CoreConnectAuthDlg(CoreAccount *account, QWidget *parent = 0);
+
+ void accept();
+
+private slots:
+ void setButtonStates();
+
+private:
+ Ui::CoreConnectAuthDlg ui;
+ CoreAccount *_account;
+};
+
#endif
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(userAuthenticationRequired(CoreAccount *, bool *, QString)), SLOT(userAuthenticationRequired(CoreAccount *, bool *, QString)));
// Setup Dock Areas
setDockNestingEnabled(true);
}
}
+void MainWin::userAuthenticationRequired(CoreAccount *account, bool *valid, const QString &errorMessage) {
+ Q_UNUSED(errorMessage)
+ CoreConnectAuthDlg dlg(account, this);
+ *valid = (dlg.exec() == QDialog::Accepted);
+}
+
void MainWin::showChannelList(NetworkId netId) {
ChannelListDlg *channelListDlg = new ChannelListDlg();
class BufferView;
class BufferViewConfig;
class ClientBufferViewConfig;
+class CoreAccount;
class CoreConnectionStatusWidget;
class BufferViewDock;
class BufferWidget;
void showAboutDlg();
void showChannelList(NetworkId netId = NetworkId());
void startInternalCore();
+ void userAuthenticationRequired(CoreAccount *, bool *valid, const QString &errorMessage);
void showCoreConnectionDlg();
void showCoreInfoDlg();
void showAwayLog();
--- /dev/null
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>CoreConnectAuthDlg</class>
+ <widget class="QDialog" name="CoreConnectAuthDlg">
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>395</width>
+ <height>183</height>
+ </rect>
+ </property>
+ <property name="windowTitle">
+ <string>Authentication Required</string>
+ </property>
+ <layout class="QVBoxLayout" name="verticalLayout">
+ <item>
+ <widget class="QLabel" name="label">
+ <property name="text">
+ <string>Please enter your account data:</string>
+ </property>
+ <property name="wordWrap">
+ <bool>false</bool>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <layout class="QGridLayout" name="gridLayout">
+ <item row="0" column="1">
+ <widget class="QLineEdit" name="user"/>
+ </item>
+ <item row="1" column="0">
+ <widget class="QLabel" name="label_3">
+ <property name="text">
+ <string>Password:</string>
+ </property>
+ </widget>
+ </item>
+ <item row="1" column="1">
+ <widget class="QLineEdit" name="password">
+ <property name="echoMode">
+ <enum>QLineEdit::Password</enum>
+ </property>
+ </widget>
+ </item>
+ <item row="0" column="0">
+ <widget class="QLabel" name="label_2">
+ <property name="text">
+ <string>Username:</string>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </item>
+ <item>
+ <widget class="QCheckBox" name="rememberPasswd">
+ <property name="text">
+ <string>Remember password</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <spacer name="verticalSpacer">
+ <property name="orientation">
+ <enum>Qt::Vertical</enum>
+ </property>
+ <property name="sizeHint" stdset="0">
+ <size>
+ <width>20</width>
+ <height>40</height>
+ </size>
+ </property>
+ </spacer>
+ </item>
+ <item>
+ <widget class="QDialogButtonBox" name="buttonBox">
+ <property name="orientation">
+ <enum>Qt::Horizontal</enum>
+ </property>
+ <property name="standardButtons">
+ <set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </widget>
+ <resources/>
+ <connections>
+ <connection>
+ <sender>buttonBox</sender>
+ <signal>accepted()</signal>
+ <receiver>CoreConnectAuthDlg</receiver>
+ <slot>accept()</slot>
+ <hints>
+ <hint type="sourcelabel">
+ <x>248</x>
+ <y>254</y>
+ </hint>
+ <hint type="destinationlabel">
+ <x>157</x>
+ <y>274</y>
+ </hint>
+ </hints>
+ </connection>
+ <connection>
+ <sender>buttonBox</sender>
+ <signal>rejected()</signal>
+ <receiver>CoreConnectAuthDlg</receiver>
+ <slot>reject()</slot>
+ <hints>
+ <hint type="sourcelabel">
+ <x>316</x>
+ <y>260</y>
+ </hint>
+ <hint type="destinationlabel">
+ <x>286</x>
+ <y>274</y>
+ </hint>
+ </hints>
+ </connection>
+ </connections>
+</ui>