diff options
Diffstat (limited to 'src/idle-muc-manager.c')
-rw-r--r-- | src/idle-muc-manager.c | 55 |
1 files changed, 32 insertions, 23 deletions
diff --git a/src/idle-muc-manager.c b/src/idle-muc-manager.c index e2400cc..5cba4d7 100644 --- a/src/idle-muc-manager.c +++ b/src/idle-muc-manager.c @@ -186,13 +186,14 @@ static void idle_muc_manager_class_init(IdleMUCManagerClass *klass) { static IdleParserHandlerResult _numeric_error_handler(IdleParser *parser, IdleParserMessageCode code, GValueArray *args, gpointer user_data) { IdleMUCManagerPrivate *priv = IDLE_MUC_MANAGER_GET_PRIVATE(user_data); TpHandle room_handle = g_value_get_uint(g_value_array_get_nth(args, 0)); + IdleMUCChannel *chan; if (!priv->channels) { IDLE_DEBUG("Channels hash table missing, ignoring..."); return IDLE_PARSER_HANDLER_RESULT_NOT_HANDLED; } - IdleMUCChannel *chan = g_hash_table_lookup(priv->channels, GUINT_TO_POINTER(room_handle)); + chan = g_hash_table_lookup(priv->channels, GUINT_TO_POINTER(room_handle)); if (!chan) return IDLE_PARSER_HANDLER_RESULT_HANDLED; @@ -226,13 +227,14 @@ static IdleParserHandlerResult _numeric_topic_handler(IdleParser *parser, IdlePa IdleMUCManagerPrivate *priv = IDLE_MUC_MANAGER_GET_PRIVATE(user_data); TpHandle room_handle = g_value_get_uint(g_value_array_get_nth(args, 0)); const gchar *topic = g_value_get_string(g_value_array_get_nth(args, 1)); + IdleMUCChannel *chan; if (!priv->channels) { IDLE_DEBUG("Channels hash table missing, ignoring..."); return IDLE_PARSER_HANDLER_RESULT_NOT_HANDLED; } - IdleMUCChannel *chan = g_hash_table_lookup(priv->channels, GUINT_TO_POINTER(room_handle)); + chan = g_hash_table_lookup(priv->channels, GUINT_TO_POINTER(room_handle)); if (chan) idle_muc_channel_topic(chan, topic); @@ -245,13 +247,14 @@ static IdleParserHandlerResult _numeric_topic_stamp_handler(IdleParser *parser, TpHandle room_handle = g_value_get_uint(g_value_array_get_nth(args, 0)); TpHandle toucher_handle = g_value_get_uint(g_value_array_get_nth(args, 1)); time_t touched = g_value_get_uint(g_value_array_get_nth(args, 2)); + IdleMUCChannel *chan; if (!priv->channels) { IDLE_DEBUG("Channels hash table missing, ignoring..."); return IDLE_PARSER_HANDLER_RESULT_NOT_HANDLED; } - IdleMUCChannel *chan = g_hash_table_lookup(priv->channels, GUINT_TO_POINTER(room_handle)); + chan = g_hash_table_lookup(priv->channels, GUINT_TO_POINTER(room_handle)); idle_connection_emit_queued_aliases_changed(priv->conn); @@ -267,6 +270,7 @@ static IdleParserHandlerResult _invite_handler(IdleParser *parser, IdleParserMes TpHandle inviter_handle = g_value_get_uint(g_value_array_get_nth(args, 0)); TpHandle invited_handle = g_value_get_uint(g_value_array_get_nth(args, 1)); TpHandle room_handle = g_value_get_uint(g_value_array_get_nth(args, 2)); + IdleMUCChannel *chan; if (invited_handle != priv->conn->parent.self_handle) return IDLE_PARSER_HANDLER_RESULT_HANDLED; @@ -276,7 +280,7 @@ static IdleParserHandlerResult _invite_handler(IdleParser *parser, IdleParserMes return IDLE_PARSER_HANDLER_RESULT_NOT_HANDLED; } - IdleMUCChannel *chan = g_hash_table_lookup(priv->channels, GUINT_TO_POINTER(room_handle)); + chan = g_hash_table_lookup(priv->channels, GUINT_TO_POINTER(room_handle)); idle_connection_emit_queued_aliases_changed(priv->conn); @@ -294,6 +298,7 @@ static IdleParserHandlerResult _join_handler(IdleParser *parser, IdleParserMessa IdleMUCManagerPrivate *priv = IDLE_MUC_MANAGER_GET_PRIVATE(manager); TpHandle joiner_handle = g_value_get_uint(g_value_array_get_nth(args, 0)); TpHandle room_handle = g_value_get_uint(g_value_array_get_nth(args, 1)); + IdleMUCChannel *chan; idle_connection_emit_queued_aliases_changed(priv->conn); @@ -302,7 +307,7 @@ static IdleParserHandlerResult _join_handler(IdleParser *parser, IdleParserMessa return IDLE_PARSER_HANDLER_RESULT_NOT_HANDLED; } - IdleMUCChannel *chan = g_hash_table_lookup(priv->channels, GUINT_TO_POINTER(room_handle)); + chan = g_hash_table_lookup(priv->channels, GUINT_TO_POINTER(room_handle)); if (!chan) { /* TODO: If we're in "bouncer mode", maybe these should be Requested: @@ -321,13 +326,14 @@ static IdleParserHandlerResult _kick_handler(IdleParser *parser, IdleParserMessa TpHandle room_handle = g_value_get_uint(g_value_array_get_nth(args, 1)); TpHandle kicked_handle = g_value_get_uint(g_value_array_get_nth(args, 2)); const gchar *message = (args->n_values == 4) ? g_value_get_string(g_value_array_get_nth(args, 3)) : NULL; + IdleMUCChannel *chan; if (!priv->channels) { IDLE_DEBUG("Channels hash table missing, ignoring..."); return IDLE_PARSER_HANDLER_RESULT_NOT_HANDLED; } - IdleMUCChannel *chan = g_hash_table_lookup(priv->channels, GUINT_TO_POINTER(room_handle)); + chan = g_hash_table_lookup(priv->channels, GUINT_TO_POINTER(room_handle)); if (chan) idle_muc_channel_kick(chan, kicked_handle, kicker_handle, message); @@ -338,13 +344,14 @@ static IdleParserHandlerResult _kick_handler(IdleParser *parser, IdleParserMessa static IdleParserHandlerResult _numeric_namereply_handler(IdleParser *parser, IdleParserMessageCode code, GValueArray *args, gpointer user_data) { IdleMUCManagerPrivate *priv = IDLE_MUC_MANAGER_GET_PRIVATE(user_data); TpHandle room_handle = g_value_get_uint(g_value_array_get_nth(args, 0)); + IdleMUCChannel *chan; if (!priv->channels) { IDLE_DEBUG("Channels hash table missing, ignoring..."); return IDLE_PARSER_HANDLER_RESULT_NOT_HANDLED; } - IdleMUCChannel *chan = g_hash_table_lookup(priv->channels, GUINT_TO_POINTER(room_handle)); + chan = g_hash_table_lookup(priv->channels, GUINT_TO_POINTER(room_handle)); if (chan) idle_muc_channel_namereply(chan, args); @@ -355,13 +362,14 @@ static IdleParserHandlerResult _numeric_namereply_handler(IdleParser *parser, Id static IdleParserHandlerResult _numeric_namereply_end_handler(IdleParser *parser, IdleParserMessageCode code, GValueArray *args, gpointer user_data) { IdleMUCManagerPrivate *priv = IDLE_MUC_MANAGER_GET_PRIVATE(user_data); TpHandle room_handle = g_value_get_uint(g_value_array_get_nth(args, 0)); + IdleMUCChannel *chan; if (!priv->channels) { IDLE_DEBUG("Channels hash table missing, ignoring..."); return IDLE_PARSER_HANDLER_RESULT_NOT_HANDLED; } - IdleMUCChannel *chan = g_hash_table_lookup(priv->channels, GUINT_TO_POINTER(room_handle)); + chan = g_hash_table_lookup(priv->channels, GUINT_TO_POINTER(room_handle)); if (chan) idle_muc_channel_namereply_end(chan); @@ -372,13 +380,14 @@ static IdleParserHandlerResult _numeric_namereply_end_handler(IdleParser *parser static IdleParserHandlerResult _mode_handler(IdleParser *parser, IdleParserMessageCode code, GValueArray *args, gpointer user_data) { IdleMUCManagerPrivate *priv = IDLE_MUC_MANAGER_GET_PRIVATE(user_data); TpHandle room_handle = g_value_get_uint(g_value_array_get_nth(args, 0)); + IdleMUCChannel *chan; if (!priv->channels) { IDLE_DEBUG("Channels hash table missing, ignoring..."); return IDLE_PARSER_HANDLER_RESULT_NOT_HANDLED; } - IdleMUCChannel *chan = g_hash_table_lookup(priv->channels, GUINT_TO_POINTER(room_handle)); + chan = g_hash_table_lookup(priv->channels, GUINT_TO_POINTER(room_handle)); if (chan) idle_muc_channel_mode(chan, args); @@ -417,22 +426,22 @@ static IdleParserHandlerResult _notice_privmsg_handler(IdleParser *parser, IdleP IdleMUCManagerPrivate *priv = IDLE_MUC_MANAGER_GET_PRIVATE(manager); TpHandle sender_handle = (TpHandle) g_value_get_uint(g_value_array_get_nth(args, 0)); TpHandle room_handle = (TpHandle) g_value_get_uint(g_value_array_get_nth(args, 1)); + IdleMUCChannel *chan; + TpChannelTextMessageType type; + gchar *body; if (!priv->channels) { IDLE_DEBUG("Channels hash table missing, ignoring..."); return IDLE_PARSER_HANDLER_RESULT_NOT_HANDLED; } - IdleMUCChannel *chan = g_hash_table_lookup(priv->channels, GUINT_TO_POINTER(room_handle)); + chan = g_hash_table_lookup(priv->channels, GUINT_TO_POINTER(room_handle)); /* XXX: just check for chan == NULL here and bail with NOT_HANDLED if room * was not found ? Currently we go through all of the decoding of the * message, but don't actually deliver the message to a channel if chan is * NULL, and then we return 'HANDLED', which seems wrong */ - TpChannelTextMessageType type; - gchar *body; - if (code == IDLE_PARSER_PREFIXCMD_NOTICE_CHANNEL) { type = TP_CHANNEL_TEXT_MESSAGE_TYPE_NOTICE; body = idle_ctcp_kill_blingbling(g_value_get_string(g_value_array_get_nth(args, 2))); @@ -456,13 +465,14 @@ static IdleParserHandlerResult _part_handler(IdleParser *parser, IdleParserMessa TpHandle leaver_handle = g_value_get_uint(g_value_array_get_nth(args, 0)); TpHandle room_handle = g_value_get_uint(g_value_array_get_nth(args, 1)); const gchar *message = (args->n_values == 3) ? g_value_get_string(g_value_array_get_nth(args, 2)) : NULL; + IdleMUCChannel *chan; if (!priv->channels) { IDLE_DEBUG("Channels hash table missing, ignoring..."); return IDLE_PARSER_HANDLER_RESULT_NOT_HANDLED; } - IdleMUCChannel *chan = g_hash_table_lookup(priv->channels, GUINT_TO_POINTER(room_handle)); + chan = g_hash_table_lookup(priv->channels, GUINT_TO_POINTER(room_handle)); if (chan) idle_muc_channel_part(chan, leaver_handle, message); @@ -500,13 +510,14 @@ static IdleParserHandlerResult _topic_handler(IdleParser *parser, IdleParserMess TpHandle room_handle = g_value_get_uint(g_value_array_get_nth(args, 1)); const gchar *topic = (args->n_values == 3) ? g_value_get_string(g_value_array_get_nth(args, 2)) : NULL; time_t stamp = time(NULL); + IdleMUCChannel *chan; if (!priv->channels) { IDLE_DEBUG("Channels hash table missing, ignoring..."); return IDLE_PARSER_HANDLER_RESULT_NOT_HANDLED; } - IdleMUCChannel *chan = g_hash_table_lookup(priv->channels, GUINT_TO_POINTER(room_handle)); + chan = g_hash_table_lookup(priv->channels, GUINT_TO_POINTER(room_handle)); if (chan) { if (topic) @@ -532,9 +543,7 @@ static void _muc_manager_close_all(IdleMUCManager *manager) return; } - GHashTable *tmp = priv->channels; - priv->channels = NULL; - g_hash_table_destroy(tmp); + tp_clear_pointer (&priv->channels, g_hash_table_destroy); } static void @@ -691,16 +700,16 @@ static void _channel_join_ready_cb(IdleMUCChannel *chan, guint err, gpointer use TpChannelManager *manager = TP_CHANNEL_MANAGER(user_data); IdleMUCManagerPrivate *priv = IDLE_MUC_MANAGER_GET_PRIVATE(user_data); GSList *reqs = take_request_tokens(user_data, chan); + gint err_code = 0; + const gchar* err_msg = NULL; + TpHandle handle; + GSList *l; if (err == MUC_CHANNEL_JOIN_ERROR_NONE) { tp_channel_manager_emit_new_channel(manager, (TpExportableChannel *) chan, reqs); goto out; } - gint err_code = 0; - const gchar* err_msg = NULL; - TpHandle handle; - g_object_get(chan, "handle", &handle, NULL); switch (err) { @@ -724,7 +733,7 @@ static void _channel_join_ready_cb(IdleMUCChannel *chan, guint err, gpointer use break; } - for (GSList *l = reqs; reqs != NULL; reqs = reqs->next) { + for (l = reqs; reqs != NULL; reqs = reqs->next) { tp_channel_manager_emit_request_failed(manager, l->data, TP_ERROR, err_code, err_msg); } |