blist.h

Go to the documentation of this file.
00001 
00025 #ifndef _PURPLE_BLIST_H_
00026 #define _PURPLE_BLIST_H_
00027 
00028 /* I can't believe I let ChipX86 inspire me to write good code. -Sean */
00029 
00030 #include <glib.h>
00031 
00032 typedef struct _PurpleBuddyList PurpleBuddyList;
00033 typedef struct _PurpleBlistUiOps PurpleBlistUiOps;
00034 typedef struct _PurpleBlistNode PurpleBlistNode;
00035 
00036 typedef struct _PurpleChat PurpleChat;
00037 typedef struct _PurpleGroup PurpleGroup;
00038 typedef struct _PurpleContact PurpleContact;
00039 typedef struct _PurpleBuddy PurpleBuddy;
00040 
00041 /**************************************************************************/
00042 /* Enumerations                                                           */
00043 /**************************************************************************/
00044 typedef enum
00045 {
00046     PURPLE_BLIST_GROUP_NODE,
00047     PURPLE_BLIST_CONTACT_NODE,
00048     PURPLE_BLIST_BUDDY_NODE,
00049     PURPLE_BLIST_CHAT_NODE,
00050     PURPLE_BLIST_OTHER_NODE
00051 
00052 } PurpleBlistNodeType;
00053 
00054 #define PURPLE_BLIST_NODE_IS_CHAT(n)    ((n)->type == PURPLE_BLIST_CHAT_NODE)
00055 #define PURPLE_BLIST_NODE_IS_BUDDY(n)   ((n)->type == PURPLE_BLIST_BUDDY_NODE)
00056 #define PURPLE_BLIST_NODE_IS_CONTACT(n) ((n)->type == PURPLE_BLIST_CONTACT_NODE)
00057 #define PURPLE_BLIST_NODE_IS_GROUP(n)   ((n)->type == PURPLE_BLIST_GROUP_NODE)
00058 
00059 #define PURPLE_BUDDY_IS_ONLINE(b) \
00060     ((b) != NULL && purple_account_is_connected((b)->account) && \
00061      purple_presence_is_online(purple_buddy_get_presence(b)))
00062 
00063 typedef enum
00064 {
00065     PURPLE_BLIST_NODE_FLAG_NO_SAVE = 1 
00067 } PurpleBlistNodeFlags;
00068 
00069 #define PURPLE_BLIST_NODE_HAS_FLAG(b, f) ((b)->flags & (f))
00070 #define PURPLE_BLIST_NODE_SHOULD_SAVE(b) (! PURPLE_BLIST_NODE_HAS_FLAG(b, PURPLE_BLIST_NODE_FLAG_NO_SAVE))
00071 
00072 #define PURPLE_BLIST_NODE_NAME(n) ((n)->type == PURPLE_BLIST_CHAT_NODE  ? purple_chat_get_name((PurpleChat*)n) :        \
00073                      (n)->type == PURPLE_BLIST_BUDDY_NODE ? purple_buddy_get_name((PurpleBuddy*)n) : NULL)
00074 
00075 #include "account.h"
00076 #include "buddyicon.h"
00077 #include "status.h"
00078 
00079 /**************************************************************************/
00080 /* Data Structures                                                        */
00081 /**************************************************************************/
00082 
00087 struct _PurpleBlistNode {
00088     PurpleBlistNodeType type;             
00089     PurpleBlistNode *prev;                
00090     PurpleBlistNode *next;                
00091     PurpleBlistNode *parent;              
00092     PurpleBlistNode *child;               
00093     GHashTable *settings;               
00094     void          *ui_data;             
00095     PurpleBlistNodeFlags flags;           
00096 };
00097 
00101 struct _PurpleBuddy {
00102     PurpleBlistNode node;                     
00103     char *name;                             
00104     char *alias;                            
00105     char *server_alias;                     
00106     void *proto_data;                       
00107     PurpleBuddyIcon *icon;                    
00108     PurpleAccount *account;                 
00109     PurplePresence *presence;
00110 };
00111 
00115 struct _PurpleContact {
00116     PurpleBlistNode node;       
00117     char *alias;            
00118     int totalsize;          
00119     int currentsize;        
00120     int online;             
00121     PurpleBuddy *priority;    
00122     gboolean priority_valid; 
00123 };
00124 
00125 
00129 struct _PurpleGroup {
00130     PurpleBlistNode node;                    
00131     char *name;                            
00132     int totalsize;                 
00133     int currentsize;               
00134     int online;                
00135 };
00136 
00141 struct _PurpleChat {
00142     PurpleBlistNode node;      
00143     char *alias;             
00144     GHashTable *components;  
00145     PurpleAccount *account; 
00146 };
00147 
00148 
00152 struct _PurpleBuddyList {
00153     PurpleBlistNode *root;          
00154     GHashTable *buddies;          
00155     void *ui_data;                
00156 };
00157 
00164 struct _PurpleBlistUiOps
00165 {
00166     void (*new_list)(PurpleBuddyList *list); 
00167     void (*new_node)(PurpleBlistNode *node); 
00168     void (*show)(PurpleBuddyList *list);     
00169     void (*update)(PurpleBuddyList *list,
00170                PurpleBlistNode *node);       
00171     void (*remove)(PurpleBuddyList *list,
00172                PurpleBlistNode *node);       
00173     void (*destroy)(PurpleBuddyList *list);  
00174     void (*set_visible)(PurpleBuddyList *list,
00175                 gboolean show);            
00176     void (*request_add_buddy)(PurpleAccount *account, const char *username,
00177                               const char *group, const char *alias);
00178     void (*request_add_chat)(PurpleAccount *account, PurpleGroup *group,
00179                              const char *alias, const char *name);
00180     void (*request_add_group)(void);
00181 
00182     void (*_purple_reserved1)(void);
00183     void (*_purple_reserved2)(void);
00184     void (*_purple_reserved3)(void);
00185     void (*_purple_reserved4)(void);
00186 };
00187 
00188 #ifdef __cplusplus
00189 extern "C" {
00190 #endif
00191 
00192 /**************************************************************************/
00194 /**************************************************************************/
00202 PurpleBuddyList *purple_blist_new(void);
00203 
00209 void purple_set_blist(PurpleBuddyList *blist);
00210 
00216 PurpleBuddyList *purple_get_blist(void);
00217 
00223 PurpleBlistNode *purple_blist_get_root(void);
00224 
00233 PurpleBlistNode *purple_blist_node_next(PurpleBlistNode *node, gboolean offline);
00234 
00238 void purple_blist_show(void);
00239 
00240 
00244 void purple_blist_destroy(void);
00245 
00251 void purple_blist_set_visible(gboolean show);
00252 
00259 void purple_blist_update_buddy_status(PurpleBuddy *buddy, PurpleStatus *old_status);
00260 
00266 void purple_blist_update_buddy_icon(PurpleBuddy *buddy);
00267 
00274 void purple_blist_rename_buddy(PurpleBuddy *buddy, const char *name);
00275 
00282 void purple_blist_alias_contact(PurpleContact *contact, const char *alias);
00283 
00290 void purple_blist_alias_buddy(PurpleBuddy *buddy, const char *alias);
00291 
00299 void purple_blist_server_alias_buddy(PurpleBuddy *buddy, const char *alias);
00300 
00307 void purple_blist_alias_chat(PurpleChat *chat, const char *alias);
00308 
00315 void purple_blist_rename_group(PurpleGroup *group, const char *name);
00316 
00327 PurpleChat *purple_chat_new(PurpleAccount *account, const char *alias, GHashTable *components);
00328 
00340 void purple_blist_add_chat(PurpleChat *chat, PurpleGroup *group, PurpleBlistNode *node);
00341 
00350 PurpleBuddy *purple_buddy_new(PurpleAccount *account, const char *screenname, const char *alias);
00351 
00363 void purple_buddy_set_icon(PurpleBuddy *buddy, PurpleBuddyIcon *icon);
00364 
00372 PurpleAccount *purple_buddy_get_account(const PurpleBuddy *buddy);
00373 
00381 const char *purple_buddy_get_name(const PurpleBuddy *buddy);
00382 
00390 PurpleBuddyIcon *purple_buddy_get_icon(const PurpleBuddy *buddy);
00391 
00399 PurpleContact *purple_buddy_get_contact(PurpleBuddy *buddy);
00400 
00408 PurplePresence *purple_buddy_get_presence(const PurpleBuddy *buddy);
00409 
00422 void purple_blist_add_buddy(PurpleBuddy *buddy, PurpleContact *contact, PurpleGroup *group, PurpleBlistNode *node);
00423 
00433 PurpleGroup *purple_group_new(const char *name);
00434 
00444 void purple_blist_add_group(PurpleGroup *group, PurpleBlistNode *node);
00445 
00451 PurpleContact *purple_contact_new(void);
00452 
00463 void purple_blist_add_contact(PurpleContact *contact, PurpleGroup *group, PurpleBlistNode *node);
00464 
00473 void purple_blist_merge_contact(PurpleContact *source, PurpleBlistNode *node);
00474 
00481 PurpleBuddy *purple_contact_get_priority_buddy(PurpleContact *contact);
00482 
00489 void purple_contact_set_alias(PurpleContact *contact, const char *alias);
00490 
00497 const char *purple_contact_get_alias(PurpleContact *contact);
00498 
00507 gboolean purple_contact_on_account(PurpleContact *contact, PurpleAccount *account);
00508 
00515 void purple_contact_invalidate_priority_buddy(PurpleContact *contact);
00521 void purple_blist_remove_buddy(PurpleBuddy *buddy);
00522 
00529 void purple_blist_remove_contact(PurpleContact *contact);
00530 
00536 void purple_blist_remove_chat(PurpleChat *chat);
00537 
00544 void purple_blist_remove_group(PurpleGroup *group);
00545 
00553 const char *purple_buddy_get_alias_only(PurpleBuddy *buddy);
00554 
00561 const char *purple_buddy_get_server_alias(PurpleBuddy *buddy);
00562 
00572 const char *purple_buddy_get_contact_alias(PurpleBuddy *buddy);
00573 
00582 const char *purple_buddy_get_local_alias(PurpleBuddy *buddy);
00583 
00592 const char *purple_buddy_get_alias(PurpleBuddy *buddy);
00593 
00600 const char *purple_chat_get_name(PurpleChat *chat);
00601 
00609 PurpleBuddy *purple_find_buddy(PurpleAccount *account, const char *name);
00610 
00619 PurpleBuddy *purple_find_buddy_in_group(PurpleAccount *account, const char *name,
00620         PurpleGroup *group);
00621 
00630 GSList *purple_find_buddies(PurpleAccount *account, const char *name);
00631 
00632 
00639 PurpleGroup *purple_find_group(const char *name);
00640 
00649 PurpleChat *purple_blist_find_chat(PurpleAccount *account, const char *name);
00650 
00658 PurpleGroup *purple_chat_get_group(PurpleChat *chat);
00659 
00666 PurpleGroup *purple_buddy_get_group(PurpleBuddy *buddy);
00667 
00668 
00676 GSList *purple_group_get_accounts(PurpleGroup *g);
00677 
00686 gboolean purple_group_on_account(PurpleGroup *g, PurpleAccount *account);
00687 
00695 const char *purple_group_get_name(PurpleGroup *group);
00696 
00703 void purple_blist_add_account(PurpleAccount *account);
00704 
00705 
00712 void purple_blist_remove_account(PurpleAccount *account);
00713 
00714 
00722 int purple_blist_get_group_size(PurpleGroup *group, gboolean offline);
00723 
00730 int purple_blist_get_group_online_count(PurpleGroup *group);
00731 
00734 /****************************************************************************************/
00736 /****************************************************************************************/
00737 
00741 void purple_blist_load(void);
00742 
00750 void purple_blist_schedule_save(void);
00751 
00761 void purple_blist_request_add_buddy(PurpleAccount *account, const char *username,
00762                                   const char *group, const char *alias);
00763 
00773 void purple_blist_request_add_chat(PurpleAccount *account, PurpleGroup *group,
00774                                  const char *alias, const char *name);
00775 
00780 void purple_blist_request_add_group(void);
00781 
00789 void purple_blist_node_set_bool(PurpleBlistNode *node, const char *key, gboolean value);
00790 
00799 gboolean purple_blist_node_get_bool(PurpleBlistNode *node, const char *key);
00800 
00808 void purple_blist_node_set_int(PurpleBlistNode *node, const char *key, int value);
00809 
00818 int purple_blist_node_get_int(PurpleBlistNode *node, const char *key);
00819 
00827 void purple_blist_node_set_string(PurpleBlistNode *node, const char *key,
00828         const char *value);
00829 
00838 const char *purple_blist_node_get_string(PurpleBlistNode *node, const char *key);
00839 
00846 void purple_blist_node_remove_setting(PurpleBlistNode *node, const char *key);
00847 
00856 void purple_blist_node_set_flags(PurpleBlistNode *node, PurpleBlistNodeFlags flags);
00857 
00865 PurpleBlistNodeFlags purple_blist_node_get_flags(PurpleBlistNode *node);
00866 
00875 GList *purple_blist_node_get_extended_menu(PurpleBlistNode *n);
00876 
00877 /**************************************************************************/
00879 /**************************************************************************/
00887 void purple_blist_set_ui_ops(PurpleBlistUiOps *ops);
00888 
00894 PurpleBlistUiOps *purple_blist_get_ui_ops(void);
00895 
00898 /**************************************************************************/
00900 /**************************************************************************/
00908 void *purple_blist_get_handle(void);
00909 
00913 void purple_blist_init(void);
00914 
00918 void purple_blist_uninit(void);
00919 
00922 #ifdef __cplusplus
00923 }
00924 #endif
00925 
00926 #endif /* _PURPLE_BLIST_H_ */