Mercurial > pidgin
comparison libpurple/protocols/msn/msn.c @ 20481:eb93710aec4d
Make buddy and group management actually work, add some SOAP templates, redesign some parts of code and separate some bigger functions into its smaller tasks which are completely unrelated to each other
author | Carlos Silva <typ0@pidgin.im> |
---|---|
date | Tue, 28 Aug 2007 03:54:18 +0000 |
parents | 9a2a4a0c0003 |
children | 1754155051a4 |
comparison
equal
deleted
inserted
replaced
20480:7d3e53e3f623 | 20481:eb93710aec4d |
---|---|
1059 | 1059 |
1060 session = gc->proto_data; | 1060 session = gc->proto_data; |
1061 userlist = session->userlist; | 1061 userlist = session->userlist; |
1062 who = msn_normalize(gc->account, buddy->name); | 1062 who = msn_normalize(gc->account, buddy->name); |
1063 | 1063 |
1064 purple_debug_info("MSNP14","add user:{%s} to group:{%s}\n",who,group->name); | 1064 purple_debug_info("MSN","Add user:%s to group:%s\n", who, group->name); |
1065 if (!session->logged_in) | 1065 if (!session->logged_in) |
1066 { | 1066 { |
1067 #if 0 | 1067 #if 0 |
1068 fake_userlist_add_buddy(session->sync_userlist, who, MSN_LIST_FL, | 1068 fake_userlist_add_buddy(session->sync_userlist, who, MSN_LIST_FL, |
1069 group ? group->name : NULL); | 1069 group ? group->name : NULL); |
1093 #endif | 1093 #endif |
1094 | 1094 |
1095 /* XXX - Would group ever be NULL here? I don't think so... | 1095 /* XXX - Would group ever be NULL here? I don't think so... |
1096 * shx: Yes it should; MSN handles non-grouped buddies, and this is only | 1096 * shx: Yes it should; MSN handles non-grouped buddies, and this is only |
1097 * internal. */ | 1097 * internal. */ |
1098 msn_userlist_add_buddy(userlist, who, MSN_LIST_FL, | 1098 msn_userlist_add_buddy(userlist, who, group ? group->name : NULL); |
1099 group ? group->name : NULL); | |
1100 } | 1099 } |
1101 | 1100 |
1102 static void | 1101 static void |
1103 msn_rem_buddy(PurpleConnection *gc, PurpleBuddy *buddy, PurpleGroup *group) | 1102 msn_rem_buddy(PurpleConnection *gc, PurpleBuddy *buddy, PurpleGroup *group) |
1104 { | 1103 { |
1110 | 1109 |
1111 if (!session->logged_in) | 1110 if (!session->logged_in) |
1112 return; | 1111 return; |
1113 | 1112 |
1114 /* XXX - Does buddy->name need to be msn_normalize'd here? --KingAnt */ | 1113 /* XXX - Does buddy->name need to be msn_normalize'd here? --KingAnt */ |
1115 msn_userlist_rem_buddy(userlist, buddy->name, MSN_LIST_FL, group->name); | 1114 msn_userlist_rem_buddy(userlist, buddy->name); |
1116 } | 1115 } |
1117 | 1116 |
1118 static void | 1117 static void |
1119 msn_add_permit(PurpleConnection *gc, const char *who) | 1118 msn_add_permit(PurpleConnection *gc, const char *who) |
1120 { | 1119 { |
1128 | 1127 |
1129 if (!session->logged_in) | 1128 if (!session->logged_in) |
1130 return; | 1129 return; |
1131 | 1130 |
1132 if (user != NULL && user->list_op & MSN_LIST_BL_OP) | 1131 if (user != NULL && user->list_op & MSN_LIST_BL_OP) |
1133 msn_userlist_rem_buddy(userlist, who, MSN_LIST_BL, NULL); | 1132 msn_userlist_rem_buddy_from_list(userlist, who, MSN_LIST_BL); |
1134 | 1133 |
1135 msn_userlist_add_buddy(userlist, who, MSN_LIST_AL, NULL); | 1134 msn_userlist_add_buddy_to_list(userlist, who, MSN_LIST_AL); |
1136 } | 1135 } |
1137 | 1136 |
1138 static void | 1137 static void |
1139 msn_add_deny(PurpleConnection *gc, const char *who) | 1138 msn_add_deny(PurpleConnection *gc, const char *who) |
1140 { | 1139 { |
1148 | 1147 |
1149 if (!session->logged_in) | 1148 if (!session->logged_in) |
1150 return; | 1149 return; |
1151 | 1150 |
1152 if (user != NULL && user->list_op & MSN_LIST_AL_OP) | 1151 if (user != NULL && user->list_op & MSN_LIST_AL_OP) |
1153 msn_userlist_rem_buddy(userlist, who, MSN_LIST_AL, NULL); | 1152 msn_userlist_rem_buddy_from_list(userlist, who, MSN_LIST_AL); |
1154 | 1153 |
1155 msn_userlist_add_buddy(userlist, who, MSN_LIST_BL, NULL); | 1154 msn_userlist_add_buddy_to_list(userlist, who, MSN_LIST_BL); |
1156 } | 1155 } |
1157 | 1156 |
1158 static void | 1157 static void |
1159 msn_rem_permit(PurpleConnection *gc, const char *who) | 1158 msn_rem_permit(PurpleConnection *gc, const char *who) |
1160 { | 1159 { |
1168 if (!session->logged_in) | 1167 if (!session->logged_in) |
1169 return; | 1168 return; |
1170 | 1169 |
1171 user = msn_userlist_find_user(userlist, who); | 1170 user = msn_userlist_find_user(userlist, who); |
1172 | 1171 |
1173 msn_userlist_rem_buddy(userlist, who, MSN_LIST_AL, NULL); | 1172 msn_userlist_rem_buddy_from_list(userlist, who, MSN_LIST_AL); |
1174 | 1173 |
1175 if (user != NULL && user->list_op & MSN_LIST_RL_OP) | 1174 if (user != NULL && user->list_op & MSN_LIST_RL_OP) |
1176 msn_userlist_add_buddy(userlist, who, MSN_LIST_BL, NULL); | 1175 msn_userlist_add_buddy_to_list(userlist, who, MSN_LIST_BL); |
1177 } | 1176 } |
1178 | 1177 |
1179 static void | 1178 static void |
1180 msn_rem_deny(PurpleConnection *gc, const char *who) | 1179 msn_rem_deny(PurpleConnection *gc, const char *who) |
1181 { | 1180 { |
1189 if (!session->logged_in) | 1188 if (!session->logged_in) |
1190 return; | 1189 return; |
1191 | 1190 |
1192 user = msn_userlist_find_user(userlist, who); | 1191 user = msn_userlist_find_user(userlist, who); |
1193 | 1192 |
1194 msn_userlist_rem_buddy(userlist, who, MSN_LIST_BL, NULL); | 1193 msn_userlist_rem_buddy_from_list(userlist, who, MSN_LIST_BL); |
1195 | 1194 |
1196 if (user != NULL && user->list_op & MSN_LIST_RL_OP) | 1195 if (user != NULL && user->list_op & MSN_LIST_RL_OP) |
1197 msn_userlist_add_buddy(userlist, who, MSN_LIST_AL, NULL); | 1196 msn_userlist_add_buddy_to_list(userlist, who, MSN_LIST_AL); |
1198 } | 1197 } |
1199 | 1198 |
1200 static void | 1199 static void |
1201 msn_set_permit_deny(PurpleConnection *gc) | 1200 msn_set_permit_deny(PurpleConnection *gc) |
1202 { | 1201 { |
1335 static void | 1334 static void |
1336 msn_rename_group(PurpleConnection *gc, const char *old_name, | 1335 msn_rename_group(PurpleConnection *gc, const char *old_name, |
1337 PurpleGroup *group, GList *moved_buddies) | 1336 PurpleGroup *group, GList *moved_buddies) |
1338 { | 1337 { |
1339 MsnSession *session; | 1338 MsnSession *session; |
1340 MsnCmdProc *cmdproc; | 1339 |
1341 const char *old_gid; | 1340 session = gc->proto_data; |
1342 const char *enc_new_group_name; | 1341 |
1343 | 1342 g_return_if_fail(session != NULL); |
1344 session = gc->proto_data; | 1343 g_return_if_fail(session->userlist != NULL); |
1345 cmdproc = session->notification->cmdproc; | 1344 |
1346 enc_new_group_name = purple_url_encode(group->name); | 1345 if (msn_userlist_find_group_with_name(session->userlist, old_name) != NULL) |
1347 | 1346 { |
1348 purple_debug_info("MSNP14","rename group:old{%s},new{%s}",old_name,enc_new_group_name); | 1347 msn_contact_rename_group(session, old_name, group->name); |
1349 old_gid = msn_userlist_find_group_id(session->userlist, old_name); | |
1350 | |
1351 if (old_gid != NULL) | |
1352 { | |
1353 /*find a Group*/ | |
1354 msn_cmdproc_send(cmdproc, "REG", "%d %s 0", old_gid, | |
1355 enc_new_group_name); | |
1356 } | 1348 } |
1357 else | 1349 else |
1358 { | 1350 { |
1359 /*not found*/ | 1351 /* not found */ |
1360 msn_cmdproc_send(cmdproc, "ADG", "%s 0", enc_new_group_name); | 1352 msn_add_group(session, NULL, group->name); |
1361 } | 1353 } |
1362 } | 1354 } |
1363 | 1355 |
1364 static void | 1356 static void |
1365 msn_convo_closed(PurpleConnection *gc, const char *who) | 1357 msn_convo_closed(PurpleConnection *gc, const char *who) |
1415 static void | 1407 static void |
1416 msn_remove_group(PurpleConnection *gc, PurpleGroup *group) | 1408 msn_remove_group(PurpleConnection *gc, PurpleGroup *group) |
1417 { | 1409 { |
1418 MsnSession *session; | 1410 MsnSession *session; |
1419 MsnCmdProc *cmdproc; | 1411 MsnCmdProc *cmdproc; |
1420 const char *group_id; | |
1421 | 1412 |
1422 session = gc->proto_data; | 1413 session = gc->proto_data; |
1423 cmdproc = session->notification->cmdproc; | 1414 cmdproc = session->notification->cmdproc; |
1424 | 1415 |
1425 /*we can't delete the default group*/ | 1416 /*we can't delete the default group*/ |
1426 if(!strcmp(group->name,MSN_INDIVIDUALS_GROUP_NAME)|| | 1417 if(!strcmp(group->name, MSN_INDIVIDUALS_GROUP_NAME)|| |
1427 !strcmp(group->name,MSN_NON_IM_GROUP_NAME)) | 1418 !strcmp(group->name, MSN_NON_IM_GROUP_NAME)) |
1428 { | 1419 { |
1429 return ; | 1420 return ; |
1430 } | 1421 } |
1431 group_id = msn_userlist_find_group_id(session->userlist, group->name); | 1422 |
1432 if (group_id != NULL) | 1423 msn_del_group(session, group->name); |
1433 { | |
1434 msn_del_group(session,group_id); | |
1435 } | |
1436 } | 1424 } |
1437 | 1425 |
1438 /** | 1426 /** |
1439 * Extract info text from info_data and add it to user_info | 1427 * Extract info text from info_data and add it to user_info |
1440 */ | 1428 */ |