comparison libpurple/conversation.c @ 32819:2c6510167895 default tip

propagate from branch 'im.pidgin.pidgin.2.x.y' (head 3315c5dfbd0ad16511bdcf865e5b07c02d07df24) to branch 'im.pidgin.pidgin' (head cbd1eda6bcbf0565ae7766396bb8f6f419cb6a9a)
author Elliott Sales de Andrade <qulogic@pidgin.im>
date Sat, 02 Jun 2012 02:30:49 +0000
parents 3a4a35f6f873
children
comparison
equal deleted inserted replaced
32818:01ff09d4a463 32819:2c6510167895
33 #include "signals.h" 33 #include "signals.h"
34 #include "util.h" 34 #include "util.h"
35 35
36 #define SEND_TYPED_TIMEOUT_SECONDS 5 36 #define SEND_TYPED_TIMEOUT_SECONDS 5
37 37
38 /**
39 * Data specific to Chats.
40 */
41 struct _PurpleConvChat
42 {
43 PurpleConversation *conv; /**< The parent conversation. */
44
45 GList *in_room; /**< The users in the room.
46 * @deprecated Will be removed in 3.0.0
47 */
48 GList *ignored; /**< Ignored users. */
49 char *who; /**< The person who set the topic. */
50 char *topic; /**< The topic. */
51 int id; /**< The chat ID. */
52 char *nick; /**< Your nick in this chat. */
53
54 gboolean left; /**< We left the chat and kept the window open */
55 GHashTable *users; /**< Hash table of the users in the room. */
56 };
57
58 /**
59 * Data specific to Instant Messages.
60 */
61 struct _PurpleConvIm
62 {
63 PurpleConversation *conv; /**< The parent conversation. */
64
65 PurpleTypingState typing_state; /**< The current typing state. */
66 guint typing_timeout; /**< The typing timer handle. */
67 time_t type_again; /**< The type again time. */
68 guint send_typed_timeout; /**< The type again timer handle. */
69
70 PurpleBuddyIcon *icon; /**< The buddy icon. */
71 };
72
73 /**
74 * Data for "Chat Buddies"
75 */
76 struct _PurpleConvChatBuddy
77 {
78 /** The chat participant's name in the chat. */
79 char *name;
80
81 /** The chat participant's alias, if known; @a NULL otherwise. */
82 char *alias;
83
84 /**
85 * A string by which this buddy will be sorted, or @c NULL if the
86 * buddy should be sorted by its @c name. (This is currently always
87 * @c NULL.
88 */
89 char *alias_key;
90
91 /**
92 * @a TRUE if this chat participant is on the buddy list;
93 * @a FALSE otherwise.
94 */
95 gboolean buddy;
96
97 /**
98 * A bitwise OR of flags for this participant, such as whether they
99 * are a channel operator.
100 */
101 PurpleConvChatBuddyFlags flags;
102
103 /**
104 * A hash table of attributes about the user, such as real name,
105 * user\@host, etc.
106 */
107 GHashTable *attributes;
108
109 /** The UI can put whatever it wants here. */
110 gpointer ui_data;
111 };
112
113 /**
114 * A core representation of a conversation between two or more people.
115 *
116 * The conversation can be an IM or a chat.
117 */
118 struct _PurpleConversation
119 {
120 PurpleConversationType type; /**< The type of conversation. */
121
122 PurpleAccount *account; /**< The user using this conversation. */
123
124
125 char *name; /**< The name of the conversation. */
126 char *title; /**< The window title. */
127
128 gboolean logging; /**< The status of logging. */
129
130 GList *logs; /**< This conversation's logs */
131
132 union
133 {
134 PurpleConvIm *im; /**< IM-specific data. */
135 PurpleConvChat *chat; /**< Chat-specific data. */
136 void *misc; /**< Misc. data. */
137
138 } u;
139
140 PurpleConversationUiOps *ui_ops; /**< UI-specific operations. */
141 void *ui_data; /**< UI-specific data. */
142
143 GHashTable *data; /**< Plugin-specific data. */
144
145 PurpleConnectionFlags features; /**< The supported features */
146 GList *message_history; /**< Message history, as a GList of PurpleConvMessage's */
147 };
148
149 /**
150 * Description of a conversation message
151 */
152 struct _PurpleConvMessage
153 {
154 char *who;
155 char *what;
156 PurpleMessageFlags flags;
157 time_t when;
158 PurpleConversation *conv;
159 char *alias;
160 };
161
162
38 static GList *conversations = NULL; 163 static GList *conversations = NULL;
39 static GList *ims = NULL; 164 static GList *ims = NULL;
40 static GList *chats = NULL; 165 static GList *chats = NULL;
41 static PurpleConversationUiOps *default_ops = NULL; 166 static PurpleConversationUiOps *default_ops = NULL;
42 167
114 PurpleConnection *gc; 239 PurpleConnection *gc;
115 const char *name; 240 const char *name;
116 241
117 g_return_val_if_fail(conv != NULL, FALSE); 242 g_return_val_if_fail(conv != NULL, FALSE);
118 243
119 gc = purple_conversation_get_gc(conv); 244 gc = purple_conversation_get_connection(conv);
120 name = purple_conversation_get_name(conv); 245 name = purple_conversation_get_name(conv);
121 246
122 if (gc != NULL && name != NULL) { 247 if (gc != NULL && name != NULL) {
123 /* We set this to 1 so that PURPLE_TYPING will be sent 248 /* We set this to 1 so that PURPLE_TYPING will be sent
124 * if the Purple user types anything else. 249 * if the Purple user types anything else.
144 269
145 if (*message == '\0') 270 if (*message == '\0')
146 return; 271 return;
147 272
148 account = purple_conversation_get_account(conv); 273 account = purple_conversation_get_account(conv);
149 gc = purple_conversation_get_gc(conv); 274 gc = purple_conversation_get_connection(conv);
150 275
151 g_return_if_fail(account != NULL); 276 g_return_if_fail(account != NULL);
152 g_return_if_fail(gc != NULL); 277 g_return_if_fail(gc != NULL);
153 278
154 type = purple_conversation_get_type(conv); 279 type = purple_conversation_get_type(conv);
260 if (flags & PURPLE_MESSAGE_SEND) { 385 if (flags & PURPLE_MESSAGE_SEND) {
261 const char *me = NULL; 386 const char *me = NULL;
262 if (gc) 387 if (gc)
263 me = purple_connection_get_display_name(gc); 388 me = purple_connection_get_display_name(gc);
264 if (!me) 389 if (!me)
265 me = conv->account->username; 390 me = purple_account_get_username(conv->account);
266 who = me; 391 who = me;
267 } 392 }
268 393
269 msg = g_new0(PurpleConvMessage, 1); 394 msg = g_new0(PurpleConvMessage, 1);
270 PURPLE_DBUS_REGISTER_POINTER(msg, PurpleConvMessage); 395 PURPLE_DBUS_REGISTER_POINTER(msg, PurpleConvMessage);
379 conv->name = g_strdup(name); 504 conv->name = g_strdup(name);
380 conv->title = g_strdup(name); 505 conv->title = g_strdup(name);
381 conv->data = g_hash_table_new_full(g_str_hash, g_str_equal, 506 conv->data = g_hash_table_new_full(g_str_hash, g_str_equal,
382 g_free, NULL); 507 g_free, NULL);
383 /* copy features from the connection. */ 508 /* copy features from the connection. */
384 conv->features = gc->flags; 509 conv->features = purple_connection_get_flags(gc);
385 510
386 if (type == PURPLE_CONV_TYPE_IM) 511 if (type == PURPLE_CONV_TYPE_IM)
387 { 512 {
388 PurpleBuddyIcon *icon; 513 PurpleBuddyIcon *icon;
389 conv->u.im = g_new0(PurpleConvIm, 1); 514 conv->u.im = g_new0(PurpleConvIm, 1);
414 _purple_conversation_user_equal, g_free, NULL); 539 _purple_conversation_user_equal, g_free, NULL);
415 PURPLE_DBUS_REGISTER_POINTER(conv->u.chat, PurpleConvChat); 540 PURPLE_DBUS_REGISTER_POINTER(conv->u.chat, PurpleConvChat);
416 541
417 chats = g_list_prepend(chats, conv); 542 chats = g_list_prepend(chats, conv);
418 543
419 if ((disp = purple_connection_get_display_name(account->gc))) 544 if ((disp = purple_connection_get_display_name(purple_account_get_connection(account))))
420 purple_conv_chat_set_nick(conv->u.chat, disp); 545 purple_conv_chat_set_nick(conv->u.chat, disp);
421 else 546 else
422 purple_conv_chat_set_nick(conv->u.chat, 547 purple_conv_chat_set_nick(conv->u.chat,
423 purple_account_get_username(account)); 548 purple_account_get_username(account));
424 549
467 g_return_if_fail(conv != NULL); 592 g_return_if_fail(conv != NULL);
468 593
469 purple_request_close_with_handle(conv); 594 purple_request_close_with_handle(conv);
470 595
471 ops = purple_conversation_get_ui_ops(conv); 596 ops = purple_conversation_get_ui_ops(conv);
472 gc = purple_conversation_get_gc(conv); 597 gc = purple_conversation_get_connection(conv);
473 name = purple_conversation_get_name(conv); 598 name = purple_conversation_get_name(conv);
474 599
475 if (gc != NULL) 600 if (gc != NULL)
476 { 601 {
477 /* Still connected */ 602 /* Still connected */
692 817
693 return conv->account; 818 return conv->account;
694 } 819 }
695 820
696 PurpleConnection * 821 PurpleConnection *
697 purple_conversation_get_gc(const PurpleConversation *conv) 822 purple_conversation_get_connection(const PurpleConversation *conv)
698 { 823 {
699 PurpleAccount *account; 824 PurpleAccount *account;
700 825
701 g_return_val_if_fail(conv != NULL, NULL); 826 g_return_val_if_fail(conv != NULL, NULL);
702 827
703 account = purple_conversation_get_account(conv); 828 account = purple_conversation_get_account(conv);
704 829
705 if (account == NULL) 830 if (account == NULL)
706 return NULL; 831 return NULL;
707 832
708 return account->gc; 833 return purple_account_get_connection(account);
709 } 834 }
710 835
711 void 836 void
712 purple_conversation_set_title(PurpleConversation *conv, const char *title) 837 purple_conversation_set_title(PurpleConversation *conv, const char *title)
713 { 838 {
988 if (flags & PURPLE_MESSAGE_SEND) { 1113 if (flags & PURPLE_MESSAGE_SEND) {
989 b = purple_find_buddy(account, 1114 b = purple_find_buddy(account,
990 purple_account_get_username(account)); 1115 purple_account_get_username(account));
991 1116
992 if (purple_account_get_alias(account) != NULL) 1117 if (purple_account_get_alias(account) != NULL)
993 alias = account->alias; 1118 alias = purple_account_get_alias(account);
994 else if (b != NULL && !purple_strequal(purple_buddy_get_name(b), purple_buddy_get_contact_alias(b))) 1119 else if (b != NULL && !purple_strequal(purple_buddy_get_name(b), purple_buddy_get_contact_alias(b)))
995 alias = purple_buddy_get_contact_alias(b); 1120 alias = purple_buddy_get_contact_alias(b);
996 else if (purple_connection_get_display_name(gc) != NULL) 1121 else if (purple_connection_get_display_name(gc) != NULL)
997 alias = purple_connection_get_display_name(gc); 1122 alias = purple_connection_get_display_name(gc);
998 else 1123 else
1377 1502
1378 return chat->conv; 1503 return chat->conv;
1379 } 1504 }
1380 1505
1381 GList * 1506 GList *
1382 purple_conv_chat_set_users(PurpleConvChat *chat, GList *users)
1383 {
1384 g_return_val_if_fail(chat != NULL, NULL);
1385
1386 chat->in_room = users;
1387
1388 return users;
1389 }
1390
1391 GList *
1392 purple_conv_chat_get_users(const PurpleConvChat *chat) 1507 purple_conv_chat_get_users(const PurpleConvChat *chat)
1393 { 1508 {
1394 g_return_val_if_fail(chat != NULL, NULL); 1509 g_return_val_if_fail(chat != NULL, NULL);
1395 1510
1396 return chat->in_room; 1511 return chat->in_room;
1542 g_return_if_fail(chat != NULL); 1657 g_return_if_fail(chat != NULL);
1543 g_return_if_fail(who != NULL); 1658 g_return_if_fail(who != NULL);
1544 g_return_if_fail(message != NULL); 1659 g_return_if_fail(message != NULL);
1545 1660
1546 conv = purple_conv_chat_get_conversation(chat); 1661 conv = purple_conv_chat_get_conversation(chat);
1547 gc = purple_conversation_get_gc(conv); 1662 gc = purple_conversation_get_connection(conv);
1548 account = purple_connection_get_account(gc); 1663 account = purple_connection_get_account(gc);
1549 1664
1550 /* Don't display this if the person who wrote it is ignored. */ 1665 /* Don't display this if the person who wrote it is ignored. */
1551 if (purple_conv_chat_is_user_ignored(chat, who)) 1666 if (purple_conv_chat_is_user_ignored(chat, who))
1552 return; 1667 return;
1658 g_return_if_fail(users != NULL); 1773 g_return_if_fail(users != NULL);
1659 1774
1660 conv = purple_conv_chat_get_conversation(chat); 1775 conv = purple_conv_chat_get_conversation(chat);
1661 ops = purple_conversation_get_ui_ops(conv); 1776 ops = purple_conversation_get_ui_ops(conv);
1662 1777
1663 gc = purple_conversation_get_gc(conv); 1778 gc = purple_conversation_get_connection(conv);
1664 g_return_if_fail(gc != NULL); 1779 g_return_if_fail(gc != NULL);
1665 prpl_info = PURPLE_PLUGIN_PROTOCOL_INFO(purple_connection_get_prpl(gc)); 1780 prpl_info = PURPLE_PLUGIN_PROTOCOL_INFO(purple_connection_get_prpl(gc));
1666 g_return_if_fail(prpl_info != NULL); 1781 g_return_if_fail(prpl_info != NULL);
1667 1782
1668 ul = users; 1783 ul = users;
1685 if (display_name != NULL) 1800 if (display_name != NULL)
1686 alias = display_name; 1801 alias = display_name;
1687 } 1802 }
1688 } else { 1803 } else {
1689 PurpleBuddy *buddy; 1804 PurpleBuddy *buddy;
1690 if ((buddy = purple_find_buddy(gc->account, user)) != NULL) 1805 if ((buddy = purple_find_buddy(purple_connection_get_account(gc), user)) != NULL)
1691 alias = purple_buddy_get_contact_alias(buddy); 1806 alias = purple_buddy_get_contact_alias(buddy);
1692 } 1807 }
1693 } 1808 }
1694 1809
1695 quiet = GPOINTER_TO_INT(purple_signal_emit_return_1(purple_conversations_get_handle(), 1810 quiet = GPOINTER_TO_INT(purple_signal_emit_return_1(purple_conversations_get_handle(),
1759 g_return_if_fail(new_user != NULL); 1874 g_return_if_fail(new_user != NULL);
1760 1875
1761 conv = purple_conv_chat_get_conversation(chat); 1876 conv = purple_conv_chat_get_conversation(chat);
1762 ops = purple_conversation_get_ui_ops(conv); 1877 ops = purple_conversation_get_ui_ops(conv);
1763 1878
1764 gc = purple_conversation_get_gc(conv); 1879 gc = purple_conversation_get_connection(conv);
1765 g_return_if_fail(gc != NULL); 1880 g_return_if_fail(gc != NULL);
1766 prpl_info = PURPLE_PLUGIN_PROTOCOL_INFO(purple_connection_get_prpl(gc)); 1881 prpl_info = PURPLE_PLUGIN_PROTOCOL_INFO(purple_connection_get_prpl(gc));
1767 g_return_if_fail(prpl_info != NULL); 1882 g_return_if_fail(prpl_info != NULL);
1768 1883
1769 if (purple_strequal(chat->nick, purple_normalize(conv->account, old_user))) { 1884 if (purple_strequal(chat->nick, purple_normalize(conv->account, old_user))) {
1778 new_alias = alias; 1893 new_alias = alias;
1779 else 1894 else
1780 { 1895 {
1781 const char *display_name = purple_connection_get_display_name(gc); 1896 const char *display_name = purple_connection_get_display_name(gc);
1782 if (display_name != NULL) 1897 if (display_name != NULL)
1783 alias = display_name; 1898 new_alias = display_name;
1784 } 1899 }
1785 } 1900 }
1786 } else if (!(prpl_info->options & OPT_PROTO_UNIQUE_CHATNAME)) { 1901 } else if (!(prpl_info->options & OPT_PROTO_UNIQUE_CHATNAME)) {
1787 PurpleBuddy *buddy; 1902 PurpleBuddy *buddy;
1788 if ((buddy = purple_find_buddy(gc->account, new_user)) != NULL) 1903 if ((buddy = purple_find_buddy(purple_connection_get_account(gc), new_user)) != NULL)
1789 new_alias = purple_buddy_get_contact_alias(buddy); 1904 new_alias = purple_buddy_get_contact_alias(buddy);
1790 } 1905 }
1791 1906
1792 flags = purple_conv_chat_user_get_flags(chat, old_user); 1907 flags = purple_conv_chat_user_get_flags(chat, old_user);
1793 cb = purple_conv_chat_cb_new(new_user, new_alias, flags); 1908 cb = purple_conv_chat_cb_new(new_user, new_alias, flags);
1832 char *escaped2; 1947 char *escaped2;
1833 1948
1834 if (!(prpl_info->options & OPT_PROTO_UNIQUE_CHATNAME)) { 1949 if (!(prpl_info->options & OPT_PROTO_UNIQUE_CHATNAME)) {
1835 PurpleBuddy *buddy; 1950 PurpleBuddy *buddy;
1836 1951
1837 if ((buddy = purple_find_buddy(gc->account, old_user)) != NULL) 1952 if ((buddy = purple_find_buddy(purple_connection_get_account(gc), old_user)) != NULL)
1838 old_alias = purple_buddy_get_contact_alias(buddy); 1953 old_alias = purple_buddy_get_contact_alias(buddy);
1839 if ((buddy = purple_find_buddy(gc->account, new_user)) != NULL) 1954 if ((buddy = purple_find_buddy(purple_connection_get_account(gc), new_user)) != NULL)
1840 new_alias = purple_buddy_get_contact_alias(buddy); 1955 new_alias = purple_buddy_get_contact_alias(buddy);
1841 } 1956 }
1842 1957
1843 escaped = g_markup_escape_text(old_alias, -1); 1958 escaped = g_markup_escape_text(old_alias, -1);
1844 escaped2 = g_markup_escape_text(new_alias, -1); 1959 escaped2 = g_markup_escape_text(new_alias, -1);
1878 g_return_if_fail(chat != NULL); 1993 g_return_if_fail(chat != NULL);
1879 g_return_if_fail(users != NULL); 1994 g_return_if_fail(users != NULL);
1880 1995
1881 conv = purple_conv_chat_get_conversation(chat); 1996 conv = purple_conv_chat_get_conversation(chat);
1882 1997
1883 gc = purple_conversation_get_gc(conv); 1998 gc = purple_conversation_get_connection(conv);
1884 g_return_if_fail(gc != NULL); 1999 g_return_if_fail(gc != NULL);
1885 prpl_info = PURPLE_PLUGIN_PROTOCOL_INFO(purple_connection_get_prpl(gc)); 2000 prpl_info = PURPLE_PLUGIN_PROTOCOL_INFO(purple_connection_get_prpl(gc));
1886 g_return_if_fail(prpl_info != NULL); 2001 g_return_if_fail(prpl_info != NULL);
1887 2002
1888 ops = purple_conversation_get_ui_ops(conv); 2003 ops = purple_conversation_get_ui_ops(conv);
1909 char *tmp; 2024 char *tmp;
1910 2025
1911 if (!(prpl_info->options & OPT_PROTO_UNIQUE_CHATNAME)) { 2026 if (!(prpl_info->options & OPT_PROTO_UNIQUE_CHATNAME)) {
1912 PurpleBuddy *buddy; 2027 PurpleBuddy *buddy;
1913 2028
1914 if ((buddy = purple_find_buddy(gc->account, user)) != NULL) 2029 if ((buddy = purple_find_buddy(purple_connection_get_account(gc), user)) != NULL)
1915 alias = purple_buddy_get_contact_alias(buddy); 2030 alias = purple_buddy_get_contact_alias(buddy);
1916 } 2031 }
1917 2032
1918 alias_esc = g_markup_escape_text(alias, -1); 2033 alias_esc = g_markup_escape_text(alias, -1);
1919 2034
2063 2178
2064 for (l = purple_get_chats(); l != NULL; l = l->next) { 2179 for (l = purple_get_chats(); l != NULL; l = l->next) {
2065 conv = (PurpleConversation *)l->data; 2180 conv = (PurpleConversation *)l->data;
2066 2181
2067 if (purple_conv_chat_get_id(PURPLE_CONV_CHAT(conv)) == id && 2182 if (purple_conv_chat_get_id(PURPLE_CONV_CHAT(conv)) == id &&
2068 purple_conversation_get_gc(conv) == gc) 2183 purple_conversation_get_connection(conv) == gc)
2069 return conv; 2184 return conv;
2070 } 2185 }
2071 2186
2072 return NULL; 2187 return NULL;
2073 } 2188 }
2091 conv = data; 2206 conv = data;
2092 chat = PURPLE_CONV_CHAT(conv); 2207 chat = PURPLE_CONV_CHAT(conv);
2093 user = purple_request_fields_get_string(fields, "screenname"); 2208 user = purple_request_fields_get_string(fields, "screenname");
2094 message = purple_request_fields_get_string(fields, "message"); 2209 message = purple_request_fields_get_string(fields, "message");
2095 2210
2096 serv_chat_invite(purple_conversation_get_gc(conv), chat->id, message, user); 2211 serv_chat_invite(purple_conversation_get_connection(conv), chat->id, message, user);
2097 } 2212 }
2098 2213
2099 void purple_conv_chat_invite_user(PurpleConvChat *chat, const char *user, 2214 void purple_conv_chat_invite_user(PurpleConvChat *chat, const char *user,
2100 const char *message, gboolean confirm) 2215 const char *message, gboolean confirm)
2101 { 2216 {
2192 2307
2193 PURPLE_DBUS_UNREGISTER_POINTER(cb); 2308 PURPLE_DBUS_UNREGISTER_POINTER(cb);
2194 g_free(cb); 2309 g_free(cb);
2195 } 2310 }
2196 2311
2312 void purple_conv_chat_cb_set_ui_data(PurpleConvChatBuddy *cb, gpointer ui_data)
2313 {
2314 g_return_if_fail(cb != NULL);
2315
2316 cb->ui_data = ui_data;
2317 }
2318
2319 gpointer purple_conv_chat_cb_get_ui_data(const PurpleConvChatBuddy *cb)
2320 {
2321 g_return_val_if_fail(cb != NULL, NULL);
2322
2323 return cb->ui_data;
2324 }
2325
2197 const char * 2326 const char *
2198 purple_conv_chat_cb_get_name(PurpleConvChatBuddy *cb) 2327 purple_conv_chat_cb_get_alias(const PurpleConvChatBuddy *cb)
2199 { 2328 {
2200 g_return_val_if_fail(cb != NULL, NULL); 2329 g_return_val_if_fail(cb != NULL, NULL);
2201 2330
2331 return cb->alias;
2332 }
2333
2334 const char *
2335 purple_conv_chat_cb_get_name(const PurpleConvChatBuddy *cb)
2336 {
2337 g_return_val_if_fail(cb != NULL, NULL);
2338
2202 return cb->name; 2339 return cb->name;
2340 }
2341
2342 PurpleConvChatBuddyFlags
2343 purple_conv_chat_cb_get_flags(const PurpleConvChatBuddy *cb)
2344 {
2345 g_return_val_if_fail(cb != NULL, PURPLE_CBFLAGS_NONE);
2346
2347 return cb->flags;
2348 }
2349
2350 gboolean purple_conv_chat_cb_is_buddy(const PurpleConvChatBuddy *cb)
2351 {
2352 g_return_val_if_fail(cb != NULL, FALSE);
2353
2354 return cb->buddy;
2203 } 2355 }
2204 2356
2205 const char * 2357 const char *
2206 purple_conv_chat_cb_get_attribute(PurpleConvChatBuddy *cb, const char *key) 2358 purple_conv_chat_cb_get_attribute(PurpleConvChatBuddy *cb, const char *key)
2207 { 2359 {
2297 GList *purple_conversation_get_message_history(PurpleConversation *conv) 2449 GList *purple_conversation_get_message_history(PurpleConversation *conv)
2298 { 2450 {
2299 return conv->message_history; 2451 return conv->message_history;
2300 } 2452 }
2301 2453
2302 const char *purple_conversation_message_get_sender(PurpleConvMessage *msg) 2454 const char *purple_conversation_message_get_sender(const PurpleConvMessage *msg)
2303 { 2455 {
2304 g_return_val_if_fail(msg, NULL); 2456 g_return_val_if_fail(msg, NULL);
2305 return msg->who; 2457 return msg->who;
2306 } 2458 }
2307 2459
2308 const char *purple_conversation_message_get_message(PurpleConvMessage *msg) 2460 const char *purple_conversation_message_get_message(const PurpleConvMessage *msg)
2309 { 2461 {
2310 g_return_val_if_fail(msg, NULL); 2462 g_return_val_if_fail(msg, NULL);
2311 return msg->what; 2463 return msg->what;
2312 } 2464 }
2313 2465
2314 PurpleMessageFlags purple_conversation_message_get_flags(PurpleConvMessage *msg) 2466 PurpleMessageFlags purple_conversation_message_get_flags(const PurpleConvMessage *msg)
2315 { 2467 {
2316 g_return_val_if_fail(msg, 0); 2468 g_return_val_if_fail(msg, 0);
2317 return msg->flags; 2469 return msg->flags;
2318 } 2470 }
2319 2471
2320 time_t purple_conversation_message_get_timestamp(PurpleConvMessage *msg) 2472 time_t purple_conversation_message_get_timestamp(const PurpleConvMessage *msg)
2321 { 2473 {
2322 g_return_val_if_fail(msg, 0); 2474 g_return_val_if_fail(msg, 0);
2323 return msg->when; 2475 return msg->when;
2324 } 2476 }
2477
2478 const char *purple_conversation_message_get_alias(const PurpleConvMessage *msg)
2479 {
2480 g_return_val_if_fail(msg, NULL);
2481 return msg->alias;
2482 }
2483
2484 PurpleConversation *purple_conversation_message_get_conv(const PurpleConvMessage *msg)
2485 {
2486 g_return_val_if_fail(msg, NULL);
2487 return msg->conv;
2488 }
2489
2490 void purple_conversation_set_ui_data(PurpleConversation *conv, gpointer ui_data)
2491 {
2492 g_return_if_fail(conv != NULL);
2493
2494 conv->ui_data = ui_data;
2495 }
2496
2497 gpointer purple_conversation_get_ui_data(const PurpleConversation *conv)
2498 {
2499 g_return_val_if_fail(conv != NULL, NULL);
2500
2501 return conv->ui_data;
2502 }
2503
2325 2504
2326 gboolean 2505 gboolean
2327 purple_conversation_do_command(PurpleConversation *conv, const gchar *cmdline, 2506 purple_conversation_do_command(PurpleConversation *conv, const gchar *cmdline,
2328 const gchar *markup, gchar **error) 2507 const gchar *markup, gchar **error)
2329 { 2508 {