Updated nullclient-ecore.
[python-purple] / account_cbs.pxd
index e0f767a..e6bdee8 100644 (file)
@@ -24,43 +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(debug.PURPLE_DEBUG_INFO, "account", "notify_added\n")
-    global account_cbs
-    try:
-        (<object>account_cbs["notify_added"])("notify_added")
-    except KeyError:
-        pass
-
-cdef void status_changed (account.PurpleAccount *account, status.PurpleStatus *status):
-    debug.c_purple_debug(debug.PURPLE_DEBUG_INFO, "account", "status_changed\n")
-    global account_cbs
-    try:
-        (<object>account_cbs["status_changed"])("status_changed")
-    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(debug.PURPLE_DEBUG_INFO, "account", "request_add\n")
-    global account_cbs
-    try:
-        (<object>account_cbs["request_add"])("request_add")
-    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(debug.PURPLE_DEBUG_INFO, "account", "request_authorize\n")
-    global account_cbs
-    try:
-        (<object>account_cbs["request_authorize"])("request_authorize")
-        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 = <char *> alias
+    else:
+        remote_alias = None
+
+    if id:
+        username = <char *> 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 = <char *> c_message
+    else:
+        message = None
+
+    if account_cbs.has_key("notify-added"):
+        (<object> account_cbs["notify-added"])( \
+                (<char *> 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"):
+        (<object> 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 = <char *> alias
+    else:
+        remote_alias = None
+
+    if id:
+        username = <char *> 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 = <char *> c_message
+    else:
+        message = None
+
+    if account_cbs.has_key("request-add"):
+        (<object> account_cbs["request-add"])( \
+                (<char *> 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 = <char *> alias
+    else:
+        remote_alias = None
+
+    if id:
+        username = <char *> 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 = <char *> c_message
+    else:
+        message = None
+
+    if account_cbs.has_key("request-authorize"):
+        (<object> account_cbs["request-authorize"])( \
+                (<char *> 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(debug.PURPLE_DEBUG_INFO, "account", "close_account_request\n")
-    global account_cbs
-    try:
-        (<object>account_cbs["close_account_request"])("close_account_request")
-    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"):
+        (<object> account_cbs["close-account-request"])()