diff mcabber/src/commands.c @ 208:8b08f34922c5

[/trunk] Changeset 220 by mikael * jabglue: add jb_updatebuddy() * commands: add /rename command * documentation: small changes and updates
author mikael
date Sat, 07 May 2005 20:09:15 +0000
parents 766167c0c57f
children f64818ba3503
line wrap: on
line diff
--- a/mcabber/src/commands.c	Sat May 07 20:04:29 2005 +0000
+++ b/mcabber/src/commands.c	Sat May 07 20:09:15 2005 +0000
@@ -41,6 +41,7 @@
 void do_buffer(char *arg);
 void do_clear(char *arg);
 void do_info(char *arg);
+void do_rename(char *arg);
 
 // Global variable for the commands list
 static GSList *Commands;
@@ -77,7 +78,7 @@
   //cmd_add("move");
   //cmd_add("nick");
   cmd_add("quit", "Exit the software", 0, 0, NULL);
-  //cmd_add("rename");
+  cmd_add("rename", "Rename the current buddy", 0, 0, &do_rename);
   //cmd_add("request_auth");
   cmd_add("roster", "Manipulate the roster/buddylist", COMPL_ROSTER, 0,
           &do_roster);
@@ -423,3 +424,39 @@
   g_free(buffer);
 }
 
+void do_rename(char *arg)
+{
+  gpointer bud;
+  const char *jid, *group;
+  guint type;
+  char *newname, *p;
+
+  if (!arg || (*arg == 0)) {
+    scr_LogPrint("Missing parameter");
+    return;
+  }
+
+  if (!current_buddy) return;
+  bud = BUDDATA(current_buddy);
+
+  jid   = buddy_getjid(bud);
+  group = buddy_getgroupname(bud);
+  type  = buddy_gettype(bud);
+
+  if (type & ROSTER_TYPE_GROUP) {
+    scr_LogPrint("You can't rename groups");
+    return;
+  }
+
+  newname = g_strdup(arg);
+  // Remove trailing space
+  for (p = newname; *p; p++) ;
+  while (p > newname && *p == ' ') *p = 0;
+
+  buddy_setname(bud, newname);
+  jb_updatebuddy(jid, newname, group);
+
+  g_free(newname);
+  update_roster = TRUE;
+}
+