diff options
author | Richard van der Hoff <richard@matrix.org> | 2015-10-14 15:17:33 +0100 |
---|---|---|
committer | Richard van der Hoff <richard@matrix.org> | 2015-10-14 15:17:33 +0100 |
commit | d183825c3a74eab217b7b7463247c07156acd929 (patch) | |
tree | 26c646f078fcb9ae585faa0738bba3ccdadd8198 /libmatrix.c | |
parent | 18bd416dc07df0bd78014efefdfe80a56b92f776 (diff) | |
download | purple-matrix-d183825c3a74eab217b7b7463247c07156acd929.tar.gz |
Re-indent libmatrix.c
whitespace-only change to give our base implentation a sensible indentation
style.
Diffstat (limited to 'libmatrix.c')
-rw-r--r-- | libmatrix.c | 1580 |
1 files changed, 790 insertions, 790 deletions
diff --git a/libmatrix.c b/libmatrix.c index d2d5f7a..d9979a1 100644 --- a/libmatrix.c +++ b/libmatrix.c @@ -51,9 +51,9 @@ typedef void (*GcFunc)(PurpleConnection *from, gpointer userdata); typedef struct { - GcFunc fn; - PurpleConnection *from; - gpointer userdata; + GcFunc fn; + PurpleConnection *from; + gpointer userdata; } GcFuncData; /* @@ -63,36 +63,36 @@ typedef struct { GHashTable* goffline_messages = NULL; typedef struct { - char *from; - char *message; - time_t mtime; - PurpleMessageFlags flags; + char *from; + char *message; + time_t mtime; + PurpleMessageFlags flags; } GOfflineMessage; /* * helpers */ static PurpleConnection *get_matrixprpl_gc(const char *username) { - PurpleAccount *acct = purple_accounts_find(username, PRPL_ID); - if (acct && purple_account_is_connected(acct)) - return acct->gc; - else - return NULL; + PurpleAccount *acct = purple_accounts_find(username, PRPL_ID); + if (acct && purple_account_is_connected(acct)) + return acct->gc; + else + return NULL; } static void call_if_matrixprpl(gpointer data, gpointer userdata) { - PurpleConnection *gc = (PurpleConnection *)(data); - GcFuncData *gcfdata = (GcFuncData *)userdata; + PurpleConnection *gc = (PurpleConnection *)(data); + GcFuncData *gcfdata = (GcFuncData *)userdata; - if (!strcmp(gc->account->protocol_id, PRPL_ID)) - gcfdata->fn(gcfdata->from, gc, gcfdata->userdata); + if (!strcmp(gc->account->protocol_id, PRPL_ID)) + gcfdata->fn(gcfdata->from, gc, gcfdata->userdata); } static void foreach_matrixprpl_gc(GcFunc fn, PurpleConnection *from, - gpointer userdata) { - GcFuncData gcfdata = { fn, from, userdata }; - g_list_foreach(purple_connections_get_all(), call_if_matrixprpl, - &gcfdata); + gpointer userdata) { + GcFuncData gcfdata = { fn, from, userdata }; + g_list_foreach(purple_connections_get_all(), call_if_matrixprpl, + &gcfdata); } @@ -100,65 +100,65 @@ typedef void(*ChatFunc)(PurpleConvChat *from, PurpleConvChat *to, int id, const char *room, gpointer userdata); typedef struct { - ChatFunc fn; - PurpleConvChat *from_chat; - gpointer userdata; + ChatFunc fn; + PurpleConvChat *from_chat; + gpointer userdata; } ChatFuncData; static void call_chat_func(gpointer data, gpointer userdata) { - PurpleConnection *to = (PurpleConnection *)data; - ChatFuncData *cfdata = (ChatFuncData *)userdata; - - int id = cfdata->from_chat->id; - PurpleConversation *conv = purple_find_chat(to, id); - if (conv) { - PurpleConvChat *chat = purple_conversation_get_chat_data(conv); - cfdata->fn(cfdata->from_chat, chat, id, conv->name, cfdata->userdata); - } + PurpleConnection *to = (PurpleConnection *)data; + ChatFuncData *cfdata = (ChatFuncData *)userdata; + + int id = cfdata->from_chat->id; + PurpleConversation *conv = purple_find_chat(to, id); + if (conv) { + PurpleConvChat *chat = purple_conversation_get_chat_data(conv); + cfdata->fn(cfdata->from_chat, chat, id, conv->name, cfdata->userdata); + } } static void foreach_gc_in_chat(ChatFunc fn, PurpleConnection *from, int id, gpointer userdata) { - PurpleConversation *conv = purple_find_chat(from, id); - ChatFuncData cfdata = { fn, - purple_conversation_get_chat_data(conv), - userdata }; + PurpleConversation *conv = purple_find_chat(from, id); + ChatFuncData cfdata = { fn, + purple_conversation_get_chat_data(conv), + userdata }; - g_list_foreach(purple_connections_get_all(), call_chat_func, - &cfdata); + g_list_foreach(purple_connections_get_all(), call_chat_func, + &cfdata); } static void discover_status(PurpleConnection *from, PurpleConnection *to, gpointer userdata) { - const char *from_username = from->account->username; - const char *to_username = to->account->username; - - if (purple_find_buddy(from->account, to_username)) { - PurpleStatus *status = purple_account_get_active_status(to->account); - const char *status_id = purple_status_get_id(status); - const char *message = purple_status_get_attr_string(status, "message"); - - if (!strcmp(status_id, MATRIX_STATUS_ONLINE) || - !strcmp(status_id, MATRIX_STATUS_AWAY) || - !strcmp(status_id, MATRIX_STATUS_OFFLINE)) { - purple_debug_info("matrixprpl", "%s sees that %s is %s: %s\n", - from_username, to_username, status_id, message); - purple_prpl_got_user_status(from->account, to_username, status_id, - (message) ? "message" : NULL, message, NULL); - } else { - purple_debug_error("matrixprpl", - "%s's buddy %s has an unknown status: %s, %s", - from_username, to_username, status_id, message); + const char *from_username = from->account->username; + const char *to_username = to->account->username; + + if (purple_find_buddy(from->account, to_username)) { + PurpleStatus *status = purple_account_get_active_status(to->account); + const char *status_id = purple_status_get_id(status); + const char *message = purple_status_get_attr_string(status, "message"); + + if (!strcmp(status_id, MATRIX_STATUS_ONLINE) || + !strcmp(status_id, MATRIX_STATUS_AWAY) || + !strcmp(status_id, MATRIX_STATUS_OFFLINE)) { + purple_debug_info("matrixprpl", "%s sees that %s is %s: %s\n", + from_username, to_username, status_id, message); + purple_prpl_got_user_status(from->account, to_username, status_id, + (message) ? "message" : NULL, message, NULL); + } else { + purple_debug_error("matrixprpl", + "%s's buddy %s has an unknown status: %s, %s", + from_username, to_username, status_id, message); + } } - } } static void report_status_change(PurpleConnection *from, PurpleConnection *to, gpointer userdata) { - purple_debug_info("matrixprpl", "notifying %s that %s changed status\n", - to->account->username, from->account->username); - discover_status(to, from, NULL); + purple_debug_info("matrixprpl", "notifying %s that %s changed status\n", + to->account->username, from->account->username); + discover_status(to, from, NULL); } @@ -167,12 +167,12 @@ static void report_status_change(PurpleConnection *from, PurpleConnection *to, */ static void matrixprpl_input_user_info(PurplePluginAction *action) { - PurpleConnection *gc = (PurpleConnection *)action->context; - PurpleAccount *acct = purple_connection_get_account(gc); - purple_debug_info("matrixprpl", "showing 'Set User Info' dialog for %s\n", - acct->username); + PurpleConnection *gc = (PurpleConnection *)action->context; + PurpleAccount *acct = purple_connection_get_account(gc); + purple_debug_info("matrixprpl", "showing 'Set User Info' dialog for %s\n", + acct->username); - purple_account_request_change_user_info(acct); + purple_account_request_change_user_info(acct); } /* this is set to the actions member of the PurplePluginInfo struct at the @@ -180,9 +180,9 @@ static void matrixprpl_input_user_info(PurplePluginAction *action) */ static GList *matrixprpl_actions(PurplePlugin *plugin, gpointer context) { - PurplePluginAction *action = purple_plugin_action_new( - _("Set User Info..."), matrixprpl_input_user_info); - return g_list_append(NULL, action); + PurplePluginAction *action = purple_plugin_action_new( + _("Set User Info..."), matrixprpl_input_user_info); + return g_list_append(NULL, action); } @@ -191,390 +191,390 @@ static GList *matrixprpl_actions(PurplePlugin *plugin, gpointer context) */ static const char *matrixprpl_list_icon(PurpleAccount *acct, PurpleBuddy *buddy) { - return "matrix"; + return "matrix"; } static char *matrixprpl_status_text(PurpleBuddy *buddy) { - purple_debug_info("matrixprpl", "getting %s's status text for %s\n", - buddy->name, buddy->account->username); - - if (purple_find_buddy(buddy->account, buddy->name)) { - PurplePresence *presence = purple_buddy_get_presence(buddy); - PurpleStatus *status = purple_presence_get_active_status(presence); - const char *name = purple_status_get_name(status); - const char *message = purple_status_get_attr_string(status, "message"); - - char *text; - if (message && strlen(message) > 0) - text = g_strdup_printf("%s: %s", name, message); - else - text = g_strdup(name); + purple_debug_info("matrixprpl", "getting %s's status text for %s\n", + buddy->name, buddy->account->username); + + if (purple_find_buddy(buddy->account, buddy->name)) { + PurplePresence *presence = purple_buddy_get_presence(buddy); + PurpleStatus *status = purple_presence_get_active_status(presence); + const char *name = purple_status_get_name(status); + const char *message = purple_status_get_attr_string(status, "message"); + + char *text; + if (message && strlen(message) > 0) + text = g_strdup_printf("%s: %s", name, message); + else + text = g_strdup(name); - purple_debug_info("matrixprpl", "%s's status text is %s\n", buddy->name, text); - return text; + purple_debug_info("matrixprpl", "%s's status text is %s\n", buddy->name, text); + return text; - } else { - purple_debug_info("matrixprpl", "...but %s is not logged in\n", buddy->name); - return g_strdup("Not logged in"); - } + } else { + purple_debug_info("matrixprpl", "...but %s is not logged in\n", buddy->name); + return g_strdup("Not logged in"); + } } static void matrixprpl_tooltip_text(PurpleBuddy *buddy, - PurpleNotifyUserInfo *info, - gboolean full) { - PurpleConnection *gc = get_matrixprpl_gc(buddy->name); - - if (gc) { - /* they're logged in */ - PurplePresence *presence = purple_buddy_get_presence(buddy); - PurpleStatus *status = purple_presence_get_active_status(presence); - char *msg = matrixprpl_status_text(buddy); - purple_notify_user_info_add_pair(info, purple_status_get_name(status), - msg); - g_free(msg); + PurpleNotifyUserInfo *info, + gboolean full) { + PurpleConnection *gc = get_matrixprpl_gc(buddy->name); + + if (gc) { + /* they're logged in */ + PurplePresence *presence = purple_buddy_get_presence(buddy); + PurpleStatus *status = purple_presence_get_active_status(presence); + char *msg = matrixprpl_status_text(buddy); + purple_notify_user_info_add_pair(info, purple_status_get_name(status), + msg); + g_free(msg); + + if (full) { + const char *user_info = purple_account_get_user_info(gc->account); + if (user_info) + purple_notify_user_info_add_pair(info, _("User info"), user_info); + } - if (full) { - const char *user_info = purple_account_get_user_info(gc->account); - if (user_info) - purple_notify_user_info_add_pair(info, _("User info"), user_info); + } else { + /* they're not logged in */ + purple_notify_user_info_add_pair(info, _("User info"), _("not logged in")); } - } else { - /* they're not logged in */ - purple_notify_user_info_add_pair(info, _("User info"), _("not logged in")); - } - - purple_debug_info("matrixprpl", "showing %s tooltip for %s\n", - (full) ? "full" : "short", buddy->name); + purple_debug_info("matrixprpl", "showing %s tooltip for %s\n", + (full) ? "full" : "short", buddy->name); } static GList *matrixprpl_status_types(PurpleAccount *acct) { - GList *types = NULL; - PurpleStatusType *type; + GList *types = NULL; + PurpleStatusType *type; - purple_debug_info("matrixprpl", "returning status types for %s: %s, %s, %s\n", - acct->username, - MATRIX_STATUS_ONLINE, MATRIX_STATUS_AWAY, MATRIX_STATUS_OFFLINE); + purple_debug_info("matrixprpl", "returning status types for %s: %s, %s, %s\n", + acct->username, + MATRIX_STATUS_ONLINE, MATRIX_STATUS_AWAY, MATRIX_STATUS_OFFLINE); - type = purple_status_type_new_with_attrs(PURPLE_STATUS_AVAILABLE, - MATRIX_STATUS_ONLINE, NULL, TRUE, TRUE, FALSE, - "message", _("Message"), purple_value_new(PURPLE_TYPE_STRING), - NULL); - types = g_list_prepend(types, type); + type = purple_status_type_new_with_attrs(PURPLE_STATUS_AVAILABLE, + MATRIX_STATUS_ONLINE, NULL, TRUE, TRUE, FALSE, + "message", _("Message"), purple_value_new(PURPLE_TYPE_STRING), + NULL); + types = g_list_prepend(types, type); - type = purple_status_type_new_with_attrs(PURPLE_STATUS_AWAY, - MATRIX_STATUS_AWAY, NULL, TRUE, TRUE, FALSE, - "message", _("Message"), purple_value_new(PURPLE_TYPE_STRING), - NULL); - types = g_list_prepend(types, type); + type = purple_status_type_new_with_attrs(PURPLE_STATUS_AWAY, + MATRIX_STATUS_AWAY, NULL, TRUE, TRUE, FALSE, + "message", _("Message"), purple_value_new(PURPLE_TYPE_STRING), + NULL); + types = g_list_prepend(types, type); - type = purple_status_type_new_with_attrs(PURPLE_STATUS_OFFLINE, - MATRIX_STATUS_OFFLINE, NULL, TRUE, TRUE, FALSE, - "message", _("Message"), purple_value_new(PURPLE_TYPE_STRING), - NULL); - types = g_list_prepend(types, type); + type = purple_status_type_new_with_attrs(PURPLE_STATUS_OFFLINE, + MATRIX_STATUS_OFFLINE, NULL, TRUE, TRUE, FALSE, + "message", _("Message"), purple_value_new(PURPLE_TYPE_STRING), + NULL); + types = g_list_prepend(types, type); - return g_list_reverse(types); + return g_list_reverse(types); } static void blist_example_menu_item(PurpleBlistNode *node, gpointer userdata) { - purple_debug_info("matrixprpl", "example menu item clicked on user %s\n", - ((PurpleBuddy *)node)->name); + purple_debug_info("matrixprpl", "example menu item clicked on user %s\n", + ((PurpleBuddy *)node)->name); - purple_notify_info(NULL, /* plugin handle or PurpleConnection */ - _("Primary title"), - _("Secondary title"), - _("This is the callback for the matrixprpl menu item.")); + purple_notify_info(NULL, /* plugin handle or PurpleConnection */ + _("Primary title"), + _("Secondary title"), + _("This is the callback for the matrixprpl menu item.")); } static GList *matrixprpl_blist_node_menu(PurpleBlistNode *node) { - purple_debug_info("matrixprpl", "providing buddy list context menu item\n"); - - if (PURPLE_BLIST_NODE_IS_BUDDY(node)) { - PurpleMenuAction *action = purple_menu_action_new( - _("Matrixprpl example menu item"), - PURPLE_CALLBACK(blist_example_menu_item), - NULL, /* userdata passed to the callback */ - NULL); /* child menu items */ - return g_list_append(NULL, action); - } else { - return NULL; - } + purple_debug_info("matrixprpl", "providing buddy list context menu item\n"); + + if (PURPLE_BLIST_NODE_IS_BUDDY(node)) { + PurpleMenuAction *action = purple_menu_action_new( + _("Matrixprpl example menu item"), + PURPLE_CALLBACK(blist_example_menu_item), + NULL, /* userdata passed to the callback */ + NULL); /* child menu items */ + return g_list_append(NULL, action); + } else { + return NULL; + } } static GList *matrixprpl_chat_info(PurpleConnection *gc) { - struct proto_chat_entry *pce; /* defined in prpl.h */ + struct proto_chat_entry *pce; /* defined in prpl.h */ - purple_debug_info("matrixprpl", "returning chat setting 'room'\n"); + purple_debug_info("matrixprpl", "returning chat setting 'room'\n"); - pce = g_new0(struct proto_chat_entry, 1); - pce->label = _("Chat _room"); - pce->identifier = "room"; - pce->required = TRUE; + pce = g_new0(struct proto_chat_entry, 1); + pce->label = _("Chat _room"); + pce->identifier = "room"; + pce->required = TRUE; - return g_list_append(NULL, pce); + return g_list_append(NULL, pce); } static GHashTable *matrixprpl_chat_info_defaults(PurpleConnection *gc, - const char *room) { - GHashTable *defaults; + const char *room) { + GHashTable *defaults; - purple_debug_info("matrixprpl", "returning chat default setting " - "'room' = 'default'\n"); + purple_debug_info("matrixprpl", "returning chat default setting " + "'room' = 'default'\n"); - defaults = g_hash_table_new_full(g_str_hash, g_str_equal, NULL, g_free); - g_hash_table_insert(defaults, "room", g_strdup("default")); - return defaults; + defaults = g_hash_table_new_full(g_str_hash, g_str_equal, NULL, g_free); + g_hash_table_insert(defaults, "room", g_strdup("default")); + return defaults; } static void matrixprpl_login(PurpleAccount *acct) { - PurpleConnection *gc = purple_account_get_connection(acct); - GList *offline_messages; - - purple_debug_info("matrixprpl", "logging in %s\n", acct->username); - - purple_connection_update_progress(gc, _("Connecting"), - 0, /* which connection step this is */ - 2); /* total number of steps */ - - purple_connection_update_progress(gc, _("Connected"), - 1, /* which connection step this is */ - 2); /* total number of steps */ - purple_connection_set_state(gc, PURPLE_CONNECTED); - - /* tell purple about everyone on our buddy list who's connected */ - foreach_matrixprpl_gc(discover_status, gc, NULL); - - /* notify other matrixprpl accounts */ - foreach_matrixprpl_gc(report_status_change, gc, NULL); - - /* fetch stored offline messages */ - purple_debug_info("matrixprpl", "checking for offline messages for %s\n", - acct->username); - offline_messages = g_hash_table_lookup(goffline_messages, acct->username); - while (offline_messages) { - GOfflineMessage *message = (GOfflineMessage *)offline_messages->data; - purple_debug_info("matrixprpl", "delivering offline message to %s: %s\n", - acct->username, message->message); - serv_got_im(gc, message->from, message->message, message->flags, - message->mtime); - offline_messages = g_list_next(offline_messages); - - g_free(message->from); - g_free(message->message); - g_free(message); - } + PurpleConnection *gc = purple_account_get_connection(acct); + GList *offline_messages; + + purple_debug_info("matrixprpl", "logging in %s\n", acct->username); + + purple_connection_update_progress(gc, _("Connecting"), + 0, /* which connection step this is */ + 2); /* total number of steps */ + + purple_connection_update_progress(gc, _("Connected"), + 1, /* which connection step this is */ + 2); /* total number of steps */ + purple_connection_set_state(gc, PURPLE_CONNECTED); + + /* tell purple about everyone on our buddy list who's connected */ + foreach_matrixprpl_gc(discover_status, gc, NULL); + + /* notify other matrixprpl accounts */ + foreach_matrixprpl_gc(report_status_change, gc, NULL); + + /* fetch stored offline messages */ + purple_debug_info("matrixprpl", "checking for offline messages for %s\n", + acct->username); + offline_messages = g_hash_table_lookup(goffline_messages, acct->username); + while (offline_messages) { + GOfflineMessage *message = (GOfflineMessage *)offline_messages->data; + purple_debug_info("matrixprpl", "delivering offline message to %s: %s\n", + acct->username, message->message); + serv_got_im(gc, message->from, message->message, message->flags, + message->mtime); + offline_messages = g_list_next(offline_messages); + + g_free(message->from); + g_free(message->message); + g_free(message); + } - g_list_free(offline_messages); - g_hash_table_remove(goffline_messages, &acct->username); + g_list_free(offline_messages); + g_hash_table_remove(goffline_messages, &acct->username); } static void matrixprpl_close(PurpleConnection *gc) { - /* notify other matrixprpl accounts */ - foreach_matrixprpl_gc(report_status_change, gc, NULL); + /* notify other matrixprpl accounts */ + foreach_matrixprpl_gc(report_status_change, gc, NULL); } static int matrixprpl_send_im(PurpleConnection *gc, const char *who, - const char *message, PurpleMessageFlags flags) + const char *message, PurpleMessageFlags flags) { - const char *from_username = gc->account->username; - PurpleMessageFlags receive_flags = ((flags & ~PURPLE_MESSAGE_SEND) - | PURPLE_MESSAGE_RECV); - PurpleAccount *to_acct = purple_accounts_find(who, PRPL_ID); - PurpleConnection *to; - - purple_debug_info("matrixprpl", "sending message from %s to %s: %s\n", - from_username, who, message); - - /* is the sender blocked by the recipient's privacy settings? */ - if (to_acct && !purple_privacy_check(to_acct, gc->account->username)) { - char *msg = g_strdup_printf( - _("Your message was blocked by %s's privacy settings."), who); - purple_debug_info("matrixprpl", - "discarding; %s is blocked by %s's privacy settings\n", - from_username, who); - purple_conv_present_error(who, gc->account, msg); - g_free(msg); - return 0; - } - - /* is the recipient online? */ - to = get_matrixprpl_gc(who); - if (to) { /* yes, send */ - serv_got_im(to, from_username, message, receive_flags, time(NULL)); - - } else { /* nope, store as an offline message */ - GOfflineMessage *offline_message; - GList *messages; - - purple_debug_info("matrixprpl", - "%s is offline, sending as offline message\n", who); - offline_message = g_new0(GOfflineMessage, 1); - offline_message->from = g_strdup(from_username); - offline_message->message = g_strdup(message); - offline_message->mtime = time(NULL); - offline_message->flags = receive_flags; + const char *from_username = gc->account->username; + PurpleMessageFlags receive_flags = ((flags & ~PURPLE_MESSAGE_SEND) + | PURPLE_MESSAGE_RECV); + PurpleAccount *to_acct = purple_accounts_find(who, PRPL_ID); + PurpleConnection *to; + + purple_debug_info("matrixprpl", "sending message from %s to %s: %s\n", + from_username, who, message); + + /* is the sender blocked by the recipient's privacy settings? */ + if (to_acct && !purple_privacy_check(to_acct, gc->account->username)) { + char *msg = g_strdup_printf( + _("Your message was blocked by %s's privacy settings."), who); + purple_debug_info("matrixprpl", + "discarding; %s is blocked by %s's privacy settings\n", + from_username, who); + purple_conv_present_error(who, gc->account, msg); + g_free(msg); + return 0; + } - messages = g_hash_table_lookup(goffline_messages, who); - messages = g_list_append(messages, offline_message); - g_hash_table_insert(goffline_messages, g_strdup(who), messages); - } + /* is the recipient online? */ + to = get_matrixprpl_gc(who); + if (to) { /* yes, send */ + serv_got_im(to, from_username, message, receive_flags, time(NULL)); + + } else { /* nope, store as an offline message */ + GOfflineMessage *offline_message; + GList *messages; + + purple_debug_info("matrixprpl", + "%s is offline, sending as offline message\n", who); + offline_message = g_new0(GOfflineMessage, 1); + offline_message->from = g_strdup(from_username); + offline_message->message = g_strdup(message); + offline_message->mtime = time(NULL); + offline_message->flags = receive_flags; + + messages = g_hash_table_lookup(goffline_messages, who); + messages = g_list_append(messages, offline_message); + g_hash_table_insert(goffline_messages, g_strdup(who), messages); + } - return 1; + return 1; } static void matrixprpl_set_info(PurpleConnection *gc, const char *info) { - purple_debug_info("matrixprpl", "setting %s's user info to %s\n", - gc->account->username, info); + purple_debug_info("matrixprpl", "setting %s's user info to %s\n", + gc->account->username, info); } static const char *typing_state_to_string(PurpleTypingState typing) { - switch (typing) { - case PURPLE_NOT_TYPING: return "is not typing"; - case PURPLE_TYPING: return "is typing"; - case PURPLE_TYPED: return "stopped typing momentarily"; - default: return "unknown typing state"; - } + switch (typing) { + case PURPLE_NOT_TYPING: return "is not typing"; + case PURPLE_TYPING: return "is typing"; + case PURPLE_TYPED: return "stopped typing momentarily"; + default: return "unknown typing state"; + } } static void notify_typing(PurpleConnection *from, PurpleConnection *to, gpointer typing) { - const char *from_username = from->account->username; - const char *action = typing_state_to_string((PurpleTypingState)typing); - purple_debug_info("matrixprpl", "notifying %s that %s %s\n", - to->account->username, from_username, action); + const char *from_username = from->account->username; + const char *action = typing_state_to_string((PurpleTypingState)typing); + purple_debug_info("matrixprpl", "notifying %s that %s %s\n", + to->account->username, from_username, action); - serv_got_typing(to, - from_username, - 0, /* if non-zero, a timeout in seconds after which to - * reset the typing status to PURPLE_NOT_TYPING */ - (PurpleTypingState)typing); + serv_got_typing(to, + from_username, + 0, /* if non-zero, a timeout in seconds after which to + * reset the typing status to PURPLE_NOT_TYPING */ + (PurpleTypingState)typing); } static unsigned int matrixprpl_send_typing(PurpleConnection *gc, const char *name, - PurpleTypingState typing) { - purple_debug_info("matrixprpl", "%s %s\n", gc->account->username, - typing_state_to_string(typing)); - foreach_matrixprpl_gc(notify_typing, gc, (gpointer)typing); - return 0; + PurpleTypingState typing) { + purple_debug_info("matrixprpl", "%s %s\n", gc->account->username, + typing_state_to_string(typing)); + foreach_matrixprpl_gc(notify_typing, gc, (gpointer)typing); + return 0; } static void matrixprpl_get_info(PurpleConnection *gc, const char *username) { - const char *body; - PurpleNotifyUserInfo *info = purple_notify_user_info_new(); - PurpleAccount *acct; + const char *body; + PurpleNotifyUserInfo *info = purple_notify_user_info_new(); + PurpleAccount *acct; - purple_debug_info("matrixprpl", "Fetching %s's user info for %s\n", username, - gc->account->username); + purple_debug_info("matrixprpl", "Fetching %s's user info for %s\n", username, + gc->account->username); - if (!get_matrixprpl_gc(username)) { - char *msg = g_strdup_printf(_("%s is not logged in."), username); - purple_notify_error(gc, _("User Info"), _("User info not available. "), msg); - g_free(msg); - } + if (!get_matrixprpl_gc(username)) { + char *msg = g_strdup_printf(_("%s is not logged in."), username); + purple_notify_error(gc, _("User Info"), _("User info not available. "), msg); + g_free(msg); + } - acct = purple_accounts_find(username, PRPL_ID); - if (acct) - body = purple_account_get_user_info(acct); - else - body = _("No user info."); - purple_notify_user_info_add_pair(info, "Info", body); + acct = purple_accounts_find(username, PRPL_ID); + if (acct) + body = purple_account_get_user_info(acct); + else + body = _("No user info."); + purple_notify_user_info_add_pair(info, "Info", body); - /* show a buddy's user info in a nice dialog box */ - purple_notify_userinfo(gc, /* connection the buddy info came through */ - username, /* buddy's username */ - info, /* body */ - NULL, /* callback called when dialog closed */ - NULL); /* userdata for callback */ + /* show a buddy's user info in a nice dialog box */ + purple_notify_userinfo(gc, /* connection the buddy info came through */ + username, /* buddy's username */ + info, /* body */ + NULL, /* callback called when dialog closed */ + NULL); /* userdata for callback */ } static void matrixprpl_set_status(PurpleAccount *acct, PurpleStatus *status) { - const char *msg = purple_status_get_attr_string(status, "message"); - purple_debug_info("matrixprpl", "setting %s's status to %s: %s\n", - acct->username, purple_status_get_name(status), msg); + const char *msg = purple_status_get_attr_string(status, "message"); + purple_debug_info("matrixprpl", "setting %s's status to %s: %s\n", + acct->username, purple_status_get_name(status), msg); - foreach_matrixprpl_gc(report_status_change, get_matrixprpl_gc(acct->username), - NULL); + foreach_matrixprpl_gc(report_status_change, get_matrixprpl_gc(acct->username), + NULL); } static void matrixprpl_set_idle(PurpleConnection *gc, int idletime) { - purple_debug_info("matrixprpl", - "purple reports that %s has been idle for %d seconds\n", - gc->account->username, idletime); + purple_debug_info("matrixprpl", + "purple reports that %s has been idle for %d seconds\n", + gc->account->username, idletime); } static void matrixprpl_change_passwd(PurpleConnection *gc, const char *old_pass, - const char *new_pass) { - purple_debug_info("matrixprpl", "%s wants to change their password\n", - gc->account->username); + const char *new_pass) { + purple_debug_info("matrixprpl", "%s wants to change their password\n", + gc->account->username); } static void matrixprpl_add_buddy(PurpleConnection *gc, PurpleBuddy *buddy, - PurpleGroup *group) + PurpleGroup *group) { - const char *username = gc->account->username; - PurpleConnection *buddy_gc = get_matrixprpl_gc(buddy->name); - - purple_debug_info("matrixprpl", "adding %s to %s's buddy list\n", buddy->name, - username); - - if (buddy_gc) { - PurpleAccount *buddy_acct = buddy_gc->account; - - discover_status(gc, buddy_gc, NULL); - - if (purple_find_buddy(buddy_acct, username)) { - purple_debug_info("matrixprpl", "%s is already on %s's buddy list\n", - username, buddy->name); - } else { - purple_debug_info("matrixprpl", "asking %s if they want to add %s\n", - buddy->name, username); - purple_account_request_add(buddy_acct, - username, - NULL, /* local account id (rarely used) */ - NULL, /* alias */ - NULL); /* message */ + const char *username = gc->account->username; + PurpleConnection *buddy_gc = get_matrixprpl_gc(buddy->name); + + purple_debug_info("matrixprpl", "adding %s to %s's buddy list\n", buddy->name, + username); + + if (buddy_gc) { + PurpleAccount *buddy_acct = buddy_gc->account; + + discover_status(gc, buddy_gc, NULL); + + if (purple_find_buddy(buddy_acct, username)) { + purple_debug_info("matrixprpl", "%s is already on %s's buddy list\n", + username, buddy->name); + } else { + purple_debug_info("matrixprpl", "asking %s if they want to add %s\n", + buddy->name, username); + purple_account_request_add(buddy_acct, + username, + NULL, /* local account id (rarely used) */ + NULL, /* alias */ + NULL); /* message */ + } } - } } static void matrixprpl_add_buddies(PurpleConnection *gc, GList *buddies, - GList *groups) { - GList *buddy = buddies; - GList *group = groups; + GList *groups) { + GList *buddy = buddies; + GList *group = groups; - purple_debug_info("matrixprpl", "adding multiple buddies\n"); + purple_debug_info("matrixprpl", "adding multiple buddies\n"); - while (buddy && group) { - matrixprpl_add_buddy(gc, (PurpleBuddy *)buddy->data, (PurpleGroup *)group->data); - buddy = g_list_next(buddy); - group = g_list_next(group); - } + while (buddy && group) { + matrixprpl_add_buddy(gc, (PurpleBuddy *)buddy->data, (PurpleGroup *)group->data); + buddy = g_list_next(buddy); + group = g_list_next(group); + } } static void matrixprpl_remove_buddy(PurpleConnection *gc, PurpleBuddy *buddy, - PurpleGroup *group) + PurpleGroup *group) { - purple_debug_info("matrixprpl", "removing %s from %s's buddy list\n", - buddy->name, gc->account->username); + purple_debug_info("matrixprpl", "removing %s from %s's buddy list\n", + buddy->name, gc->account->username); } static void matrixprpl_remove_buddies(PurpleConnection *gc, GList *buddies, - GList *groups) { - GList *buddy = buddies; - GList *group = groups; + GList *groups) { + GList *buddy = buddies; + GList *group = groups; - purple_debug_info("matrixprpl", "removing multiple buddies\n"); + purple_debug_info("matrixprpl", "removing multiple buddies\n"); - while (buddy && group) { - matrixprpl_remove_buddy(gc, (PurpleBuddy *)buddy->data, - (PurpleGroup *)group->data); - buddy = g_list_next(buddy); - group = g_list_next(group); - } + while (buddy && group) { + matrixprpl_remove_buddy(gc, (PurpleBuddy *)buddy->data, + (PurpleGroup *)group->data); + buddy = g_list_next(buddy); + group = g_list_next(group); + } } /* @@ -584,427 +584,427 @@ static void matrixprpl_remove_buddies(PurpleConnection *gc, GList *buddies, * allowed or blocked. */ static void matrixprpl_add_permit(PurpleConnection *gc, const char *name) { - purple_debug_info("matrixprpl", "%s adds %s to their allowed list\n", - gc->account->username, name); + purple_debug_info("matrixprpl", "%s adds %s to their allowed list\n", + gc->account->username, name); } static void matrixprpl_add_deny(PurpleConnection *gc, const char *name) { - purple_debug_info("matrixprpl", "%s adds %s to their blocked list\n", - gc->account->username, name); + purple_debug_info("matrixprpl", "%s adds %s to their blocked list\n", + gc->account->username, name); } static void matrixprpl_rem_permit(PurpleConnection *gc, const char *name) { - purple_debug_info("matrixprpl", "%s removes %s from their allowed list\n", - gc->account->username, name); + purple_debug_info("matrixprpl", "%s removes %s from their allowed list\n", + gc->account->username, name); } static void matrixprpl_rem_deny(PurpleConnection *gc, const char *name) { - purple_debug_info("matrixprpl", "%s removes %s from their blocked list\n", - gc->account->username, name); + purple_debug_info("matrixprpl", "%s removes %s from their blocked list\n", + gc->account->username, name); } static void matrixprpl_set_permit_deny(PurpleConnection *gc) { - /* this is for synchronizing the local black/whitelist with the server. - * for matrixprpl, it's a noop. - */ + /* this is for synchronizing the local black/whitelist with the server. + * for matrixprpl, it's a noop. + */ } static void joined_chat(PurpleConvChat *from, PurpleConvChat *to, int id, const char *room, gpointer userdata) { - /* tell their chat window that we joined */ - purple_debug_info("matrixprpl", "%s sees that %s joined chat room %s\n", - to->nick, from->nick, room); - purple_conv_chat_add_user(to, - from->nick, - NULL, /* user-provided join message, IRC style */ - PURPLE_CBFLAGS_NONE, - TRUE); /* show a join message */ - - if (from != to) { - /* add them to our chat window */ - purple_debug_info("matrixprpl", "%s sees that %s is in chat room %s\n", - from->nick, to->nick, room); - purple_conv_chat_add_user(from, - to->nick, + /* tell their chat window that we joined */ + purple_debug_info("matrixprpl", "%s sees that %s joined chat room %s\n", + to->nick, from->nick, room); + purple_conv_chat_add_user(to, + from->nick, NULL, /* user-provided join message, IRC style */ PURPLE_CBFLAGS_NONE, - FALSE); /* show a join message */ - } + TRUE); /* show a join message */ + + if (from != to) { + /* add them to our chat window */ + purple_debug_info("matrixprpl", "%s sees that %s is in chat room %s\n", + from->nick, to->nick, room); + purple_conv_chat_add_user(from, + to->nick, + NULL, /* user-provided join message, IRC style */ + PURPLE_CBFLAGS_NONE, + FALSE); /* show a join message */ + } } static void matrixprpl_join_chat(PurpleConnection *gc, GHashTable *components) { - const char *username = gc->account->username; - const char *room = g_hash_table_lookup(components, "room"); - int chat_id = g_str_hash(room); - purple_debug_info("matrixprpl", "%s is joining chat room %s\n", username, room); - - if (!purple_find_chat(gc, chat_id)) { - serv_got_joined_chat(gc, chat_id, room); - - /* tell everyone that we joined, and add them if they're already there */ - foreach_gc_in_chat(joined_chat, gc, chat_id, NULL); - } else { - char *tmp = g_strdup_printf(_("%s is already in chat room %s."), - username, - room); - purple_debug_info("matrixprpl", "%s is already in chat room %s\n", username, - room); - purple_notify_info(gc, _("Join chat"), _("Join chat"), tmp); - g_free(tmp); - } + const char *username = gc->account->username; + const char *room = g_hash_table_lookup(components, "room"); + int chat_id = g_str_hash(room); + purple_debug_info("matrixprpl", "%s is joining chat room %s\n", username, room); + + if (!purple_find_chat(gc, chat_id)) { + serv_got_joined_chat(gc, chat_id, room); + + /* tell everyone that we joined, and add them if they're already there */ + foreach_gc_in_chat(joined_chat, gc, chat_id, NULL); + } else { + char *tmp = g_strdup_printf(_("%s is already in chat room %s."), + username, + room); + purple_debug_info("matrixprpl", "%s is already in chat room %s\n", username, + room); + purple_notify_info(gc, _("Join chat"), _("Join chat"), tmp); + g_free(tmp); + } } static void matrixprpl_reject_chat(PurpleConnection *gc, GHashTable *components) { - const char *invited_by = g_hash_table_lookup(components, "invited_by"); - const char *room = g_hash_table_lookup(components, "room"); - const char *username = gc->account->username; - PurpleConnection *invited_by_gc = get_matrixprpl_gc(invited_by); - char *message = g_strdup_printf( - "%s %s %s.", - username, - _("has rejected your invitation to join the chat room"), - room); - - purple_debug_info("matrixprpl", - "%s has rejected %s's invitation to join chat room %s\n", - username, invited_by, room); - - purple_notify_info(invited_by_gc, - _("Chat invitation rejected"), - _("Chat invitation rejected"), - message); - g_free(message); + const char *invited_by = g_hash_table_lookup(components, "invited_by"); + const char *room = g_hash_table_lookup(components, "room"); + const char *username = gc->account->username; + PurpleConnection *invited_by_gc = get_matrixprpl_gc(invited_by); + char *message = g_strdup_printf( + "%s %s %s.", + username, + _("has rejected your invitation to join the chat room"), + room); + + purple_debug_info("matrixprpl", + "%s has rejected %s's invitation to join chat room %s\n", + username, invited_by, room); + + purple_notify_info(invited_by_gc, + _("Chat invitation rejected"), + _("Chat invitation rejected"), + message); + g_free(message); } static char *matrixprpl_get_chat_name(GHashTable *components) { - const char *room = g_hash_table_lookup(components, "room"); - purple_debug_info("matrixprpl", "reporting chat room name '%s'\n", room); - return g_strdup(room); + const char *room = g_hash_table_lookup(components, "room"); + purple_debug_info("matrixprpl", "reporting chat room name '%s'\n", room); + return g_strdup(room); } static void matrixprpl_chat_invite(PurpleConnection *gc, int id, - const char *message, const char *who) { - const char *username = gc->account->username; - PurpleConversation *conv = purple_find_chat(gc, id); - const char *room = conv->name; - PurpleAccount *to_acct = purple_accounts_find(who, PRPL_ID); - - purple_debug_info("matrixprpl", "%s is inviting %s to join chat room %s\n", - username, who, room); - - if (to_acct) { - PurpleConversation *to_conv = purple_find_chat(to_acct->gc, id); - if (to_conv) { - char *tmp = g_strdup_printf("%s is already in chat room %s.", who, room); - purple_debug_info("matrixprpl", - "%s is already in chat room %s; " - "ignoring invitation from %s\n", - who, room, username); - purple_notify_info(gc, _("Chat invitation"), _("Chat invitation"), tmp); - g_free(tmp); - } else { - GHashTable *components; - components = g_hash_table_new_full(g_str_hash, g_str_equal, NULL, g_free); - g_hash_table_replace(components, "room", g_strdup(room)); - g_hash_table_replace(components, "invited_by", g_strdup(username)); - serv_got_chat_invite(to_acct->gc, room, username, message, components); + const char *message, const char *who) { + const char *username = gc->account->username; + PurpleConversation *conv = purple_find_chat(gc, id); + const char *room = conv->name; + PurpleAccount *to_acct = purple_accounts_find(who, PRPL_ID); + + purple_debug_info("matrixprpl", "%s is inviting %s to join chat room %s\n", + username, who, room); + + if (to_acct) { + PurpleConversation *to_conv = purple_find_chat(to_acct->gc, id); + if (to_conv) { + char *tmp = g_strdup_printf("%s is already in chat room %s.", who, room); + purple_debug_info("matrixprpl", + "%s is already in chat room %s; " + "ignoring invitation from %s\n", + who, room, username); + purple_notify_info(gc, _("Chat invitation"), _("Chat invitation"), tmp); + g_free(tmp); + } else { + GHashTable *components; + components = g_hash_table_new_full(g_str_hash, g_str_equal, NULL, g_free); + g_hash_table_replace(components, "room", g_strdup(room)); + g_hash_table_replace(components, "invited_by", g_strdup(username)); + serv_got_chat_invite(to_acct->gc, room, username, message, components); + } } - } } static void left_chat_room(PurpleConvChat *from, PurpleConvChat *to, int id, const char *room, gpointer userdata) { - if (from != to) { - /* tell their chat window that we left */ - purple_debug_info("matrixprpl", "%s sees that %s left chat room %s\n", - to->nick, from->nick, room); - purple_conv_chat_remove_user(to, - from->nick, - NULL); /* user-provided message, IRC style */ - } + if (from != to) { + /* tell their chat window that we left */ + purple_debug_info("matrixprpl", "%s sees that %s left chat room %s\n", + to->nick, from->nick, room); + purple_conv_chat_remove_user(to, + from->nick, + NULL); /* user-provided message, IRC style */ + } } static void matrixprpl_chat_leave(PurpleConnection *gc, int id) { - PurpleConversation *conv = purple_find_chat(gc, id); - purple_debug_info("matrixprpl", "%s is leaving chat room %s\n", - gc->account->username, conv->name); + PurpleConversation *conv = purple_find_chat(gc, id); + purple_debug_info("matrixprpl", "%s is leaving chat room %s\n", + gc->account->username, conv->name); - /* tell everyone that we left */ - foreach_gc_in_chat(left_chat_room, gc, id, NULL); + /* tell everyone that we left */ + foreach_gc_in_chat(left_chat_room, gc, id, NULL); } static PurpleCmdRet send_whisper(PurpleConversation *conv, const gchar *cmd, gchar **args, gchar **error, void *userdata) { - const char *to_username; - const char *message; - const char *from_username; - PurpleConvChat *chat; - PurpleConvChatBuddy *chat_buddy; - PurpleConnection *to; - - /* parse args */ - to_username = args[0]; - message = args[1]; - - if (!to_username || strlen(to_username) == 0) { - *error = g_strdup(_("Whisper is missing recipient.")); - return PURPLE_CMD_RET_FAILED; - } else if (!message || strlen(message) == 0) { - *error = g_strdup(_("Whisper is missing message.")); - return PURPLE_CMD_RET_FAILED; - } - - from_username = conv->account->username; - purple_debug_info("matrixprpl", "%s whispers to %s in chat room %s: %s\n", - from_username, to_username, conv->name, message); - - chat = purple_conversation_get_chat_data(conv); - chat_buddy = purple_conv_chat_cb_find(chat, to_username); - to = get_matrixprpl_gc(to_username); - - if (!chat_buddy) { - /* this will be freed by the caller */ - *error = g_strdup_printf(_("%s is not logged in."), to_username); - return PURPLE_CMD_RET_FAILED; - } else if (!to) { - *error = g_strdup_printf(_("%s is not in this chat room."), to_username); - return PURPLE_CMD_RET_FAILED; - } else { - /* write the whisper in the sender's chat window */ - char *message_to = g_strdup_printf("%s (to %s)", message, to_username); - purple_conv_chat_write(chat, from_username, message_to, - PURPLE_MESSAGE_SEND | PURPLE_MESSAGE_WHISPER, - time(NULL)); - g_free(message_to); + const char *to_username; + const char *message; + const char *from_username; + PurpleConvChat *chat; + PurpleConvChatBuddy *chat_buddy; + PurpleConnection *to; + + /* parse args */ + to_username = args[0]; + message = args[1]; + + if (!to_username || strlen(to_username) == 0) { + *error = g_strdup(_("Whisper is missing recipient.")); + return PURPLE_CMD_RET_FAILED; + } else if (!message || strlen(message) == 0) { + *error = g_strdup(_("Whisper is missing message.")); + return PURPLE_CMD_RET_FAILED; + } + + from_username = conv->account->username; + purple_debug_info("matrixprpl", "%s whispers to %s in chat room %s: %s\n", + from_username, to_username, conv->name, message); + + chat = purple_conversation_get_chat_data(conv); + chat_buddy = purple_conv_chat_cb_find(chat, to_username); + to = get_matrixprpl_gc(to_username); + + if (!chat_buddy) { + /* this will be freed by the caller */ + *error = g_strdup_printf(_("%s is not logged in."), to_username); + return PURPLE_CMD_RET_FAILED; + } else if (!to) { + *error = g_strdup_printf(_("%s is not in this chat room."), to_username); + return PURPLE_CMD_RET_FAILED; + } else { + /* write the whisper in the sender's chat window */ + char *message_to = g_strdup_printf("%s (to %s)", message, to_username); + purple_conv_chat_write(chat, from_username, message_to, + PURPLE_MESSAGE_SEND | PURPLE_MESSAGE_WHISPER, + time(NULL)); + g_free(message_to); - /* send the whisper */ - serv_chat_whisper(to, chat->id, from_username, message); + /* send the whisper */ + serv_chat_whisper(to, chat->id, from_username, message); - return PURPLE_CMD_RET_OK; - } + return PURPLE_CMD_RET_OK; + } } static void matrixprpl_chat_whisper(PurpleConnection *gc, int id, const char *who, - const char *message) { - const char *username = gc->account->username; - PurpleConversation *conv = purple_find_chat(gc, id); - purple_debug_info("matrixprpl", - "%s receives whisper from %s in chat room %s: %s\n", - username, who, conv->name, message); + const char *message) { + const char *username = gc->account->username; + PurpleConversation *conv = purple_find_chat(gc, id); + purple_debug_info("matrixprpl", + "%s receives whisper from %s in chat room %s: %s\n", + username, who, conv->name, message); - /* receive whisper on recipient's account */ - serv_got_chat_in(gc, id, who, PURPLE_MESSAGE_RECV | PURPLE_MESSAGE_WHISPER, - message, time(NULL)); + /* receive whisper on recipient's account */ + serv_got_chat_in(gc, id, who, PURPLE_MESSAGE_RECV | PURPLE_MESSAGE_WHISPER, + message, time(NULL)); } static void receive_chat_message(PurpleConvChat *from, PurpleConvChat *to, int id, const char *room, gpointer userdata) { - const char *message = (const char *)userdata; - PurpleConnection *to_gc = get_matrixprpl_gc(to->nick); + const char *message = (const char *)userdata; + PurpleConnection *to_gc = get_matrixprpl_gc(to->nick); - purple_debug_info("matrixprpl", - "%s receives message from %s in chat room %s: %s\n", - to->nick, from->nick, room, message); - serv_got_chat_in(to_gc, id, from->nick, PURPLE_MESSAGE_RECV, message, - time(NULL)); + purple_debug_info("matrixprpl", + "%s receives message from %s in chat room %s: %s\n", + to->nick, from->nick, room, message); + serv_got_chat_in(to_gc, id, from->nick, PURPLE_MESSAGE_RECV, message, + time(NULL)); } static int matrixprpl_chat_send(PurpleConnection *gc, int id, const char *message, - PurpleMessageFlags flags) { - const char *username = gc->account->username; - PurpleConversation *conv = purple_find_chat(gc, id); - - if (conv) { - purple_debug_info("matrixprpl", - "%s is sending message to chat room %s: %s\n", username, - conv->name, message); - - /* send message to everyone in the chat room */ - foreach_gc_in_chat(receive_chat_message, gc, id, (gpointer)message); - return 0; - } else { - purple_debug_info("matrixprpl", - "tried to send message from %s to chat room #%d: %s\n" - "but couldn't find chat room", - username, id, message); - return -1; - } + PurpleMessageFlags flags) { + const char *username = gc->account->username; + PurpleConversation *conv = purple_find_chat(gc, id); + + if (conv) { + purple_debug_info("matrixprpl", + "%s is sending message to chat room %s: %s\n", username, + conv->name, message); + + /* send message to everyone in the chat room */ + foreach_gc_in_chat(receive_chat_message, gc, id, (gpointer)message); + return 0; + } else { + purple_debug_info("matrixprpl", + "tried to send message from %s to chat room #%d: %s\n" + "but couldn't find chat room", + username, id, message); + return -1; + } } static void matrixprpl_register_user(PurpleAccount *acct) { - purple_debug_info("matrixprpl", "registering account for %s\n", - acct->username); + purple_debug_info("matrixprpl", "registering account for %s\n", + acct->username); } static void matrixprpl_get_cb_info(PurpleConnection *gc, int id, const char *who) { - PurpleConversation *conv = purple_find_chat(gc, id); - purple_debug_info("matrixprpl", - "retrieving %s's info for %s in chat room %s\n", who, - gc->account->username, conv->name); + PurpleConversation *conv = purple_find_chat(gc, id); + purple_debug_info("matrixprpl", + "retrieving %s's info for %s in chat room %s\n", who, + gc->account->username, conv->name); - matrixprpl_get_info(gc, who); + matrixprpl_get_info(gc, who); } static void matrixprpl_alias_buddy(PurpleConnection *gc, const char *who, - const char *alias) { - purple_debug_info("matrixprpl", "%s sets %s's alias to %s\n", - gc->account->username, who, alias); + const char *alias) { + purple_debug_info("matrixprpl", "%s sets %s's alias to %s\n", + gc->account->username, who, alias); } static void matrixprpl_group_buddy(PurpleConnection *gc, const char *who, - const char *old_group, - const char *new_group) { - purple_debug_info("matrixprpl", "%s has moved %s from group %s to group %s\n", - gc->account->username, who, old_group, new_group); + const char *old_group, + const char *new_group) { + purple_debug_info("matrixprpl", "%s has moved %s from group %s to group %s\n", + gc->account->username, who, old_group, new_group); } static void matrixprpl_rename_group(PurpleConnection *gc, const char *old_name, - PurpleGroup *group, GList *moved_buddies) { - purple_debug_info("matrixprpl", "%s has renamed group %s to %s\n", - gc->account->username, old_name, group->name); + PurpleGroup *group, GList *moved_buddies) { + purple_debug_info("matrixprpl", "%s has renamed group %s to %s\n", + gc->account->username, old_name, group->name); } static void matrixprpl_convo_closed(PurpleConnection *gc, const char *who) { - purple_debug_info("matrixprpl", "%s's conversation with %s was closed\n", - gc->account->username, who); + purple_debug_info("matrixprpl", "%s's conversation with %s was closed\n", + gc->account->username, who); } /* normalize a username (e.g. remove whitespace, add default domain, etc.) * for matrixprpl, this is a noop. */ static const char *matrixprpl_normalize(const PurpleAccount *acct, - const char *input) { - return NULL; + const char *input) { + return NULL; } static void matrixprpl_set_buddy_icon(PurpleConnection *gc, - PurpleStoredImage *img) { - purple_debug_info("matrixprpl", "setting %s's buddy icon to %s\n", - gc->account->username, - img ? purple_imgstore_get_filename(img) : "(matrix)"); + PurpleStoredImage *img) { + purple_debug_info("matrixprpl", "setting %s's buddy icon to %s\n", + gc->account->username, + img ? purple_imgstore_get_filename(img) : "(matrix)"); } static void matrixprpl_remove_group(PurpleConnection *gc, PurpleGroup *group) { - purple_debug_info("matrixprpl", "%s has removed group %s\n", - gc->account->username, group->name); + purple_debug_info("matrixprpl", "%s has removed group %s\n", + gc->account->username, group->name); } static void set_chat_topic_fn(PurpleConvChat *from, PurpleConvChat *to, int id, const char *room, gpointer userdata) { - const char *topic = (const char *)userdata; - const char *username = from->conv->account->username; - char *msg; + const char *topic = (const char *)userdata; + const char *username = from->conv->account->username; + char *msg; - purple_conv_chat_set_topic(to, username, topic); + purple_conv_chat_set_topic(to, username, topic); - if (topic && strlen(topic) > 0) - msg = g_strdup_printf(_("%s sets topic to: %s"), username, topic); - else - msg = g_strdup_printf(_("%s clears topic"), username); + if (topic && strlen(topic) > 0) + msg = g_strdup_printf(_("%s sets topic to: %s"), username, topic); + else + msg = g_strdup_printf(_("%s clears topic"), username); - purple_conv_chat_write(to, username, msg, - PURPLE_MESSAGE_SYSTEM | PURPLE_MESSAGE_NO_LOG, - time(NULL)); - g_free(msg); + purple_conv_chat_write(to, username, msg, + PURPLE_MESSAGE_SYSTEM | PURPLE_MESSAGE_NO_LOG, + time(NULL)); + g_free(msg); } static void matrixprpl_set_chat_topic(PurpleConnection *gc, int id, - const char *topic) { - PurpleConversation *conv = purple_find_chat(gc, id); - PurpleConvChat *chat = purple_conversation_get_chat_data(conv); - const char *last_topic; + const char *topic) { + PurpleConversation *conv = purple_find_chat(gc, id); + PurpleConvChat *chat = purple_conversation_get_chat_data(conv); + const char *last_topic; - if (!chat) - return; + if (!chat) + return; - purple_debug_info("matrixprpl", "%s sets topic of chat room '%s' to '%s'\n", - gc->account->username, conv->name, topic); + purple_debug_info("matrixprpl", "%s sets topic of chat room '%s' to '%s'\n", + gc->account->username, conv->name, topic); - last_topic = purple_conv_chat_get_topic(chat); - if ((!topic && !last_topic) || - (topic && last_topic && !strcmp(topic, last_topic))) - return; /* topic is unchanged, this is a noop */ + last_topic = purple_conv_chat_get_topic(chat); + if ((!topic && !last_topic) || + (topic && last_topic && !strcmp(topic, last_topic))) + return; /* topic is unchanged, this is a noop */ - foreach_gc_in_chat(set_chat_topic_fn, gc, id, (gpointer)topic); + foreach_gc_in_chat(set_chat_topic_fn, gc, id, (gpointer)topic); } static gboolean matrixprpl_finish_get_roomlist(gpointer roomlist) { - purple_roomlist_set_in_progress((PurpleRoomlist *)roomlist, FALSE); - return FALSE; + purple_roomlist_set_in_progress((PurpleRoomlist *)roomlist, FALSE); + return FALSE; } static PurpleRoomlist *matrixprpl_roomlist_get_list(PurpleConnection *gc) { - const char *username = gc->account->username; - PurpleRoomlist *roomlist = purple_roomlist_new(gc->account); - GList *fields = NULL; - PurpleRoomlistField *field; - GList *chats; - GList *seen_ids = NULL; - - purple_debug_info("matrixprpl", "%s asks for room list; returning:\n", username); - - /* set up the room list */ - field = purple_roomlist_field_new(PURPLE_ROOMLIST_FIELD_STRING, "room", - "room", TRUE /* hidden */); - fields = g_list_append(fields, field); - - field = purple_roomlist_field_new(PURPLE_ROOMLIST_FIELD_INT, "Id", "Id", FALSE); - fields = g_list_append(fields, field); - - purple_roomlist_set_fields(roomlist, fields); - - /* add each chat room. the chat ids are cached in seen_ids so that each room - * is only returned once, even if multiple users are in it. */ - for (chats = purple_get_chats(); chats; chats = g_list_next(chats)) { - PurpleConversation *conv = (PurpleConversation *)chats->data; - PurpleRoomlistRoom *room; - const char *name = conv->name; - int id = purple_conversation_get_chat_data(conv)->id; - - /* have we already added this room? */ - if (g_list_find_custom(seen_ids, name, (GCompareFunc)strcmp)) - continue; /* yes! try the next one. */ - - /* This cast is OK because this list is only staying around for the life - * of this function and none of the conversations are being deleted - * in that timespan. */ - seen_ids = g_list_prepend(seen_ids, (char *)name); /* no, it's new. */ - purple_debug_info("matrixprpl", "%s (%d), ", name, id); - - room = purple_roomlist_room_new(PURPLE_ROOMLIST_ROOMTYPE_ROOM, name, NULL); - purple_roomlist_room_add_field(roomlist, room, name); - purple_roomlist_room_add_field(roomlist, room, &id); - purple_roomlist_room_add(roomlist, room); - } - - g_list_free(seen_ids); - purple_timeout_add(1 /* ms */, matrixprpl_finish_get_roomlist, roomlist); - return roomlist; + const char *username = gc->account->username; + PurpleRoomlist *roomlist = purple_roomlist_new(gc->account); + GList *fields = NULL; + PurpleRoomlistField *field; + GList *chats; + GList *seen_ids = NULL; + + purple_debug_info("matrixprpl", "%s asks for room list; returning:\n", username); + + /* set up the room list */ + field = purple_roomlist_field_new(PURPLE_ROOMLIST_FIELD_STRING, "room", + "room", TRUE /* hidden */); + fields = g_list_append(fields, field); + + field = purple_roomlist_field_new(PURPLE_ROOMLIST_FIELD_INT, "Id", "Id", FALSE); + fields = g_list_append(fields, field); + + purple_roomlist_set_fields(roomlist, fields); + + /* add each chat room. the chat ids are cached in seen_ids so that each room + * is only returned once, even if multiple users are in it. */ + for (chats = purple_get_chats(); chats; chats = g_list_next(chats)) { + PurpleConversation *conv = (PurpleConversation *)chats->data; + PurpleRoomlistRoom *room; + const char *name = conv->name; + int id = purple_conversation_get_chat_data(conv)->id; + + /* have we already added this room? */ + if (g_list_find_custom(seen_ids, name, (GCompareFunc)strcmp)) + continue; /* yes! try the next one. */ + + /* This cast is OK because this list is only staying around for the life + * of this function and none of the conversations are being deleted + * in that timespan. */ + seen_ids = g_list_prepend(seen_ids, (char *)name); /* no, it's new. */ + purple_debug_info("matrixprpl", "%s (%d), ", name, id); + + room = purple_roomlist_room_new(PURPLE_ROOMLIST_ROOMTYPE_ROOM, name, NULL); + purple_roomlist_room_add_field(roomlist, room, name); + purple_roomlist_room_add_field(roomlist, room, &id); + purple_roomlist_room_add(roomlist, room); + } + + g_list_free(seen_ids); + purple_timeout_add(1 /* ms */, matrixprpl_finish_get_roomlist, roomlist); + return roomlist; } static void matrixprpl_roomlist_cancel(PurpleRoomlist *list) { - purple_debug_info("matrixprpl", "%s asked to cancel room list request\n", - list->account->username); + purple_debug_info("matrixprpl", "%s asked to cancel room list request\n", + list->account->username); } static void matrixprpl_roomlist_expand_category(PurpleRoomlist *list, - PurpleRoomlistRoom *category) { - purple_debug_info("matrixprpl", "%s asked to expand room list category %s\n", - list->account->username, category->name); + PurpleRoomlistRoom *category) { + purple_debug_info("matrixprpl", "%s asked to expand room list category %s\n", + list->account->username, category->name); } /* matrixprpl doesn't support file transfer...yet... */ static gboolean matrixprpl_can_receive_file(PurpleConnection *gc, - const char *who) { - return FALSE; + const char *who) { + return FALSE; } static gboolean matrixprpl_offline_message(const PurpleBuddy *buddy) { - purple_debug_info("matrixprpl", - "reporting that offline messages are supported for %s\n", - buddy->name); - return TRUE; + purple_debug_info("matrixprpl", + "reporting that offline messages are supported for %s\n", + buddy->name); + return TRUE; } @@ -1014,159 +1014,159 @@ static gboolean matrixprpl_offline_message(const PurpleBuddy *buddy) { static PurplePluginProtocolInfo prpl_info = { - OPT_PROTO_NO_PASSWORD | OPT_PROTO_CHAT_TOPIC, /* options */ - NULL, /* user_splits, initialized in matrixprpl_init() */ - NULL, /* protocol_options, initialized in matrixprpl_init() */ - { /* icon_spec, a PurpleBuddyIconSpec */ - "png,jpg,gif", /* format */ - 0, /* min_width */ - 0, /* min_height */ - 128, /* max_width */ - 128, /* max_height */ - 10000, /* max_filesize */ - PURPLE_ICON_SCALE_DISPLAY, /* scale_rules */ - }, - matrixprpl_list_icon, /* list_icon */ - NULL, /* list_emblem */ - matrixprpl_status_text, /* status_text */ - matrixprpl_tooltip_text, /* tooltip_text */ - matrixprpl_status_types, /* status_types */ - matrixprpl_blist_node_menu, /* blist_node_menu */ - matrixprpl_chat_info, /* chat_info */ - matrixprpl_chat_info_defaults, /* chat_info_defaults */ - matrixprpl_login, /* login */ - matrixprpl_close, /* close */ - matrixprpl_send_im, /* send_im */ - matrixprpl_set_info, /* set_info */ - matrixprpl_send_typing, /* send_typing */ - matrixprpl_get_info, /* get_info */ - matrixprpl_set_status, /* set_status */ - matrixprpl_set_idle, /* set_idle */ - matrixprpl_change_passwd, /* change_passwd */ - matrixprpl_add_buddy, /* add_buddy */ - matrixprpl_add_buddies, /* add_buddies */ - matrixprpl_remove_buddy, /* remove_buddy */ - matrixprpl_remove_buddies, /* remove_buddies */ - matrixprpl_add_permit, /* add_permit */ - matrixprpl_add_deny, /* add_deny */ - matrixprpl_rem_permit, /* rem_permit */ - matrixprpl_rem_deny, /* rem_deny */ - matrixprpl_set_permit_deny, /* set_permit_deny */ - matrixprpl_join_chat, /* join_chat */ - matrixprpl_reject_chat, /* reject_chat */ - matrixprpl_get_chat_name, /* get_chat_name */ - matrixprpl_chat_invite, /* chat_invite */ - matrixprpl_chat_leave, /* chat_leave */ - matrixprpl_chat_whisper, /* chat_whisper */ - matrixprpl_chat_send, /* chat_send */ - NULL, /* keepalive */ - matrixprpl_register_user, /* register_user */ - matrixprpl_get_cb_info, /* get_cb_info */ - NULL, /* get_cb_away */ - matrixprpl_alias_buddy, /* alias_buddy */ - matrixprpl_group_buddy, /* group_buddy */ - matrixprpl_rename_group, /* rename_group */ - NULL, /* buddy_free */ - matrixprpl_convo_closed, /* convo_closed */ - matrixprpl_normalize, /* normalize */ - matrixprpl_set_buddy_icon, /* set_buddy_icon */ - matrixprpl_remove_group, /* remove_group */ - NULL, /* get_cb_real_name */ - matrixprpl_set_chat_topic, /* set_chat_topic */ - NULL, /* find_blist_chat */ - matrixprpl_roomlist_get_list, /* roomlist_get_list */ - matrixprpl_roomlist_cancel, /* roomlist_cancel */ - matrixprpl_roomlist_expand_category, /* roomlist_expand_category */ - matrixprpl_can_receive_file, /* can_receive_file */ - NULL, /* send_file */ - NULL, /* new_xfer */ - matrixprpl_offline_message, /* offline_message */ - NULL, /* whiteboard_prpl_ops */ - NULL, /* send_raw */ - NULL, /* roomlist_room_serialize */ - NULL, /* unregister_user */ - NULL, /* send_attention */ - NULL, /* get_attention_types */ - sizeof(PurplePluginProtocolInfo), /* struct_size */ - NULL, /* get_account_text_table */ - NULL, /* initiate_media */ - NULL, /* get_media_caps */ - NULL, /* get_moods */ - NULL, /* set_public_alias */ - NULL, /* get_public_alias */ - NULL, /* add_buddy_with_invite */ - NULL /* add_buddies_with_invite */ + OPT_PROTO_NO_PASSWORD | OPT_PROTO_CHAT_TOPIC, /* options */ + NULL, /* user_splits, initialized in matrixprpl_init() */ + NULL, /* protocol_options, initialized in matrixprpl_init() */ + { /* icon_spec, a PurpleBuddyIconSpec */ + "png,jpg,gif", /* format */ + 0, /* min_width */ + 0, /* min_height */ + 128, /* max_width */ + 128, /* max_height */ + 10000, /* max_filesize */ + PURPLE_ICON_SCALE_DISPLAY, /* scale_rules */ + }, + matrixprpl_list_icon, /* list_icon */ + NULL, /* list_emblem */ + matrixprpl_status_text, /* status_text */ + matrixprpl_tooltip_text, /* tooltip_text */ + matrixprpl_status_types, /* status_types */ + matrixprpl_blist_node_menu, /* blist_node_menu */ + matrixprpl_chat_info, /* chat_info */ + matrixprpl_chat_info_defaults, /* chat_info_defaults */ + matrixprpl_login, /* login */ + matrixprpl_close, /* close */ + matrixprpl_send_im, /* send_im */ + matrixprpl_set_info, /* set_info */ + matrixprpl_send_typing, /* send_typing */ + matrixprpl_get_info, /* get_info */ + matrixprpl_set_status, /* set_status */ + matrixprpl_set_idle, /* set_idle */ + matrixprpl_change_passwd, /* change_passwd */ + matrixprpl_add_buddy, /* add_buddy */ + matrixprpl_add_buddies, /* add_buddies */ + matrixprpl_remove_buddy, /* remove_buddy */ + matrixprpl_remove_buddies, /* remove_buddies */ + matrixprpl_add_permit, /* add_permit */ + matrixprpl_add_deny, /* add_deny */ + matrixprpl_rem_permit, /* rem_permit */ + matrixprpl_rem_deny, /* rem_deny */ + matrixprpl_set_permit_deny, /* set_permit_deny */ + matrixprpl_join_chat, /* join_chat */ + matrixprpl_reject_chat, /* reject_chat */ + matrixprpl_get_chat_name, /* get_chat_name */ + matrixprpl_chat_invite, /* chat_invite */ + matrixprpl_chat_leave, /* chat_leave */ + matrixprpl_chat_whisper, /* chat_whisper */ + matrixprpl_chat_send, /* chat_send */ + NULL, /* keepalive */ + matrixprpl_register_user, /* register_user */ + matrixprpl_get_cb_info, /* get_cb_info */ + NULL, /* get_cb_away */ + matrixprpl_alias_buddy, /* alias_buddy */ + matrixprpl_group_buddy, /* group_buddy */ + matrixprpl_rename_group, /* rename_group */ + NULL, /* buddy_free */ + matrixprpl_convo_closed, /* convo_closed */ + matrixprpl_normalize, /* normalize */ + matrixprpl_set_buddy_icon, /* set_buddy_icon */ + matrixprpl_remove_group, /* remove_group */ + NULL, /* get_cb_real_name */ + matrixprpl_set_chat_topic, /* set_chat_topic */ + NULL, /* find_blist_chat */ + matrixprpl_roomlist_get_list, /* roomlist_get_list */ + matrixprpl_roomlist_cancel, /* roomlist_cancel */ + matrixprpl_roomlist_expand_category, /* roomlist_expand_category */ + matrixprpl_can_receive_file, /* can_receive_file */ + NULL, /* send_file */ + NULL, /* new_xfer */ + matrixprpl_offline_message, /* offline_message */ + NULL, /* whiteboard_prpl_ops */ + NULL, /* send_raw */ + NULL, /* roomlist_room_serialize */ + NULL, /* unregister_user */ + NULL, /* send_attention */ + NULL, /* get_attention_types */ + sizeof(PurplePluginProtocolInfo), /* struct_size */ + NULL, /* get_account_text_table */ + NULL, /* initiate_media */ + NULL, /* get_media_caps */ + NULL, /* get_moods */ + NULL, /* set_public_alias */ + NULL, /* get_public_alias */ + NULL, /* add_buddy_with_invite */ + NULL /* add_buddies_with_invite */ }; static void matrixprpl_init(PurplePlugin *plugin) { - /* see accountopt.h for information about user splits and protocol options */ - PurpleAccountUserSplit *split = purple_account_user_split_new( - _("Example user split"), /* text shown to user */ - "default", /* default value */ - '@'); /* field separator */ - PurpleAccountOption *option = purple_account_option_string_new( - _("Example option"), /* text shown to user */ - "example", /* pref name */ - "default"); /* default value */ - - purple_debug_info("matrixprpl", "starting up\n"); - - prpl_info.user_splits = g_list_append(NULL, split); - prpl_info.protocol_options = g_list_append(NULL, option); - - /* register whisper chat command, /msg */ - purple_cmd_register("msg", - "ws", /* args: recipient and message */ - PURPLE_CMD_P_DEFAULT, /* priority */ - PURPLE_CMD_FLAG_CHAT, - "prpl-matrix", - send_whisper, - "msg <username> <message>: send a private message, aka a whisper", - NULL); /* userdata */ - - /* get ready to store offline messages */ - goffline_messages = g_hash_table_new_full(g_str_hash, /* hash fn */ - g_str_equal, /* key comparison fn */ - g_free, /* key free fn */ - NULL); /* value free fn */ - - _matrix_protocol = plugin; + /* see accountopt.h for information about user splits and protocol options */ + PurpleAccountUserSplit *split = purple_account_user_split_new( + _("Example user split"), /* text shown to user */ + "default", /* default value */ + '@'); /* field separator */ + PurpleAccountOption *option = purple_account_option_string_new( + _("Example option"), /* text shown to user */ + "example", /* pref name */ + "default"); /* default value */ + + purple_debug_info("matrixprpl", "starting up\n"); + + prpl_info.user_splits = g_list_append(NULL, split); + prpl_info.protocol_options = g_list_append(NULL, option); + + /* register whisper chat command, /msg */ + purple_cmd_register("msg", + "ws", /* args: recipient and message */ + PURPLE_CMD_P_DEFAULT, /* priority */ + PURPLE_CMD_FLAG_CHAT, + "prpl-matrix", + send_whisper, + "msg <username> <message>: send a private message, aka a whisper", + NULL); /* userdata */ + + /* get ready to store offline messages */ + goffline_messages = g_hash_table_new_full(g_str_hash, /* hash fn */ + g_str_equal, /* key comparison fn */ + g_free, /* key free fn */ + NULL); /* value free fn */ + + _matrix_protocol = plugin; } static void matrixprpl_destroy(PurplePlugin *plugin) { - purple_debug_info("matrixprpl", "shutting down\n"); + purple_debug_info("matrixprpl", "shutting down\n"); } static PurplePluginInfo info = { - PURPLE_PLUGIN_MAGIC, /* magic */ - PURPLE_MAJOR_VERSION, /* major_version */ - PURPLE_MINOR_VERSION, /* minor_version */ - PURPLE_PLUGIN_PROTOCOL, /* type */ - NULL, /* ui_requirement */ - 0, /* flags */ - NULL, /* dependencies */ - PURPLE_PRIORITY_DEFAULT, /* priority */ - PRPL_ID, /* id */ - "Matrix", /* name */ - DISPLAY_VERSION, /* version */ - N_("Matrix Protocol Plugin"), /* summary */ - N_("Matrix Protocol Plugin"), /* description */ - "Richard van der Hoff <richard@matrix.org>", /* author */ - MATRIX_WEBSITE, /* homepage */ - NULL, /* load */ - NULL, /* unload */ - matrixprpl_destroy, /* destroy */ - NULL, /* ui_info */ - &prpl_info, /* extra_info */ - NULL, /* prefs_info */ - matrixprpl_actions, /* actions */ - NULL, /* padding... */ - NULL, - NULL, - NULL, + PURPLE_PLUGIN_MAGIC, /* magic */ + PURPLE_MAJOR_VERSION, /* major_version */ + PURPLE_MINOR_VERSION, /* minor_version */ + PURPLE_PLUGIN_PROTOCOL, /* type */ + NULL, /* ui_requirement */ + 0, /* flags */ + NULL, /* dependencies */ + PURPLE_PRIORITY_DEFAULT, /* priority */ + PRPL_ID, /* id */ + "Matrix", /* name */ + DISPLAY_VERSION, /* version */ + N_("Matrix Protocol Plugin"), /* summary */ + N_("Matrix Protocol Plugin"), /* description */ + "Richard van der Hoff <richard@matrix.org>", /* author */ + MATRIX_WEBSITE, /* homepage */ + NULL, /* load */ + NULL, /* unload */ + matrixprpl_destroy, /* destroy */ + NULL, /* ui_info */ + &prpl_info, /* extra_info */ + NULL, /* prefs_info */ + matrixprpl_actions, /* actions */ + NULL, /* padding... */ + NULL, + NULL, + NULL, }; PURPLE_INIT_PLUGIN(matrix, matrixprpl_init, info); |