00001
00025 #ifndef _PURPLE_BLIST_H_
00026 #define _PURPLE_BLIST_H_
00027
00028
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
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
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