/* This file is part of Kontact. Copyright (c) 2003 Kontact Developer 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. 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. */ #include <tqwidget.h> #include <kaction.h> #include <kapplication.h> #include <kdebug.h> #include <kgenericfactory.h> #include <kiconloader.h> #include <kparts/componentfactory.h> #include <kstandarddirs.h> #include <dcopclient.h> #include <ktempfile.h> #include <kabc/addressee.h> #include <libkcal/vcaldrag.h> #include <libkcal/icaldrag.h> #include <libkcal/calendarlocal.h> #include <libkdepim/kvcarddrag.h> #include <kmail/kmail_part.h> #include <kmail/kmkernel.h> #include "core.h" #include "summarywidget.h" #include "kmail_plugin.h" using namespace KCal; typedef KGenericFactory<KMailPlugin, Kontact::Core> KMailPluginFactory; K_EXPORT_COMPONENT_FACTORY( libkontact_kmailplugin, KMailPluginFactory( "kontact_kmailplugin" ) ) KMailPlugin::KMailPlugin(Kontact::Core *core, const char *, const TQStringList& ) : Kontact::Plugin( core, core, "kmail" ), mStub( 0 ) { setInstance( KMailPluginFactory::instance() ); insertNewAction( new KAction( i18n( "New Message..." ), "mail_new", CTRL+SHIFT+Key_M, this, TQT_SLOT( slotNewMail() ), actionCollection(), "new_mail" ) ); insertSyncAction( new KAction( i18n( "Synchronize Mail" ), "reload", 0, this, TQT_SLOT( slotSyncFolders() ), actionCollection(), "sync_mail" ) ); mUniqueAppWatcher = new Kontact::UniqueAppWatcher( new Kontact::UniqueAppHandlerFactory<KMailUniqueAppHandler>(), this ); } bool KMailPlugin::canDecodeDrag( TQMimeSource *qms ) { return ( ICalDrag::canDecode( qms ) || VCalDrag::canDecode( qms ) || KVCardDrag::canDecode( qms ) ); } void KMailPlugin::processDropEvent( TQDropEvent * de ) { kdDebug() << k_funcinfo << endl; CalendarLocal cal( TQString::tqfromLatin1("UTC") ); KABC::Addressee::List list; if ( VCalDrag::decode( de, &cal ) || ICalDrag::decode( de, &cal ) ) { KTempFile tmp( locateLocal( "tmp", "incidences-" ), ".ics" ); cal.save( tmp.name() ); openComposer( KURL::fromPathOrURL( tmp.name() ) ); } else if ( KVCardDrag::decode( de, list ) ) { KABC::Addressee::List::Iterator it; TQStringList to; for ( it = list.begin(); it != list.end(); ++it ) { to.append( ( *it ).fullEmail() ); } openComposer( to.join(", ") ); } } void KMailPlugin::openComposer( const KURL& attach ) { (void) part(); // ensure part is loaded Q_ASSERT( mStub ); if ( mStub ) { if ( attach.isValid() ) mStub->newMessage( "", "", "", false, true, KURL(), attach ); else mStub->newMessage( "", "", "", false, true, KURL(), KURL() ); } } void KMailPlugin::openComposer( const TQString& to ) { (void) part(); // ensure part is loaded Q_ASSERT( mStub ); if ( mStub ) { mStub->newMessage( to, "", "", false, true, KURL(), KURL() ); } } void KMailPlugin::slotNewMail() { openComposer( TQString::null ); } void KMailPlugin::slotSyncFolders() { DCOPRef ref( "kmail", "KMailIface" ); ref.send( "checkMail" ); } KMailPlugin::~KMailPlugin() { } bool KMailPlugin::createDCOPInterface( const TQString& serviceType ) { if ( serviceType == "DCOP/ResourceBackend/IMAP" ) { if ( part() ) return true; } return false; } TQString KMailPlugin::tipFile() const { TQString file = ::locate("data", "kmail/tips"); return file; } KParts::ReadOnlyPart* KMailPlugin::createPart() { KParts::ReadOnlyPart *part = loadPart(); if ( !part ) return 0; mStub = new KMailIface_stub( dcopClient(), "kmail", "KMailIface" ); return part; } TQStringList KMailPlugin::invisibleToolbarActions() const { return TQStringList( "new_message" ); } bool KMailPlugin::isRunningStandalone() { return mUniqueAppWatcher->isRunningStandalone(); } Kontact::Summary *KMailPlugin::createSummaryWidget( TQWidget *parent ) { return new SummaryWidget( this, parent ); } //// #include "../../../kmail/kmail_options.h" void KMailUniqueAppHandler::loadCommandLineOptions() { KCmdLineArgs::addCmdLineOptions( kmail_options ); } int KMailUniqueAppHandler::newInstance() { // Ensure part is loaded (void)plugin()->part(); DCOPRef kmail( "kmail", "KMailIface" ); DCOPReply reply = kmail.call( "handleCommandLine", false ); if ( reply.isValid() ) { bool handled = reply; //kdDebug(5602) << k_funcinfo << "handled=" << handled << endl; if ( !handled ) // no args -> simply bring kmail plugin to front return Kontact::UniqueAppHandler::newInstance(); } return 0; } bool KMailPlugin::queryClose() const { KMailIface_stub stub( kapp->dcopClient(), "kmail", "KMailIface" ); bool canClose=stub.canQueryClose(); return canClose; } void KMailPlugin::loadProfile( const TQString& profileDirectory ) { DCOPRef ref( "kmail", "KMailIface" ); ref.send( "loadProfile", profileDirectory ); } void KMailPlugin::saveToProfile( const TQString& profileDirectory ) { DCOPRef ref( "kmail", "KMailIface" ); ref.send( "saveToProfile", profileDirectory ); } #include "kmail_plugin.moc"