Mercurial > pidgin
comparison libpurple/protocols/qq/group_im.c @ 24148:1bdf7b602684
2008.10.07 - ccpaging <ccpaging(at)gmail.com>
* Update qun conversation
* Drop group_conv.c and group_conv.h
author | SHiNE CsyFeK <csyfek@gmail.com> |
---|---|
date | Wed, 22 Oct 2008 14:58:32 +0000 |
parents | ce94189f15ad |
children | 818ab62006f5 |
comparison
equal
deleted
inserted
replaced
24147:0a92aa673a33 | 24148:1bdf7b602684 |
---|---|
35 #include "group_find.h" | 35 #include "group_find.h" |
36 #include "group_internal.h" | 36 #include "group_internal.h" |
37 #include "group_info.h" | 37 #include "group_info.h" |
38 #include "group_im.h" | 38 #include "group_im.h" |
39 #include "group_opt.h" | 39 #include "group_opt.h" |
40 #include "group_conv.h" | |
41 #include "im.h" | 40 #include "im.h" |
42 #include "qq_define.h" | 41 #include "qq_define.h" |
43 #include "packet_parse.h" | 42 #include "packet_parse.h" |
44 #include "qq_network.h" | 43 #include "qq_network.h" |
45 #include "qq_process.h" | 44 #include "qq_process.h" |
46 #include "utils.h" | 45 #include "utils.h" |
46 | |
47 /* show group conversation window */ | |
48 PurpleConversation *qq_room_conv_new(PurpleConnection *gc, qq_group *group) | |
49 { | |
50 PurpleConversation *conv; | |
51 qq_data *qd; | |
52 gchar *topic_utf8; | |
53 | |
54 g_return_val_if_fail(group != NULL, NULL); | |
55 qd = (qq_data *) gc->proto_data; | |
56 | |
57 conv = purple_find_conversation_with_account(PURPLE_CONV_TYPE_CHAT, | |
58 group->title_utf8, purple_connection_get_account(gc)); | |
59 if (conv != NULL) { | |
60 /* show only one conversation per group */ | |
61 return conv; | |
62 } | |
63 | |
64 serv_got_joined_chat(gc, qd->channel++, group->title_utf8); | |
65 conv = purple_find_conversation_with_account(PURPLE_CONV_TYPE_CHAT, group->title_utf8, purple_connection_get_account(gc)); | |
66 if (conv != NULL) { | |
67 topic_utf8 = g_strdup_printf("%d %s", group->ext_id, group->notice_utf8); | |
68 purple_debug_info("QQ", "Set chat topic to %s\n", topic_utf8); | |
69 purple_conv_chat_set_topic(PURPLE_CONV_CHAT(conv), NULL, topic_utf8); | |
70 g_free(topic_utf8); | |
71 | |
72 if (group->is_got_info) | |
73 qq_send_room_cmd_only(gc, QQ_ROOM_CMD_GET_ONLINES, group->id); | |
74 else | |
75 qq_update_room(gc, 0, group->id); | |
76 return conv; | |
77 } | |
78 return NULL; | |
79 } | |
80 | |
81 /* refresh online member in group conversation window */ | |
82 void qq_room_conv_set_onlines(PurpleConnection *gc, qq_group *group) | |
83 { | |
84 GList *names, *list, *flags; | |
85 qq_buddy *member; | |
86 gchar *member_name, *member_uid; | |
87 PurpleConversation *conv; | |
88 gint flag; | |
89 gboolean is_find; | |
90 g_return_if_fail(group != NULL); | |
91 | |
92 conv = purple_find_conversation_with_account(PURPLE_CONV_TYPE_CHAT, | |
93 group->title_utf8, purple_connection_get_account(gc)); | |
94 if (conv == NULL) { | |
95 purple_debug_warning("QQ", "Conversation \"%s\" is not opened\n", group->title_utf8); | |
96 return; | |
97 } | |
98 g_return_if_fail(group->members != NULL); | |
99 | |
100 names = NULL; | |
101 flags = NULL; | |
102 | |
103 list = group->members; | |
104 while (list != NULL) { | |
105 member = (qq_buddy *) list->data; | |
106 | |
107 /* we need unique identifiers for everyone in the chat or else we'll | |
108 * run into problems with functions like get_cb_real_name from qq.c */ | |
109 member_name = (member->nickname != NULL && *(member->nickname) != '\0') ? | |
110 g_strdup_printf("%s (%u)", member->nickname, member->uid) : | |
111 g_strdup_printf("(%u)", member->uid); | |
112 member_uid = g_strdup_printf("(%u)", member->uid); | |
113 | |
114 flag = 0; | |
115 /* TYPING to put online above OP and FOUNDER */ | |
116 if (is_online(member->status)) flag |= (PURPLE_CBFLAGS_TYPING | PURPLE_CBFLAGS_VOICE); | |
117 if(1 == (member->role & 1)) flag |= PURPLE_CBFLAGS_OP; | |
118 if(member->uid == group->creator_uid) flag |= PURPLE_CBFLAGS_FOUNDER; | |
119 | |
120 is_find = TRUE; | |
121 if (purple_conv_chat_find_user(PURPLE_CONV_CHAT(conv), member_name)) | |
122 { | |
123 purple_conv_chat_user_set_flags(PURPLE_CONV_CHAT(conv), | |
124 member_name, | |
125 flag); | |
126 } else if (purple_conv_chat_find_user(PURPLE_CONV_CHAT(conv), member_uid)) | |
127 { | |
128 purple_conv_chat_user_set_flags(PURPLE_CONV_CHAT(conv), | |
129 member_uid, | |
130 flag); | |
131 purple_conv_chat_rename_user(PURPLE_CONV_CHAT(conv), member_uid, member_name); | |
132 } else { | |
133 is_find = FALSE; | |
134 } | |
135 if (!is_find) { | |
136 /* always put it even offline */ | |
137 names = g_list_append(names, member_name); | |
138 flags = g_list_append(flags, GINT_TO_POINTER(flag)); | |
139 } else { | |
140 g_free(member_name); | |
141 } | |
142 g_free(member_uid); | |
143 list = list->next; | |
144 } | |
145 | |
146 if (names != NULL && flags != NULL) { | |
147 purple_conv_chat_add_users(PURPLE_CONV_CHAT(conv), names, NULL, flags, FALSE); | |
148 } | |
149 | |
150 /* clean up names */ | |
151 while (names != NULL) { | |
152 member_name = (gchar *) names->data; | |
153 names = g_list_remove(names, member_name); | |
154 g_free(member_name); | |
155 } | |
156 g_list_free(flags); | |
157 } | |
47 | 158 |
48 /* send IM to a group */ | 159 /* send IM to a group */ |
49 void qq_send_packet_group_im(PurpleConnection *gc, qq_group *group, const gchar *msg) | 160 void qq_send_packet_group_im(PurpleConnection *gc, qq_group *group, const gchar *msg) |
50 { | 161 { |
51 gint data_len, bytes; | 162 gint data_len, bytes; |
149 g_return_if_fail(group != NULL); | 260 g_return_if_fail(group != NULL); |
150 | 261 |
151 conv = purple_find_conversation_with_account( | 262 conv = purple_find_conversation_with_account( |
152 PURPLE_CONV_TYPE_CHAT, group->title_utf8, account); | 263 PURPLE_CONV_TYPE_CHAT, group->title_utf8, account); |
153 if (conv == NULL && purple_prefs_get_bool("/plugins/prpl/qq/show_room_when_newin")) { | 264 if (conv == NULL && purple_prefs_get_bool("/plugins/prpl/qq/show_room_when_newin")) { |
154 conv = qq_room_conv_create(gc, group); | 265 conv = qq_room_conv_new(gc, group); |
155 } | 266 } |
156 | 267 |
157 if (conv == NULL) { | 268 if (conv == NULL) { |
158 return; | 269 return; |
159 } | 270 } |