00001
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027 #ifndef _PURPLE_BLIST_H_
00028 #define _PURPLE_BLIST_H_
00029
00030
00031
00032 #include <glib.h>
00033
00035 typedef struct _PurpleBuddyList PurpleBuddyList;
00037 typedef struct _PurpleBlistUiOps PurpleBlistUiOps;
00039 typedef struct _PurpleBlistNode PurpleBlistNode;
00040
00042 typedef struct _PurpleChat PurpleChat;
00044 typedef struct _PurpleGroup PurpleGroup;
00046 typedef struct _PurpleContact PurpleContact;
00048 typedef struct _PurpleBuddy PurpleBuddy;
00049
00050
00051
00052
00053 typedef enum
00054 {
00055 PURPLE_BLIST_GROUP_NODE,
00056 PURPLE_BLIST_CONTACT_NODE,
00057 PURPLE_BLIST_BUDDY_NODE,
00058 PURPLE_BLIST_CHAT_NODE,
00059 PURPLE_BLIST_OTHER_NODE
00060
00061 } PurpleBlistNodeType;
00062
00063 #define PURPLE_BLIST_NODE_IS_CHAT(n) (purple_blist_node_get_type(n) == PURPLE_BLIST_CHAT_NODE)
00064 #define PURPLE_BLIST_NODE_IS_BUDDY(n) (purple_blist_node_get_type(n) == PURPLE_BLIST_BUDDY_NODE)
00065 #define PURPLE_BLIST_NODE_IS_CONTACT(n) (purple_blist_node_get_type(n) == PURPLE_BLIST_CONTACT_NODE)
00066 #define PURPLE_BLIST_NODE_IS_GROUP(n) (purple_blist_node_get_type(n) == PURPLE_BLIST_GROUP_NODE)
00067
00068 #define PURPLE_BUDDY_IS_ONLINE(b) \
00069 ((b) != NULL && purple_account_is_connected(purple_buddy_get_account(b)) && \
00070 purple_presence_is_online(purple_buddy_get_presence(b)))
00071
00072 typedef enum
00073 {
00074 PURPLE_BLIST_NODE_FLAG_NO_SAVE = 1 << 0,
00076 } PurpleBlistNodeFlags;
00077
00078 #define PURPLE_BLIST_NODE_HAS_FLAG(b, f) (((PurpleBlistNode*)(b))->flags & (f))
00079 #define PURPLE_BLIST_NODE_SHOULD_SAVE(b) (! PURPLE_BLIST_NODE_HAS_FLAG(b, PURPLE_BLIST_NODE_FLAG_NO_SAVE))
00080
00081 #define PURPLE_BLIST_NODE_NAME(n) ((n)->type == PURPLE_BLIST_CHAT_NODE ? purple_chat_get_name((PurpleChat*)n) : \
00082 (n)->type == PURPLE_BLIST_BUDDY_NODE ? purple_buddy_get_name((PurpleBuddy*)n) : NULL)
00083
00084 #include "account.h"
00085 #include "buddyicon.h"
00086 #include "status.h"
00087
00088
00089
00090
00091
00096 struct _PurpleBlistNode {
00097 PurpleBlistNodeType type;
00098 PurpleBlistNode *prev;
00099 PurpleBlistNode *next;
00100 PurpleBlistNode *parent;
00101 PurpleBlistNode *child;
00102 GHashTable *settings;
00103 void *ui_data;
00104 PurpleBlistNodeFlags flags;
00105 };
00106
00110 struct _PurpleBuddy {
00111 PurpleBlistNode node;
00112 char *name;
00113 char *alias;
00114 char *server_alias;
00115 void *proto_data;
00116 PurpleBuddyIcon *icon;
00117 PurpleAccount *account;
00118 PurplePresence *presence;
00119 };
00120
00124 struct _PurpleContact {
00125 PurpleBlistNode node;
00126 char *alias;
00127 int totalsize;
00128 int currentsize;
00129 int online;
00130 PurpleBuddy *priority;
00131 gboolean priority_valid;
00132 };
00133
00134
00138 struct _PurpleGroup {
00139 PurpleBlistNode node;
00140 char *name;
00141 int totalsize;
00142 int currentsize;
00143 int online;
00144 };
00145
00150 struct _PurpleChat {
00151 PurpleBlistNode node;
00152 char *alias;
00153 GHashTable *components;
00154 PurpleAccount *account;
00155 };
00156
00157
00161 struct _PurpleBuddyList {
00162 PurpleBlistNode *root;
00163 GHashTable *buddies;
00164 void *ui_data;
00165 };
00166
00173 struct _PurpleBlistUiOps
00174 {
00175 void (*new_list)(PurpleBuddyList *list);
00176 void (*new_node)(PurpleBlistNode *node);
00177 void (*show)(PurpleBuddyList *list);
00178 void (*update)(PurpleBuddyList *list,
00179 PurpleBlistNode *node);
00180 void (*remove)(PurpleBuddyList *list,
00181 PurpleBlistNode *node);
00182 void (*destroy)(PurpleBuddyList *list);
00183 void (*set_visible)(PurpleBuddyList *list,
00184 gboolean show);
00185 void (*request_add_buddy)(PurpleAccount *account, const char *username,
00186 const char *group, const char *alias);
00187 void (*request_add_chat)(PurpleAccount *account, PurpleGroup *group,
00188 const char *alias, const char *name);
00189 void (*request_add_group)(void);
00190
00191 void (*_purple_reserved1)(void);
00192 void (*_purple_reserved2)(void);
00193 void (*_purple_reserved3)(void);
00194 void (*_purple_reserved4)(void);
00195 };
00196
00197 #ifdef __cplusplus
00198 extern "C" {
00199 #endif
00200
00201
00203
00211 PurpleBuddyList *purple_blist_new(void);
00212
00218 void purple_set_blist(PurpleBuddyList *blist);
00219
00225 PurpleBuddyList *purple_get_blist(void);
00226
00232 PurpleBlistNode *purple_blist_get_root(void);
00233
00246 PurpleBlistNode *purple_blist_node_next(PurpleBlistNode *node, gboolean offline);
00247
00259 PurpleBlistNode *purple_blist_node_get_parent(PurpleBlistNode *node);
00260
00272 PurpleBlistNode *purple_blist_node_get_first_child(PurpleBlistNode *node);
00273
00285 PurpleBlistNode *purple_blist_node_get_sibling_next(PurpleBlistNode *node);
00286
00298 PurpleBlistNode *purple_blist_node_get_sibling_prev(PurpleBlistNode *node);
00299
00303 void purple_blist_show(void);
00304
00305
00309 void purple_blist_destroy(void);
00310
00316 void purple_blist_set_visible(gboolean show);
00317
00324 void purple_blist_update_buddy_status(PurpleBuddy *buddy, PurpleStatus *old_status);
00325
00332 void purple_blist_update_node_icon(PurpleBlistNode *node);
00333
00334 #ifndef PURPLE_DISABLE_DEPRECATED
00335
00341 void purple_blist_update_buddy_icon(PurpleBuddy *buddy);
00342 #endif
00343
00350 void purple_blist_rename_buddy(PurpleBuddy *buddy, const char *name);
00351
00358 void purple_blist_alias_contact(PurpleContact *contact, const char *alias);
00359
00366 void purple_blist_alias_buddy(PurpleBuddy *buddy, const char *alias);
00367
00375 void purple_blist_server_alias_buddy(PurpleBuddy *buddy, const char *alias);
00376
00383 void purple_blist_alias_chat(PurpleChat *chat, const char *alias);
00384
00391 void purple_blist_rename_group(PurpleGroup *group, const char *name);
00392
00403 PurpleChat *purple_chat_new(PurpleAccount *account, const char *alias, GHashTable *components);
00404
00416 void purple_blist_add_chat(PurpleChat *chat, PurpleGroup *group, PurpleBlistNode *node);
00417
00426 PurpleBuddy *purple_buddy_new(PurpleAccount *account, const char *screenname, const char *alias);
00427
00439 void purple_buddy_set_icon(PurpleBuddy *buddy, PurpleBuddyIcon *icon);
00440
00448 PurpleAccount *purple_buddy_get_account(const PurpleBuddy *buddy);
00449
00457 const char *purple_buddy_get_name(const PurpleBuddy *buddy);
00458
00466 PurpleBuddyIcon *purple_buddy_get_icon(const PurpleBuddy *buddy);
00467
00475 PurpleContact *purple_buddy_get_contact(PurpleBuddy *buddy);
00476
00484 PurplePresence *purple_buddy_get_presence(const PurpleBuddy *buddy);
00485
00499 void purple_blist_add_buddy(PurpleBuddy *buddy, PurpleContact *contact, PurpleGroup *group, PurpleBlistNode *node);
00500
00510 PurpleGroup *purple_group_new(const char *name);
00511
00521 void purple_blist_add_group(PurpleGroup *group, PurpleBlistNode *node);
00522
00528 PurpleContact *purple_contact_new(void);
00529
00540 void purple_blist_add_contact(PurpleContact *contact, PurpleGroup *group, PurpleBlistNode *node);
00541
00550 void purple_blist_merge_contact(PurpleContact *source, PurpleBlistNode *node);
00551
00558 PurpleBuddy *purple_contact_get_priority_buddy(PurpleContact *contact);
00559
00560 #ifndef PURPLE_DISABLE_DEPRECATED
00561
00569 void purple_contact_set_alias(PurpleContact *contact, const char *alias);
00570 #endif
00571
00578 const char *purple_contact_get_alias(PurpleContact *contact);
00579
00588 gboolean purple_contact_on_account(PurpleContact *contact, PurpleAccount *account);
00589
00596 void purple_contact_invalidate_priority_buddy(PurpleContact *contact);
00597
00605 void purple_blist_remove_buddy(PurpleBuddy *buddy);
00606
00613 void purple_blist_remove_contact(PurpleContact *contact);
00614
00620 void purple_blist_remove_chat(PurpleChat *chat);
00621
00628 void purple_blist_remove_group(PurpleGroup *group);
00629
00637 const char *purple_buddy_get_alias_only(PurpleBuddy *buddy);
00638
00645 const char *purple_buddy_get_server_alias(PurpleBuddy *buddy);
00646
00656 const char *purple_buddy_get_contact_alias(PurpleBuddy *buddy);
00657
00666 const char *purple_buddy_get_local_alias(PurpleBuddy *buddy);
00667
00676 const char *purple_buddy_get_alias(PurpleBuddy *buddy);
00677
00684 const char *purple_chat_get_name(PurpleChat *chat);
00685
00693 PurpleBuddy *purple_find_buddy(PurpleAccount *account, const char *name);
00694
00703 PurpleBuddy *purple_find_buddy_in_group(PurpleAccount *account, const char *name,
00704 PurpleGroup *group);
00705
00714 GSList *purple_find_buddies(PurpleAccount *account, const char *name);
00715
00716
00723 PurpleGroup *purple_find_group(const char *name);
00724
00733 PurpleChat *purple_blist_find_chat(PurpleAccount *account, const char *name);
00734
00742 PurpleGroup *purple_chat_get_group(PurpleChat *chat);
00743
00752 PurpleAccount *purple_chat_get_account(PurpleChat *chat);
00753
00762 GHashTable *purple_chat_get_components(PurpleChat *chat);
00763
00770 PurpleGroup *purple_buddy_get_group(PurpleBuddy *buddy);
00771
00772
00781 GSList *purple_group_get_accounts(PurpleGroup *g);
00782
00791 gboolean purple_group_on_account(PurpleGroup *g, PurpleAccount *account);
00792
00800 const char *purple_group_get_name(PurpleGroup *group);
00801
00808 void purple_blist_add_account(PurpleAccount *account);
00809
00810
00817 void purple_blist_remove_account(PurpleAccount *account);
00818
00819
00827 int purple_blist_get_group_size(PurpleGroup *group, gboolean offline);
00828
00835 int purple_blist_get_group_online_count(PurpleGroup *group);
00836
00839
00841
00842
00846 void purple_blist_load(void);
00847
00855 void purple_blist_schedule_save(void);
00856
00866 void purple_blist_request_add_buddy(PurpleAccount *account, const char *username,
00867 const char *group, const char *alias);
00868
00878 void purple_blist_request_add_chat(PurpleAccount *account, PurpleGroup *group,
00879 const char *alias, const char *name);
00880
00885 void purple_blist_request_add_group(void);
00886
00894 void purple_blist_node_set_bool(PurpleBlistNode *node, const char *key, gboolean value);
00895
00904 gboolean purple_blist_node_get_bool(PurpleBlistNode *node, const char *key);
00905
00913 void purple_blist_node_set_int(PurpleBlistNode *node, const char *key, int value);
00914
00923 int purple_blist_node_get_int(PurpleBlistNode *node, const char *key);
00924
00932 void purple_blist_node_set_string(PurpleBlistNode *node, const char *key,
00933 const char *value);
00934
00943 const char *purple_blist_node_get_string(PurpleBlistNode *node, const char *key);
00944
00951 void purple_blist_node_remove_setting(PurpleBlistNode *node, const char *key);
00952
00961 void purple_blist_node_set_flags(PurpleBlistNode *node, PurpleBlistNodeFlags flags);
00962
00970 PurpleBlistNodeFlags purple_blist_node_get_flags(PurpleBlistNode *node);
00971
00980 PurpleBlistNodeType purple_blist_node_get_type(PurpleBlistNode *node);
00981
00990 GList *purple_blist_node_get_extended_menu(PurpleBlistNode *n);
00991
00992
00994
01002 void purple_blist_set_ui_ops(PurpleBlistUiOps *ops);
01003
01009 PurpleBlistUiOps *purple_blist_get_ui_ops(void);
01010
01013
01015
01023 void *purple_blist_get_handle(void);
01024
01028 void purple_blist_init(void);
01029
01033 void purple_blist_uninit(void);
01034
01037 #ifdef __cplusplus
01038 }
01039 #endif
01040
01041 #endif