00001
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027 #ifndef _PURPLE_CONVERSATION_H_
00028 #define _PURPLE_CONVERSATION_H_
00029
00030
00032
00033
00034
00035 typedef struct _PurpleConversationUiOps PurpleConversationUiOps;
00036 typedef struct _PurpleConversation PurpleConversation;
00037 typedef struct _PurpleConvIm PurpleConvIm;
00038 typedef struct _PurpleConvChat PurpleConvChat;
00039 typedef struct _PurpleConvChatBuddy PurpleConvChatBuddy;
00040 typedef struct _PurpleConvMessage PurpleConvMessage;
00041
00045 typedef enum
00046 {
00047 PURPLE_CONV_TYPE_UNKNOWN = 0,
00048 PURPLE_CONV_TYPE_IM,
00049 PURPLE_CONV_TYPE_CHAT,
00050 PURPLE_CONV_TYPE_MISC,
00051 PURPLE_CONV_TYPE_ANY
00053 } PurpleConversationType;
00054
00058 typedef enum
00059 {
00060 PURPLE_CONV_UPDATE_ADD = 0,
00062 PURPLE_CONV_UPDATE_REMOVE,
00064 PURPLE_CONV_UPDATE_ACCOUNT,
00065 PURPLE_CONV_UPDATE_TYPING,
00066 PURPLE_CONV_UPDATE_UNSEEN,
00067 PURPLE_CONV_UPDATE_LOGGING,
00069 PURPLE_CONV_UPDATE_TOPIC,
00070
00071
00072
00073
00074 PURPLE_CONV_ACCOUNT_ONLINE,
00075 PURPLE_CONV_ACCOUNT_OFFLINE,
00076 PURPLE_CONV_UPDATE_AWAY,
00077 PURPLE_CONV_UPDATE_ICON,
00078 PURPLE_CONV_UPDATE_TITLE,
00079 PURPLE_CONV_UPDATE_CHATLEFT,
00080
00081 PURPLE_CONV_UPDATE_FEATURES,
00083 } PurpleConvUpdateType;
00084
00088 typedef enum
00089 {
00090 PURPLE_NOT_TYPING = 0,
00091 PURPLE_TYPING,
00092 PURPLE_TYPED
00094 } PurpleTypingState;
00095
00099 typedef enum
00100 {
00101 PURPLE_MESSAGE_SEND = 0x0001,
00102 PURPLE_MESSAGE_RECV = 0x0002,
00103 PURPLE_MESSAGE_SYSTEM = 0x0004,
00104 PURPLE_MESSAGE_AUTO_RESP = 0x0008,
00105 PURPLE_MESSAGE_ACTIVE_ONLY = 0x0010,
00112 PURPLE_MESSAGE_NICK = 0x0020,
00113 PURPLE_MESSAGE_NO_LOG = 0x0040,
00114 PURPLE_MESSAGE_WHISPER = 0x0080,
00115 PURPLE_MESSAGE_ERROR = 0x0200,
00116 PURPLE_MESSAGE_DELAYED = 0x0400,
00117 PURPLE_MESSAGE_RAW = 0x0800,
00119 PURPLE_MESSAGE_IMAGES = 0x1000,
00120 PURPLE_MESSAGE_NOTIFY = 0x2000,
00121 PURPLE_MESSAGE_NO_LINKIFY = 0x4000,
00123 PURPLE_MESSAGE_INVISIBLE = 0x8000,
00124 } PurpleMessageFlags;
00125
00129 typedef enum
00130 {
00131 PURPLE_CBFLAGS_NONE = 0x0000,
00132 PURPLE_CBFLAGS_VOICE = 0x0001,
00133 PURPLE_CBFLAGS_HALFOP = 0x0002,
00134 PURPLE_CBFLAGS_OP = 0x0004,
00135 PURPLE_CBFLAGS_FOUNDER = 0x0008,
00136 PURPLE_CBFLAGS_TYPING = 0x0010,
00138 } PurpleConvChatBuddyFlags;
00139
00140 #include "account.h"
00141 #include "buddyicon.h"
00142 #include "log.h"
00143 #include "server.h"
00144
00151 struct _PurpleConversationUiOps
00152 {
00156 void (*create_conversation)(PurpleConversation *conv);
00157
00159 void (*destroy_conversation)(PurpleConversation *conv);
00164 void (*write_chat)(PurpleConversation *conv, const char *who,
00165 const char *message, PurpleMessageFlags flags,
00166 time_t mtime);
00171 void (*write_im)(PurpleConversation *conv, const char *who,
00172 const char *message, PurpleMessageFlags flags,
00173 time_t mtime);
00182 void (*write_conv)(PurpleConversation *conv,
00183 const char *name,
00184 const char *alias,
00185 const char *message,
00186 PurpleMessageFlags flags,
00187 time_t mtime);
00188
00195 void (*chat_add_users)(PurpleConversation *conv,
00196 GList *cbuddies,
00197 gboolean new_arrivals);
00203 void (*chat_rename_user)(PurpleConversation *conv, const char *old_name,
00204 const char *new_name, const char *new_alias);
00209 void (*chat_remove_users)(PurpleConversation *conv, GList *users);
00213 void (*chat_update_user)(PurpleConversation *conv, const char *user);
00214
00218 void (*present)(PurpleConversation *conv);
00219
00224 gboolean (*has_focus)(PurpleConversation *conv);
00225
00226
00227 gboolean (*custom_smiley_add)(PurpleConversation *conv, const char *smile, gboolean remote);
00228 void (*custom_smiley_write)(PurpleConversation *conv, const char *smile,
00229 const guchar *data, gsize size);
00230 void (*custom_smiley_close)(PurpleConversation *conv, const char *smile);
00231
00237 void (*send_confirm)(PurpleConversation *conv, const char *message);
00238
00239 void (*_purple_reserved1)(void);
00240 void (*_purple_reserved2)(void);
00241 void (*_purple_reserved3)(void);
00242 void (*_purple_reserved4)(void);
00243 };
00244
00248 struct _PurpleConvIm
00249 {
00250 PurpleConversation *conv;
00252 PurpleTypingState typing_state;
00253 guint typing_timeout;
00254 time_t type_again;
00255 guint send_typed_timeout;
00257 PurpleBuddyIcon *icon;
00258 };
00259
00263 struct _PurpleConvChat
00264 {
00265 PurpleConversation *conv;
00267 GList *in_room;
00268 GList *ignored;
00269 char *who;
00270 char *topic;
00271 int id;
00272 char *nick;
00274 gboolean left;
00275 };
00276
00280 struct _PurpleConvChatBuddy
00281 {
00282 char *name;
00283 char *alias;
00284 char *alias_key;
00285 gboolean buddy;
00286 PurpleConvChatBuddyFlags flags;
00287 };
00288
00294 struct _PurpleConvMessage
00295 {
00296 char *who;
00297 char *what;
00298 PurpleMessageFlags flags;
00299 time_t when;
00300 PurpleConversation *conv;
00301 char *alias;
00302 };
00303
00309 struct _PurpleConversation
00310 {
00311 PurpleConversationType type;
00313 PurpleAccount *account;
00316 char *name;
00317 char *title;
00319 gboolean logging;
00321 GList *logs;
00323 union
00324 {
00325 PurpleConvIm *im;
00326 PurpleConvChat *chat;
00327 void *misc;
00329 } u;
00330
00331 PurpleConversationUiOps *ui_ops;
00332 void *ui_data;
00334 GHashTable *data;
00336 PurpleConnectionFlags features;
00337 GList *message_history;
00338 };
00339
00340 #ifdef __cplusplus
00341 extern "C" {
00342 #endif
00343
00344
00346
00359 PurpleConversation *purple_conversation_new(PurpleConversationType type,
00360 PurpleAccount *account,
00361 const char *name);
00362
00372 void purple_conversation_destroy(PurpleConversation *conv);
00373
00374
00380 void purple_conversation_present(PurpleConversation *conv);
00381
00382
00390 PurpleConversationType purple_conversation_get_type(const PurpleConversation *conv);
00391
00398 void purple_conversation_set_ui_ops(PurpleConversation *conv,
00399 PurpleConversationUiOps *ops);
00400
00406 void purple_conversations_set_ui_ops(PurpleConversationUiOps *ops);
00407
00415 PurpleConversationUiOps *purple_conversation_get_ui_ops(
00416 const PurpleConversation *conv);
00417
00427 void purple_conversation_set_account(PurpleConversation *conv,
00428 PurpleAccount *account);
00429
00440 PurpleAccount *purple_conversation_get_account(const PurpleConversation *conv);
00441
00451 PurpleConnection *purple_conversation_get_gc(const PurpleConversation *conv);
00452
00459 void purple_conversation_set_title(PurpleConversation *conv, const char *title);
00460
00468 const char *purple_conversation_get_title(const PurpleConversation *conv);
00469
00478 void purple_conversation_autoset_title(PurpleConversation *conv);
00479
00486 void purple_conversation_set_name(PurpleConversation *conv, const char *name);
00487
00496 const char *purple_conversation_get_name(const PurpleConversation *conv);
00497
00504 void purple_conversation_set_logging(PurpleConversation *conv, gboolean log);
00505
00513 gboolean purple_conversation_is_logging(const PurpleConversation *conv);
00514
00524 void purple_conversation_close_logs(PurpleConversation *conv);
00525
00535 PurpleConvIm *purple_conversation_get_im_data(const PurpleConversation *conv);
00536
00537 #define PURPLE_CONV_IM(c) (purple_conversation_get_im_data(c))
00538
00548 PurpleConvChat *purple_conversation_get_chat_data(const PurpleConversation *conv);
00549
00550 #define PURPLE_CONV_CHAT(c) (purple_conversation_get_chat_data(c))
00551
00559 void purple_conversation_set_data(PurpleConversation *conv, const char *key,
00560 gpointer data);
00561
00570 gpointer purple_conversation_get_data(PurpleConversation *conv, const char *key);
00571
00579 GList *purple_get_conversations(void);
00580
00586 GList *purple_get_ims(void);
00587
00593 GList *purple_get_chats(void);
00594
00604 PurpleConversation *purple_find_conversation_with_account(
00605 PurpleConversationType type, const char *name,
00606 const PurpleAccount *account);
00607
00628 void purple_conversation_write(PurpleConversation *conv, const char *who,
00629 const char *message, PurpleMessageFlags flags,
00630 time_t mtime);
00631
00632
00638 void purple_conversation_set_features(PurpleConversation *conv,
00639 PurpleConnectionFlags features);
00640
00641
00646 PurpleConnectionFlags purple_conversation_get_features(PurpleConversation *conv);
00647
00656 gboolean purple_conversation_has_focus(PurpleConversation *conv);
00657
00664 void purple_conversation_update(PurpleConversation *conv, PurpleConvUpdateType type);
00665
00671 void purple_conversation_foreach(void (*func)(PurpleConversation *conv));
00672
00684 GList *purple_conversation_get_message_history(PurpleConversation *conv);
00685
00693 void purple_conversation_clear_message_history(PurpleConversation *conv);
00694
00704 const char *purple_conversation_message_get_sender(PurpleConvMessage *msg);
00705
00715 const char *purple_conversation_message_get_message(PurpleConvMessage *msg);
00716
00726 PurpleMessageFlags purple_conversation_message_get_flags(PurpleConvMessage *msg);
00727
00737 time_t purple_conversation_message_get_timestamp(PurpleConvMessage *msg);
00738
00742
00744
00754 PurpleConversation *purple_conv_im_get_conversation(const PurpleConvIm *im);
00755
00767 void purple_conv_im_set_icon(PurpleConvIm *im, PurpleBuddyIcon *icon);
00768
00776 PurpleBuddyIcon *purple_conv_im_get_icon(const PurpleConvIm *im);
00777
00784 void purple_conv_im_set_typing_state(PurpleConvIm *im, PurpleTypingState state);
00785
00793 PurpleTypingState purple_conv_im_get_typing_state(const PurpleConvIm *im);
00794
00801 void purple_conv_im_start_typing_timeout(PurpleConvIm *im, int timeout);
00802
00808 void purple_conv_im_stop_typing_timeout(PurpleConvIm *im);
00809
00817 guint purple_conv_im_get_typing_timeout(const PurpleConvIm *im);
00818
00830 void purple_conv_im_set_type_again(PurpleConvIm *im, unsigned int val);
00831
00840 time_t purple_conv_im_get_type_again(const PurpleConvIm *im);
00841
00847 void purple_conv_im_start_send_typed_timeout(PurpleConvIm *im);
00848
00854 void purple_conv_im_stop_send_typed_timeout(PurpleConvIm *im);
00855
00863 guint purple_conv_im_get_send_typed_timeout(const PurpleConvIm *im);
00864
00870 void purple_conv_im_update_typing(PurpleConvIm *im);
00871
00881 void purple_conv_im_write(PurpleConvIm *im, const char *who,
00882 const char *message, PurpleMessageFlags flags,
00883 time_t mtime);
00884
00898 gboolean purple_conv_present_error(const char *who, PurpleAccount *account, const char *what);
00899
00906 void purple_conv_im_send(PurpleConvIm *im, const char *message);
00907
00920 void purple_conv_send_confirm(PurpleConversation *conv, const char *message);
00921
00929 void purple_conv_im_send_with_flags(PurpleConvIm *im, const char *message, PurpleMessageFlags flags);
00930
00950 gboolean purple_conv_custom_smiley_add(PurpleConversation *conv, const char *smile,
00951 const char *cksum_type, const char *chksum,
00952 gboolean remote);
00953
00954
00964 void purple_conv_custom_smiley_write(PurpleConversation *conv,
00965 const char *smile,
00966 const guchar *data,
00967 gsize size);
00968
00978 void purple_conv_custom_smiley_close(PurpleConversation *conv, const char *smile);
00979
00983
00985
00995 PurpleConversation *purple_conv_chat_get_conversation(const PurpleConvChat *chat);
00996
01009 GList *purple_conv_chat_set_users(PurpleConvChat *chat, GList *users);
01010
01018 GList *purple_conv_chat_get_users(const PurpleConvChat *chat);
01019
01026 void purple_conv_chat_ignore(PurpleConvChat *chat, const char *name);
01027
01034 void purple_conv_chat_unignore(PurpleConvChat *chat, const char *name);
01035
01044 GList *purple_conv_chat_set_ignored(PurpleConvChat *chat, GList *ignored);
01045
01053 GList *purple_conv_chat_get_ignored(const PurpleConvChat *chat);
01054
01069 const char *purple_conv_chat_get_ignored_user(const PurpleConvChat *chat,
01070 const char *user);
01071
01080 gboolean purple_conv_chat_is_user_ignored(const PurpleConvChat *chat,
01081 const char *user);
01082
01090 void purple_conv_chat_set_topic(PurpleConvChat *chat, const char *who,
01091 const char *topic);
01092
01100 const char *purple_conv_chat_get_topic(const PurpleConvChat *chat);
01101
01108 void purple_conv_chat_set_id(PurpleConvChat *chat, int id);
01109
01117 int purple_conv_chat_get_id(const PurpleConvChat *chat);
01118
01128 void purple_conv_chat_write(PurpleConvChat *chat, const char *who,
01129 const char *message, PurpleMessageFlags flags,
01130 time_t mtime);
01131
01138 void purple_conv_chat_send(PurpleConvChat *chat, const char *message);
01139
01147 void purple_conv_chat_send_with_flags(PurpleConvChat *chat, const char *message, PurpleMessageFlags flags);
01148
01158 void purple_conv_chat_add_user(PurpleConvChat *chat, const char *user,
01159 const char *extra_msg, PurpleConvChatBuddyFlags flags,
01160 gboolean new_arrival);
01161
01179 void purple_conv_chat_add_users(PurpleConvChat *chat, GList *users, GList *extra_msgs,
01180 GList *flags, gboolean new_arrivals);
01181
01189 void purple_conv_chat_rename_user(PurpleConvChat *chat, const char *old_user,
01190 const char *new_user);
01191
01201 void purple_conv_chat_remove_user(PurpleConvChat *chat, const char *user,
01202 const char *reason);
01203
01211 void purple_conv_chat_remove_users(PurpleConvChat *chat, GList *users,
01212 const char *reason);
01213
01222 gboolean purple_conv_chat_find_user(PurpleConvChat *chat, const char *user);
01223
01231 void purple_conv_chat_user_set_flags(PurpleConvChat *chat, const char *user,
01232 PurpleConvChatBuddyFlags flags);
01233
01242 PurpleConvChatBuddyFlags purple_conv_chat_user_get_flags(PurpleConvChat *chat,
01243 const char *user);
01244
01250 void purple_conv_chat_clear_users(PurpleConvChat *chat);
01251
01258 void purple_conv_chat_set_nick(PurpleConvChat *chat, const char *nick);
01259
01266 const char *purple_conv_chat_get_nick(PurpleConvChat *chat);
01267
01276 PurpleConversation *purple_find_chat(const PurpleConnection *gc, int id);
01277
01284 void purple_conv_chat_left(PurpleConvChat *chat);
01285
01295 gboolean purple_conv_chat_has_left(PurpleConvChat *chat);
01296
01306 PurpleConvChatBuddy *purple_conv_chat_cb_new(const char *name, const char *alias,
01307 PurpleConvChatBuddyFlags flags);
01308
01315 PurpleConvChatBuddy *purple_conv_chat_cb_find(PurpleConvChat *chat, const char *name);
01316
01324 const char *purple_conv_chat_cb_get_name(PurpleConvChatBuddy *cb);
01325
01331 void purple_conv_chat_cb_destroy(PurpleConvChatBuddy *cb);
01332
01344 GList * purple_conversation_get_extended_menu(PurpleConversation *conv);
01345
01359 gboolean purple_conversation_do_command(PurpleConversation *conv, const gchar *cmdline, const gchar *markup, gchar **error);
01360
01363
01365
01373 void *purple_conversations_get_handle(void);
01374
01378 void purple_conversations_init(void);
01379
01383 void purple_conversations_uninit(void);
01384
01387 #ifdef __cplusplus
01388 }
01389 #endif
01390
01391 #endif