diff options
Diffstat (limited to 'tderesources/scalix/scalixadmin/otheruserpage.cpp')
-rw-r--r-- | tderesources/scalix/scalixadmin/otheruserpage.cpp | 173 |
1 files changed, 173 insertions, 0 deletions
diff --git a/tderesources/scalix/scalixadmin/otheruserpage.cpp b/tderesources/scalix/scalixadmin/otheruserpage.cpp new file mode 100644 index 000000000..3aac47c9e --- /dev/null +++ b/tderesources/scalix/scalixadmin/otheruserpage.cpp @@ -0,0 +1,173 @@ +/* + * This file is part of ScalixAdmin. + * + * Copyright (C) 2007 Trolltech ASA. All rights reserved. + * + * 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. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +#include <tqapplication.h> +#include <tqlayout.h> +#include <tqpushbutton.h> + +#include <dcopref.h> +#include <kdcopservicestarter.h> +#include <kinputdialog.h> +#include <klocale.h> +#include <kmessagebox.h> + +#include <unistd.h> + +#include "jobs.h" +#include "ldapdialog.h" +#include "otheruserview.h" +#include "settings.h" + +#include "otheruserpage.h" + +OtherUserPage::OtherUserPage( TQWidget *parent ) + : TQWidget( parent ) +{ + TQGridLayout *layout = new TQGridLayout( this, 2, 2, 11, 6 ); + + mView = new OtherUserView( &mManager, this ); + layout->addMultiCellWidget( mView, 0, 0, 0, 1 ); + + mAddButton = new TQPushButton( i18n( "Add Account..." ), this ); + layout->addWidget( mAddButton, 1, 0 ); + + mDeleteButton = new TQPushButton( i18n( "Remove Account" ), this ); + mDeleteButton->setEnabled( false ); + layout->addWidget( mDeleteButton, 1, 1 ); + + connect( mView, TQT_SIGNAL( selectionChanged() ), TQT_SLOT( selectionChanged() ) ); + connect( mAddButton, TQT_SIGNAL( clicked() ), TQT_SLOT( addUser() ) ); + connect( mDeleteButton, TQT_SIGNAL( clicked() ), TQT_SLOT( removeUser() ) ); + + loadAllUsers(); +} + +OtherUserPage::~OtherUserPage() +{ +} + +void OtherUserPage::loadAllUsers() +{ + Scalix::GetOtherUsersJob *job = Scalix::getOtherUsers( Settings::self()->globalSlave(), + Settings::self()->accountUrl() ); + connect( job, TQT_SIGNAL( result( TDEIO::Job* ) ), TQT_SLOT( allUsers( TDEIO::Job* ) ) ); +} + +void OtherUserPage::addUser() +{ + LdapDialog dlg( this ); + if ( !dlg.exec() ) + return; + + const TQString email = dlg.selectedUser(); + if ( email.isEmpty() ) + return; + + Scalix::AddOtherUserJob *job = Scalix::addOtherUser( Settings::self()->globalSlave(), + Settings::self()->accountUrl(), email ); + connect( job, TQT_SIGNAL( result( TDEIO::Job* ) ), TQT_SLOT( userAdded( TDEIO::Job* ) ) ); +} + +void OtherUserPage::removeUser() +{ + const TQString email = mView->selectedUser(); + if ( email.isEmpty() ) + return; + + Scalix::DeleteOtherUserJob *job = Scalix::deleteOtherUser( Settings::self()->globalSlave(), + Settings::self()->accountUrl(), email ); + connect( job, TQT_SIGNAL( result( TDEIO::Job* ) ), TQT_SLOT( userRemoved( TDEIO::Job* ) ) ); +} + +void OtherUserPage::allUsers( TDEIO::Job *job ) +{ + if ( job->error() ) + KMessageBox::error( this, job->errorString() ); + + Scalix::GetOtherUsersJob *userJob = static_cast<Scalix::GetOtherUsersJob*>( job ); + + mManager.clear(); + + const TQStringList users = userJob->otherUsers(); + for ( uint i = 0; i < users.count(); ++i ) + mManager.addOtherUser( users[ i ] ); + + selectionChanged(); +} + +void OtherUserPage::userAdded( TDEIO::Job *job ) +{ + if ( job->error() ) + KMessageBox::error( this, job->errorString() ); + else + loadAllUsers(); // update the GUI + + updateKmail(); +} + +void OtherUserPage::userRemoved( TDEIO::Job *job ) +{ + if ( job->error() ) + KMessageBox::error( this, job->errorString() ); + else + loadAllUsers(); // update the GUI + + updateKmail(); +} + +void OtherUserPage::selectionChanged() +{ + mDeleteButton->setEnabled( mView->selectedItem() != 0 ); +} + +void OtherUserPage::updateKmail() +{ + TQMessageBox *msg = new TQMessageBox( tqApp->mainWidget() ); + msg->setText( i18n( "Updating account..." ) ); + msg->show(); + tqApp->processEvents(); + sleep( 1 ); + tqApp->processEvents(); + + TQString error; + TQCString dcopService; + int result = KDCOPServiceStarter::self()-> + findServiceFor( "DCOP/ResourceBackend/IMAP", TQString(), + TQString(), &error, &dcopService ); + if ( result != 0 ) { + KMessageBox::error( 0, i18n( "Unable to start KMail to trigger account update with Scalix server" ) ); + delete msg; + return; + } + + DCOPRef ref( dcopService, "KMailIface" ); + + // loop until dcop iface is set up correctly + TQStringList list; + while ( list.isEmpty() ) { + ref.call( "accounts()" ).get( list ); + } + + ref.call( "checkAccount(TQString)", i18n( "Scalix Server" ) ); + + delete msg; +} + +#include "otheruserpage.moc" |