Implemented status_changed callback.
[python-purple] / conversation_cbs.pxd
1 #
2 #  Copyright (c) 2008 INdT - Instituto Nokia de Tecnologia
3 #
4 #  This file is part of python-purple.
5 #
6 #  python-purple is free software: you can redistribute it and/or modify
7 #  it under the terms of the GNU General Public License as published by
8 #  the Free Software Foundation, either version 3 of the License, or
9 #  (at your option) any later version.
10 #
11 #  python-purple is distributed in the hope that it will be useful,
12 #  but WITHOUT ANY WARRANTY; without even the implied warranty of
13 #  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14 #  GNU General Public License for more details.
15 #
16 #  You should have received a copy of the GNU General Public License
17 #  along with this program.  If not, see <http://www.gnu.org/licenses/>.
18 #
19
20 cimport purple
21
22 cdef extern from *:
23     ctypedef char const_char "const char"
24     ctypedef glib.guchar const_guchar "const guchar"
25     ctypedef long int time_t
26
27 conversation_cbs = {}
28
29 cdef void create_conversation(conversation.PurpleConversation *conv):
30     """
31     Called when a conv is created (but before the conversation-created
32     signal is emitted).
33     """
34     debug.purple_debug_info("conversation", "%s", "create-conversation\n")
35     cdef char *c_name = NULL
36
37     c_name = <char *> conversation.purple_conversation_get_name(conv)
38     if c_name == NULL:
39         name = None
40     else:
41         name = c_name
42
43     type = conversation.purple_conversation_get_type(conv)
44
45     if conversation_cbs.has_key("create-conversation"):
46         (<object> conversation_cbs["create-conversation"])(name, type)
47
48 cdef void destroy_conversation(conversation.PurpleConversation *conv):
49     """
50     Called just before a conv is freed.
51     """
52     debug.purple_debug_info("conversation", "%s", "destroy-conversation\n")
53     if conversation_cbs.has_key("destroy-conversation"):
54         (<object> conversation_cbs["destroy-conversation"])("destroy-conversation: TODO")
55
56 cdef void write_chat(conversation.PurpleConversation *conv, const_char *who, \
57         const_char *message, conversation.PurpleMessageFlags flags, \
58         time_t mtime):
59     """
60     Write a message to a chat. If this field is NULL, libpurple will fall
61     back to using write_conv.
62     @see purple_conv_chat_write()
63     """
64     debug.purple_debug_info("conversation", "%s", "write-chat\n")
65     if conversation_cbs.has_key("write-chat"):
66         (<object> conversation_cbs["write-chat"])("write-chat: TODO")
67
68 cdef void write_im(conversation.PurpleConversation *conv, const_char *who, \
69         const_char *c_message, conversation.PurpleMessageFlags flags, \
70         time_t mtime):
71     """
72     Write a message to an IM conversation. If this field is NULL, libpurple
73     will fall back to using write_conv.
74     @see purple_conv_im_write()
75     """
76     debug.purple_debug_info("conversation", "%s", "write-im\n")
77     cdef account.PurpleAccount *acc = conversation.purple_conversation_get_account(conv)
78     cdef blist.PurpleBuddy *buddy = NULL
79     cdef char *c_username = NULL
80     cdef char *c_sender_alias = NULL
81
82     c_username = <char *> account.purple_account_get_username(acc)
83     if c_username:
84         username = c_username
85     else:
86         username = None
87
88     if who == NULL:
89         who = conversation.purple_conversation_get_name(conv)
90
91     sender = <char *> who
92     buddy = blist.purple_find_buddy(acc, <char *> who)
93     if buddy:
94         c_sender_alias = <char *> blist.purple_buddy_get_alias_only(buddy)
95
96     if c_sender_alias:
97         sender_alias = unicode(c_sender_alias, 'utf-8')
98     else:
99         sender_alias = None
100
101     if c_message:
102         message = <char *> c_message
103     else:
104         message = None
105
106     # FIXME: Maybe we need add more purple flags in the future
107     if flags & conversation.PURPLE_MESSAGE_SEND:
108         flag = "SEND"
109     else:
110         flag = "RECV"
111
112     if conversation_cbs.has_key("write-im"):
113         (<object> conversation_cbs["write-im"])(username, sender, \
114                                 sender_alias, message, flag)
115
116 cdef void write_conv(conversation.PurpleConversation *conv, const_char *name, \
117         const_char *alias, const_char *message, \
118         conversation.PurpleMessageFlags flags, time_t mtime):
119     """
120     Write a message to a conversation. This is used rather than the chat- or
121     im-specific ops for errors, system messages (such as "x is now known as
122     y"), and as the fallback if write_im and write_chat are not implemented.
123     It should be implemented, or the UI will miss conversation error messages
124     and your users will hate you.
125     @see purple_conversation_write()
126     """
127     debug.purple_debug_info("conversation", "%s", "write-conv\n")
128     if conversation_cbs.has_key("write-conv"):
129         (<object> conversation_cbs["write-conv"])("write-conv: TODO")
130
131 cdef void chat_add_users(conversation.PurpleConversation *conv, \
132         glib.GList *cbuddies, glib.gboolean new_arrivals):
133     """
134     Add cbuddies to a chat.
135     @param cbuddies  A GList of PurpleConvChatBuddy structs.
136     @param new_arrivals  Wheter join notices should be shown.
137                          (Join notices are actually written to the
138                          conversation by purple_conv_chat_add_users().)
139     @see purple_conv_chat_add_users()
140     """
141     debug.purple_debug_info("conversation", "%s", "chat-add-users\n")
142     if conversation_cbs.has_key("chat-add-users"):
143         (<object> conversation_cbs["chat-add-users"])("chat-add-users: TODO")
144
145 cdef void chat_rename_user(conversation.PurpleConversation *conv, \
146         const_char *old_name, const_char *new_name,
147         const_char *new_alias):
148     """
149     Rename the user in this chat name old_name to new_name. (The rename
150     message is written to the conversation by libpurple.)
151     @param new_alias  new_name's new_alias, if they have one.
152     @see purple_conv_chat_rename_user()
153     """
154     debug.purple_debug_info("conversation", "%s", "chat-rename-user\n")
155     if conversation_cbs.has_key("chat-rename-user"):
156         (<object> conversation_cbs["chat-rename-user"])("chat-rename-user: TODO")
157
158 cdef void chat_remove_users(conversation.PurpleConversation *conv, \
159         glib.GList *users):
160     """
161     Remove users from a chat.
162     @param  users  A GList of const char *s.
163     """
164     debug.purple_debug_info("conversation", "%s", "chat-remove-users\n")
165     if conversation_cbs.has_key("chat-remove-users"):
166         (<object> conversation_cbs["chat-remove-users"])("chat-remove-users: TODO")
167
168 cdef void chat_update_user(conversation.PurpleConversation *conv, \
169         const_char *user):
170     """
171     Called when a user's flags are changed.
172     @see purple_conv_chat_user_set_flags()
173     """
174     debug.purple_debug_info("conversation", "%s", "chat-update-user\n")
175     if conversation_cbs.has_key("chat-update-user"):
176         (<object> conversation_cbs["chat-update-user"])("chat-update-user: TODO")
177
178 cdef void present(conversation.PurpleConversation *conv):
179     """
180     Present this conversation to the user; for example, by displaying the IM
181     dialog.
182     """
183     debug.purple_debug_info("conversation", "%s", "present\n")
184     if conversation_cbs.has_key("present"):
185         (<object> conversation_cbs["present"])("present: TODO")
186
187 cdef glib.gboolean has_focus(conversation.PurpleConversation *conv):
188     """
189     If this UI has a concept of focus (as in a windowing system) and this
190     conversation has the focus, return TRUE; otherwise, return FALSE.
191     """
192     debug.purple_debug_info("conversation", "%s", "has-focus\n")
193     if conversation_cbs.has_key("has-focus"):
194         (<object> conversation_cbs["has-focus"])("has-focus: TODO")
195     return False
196
197 cdef glib.gboolean custom_smiley_add(conversation.PurpleConversation *conv, \
198         const_char *smile, glib.gboolean remote):
199     """
200     Custom smileys (add).
201     """
202     debug.purple_debug_info("conversation", "%s", "custom-smiley-add\n")
203     if conversation_cbs.has_key("custom-smiley-add"):
204         (<object> conversation_cbs["custom-smiley-add"])("custom-smiley-add: TODO")
205     return False
206
207 cdef void custom_smiley_write(conversation.PurpleConversation *conv, \
208         const_char *smile, const_guchar *data, glib.gsize size):
209     """
210     Custom smileys (write).
211     """
212     debug.purple_debug_info("conversation", "%s", "custom-smiley-write\n")
213     if conversation_cbs.has_key("custom-smiley-write"):
214         (<object> conversation_cbs["custom-smiley-write"])("custom-smiley-write: TODO")
215
216 cdef void custom_smiley_close(conversation.PurpleConversation *conv, \
217         const_char *smile):
218     """
219     Custom smileys (close).
220     """
221     debug.purple_debug_info("conversation", "%s", "custom-smiley-close\n")
222     if conversation_cbs.has_key("custom-smiley-close"):
223         (<object> conversation_cbs["custom-smiley-close"])("custom-smiley-close: TODO")
224
225 cdef void send_confirm(conversation.PurpleConversation *conv, \
226         const_char *message):
227     """
228     Prompt the user for confirmation to send mesage. This function should
229     arrange for the message to be sent if the user accepts. If this field
230     is NULL, libpurple will fall back to using purple_request_action().
231     """
232     debug.purple_debug_info("conversation", "%s", "send-confirm\n")
233     if conversation_cbs.has_key("send-confirm"):
234         (<object> conversation_cbs["send-confirm"])("send-confirm: TODO")