diff options
Diffstat (limited to 'interfaces/kimproxy/library/kimproxy.h')
-rw-r--r-- | interfaces/kimproxy/library/kimproxy.h | 654 |
1 files changed, 0 insertions, 654 deletions
diff --git a/interfaces/kimproxy/library/kimproxy.h b/interfaces/kimproxy/library/kimproxy.h deleted file mode 100644 index d4312b341..000000000 --- a/interfaces/kimproxy/library/kimproxy.h +++ /dev/null @@ -1,654 +0,0 @@ -/* - kimproxy.h - - IM service library for KDE - - Copyright (c) 2004 Will Stephenson <lists@stevello.free-online.co.uk> - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Library General Public - License as published by the Free Software Foundation; either - version 2 of the License, or (at your option) any later version. - - This library 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 - Library General Public License for more details. - - You should have received a copy of the GNU Library General Public License - along with this library; see the file COPYING.LIB. If not, write to - the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, - Boston, MA 02110-1301, USA. -*/ - -#ifndef KIMPROXY_H -#define KIMPROXY_H - -#include <tqdict.h> -#include <tqmap.h> -#include <tqptrdict.h> -#include <tqstringlist.h> - - -#define IM_SERVICE_TYPE "DCOP/InstantMessenger" -#define IM_CLIENT_PREFERENCES_FILE "default_components" -#define IM_CLIENT_PREFERENCES_SECTION "InstantMessenger" -#define IM_CLIENT_PREFERENCES_ENTRY "imClient" - -#include "kimproxyiface.h" - -class DCOPClient; -class KIMIface_stub; -class KURL; -class ContactPresenceListCurrent; - -/** FIXME: remove for KDE4, binary compability again. */ -typedef TQMap<TQCString, int> AppPresence; // appId->presence; contains all applications' ideas of a user's presence -typedef TQDict<AppPresence> PresenceMap; // uid->AppPresence; contains a AppPresences for all users -/** FIXME: remove presenceMap and call this presenceMap in KDE4. This hack is for binary compatibility */ -typedef TQMap<TQString, ContactPresenceListCurrent> PresenceStringMap; - -/** - * @brief Provides access to instant messenger programs which implement KDE's - * instant messanger interface KIMIface - * - * This class provides an easy-to-use interface to all running instant - * messengers or chat programs that implement KIMIface. - * - * It works simultaneously with any running programs that implement the - * ServiceType @c DCOP/InstantMessenger. - * - * IM-contacts are identified using unique identifier strings (UID) used by - * KDE's address book framework KABC. - * However the use of the address book API is optional, KIMProxy provides - * methods to fetch lists of available contact UIDs from the applications. - * If a UID is reachable with more than one program, KIMProxy aggregates the - * available information and presents the 'best' presence. For example, for a - * contact who can be seen to be @c Away in @c IRC on program A but @c Online - * using @c ICQ on program B, the information from program B will be used. - * - * KIMProxy is designed for simple information in a wide number of cases, not - * for detailed messaging. - * - * The class is implemented as a singleton, so whenever you need access to - * one of its methods, just retrieve the single instance using instance(). - * The following code snippet demonstrated how to send a message to all - * reachable IM-contacts: - * @code - * // get proxy instance - * KIMProxy* proxy = KIMProxy::instance(); - * - * // check if there are suitable applications reachable - * if (!proxy->initialize()) return; - * - * TQString message = "Hi!\nHow are you on this wonderful day?"; - * - * // iterate over the list of reachable contacts - * TQStringList reachableContacts = proxy->reachableContacts(); - * for (TQStringList::const_iterator it = reachableContacts.begin(); - * it != reachableContacts.end(); ++it) - * { - proxy->messageContact(*it, message); - * } - * @endcode - * - * @note While it is possible to communicate with each of those application's - * by DCOP using KIMProxy has the advantage of communicating with all - * applications simultaneously and thus getting an augmented view of - * availability, capability and presence (online status) of IM-contacts. - * - * @see KIMIface - * @see KABC::AddressBook - * @see KABC::Addressee - * - * @since 3.3 - * @author Will Stephenson <lists@stevello.free-online.co.uk> - */ -class KIMPROXY_EXPORT KIMProxy : public TQObject, virtual public KIMProxyIface -{ - Q_OBJECT - struct Private; - - template<class> friend class KStaticDeleter; - ~KIMProxy(); - - public: - /** - * @brief Obtain an instance of KIMProxy - * - * Creates a new instance if it is called for the first time. - * Call initialize() to check if there are applications available for - * communication. - * - * @note KIMProxy uses DCOPClient::setNotifications() to make sure - * it updates its information about IM applications it interacts with, - * e.g. that it gets notified about newly available applications or - * about applications exiting - * - * @param client your application's DCOP client - * @return the singleton instance of this class - */ - static KIMProxy * instance( DCOPClient * client ); - - /** - * @brief Get the proxy ready to connect - * - * Discover any running IM clients and setup communication handlers for - * them. The list of available clients is updated automatically - * through notification about added or removed DCOP applications as - * provided by DCOPClient. - * - * It is safe to call this method more than once, initialization only - * occurs at the first time. - * - * @return whether the proxy is ready to use. - * @c false if there are no suitable apps running - */ - bool initialize(); - - /** - * @brief Obtain a list of IM-contacts known to IM-applications - * - * Returns a list of KABC UIDs gathered by merging the lists of - * each application the proxy can communicate with. - * The method uses cached information to make it fast and not - * require actually communicating with the applications every time - * it is called. - * - * @return a list of KABC UIDs known to any IM-application - * - * @see reachableContacts() - * @see onlineContacts() - * @see fileTransferContacts() - * @see isPresent() - * @see KABC::Addressee::uid() - */ - TQStringList allContacts(); - - /** - * @brief Obtain a list of IM-contacts that are currently reachable - * - * Returns a list of KABC UIDs gathered by merging the lists of - * each application the proxy can communicate with. - * - * @return a list of KABC UIDs who can receive a message, even if offline - * - * @see allContacts() - * @see onlineContacts() - * @see fileTransferContacts() - * @see messageContact() - * @see KABC::Addressee::uid() - */ - TQStringList reachableContacts(); - - /** - * @brief Obtain a list of IM-contacts that are currently online - * - * Returns a list of KABC UIDs gathered by merging the lists of - * each application the proxy can communicate with. - * The method uses cached information to make it fast and not - * require actually communicating with the applications every time - * it is called. - * - * @return a list of KABC UIDs who are online with unspecified presence - * - * @see allContacts() - * @see reachableContacts() - * @see fileTransferContacts() - * @see messageContact() - * @see chatWithContact() - * @see KABC::Addressee::uid() - */ - TQStringList onlineContacts(); - - /** - * @brief Obtain a list of IM-contacts who may receive file transfers - * - * Returned IM-contacts might not be capable of receiving file - * tranfers due to limitations of their clients or because they are - * behind a firewall. - * KIMProxy doesn't have the possibilities to discover this and will - * list them as well. - * - * Returns a list of KABC UIDs gathered by merging the lists of - * each application the proxy can communicate with. - * - * @return a list of KABC UIDs capable of file transfer - * - * @see allContacts() - * @see reachableContacts() - * @see onlineContacts() - * @see canReceiveFiles() - * @see KABC::Addressee::uid() - */ - TQStringList fileTransferContacts(); - - /** - * @brief Confirm if a given contact is known to the proxy - * - * A contact is known to the proxy if it is know to at least one - * IM-application the proxy is communicating with. - * - * The method uses cached information to make it fast and not - * require actually communicating with the applications every time - * it is called. - * - * @param uid the KABC UID you are interested in - * @return whether any IM-program knows of this KABC UID - * - * @see allContacts() - * @see presenceString() - * @see presenceNumeric() - * @see KABC::Addressee::uid() - */ - bool isPresent( const TQString& uid ); - - /** - * @brief Obtain the proxy's idea of the contact's display name - * - * If the given KABC UID is known to more than one IM-application - * the result of the application which has the best presence for the - * contact is taken. - * For example if a contact is @c Online on ICQ and @c Away on AIM, the - * value returned by the application providing ICQ is taken. - * - * Useful if KABC lookups may be too slow. - * - * @param uid the KABC UID you are interested in - * @return the corresponding display name or TQString:null if the - * UID is unknown - * - * @see isPresent() - * @see presenceString() - * @see presenceNumeric() - * @see KABC::Addressee::uid() - */ - TQString displayName( const TQString& uid ); - - /** - * @brief Obtain the IM presence as a number for the specified contact - * - * Returns one of the following values depending on the given contact's - * presence: - * - 0 - @c Unknown: for contacts where you can not use any of the - * other values - * - * - 1 - @c Offline: for contacts that are offline, i.e. not connected - * to their IM-service. - * - * - 2 - @c Connecting - * - * - 3 - @c Away: for contacts that are connected to their IM-service - * but not @c Online - * - * - 4 - @c Online - * - * If the given KABC UID is known to more than one IM-application - * the result of the application which has the best presence for the - * contact is taken. - * For example if a contact is @c Online on ICQ and Away on AIM, the - * value returned by the application providing ICQ is taken. - * - * The method uses cached information to make it fast and not - * require actually communicating with the applications every time - * it is called. - * - * @param uid the KABC UID you want the presence for - * @return a numeric representation of presence - currently one of - * 0 (Unknown), 1 (Offline), 2 (Connecting), 3 (Away), - * 4 (Online). Returns 0 if the given UID is unknown - * - * @see isPresent() - * @see presenceString() - * @see presenceIcon() - * @see KIMIface::presenceStatus() - * @see KABC::Addressee::uid() - */ - int presenceNumeric( const TQString& uid ); - - /** - * @brief Obtain the IM presence as a i18ned string for the specified - * contact - * - * The presence string is one of the following: - * - i18n("Unknown") - * - i18n("Offline") - * - i18n("Connecting") - * - i18n("Away") - * - i18n("Online") - * - * If the given KABC UID is known to more than one IM-application - * the result of the application which has the best presence for the - * contact is taken. - * For example if a contact is @c Online on ICQ and Away on AIM, the - * value returned by the application providing ICQ is taken. - * - * @note The presence string is created based on the numerical - * presence value returned by the applications. It currently - * does not return the presence strings used by the applications. - * - * The method uses cached information to make it fast and not - * require actually communicating with the applications every time - * it is called. - * - * @param uid the KABC UID you want the presence for - * @return the i18ned string describing the contact's presence or - * TQString::null if the UID is unknown - * - * @see isPresent() - * @see presenceNumeric() - * @see presenceIcon() - * @see KABC::Addressee::uid() - */ - TQString presenceString( const TQString& uid ); - - /** - * @brief Obtain the icon representing the IM presence for the - * specified contact - * - * If the given KABC UID is known to more than one IM-application - * the result of the application which has the best presence for the - * contact is taken. - * For example if a contact is @c Online on ICQ and Away on AIM, the - * value returned by the application providing ICQ is taken. - * - * @note The presence icon is chosen based on the numerical - * presence value returned by the applications. It currently - * does not return the presence icon used by the applications. - * - * The method uses cached information to make it fast and not - * require actually communicating with the applications every time - * it is called. - * - * @param uid the KABC UID you want the presence icon for - * @return a pixmap representing the contact's presence or a null - * pixmap if the contact is unknown. See TQPixmap::isNull() - * - * @see isPresent() - * @see presenceString() - * @see presenceNumeric() - * @see KABC::Addressee::uid() - */ - TQPixmap presenceIcon( const TQString& uid ); - - /** - * @brief Indicate if a given contact can receive files - * - * If the given KABC UID is known to more than one IM-application - * the result of the application which has the best presence for the - * contact is taken. - * For example if a contact is @c Online on ICQ and Away on AIM, the - * value returned by the application providing ICQ is taken. - * - * @param uid the KABC UID you want to the file transfer capability for - * @return whether the specified contact can receive files - * - * @see fileTransferContacts() - * @see KABC::Addressee::uid() - */ - bool canReceiveFiles( const TQString & uid ); - - /** - * @brief Indicate if a given contact will be able to respond - * - * Some media are unidirectional (e.g., sending SMS via a web - * interface). - * This refers to the contact's ability to respond as defined by the - * medium, not by their presence. - * - * Someone may appear offline (SMS has no presence) to you but in fact - * be able to respond. - * - * If the given KABC UID is known to more than one IM-application - * the result of the application which has the best presence for the - * contact is taken. - * For example if a contact is @c Online on ICQ and Away on AIM, the - * value returned by the application providing ICQ is taken. - * - * @param uid the KABC UID you are interested in - * @return whether the specified contact can respond - * - * @see isPresent() - * @see KABC::Addressee::uid() - */ - bool canRespond( const TQString & uid ); - - /** - * @brief Obtain the KABC UID corresponding to the given IM address - * - * @param contactId the protocol specific identifier for the contact, - * e.g. UIN for ICQ, screenname for AIM, nick for IRC - * @param protocol the IM protocol/service to check. - * See KIMIface::protocols() - * @return the KABC UID for the given contact or @c TQString::null if - * not found or either input stream was empty or the protocol - * is not supported - * - * @see KIMIface::protocols() - * @see addContact() - * @see isPresent() - * @see KABC::Addressee::uid() - */ - TQString locate( const TQString & contactId, const TQString & protocol ); - - /** - * @brief Obtain the given contact's current context (home, work, or - * any) - * - * Not all IM services/protocols support the concept of contexts. If the - * given UID maps to such a service, @c TQString::null will be returned - * - * If the given KABC UID is known to more than one IM-application - * the result of the application which has the best presence for the - * contact is taken. - * For example if a contact is @c Online on ICQ and Away on AIM, the - * value returned by the application providing ICQ is taken. - * - * @param uid the KABC UID you want the context for - * @return a string describing the context, or @c TQString::null if not - * supported or if the contact is unknown - * - * @see isPresent() - * @see KABC::Addressee::uid() - */ - TQString context( const TQString & uid ); - - /** - * @brief Start a chat session with the specified contact - * - * @param uid the KABC UID you want to chat with - * - * @see messageContact() - * @see sendFile() - * @see isPresent() - * @see reachableContacts() - * @see KABC::Addressee::uid() - */ - void chatWithContact( const TQString& uid ); - - /** - * @brief Send a single message to the specified contact - * - * Any response will be handled by the IM client as a normal - * conversation. - * - * @param uid the KABC UID you want to send the message to - * @param message the message text to send to the contact - * - * @see chatWithContact() - * @see sendFile() - * @see isPresent() - * @see reachableContacts() - * @see KABC::Addressee::uid() - */ - void messageContact( const TQString& uid, const TQString& message ); - - /** - * @brief Send a file to the contact - * - * Initiates a file transfer with the given contact if possible. - * - * @param uid the KABC UID you want to send to - * @param sourceURL a KURL pointing to the file to send - * @param altFileName an alternate filename describing the file or a - * description or title - * @param fileSize file size in bytes - * - * @see messageContact() - * @see chatWithContact() - * @see isPresent() - * @see fileTransferContacts() - * @see KABC::Addressee::uid() - */ - void sendFile(const TQString &uid, const KURL &sourceURL, - const TQString &altFileName = TQString::null, uint fileSize = 0); - - /** - * @brief Add a new contact given its protocol specific identifier - * - * @param contactId the protocol specific identifier for the contact - * e.g. UIN for ICQ, screenname for AIM, nick for IRC - * @param protocol the IM protocol/service to use. - * See KIMIface:::protocols() - * @return whether the add succeeded. @c false may signal already present, - * protocol not supported, or add operation not supported. - * - * @see locate() - * @see KIMIface::protocols() - */ - bool addContact( const TQString &contactId, const TQString &protocol ); - - /** - * @brief Checks if there are any compatible instant messaging - * applications available - * - * Available means that they are started and registered with DCOP - * and implementing the correct DCOP service. - * This information will be updated on the first call to initialize() - * and whenever an application registers or unregisters with DCOP, - * i.e. the information will be kept up to date. - * - * @return @c true if there are any apps available - */ - bool imAppsAvailable(); - - /** - * @brief Start the user's preferred IM application - * @return whether a preferred app was found. No guarantee that it - * started correctly - */ - bool startPreferredApp(); - - /** - * Just exists to let the IDL compiler make the DCOP signal for this - */ - void contactPresenceChanged( TQString uid, TQCString appId, int presence ); - - public slots: - /** - * @brief Updates the proxy's data after a new application registered - * with DCOP - * - * Checks if the application specified by the given DCOP application - * identifier implements the instant messenger service. - * - * @param appId the DCOP application ID of the newly registered - * application - * - * @see DCOPClient::applicationRegistered() - */ - void registeredToDCOP( const TQCString& appId ); - - /** - * @brief Updates the proxy's data after an application unregistered - * with DCOP - * - * If the application specified by the given DCOP application - * identifier is one of the instant messenger applications of the - * proxy, it will remove the presence information it gathered from it - * earlier on. - * - * Emits sigPresenceInfoExpired() to let the using applcation know - * its presence related information might need updating. - * - * @param appId the DCOP application ID of the now unregistered - * application - * - * @see DCOPClient::applicationRemoved() - */ - void unregisteredFromDCOP( const TQCString& appId ); - signals: - /** - * @brief Indicates that the specified IM-contact's presence changed - * - * @param uid the KABC UID whose presence changed - * - * @see isPresent() - * @see presenceNumeric() - * @see presenceIcon() - * @see KABC::Addressee::uid() - */ - void sigContactPresenceChanged( const TQString &uid ); - - /** - * @brief Indicates that presence information obtained earlier on might - * not be valid any longer - * - * After the sources of presence information have changed so any - * previously supplied presence info is invalid. - */ - void sigPresenceInfoExpired(); - protected: - /** - * Bootstrap our presence data for a newly registered app - */ - void pollApp( const TQCString & appId ); - /** - * Bootstrap our presence data by polling all known apps - */ - void pollAll( const TQString &uid ); - - /** - * Update our records with the given data - */ - bool updatePresence( const TQString &uid, const TQCString &appId, int presence ); - - /** - * Get the name of the user's IM application of choice - */ - TQString preferredApp(); - - /** - * Get the app stub best able to reach this uid - */ - KIMIface_stub * stubForUid( const TQString &uid ); - - /** - * Get the app stub for this protocol. - * Take the preferred app first, then any other. - */ - KIMIface_stub * stubForProtocol( const TQString &protocol ); - - private: - // client stubs used to get presence - // appId (from DCOP) -> KIMIface_stub - TQDict<KIMIface_stub> m_im_client_stubs; - // map containing numeric presence and the originating application ID for each KABC uid we know of - // KABC Uid -> (appId, numeric presence )(AppPresence) - PresenceMap m_presence_map; - // cache of the client strings in use by each application - // dictionary of KIMIface_stub -> map of numeric presence -> string presence - // FIXME: remove for KDE4 - UNUSED but maintained for binary compatibility in KDE 3.4 - TQPtrDict<int> m_client_presence_strings; - Private * d; - bool m_apps_available; - bool m_initialized; - /** - * Construct an instance of the proxy library. - */ - KIMProxy( DCOPClient * client); - static KIMProxy * s_instance; -}; - -#endif - |