-rw-r--r-- | libkdepim/externalapphandler.cpp | 109 |
1 files changed, 96 insertions, 13 deletions
diff --git a/libkdepim/externalapphandler.cpp b/libkdepim/externalapphandler.cpp index 2ce6926..edefda4 100644 --- a/libkdepim/externalapphandler.cpp +++ b/libkdepim/externalapphandler.cpp @@ -18,48 +18,49 @@ 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 <stdlib.h> #include <qfile.h> #include <qtimer.h> #include <qmap.h> #include <qregexp.h> #ifndef DESKTOP_VERSION #include <qpe/qpeapplication.h> #include <qtopia/qcopenvelope_qws.h> #else #include <qapplication.h> +#include <qprocess.h> #endif #include <kstaticdeleter.h> #include <kmessagebox.h> #include "externalapphandler.h" #include "kpimglobalprefs.h" //uncomment line to get debug output //#define DEBUG_EXT_APP_HANDLER /********************************************************************************* * ********************************************************************************/ QCopTransferItem::QCopTransferItem(int usedSourceParameters, const QString& sourceMessage, const QString& targetChannel, const QString& targetMessage) : _usedSourceParameters(usedSourceParameters), _sourceMessage(sourceMessage), _targetChannel(targetChannel), _targetMessage(targetMessage) { //sourceMessage passes later three parameters: sourceChannel, uid, param1 if (_usedSourceParameters == 0) _sourceMessageParameters = "QString,QString)"; @@ -413,63 +414,82 @@ void ExternalAppHandler::loadConfig() QString opiepath = QString::fromLatin1( getenv("OPIEDIR") ); QString qtopiapath = QString::fromLatin1( getenv("QPEDIR") ); QString qtpath = QString::fromLatin1( getenv("QTDIR") ); //if qtopiapath is not set, fallback to qt if (qtopiapath.isEmpty()) qtopiapath = qtpath; //if opiepath is not set, fallback to qtopia if (opiepath.isEmpty()) opiepath = qtopiapath; //mailclients QString mailmsg1 = "writeMail(QString,QString)"; QString mailmsg2 = "writeMail(QMap(QString,QString))"; QString undefined = ""; addDefaultAppItem(ExternalAppHandler::EMAIL, KPimGlobalPrefs::NONE_EMC, "No email client installed", undefined, undefined, undefined, undefined, undefined); addDefaultAppItem(ExternalAppHandler::EMAIL, KPimGlobalPrefs::OTHER_EMC, "Userdefined email client", undefined, undefined, undefined, undefined, undefined); +#ifdef DESKTOP_VERSION + QString appPath; +#ifdef _WIN32_ + appPath = "C:\\Programme\\Mozilla Thunderbird\\thunderbird.exe"; +#else + appPath = "/usr/bin/thunderbird"; +#endif + addDefaultAppItem(ExternalAppHandler::EMAIL, KPimGlobalPrefs::OMPI_EMC, "Mozilla Thunderbird", appPath, "-compose", "to=%1 <%2>", ",", "subject=%1"); + +#ifdef _WIN32_ + appPath = "C:\\Programme\\Mozilla\\mozilla.exe"; +#else + appPath = "/usr/bin/mozilla"; +#endif + addDefaultAppItem(ExternalAppHandler::EMAIL, KPimGlobalPrefs::QTOPIA_EMC, "Mozilla Suite", appPath, "-mail -compose", "to=%1 <%2>", ",", "subject=%1"); + + + +#else if (( QFile::exists( qtopiapath + "/bin/ompi" )) || ( QFile::exists( opiepath + "/bin/ompi" )) || ( QFile::exists( qtpath + "/bin/ompi" ))) addDefaultAppItem(ExternalAppHandler::EMAIL, KPimGlobalPrefs::OMPI_EMC, "OM/Pi email client", "QPE/Application/ompi", mailmsg1, "%1;%2", mailmsg2, "TO=%1;ATTACHMENT=%2"); if (( QFile::exists( qtopiapath + "/bin/qtmail" )) || ( QFile::exists( qtpath + "/bin/qtmail" ))) addDefaultAppItem(ExternalAppHandler::EMAIL, KPimGlobalPrefs::QTOPIA_EMC, "Qtopia email client", "QPE/Application/qtmail", mailmsg1, "%1;%2", mailmsg2, "TO=%1;ATTACHMENT=%2"); if ( QFile::exists( opiepath + "/bin/opiemail" )) addDefaultAppItem(ExternalAppHandler::EMAIL, KPimGlobalPrefs::OPIE_EMC, "Opie email client", "QPE/Application/opiemail", mailmsg1, "%1;%2", mailmsg2, "TO=%1;ATTACHMENT=%2"); if ( QFile::exists( opiepath + "/bin/mailit" )) addDefaultAppItem(ExternalAppHandler::EMAIL, KPimGlobalPrefs::OPIE_MAILIT_EMC, "Opie mailit email client", "QPE/Application/mailit", mailmsg1, "%1;%2", mailmsg2, "TO=%1;ATTACHMENT=%2"); - +#endif //phoneclients addDefaultAppItem(ExternalAppHandler::PHONE, KPimGlobalPrefs::NONE_PHC, "No phone client installed", undefined, undefined, undefined, undefined, undefined); addDefaultAppItem(ExternalAppHandler::PHONE, KPimGlobalPrefs::OTHER_PHC, "Other phone client", undefined, undefined, undefined, undefined, undefined); if (( QFile::exists( qtopiapath + "/bin/kppi" )) || ( QFile::exists( opiepath + "/bin/kppi" ))) addDefaultAppItem(ExternalAppHandler::PHONE, KPimGlobalPrefs::KPPI_PHC, "KP/Pi phone client", "QPE/Application/kppi", "-ring:%1", "", undefined, undefined); //faxclients addDefaultAppItem(ExternalAppHandler::FAX, KPimGlobalPrefs::NONE_FAC, "No fax client installed", undefined, undefined, undefined, undefined, undefined); addDefaultAppItem(ExternalAppHandler::FAX, KPimGlobalPrefs::OTHER_FAC, "Other fax client", undefined, undefined, undefined, undefined, undefined); //smsclients addDefaultAppItem(ExternalAppHandler::SMS, KPimGlobalPrefs::NONE_SMC, "No sms client installed", undefined, undefined, undefined, undefined, undefined); addDefaultAppItem(ExternalAppHandler::SMS, KPimGlobalPrefs::OTHER_SMC, "Other sms client", undefined, undefined, undefined, undefined, undefined); //pagerclients addDefaultAppItem(ExternalAppHandler::PAGER, KPimGlobalPrefs::NONE_PAC, "No pager client installed", undefined, undefined, undefined, undefined, undefined); addDefaultAppItem(ExternalAppHandler::PAGER, KPimGlobalPrefs::OTHER_PAC, "Other pager client", undefined, undefined, undefined, undefined, undefined); //sipclients addDefaultAppItem(ExternalAppHandler::SIP, KPimGlobalPrefs::NONE_SIC, "No SIP client installed", undefined, undefined, undefined, undefined, undefined); @@ -507,62 +527,59 @@ QList<DefaultAppItem> ExternalAppHandler::getAvailableDefaultItems(Types type) for ( dai=mDefaultItems.first(); dai != 0; dai=mDefaultItems.next() ) { if (dai->_type == type) list.append(dai); } return list; } DefaultAppItem* ExternalAppHandler::getDefaultItem(Types type, int clientid) { DefaultAppItem* dai; for ( dai=mDefaultItems.first(); dai != 0; dai=mDefaultItems.next() ) { if (dai->_type == type && dai->_id == clientid) return dai; } return 0; } bool ExternalAppHandler::isEmailAppAvailable() { -#ifndef DESKTOP_VERSION + if (mEmailAppAvailable == UNDEFINED) { int client = KPimGlobalPrefs::instance()->mEmailClient; if (client == KPimGlobalPrefs::NONE_EMC) mEmailAppAvailable = UNAVAILABLE; else mEmailAppAvailable = AVAILABLE; } return (mEmailAppAvailable == AVAILABLE); -#else //DESKTOP_VERSION - return false; -#endif //DESKTOP_VERSION } bool ExternalAppHandler::isSMSAppAvailable() { #ifndef DESKTOP_VERSION if (mSMSAppAvailable == UNDEFINED) { int client = KPimGlobalPrefs::instance()->mSMSClient; if (client == KPimGlobalPrefs::NONE_SMC) mSMSAppAvailable = UNAVAILABLE; else mSMSAppAvailable = AVAILABLE; } return (mSMSAppAvailable == AVAILABLE); #else //DESKTOP_VERSION return false; #endif //DESKTOP_VERSION } bool ExternalAppHandler::isPhoneAppAvailable() { #ifndef DESKTOP_VERSION if (mPhoneAppAvailable == UNDEFINED) @@ -667,109 +684,175 @@ bool ExternalAppHandler::mailToMultipleContacts( const QString& emails, const QS } channel = dai->_channel; message2 = dai->_message2; parameters2 = dai->_parameters2; } //first check if one of the mailers need the emails right in the message. message2 = translateMessage(message2, emails, urls); #ifdef DEBUG_EXT_APP_HANDLER qDebug("4Using QCopEnvelope e(\"%s\",\"%s\")", channel.latin1(), message2.latin1()); qDebug("passing emailadresses(%s), attachmenturls(%s) as parameters in the form %s to QCopEnvelope", emails.latin1() , urls.latin1(), parameters2.latin1()); #endif QCopEnvelope e(channel.latin1(), message2.latin1()); //US we need no names in the To field. The emailadresses are enough passParameters(&e, parameters2, emails, urls); #else - KMessageBox::sorry( 0, i18n( "This version does not support the sending of emails." ) ); + //qDebug("mtmc %s %s ", emails.latin1(), urls.latin1()); + + QString channel; + QString message2; + QString parameters2; + QString message; + QString parameters; + + + int client = KPimGlobalPrefs::instance()->mEmailClient; + if (client == KPimGlobalPrefs::OTHER_EMC) + { + channel = KPimGlobalPrefs::instance()->mEmailOtherChannel; + message2 = KPimGlobalPrefs::instance()->mEmailOtherMessage; + parameters2 = KPimGlobalPrefs::instance()->mEmailOtherMessageParameters; + } + else + { + DefaultAppItem* dai = getDefaultItem(EMAIL, client); + if (!dai) + { + qDebug("could not find configured email application."); + return false; + } + channel = dai->_channel; + message2 = dai->_message2; + parameters2 = dai->_parameters2; + message = dai->_message; + parameters = dai->_parameters; + } + + //first check if one of the mailers need the emails right in the message. + message2 = translateMessage(message2, emails, urls); +#ifdef DEBUG_EXT_APP_HANDLER + qDebug("4Using QCopEnvelope e(\"%s\",\"%s\")", channel.latin1(), message2.latin1()); + qDebug("passing emailadresses(%s), attachmenturls(%s) as parameters in the form %s to QCopEnvelope", emails.latin1() , urls.latin1(), parameters2.latin1()); +#endif + qDebug("%s --- %s %s --- %s %s", channel.latin1(), message.latin1(),message2.latin1(), parameters.latin1(), parameters2.latin1() ); + //KMessageBox::sorry( 0, message2 ); + QProcess * proc = new QProcess( this ); + QStringList list = QStringList::split( " ", message ); + int i = 0; + proc->addArgument( channel ); + while ( i < list.count ( ) ) { + //qDebug("add%sdd ",list[i].stripWhiteSpace().latin1() ); + proc->addArgument( list[i].stripWhiteSpace() ); + ++i; + } + parameters2 = translateMessage(parameters2, urls, "" ); + QString arg = "to='%1'"; + arg = arg.arg( emails ) + ","+parameters2;; + + //qDebug("2add%sdd ",arg.latin1() ); + proc->addArgument( arg); + proc->launch(""); #endif return true; } /************************************************************************** * **************************************************************************/ //calls the emailapplication and creates a mail with parameter emails as recipients bool ExternalAppHandler::mailToOneContact( const QString& name, const QString& emailadress ) { -#ifndef DESKTOP_VERSION + QString channel; QString message; QString parameters; int client = KPimGlobalPrefs::instance()->mEmailClient; if (client == KPimGlobalPrefs::OTHER_EMC) { channel = KPimGlobalPrefs::instance()->mEmailOtherChannel; message = KPimGlobalPrefs::instance()->mEmailOtherMessage; parameters = KPimGlobalPrefs::instance()->mEmailOtherMessageParameters; } else { DefaultAppItem* dai = ExternalAppHandler::getDefaultItem(EMAIL, client); if (!dai) { qDebug("could not find configured email application."); return false; } channel = dai->_channel; message = dai->_message; parameters = dai->_parameters; } - +#ifdef DESKTOP_VERSION + //message = channel + " " +message + " \""+ parameters + "\""; +#endif //first check if one of the mailers need the emails right in the message. message = translateMessage(message, name, emailadress); - #ifdef DEBUG_EXT_APP_HANDLER qDebug("5Using QCopEnvelope e(\"%s\",\"%s\")", channel.latin1(), message.latin1()); qDebug("passing name(%s), emailadresses(%s) as parameters in the form %s to QCopEnvelope", name.latin1(), emailadress.latin1(), parameters.latin1()); #endif +#ifndef DESKTOP_VERSION QCopEnvelope e(channel.latin1(), message.latin1()); //US we need no names in the To field. The emailadresses are enough passParameters(&e, parameters, name, emailadress); +#else // DESKTOP_VERSION - -#else - KMessageBox::sorry( 0, i18n( "This version does not support the sending of emails." ) ); + //KMessageBox::sorry( 0, message ); + QProcess * proc = new QProcess( this ); + QStringList list = QStringList::split( " ", message ); + int i = 0; + proc->addArgument( channel ); + while ( i < list.count ( ) ) { + //qDebug("add%sdd ",list[i].latin1() ); + proc->addArgument( list[i] ); + ++i; + } + parameters = translateMessage(parameters, name, emailadress); + proc->addArgument( parameters ); + proc->launch(""); #endif - return true; } /************************************************************************** * **************************************************************************/ //calls the emailapplication and creates a mail with parameter as recipients // parameters format is // NAME <EMAIL>:SUBJECT bool ExternalAppHandler::mailToOneContact( const QString& adressline ) { QString line = adressline; int first = line.find( "<"); int last = line.find( ">"); QString name = line.left(first); QString emailadress = line.mid(first+1, last-first-1); //Subject can not be handled right now. return mailToOneContact( name, emailadress ); } |