Mercurial > ~mikael > mcabber > hg
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 } |