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 */