From b9aad1f15dc600e4dbe4c62d3fcced6363188ba3 Mon Sep 17 00:00:00 2001 From: zautrix Date: Sat, 26 Jun 2004 19:01:18 +0000 Subject: Initial revision --- (limited to 'kaddressbook/xxportmanager.cpp') diff --git a/kaddressbook/xxportmanager.cpp b/kaddressbook/xxportmanager.cpp new file mode 100644 index 0000000..6cfa9cb --- a/dev/null +++ b/kaddressbook/xxportmanager.cpp @@ -0,0 +1,269 @@ +/* + This file is part of KAddressbook. + Copyright (c) 2003 Tobias Koenig + + 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + As a special exception, permission is given to link this program + with any edition of Qt, and distribute the resulting executable, + without including the source code for Qt in the source distribution. +*/ + +/* +Enhanced Version of the file for platform independent KDE tools. +Copyright (c) 2004 Ulf Schenk + +$Id$ +*/ + +#include + +#include +#include +#include +#include +#include +#include + +#ifndef KAB_EMBEDDED +#include +#else //KAB_EMBEDDED +#include "xxport/csv_xxport.h" +#include "xxport/kde2_xxport.h" +#include "xxport/vcard_xxport.h" +#endif //KAB_EMBEDDED + +#include + +#include "kabcore.h" +#include "undocmds.h" +#include "xxportselectdialog.h" + +#include "xxportmanager.h" + +KURL XXPortManager::importURL = KURL(); +QString XXPortManager::importData = QString::null; + +class PreviewDialog : public KDialogBase +{ + public: + PreviewDialog( const KABC::Addressee &addr, + QWidget *parent, const char *name = 0 ); +}; + +XXPortManager::XXPortManager( KABCore *core, QObject *parent, const char *name ) + : QObject( parent, name ), mCore( core ), mShowPreview( false ) +{ + loadPlugins(); +} + +XXPortManager::~XXPortManager() +{ +} + +void XXPortManager::restoreSettings() +{ +} + +void XXPortManager::saveSettings() +{ +} + +void XXPortManager::importVCard( const KURL &url ) +{ + importVCard( url, false ); +} + +void XXPortManager::importVCard( const KURL &url, bool showPreview ) +{ + importURL = url; + mShowPreview = showPreview; + slotImport( "vcard", "" ); + mShowPreview = false; + importURL = KURL(); +} + +void XXPortManager::importVCard( const QString &vCard, bool showPreview ) +{ + importData = vCard; + mShowPreview = showPreview; + slotImport( "vcard", "" ); + mShowPreview = false; + importData = ""; +} + +void XXPortManager::slotImport( const QString &identifier, const QString &data ) +{ + XXPortObject *obj = mXXPortObjects[ identifier ]; + if ( !obj ) { + KMessageBox::error( mCore, i18n( "No import plugin available for %1." ).arg( identifier ) ); + return; + } + + KABC::Resource *resource = mCore->requestResource( mCore ); + if ( !resource ) + return; + + KABC::AddresseeList list = obj->importContacts( data ); + KABC::AddresseeList::Iterator it; + bool imported = false; + for ( it = list.begin(); it != list.end(); ++it ) { + if ( mShowPreview ) { + PreviewDialog dlg( *it, mCore ); + if ( !dlg.exec() ) + continue; + } + + (*it).setResource( resource ); + // We use a PwNewCommand so the user can undo it. + PwNewCommand *command = new PwNewCommand( mCore->addressBook(), *it ); + UndoStack::instance()->push( command ); + RedoStack::instance()->clear(); + imported = true; + } + + if ( imported ) { + KMessageBox::information( mCore, i18n( "contacts successfully imported." ) ); + + emit modified(); + } +} + +void XXPortManager::slotExport( const QString &identifier, const QString &data ) +{ + XXPortObject *obj = mXXPortObjects[ identifier ]; + if ( !obj ) { + KMessageBox::error( mCore, i18n( "No export plugin available for %1." ).arg( identifier ) ); + return; + } + + KABC::AddresseeList addrList; + XXPortSelectDialog dlg( mCore, obj->requiresSorting(), mCore ); + if ( dlg.exec() ) + addrList = dlg.contacts(); + else + return; + + if ( !obj->exportContacts( addrList, data ) ) + KMessageBox::error( mCore, i18n( "Unable to export contacts." ) ); + else + KMessageBox::information( mCore, i18n( "contacts successfully exported." ) ); +} + +void XXPortManager::loadPlugins() +{ + mXXPortObjects.clear(); + +#ifndef KAB_EMBEDDED + KTrader::OfferList plugins = KTrader::self()->query( "KAddressBook/XXPort" ); + KTrader::OfferList::ConstIterator it; + for ( it = plugins.begin(); it != plugins.end(); ++it ) { + if ( !(*it)->hasServiceType( "KAddressBook/XXPort" ) ) + continue; + + KLibFactory *factory = KLibLoader::self()->factory( (*it)->library().latin1() ); + if ( !factory ) { + kdDebug(5720) << "XXPortManager::loadExtensions(): Factory creation failed" << endl; + continue; + } + + XXPortFactory *xxportFactory = static_cast( factory ); + + if ( !xxportFactory ) { + kdDebug(5720) << "XXPortManager::loadExtensions(): Cast failed" << endl; + continue; + } + + XXPortObject *obj = xxportFactory->xxportObject( mCore->addressBook(), mCore ); + if ( obj ) { + mCore->addGUIClient( obj ); + mXXPortObjects.insert( obj->identifier(), obj ); + connect( obj, SIGNAL( exportActivated( const QString&, const QString& ) ), + this, SLOT( slotExport( const QString&, const QString& ) ) ); + connect( obj, SIGNAL( importActivated( const QString&, const QString& ) ), + this, SLOT( slotImport( const QString&, const QString& ) ) ); + } + } + +#else //KAB_EMBEDDED +//lets load the export/import stubs directly. Is dynamic loading necessary for KA/Pi? + + // CVS import/export + XXPortFactory *xxportFactory = new CSVXXPortFactory(); + + XXPortObject *obj = xxportFactory->xxportObject( mCore->addressBook(), mCore ); + if ( obj ) { + mCore->addGUIClient( obj ); + mXXPortObjects.insert( obj->identifier(), obj ); + connect( obj, SIGNAL( exportActivated( const QString&, const QString& ) ), + this, SLOT( slotExport( const QString&, const QString& ) ) ); + connect( obj, SIGNAL( importActivated( const QString&, const QString& ) ), + this, SLOT( slotImport( const QString&, const QString& ) ) ); + } + + + + // KDE2 import/export + xxportFactory = new KDE2XXPortFactory(); + + obj = xxportFactory->xxportObject( mCore->addressBook(), mCore ); + if ( obj ) { + mCore->addGUIClient( obj ); + mXXPortObjects.insert( obj->identifier(), obj ); + connect( obj, SIGNAL( exportActivated( const QString&, const QString& ) ), + this, SLOT( slotExport( const QString&, const QString& ) ) ); + connect( obj, SIGNAL( importActivated( const QString&, const QString& ) ), + this, SLOT( slotImport( const QString&, const QString& ) ) ); + } + + + + // VCARD import/export + xxportFactory = new VCardXXPortFactory(); + + obj = xxportFactory->xxportObject( mCore->addressBook(), mCore ); + if ( obj ) { + mCore->addGUIClient( obj ); + mXXPortObjects.insert( obj->identifier(), obj ); + connect( obj, SIGNAL( exportActivated( const QString&, const QString& ) ), + this, SLOT( slotExport( const QString&, const QString& ) ) ); + connect( obj, SIGNAL( importActivated( const QString&, const QString& ) ), + this, SLOT( slotImport( const QString&, const QString& ) ) ); + } +#endif //KAB_EMBEDDED + +} + + +PreviewDialog::PreviewDialog( const KABC::Addressee &addr, QWidget *parent, + const char *name ) + : KDialogBase( Plain, i18n( "Contact Preview" ), Ok | Cancel, Ok, parent, + name, true, true ) +{ + QWidget *page = plainPage(); + QVBoxLayout *layout = new QVBoxLayout( page, marginHint(), spacingHint() ); + + KPIM::AddresseeView *view = new KPIM::AddresseeView( page ); + view->setAddressee( addr ); + + layout->addWidget( view ); + + resize( 400, 300 ); +} + +#ifndef KAB_EMBEDDED +#include "xxportmanager.moc" +#endif //KAB_EMBEDDED + -- cgit v0.9.0.2