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 
00043 #include "connection.h"
00044 #include "log.h"
00045 #include "proxy.h"
00046 #include "prpl.h"
00047 #include "status.h"
00048 
00052 typedef enum
00053 {
00054     PURPLE_ACCOUNT_REQUEST_AUTHORIZATION = 0 /* Account authorization request */
00055 } PurpleAccountRequestType;
00056 
00057 
00061 struct _PurpleAccountUiOps
00062 {
00066     void (*notify_added)(PurpleAccount *account,
00067                          const char *remote_user,
00068                          const char *id,
00069                          const char *alias,
00070                          const char *message);
00071 
00073     void (*status_changed)(PurpleAccount *account,
00074                            PurpleStatus *status);
00075 
00077     void (*request_add)(PurpleAccount *account,
00078                         const char *remote_user,
00079                         const char *id,
00080                         const char *alias,
00081                         const char *message);
00082 
00088     void *(*request_authorize)(PurpleAccount *account,
00089                                const char *remote_user,
00090                                const char *id,
00091                                const char *alias,
00092                                const char *message,
00093                                gboolean on_list,
00094                                PurpleAccountRequestAuthorizationCb authorize_cb,
00095                                PurpleAccountRequestAuthorizationCb deny_cb,
00096                                void *user_data);
00097 
00101     void (*close_account_request)(void *ui_handle);
00102 
00103     void (*_purple_reserved1)(void);
00104     void (*_purple_reserved2)(void);
00105     void (*_purple_reserved3)(void);
00106     void (*_purple_reserved4)(void);
00107 };
00108 
00111 struct _PurpleAccount
00112 {
00113     char *username;             
00114     char *alias;                
00115     char *password;             
00116     char *user_info;            
00118     char *buddy_icon_path;      
00120     gboolean remember_pass;     
00122     char *protocol_id;          
00124     PurpleConnection *gc;         
00125     gboolean disconnecting;     
00127     GHashTable *settings;       
00128     GHashTable *ui_settings;    
00130     PurpleProxyInfo *proxy_info;  
00131                                 /*   to NULL when the account inherits      */
00132                                 /*   proxy settings from global prefs.      */
00133 
00134     /*
00135      * TODO: Supplementing the next two linked lists with hash tables
00136      * should help performance a lot when these lists are long.  This
00137      * matters quite a bit for protocols like MSN, where all your
00138      * buddies are added to your permit list.  Currently we have to
00139      * iterate through the entire list if we want to check if someone
00140      * is permitted or denied.  We should do this for 3.0.0.
00141      */
00142     GSList *permit;             
00143     GSList *deny;               
00144     int perm_deny;              
00146     GList *status_types;        
00148     PurplePresence *presence;     
00149     PurpleLog *system_log;        
00151     void *ui_data;              
00152     PurpleAccountRegistrationCb registration_cb;
00153     void *registration_cb_user_data;
00154 
00155     gpointer priv;              
00156 };
00157 
00158 #ifdef __cplusplus
00159 extern "C" {
00160 #endif
00161 
00162 /**************************************************************************/
00164 /**************************************************************************/
00175 PurpleAccount *purple_account_new(const char *username, const char *protocol_id);
00176 
00182 void purple_account_destroy(PurpleAccount *account);
00183 
00189 void purple_account_connect(PurpleAccount *account);
00190 
00198 void purple_account_set_register_callback(PurpleAccount *account, PurpleAccountRegistrationCb cb, void *user_data);
00199 
00205 void purple_account_register(PurpleAccount *account);
00206 
00214 void purple_account_unregister(PurpleAccount *account, PurpleAccountUnregistrationCb cb, void *user_data);
00215 
00221 void purple_account_disconnect(PurpleAccount *account);
00222 
00236 void purple_account_notify_added(PurpleAccount *account, const char *remote_user,
00237                                const char *id, const char *alias,
00238                                const char *message);
00239 
00255 void purple_account_request_add(PurpleAccount *account, const char *remote_user,
00256                               const char *id, const char *alias,
00257                               const char *message);
00258 
00278 void *purple_account_request_authorization(PurpleAccount *account, const char *remote_user,
00279                     const char *id, const char *alias, const char *message, gboolean on_list,
00280                     PurpleAccountRequestAuthorizationCb auth_cb, PurpleAccountRequestAuthorizationCb deny_cb, void *user_data);
00281 
00287 void purple_account_request_close_with_account(PurpleAccount *account);
00288 
00294 void purple_account_request_close(void *ui_handle);
00295 
00305 void purple_account_request_password(PurpleAccount *account, GCallback ok_cb,
00306                      GCallback cancel_cb, void *user_data);
00307 
00313 void purple_account_request_change_password(PurpleAccount *account);
00314 
00321 void purple_account_request_change_user_info(PurpleAccount *account);
00322 
00329 void purple_account_set_username(PurpleAccount *account, const char *username);
00330 
00337 void purple_account_set_password(PurpleAccount *account, const char *password);
00338 
00345 void purple_account_set_alias(PurpleAccount *account, const char *alias);
00346 
00353 void purple_account_set_user_info(PurpleAccount *account, const char *user_info);
00354 
00361 void purple_account_set_buddy_icon_path(PurpleAccount *account, const char *path);
00362 
00369 void purple_account_set_protocol_id(PurpleAccount *account,
00370                                   const char *protocol_id);
00371 
00378 void purple_account_set_connection(PurpleAccount *account, PurpleConnection *gc);
00379 
00386 void purple_account_set_remember_password(PurpleAccount *account, gboolean value);
00387 
00394 void purple_account_set_check_mail(PurpleAccount *account, gboolean value);
00395 
00404 void purple_account_set_enabled(PurpleAccount *account, const char *ui,
00405                   gboolean value);
00406 
00413 void purple_account_set_proxy_info(PurpleAccount *account, PurpleProxyInfo *info);
00414 
00421 void purple_account_set_status_types(PurpleAccount *account, GList *status_types);
00422 
00429 void purple_account_set_status(PurpleAccount *account, const char *status_id,
00430     gboolean active, ...) G_GNUC_NULL_TERMINATED;
00431 
00432 
00450 void purple_account_set_status_list(PurpleAccount *account,
00451     const char *status_id, gboolean active, GList *attrs);
00452 
00458 void purple_account_clear_settings(PurpleAccount *account);
00459 
00467 void purple_account_set_int(PurpleAccount *account, const char *name, int value);
00468 
00476 void purple_account_set_string(PurpleAccount *account, const char *name,
00477                              const char *value);
00478 
00486 void purple_account_set_bool(PurpleAccount *account, const char *name,
00487                            gboolean value);
00488 
00497 void purple_account_set_ui_int(PurpleAccount *account, const char *ui,
00498                              const char *name, int value);
00499 
00508 void purple_account_set_ui_string(PurpleAccount *account, const char *ui,
00509                                 const char *name, const char *value);
00510 
00519 void purple_account_set_ui_bool(PurpleAccount *account, const char *ui,
00520                               const char *name, gboolean value);
00521 
00529 gboolean purple_account_is_connected(const PurpleAccount *account);
00530 
00538 gboolean purple_account_is_connecting(const PurpleAccount *account);
00539 
00547 gboolean purple_account_is_disconnected(const PurpleAccount *account);
00548 
00556 const char *purple_account_get_username(const PurpleAccount *account);
00557 
00565 const char *purple_account_get_password(const PurpleAccount *account);
00566 
00574 const char *purple_account_get_alias(const PurpleAccount *account);
00575 
00583 const char *purple_account_get_user_info(const PurpleAccount *account);
00584 
00592 const char *purple_account_get_buddy_icon_path(const PurpleAccount *account);
00593 
00601 const char *purple_account_get_protocol_id(const PurpleAccount *account);
00602 
00610 const char *purple_account_get_protocol_name(const PurpleAccount *account);
00611 
00619 PurpleConnection *purple_account_get_connection(const PurpleAccount *account);
00620 
00628 gboolean purple_account_get_remember_password(const PurpleAccount *account);
00629 
00637 gboolean purple_account_get_check_mail(const PurpleAccount *account);
00638 
00648 gboolean purple_account_get_enabled(const PurpleAccount *account,
00649                   const char *ui);
00650 
00658 PurpleProxyInfo *purple_account_get_proxy_info(const PurpleAccount *account);
00659 
00670 PurpleStatus *purple_account_get_active_status(const PurpleAccount *account);
00671 
00683 PurpleStatus *purple_account_get_status(const PurpleAccount *account,
00684                                     const char *status_id);
00685 
00694 PurpleStatusType *purple_account_get_status_type(const PurpleAccount *account,
00695                                              const char *id);
00696 
00708 PurpleStatusType *purple_account_get_status_type_with_primitive(
00709                             const PurpleAccount *account,
00710                             PurpleStatusPrimitive primitive);
00711 
00719 PurplePresence *purple_account_get_presence(const PurpleAccount *account);
00720 
00729 gboolean purple_account_is_status_active(const PurpleAccount *account,
00730                                        const char *status_id);
00731 
00739 GList *purple_account_get_status_types(const PurpleAccount *account);
00740 
00750 int purple_account_get_int(const PurpleAccount *account, const char *name,
00751                          int default_value);
00752 
00762 const char *purple_account_get_string(const PurpleAccount *account,
00763                                     const char *name,
00764                                     const char *default_value);
00765 
00775 gboolean purple_account_get_bool(const PurpleAccount *account, const char *name,
00776                                gboolean default_value);
00777 
00788 int purple_account_get_ui_int(const PurpleAccount *account, const char *ui,
00789                             const char *name, int default_value);
00790 
00801 const char *purple_account_get_ui_string(const PurpleAccount *account,
00802                                        const char *ui, const char *name,
00803                                        const char *default_value);
00804 
00815 gboolean purple_account_get_ui_bool(const PurpleAccount *account, const char *ui,
00816                                   const char *name, gboolean default_value);
00817 
00818 
00832 PurpleLog *purple_account_get_log(PurpleAccount *account, gboolean create);
00833 
00839 void purple_account_destroy_log(PurpleAccount *account);
00840 
00847 void purple_account_add_buddy(PurpleAccount *account, PurpleBuddy *buddy);
00854 void purple_account_add_buddies(PurpleAccount *account, GList *buddies);
00855 
00863 void purple_account_remove_buddy(PurpleAccount *account, PurpleBuddy *buddy,
00864                                 PurpleGroup *group);
00865 
00877 void purple_account_remove_buddies(PurpleAccount *account, GList *buddies,
00878                                     GList *groups);
00879 
00886 void purple_account_remove_group(PurpleAccount *account, PurpleGroup *group);
00887 
00895 void purple_account_change_password(PurpleAccount *account, const char *orig_pw,
00896                                     const char *new_pw);
00897 
00904 gboolean purple_account_supports_offline_message(PurpleAccount *account, PurpleBuddy *buddy);
00905 
00916 const PurpleConnectionErrorInfo *purple_account_get_current_error(PurpleAccount *account);
00917 
00923 void purple_account_clear_current_error(PurpleAccount *account);
00924 
00927 /**************************************************************************/
00929 /**************************************************************************/
00937 void purple_accounts_add(PurpleAccount *account);
00938 
00944 void purple_accounts_remove(PurpleAccount *account);
00945 
00955 void purple_accounts_delete(PurpleAccount *account);
00956 
00963 void purple_accounts_reorder(PurpleAccount *account, gint new_index);
00964 
00970 GList *purple_accounts_get_all(void);
00971 
00979 GList *purple_accounts_get_all_active(void);
00980 
00989 PurpleAccount *purple_accounts_find(const char *name, const char *protocol);
00990 
01000 void purple_accounts_restore_current_statuses(void);
01001 
01005 /**************************************************************************/
01007 /**************************************************************************/
01014 void purple_accounts_set_ui_ops(PurpleAccountUiOps *ops);
01015 
01021 PurpleAccountUiOps *purple_accounts_get_ui_ops(void);
01022 
01026 /**************************************************************************/
01028 /**************************************************************************/
01036 void *purple_accounts_get_handle(void);
01037 
01041 void purple_accounts_init(void);
01042 
01046 void purple_accounts_uninit(void);
01047 
01050 #ifdef __cplusplus
01051 }
01052 #endif
01053 
01054 #endif /* _PURPLE_ACCOUNT_H_ */