diff options
Diffstat (limited to 'kopete/protocols/msn/ui/msneditaccountwidget.cpp')
-rw-r--r-- | kopete/protocols/msn/ui/msneditaccountwidget.cpp | 369 |
1 files changed, 369 insertions, 0 deletions
diff --git a/kopete/protocols/msn/ui/msneditaccountwidget.cpp b/kopete/protocols/msn/ui/msneditaccountwidget.cpp new file mode 100644 index 00000000..41a007f9 --- /dev/null +++ b/kopete/protocols/msn/ui/msneditaccountwidget.cpp @@ -0,0 +1,369 @@ +/* + msneditaccountwidget.cpp - MSN Account Widget + + Copyright (c) 2003 by Olivier Goffart <ogoffart @ kde.org> + Copyright (c) 2003 by Martijn Klingens <[email protected]> + + Kopete (c) 2002-2003 by the Kopete developers <[email protected]> + + ************************************************************************* + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation; either version 2 of the License, or * + * (at your option) any later version. * + * * + ************************************************************************* +*/ + +#include "msneditaccountwidget.h" + +#include <tqcheckbox.h> +#include <tqgroupbox.h> +#include <tqimage.h> +#include <tqlabel.h> +#include <tqlayout.h> +#include <tqlineedit.h> +#include <tqlistbox.h> +#include <tqpushbutton.h> +#include <tqregexp.h> +#include <tqspinbox.h> +#include <kcombobox.h> + +#include <kautoconfig.h> +#include <tdefiledialog.h> +#include <tdelocale.h> +#include <tdemessagebox.h> +#include <kstandarddirs.h> +#include <tdeio/netaccess.h> +#include <kdebug.h> +#include <kpassdlg.h> +#include <krun.h> +#include <tdeconfig.h> +#include <kpixmapregionselectordialog.h> + +#include "kopeteuiglobal.h" +#include "kopeteglobal.h" + +#include "kopetepasswordwidget.h" +#include "kopeteaccountmanager.h" + +#include "msnaccount.h" +#include "msncontact.h" +#include "msneditaccountui.h" +#include "msnnotifysocket.h" +#include "msnprotocol.h" + +class MSNEditAccountWidgetPrivate +{ +public: + MSNProtocol *protocol; + KAutoConfig *autoConfig; + MSNEditAccountUI *ui; + + TQString pictureUrl; + TQImage pictureData; +}; + +MSNEditAccountWidget::MSNEditAccountWidget( MSNProtocol *proto, Kopete::Account *account, TQWidget *parent, const char * /* name */ ) +: TQWidget( parent ), KopeteEditAccountWidget( account ) +{ + d = new MSNEditAccountWidgetPrivate; + + d->protocol=proto; + + ( new TQVBoxLayout( this, 0, 0 ) )->setAutoAdd( true ); + + d->ui = new MSNEditAccountUI( this ); + + d->autoConfig = new KAutoConfig( TQT_TQOBJECT(d->ui) ); + d->autoConfig->addWidget( d->ui->global_settings_page, "MSN" ); + d->autoConfig->addWidget( d->ui->privacy_page, "MSN" ); + //the JabberAccount need to be saved as text, and can't be handled by kautoconfig + d->autoConfig->ignoreSubWidget( d->ui->JabberAccount ); + d->autoConfig->retrieveSettings( true ); + + //Get a list of all jabber accounts + TDEGlobal::config()->setGroup("MSN"); + TQString jab_account=TDEGlobal::config()->readEntry("JabberAccount"); + + TQPtrList<Kopete::Account> accounts = Kopete::AccountManager::self()->accounts(); + for(Kopete::Account *a=accounts.first() ; a; a=accounts.next() ) + { + if(a->protocol()->pluginId()=="JabberProtocol") + { + d->ui->JabberAccount->insertItem(a->accountId()); + if( jab_account.isEmpty() ) + jab_account=a->accountId(); + } + } + d->ui->JabberAccount->setCurrentText(jab_account); + + // FIXME: actually, I don't know how to set fonts for qlistboxitem - Olivier + d->ui->label_font->hide(); + + // default fields + if ( account ) + { + TDEConfigGroup * config=account->configGroup(); + + d->ui->m_login->setText( account->accountId() ); + d->ui->m_password->load( &static_cast<MSNAccount *>(account)->password() ); + + //remove me after we can change account ids (Matt) + d->ui->m_login->setDisabled( true ); + d->ui->m_autologin->setChecked( account->excludeConnect() ); + if ( ( static_cast<MSNAccount*>(account)->serverName() != "messenger.hotmail.com" ) || ( static_cast<MSNAccount*>(account)->serverPort() != 1863) ) { + d->ui->optionOverrideServer->setChecked( true ); + } + + d->ui->m_webcamPort->setDisabled(true); + uint port=config->readNumEntry("WebcamPort" ,0); + d->ui->m_useWebcamPort->setChecked( port != 0); + d->ui->m_webcamPort->setValue( port != 0 ? port : 6891 ); + + d->ui->optionUseHttpMethod->setChecked( static_cast<MSNAccount*>(account)->useHttpMethod() ); + + MSNContact *myself = static_cast<MSNContact *>( account->myself() ); + + d->ui->m_displayName->setText( myself->property( Kopete::Global::Properties::self()->nickName()).value().toString() ); + d->ui->m_phw->setText( config->readEntry("PHW") ); + d->ui->m_phm->setText( config->readEntry("PHM") ); + d->ui->m_phh->setText( config->readEntry("PHH") ); + + bool connected = account->isConnected(); + if ( connected ) + { + d->ui->m_warning_1->hide(); + d->ui->m_warning_2->hide(); + } + d->ui->m_phones->setEnabled( connected ); + d->ui->m_displayName->setEnabled( connected ); + d->ui->m_allowButton->setEnabled( connected ); + d->ui->m_blockButton->setEnabled( connected ); + + MSNAccount *m_account = static_cast<MSNAccount*>( account ); + d->ui->m_serverName->setText( m_account->serverName() ); + d->ui->m_serverPort->setValue( m_account->serverPort() ); + + TQStringList blockList = config->readListEntry( "blockList" ); + TQStringList allowList = config->readListEntry( "allowList" ); + //TQStringList reverseList = config->readListEntry("reverseList" ); + + for ( TQStringList::Iterator it = blockList.begin(); it != blockList.end(); ++it ) + d->ui->m_BL->insertItem( *it ); + + for ( TQStringList::Iterator it = allowList.begin(); it != allowList.end(); ++it ) + d->ui->m_AL->insertItem( *it ); + + d->ui->m_blp->setChecked( config->readEntry( "BLP" ) == "BL" ); + + d->pictureUrl = locateLocal( "appdata", "msnpicture-" + + account->accountId().lower().replace( TQRegExp("[./~]" ), "-" ) + ".png" ); + d->ui->m_displayPicture->setPixmap( d->pictureUrl ); + + d->ui->m_useDisplayPicture->setChecked( config->readBoolEntry( "exportCustomPicture" )); + + // Global Identity + d->ui->m_globalIdentity->setChecked( config->readBoolEntry("ExcludeGlobalIdentity", false) ); + } + else + { + d->ui->tab_contacts->setDisabled( true ); + d->ui->m_displayName->setDisabled( true ); + d->ui->m_phones->setDisabled( true ); + } + + connect( d->ui->m_allowButton, TQT_SIGNAL( clicked() ), this, TQT_SLOT( slotAllow() ) ); + connect( d->ui->m_blockButton, TQT_SIGNAL( clicked() ), this, TQT_SLOT( slotBlock() ) ); + connect( d->ui->m_selectImage, TQT_SIGNAL( clicked() ), this, TQT_SLOT( slotSelectImage() ) ); + connect( d->ui->m_RLButton, TQT_SIGNAL( clicked() ), this, TQT_SLOT( slotShowReverseList() ) ); + connect( d->ui->buttonRegister, TQT_SIGNAL(clicked()), this, TQT_SLOT(slotOpenRegister())); + TQWidget::setTabOrder( d->ui->m_login, d->ui->m_password->mRemembered ); + TQWidget::setTabOrder( d->ui->m_password->mRemembered, d->ui->m_password->mPassword ); + TQWidget::setTabOrder( d->ui->m_password->mPassword, d->ui->m_autologin ); +} + +MSNEditAccountWidget::~MSNEditAccountWidget() +{ + delete d; +} + +Kopete::Account * MSNEditAccountWidget::apply() +{ + d->autoConfig->saveSettings(); + TDEGlobal::config()->setGroup("MSN"); + TDEGlobal::config()->writeEntry("JabberAccount", d->ui->JabberAccount->currentText()); + + if ( !account() ) + setAccount( new MSNAccount( d->protocol, d->ui->m_login->text() ) ); + + TDEConfigGroup *config=account()->configGroup(); + + account()->setExcludeConnect( d->ui->m_autologin->isChecked() ); + d->ui->m_password->save( &static_cast<MSNAccount *>(account())->password() ); + + config->writeEntry( "exportCustomPicture", d->ui->m_useDisplayPicture->isChecked() ); + if (d->ui->optionOverrideServer->isChecked() ) { + config->writeEntry( "serverName", d->ui->m_serverName->text() ); + config->writeEntry( "serverPort", d->ui->m_serverPort->value() ); + } + else { + config->writeEntry( "serverName", "messenger.hotmail.com" ); + config->writeEntry( "serverPort", "1863" ); + } + + config->writeEntry( "useHttpMethod", d->ui->optionUseHttpMethod->isChecked() ); + + if(d->ui->m_useWebcamPort->isChecked()) + config->writeEntry( "WebcamPort" , d->ui->m_webcamPort->value() ); + else + config->writeEntry( "WebcamPort" , 0 ); + + // Global Identity + config->writeEntry( "ExcludeGlobalIdentity", d->ui->m_globalIdentity->isChecked() ); + + // Save the avatar image + if( d->ui->m_useDisplayPicture->isChecked() && !d->pictureData.isNull() ) + { + d->pictureUrl = locateLocal( "appdata", "msnpicture-" + + account()->accountId().lower().replace( TQRegExp("[./~]" ), "-" ) + ".png" ); + if ( d->pictureData.save( d->pictureUrl, "PNG" ) ) + { + static_cast<MSNAccount *>( account() )->setPictureUrl( d->pictureUrl ); + } + else + { + KMessageBox::sorry( this, i18n( "<qt>An error occurred when trying to change the display picture.<br>" + "Make sure that you have selected a correct image file</qt>" ), i18n( "MSN Plugin" ) ); + } + } + + static_cast<MSNAccount *>( account() )->resetPictureObject(); + + if ( account()->isConnected() ) + { + MSNContact *myself = static_cast<MSNContact *>( account()->myself() ); + MSNNotifySocket *notify = static_cast<MSNAccount *>( account() )->notifySocket(); + if ( d->ui->m_displayName->text() != myself->property( Kopete::Global::Properties::self()->nickName()).value().toString() ) + static_cast<MSNAccount *>( account() )->setPublicName( d->ui->m_displayName->text() ); + + if ( notify ) + { + if ( d->ui->m_phw->text() != myself->phoneWork() && ( !d->ui->m_phw->text().isEmpty() || !myself->phoneWork().isEmpty() ) ) + notify->changePhoneNumber( "PHW", d->ui->m_phw->text() ); + if( d->ui->m_phh->text() != myself->phoneHome() && ( !d->ui->m_phh->text().isEmpty() || !myself->phoneHome().isEmpty() ) ) + notify->changePhoneNumber( "PHH", d->ui->m_phh->text() ); + if( d->ui->m_phm->text() != myself->phoneMobile() && ( !d->ui->m_phm->text().isEmpty() || !myself->phoneMobile().isEmpty() ) ) + notify->changePhoneNumber( "PHM", d->ui->m_phm->text() ); + // (the && .isEmpty is because one can be null and the other empty) + + if ( ( config->readEntry("BLP") == "BL" ) != d->ui->m_blp->isChecked() ) + { + // Yes, I know, calling sendCommand here is not very clean - Olivier + notify->sendCommand( "BLP", d->ui->m_blp->isChecked() ? "BL" : "AL" ); + } + } + } + return account(); +} + +bool MSNEditAccountWidget::validateData() +{ + TQString userid = d->ui->m_login->text(); + if ( MSNProtocol::validContactId( userid ) ) + return true; + + KMessageBox::queuedMessageBox( Kopete::UI::Global::mainWidget(), KMessageBox::Sorry, + i18n( "<qt>You must enter a valid email address.</qt>" ), i18n( "MSN Plugin" ) ); + return false; +} + +void MSNEditAccountWidget::slotAllow() +{ + //TODO: play with multiple selection + TQListBoxItem *item = d->ui->m_BL->selectedItem(); + if ( !item ) + return; + + TQString handle = item->text(); + + MSNNotifySocket *notify = static_cast<MSNAccount *>( account() )->notifySocket(); + if ( !notify ) + return; + notify->removeContact( handle, MSNProtocol::BL, TQString(), TQString() ); + + d->ui->m_BL->takeItem( item ); + d->ui->m_AL->insertItem( item ); +} + +void MSNEditAccountWidget::slotBlock() +{ + //TODO: play with multiple selection + TQListBoxItem *item = d->ui->m_AL->selectedItem(); + if ( !item ) + return; + + TQString handle = item->text(); + + MSNNotifySocket *notify = static_cast<MSNAccount *>( account() )->notifySocket(); + if ( !notify ) + return; + + notify->removeContact( handle, MSNProtocol::AL, TQString(), TQString() ); + + d->ui->m_AL->takeItem( item ); + d->ui->m_BL->insertItem( item ); +} + +void MSNEditAccountWidget::slotShowReverseList() +{ + TQStringList reverseList = account()->configGroup()->readListEntry( "reverseList" ); + KMessageBox::informationList( this, i18n( "Here you can see a list of contacts who added you to their contact list" ), reverseList, + i18n( "Reverse List - MSN Plugin" ) ); +} + +void MSNEditAccountWidget::slotSelectImage() +{ + TQString path = 0; + bool remoteFile = false; + KURL filePath = KFileDialog::getImageOpenURL( TQString(), this, i18n( "MSN Display Picture" ) ); + if( filePath.isEmpty() ) + return; + + if( !filePath.isLocalFile() ) { + if(!TDEIO::NetAccess::download( filePath, path, this )) { + KMessageBox::sorry( this, i18n( "Downloading of display image failed" ), i18n( "MSN Plugin" ) ); + return; + } + remoteFile = true; + } + else path = filePath.path(); + + TQImage img( path ); + img = KPixmapRegionSelectorDialog::getSelectedImage( TQPixmap(img), 96, 96, this ); + + if(!img.isNull()) + { + img = MSNProtocol::protocol()->scalePicture(img); + + d->ui->m_displayPicture->setPixmap( TQPixmap(img) ); + d->pictureData = img; + } + else + { + KMessageBox::sorry( this, i18n( "<qt>An error occurred when trying to change the display picture.<br>" + "Make sure that you have selected a correct image file</qt>" ), i18n( "MSN Plugin" ) ); + } + if( remoteFile ) TDEIO::NetAccess::removeTempFile( path ); +} + +void MSNEditAccountWidget::slotOpenRegister() +{ + KRun::runURL( "http://register.passport.net/", "text/html" ); +} + +#include "msneditaccountwidget.moc" + +// vim: set noet ts=4 sts=4 sw=4: + |