author | ulf69 <ulf69> | 2004-08-18 21:11:43 (UTC) |
---|---|---|
committer | ulf69 <ulf69> | 2004-08-18 21:11:43 (UTC) |
commit | 05a1b5cbea6a7c1a7500632f8e7c1bf5be9328d8 (patch) (side-by-side diff) | |
tree | 605819f51c314d137f24281f1ed4854b2086aa68 /libkdepim | |
parent | 7d15927b7e7957a80da335587598e7b62dece1a4 (diff) | |
download | kdepimpi-05a1b5cbea6a7c1a7500632f8e7c1bf5be9328d8.zip kdepimpi-05a1b5cbea6a7c1a7500632f8e7c1bf5be9328d8.tar.gz kdepimpi-05a1b5cbea6a7c1a7500632f8e7c1bf5be9328d8.tar.bz2 |
added new QCop method requestForDetails
-rw-r--r-- | libkdepim/externalapphandler.cpp | 87 | ||||
-rw-r--r-- | libkdepim/externalapphandler.h | 19 |
2 files changed, 77 insertions, 29 deletions
diff --git a/libkdepim/externalapphandler.cpp b/libkdepim/externalapphandler.cpp index 64caa7d..b57506b 100644 --- a/libkdepim/externalapphandler.cpp +++ b/libkdepim/externalapphandler.cpp @@ -21,157 +21,185 @@ 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 <qmap.h> #include <qregexp.h> #ifndef DESKTOP_VERSION #include <qtopia/qcopenvelope_qws.h> #endif #include <kstaticdeleter.h> #include <kmessagebox.h> #include "externalapphandler.h" #include "kpimglobalprefs.h" /********************************************************************************* * ********************************************************************************/ -QCopTransferItem::QCopTransferItem(const QString& sourceMessage, const QString& targetChannel, const QString& targetMessage) - : _sourceMessage(sourceMessage), _targetChannel(targetChannel), _targetMessage(targetMessage) +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 _sourceMessageParameters = "(QString,QString,QString)"; } /*********************************************************************************/ QCopTransferItem::QCopTransferItem() { } /*********************************************************************************/ -bool QCopTransferItem::sendMessageToTarget(const QString& uid, const QString& param1) +bool QCopTransferItem::sendMessageToTarget(const QString& uid, const QString& param1, const QString& param2, const QString& param3) { #ifndef DESKTOP_VERSION //sourceMessage passes two parameters: sourceChannel, uid QString sourceMessage = _sourceMessage + _sourceMessageParameters; qDebug("Using QCopEnvelope e(\"%s\",\"%s\")", _targetChannel.latin1(), sourceMessage.latin1()); - qDebug("passing sourcechannel(%s), uid(%s), param1(%s) as parameter to QCopEnvelope", _sourceChannel.latin1(), uid.latin1(), param1.latin1()); + qDebug("passing sourcechannel(%s), uid(%s), param1(%s), param3(%s), param3(%s) as parameter to QCopEnvelope", _sourceChannel.latin1(), uid.latin1(), param1.latin1(), param2.latin1(), param3.latin1()); QCopEnvelope e(_targetChannel.latin1(), sourceMessage.latin1()); - e << _sourceChannel << uid << param1; + e << _sourceChannel << uid; + + if (_usedSourceParameters == 1) + e << param1; + else if (_usedSourceParameters == 2) + e << param1 << param2; + else if (_usedSourceParameters == 3) + e << param1 << param2 << param3; + return true; #else KMessageBox::sorry( 0, i18n( "This version does not support QCop." ) ); return false; #endif } /*********************************************************************************/ void QCopTransferItem::setSourceChannel(const QString& sourceChannel) { if (_sourceChannel.isEmpty()) _sourceChannel = sourceChannel; } /*********************************************************************************/ bool QCopTransferItem::appMessage( const QCString& cmsg, const QByteArray& data ) { /*US // copied from old mail2 static int ii = 0; // block second call if ( ii < 2 ) { ++ii; if ( ii > 1 ) { qDebug("qcop call blocked "); return true; } } */ qDebug("QCopTransferItem- QCOP message received: %s ", cmsg.data() ); //we are in the target and get a request from the source if ( (_sourceMessage + _sourceMessageParameters) == cmsg.data()) { QDataStream stream( data, IO_ReadOnly ); QString sourceChannel; QString uid; QString param1; + QString param2; + QString param3; - stream >> sourceChannel >> uid >> param1; + stream >> sourceChannel >> uid; - emit receivedMessageFromSource(sourceChannel, uid, param1); + if (_usedSourceParameters == 0) + { + emit receivedMessageFromSource(sourceChannel, uid); + } + else if (_usedSourceParameters == 1) + { + stream >> param1; + emit receivedMessageFromSource(sourceChannel, uid, param1); + } + else if (_usedSourceParameters == 2) + { + stream >> param1 >> param2; + emit receivedMessageFromSource(sourceChannel, uid, param1, param2); + } + else if (_usedSourceParameters == 3) + { + stream >> param1 >> param2 >> param3; + emit receivedMessageFromSource(sourceChannel, uid, param1, param2, param3); + } return true; } return false; } /********************************************************************************* * ********************************************************************************/ -QCopMapTransferItem::QCopMapTransferItem(const QString& sourceMessage, const QString& targetChannel, const QString& targetMessage) - : QCopTransferItem(sourceMessage, targetChannel,targetMessage) +QCopMapTransferItem::QCopMapTransferItem(int usedSourceParameters, const QString& sourceMessage, const QString& targetChannel, const QString& targetMessage) + : QCopTransferItem(usedSourceParameters, sourceMessage, targetChannel,targetMessage) { //targetMessage returns later two parameters: uid, and map<qstring,qstring> _targetMessageParameters = "(QString,QMAP<QString,QString>)"; } /*********************************************************************************/ bool QCopMapTransferItem::sendMessageToSource(const QString& uid, const QMap<QString,QString>& nameEmailMap) { #ifndef DESKTOP_VERSION //targetMessage passes two parameters: uid, map QString targetMessage = _targetMessage + _targetMessageParameters; qDebug("Using QCopEnvelope e(\"%s\",\"%s\")", _sourceChannel.latin1(), targetMessage.latin1()); qDebug("passing uid(%s) and map as parameter to QCopEnvelope", uid.latin1()); QCopEnvelope e(_sourceChannel.latin1(), targetMessage.latin1()); //US we need no names in the To field. The emailadresses are enough e << uid << nameEmailMap; return true; #else KMessageBox::sorry( 0, i18n( "This version does not support QCop." ) ); return false; #endif } /*********************************************************************************/ bool QCopMapTransferItem::appMessage( const QCString& cmsg, const QByteArray& data ) @@ -179,68 +207,68 @@ bool QCopMapTransferItem::appMessage( const QCString& cmsg, const QByteArray& da bool res = QCopTransferItem::appMessage( cmsg, data ); if (res == false) { QDataStream stream( data, IO_ReadOnly ); qDebug("QCopMapTransferItem- QCOP message received: %s ", cmsg.data() ); //we are in the source and get an answer from the target if ((_targetMessage + _targetMessageParameters) == cmsg.data()) { QMap<QString,QString> adrMap; QString uid; stream >> uid >> adrMap; emit receivedMessageFromTarget(uid, adrMap); return true; } } return false; } /********************************************************************************* * ********************************************************************************/ -QCopListTransferItem::QCopListTransferItem(const QString& sourceMessage, const QString& targetChannel, const QString& targetMessage) - : QCopTransferItem(sourceMessage, targetChannel,targetMessage) +QCopListTransferItem::QCopListTransferItem(int usedSourceParameters, const QString& sourceMessage, const QString& targetChannel, const QString& targetMessage) + : QCopTransferItem(usedSourceParameters, sourceMessage, targetChannel,targetMessage) { - //targetMessage returns later two parameters: uid, and map<qstring,qstring> + //targetMessage returns later two parameters: uid, and three lists _targetMessageParameters = "(QString,QStringList,QStringList,QStringList)"; } /*********************************************************************************/ bool QCopListTransferItem::sendMessageToSource(const QString& uid, const QStringList& list1, const QStringList& list2, const QStringList& list3) { #ifndef DESKTOP_VERSION //targetMessage passes two parameters: uid, map QString targetMessage = _targetMessage + _targetMessageParameters; qDebug("Using QCopEnvelope e(\"%s\",\"%s\")", _sourceChannel.latin1(), targetMessage.latin1()); qDebug("passing uid(%s) and list1, list2, list3 as parameter to QCopEnvelope", uid.latin1()); QCopEnvelope e(_sourceChannel.latin1(), targetMessage.latin1()); //US we need no names in the To field. The emailadresses are enough e << uid << list1 << list2 << list3; return true; #else KMessageBox::sorry( 0, i18n( "This version does not support QCop." ) ); return false; #endif } /*********************************************************************************/ bool QCopListTransferItem::appMessage( const QCString& cmsg, const QByteArray& data ) { bool res = QCopTransferItem::appMessage( cmsg, data ); @@ -256,73 +284,74 @@ bool QCopListTransferItem::appMessage( const QCString& cmsg, const QByteArray& d { QStringList list1; QStringList list2; QStringList list3; QString uid; stream >> uid >> list1 >> list2 >> list3; emit receivedMessageFromTarget(uid, list1, list2, list3); return true; } } return false; } /********************************************************************************* * ********************************************************************************/ ExternalAppHandler *ExternalAppHandler::sInstance = 0; static KStaticDeleter<ExternalAppHandler> staticDeleter; ExternalAppHandler::ExternalAppHandler() { mDefaultItems.setAutoDelete(true); - mNameEmailUidListFromKAPITransfer = new QCopListTransferItem("requestNameEmailUIDListFromKAPI", "QPE/Application/kapi", "receiveNameEmailUIDList"); - connect(mNameEmailUidListFromKAPITransfer, SIGNAL (receivedMessageFromSource(const QString&, const QString&, const QString&)), this, SIGNAL (requestForNameEmailUidList(const QString&, const QString&, const QString&))); + mNameEmailUidListFromKAPITransfer = new QCopListTransferItem(0, "requestNameEmailUIDListFromKAPI", "QPE/Application/kapi", "receiveNameEmailUIDList"); + connect(mNameEmailUidListFromKAPITransfer, SIGNAL (receivedMessageFromSource(const QString&, const QString&)), this, SIGNAL (requestForNameEmailUidList(const QString&, const QString&))); connect(mNameEmailUidListFromKAPITransfer, SIGNAL (receivedMessageFromTarget(const QString&, const QStringList&, const QStringList&, const QStringList&)), this, SIGNAL (receivedNameEmailUidListEvent(const QString&, const QStringList&, const QStringList&, const QStringList&))); -//US mFindByEmailFromKAPITransfer = new QCopListTransferItem("requestFindByEmailFromKAPI", "QPE/Application/kapi", "receiveFindByEmailNameEmailUIDList"); +//US mFindByEmailFromKAPITransfer = new QCopListTransferItem(1, "requestFindByEmailFromKAPI", "QPE/Application/kapi", "receiveFindByEmailNameEmailUIDList"); //US connect(mFindByEmailFromKAPITransfer, SIGNAL (receivedMessageFromSource(const QString&, const QString&, const QString&)), this, SIGNAL (requestForFindByEmail(const QString&, const QString&, const QString&))); //US connect(mFindByEmailFromKAPITransfer, SIGNAL (receivedMessageFromTarget(const QString&, const QStringList&, const QStringList&, const QStringList&)), this, SIGNAL (receivedFindByEmailEvent(const QString&, const QStringList&, const QStringList&, const QStringList&))); - + mDisplayDetails = new QCopListTransferItem(3, "requestDisplayDetailsFromKAPI", "QPE/Application/kapi", ""); + connect(mDisplayDetails, SIGNAL (receivedMessageFromSource(const QString&, const QString&, const QString&, const QString&)), this, SIGNAL (requestForDetails(const QString&, const QString&, const QString&, const QString&, const QString&))); } ExternalAppHandler::~ExternalAppHandler() { } void ExternalAppHandler::loadConfig() { mDefaultItems.clear(); mEmailAppAvailable = UNDEFINED; mPhoneAppAvailable = UNDEFINED; mFaxAppAvailable = UNDEFINED; mSMSAppAvailable = UNDEFINED; mPagerAppAvailable = UNDEFINED; QString opiepath = QString::fromLatin1( getenv("OPIEDIR") ); QString qtopiapath = QString::fromLatin1( getenv("QPEDIR") ); 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); @@ -895,65 +924,75 @@ void ExternalAppHandler::passParameters(QCopEnvelope* e, const QString& paramete { QString value = (*it2); value = value.replace( QRegExp("%1"), param1 ); value = value.replace( QRegExp("%2"), param2 ); valmap.insert(key, value); useValMap = true; } else { // qDebug("pass parameter << %s", key.latin1()); (*e) << key; } } if (useValMap == true) (*e) << valmap; #endif } /************************************************************************** * **************************************************************************/ void ExternalAppHandler::appMessage( const QCString& cmsg, const QByteArray& data ) { bool res = mNameEmailUidListFromKAPITransfer->appMessage( cmsg, data ); + if (!res) + res = mDisplayDetails->appMessage( cmsg, data ); + // if (!res) // res = mNameEmailUidListFromKAPITransfer->appMessage( cmsg, data ); } -bool ExternalAppHandler::requestNameEmailUidListFromKAPI(const QString& sourceChannel, const QString& uid) +bool ExternalAppHandler::requestNameEmailUidListFromKAPI(const QString& sourceChannel, const QString& sessionuid) { mNameEmailUidListFromKAPITransfer->setSourceChannel(sourceChannel); - return mNameEmailUidListFromKAPITransfer->sendMessageToTarget(uid, QString::null); + return mNameEmailUidListFromKAPITransfer->sendMessageToTarget(sessionuid); } -bool ExternalAppHandler::returnNameEmailUidListFromKAPI(const QString& sourceChannel, const QString& uid, const QStringList& list1, const QStringList& list2, const QStringList& list3) +bool ExternalAppHandler::returnNameEmailUidListFromKAPI(const QString& sourceChannel, const QString& sessionuid, const QStringList& list1, const QStringList& list2, const QStringList& list3) { mNameEmailUidListFromKAPITransfer->setSourceChannel(sourceChannel); - return mNameEmailUidListFromKAPITransfer->sendMessageToSource(uid, list1, list2, list3); + return mNameEmailUidListFromKAPITransfer->sendMessageToSource(sessionuid, list1, list2, list3); } -bool ExternalAppHandler::requestFindByEmailFromKAPI(const QString& sourceChannel, const QString& uid, const QString& email) +bool ExternalAppHandler::requestFindByEmailFromKAPI(const QString& sourceChannel, const QString& sessionuid, const QString& email) { mFindByEmailFromKAPITransfer->setSourceChannel(sourceChannel); - return mFindByEmailFromKAPITransfer->sendMessageToTarget(uid, email); + return mFindByEmailFromKAPITransfer->sendMessageToTarget(sessionuid, email); } -bool ExternalAppHandler::returnFindByEmailFromKAPI(const QString& sourceChannel, const QString& uid, const QStringList& list1, const QStringList& list2, const QStringList& list3) +bool ExternalAppHandler::returnFindByEmailFromKAPI(const QString& sourceChannel, const QString& sessionuid, const QStringList& list1, const QStringList& list2, const QStringList& list3) { mFindByEmailFromKAPITransfer->setSourceChannel(sourceChannel); - return mFindByEmailFromKAPITransfer->sendMessageToSource(uid, list1, list2, list3); + return mFindByEmailFromKAPITransfer->sendMessageToSource(sessionuid, list1, list2, list3); } +bool ExternalAppHandler::requestDetailsFromKAPI(const QString& sourceChannel, const QString& sessionuid, const QString& name, const QString& email, const QString& uid) +{ + mDisplayDetails->setSourceChannel(sourceChannel); + return mDisplayDetails->sendMessageToTarget(sessionuid, name, email, uid); +} + + diff --git a/libkdepim/externalapphandler.h b/libkdepim/externalapphandler.h index 7c8de4e..a74080f 100644 --- a/libkdepim/externalapphandler.h +++ b/libkdepim/externalapphandler.h @@ -14,118 +14,122 @@ 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$ */ #ifndef EXTERNALAPPHANDLER_H #define EXTERNALAPPHANDLER_H #include <qobject.h> #include <qlist.h> #include <qmap.h> class QCopEnvelope; class ExternalAppHandler; class QCopTransferItem : public QObject { Q_OBJECT public: - QCopTransferItem(const QString& sourceMessage, const QString& targetChannel, const QString& targetMessage); + QCopTransferItem(int usedSourceParameters, const QString& sourceMessage, const QString& targetChannel, const QString& targetMessage); QCopTransferItem(); - bool sendMessageToTarget(const QString& uid, const QString& param1); + bool sendMessageToTarget(const QString& uid, const QString& param1 = QString::null, const QString& param2 = QString::null, const QString& param3 = QString::null); void setSourceChannel(const QString& sourceChannel); virtual bool appMessage( const QCString& msg, const QByteArray& data ); signals: + void receivedMessageFromSource(const QString& sourceChannel, const QString& uid); void receivedMessageFromSource(const QString& sourceChannel, const QString& uid, const QString& param1); + void receivedMessageFromSource(const QString& sourceChannel, const QString& uid, const QString& param1, const QString& param2); + void receivedMessageFromSource(const QString& sourceChannel, const QString& uid, const QString& param1, const QString& param2, const QString& param3); public: + int _usedSourceParameters; QString _sourceChannel; QString _sourceMessage; QString _sourceMessageParameters; QString _targetChannel; QString _targetMessage; QString _targetMessageParameters; }; /********************************************************************************* * ********************************************************************************/ class QCopMapTransferItem : public QCopTransferItem { Q_OBJECT public: - QCopMapTransferItem(const QString& sourceMessage, const QString& targetChannel, const QString& targetMessage); + QCopMapTransferItem(int usedSourceParameters, const QString& sourceMessage, const QString& targetChannel, const QString& targetMessage); bool sendMessageToSource(const QString& uid, const QMap<QString,QString>& nameEmailMap); virtual bool appMessage( const QCString& msg, const QByteArray& data ); signals: void receivedMessageFromTarget(const QString& uid, const QMap<QString,QString>& nameEmailMap); }; /********************************************************************************* * ********************************************************************************/ class QCopListTransferItem : public QCopTransferItem { Q_OBJECT public: - QCopListTransferItem(const QString& sourceMessage, const QString& targetChannel, const QString& targetMessage); + QCopListTransferItem(int usedSourceParameters, const QString& sourceMessage, const QString& targetChannel, const QString& targetMessage); bool sendMessageToSource(const QString& uid, const QStringList& list1, const QStringList& list2, const QStringList& list3); virtual bool appMessage( const QCString& msg, const QByteArray& data ); signals: void receivedMessageFromTarget(const QString& uid, const QStringList& list1, const QStringList& list2, const QStringList& list3); }; /********************************************************************************* * ********************************************************************************/ class DefaultAppItem { public: DefaultAppItem(int type, int id, const QString& label, const QString& channel, const QString& message, const QString& parameters, const QString& message2, const QString& parameters2) : _type(type), _id(id), _label(label), _channel(channel), _message(message), _parameters(parameters), _message2(message2), _parameters2(parameters2) { } DefaultAppItem() { } public: int _type; int _id; QString _label; QString _channel; @@ -172,81 +176,86 @@ class ExternalAppHandler : public QObject //calls the emailapplication and creates a mail with parameter as recipients // parameters format is // NAME <EMAIL>:SUBJECT bool mailToOneContact( const QString& adressline ); //calls the phoneapplication with the number bool callByPhone( const QString& phonenumber ); //calls the smsapplication with the number bool callBySMS( const QString& phonenumber ); //calls the pagerapplication with the number bool callByPager( const QString& pagernumber ); //calls the faxapplication with the number bool callByFax( const QString& faxnumber ); bool isEmailAppAvailable(); bool isSMSAppAvailable(); bool isPhoneAppAvailable(); bool isFaxAppAvailable(); bool isPagerAppAvailable(); //Call this method on the source when you want to select names from the addressbook by using QCop bool requestNameEmailUidListFromKAPI(const QString& sourceChannel, const QString& uid); //Call this method on the target when you want to return the name/email map to the source (client). bool returnNameEmailUidListFromKAPI(const QString& sourceChannel, const QString& uid, const QStringList& name, const QStringList& email, const QStringList& uid); bool requestFindByEmailFromKAPI(const QString& sourceChannel, const QString& uid, const QString& email); bool returnFindByEmailFromKAPI(const QString& sourceChannel, const QString& uid, const QStringList& name, const QStringList& email, const QStringList& uid); + bool requestDetailsFromKAPI(const QString& sourceChannel, const QString& sessionuid, const QString& name, const QString& email, const QString& uid); + //loadConfig clears the cache and checks again if the applications are available or not void loadConfig(); QList<DefaultAppItem> getAvailableDefaultItems(Types); DefaultAppItem* getDefaultItem(Types, int); public slots: void appMessage( const QCString& msg, const QByteArray& data ); signals: // Emmitted when the target app receives a request from the source app - void requestForNameEmailUidList(const QString& sourceChannel, const QString& uid, const QString& param1); + void requestForNameEmailUidList(const QString& sourceChannel, const QString& uid); // Emitted when the source app recieves a list of name/email pairs (=addresses) from another target app. Usually Ka/Pi // The first parameter is a uniqueid. It can be used to identify the event void receivedNameEmailUidListEvent(const QString& uid, const QStringList& nameList, const QStringList& emailList, const QStringList& uidList); void requestFindByEmail(const QString& sourceChannel, const QString& uid, const QString& email); void receivedFindBbyEmailEvent(const QString& uid, const QStringList& nameList, const QStringList& emailList, const QStringList& uidList); + void requestForDetails(const QString& sourceChannel, const QString& sessionuid, const QString& name, const QString& email, const QString& uid); + private: ExternalAppHandler(); QList<DefaultAppItem> mDefaultItems; Availability mEmailAppAvailable; Availability mPhoneAppAvailable; Availability mFaxAppAvailable; Availability mSMSAppAvailable; Availability mPagerAppAvailable; QCopListTransferItem* mNameEmailUidListFromKAPITransfer; QCopListTransferItem* mFindByEmailFromKAPITransfer; + QCopTransferItem* mDisplayDetails; void addDefaultAppItem(Types type, int id, const QString& label, const QString& channel, const QString& message, const QString& parameters, const QString& message2, const QString& parameters2); QString& translateMessage(QString& message, const QString& param1, const QString& param2) const; void passParameters(QCopEnvelope* e, const QString& parameters, const QString& param1, const QString& param2) const; static ExternalAppHandler *sInstance; }; #endif |