rendered paste bodyIndex: protocols/yahoo/yahooeditaccount.cpp===================================================================--- protocols/yahoo/yahooeditaccount.cpp (Revision 736753)+++ protocols/yahoo/yahooeditaccount.cpp (Arbeitskopie)@@ -96,21 +96,19 @@ show(); } -bool YahooEditAccount::validateData()+bool YahooEditAccount::validateData( Kopete::AccountChangeAction changeAction ) { kDebug(YAHOO_GEN_DEBUG) ; - if(mScreenName->text().isEmpty())- { KMessageBox::queuedMessageBox(this, KMessageBox::Sorry,- i18n("<qt>You must enter a valid screen name.</qt>"), i18n("Yahoo"));- return false;- }+ QString userName(mScreenName->text());+ if(!mPasswordWidget->validate()) { KMessageBox::queuedMessageBox(this, KMessageBox::Sorry, i18n("<qt>You must enter a valid password.</qt>"), i18n("Yahoo")); return false; }- return true;++ return validateAccountId("YahooProtocol", userName, changeAction); } Kopete::Account *YahooEditAccount::apply()Index: protocols/yahoo/yahooeditaccount.h===================================================================--- protocols/yahoo/yahooeditaccount.h (Revision 736753)+++ protocols/yahoo/yahooeditaccount.h (Arbeitskopie)@@ -43,7 +43,7 @@ public: YahooEditAccount(YahooProtocol *protocol, Kopete::Account *theAccount, QWidget *parent = 0); - virtual bool validateData();+ virtual bool validateData( Kopete::AccountChangeAction changeAction=Kopete::Create ); public slots: virtual Kopete::Account *apply();Index: protocols/gadu/gadueditaccount.h===================================================================--- protocols/gadu/gadueditaccount.h (Revision 736753)+++ protocols/gadu/gadueditaccount.h (Arbeitskopie)@@ -38,7 +38,7 @@ public: GaduEditAccount( GaduProtocol*, Kopete::Account*, QWidget* parent = 0 );- virtual bool validateData();+ virtual bool validateData( Kopete::AccountChangeAction changeAction=Kopete::Create ); Kopete::Account* apply(); private slots:Index: protocols/gadu/gadueditaccount.cpp===================================================================--- protocols/gadu/gadueditaccount.cpp (Revision 736753)+++ protocols/gadu/gadueditaccount.cpp (Arbeitskopie)@@ -210,15 +210,13 @@ } bool-GaduEditAccount::validateData()+GaduEditAccount::validateData( Kopete::AccountChangeAction changeAction ) {-- if ( loginEdit_->text().isEmpty() ) {- KMessageBox::sorry( this, i18n( "<b>Enter UIN please.</b>" ), i18n( "Gadu-Gadu" ) );+ QString userName(loginEdit_->text());+ if ( !validateAccountId("GaduProtocol", userName, changeAction) ) return false;- } - if ( loginEdit_->text().toInt() < 0 || loginEdit_->text().toInt() == 0 ) {+ if ( userName.toInt() <= 0 ) { KMessageBox::sorry( this, i18n( "<b>UIN should be a positive number.</b>" ), i18n( "Gadu-Gadu" ) ); return false; }Index: protocols/winpopup/wpeditaccount.cpp===================================================================--- protocols/winpopup/wpeditaccount.cpp (Revision 736753)+++ protocols/winpopup/wpeditaccount.cpp (Arbeitskopie)@@ -36,7 +36,6 @@ #include <kconfig.h> #include <kstandarddirs.h> - // Kopete Includes #include <addcontactpage.h> @@ -93,11 +92,12 @@ mProtocol->installSamba(); } -bool WPEditAccount::validateData()+bool WPEditAccount::validateData( Kopete::AccountChangeAction changeAction ) { kDebug(14170) << "WPEditAccount::validateData()"; - if(mHostName->text().isEmpty()) {+ QString hostname(mHostName->text());+ if(hostname.isEmpty()) { KMessageBox::sorry(this, i18n("<qt>You must enter a valid screen name.</qt>"), i18n("WinPopup")); return false; }@@ -108,7 +108,7 @@ return false; } - return true;+ return validateAccountId("WPProtocol", hostname, changeAction); } void WPEditAccount::writeConfig()Index: protocols/winpopup/wpeditaccount.h===================================================================--- protocols/winpopup/wpeditaccount.h (Revision 736753)+++ protocols/winpopup/wpeditaccount.h (Arbeitskopie)@@ -43,7 +43,7 @@ public: WPEditAccount(QWidget *parent, Kopete::Account *theAccount); - virtual bool validateData();+ virtual bool validateData( Kopete::AccountChangeAction changeAction=Kopete::Create ); void writeConfig(); public slots:Index: protocols/qq/ui/qqeditaccountwidget.cpp===================================================================--- protocols/qq/ui/qqeditaccountwidget.cpp (Revision 736753)+++ protocols/qq/ui/qqeditaccountwidget.cpp (Arbeitskopie)@@ -165,14 +165,21 @@ return account(); } -bool QQEditAccountWidget::validateData()+bool QQEditAccountWidget::validateData( Kopete::AccountChangeAction changeAction ) { QString userid = d->ui->m_login->text();++ if ( !validateAccountId("QQProtocol", userid, changeAction) )+ {+ return false;+ }+ if ( QQProtocol::validContactId( userid ) ) return true; KMessageBox::queuedMessageBox( Kopete::UI::Global::mainWidget(), KMessageBox::Sorry, i18n( "<qt>You must enter a valid email address.</qt>" ), i18n( "QQ Plugin" ) );+ return false; } Index: protocols/qq/ui/qqeditaccountwidget.h===================================================================--- protocols/qq/ui/qqeditaccountwidget.h (Revision 736753)+++ protocols/qq/ui/qqeditaccountwidget.h (Arbeitskopie)@@ -42,7 +42,7 @@ /** * Is the data correct? */- virtual bool validateData();+ virtual bool validateData( Kopete::AccountChangeAction changeAction=Kopete::Create ); private slots: void slotOpenRegister();Index: protocols/groupwise/ui/gweditaccountwidget.cpp===================================================================--- protocols/groupwise/ui/gweditaccountwidget.cpp (Revision 736753)+++ protocols/groupwise/ui/gweditaccountwidget.cpp (Arbeitskopie)@@ -114,9 +114,12 @@ return account(); } -bool GroupWiseEditAccountWidget::validateData()+bool GroupWiseEditAccountWidget::validateData( Kopete::AccountChangeAction changeAction ) {- return !( m_preferencesDialog->m_userId->text().isEmpty() || m_preferencesDialog->m_server->text().isEmpty() );+ if (!validateAccountId("GroupwiseProtocol", m_preferencesDialog->m_userId->text(), changeAction))+ return false;++ return !m_preferencesDialog->m_server->text().isEmpty(); } void GroupWiseEditAccountWidget::writeConfig()Index: protocols/groupwise/ui/gweditaccountwidget.h===================================================================--- protocols/groupwise/ui/gweditaccountwidget.h (Revision 736753)+++ protocols/groupwise/ui/gweditaccountwidget.h (Arbeitskopie)@@ -49,7 +49,7 @@ /** * Is the data correct? */- virtual bool validateData();+ virtual bool validateData( Kopete::AccountChangeAction changeAction=Kopete::Create ); protected slots: void configChanged(); protected:Index: protocols/jabber/ui/jabbereditaccountwidget.cpp===================================================================--- protocols/jabber/ui/jabbereditaccountwidget.cpp (Revision 736753)+++ protocols/jabber/ui/jabbereditaccountwidget.cpp (Arbeitskopie)@@ -194,11 +194,17 @@ account()->configGroup()->writeEntry("HideSystemInfo", cbHideSystemInfo->isChecked()); } -bool JabberEditAccountWidget::validateData ()+bool JabberEditAccountWidget::validateData ( Kopete::AccountChangeAction changeAction ) {+ QString userId(mID->text()); - if(!mID->text().contains('@'))+ if (!validateAccountId("JabberProtocol", userId, changeAction)) {+ return false;+ }++ if(!userId.contains('@'))+ { KMessageBox::sorry(this, i18n("The Jabber ID you have chosen is invalid. " "Please make sure it is in the form user@server.com, like an email address."), i18n("Invalid Jabber ID"));Index: protocols/jabber/ui/jabbereditaccountwidget.h===================================================================--- protocols/jabber/ui/jabbereditaccountwidget.h (Revision 736753)+++ protocols/jabber/ui/jabbereditaccountwidget.h (Arbeitskopie)@@ -39,7 +39,7 @@ public: JabberEditAccountWidget (JabberProtocol * proto, JabberAccount *, QWidget * parent = 0); ~JabberEditAccountWidget ();- virtual bool validateData ();+ virtual bool validateData ( Kopete::AccountChangeAction changeAction=Kopete::Create ); virtual Kopete::Account *apply (); JabberAccount *account (); Index: protocols/testbed/testbededitaccountwidget.cpp===================================================================--- protocols/testbed/testbededitaccountwidget.cpp (Revision 736753)+++ protocols/testbed/testbededitaccountwidget.cpp (Arbeitskopie)@@ -58,7 +58,7 @@ return account(); } -bool TestbedEditAccountWidget::validateData()+bool TestbedEditAccountWidget::validateData( Kopete::AccountChangeAction changeAction ) { //return !( m_preferencesWidget->m_acctName->text().isEmpty() ); return true;Index: protocols/testbed/testbededitaccountwidget.h===================================================================--- protocols/testbed/testbededitaccountwidget.h (Revision 736753)+++ protocols/testbed/testbededitaccountwidget.h (Arbeitskopie)@@ -45,7 +45,7 @@ /** * Is the data correct? */- virtual bool validateData();+ virtual bool validateData( Kopete::AccountChangeAction changeAction=Kopete::Create ); protected: Kopete::Account *m_account; Ui::TestbedAccountPreferences *m_preferencesWidget;Index: protocols/msn/ui/msneditaccountwidget.cpp===================================================================--- protocols/msn/ui/msneditaccountwidget.cpp (Revision 736753)+++ protocols/msn/ui/msneditaccountwidget.cpp (Arbeitskopie)@@ -214,9 +214,15 @@ return account(); } -bool MSNEditAccountWidget::validateData()+bool MSNEditAccountWidget::validateData( Kopete::AccountChangeAction changeAction ) { QString userid = d->ui->m_login->text();++ if ( !validateAccountId("MSNProtocol", userid, changeAction) )+ {+ return false;+ }+ if ( MSNProtocol::validContactId( userid ) ) return true; Index: protocols/msn/ui/msneditaccountwidget.h===================================================================--- protocols/msn/ui/msneditaccountwidget.h (Revision 736753)+++ protocols/msn/ui/msneditaccountwidget.h (Arbeitskopie)@@ -39,7 +39,7 @@ public: MSNEditAccountWidget( MSNProtocol *proto, Kopete::Account *account, QWidget *parent = 0 ); ~MSNEditAccountWidget();- virtual bool validateData();+ virtual bool validateData( Kopete::AccountChangeAction changeAction=Kopete::Create ); virtual Kopete::Account * apply(); private slots:Index: protocols/telepathy/ui/telepathyeditaccountwidget.cpp===================================================================--- protocols/telepathy/ui/telepathyeditaccountwidget.cpp (Revision 736753)+++ protocols/telepathy/ui/telepathyeditaccountwidget.cpp (Arbeitskopie)@@ -105,7 +105,7 @@ return static_cast<TelepathyAccount*>( KopeteEditAccountWidget::account() ); } -bool TelepathyEditAccountWidget::validateData()+bool TelepathyEditAccountWidget::validateData( Kopete::AccountChangeAction changeAction ) { kDebug(TELEPATHY_DEBUG_AREA) ; // You must fill the form to move to the next stepIndex: protocols/telepathy/ui/telepathyeditaccountwidget.h===================================================================--- protocols/telepathy/ui/telepathyeditaccountwidget.h (Revision 736753)+++ protocols/telepathy/ui/telepathyeditaccountwidget.h (Arbeitskopie)@@ -42,7 +42,7 @@ explicit TelepathyEditAccountWidget(Kopete::Account *account, QWidget *parent = 0); ~TelepathyEditAccountWidget(); - virtual bool validateData();+ virtual bool validateData( Kopete::AccountChangeAction changeAction=Kopete::Create ); /** * Create a new account if we are in the 'add account wizard',Index: protocols/sms/smseditaccountwidget.h===================================================================--- protocols/sms/smseditaccountwidget.h (Revision 736753)+++ protocols/sms/smseditaccountwidget.h (Arbeitskopie)@@ -33,7 +33,7 @@ SMSEditAccountWidget(SMSProtocol *protocol, Kopete::Account *theAccount, QWidget *parent = 0); ~SMSEditAccountWidget(); - bool validateData();+ bool validateData( Kopete::AccountChangeAction changeAction=Kopete::Create ); Kopete::Account* apply(); public slots: void setServicePreferences(const QString& serviceName);Index: protocols/sms/smseditaccountwidget.cpp===================================================================--- protocols/sms/smseditaccountwidget.cpp (Revision 736753)+++ protocols/sms/smseditaccountwidget.cpp (Arbeitskopie)@@ -90,9 +90,9 @@ delete service; } -bool SMSEditAccountWidget::validateData()+bool SMSEditAccountWidget::validateData( Kopete::AccountChangeAction changeAction ) {- return true;+ return validateAccountId("SMSProtocol", preferencesDialog->accountId->text(), changeAction); } Kopete::Account* SMSEditAccountWidget::apply()Index: protocols/oscar/aim/ui/aimeditaccountwidget.h===================================================================--- protocols/oscar/aim/ui/aimeditaccountwidget.h (Revision 736753)+++ protocols/oscar/aim/ui/aimeditaccountwidget.h (Arbeitskopie)@@ -44,7 +44,7 @@ QWidget *parent=0); virtual ~AIMEditAccountWidget(); - virtual bool validateData();+ virtual bool validateData( Kopete::AccountChangeAction changeAction=Kopete::Create ); virtual Kopete::Account *apply(); private slots:Index: protocols/oscar/aim/ui/aimeditaccountwidget.cpp===================================================================--- protocols/oscar/aim/ui/aimeditaccountwidget.cpp (Revision 736753)+++ protocols/oscar/aim/ui/aimeditaccountwidget.cpp (Arbeitskopie)@@ -203,7 +203,7 @@ return mAccount; } -bool AIMEditAccountWidget::validateData()+bool AIMEditAccountWidget::validateData( Kopete::AccountChangeAction changeAction ) { //kDebug(14152) << "Called."; @@ -211,18 +211,13 @@ QString server = mGui->edtServerAddress->text(); int port = mGui->sbxServerPort->value(); - if ( userName.length() < 1 )- return false;- if ( port < 1 ) return false; if ( server.length() < 1 ) return false; - // Seems good to me- //kDebug(14152) << "Account data validated successfully.";- return true;+ return validateAccountId("AIMProtocol", userName, changeAction); } void AIMEditAccountWidget::slotOpenRegister()Index: protocols/oscar/icq/icqprotocol.cpp===================================================================--- protocols/oscar/icq/icqprotocol.cpp (Revision 736753)+++ protocols/oscar/icq/icqprotocol.cpp (Arbeitskopie)@@ -842,6 +842,11 @@ return statusManager_; } +bool ICQProtocol::validatePassword( const QString & password ) const+{+ return password.length() >= 6 && password.length() <= 8;+}+ //END class ICQProtocol #include "icqprotocol.moc"Index: protocols/oscar/icq/icqprotocol.h===================================================================--- protocols/oscar/icq/icqprotocol.h (Revision 736753)+++ protocols/oscar/icq/icqprotocol.h (Arbeitskopie)@@ -76,6 +76,8 @@ void setTZComboValue(QComboBox *combo, const char &tz); char getTZComboValue(QComboBox *combo); */ + virtual bool validatePassword( const QString & password ) const;+ private: void initGenders(); void initLang();Index: protocols/oscar/icq/ui/icqeditaccountwidget.cpp===================================================================--- protocols/oscar/icq/ui/icqeditaccountwidget.cpp (Revision 736753)+++ protocols/oscar/icq/ui/icqeditaccountwidget.cpp (Arbeitskopie)@@ -68,6 +68,8 @@ QRegExp rx("[0-9]{9}"); QValidator* validator = new QRegExpValidator( rx, this ); mAccountSettings->edtAccountId->setValidator(validator);+ + mAccountSettings->mPasswordWidget->setValidationProtocol(protocol); // Read in the settings from the account if it exists if(mAccount)@@ -78,7 +80,7 @@ mAccountSettings->edtAccountId->setReadOnly(true); mAccountSettings->mPasswordWidget->load(&mAccount->password()); mAccountSettings->chkAutoLogin->setChecked(mAccount->excludeConnect());-+ QString serverEntry = mAccount->configGroup()->readEntry("Server", "login.oscar.aol.com"); int portEntry = mAccount->configGroup()->readEntry("Port", 5190); if ( serverEntry != "login.oscar.aol.com" || ( portEntry != 5190) )@@ -261,7 +263,7 @@ return mAccount; } -bool ICQEditAccountWidget::validateData()+bool ICQEditAccountWidget::validateData( Kopete::AccountChangeAction changeAction ) { kDebug(14153) << "Called."; bool bOk;@@ -274,6 +276,18 @@ return false; } + if ( !validateAccountId("ICQProtocol", userId, changeAction) )+ {+ return false;+ }+ + if (!mAccountSettings->mPasswordWidget->validate())+ {+ KMessageBox::queuedMessageBox( this, KMessageBox::Sorry, i18nc( "@info",+ "<qt>The password entered does not match the ICQ password guidelines: Passwords must be 6-8 characters long.</qt>"), i18n( "ICQ" ) );+ return false;+ }+ // No need to check port, min and max values are properly defined in .ui if (mAccountSettings->edtServerAddress->text().isEmpty())Index: protocols/oscar/icq/ui/icqeditaccountwidget.h===================================================================--- protocols/oscar/icq/ui/icqeditaccountwidget.h (Revision 736753)+++ protocols/oscar/icq/ui/icqeditaccountwidget.h (Arbeitskopie)@@ -40,7 +40,7 @@ QWidget *parent=0); ~ICQEditAccountWidget(); - virtual bool validateData();+ virtual bool validateData( Kopete::AccountChangeAction changeAction=Kopete::Create ); virtual Kopete::Account *apply(); private slots:Index: protocols/meanwhile/meanwhileeditaccountwidget.cpp===================================================================--- protocols/meanwhile/meanwhileeditaccountwidget.cpp (Revision 736753)+++ protocols/meanwhile/meanwhileeditaccountwidget.cpp (Arbeitskopie)@@ -83,15 +83,11 @@ return myAccount; } -bool MeanwhileEditAccountWidget::validateData()+bool MeanwhileEditAccountWidget::validateData( Kopete::AccountChangeAction changeAction ) {- if(mScreenName->text().isEmpty())- {- KMessageBox::queuedMessageBox(this, KMessageBox::Sorry,- i18n("<qt>You must enter a valid screen name.</qt>"), - i18n("Meanwhile Plugin"));+ if(!validateAccountId("MeanwhileProtocol", mScreenName->text(), changeAction)) return false;- }+ if( !mPasswordWidget->validate() ) { KMessageBox::queuedMessageBox(this, KMessageBox::Sorry,Index: protocols/meanwhile/meanwhileeditaccountwidget.h===================================================================--- protocols/meanwhile/meanwhileeditaccountwidget.h (Revision 736753)+++ protocols/meanwhile/meanwhileeditaccountwidget.h (Arbeitskopie)@@ -40,7 +40,7 @@ virtual Kopete::Account* apply(); - virtual bool validateData();+ virtual bool validateData( Kopete::AccountChangeAction changeAction=Kopete::Create ); protected slots: void slotSetServer2Default(); protected:Index: protocols/irc/ui/irceditaccountwidget.cpp===================================================================--- protocols/irc/ui/irceditaccountwidget.cpp (Revision 736753)+++ protocols/irc/ui/irceditaccountwidget.cpp (Arbeitskopie)@@ -268,7 +268,7 @@ return account(); } -bool IRCEditAccountWidget::validateData()+bool IRCEditAccountWidget::validateData( Kopete::AccountChangeAction changeAction ) { if( nickNames->text().isEmpty() ) KMessageBox::sorry(this, i18n("<qt>You must enter a nickname.</qt>"), i18n("Kopete"));Index: protocols/irc/ui/irceditaccountwidget.h===================================================================--- protocols/irc/ui/irceditaccountwidget.h (Revision 736753)+++ protocols/irc/ui/irceditaccountwidget.h (Arbeitskopie)@@ -37,7 +37,7 @@ ~IRCEditAccountWidget(); IRCAccount *account();- virtual bool validateData();+ virtual bool validateData( Kopete::AccountChangeAction changeAction=Kopete::Create ); virtual Kopete::Account *apply(); private slots:Index: kopete/addaccountwizard/addaccountwizard.cpp===================================================================--- kopete/addaccountwizard/addaccountwizard.cpp (Revision 736753)+++ kopete/addaccountwizard/addaccountwizard.cpp (Arbeitskopie)@@ -180,7 +180,7 @@ else if (currentPage()->widget() == d->accountPageWidget) { // check the data of the page is valid- if (!d->accountPage->validateData())+ if (!d->accountPage->validateData(Kopete::Create)) { return; }@@ -201,17 +201,33 @@ void AddAccountWizard::accept() {- // registeredAccount shouldn't probably be called here. Anyway, if the account is already registered, - // it won't be registered twice Kopete::AccountManager *manager = Kopete::AccountManager::self();- Kopete::Account *account = manager->registerAccount(d->accountPage->apply()); - // if the account wasn't created correctly then leave+ // Have the plugin extract account information+ Kopete::Account *account = d->accountPage->apply(); if (!account) {+ KMessageBox::sorry( this, i18nc("@info", "<qt>An error occurred during account creation.</qt>")); return; } + // Check that the account doesn't exist yet, otherwise the account manager would delete it during registration+ // This shouldn't be the case as the protocol's account edit page should prevent this, but it's not guaranteed+ if (manager->findAccount(account->protocol()->pluginId(), account->accountId()))+ {+ KMessageBox::sorry( this, i18nc("@info", "<qt>This account already exists.</qt>"));+ reject();+ return;+ }++ // Register account and leave if it doesn't work+ account = manager->registerAccount(account);+ if (!account)+ {+ KMessageBox::sorry( this, i18nc("@info", "<qt>An error occurred during account registration.</qt>"));+ return;+ }+ // Make sure the protocol is correctly enabled. This is not really needed, but still good const QString PROTO_NAME = d->proto->pluginId().remove("Protocol").toLower(); Kopete::PluginManager::self()->setPluginEnabled(PROTO_NAME , true);Index: kopete/config/accounts/kopeteaccountconfig.cpp===================================================================--- kopete/config/accounts/kopeteaccountconfig.cpp (Revision 736753)+++ kopete/config/accounts/kopeteaccountconfig.cpp (Arbeitskopie)@@ -239,6 +239,9 @@ void KopeteAccountConfig::modifyAccount(Kopete::Account *account) {+ // FIXME: This function is almost identical to editAccount() in libkopete/kopeteaccount.cpp+ // and both should be merged.+ Kopete::Protocol *proto = account->protocol(); KDialog editDialog ( this );@@ -264,7 +267,11 @@ editDialog.setMainWidget( w ); if ( editDialog.exec() == QDialog::Accepted ) {- if( m_accountWidget->validateData() )+ // FIXME: The dialog is hidden at this point, which means that messages+ // created in validateData() with "this" as parent won't be shown. It+ // should be called earlier such that messages are displayed to the user+ // and he gets a chance to know about them and fix them instantly.+ if( m_accountWidget->validateData(Kopete::Edit) ) m_accountWidget->apply(); } Index: libkopete/kopeteaccount.cpp===================================================================--- libkopete/kopeteaccount.cpp (Revision 736753)+++ libkopete/kopeteaccount.cpp (Arbeitskopie)@@ -566,11 +566,11 @@ void Account::editAccount(QWidget *parent) {- KDialog *editDialog = new KDialog( parent );- editDialog->setCaption( i18n( "Edit Account" ) );- editDialog->setButtons( KDialog::Ok | KDialog::Apply | KDialog::Cancel );+ KDialog editDialog( parent );+ editDialog.setCaption( i18n( "Edit Account" ) );+ editDialog.setButtons( KDialog::Ok | KDialog::Cancel ); - KopeteEditAccountWidget *m_accountWidget = protocol()->createEditAccountWidget( this, editDialog );+ KopeteEditAccountWidget *m_accountWidget = protocol()->createEditAccountWidget( this, &editDialog ); if ( !m_accountWidget ) return; @@ -584,14 +584,16 @@ if ( !w ) return; - editDialog->setMainWidget( w );- if ( editDialog->exec() == QDialog::Accepted )+ editDialog.setMainWidget( w );+ if ( editDialog.exec() == QDialog::Accepted ) {- if( m_accountWidget->validateData() )+ // FIXME: The dialog is hidden at this point, which means that messages+ // created in validateData() with "this" as parent won't be shown. It+ // should be called earlier such that messages are displayed to the user+ // and he gets a chance to know about them and fix them instantly.+ if( m_accountWidget->validateData(Kopete::Edit) ) m_accountWidget->apply(); }-- editDialog->deleteLater(); } void Account::setCustomIcon( const QString & i)Index: libkopete/ui/editaccountwidget.cpp===================================================================--- libkopete/ui/editaccountwidget.cpp (Revision 736753)+++ libkopete/ui/editaccountwidget.cpp (Arbeitskopie)@@ -17,7 +17,12 @@ */ #include "editaccountwidget.h"+#include <kopeteaccountmanager.h>+#include <kopeteuiglobal.h> +#include <kmessagebox.h>+#include <klocale.h>+ class KopeteEditAccountWidgetPrivate { public:@@ -45,5 +50,23 @@ d->account = account; } +bool KopeteEditAccountWidget::validateAccountId( const QString &protocolId, const QString &accountId, Kopete::AccountChangeAction changeAction )+{+ if ( accountId.isEmpty() )+ {+ KMessageBox::queuedMessageBox( Kopete::UI::Global::mainWidget(), KMessageBox::Sorry, i18nc( "@info", + "<qt>Please fill in an account ID.</qt>") );+ return false;+ }++ if (changeAction == Kopete::Create && Kopete::AccountManager::self()->findAccount( protocolId, accountId ) )+ {+ KMessageBox::queuedMessageBox( Kopete::UI::Global::mainWidget(), KMessageBox::Sorry, i18nc( "@info", + "<qt>This account already exists. Please choose a different account ID or use the Configure Dialog to change the settings of the <resource>%1</resource> account.</qt>", accountId) );+ return false;+ }++ return true;+}+ // vim: set noet ts=4 sts=4 sw=4:-Index: libkopete/ui/editaccountwidget.h===================================================================--- libkopete/ui/editaccountwidget.h (Revision 736753)+++ libkopete/ui/editaccountwidget.h (Arbeitskopie)@@ -23,7 +23,17 @@ namespace Kopete {-class Account;+ class Account;++ /**+ * \brief Possible changes to accounts+ * @sa @ref KopeteEditAccountWidget::validateData()+ */+ enum AccountChangeAction {+ Create = 0, ///< New account will be created + Edit = 1 ///< Existing account will be changed+ };+ } class KopeteEditAccountWidgetPrivate;@@ -70,9 +80,11 @@ /** * This method must be reimplemented.- * It does the same as @ref AddContactPage::validateData()+ * Returns true if all account configuration data filled in by the user is valid, and+ * false otherwise, preferably with a message telling what is wrong. + * It is similar to @ref AddContactPage::validateData() */- virtual bool validateData() = 0;+ virtual bool validateData( Kopete::AccountChangeAction changeAction=Kopete::Create ) = 0; /** * Create a new account if we are in the 'add account wizard',@@ -80,6 +92,12 @@ */ virtual Kopete::Account *apply() = 0; + /**+ * Account id (username) validation. The default implementation returns false if the account + * id is empty or the account already exists in case of changeAction==Create.+ */+ virtual bool validateAccountId( const QString &protocolId, const QString &accountId, Kopete::AccountChangeAction changeAction );+ protected: /** * Get a pointer to the Kopete::Account passed to the constructor.