diff options
author | toma <toma@283d02a7-25f6-0310-bc7c-ecb5cbfe19da> | 2009-11-25 17:56:58 +0000 |
---|---|---|
committer | toma <toma@283d02a7-25f6-0310-bc7c-ecb5cbfe19da> | 2009-11-25 17:56:58 +0000 |
commit | bcb704366cb5e333a626c18c308c7e0448a8e69f (patch) | |
tree | f0d6ab7d78ecdd9207cf46536376b44b91a1ca71 /kopete/libkopete/kopetemimetypehandler.cpp | |
download | tdenetwork-bcb704366cb5e333a626c18c308c7e0448a8e69f.tar.gz tdenetwork-bcb704366cb5e333a626c18c308c7e0448a8e69f.zip |
Copy the KDE 3.5 branch to branches/trinity for new KDE 3.5 features.
BUG:215923
git-svn-id: svn://anonsvn.kde.org/home/kde/branches/trinity/kdenetwork@1054174 283d02a7-25f6-0310-bc7c-ecb5cbfe19da
Diffstat (limited to 'kopete/libkopete/kopetemimetypehandler.cpp')
-rw-r--r-- | kopete/libkopete/kopetemimetypehandler.cpp | 215 |
1 files changed, 215 insertions, 0 deletions
diff --git a/kopete/libkopete/kopetemimetypehandler.cpp b/kopete/libkopete/kopetemimetypehandler.cpp new file mode 100644 index 00000000..04c4939b --- /dev/null +++ b/kopete/libkopete/kopetemimetypehandler.cpp @@ -0,0 +1,215 @@ +/* + kopetemimetypehandler.cpp - Kopete mime type handlers + + Copyright (c) 2004 by Richard Smith <kde@metafoo.co.uk> + + Kopete (c) 2004 by the Kopete developers <kopete-devel@kde.org> + + ************************************************************************* + * * + * This library is free software; you can redistribute it and/or * + * modify it under the terms of the GNU Lesser General Public * + * License as published by the Free Software Foundation; either * + * version 2 of the License, or (at your option) any later version. * + * * + ************************************************************************* +*/ + +#include "kopetemimetypehandler.h" +#include "kopeteglobal.h" +#include "kopeteuiglobal.h" + +#include <qwidget.h> + +#include <kapplication.h> +#include <kdebug.h> +#include <klocale.h> +#include <kio/netaccess.h> +#include <kmimetype.h> +#include <kmessagebox.h> +#include <kprogress.h> +#include <kstandarddirs.h> +#include <ktar.h> + +namespace Kopete +{ + +namespace +{ + static QDict<Kopete::MimeTypeHandler> g_mimeHandlers; + static QDict<Kopete::MimeTypeHandler> g_protocolHandlers; +} + +class MimeTypeHandler::Private +{ +public: + Private( bool carf ) : canAcceptRemoteFiles( carf ) {} + bool canAcceptRemoteFiles; + QStringList mimeTypes; + QStringList protocols; +}; + +MimeTypeHandler::MimeTypeHandler( bool canAcceptRemoteFiles ) + : d( new Private( canAcceptRemoteFiles ) ) +{ +} + +MimeTypeHandler::~MimeTypeHandler() +{ + for( QStringList::iterator it = d->mimeTypes.begin(); it != d->mimeTypes.end(); ++it ) + g_mimeHandlers.remove( *it ); + + for( QStringList::iterator it = d->protocols.begin(); it != d->protocols.end(); ++it ) + g_protocolHandlers.remove( *it ); + + delete d; +} + +bool MimeTypeHandler::registerAsMimeHandler( const QString &mimeType ) +{ + if( g_mimeHandlers[ mimeType ] ) + { + kdWarning(14010) << k_funcinfo << "Warning: Two mime type handlers attempting" + " to handle " << mimeType << endl; + return false; + } + + g_mimeHandlers.insert( mimeType, this ); + d->mimeTypes.append( mimeType ); +// kdDebug(14010) << k_funcinfo << "Mime type " << mimeType << " registered" << endl; + return true; +} + +bool MimeTypeHandler::registerAsProtocolHandler( const QString &protocol ) +{ + if( g_protocolHandlers[ protocol ] ) + { + kdWarning(14010) << k_funcinfo << "Warning: Two protocol handlers attempting" + " to handle " << protocol << endl; + return false; + } + + g_protocolHandlers.insert( protocol, this ); + d->protocols.append( protocol ); + kdDebug(14010) << k_funcinfo << "Mime type " << protocol << " registered" << endl; + return true; +} + +const QStringList MimeTypeHandler::mimeTypes() const +{ + return d->mimeTypes; +} + +const QStringList MimeTypeHandler::protocols() const +{ + return d->protocols; +} + +bool MimeTypeHandler::canAcceptRemoteFiles() const +{ + return d->canAcceptRemoteFiles; +} + +bool MimeTypeHandler::dispatchURL( const KURL &url ) +{ + if( url.isEmpty() ) + return false; + + QString type = KMimeType::findByURL( url )->name(); + + MimeTypeHandler *mimeHandler = g_mimeHandlers[ type ]; + + if( mimeHandler ) + { + return dispatchToHandler( url, type, mimeHandler ); + } + else + { + mimeHandler = g_protocolHandlers[ url.protocol() ]; + + if( mimeHandler ) + { + mimeHandler->handleURL( url ); + return true; + } + else + { + kdDebug(14010) << "No mime type handler can handle this URL: " << url.prettyURL() << endl; + return false; + } + } +} + +bool MimeTypeHandler::dispatchToHandler( const KURL &url, const QString &mimeType, MimeTypeHandler *handler ) +{ + if( !handler->canAcceptRemoteFiles() ) + { + QString file; + if( !KIO::NetAccess::download( url, file, Kopete::UI::Global::mainWidget() ) ) + { + QString sorryText; + if ( url.isLocalFile() ) + { + sorryText = i18n( "Unable to find the file %1." ); + } + else + { + sorryText = i18n( "<qt>Unable to download the requested file;<br>" + "please check that address %1 is correct.</qt>" ); + } + + KMessageBox::sorry( Kopete::UI::Global::mainWidget(), + sorryText.arg( url.prettyURL() ) ); + return false; + } + + KURL dest; + dest.setPath( file ); + + if( !mimeType.isNull() ) + handler->handleURL( mimeType, dest ); + else + handler->handleURL( dest ); + + // for now, local-only handlers have to be synchronous + KIO::NetAccess::removeTempFile( file ); + } + else + { + if( !mimeType.isNull() ) + handler->handleURL( mimeType, url ); + else + handler->handleURL( url ); + } + + return true; +} + +void MimeTypeHandler::handleURL( const KURL &url ) const +{ + Q_UNUSED( url ); +} + +void MimeTypeHandler::handleURL( const QString &mimeType, const KURL &url ) const +{ + Q_UNUSED( mimeType ); + Q_UNUSED( url ); +} + + +EmoticonMimeTypeHandler::EmoticonMimeTypeHandler() + : MimeTypeHandler( false ) +{ + registerAsMimeHandler( QString::fromLatin1("application/x-kopete-emoticons") ); + registerAsMimeHandler( QString::fromLatin1("application/x-tgz") ); + registerAsMimeHandler( QString::fromLatin1("application/x-tbz") ); +} + +void EmoticonMimeTypeHandler::handleURL( const QString &, const KURL &url ) const +{ + Global::installEmoticonTheme( url.path() ); +} + +} // END namespace Kopete + +// vim: set noet ts=4 sts=4 sw=4: |