00001
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028 #ifndef _PURPLE_CONVERSATION_H_
00029 #define _PURPLE_CONVERSATION_H_
00030
00031
00033
00034
00035
00036 typedef struct _PurpleConversationUiOps PurpleConversationUiOps;
00037 typedef struct _PurpleConversation PurpleConversation;
00038 typedef struct _PurpleConvIm PurpleConvIm;
00039 typedef struct _PurpleConvChat PurpleConvChat;
00040 typedef struct _PurpleConvChatBuddy PurpleConvChatBuddy;
00041 typedef struct _PurpleConvMessage PurpleConvMessage;
00042
00046 typedef enum
00047 {
00048 PURPLE_CONV_TYPE_UNKNOWN = 0,
00049 PURPLE_CONV_TYPE_IM,
00050 PURPLE_CONV_TYPE_CHAT,
00051 PURPLE_CONV_TYPE_MISC,
00052 PURPLE_CONV_TYPE_ANY
00054 } PurpleConversationType;
00055
00059 typedef enum
00060 {
00061 PURPLE_CONV_UPDATE_ADD = 0,
00063 PURPLE_CONV_UPDATE_REMOVE,
00065 PURPLE_CONV_UPDATE_ACCOUNT,
00066 PURPLE_CONV_UPDATE_TYPING,
00067 PURPLE_CONV_UPDATE_UNSEEN,
00068 PURPLE_CONV_UPDATE_LOGGING,
00070 PURPLE_CONV_UPDATE_TOPIC,
00071
00072
00073
00074
00075 PURPLE_CONV_ACCOUNT_ONLINE,
00076 PURPLE_CONV_ACCOUNT_OFFLINE,
00077 PURPLE_CONV_UPDATE_AWAY,
00078 PURPLE_CONV_UPDATE_ICON,
00079 PURPLE_CONV_UPDATE_TITLE,
00080 PURPLE_CONV_UPDATE_CHATLEFT,
00081
00082 PURPLE_CONV_UPDATE_FEATURES,
00084 } PurpleConvUpdateType;
00085
00089 typedef enum
00090 {
00091 PURPLE_NOT_TYPING = 0,
00092 PURPLE_TYPING,
00093 PURPLE_TYPED
00095 } PurpleTypingState;
00096
00100 typedef enum
00101 {
00102 PURPLE_MESSAGE_SEND = 0x0001,
00103 PURPLE_MESSAGE_RECV = 0x0002,
00104 PURPLE_MESSAGE_SYSTEM = 0x0004,
00105 PURPLE_MESSAGE_AUTO_RESP = 0x0008,
00106 PURPLE_MESSAGE_ACTIVE_ONLY = 0x0010,
00113 PURPLE_MESSAGE_NICK = 0x0020,
00114 PURPLE_MESSAGE_NO_LOG = 0x0040,
00115 PURPLE_MESSAGE_WHISPER = 0x0080,
00116 PURPLE_MESSAGE_ERROR = 0x0200,
00117 PURPLE_MESSAGE_DELAYED = 0x0400,
00118 PURPLE_MESSAGE_RAW = 0x0800,
00120 PURPLE_MESSAGE_IMAGES = 0x1000,
00121 PURPLE_MESSAGE_NOTIFY = 0x2000,
00122 PURPLE_MESSAGE_NO_LINKIFY = 0x4000,
00124 PURPLE_MESSAGE_INVISIBLE = 0x8000,
00125 } PurpleMessageFlags;
00126
00130 typedef enum
00131 {
00132 PURPLE_CBFLAGS_NONE = 0x0000,
00133 PURPLE_CBFLAGS_VOICE = 0x0001,
00134 PURPLE_CBFLAGS_HALFOP = 0x0002,
00135 PURPLE_CBFLAGS_OP = 0x0004,
00136 PURPLE_CBFLAGS_FOUNDER = 0x0008,
00137 PURPLE_CBFLAGS_TYPING = 0x0010,
00139 } PurpleConvChatBuddyFlags;
00140
00141 #include "account.h"
00142 #include "buddyicon.h"
00143 #include "log.h"
00144 #include "server.h"
00145
00152 struct _PurpleConversationUiOps
00153 {
00157 void (*create_conversation)(PurpleConversation *conv);
00158
00160 void (*destroy_conversation)(PurpleConversation *conv);
00165 void (*write_chat)(PurpleConversation *conv, const char *who,
00166 const char *message, PurpleMessageFlags flags,
00167 time_t mtime);
00172 void (*write_im)(PurpleConversation *conv, const char *who,
00173 const char *message, PurpleMessageFlags flags,
00174 time_t mtime);
00180 void (*write_conv)(PurpleConversation *conv,
00181 const char *name,
00182 const char *alias,
00183 const char *message,
00184 PurpleMessageFlags flags,
00185 time_t mtime);
00186
00193 void (*chat_add_users)(PurpleConversation *conv,
00194 GList *cbuddies,
00195 gboolean new_arrivals);
00201 void (*chat_rename_user)(PurpleConversation *conv, const char *old_name,
00202 const char *new_name, const char *new_alias);
00207 void (*chat_remove_users)(PurpleConversation *conv, GList *users);
00211 void (*chat_update_user)(PurpleConversation *conv, const char *user);
00212
00216 void (*present)(PurpleConversation *conv);
00217
00222 gboolean (*has_focus)(PurpleConversation *conv);
00223
00224
00225 gboolean (*custom_smiley_add)(PurpleConversation *conv, const char *smile, gboolean remote);
00226 void (*custom_smiley_write)(PurpleConversation *conv, const char *smile,
00227 const guchar *data, gsize size);
00228 void (*custom_smiley_close)(PurpleConversation *conv, const char *smile);
00229
00235 void (*send_confirm)(PurpleConversation *conv, const char *message);
00236
00237 void (*_purple_reserved1)(void);
00238 void (*_purple_reserved2)(void);
00239 void (*_purple_reserved3)(void);
00240 void (*_purple_reserved4)(void);
00241 };
00242
00246 struct _PurpleConvIm
00247 {
00248 PurpleConversation *conv;
00250 PurpleTypingState typing_state;
00251 guint typing_timeout;
00252 time_t type_again;
00253 guint send_typed_timeout;
00255 PurpleBuddyIcon *icon;
00256 };
00257
00261 struct _PurpleConvChat
00262 {
00263 PurpleConversation *conv;
00265 GList *in_room;
00266 GList *ignored;
00267 char *who;
00268 char *topic;
00269 int id;
00270 char *nick;
00272 gboolean left;
00273 };
00274
00278 struct _PurpleConvChatBuddy
00279 {
00280 char *name;
00281 char *alias;
00282 char *alias_key;
00283 gboolean buddy;
00284 PurpleConvChatBuddyFlags flags;
00285 };
00286
00290 struct _PurpleConvMessage
00291 {
00292 char *who;
00293 char *what;
00294 PurpleMessageFlags flags;
00295 time_t when;
00296 };
00297
00303 struct _PurpleConversation
00304 {
00305 PurpleConversationType type;
00307 PurpleAccount *account;
00310 char *name;
00311 char *title;
00313 gboolean logging;
00315 GList *logs;
00317 union
00318 {
00319 PurpleConvIm *im;
00320 PurpleConvChat *chat;
00321 void *misc;
00323 } u;
00324
00325 PurpleConversationUiOps *ui_ops;
00326 void *ui_data;
00328 GHashTable *data;
00330 PurpleConnectionFlags features;
00331 GList *message_history;
00332 };
00333
00334 #ifdef __cplusplus
00335 extern "C" {
00336 #endif
00337
00338
00340
00353 PurpleConversation *purple_conversation_new(PurpleConversationType type,
00354 PurpleAccount *account,
00355 const char *name);
00356
00366 void purple_conversation_destroy(PurpleConversation *conv);
00367
00368
00374 void purple_conversation_present(PurpleConversation *conv);
00375
00376
00384 PurpleConversationType purple_conversation_get_type(const PurpleConversation *conv);
00385
00392 void purple_conversation_set_ui_ops(PurpleConversation *conv,
00393 PurpleConversationUiOps *ops);
00394
00400 void purple_conversations_set_ui_ops(PurpleConversationUiOps *ops);
00401
00409 PurpleConversationUiOps *purple_conversation_get_ui_ops(
00410 const PurpleConversation *conv);
00411
00421 void purple_conversation_set_account(PurpleConversation *conv,
00422 PurpleAccount *account);
00423
00434 PurpleAccount *purple_conversation_get_account(const PurpleConversation *conv);
00435
00445 PurpleConnection *purple_conversation_get_gc(const PurpleConversation *conv);
00446
00453 void purple_conversation_set_title(PurpleConversation *conv, const char *title);
00454
00462 const char *purple_conversation_get_title(const PurpleConversation *conv);
00463
00472 void purple_conversation_autoset_title(PurpleConversation *conv);
00473
00480 void purple_conversation_set_name(PurpleConversation *conv, const char *name);
00481
00489 const char *purple_conversation_get_name(const PurpleConversation *conv);
00490
00497 void purple_conversation_set_logging(PurpleConversation *conv, gboolean log);
00498
00506 gboolean purple_conversation_is_logging(const PurpleConversation *conv);
00507
00517 void purple_conversation_close_logs(PurpleConversation *conv);
00518
00528 PurpleConvIm *purple_conversation_get_im_data(const PurpleConversation *conv);
00529
00530 #define PURPLE_CONV_IM(c) (purple_conversation_get_im_data(c))
00531
00541 PurpleConvChat *purple_conversation_get_chat_data(const PurpleConversation *conv);
00542
00543 #define PURPLE_CONV_CHAT(c) (purple_conversation_get_chat_data(c))
00544
00552 void purple_conversation_set_data(PurpleConversation *conv, const char *key,
00553 gpointer data);
00554
00563 gpointer purple_conversation_get_data(PurpleConversation *conv, const char *key);
00564
00572 GList *purple_get_conversations(void);
00573
00579 GList *purple_get_ims(void);
00580
00586 GList *purple_get_chats(void);
00587
00597 PurpleConversation *purple_find_conversation_with_account(
00598 PurpleConversationType type, const char *name,
00599 const PurpleAccount *account);
00600
00621 void purple_conversation_write(PurpleConversation *conv, const char *who,
00622 const char *message, PurpleMessageFlags flags,
00623 time_t mtime);
00624
00625
00631 void purple_conversation_set_features(PurpleConversation *conv,
00632 PurpleConnectionFlags features);
00633
00634
00639 PurpleConnectionFlags purple_conversation_get_features(PurpleConversation *conv);
00640
00649 gboolean purple_conversation_has_focus(PurpleConversation *conv);
00650
00657 void purple_conversation_update(PurpleConversation *conv, PurpleConvUpdateType type);
00658
00664 void purple_conversation_foreach(void (*func)(PurpleConversation *conv));
00665
00675 GList *purple_conversation_get_message_history(PurpleConversation *conv);
00676
00682 void purple_conversation_clear_message_history(PurpleConversation *conv);
00683
00691 const char *purple_conversation_message_get_sender(PurpleConvMessage *msg);
00692
00700 const char *purple_conversation_message_get_message(PurpleConvMessage *msg);
00701
00709 PurpleMessageFlags purple_conversation_message_get_flags(PurpleConvMessage *msg);
00710
00718 time_t purple_conversation_message_get_timestamp(PurpleConvMessage *msg);
00719
00723
00725
00735 PurpleConversation *purple_conv_im_get_conversation(const PurpleConvIm *im);
00736
00748 void purple_conv_im_set_icon(PurpleConvIm *im, PurpleBuddyIcon *icon);
00749
00757 PurpleBuddyIcon *purple_conv_im_get_icon(const PurpleConvIm *im);
00758
00765 void purple_conv_im_set_typing_state(PurpleConvIm *im, PurpleTypingState state);
00766
00774 PurpleTypingState purple_conv_im_get_typing_state(const PurpleConvIm *im);
00775
00782 void purple_conv_im_start_typing_timeout(PurpleConvIm *im, int timeout);
00783
00789 void purple_conv_im_stop_typing_timeout(PurpleConvIm *im);
00790
00798 guint purple_conv_im_get_typing_timeout(const PurpleConvIm *im);
00799
00811 void purple_conv_im_set_type_again(PurpleConvIm *im, unsigned int val);
00812
00821 time_t purple_conv_im_get_type_again(const PurpleConvIm *im);
00822
00828 void purple_conv_im_start_send_typed_timeout(PurpleConvIm *im);
00829
00835 void purple_conv_im_stop_send_typed_timeout(PurpleConvIm *im);
00836
00844 guint purple_conv_im_get_send_typed_timeout(const PurpleConvIm *im);
00845
00851 void purple_conv_im_update_typing(PurpleConvIm *im);
00852
00862 void purple_conv_im_write(PurpleConvIm *im, const char *who,
00863 const char *message, PurpleMessageFlags flags,
00864 time_t mtime);
00865
00879 gboolean purple_conv_present_error(const char *who, PurpleAccount *account, const char *what);
00880
00887 void purple_conv_im_send(PurpleConvIm *im, const char *message);
00888
00901 void purple_conv_send_confirm(PurpleConversation *conv, const char *message);
00902
00910 void purple_conv_im_send_with_flags(PurpleConvIm *im, const char *message, PurpleMessageFlags flags);
00911
00931 gboolean purple_conv_custom_smiley_add(PurpleConversation *conv, const char *smile,
00932 const char *cksum_type, const char *chksum,
00933 gboolean remote);
00934
00935
00945 void purple_conv_custom_smiley_write(PurpleConversation *conv,
00946 const char *smile,
00947 const guchar *data,
00948 gsize size);
00949
00959 void purple_conv_custom_smiley_close(PurpleConversation *conv, const char *smile);
00960
00964
00966
00976 PurpleConversation *purple_conv_chat_get_conversation(const PurpleConvChat *chat);
00977
00990 GList *purple_conv_chat_set_users(PurpleConvChat *chat, GList *users);
00991
00999 GList *purple_conv_chat_get_users(const PurpleConvChat *chat);
01000
01007 void purple_conv_chat_ignore(PurpleConvChat *chat, const char *name);
01008
01015 void purple_conv_chat_unignore(PurpleConvChat *chat, const char *name);
01016
01025 GList *purple_conv_chat_set_ignored(PurpleConvChat *chat, GList *ignored);
01026
01034 GList *purple_conv_chat_get_ignored(const PurpleConvChat *chat);
01035
01050 const char *purple_conv_chat_get_ignored_user(const PurpleConvChat *chat,
01051 const char *user);
01052
01061 gboolean purple_conv_chat_is_user_ignored(const PurpleConvChat *chat,
01062 const char *user);
01063
01071 void purple_conv_chat_set_topic(PurpleConvChat *chat, const char *who,
01072 const char *topic);
01073
01081 const char *purple_conv_chat_get_topic(const PurpleConvChat *chat);
01082
01089 void purple_conv_chat_set_id(PurpleConvChat *chat, int id);
01090
01098 int purple_conv_chat_get_id(const PurpleConvChat *chat);
01099
01109 void purple_conv_chat_write(PurpleConvChat *chat, const char *who,
01110 const char *message, PurpleMessageFlags flags,
01111 time_t mtime);
01112
01119 void purple_conv_chat_send(PurpleConvChat *chat, const char *message);
01120
01128 void purple_conv_chat_send_with_flags(PurpleConvChat *chat, const char *message, PurpleMessageFlags flags);
01129
01139 void purple_conv_chat_add_user(PurpleConvChat *chat, const char *user,
01140 const char *extra_msg, PurpleConvChatBuddyFlags flags,
01141 gboolean new_arrival);
01142
01160 void purple_conv_chat_add_users(PurpleConvChat *chat, GList *users, GList *extra_msgs,
01161 GList *flags, gboolean new_arrivals);
01162
01170 void purple_conv_chat_rename_user(PurpleConvChat *chat, const char *old_user,
01171 const char *new_user);
01172
01182 void purple_conv_chat_remove_user(PurpleConvChat *chat, const char *user,
01183 const char *reason);
01184
01192 void purple_conv_chat_remove_users(PurpleConvChat *chat, GList *users,
01193 const char *reason);
01194
01203 gboolean purple_conv_chat_find_user(PurpleConvChat *chat, const char *user);
01204
01212 void purple_conv_chat_user_set_flags(PurpleConvChat *chat, const char *user,
01213 PurpleConvChatBuddyFlags flags);
01214
01223 PurpleConvChatBuddyFlags purple_conv_chat_user_get_flags(PurpleConvChat *chat,
01224 const char *user);
01225
01231 void purple_conv_chat_clear_users(PurpleConvChat *chat);
01232
01239 void purple_conv_chat_set_nick(PurpleConvChat *chat, const char *nick);
01240
01247 const char *purple_conv_chat_get_nick(PurpleConvChat *chat);
01248
01257 PurpleConversation *purple_find_chat(const PurpleConnection *gc, int id);
01258
01265 void purple_conv_chat_left(PurpleConvChat *chat);
01266
01276 gboolean purple_conv_chat_has_left(PurpleConvChat *chat);
01277
01287 PurpleConvChatBuddy *purple_conv_chat_cb_new(const char *name, const char *alias,
01288 PurpleConvChatBuddyFlags flags);
01289
01296 PurpleConvChatBuddy *purple_conv_chat_cb_find(PurpleConvChat *chat, const char *name);
01297
01305 const char *purple_conv_chat_cb_get_name(PurpleConvChatBuddy *cb);
01306
01312 void purple_conv_chat_cb_destroy(PurpleConvChatBuddy *cb);
01313
01323 GList * purple_conversation_get_extended_menu(PurpleConversation *conv);
01324
01336 gboolean purple_conversation_do_command(PurpleConversation *conv, const gchar *cmdline, const gchar *markup, gchar **error);
01337
01340
01342
01350 void *purple_conversations_get_handle(void);
01351
01355 void purple_conversations_init(void);
01356
01360 void purple_conversations_uninit(void);
01361
01364 #ifdef __cplusplus
01365 }
01366 #endif
01367
01368 #endif