comparison mcabber/src/commands.c @ 885:afdd81c2c44d

Allow /rename for groups
author Mikael Berthe <mikael@lilotux.net>
date Sun, 28 May 2006 10:42:22 +0200
parents ee39f6d94d43
children b41684465283
comparison
equal deleted inserted replaced
884:9e6d9f0cf9eb 885:afdd81c2c44d
1183 } 1183 }
1184 1184
1185 g_free(buffer); 1185 g_free(buffer);
1186 } 1186 }
1187 1187
1188 static void move_group_member(gpointer bud, void *groupnamedata)
1189 {
1190 const char *jid, *name, *groupname;
1191
1192 groupname = (char *)groupnamedata;
1193
1194 jid = buddy_getjid(bud);
1195 name = buddy_getname(bud);
1196
1197 jb_updatebuddy(jid, name, *groupname ? groupname : NULL);
1198 }
1199
1188 static void do_rename(char *arg) 1200 static void do_rename(char *arg)
1189 { 1201 {
1190 gpointer bud; 1202 gpointer bud;
1191 const char *jid, *group; 1203 const char *jid, *group;
1192 guint type; 1204 guint type;
1193 char *newname, *p; 1205 char *newname, *p;
1194 char *name_utf8; 1206 char *name_utf8;
1195 1207
1196 if (!*arg) {
1197 scr_LogPrint(LPRINT_NORMAL, "Please specify a new name.");
1198 return;
1199 }
1200
1201 if (!current_buddy) return; 1208 if (!current_buddy) return;
1202 bud = BUDDATA(current_buddy); 1209 bud = BUDDATA(current_buddy);
1203 1210
1204 jid = buddy_getjid(bud); 1211 jid = buddy_getjid(bud);
1205 group = buddy_getgroupname(bud); 1212 group = buddy_getgroupname(bud);
1206 type = buddy_gettype(bud); 1213 type = buddy_gettype(bud);
1207 1214
1208 if (type & ROSTER_TYPE_GROUP) {
1209 scr_LogPrint(LPRINT_NORMAL, "You can't rename groups.");
1210 return;
1211 }
1212 if (type & ROSTER_TYPE_SPECIAL) { 1215 if (type & ROSTER_TYPE_SPECIAL) {
1213 scr_LogPrint(LPRINT_NORMAL, "You can't rename this item."); 1216 scr_LogPrint(LPRINT_NORMAL, "You can't rename this item.");
1217 return;
1218 }
1219
1220 if (!*arg && !(type & ROSTER_TYPE_GROUP)) {
1221 scr_LogPrint(LPRINT_NORMAL, "Please specify a new name.");
1214 return; 1222 return;
1215 } 1223 }
1216 1224
1217 newname = g_strdup(arg); 1225 newname = g_strdup(arg);
1218 // Remove trailing space 1226 // Remove trailing space
1220 while (p > newname && *p == ' ') *p = 0; 1228 while (p > newname && *p == ' ') *p = 0;
1221 1229
1222 strip_arg_special_chars(newname); 1230 strip_arg_special_chars(newname);
1223 1231
1224 name_utf8 = to_utf8(newname); 1232 name_utf8 = to_utf8(newname);
1225 buddy_setname(bud, name_utf8); 1233
1226 jb_updatebuddy(jid, name_utf8, group); 1234 if (type & ROSTER_TYPE_GROUP) {
1235 // Rename a whole group
1236 foreach_group_member(bud, &move_group_member, name_utf8);
1237 // Let's jump to the previous buddy, because this group name should
1238 // disappear when we receive the server answer.
1239 scr_RosterUp();
1240 } else {
1241 // Rename a single buddy
1242 buddy_setname(bud, name_utf8);
1243 jb_updatebuddy(jid, name_utf8, group);
1244 }
1227 1245
1228 g_free(name_utf8); 1246 g_free(name_utf8);
1229 g_free(newname); 1247 g_free(newname);
1230 update_roster = TRUE; 1248 update_roster = TRUE;
1231 } 1249 }