extsay-ng/extsayng.c
changeset 23 cf95a475825c
parent 21 9798e3aaa851
child 24 81cbb47f1aa6
--- a/extsay-ng/extsayng.c	Fri Apr 02 23:45:20 2010 +0200
+++ b/extsay-ng/extsayng.c	Sat Apr 03 00:50:17 2010 +0200
@@ -45,7 +45,7 @@
 };
 
 // Forks and run the external helper script
-static void screen_run_script(const char *args)
+static void screen_run_script(const gchar *args)
 {
   GError *err = NULL;
   gchar *argv[] = { "screen", "-r", "-X", "screen", NULL, NULL, NULL };
@@ -65,19 +65,34 @@
     argv[5] = ".";
 
   ret = g_spawn_async(NULL, argv, NULL,
-                      G_SPAWN_SEARCH_PATH, //|
-                      //  G_SPAWN_STDOUT_TO_DEV_NULL|G_SPAWN_STDERR_TO_DEV_NULL,
+                      G_SPAWN_SEARCH_PATH |
+                        G_SPAWN_STDOUT_TO_DEV_NULL|G_SPAWN_STDERR_TO_DEV_NULL,
                       NULL, NULL, NULL, &err);
 
   if (!ret)
     scr_LogPrint(LPRINT_NORMAL, err->message);
 }
 
-static void do_extsayng(char *args)
+static void do_extsayng(gchar *args)
 {
-  // TODO - check the selected item is a real contact
-  // (not a special buffer, nor a group...)
-  // TODO provide JID if it isn't provided
+  gpointer bud;
+
+  if (!args || !*args || !g_strcmp0(args, ".")) {
+    if (!current_buddy) {
+      scr_LogPrint(LPRINT_NORMAL, "Please select a buddy.");
+      return;
+    }
+
+    bud = BUDDATA(current_buddy);
+    if (!(buddy_gettype(bud) &
+          (ROSTER_TYPE_USER|ROSTER_TYPE_AGENT|ROSTER_TYPE_ROOM))) {
+      scr_LogPrint(LPRINT_NORMAL, "This is not a user.");
+      return;
+    }
+
+    args = (gchar*)buddy_getjid(bud);
+  }
+
   screen_run_script(args);
 }