diff options
Diffstat (limited to 'kopete/libkopete/kopeteaccountmanager.h')
-rw-r--r-- | kopete/libkopete/kopeteaccountmanager.h | 233 |
1 files changed, 233 insertions, 0 deletions
diff --git a/kopete/libkopete/kopeteaccountmanager.h b/kopete/libkopete/kopeteaccountmanager.h new file mode 100644 index 00000000..ed0c939a --- /dev/null +++ b/kopete/libkopete/kopeteaccountmanager.h @@ -0,0 +1,233 @@ +/* + kopeteaccountmanager.h - Kopete Account Manager + + Copyright (c) 2002-2003 by Martijn Klingens <klingens@kde.org> + Copyright (c) 2003-2004 by Olivier Goffart <ogoffart@ tiscalinet.be> + + Kopete (c) 2002-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. * + * * + ************************************************************************* +*/ + +#ifndef __kopeteaccountmanager_h__ +#define __kopeteaccountmanager_h__ + +#include <qobject.h> +#include <qptrlist.h> +#include <qdict.h> + +#include "kopete_export.h" + + +namespace Kopete { + +class Account; +class Plugin; +class Protocol; +class Contact; +class OnlineStatus; + +/** + * AccountManager manages all defined accounts in Kopete. You can + * query them and globally set them all online or offline from here. + * + * AccountManager is a singleton, you may uses it with @ref AccountManager::self() + * + * @author Martijn Klingens <klingens@kde.org> + * @author Olivier Goffart <ogoffart@ tiscalinet.be> + */ +class KOPETE_EXPORT AccountManager : public QObject +{ + Q_OBJECT + +public: + /** + * \brief Retrieve the instance of AccountManager. + * + * The account manager is a singleton class of which only a single + * instance will exist. If no manager exists yet this function will + * create one for you. + * + * \return the instance of the AccountManager + */ + static AccountManager* self(); + + ~AccountManager(); + + /** + * \brief Retrieve the list of accounts + * \return a list of all the accounts + */ + const QPtrList<Account> & accounts() const; + + /** + * \brief Retrieve a QDict of accounts for the given protocol + * + * The list is guaranteed to contain only accounts for the specified + * protocol + * \param p is the Protocol object you want accounts for + */ + QDict<Account> accounts( const Protocol *p ) const; + + /** + * \brief Return the account asked + * \param protocolId is the ID for the protocol + * \param accountId is the ID for the account you want + * \return the Account object found or NULL if no account was found + */ + Account* findAccount( const QString &protocolId, const QString &accountId ); + + /** + * \brief Delete the account and clean the config data + * + * This is praticaly called by the account config page when you remove the account. + */ + void removeAccount( Account *account ); + + /** + * \brief Guess the color for a new account + * + * Guesses a color for the next account of a given protocol based on the already registered colors + * \return the color guessed for the account + */ + QColor guessColor( Protocol *protocol ) const ; + + /** + * @brief Register the account. + * + * This adds the account in the manager's account list. + * It will check no accounts already exist with the same ID, if any, the account is deleted. and not added + * + * @return @p account, or 0L if the account was deleted because id collision + */ + Account *registerAccount( Account *account ); + + + /** + * Flag to be used in setOnlineStatus + * + * @c ConnectIfOffline : if set, this will connect offlines account with the status. + */ + enum SetOnlineStatusFlag { ConnectIfOffline=0x01 }; + + +public slots: + /** + * \brief Connect all accounts at once. + * + * Connect every account if the flag excludeConnect is false + * @see @ref Account::excludeConnect() + */ + void connectAll(); + + /** + * \brief Disconnect all accounts at once. + */ + void disconnectAll(); + + /** + * @brief Set all accounts a status in the specified category + * + * Account that are offline will not be connected, unless the ConnectIfOffline flag is set. + * + * @param category is one of the Kopete::OnlineStatusManager::Categories + * @param awayMessage is the new away message + * @param flags is a bitmask of SetOnlineStatusFlag + */ + void setOnlineStatus( /*Kopete::OnlineStatusManager::Categories*/ uint category, + const QString& awayMessage = QString::null, uint flags=0); + + /** + * \brief Set all accounts to away at once. + * + * All account that are connected, but not invisible will be set to away + * @see Account::setAway + * @param awayReason is the away message that will be set. + * @param away decides whether the message is away/non-away + */ + void setAwayAll( const QString &awayReason = QString::null, bool away=true ); + + /** + * \brief Connect or make available every account. + * Make all accounts Available, by setting status, and connecting if necessary. + * Accounts are connected based on their excludeConnect() setting. + * Accounts which are already connected are controlled regardless of their excludeConnect() setting. + * This is a slot, so you can connect directly to it from e.g. a KAction. + * @param awayReason is the away(status) message that will be set. + */ + void setAvailableAll( const QString &awayReason = QString::null ); + + /** + * \internal + * Save the account data to KConfig + */ + void save(); + + /** + * \internal + * Load the account data from KConfig + */ + void load(); + + + +signals: + /** + * \brief Signals when an account is ready for use + */ + void accountRegistered( Kopete::Account *account ); + + /** + * \brief Signals when an account has been unregistered + * + * At this state, we are already in the Account destructor. + */ + void accountUnregistered( const Kopete::Account *account ); + + /** + * \brief An account has changed its onlinestatus + * Technically this monitors Account::myself() onlinestatus changes + * \param account Account which changed its onlinestatus + * \param oldStatus The online status before the change + * \param newStatus The new online status + */ + void accountOnlineStatusChanged(Kopete::Account *account, + const Kopete::OnlineStatus &oldStatus, const Kopete::OnlineStatus &newStatus); + +private: + /** + * Private constructor, because we're a singleton + */ + AccountManager(); + +private slots: + void slotPluginLoaded( Kopete::Plugin *plugin ); + void slotAccountOnlineStatusChanged(Kopete::Contact *c, + const Kopete::OnlineStatus &oldStatus, const Kopete::OnlineStatus &newStatus); + + /** + * \internal + * Unregister the account. + */ + void unregisterAccount( const Kopete::Account *account ); + +private: + bool isAnyAccountConnected(); + static AccountManager *s_self; + class Private; + Private *d; +}; + +} //END namespace Kopete + + +#endif + + |