account.h

Go to the documentation of this file.
00001 
00007 /* purple
00008  *
00009  * Purple is the legal property of its developers, whose names are too numerous
00010  * to list here.  Please refer to the COPYRIGHT file distributed with this
00011  * source distribution.
00012  *
00013  * This program is free software; you can redistribute it and/or modify
00014  * it under the terms of the GNU General Public License as published by
00015  * the Free Software Foundation; either version 2 of the License, or
00016  * (at your option) any later version.
00017  *
00018  * This program is distributed in the hope that it will be useful,
00019  * but WITHOUT ANY WARRANTY; without even the implied warranty of
00020  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
00021  * GNU General Public License for more details.
00022  *
00023  * You should have received a copy of the GNU General Public License
00024  * along with this program; if not, write to the Free Software
00025  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02111-1301  USA
00026  */
00027 #ifndef _PURPLE_ACCOUNT_H_
00028 #define _PURPLE_ACCOUNT_H_
00029 
00030 #include <glib.h>
00031 #include <glib-object.h>
00032 
00034 typedef struct _PurpleAccountUiOps PurpleAccountUiOps;
00036 typedef struct _PurpleAccount      PurpleAccount;
00037 
00038 typedef gboolean (*PurpleFilterAccountFunc)(PurpleAccount *account);
00039 typedef void (*PurpleAccountRequestAuthorizationCb)(void *);
00040 typedef void (*PurpleAccountRegistrationCb)(PurpleAccount *account, gboolean succeeded, void *user_data);
00041 typedef void (*PurpleAccountUnregistrationCb)(PurpleAccount *account, gboolean succeeded, void *user_data);
00042 typedef void (*PurpleSetPublicAliasSuccessCallback)(PurpleAccount *account, const char *new_alias);
00043 typedef void (*PurpleSetPublicAliasFailureCallback)(PurpleAccount *account, const char *error);
00044 typedef void (*PurpleGetPublicAliasSuccessCallback)(PurpleAccount *account, const char *alias);
00045 typedef void (*PurpleGetPublicAliasFailureCallback)(PurpleAccount *account, const char *error);
00046 
00047 #include "connection.h"
00048 #include "log.h"
00049 #include "privacy.h"
00050 #include "proxy.h"
00051 #include "prpl.h"
00052 #include "status.h"
00053 
00057 typedef enum
00058 {
00059     PURPLE_ACCOUNT_REQUEST_AUTHORIZATION = 0 /* Account authorization request */
00060 } PurpleAccountRequestType;
00061 
00065 typedef enum
00066 {
00067     PURPLE_ACCOUNT_RESPONSE_IGNORE = -2,
00068     PURPLE_ACCOUNT_RESPONSE_DENY = -1,
00069     PURPLE_ACCOUNT_RESPONSE_PASS = 0,
00070     PURPLE_ACCOUNT_RESPONSE_ACCEPT = 1
00071 } PurpleAccountRequestResponse;
00072 
00076 struct _PurpleAccountUiOps
00077 {
00081     void (*notify_added)(PurpleAccount *account,
00082                          const char *remote_user,
00083                          const char *id,
00084                          const char *alias,
00085                          const char *message);
00086 
00088     void (*status_changed)(PurpleAccount *account,
00089                            PurpleStatus *status);
00090 
00092     void (*request_add)(PurpleAccount *account,
00093                         const char *remote_user,
00094                         const char *id,
00095                         const char *alias,
00096                         const char *message);
00097 
00103     void *(*request_authorize)(PurpleAccount *account,
00104                                const char *remote_user,
00105                                const char *id,
00106                                const char *alias,
00107                                const char *message,
00108                                gboolean on_list,
00109                                PurpleAccountRequestAuthorizationCb authorize_cb,
00110                                PurpleAccountRequestAuthorizationCb deny_cb,
00111                                void *user_data);
00112 
00116     void (*close_account_request)(void *ui_handle);
00117 
00118     void (*_purple_reserved1)(void);
00119     void (*_purple_reserved2)(void);
00120     void (*_purple_reserved3)(void);
00121     void (*_purple_reserved4)(void);
00122 };
00123 
00126 struct _PurpleAccount
00127 {
00128     char *username;             
00129     char *alias;                
00130     char *password;             
00131     char *user_info;            
00133     char *buddy_icon_path;      
00135     gboolean remember_pass;     
00137     char *protocol_id;          
00139     PurpleConnection *gc;         
00140     gboolean disconnecting;     
00142     GHashTable *settings;       
00143     GHashTable *ui_settings;    
00145     PurpleProxyInfo *proxy_info;  
00146                                 /*   to NULL when the account inherits      */
00147                                 /*   proxy settings from global prefs.      */
00148 
00149     /*
00150      * TODO: Supplementing the next two linked lists with hash tables
00151      * should help performance a lot when these lists are long.  This
00152      * matters quite a bit for protocols like MSN, where all your
00153      * buddies are added to your permit list.  Currently we have to
00154      * iterate through the entire list if we want to check if someone
00155      * is permitted or denied.  We should do this for 3.0.0.
00156      * Or maybe use a GTree.
00157      */
00158     GSList *permit;             
00159     GSList *deny;               
00160     PurplePrivacyType perm_deny;  
00162     GList *status_types;        
00164     PurplePresence *presence;     
00165     PurpleLog *system_log;        
00167     void *ui_data;              
00168     PurpleAccountRegistrationCb registration_cb;
00169     void *registration_cb_user_data;
00170 
00171     gpointer priv;              
00172 };
00173 
00174 #ifdef __cplusplus
00175 extern "C" {
00176 #endif
00177 
00178 /**************************************************************************/
00180 /**************************************************************************/
00191 PurpleAccount *purple_account_new(const char *username, const char *protocol_id);
00192 
00198 void purple_account_destroy(PurpleAccount *account);
00199 
00205 void purple_account_connect(PurpleAccount *account);
00206 
00214 void purple_account_set_register_callback(PurpleAccount *account, PurpleAccountRegistrationCb cb, void *user_data);
00215 
00221 void purple_account_register(PurpleAccount *account);
00222 
00230 void purple_account_unregister(PurpleAccount *account, PurpleAccountUnregistrationCb cb, void *user_data);
00231 
00237 void purple_account_disconnect(PurpleAccount *account);
00238 
00252 void purple_account_notify_added(PurpleAccount *account, const char *remote_user,
00253                                const char *id, const char *alias,
00254                                const char *message);
00255 
00271 void purple_account_request_add(PurpleAccount *account, const char *remote_user,
00272                               const char *id, const char *alias,
00273                               const char *message);
00274 
00294 void *purple_account_request_authorization(PurpleAccount *account, const char *remote_user,
00295                     const char *id, const char *alias, const char *message, gboolean on_list,
00296                     PurpleAccountRequestAuthorizationCb auth_cb, PurpleAccountRequestAuthorizationCb deny_cb, void *user_data);
00297 
00303 void purple_account_request_close_with_account(PurpleAccount *account);
00304 
00310 void purple_account_request_close(void *ui_handle);
00311 
00321 void purple_account_request_password(PurpleAccount *account, GCallback ok_cb,
00322                      GCallback cancel_cb, void *user_data);
00323 
00329 void purple_account_request_change_password(PurpleAccount *account);
00330 
00337 void purple_account_request_change_user_info(PurpleAccount *account);
00338 
00345 void purple_account_set_username(PurpleAccount *account, const char *username);
00346 
00353 void purple_account_set_password(PurpleAccount *account, const char *password);
00354 
00361 void purple_account_set_alias(PurpleAccount *account, const char *alias);
00362 
00369 void purple_account_set_user_info(PurpleAccount *account, const char *user_info);
00370 
00377 void purple_account_set_buddy_icon_path(PurpleAccount *account, const char *path);
00378 
00385 void purple_account_set_protocol_id(PurpleAccount *account,
00386                                   const char *protocol_id);
00387 
00394 void purple_account_set_connection(PurpleAccount *account, PurpleConnection *gc);
00395 
00402 void purple_account_set_remember_password(PurpleAccount *account, gboolean value);
00403 
00410 void purple_account_set_check_mail(PurpleAccount *account, gboolean value);
00411 
00420 void purple_account_set_enabled(PurpleAccount *account, const char *ui,
00421                   gboolean value);
00422 
00429 void purple_account_set_proxy_info(PurpleAccount *account, PurpleProxyInfo *info);
00430 
00439 void purple_account_set_privacy_type(PurpleAccount *account, PurplePrivacyType privacy_type);
00440 
00447 void purple_account_set_status_types(PurpleAccount *account, GList *status_types);
00448 
00455 void purple_account_set_status(PurpleAccount *account, const char *status_id,
00456     gboolean active, ...) G_GNUC_NULL_TERMINATED;
00457 
00458 
00476 void purple_account_set_status_list(PurpleAccount *account,
00477     const char *status_id, gboolean active, GList *attrs);
00478 
00497 void purple_account_set_public_alias(PurpleAccount *account,
00498     const char *alias, PurpleSetPublicAliasSuccessCallback success_cb,
00499     PurpleSetPublicAliasFailureCallback failure_cb);
00500 
00511 void purple_account_get_public_alias(PurpleAccount *account,
00512     PurpleGetPublicAliasSuccessCallback success_cb,
00513     PurpleGetPublicAliasFailureCallback failure_cb);
00514 
00522 gboolean purple_account_get_silence_suppression(const PurpleAccount *account);
00523 
00530 void purple_account_set_silence_suppression(PurpleAccount *account,
00531                                             gboolean value);
00532 
00538 void purple_account_clear_settings(PurpleAccount *account);
00539 
00548 void purple_account_remove_setting(PurpleAccount *account, const char *setting);
00549 
00557 void purple_account_set_int(PurpleAccount *account, const char *name, int value);
00558 
00566 void purple_account_set_string(PurpleAccount *account, const char *name,
00567                              const char *value);
00568 
00576 void purple_account_set_bool(PurpleAccount *account, const char *name,
00577                            gboolean value);
00578 
00587 void purple_account_set_ui_int(PurpleAccount *account, const char *ui,
00588                              const char *name, int value);
00589 
00598 void purple_account_set_ui_string(PurpleAccount *account, const char *ui,
00599                                 const char *name, const char *value);
00600 
00609 void purple_account_set_ui_bool(PurpleAccount *account, const char *ui,
00610                               const char *name, gboolean value);
00611 
00619 gboolean purple_account_is_connected(const PurpleAccount *account);
00620 
00628 gboolean purple_account_is_connecting(const PurpleAccount *account);
00629 
00637 gboolean purple_account_is_disconnected(const PurpleAccount *account);
00638 
00646 const char *purple_account_get_username(const PurpleAccount *account);
00647 
00655 const char *purple_account_get_password(const PurpleAccount *account);
00656 
00664 const char *purple_account_get_alias(const PurpleAccount *account);
00665 
00673 const char *purple_account_get_user_info(const PurpleAccount *account);
00674 
00682 const char *purple_account_get_buddy_icon_path(const PurpleAccount *account);
00683 
00691 const char *purple_account_get_protocol_id(const PurpleAccount *account);
00692 
00700 const char *purple_account_get_protocol_name(const PurpleAccount *account);
00701 
00709 PurpleConnection *purple_account_get_connection(const PurpleAccount *account);
00710 
00723 const gchar *purple_account_get_name_for_display(const PurpleAccount *account);
00724 
00732 gboolean purple_account_get_remember_password(const PurpleAccount *account);
00733 
00741 gboolean purple_account_get_check_mail(const PurpleAccount *account);
00742 
00752 gboolean purple_account_get_enabled(const PurpleAccount *account,
00753                   const char *ui);
00754 
00762 PurpleProxyInfo *purple_account_get_proxy_info(const PurpleAccount *account);
00763 
00773 PurplePrivacyType purple_account_get_privacy_type(const PurpleAccount *account);
00774 
00785 PurpleStatus *purple_account_get_active_status(const PurpleAccount *account);
00786 
00798 PurpleStatus *purple_account_get_status(const PurpleAccount *account,
00799                                     const char *status_id);
00800 
00809 PurpleStatusType *purple_account_get_status_type(const PurpleAccount *account,
00810                                              const char *id);
00811 
00823 PurpleStatusType *purple_account_get_status_type_with_primitive(
00824                             const PurpleAccount *account,
00825                             PurpleStatusPrimitive primitive);
00826 
00834 PurplePresence *purple_account_get_presence(const PurpleAccount *account);
00835 
00844 gboolean purple_account_is_status_active(const PurpleAccount *account,
00845                                        const char *status_id);
00846 
00854 GList *purple_account_get_status_types(const PurpleAccount *account);
00855 
00865 int purple_account_get_int(const PurpleAccount *account, const char *name,
00866                          int default_value);
00867 
00877 const char *purple_account_get_string(const PurpleAccount *account,
00878                                     const char *name,
00879                                     const char *default_value);
00880 
00890 gboolean purple_account_get_bool(const PurpleAccount *account, const char *name,
00891                                gboolean default_value);
00892 
00903 int purple_account_get_ui_int(const PurpleAccount *account, const char *ui,
00904                             const char *name, int default_value);
00905 
00916 const char *purple_account_get_ui_string(const PurpleAccount *account,
00917                                        const char *ui, const char *name,
00918                                        const char *default_value);
00919 
00930 gboolean purple_account_get_ui_bool(const PurpleAccount *account, const char *ui,
00931                                   const char *name, gboolean default_value);
00932 
00933 
00947 PurpleLog *purple_account_get_log(PurpleAccount *account, gboolean create);
00948 
00954 void purple_account_destroy_log(PurpleAccount *account);
00955 
00964 void purple_account_add_buddy(PurpleAccount *account, PurpleBuddy *buddy);
00974 void purple_account_add_buddy_with_invite(PurpleAccount *account, PurpleBuddy *buddy, const char *message);
00975 
00984 void purple_account_add_buddies(PurpleAccount *account, GList *buddies);
00994 void purple_account_add_buddies_with_invite(PurpleAccount *account, GList *buddies, const char *message);
00995 
01003 void purple_account_remove_buddy(PurpleAccount *account, PurpleBuddy *buddy,
01004                                 PurpleGroup *group);
01005 
01017 void purple_account_remove_buddies(PurpleAccount *account, GList *buddies,
01018                                     GList *groups);
01019 
01026 void purple_account_remove_group(PurpleAccount *account, PurpleGroup *group);
01027 
01035 void purple_account_change_password(PurpleAccount *account, const char *orig_pw,
01036                                     const char *new_pw);
01037 
01044 gboolean purple_account_supports_offline_message(PurpleAccount *account, PurpleBuddy *buddy);
01045 
01056 const PurpleConnectionErrorInfo *purple_account_get_current_error(PurpleAccount *account);
01057 
01063 void purple_account_clear_current_error(PurpleAccount *account);
01064 
01067 /**************************************************************************/
01069 /**************************************************************************/
01077 void purple_accounts_add(PurpleAccount *account);
01078 
01084 void purple_accounts_remove(PurpleAccount *account);
01085 
01095 void purple_accounts_delete(PurpleAccount *account);
01096 
01103 void purple_accounts_reorder(PurpleAccount *account, gint new_index);
01104 
01110 GList *purple_accounts_get_all(void);
01111 
01119 GList *purple_accounts_get_all_active(void);
01120 
01129 PurpleAccount *purple_accounts_find(const char *name, const char *protocol);
01130 
01140 void purple_accounts_restore_current_statuses(void);
01141 
01145 /**************************************************************************/
01147 /**************************************************************************/
01154 void purple_accounts_set_ui_ops(PurpleAccountUiOps *ops);
01155 
01161 PurpleAccountUiOps *purple_accounts_get_ui_ops(void);
01162 
01166 /**************************************************************************/
01168 /**************************************************************************/
01176 void *purple_accounts_get_handle(void);
01177 
01181 void purple_accounts_init(void);
01182 
01186 void purple_accounts_uninit(void);
01187 
01190 #ifdef __cplusplus
01191 }
01192 #endif
01193 
01194 #endif /* _PURPLE_ACCOUNT_H_ */