X-Git-Url: http://git.maemo.org/git/?p=python-purple;a=blobdiff_plain;f=account_cbs.pxd;h=e6bdee8c5cd1656c34480de9e3d234e9d3a75ed0;hp=54183feffd394c22e385d56a53383408ff453fce;hb=d5dc2da1bd703c2cadbadde95994c17f44a86a0e;hpb=5fe506a5d23d5f7ba01599247a58bd03ca9eb7da;ds=sidebyside diff --git a/account_cbs.pxd b/account_cbs.pxd index 54183fe..e6bdee8 100644 --- a/account_cbs.pxd +++ b/account_cbs.pxd @@ -24,49 +24,179 @@ cdef extern from *: account_cbs = {} -cdef void notify_added (account.PurpleAccount *account, - const_char *remote_user, const_char *id, - const_char *alias, const_char *message): - debug.c_purple_debug_info("account", "%s", "notify-added\n") - try: - (account_cbs["notify-added"])("notify-added: TODO") - except KeyError: - pass - -cdef void status_changed (account.PurpleAccount *account, - status.PurpleStatus *status): - debug.c_purple_debug_info("account", "%s", "status-changed\n") - try: - (account_cbs["status-changed"])("status-changed: TODO") - except KeyError: - pass - -cdef void request_add (account.PurpleAccount *account, - const_char *remote_user, const_char *id, - const_char *alias, const_char *message): - debug.c_purple_debug_info("account", "%s", "request-add\n") - try: - (account_cbs["request-add"])("request-add: TODO") - except KeyError: - pass - -cdef void *request_authorize (account.PurpleAccount *account, - const_char *remote_user, const_char *id, - const_char *alias, const_char *message, - glib.gboolean on_list, - account.PurpleAccountRequestAuthorizationCb authorize_cb, - account.PurpleAccountRequestAuthorizationCb deny_cb, - void *user_data): - debug.c_purple_debug_info("account", "%s", "request-authorize\n") - try: - (account_cbs["request-authorize"])("request-authorize: TODO") - return NULL - except KeyError: - pass +cdef account.PurpleAccountRequestAuthorizationCb c_request_authorize_authorize_cb = NULL +cdef account.PurpleAccountRequestAuthorizationCb c_request_authorize_deny_cb = NULL +cdef void *c_request_authorize_user_data = NULL + +def call_authorize_cb(): + global c_request_authorize_authorize_cb + global c_request_authorize_deny_cb + global c_request_authorize_user_data + + if c_request_authorize_authorize_cb: + c_request_authorize_authorize_cb(c_request_authorize_user_data) + c_request_authorize_authorize_cb = NULL + c_request_authorize_deny_cb = NULL + c_request_authorize_user_data = NULL + +def call_deny_cb(): + global c_request_authorize_authorize_cb + global c_request_authorize_deny_cb + global c_request_authorize_user_data + + if c_request_authorize_deny_cb: + c_request_authorize_deny_cb(c_request_authorize_user_data) + c_request_authorize_authorize_cb = NULL + c_request_authorize_deny_cb = NULL + c_request_authorize_user_data = NULL + +cdef void notify_added(account.PurpleAccount *c_account, \ + const_char *remote_user, const_char *id, const_char *alias, \ + const_char *c_message): + """ + A buddy who is already on this account's buddy list added this account to + their buddy list. + """ + cdef connection.PurpleConnection *gc = \ + account.purple_account_get_connection(c_account) + + debug.purple_debug_info("account", "%s", "notify-added\n") + + if alias: + remote_alias = alias + else: + remote_alias = None + + if id: + username = id + elif connection.purple_connection_get_display_name(gc) != NULL: + username = connection.purple_connection_get_display_name(gc) + else: + username = account.purple_account_get_username(c_account) + + protocol_id = account.purple_account_get_protocol_id(c_account) + + if c_message: + message = c_message + else: + message = None + + if account_cbs.has_key("notify-added"): + ( account_cbs["notify-added"])( \ + ( remote_user, remote_alias), \ + (username, protocol_id), message) + +cdef void status_changed(account.PurpleAccount *c_account, \ + status.PurpleStatus *c_status): + """ + This account's status changed. + """ + debug.purple_debug_info("account", "%s", "status-changed\n") + + username = account.purple_account_get_username(c_account) + protocol_id = account.purple_account_get_protocol_id(c_account) + + status_id = status.purple_status_get_id(c_status) + status_name = status.purple_status_get_name(c_status) + + if account_cbs.has_key("status-changed"): + ( account_cbs["status-changed"])( \ + (username, protocol_id), status_id, status_name) + +cdef void request_add(account.PurpleAccount *c_account, \ + const_char *remote_user, const_char *id, const_char *alias, \ + const_char *c_message): + """ + Someone we don't have on our list added us; prompt to add them. + """ + cdef connection.PurpleConnection *gc = \ + account.purple_account_get_connection(c_account) + + debug.purple_debug_info("account", "%s", "request-add\n") + + if alias: + remote_alias = alias + else: + remote_alias = None + + if id: + username = id + elif connection.purple_connection_get_display_name(gc) != NULL: + username = connection.purple_connection_get_display_name(gc) + else: + username = account.purple_account_get_username(c_account) + + protocol_id = account.purple_account_get_protocol_id(c_account) + + if c_message: + message = c_message + else: + message = None + + if account_cbs.has_key("request-add"): + ( account_cbs["request-add"])( \ + ( remote_user, remote_alias), \ + (username, protocol_id), message) + +cdef void *request_authorize(account.PurpleAccount *c_account, \ + const_char *remote_user, const_char *id, const_char *alias, \ + const_char *c_message, glib.gboolean on_list, \ + account.PurpleAccountRequestAuthorizationCb authorize_cb, \ + account.PurpleAccountRequestAuthorizationCb deny_cb, \ + void *user_data): + """ + Prompt for authorization when someone adds this account to their buddy + list. To authorize them to see this account's presence, call + authorize_cb(user_data) otherwise call deny_cb(user_data). + @return a UI-specific handle, as passed to #close_account_request. + """ + cdef connection.PurpleConnection *gc = \ + account.purple_account_get_connection(c_account) + + debug.purple_debug_info("account", "%s", "request-authorize\n") + + global c_request_authorize_authorize_cb + global c_request_authorize_deny_cb + global c_request_authorize_user_data + + c_request_authorize_authorize_cb = authorize_cb + c_request_authorize_deny_cb = deny_cb + c_request_authorize_user_data = user_data + + if alias: + remote_alias = alias + else: + remote_alias = None + + if id: + username = id + elif connection.purple_connection_get_display_name(gc) != NULL: + username = connection.purple_connection_get_display_name(gc) + else: + username = account.purple_account_get_username(c_account) + + protocol_id = account.purple_account_get_protocol_id(c_account) + + if c_message: + message = c_message + else: + message = None + + if account_cbs.has_key("request-authorize"): + ( account_cbs["request-authorize"])( \ + ( remote_user, remote_alias), \ + (username, protocol_id), \ + message, on_list, \ + call_authorize_cb, call_deny_cb) cdef void close_account_request (void *ui_handle): - debug.c_purple_debug_info("account", "%s", "close-account-request\n") - try: - (account_cbs["close-account-request"])("close-account-request: TODO") - except KeyError: - pass + """ + Close a pending request for authorization. ui_handle is a handle as + returned by request_authorize. + """ + debug.purple_debug_info("account", "%s", "close-account-request\n") + + request.purple_request_close(request.PURPLE_REQUEST_ACTION, ui_handle) + + if account_cbs.has_key("close-account-request"): + ( account_cbs["close-account-request"])()