Mercurial > pidgin
diff libpurple/protocols/qq/group_internal.c @ 24095:25f62d21b3f8
disapproval of revision '8cebefbc6cd5d84acb69c74e69e8821f11dd225d'
author | Daniel Atallah <daniel.atallah@gmail.com> |
---|---|
date | Mon, 15 Sep 2008 03:04:07 +0000 |
parents | 147ada94a1d8 |
children | 225e0e9e1055 |
line wrap: on
line diff
--- a/libpurple/protocols/qq/group_internal.c Thu Sep 11 13:25:07 2008 +0000 +++ b/libpurple/protocols/qq/group_internal.c Mon Sep 15 03:04:07 2008 +0000 @@ -31,49 +31,49 @@ #include "group_internal.h" #include "utils.h" -static gchar *get_role_desc(qq_group *group) +static gchar *_qq_group_set_my_status_desc(qq_group *group) { - const char *role_desc; + const char *status_desc; g_return_val_if_fail(group != NULL, g_strdup("")); - switch (group->my_role) { - case QQ_ROOM_ROLE_NO: - role_desc = _("I am not a member"); + switch (group->my_status) { + case QQ_GROUP_MEMBER_STATUS_NOT_MEMBER: + status_desc = _("I am not a member"); break; - case QQ_ROOM_ROLE_YES: - role_desc = _("I am a member"); + case QQ_GROUP_MEMBER_STATUS_IS_MEMBER: + status_desc = _("I am a member"); break; - case QQ_ROOM_ROLE_REQUESTING: - role_desc = _("I am requesting"); + case QQ_GROUP_MEMBER_STATUS_APPLYING: + status_desc = _("I am applying to join"); break; - case QQ_ROOM_ROLE_ADMIN: - role_desc = _("I am the admin"); + case QQ_GROUP_MEMBER_STATUS_IS_ADMIN: + status_desc = _("I am the admin"); break; default: - role_desc = _("Unknown status"); + status_desc = _("Unknown status"); } - return g_strdup(role_desc); + return g_strdup(status_desc); } -static void add_room_to_blist(PurpleConnection *gc, qq_group *group) +static void _qq_group_add_to_blist(PurpleConnection *gc, qq_group *group) { GHashTable *components; PurpleGroup *g; PurpleChat *chat; components = qq_group_to_hashtable(group); - chat = purple_chat_new(purple_connection_get_account(gc), group->title_utf8, components); + chat = purple_chat_new(purple_connection_get_account(gc), group->group_name_utf8, components); g = qq_get_purple_group(PURPLE_GROUP_QQ_QUN); purple_blist_add_chat(chat, g, NULL); - purple_debug_info("QQ", "You have added group \"%s\" to blist locally\n", group->title_utf8); + purple_debug(PURPLE_DEBUG_INFO, "QQ", "You have added group \"%s\" to blist locally\n", group->group_name_utf8); } /* Create a dummy qq_group, which includes only internal_id, ext_id, - * and potentially title_utf8, in case we need to call group_conv_show_window + * and potentially group_name_utf8, in case we need to call group_conv_show_window * right after creation. All other attributes are set to empty. * We need to send a get_group_info to the QQ server to update it right away */ qq_group *qq_group_create_internal_record(PurpleConnection *gc, - guint32 internal_id, guint32 ext_id, gchar *title_utf8) + guint32 internal_id, guint32 ext_id, gchar *group_name_utf8) { qq_group *group; qq_data *qd; @@ -82,21 +82,21 @@ qd = (qq_data *) gc->proto_data; group = g_new0(qq_group, 1); - group->my_role = QQ_ROOM_ROLE_NO; - group->my_role_desc = get_role_desc(group); + group->my_status = QQ_GROUP_MEMBER_STATUS_NOT_MEMBER; + group->my_status_desc = _qq_group_set_my_status_desc(group); group->id = internal_id; group->ext_id = ext_id; group->type8 = 0x01; /* assume permanent Qun */ group->creator_uid = 10000; /* assume by QQ admin */ - group->category = 0x01; + group->group_category = 0x01; group->auth_type = 0x02; /* assume need auth */ - group->title_utf8 = g_strdup(title_utf8 == NULL ? "" : title_utf8); - group->desc_utf8 = g_strdup(""); + group->group_name_utf8 = g_strdup(group_name_utf8 == NULL ? "" : group_name_utf8); + group->group_desc_utf8 = g_strdup(""); group->notice_utf8 = g_strdup(""); group->members = NULL; qd->groups = g_list_append(qd->groups, group); - add_room_to_blist(gc, group); + _qq_group_add_to_blist(gc, group); return group; } @@ -124,21 +124,21 @@ { GHashTable *components; components = g_hash_table_new_full(g_str_hash, g_str_equal, g_free, g_free); - g_hash_table_insert(components, g_strdup(QQ_ROOM_KEY_ROLE), g_strdup_printf("%d", group->my_role)); - group->my_role_desc = get_role_desc(group); + g_hash_table_insert(components, g_strdup(QQ_GROUP_KEY_MEMBER_STATUS), g_strdup_printf("%d", group->my_status)); + group->my_status_desc = _qq_group_set_my_status_desc(group); g_hash_table_insert(components, - g_strdup(QQ_ROOM_KEY_INTERNAL_ID), g_strdup_printf("%d", group->id)); - g_hash_table_insert(components, g_strdup(QQ_ROOM_KEY_EXTERNAL_ID), + g_strdup(QQ_GROUP_KEY_INTERNAL_ID), g_strdup_printf("%d", group->id)); + g_hash_table_insert(components, g_strdup(QQ_GROUP_KEY_EXTERNAL_ID), g_strdup_printf("%d", group->ext_id)); - g_hash_table_insert(components, g_strdup(QQ_ROOM_KEY_TYPE), g_strdup_printf("%d", group->type8)); - g_hash_table_insert(components, g_strdup(QQ_ROOM_KEY_CREATOR_UID), g_strdup_printf("%d", group->creator_uid)); + g_hash_table_insert(components, g_strdup(QQ_GROUP_KEY_TYPE), g_strdup_printf("%d", group->type8)); + g_hash_table_insert(components, g_strdup(QQ_GROUP_KEY_CREATOR_UID), g_strdup_printf("%d", group->creator_uid)); g_hash_table_insert(components, - g_strdup(QQ_ROOM_KEY_CATEGORY), g_strdup_printf("%d", group->category)); - g_hash_table_insert(components, g_strdup(QQ_ROOM_KEY_AUTH_TYPE), g_strdup_printf("%d", group->auth_type)); - g_hash_table_insert(components, g_strdup(QQ_ROOM_KEY_ROLE_DESC), g_strdup(group->my_role_desc)); - g_hash_table_insert(components, g_strdup(QQ_ROOM_KEY_TITLE_UTF8), g_strdup(group->title_utf8)); - g_hash_table_insert(components, g_strdup(QQ_ROOM_KEY_DESC_UTF8), g_strdup(group->desc_utf8)); + g_strdup(QQ_GROUP_KEY_GROUP_CATEGORY), g_strdup_printf("%d", group->group_category)); + g_hash_table_insert(components, g_strdup(QQ_GROUP_KEY_AUTH_TYPE), g_strdup_printf("%d", group->auth_type)); + g_hash_table_insert(components, g_strdup(QQ_GROUP_KEY_MEMBER_STATUS_DESC), g_strdup(group->my_status_desc)); + g_hash_table_insert(components, g_strdup(QQ_GROUP_KEY_GROUP_NAME_UTF8), g_strdup(group->group_name_utf8)); + g_hash_table_insert(components, g_strdup(QQ_GROUP_KEY_GROUP_DESC_UTF8), g_strdup(group->group_desc_utf8)); return components; } @@ -152,22 +152,22 @@ qd = (qq_data *) gc->proto_data; group = g_new0(qq_group, 1); - group->my_role = + group->my_status = qq_string_to_dec_value (NULL == g_hash_table_lookup(data, - QQ_ROOM_KEY_ROLE) ? - g_strdup_printf("%d", QQ_ROOM_ROLE_NO) : - g_hash_table_lookup(data, QQ_ROOM_KEY_ROLE)); - group->id = qq_string_to_dec_value(g_hash_table_lookup(data, QQ_ROOM_KEY_INTERNAL_ID)); - group->ext_id = qq_string_to_dec_value(g_hash_table_lookup(data, QQ_ROOM_KEY_EXTERNAL_ID)); - group->type8 = qq_string_to_dec_value(g_hash_table_lookup(data, QQ_ROOM_KEY_TYPE)); - group->creator_uid = qq_string_to_dec_value(g_hash_table_lookup(data, QQ_ROOM_KEY_CREATOR_UID)); - group->category = qq_string_to_dec_value(g_hash_table_lookup(data, QQ_ROOM_KEY_CATEGORY)); - group->auth_type = qq_string_to_dec_value(g_hash_table_lookup(data, QQ_ROOM_KEY_AUTH_TYPE)); - group->title_utf8 = g_strdup(g_hash_table_lookup(data, QQ_ROOM_KEY_TITLE_UTF8)); - group->desc_utf8 = g_strdup(g_hash_table_lookup(data, QQ_ROOM_KEY_DESC_UTF8)); - group->my_role_desc = get_role_desc(group); + QQ_GROUP_KEY_MEMBER_STATUS) ? + g_strdup_printf("%d", QQ_GROUP_MEMBER_STATUS_NOT_MEMBER) : + g_hash_table_lookup(data, QQ_GROUP_KEY_MEMBER_STATUS)); + group->id = qq_string_to_dec_value(g_hash_table_lookup(data, QQ_GROUP_KEY_INTERNAL_ID)); + group->ext_id = qq_string_to_dec_value(g_hash_table_lookup(data, QQ_GROUP_KEY_EXTERNAL_ID)); + group->type8 = qq_string_to_dec_value(g_hash_table_lookup(data, QQ_GROUP_KEY_TYPE)); + group->creator_uid = qq_string_to_dec_value(g_hash_table_lookup(data, QQ_GROUP_KEY_CREATOR_UID)); + group->group_category = qq_string_to_dec_value(g_hash_table_lookup(data, QQ_GROUP_KEY_GROUP_CATEGORY)); + group->auth_type = qq_string_to_dec_value(g_hash_table_lookup(data, QQ_GROUP_KEY_AUTH_TYPE)); + group->group_name_utf8 = g_strdup(g_hash_table_lookup(data, QQ_GROUP_KEY_GROUP_NAME_UTF8)); + group->group_desc_utf8 = g_strdup(g_hash_table_lookup(data, QQ_GROUP_KEY_GROUP_DESC_UTF8)); + group->my_status_desc = _qq_group_set_my_status_desc(group); qd->groups = g_list_append(qd->groups, group); @@ -184,54 +184,48 @@ ext_id = g_strdup_printf("%d", group->ext_id); chat = purple_blist_find_chat(purple_connection_get_account(gc), ext_id); g_free(ext_id); - if (chat == NULL && group->my_role != QQ_ROOM_ROLE_NO) { - add_room_to_blist(gc, group); - return; - } - - if (chat == NULL) { - return; + if (chat == NULL && group->my_status != QQ_GROUP_MEMBER_STATUS_NOT_MEMBER) { + _qq_group_add_to_blist(gc, group); + } else if (chat != NULL) { /* we have a local record, update its info */ + /* if there is group_name_utf8, we update the group name */ + if (group->group_name_utf8 != NULL && strlen(group->group_name_utf8) > 0) + purple_blist_alias_chat(chat, group->group_name_utf8); + g_hash_table_replace(chat->components, + g_strdup(QQ_GROUP_KEY_MEMBER_STATUS), g_strdup_printf("%d", group->my_status)); + group->my_status_desc = _qq_group_set_my_status_desc(group); + g_hash_table_replace(chat->components, + g_strdup(QQ_GROUP_KEY_MEMBER_STATUS_DESC), g_strdup(group->my_status_desc)); + g_hash_table_replace(chat->components, + g_strdup(QQ_GROUP_KEY_INTERNAL_ID), + g_strdup_printf("%d", group->id)); + g_hash_table_replace(chat->components, + g_strdup(QQ_GROUP_KEY_EXTERNAL_ID), + g_strdup_printf("%d", group->ext_id)); + g_hash_table_replace(chat->components, + g_strdup(QQ_GROUP_KEY_TYPE), g_strdup_printf("%d", group->type8)); + g_hash_table_replace(chat->components, + g_strdup(QQ_GROUP_KEY_CREATOR_UID), g_strdup_printf("%d", group->creator_uid)); + g_hash_table_replace(chat->components, + g_strdup(QQ_GROUP_KEY_GROUP_CATEGORY), + g_strdup_printf("%d", group->group_category)); + g_hash_table_replace(chat->components, + g_strdup(QQ_GROUP_KEY_AUTH_TYPE), g_strdup_printf("%d", group->auth_type)); + g_hash_table_replace(chat->components, + g_strdup(QQ_GROUP_KEY_GROUP_NAME_UTF8), g_strdup(group->group_name_utf8)); + g_hash_table_replace(chat->components, + g_strdup(QQ_GROUP_KEY_GROUP_DESC_UTF8), g_strdup(group->group_desc_utf8)); } - - /* we have a local record, update its info */ - /* if there is title_utf8, we update the group name */ - if (group->title_utf8 != NULL && strlen(group->title_utf8) > 0) - purple_blist_alias_chat(chat, group->title_utf8); - g_hash_table_replace(chat->components, - g_strdup(QQ_ROOM_KEY_ROLE), g_strdup_printf("%d", group->my_role)); - group->my_role_desc = get_role_desc(group); - g_hash_table_replace(chat->components, - g_strdup(QQ_ROOM_KEY_ROLE_DESC), g_strdup(group->my_role_desc)); - g_hash_table_replace(chat->components, - g_strdup(QQ_ROOM_KEY_INTERNAL_ID), - g_strdup_printf("%d", group->id)); - g_hash_table_replace(chat->components, - g_strdup(QQ_ROOM_KEY_EXTERNAL_ID), - g_strdup_printf("%d", group->ext_id)); - g_hash_table_replace(chat->components, - g_strdup(QQ_ROOM_KEY_TYPE), g_strdup_printf("%d", group->type8)); - g_hash_table_replace(chat->components, - g_strdup(QQ_ROOM_KEY_CREATOR_UID), g_strdup_printf("%d", group->creator_uid)); - g_hash_table_replace(chat->components, - g_strdup(QQ_ROOM_KEY_CATEGORY), - g_strdup_printf("%d", group->category)); - g_hash_table_replace(chat->components, - g_strdup(QQ_ROOM_KEY_AUTH_TYPE), g_strdup_printf("%d", group->auth_type)); - g_hash_table_replace(chat->components, - g_strdup(QQ_ROOM_KEY_TITLE_UTF8), g_strdup(group->title_utf8)); - g_hash_table_replace(chat->components, - g_strdup(QQ_ROOM_KEY_DESC_UTF8), g_strdup(group->desc_utf8)); } -/* NOTE: If we knew how to convert between an external and internal group id, as the official +/* NOTE: If we knew how to convert between an external and internal group id, as the official * client seems to, the following would be unnecessary. That would be ideal. */ /* Use list to specify if id's alternate id is pending discovery. */ void qq_set_pending_id(GSList **list, guint32 id, gboolean pending) { - if (pending) + if (pending) *list = g_slist_prepend(*list, GINT_TO_POINTER(id)); - else + else *list = g_slist_remove(*list, GINT_TO_POINTER(id)); }