| 63 |
63 |
| 64 qq_send_room_cmd_only(gc, QQ_ROOM_CMD_QUIT, group->id); |
64 qq_send_room_cmd_only(gc, QQ_ROOM_CMD_QUIT, group->id); |
| 65 } |
65 } |
| 66 |
66 |
| 67 /* send packet to join a group without auth */ |
67 /* send packet to join a group without auth */ |
| 68 void qq_send_cmd_group_join_group(PurpleConnection *gc, qq_group *group) |
68 void qq_request_room_join(PurpleConnection *gc, qq_group *group) |
| 69 { |
69 { |
| 70 g_return_if_fail(group != NULL); |
70 g_return_if_fail(group != NULL); |
| 71 |
71 |
| 72 if (group->my_role == QQ_ROOM_ROLE_NO) { |
72 if (group->my_role == QQ_ROOM_ROLE_NO) { |
| 73 group->my_role = QQ_ROOM_ROLE_REQUESTING; |
73 group->my_role = QQ_ROOM_ROLE_REQUESTING; |
| 77 switch (group->auth_type) { |
77 switch (group->auth_type) { |
| 78 case QQ_ROOM_AUTH_TYPE_NO_AUTH: |
78 case QQ_ROOM_AUTH_TYPE_NO_AUTH: |
| 79 case QQ_ROOM_AUTH_TYPE_NEED_AUTH: |
79 case QQ_ROOM_AUTH_TYPE_NEED_AUTH: |
| 80 break; |
80 break; |
| 81 case QQ_ROOM_AUTH_TYPE_NO_ADD: |
81 case QQ_ROOM_AUTH_TYPE_NO_ADD: |
| 82 purple_notify_warning(gc, NULL, _("The Qun does not allow others to join"), NULL); |
82 if (group->my_role == QQ_ROOM_ROLE_NO |
| 83 return; |
83 && group->my_role == QQ_ROOM_ROLE_REQUESTING) { |
| |
84 purple_notify_warning(gc, NULL, _("The Qun does not allow others to join"), NULL); |
| |
85 return; |
| |
86 } |
| |
87 break; |
| 84 default: |
88 default: |
| 85 purple_debug_error("QQ", "Unknown room auth type: %d\n", group->auth_type); |
89 purple_debug_error("QQ", "Unknown room auth type: %d\n", group->auth_type); |
| 86 break; |
90 break; |
| 87 } |
91 } |
| 88 |
92 |
| 243 purple_debug_info("QQ", "Succeed joining group \"%s\"\n", group->title_utf8); |
247 purple_debug_info("QQ", "Succeed joining group \"%s\"\n", group->title_utf8); |
| 244 group->my_role = QQ_ROOM_ROLE_YES; |
248 group->my_role = QQ_ROOM_ROLE_YES; |
| 245 qq_group_refresh(gc, group); |
249 qq_group_refresh(gc, group); |
| 246 /* this must be shown before getting online members */ |
250 /* this must be shown before getting online members */ |
| 247 qq_group_conv_show_window(gc, group); |
251 qq_group_conv_show_window(gc, group); |
| 248 qq_room_update(gc, 0, group->id); |
252 /* qq_update_room(gc, 0, group->id); */ |
| |
253 qq_send_room_cmd_only(gc, QQ_ROOM_CMD_GET_ONLINES, group->id); |
| 249 break; |
254 break; |
| 250 case QQ_ROOM_JOIN_NEED_AUTH: |
255 case QQ_ROOM_JOIN_NEED_AUTH: |
| 251 purple_debug_info("QQ", |
256 purple_debug_info("QQ", |
| 252 "Fail joining group [%d] %s, needs authentication\n", |
257 "Fail joining group [%d] %s, needs authentication\n", |
| 253 group->ext_id, group->title_utf8); |
258 group->ext_id, group->title_utf8); |
| 283 return; |
288 return; |
| 284 } |
289 } |
| 285 |
290 |
| 286 group = qq_room_search_ext_id(gc, ext_id); |
291 group = qq_room_search_ext_id(gc, ext_id); |
| 287 if (group) { |
292 if (group) { |
| 288 qq_send_cmd_group_join_group(gc, group); |
293 qq_request_room_join(gc, group); |
| 289 } else { |
294 } else { |
| 290 qq_set_pending_id(&qd->joining_groups, ext_id, TRUE); |
295 qq_set_pending_id(&qd->joining_groups, ext_id, TRUE); |
| 291 qq_send_cmd_group_search_group(gc, ext_id); |
296 qq_send_cmd_group_search_group(gc, ext_id); |
| 292 } |
297 } |
| 293 } |
298 } |