extsay-ng/extsayng.c
changeset 23 cf95a475825c
parent 21 9798e3aaa851
child 24 81cbb47f1aa6
equal deleted inserted replaced
22:b6b45c2eb022 23:cf95a475825c
    43         .uninit         = extsayng_uninit,
    43         .uninit         = extsayng_uninit,
    44         .next           = NULL,
    44         .next           = NULL,
    45 };
    45 };
    46 
    46 
    47 // Forks and run the external helper script
    47 // Forks and run the external helper script
    48 static void screen_run_script(const char *args)
    48 static void screen_run_script(const gchar *args)
    49 {
    49 {
    50   GError *err = NULL;
    50   GError *err = NULL;
    51   gchar *argv[] = { "screen", "-r", "-X", "screen", NULL, NULL, NULL };
    51   gchar *argv[] = { "screen", "-r", "-X", "screen", NULL, NULL, NULL };
    52   gboolean ret;
    52   gboolean ret;
    53 
    53 
    63     argv[5] = (gchar*)args;
    63     argv[5] = (gchar*)args;
    64   else
    64   else
    65     argv[5] = ".";
    65     argv[5] = ".";
    66 
    66 
    67   ret = g_spawn_async(NULL, argv, NULL,
    67   ret = g_spawn_async(NULL, argv, NULL,
    68                       G_SPAWN_SEARCH_PATH, //|
    68                       G_SPAWN_SEARCH_PATH |
    69                       //  G_SPAWN_STDOUT_TO_DEV_NULL|G_SPAWN_STDERR_TO_DEV_NULL,
    69                         G_SPAWN_STDOUT_TO_DEV_NULL|G_SPAWN_STDERR_TO_DEV_NULL,
    70                       NULL, NULL, NULL, &err);
    70                       NULL, NULL, NULL, &err);
    71 
    71 
    72   if (!ret)
    72   if (!ret)
    73     scr_LogPrint(LPRINT_NORMAL, err->message);
    73     scr_LogPrint(LPRINT_NORMAL, err->message);
    74 }
    74 }
    75 
    75 
    76 static void do_extsayng(char *args)
    76 static void do_extsayng(gchar *args)
    77 {
    77 {
    78   // TODO - check the selected item is a real contact
    78   gpointer bud;
    79   // (not a special buffer, nor a group...)
    79 
    80   // TODO provide JID if it isn't provided
    80   if (!args || !*args || !g_strcmp0(args, ".")) {
       
    81     if (!current_buddy) {
       
    82       scr_LogPrint(LPRINT_NORMAL, "Please select a buddy.");
       
    83       return;
       
    84     }
       
    85 
       
    86     bud = BUDDATA(current_buddy);
       
    87     if (!(buddy_gettype(bud) &
       
    88           (ROSTER_TYPE_USER|ROSTER_TYPE_AGENT|ROSTER_TYPE_ROOM))) {
       
    89       scr_LogPrint(LPRINT_NORMAL, "This is not a user.");
       
    90       return;
       
    91     }
       
    92 
       
    93     args = (gchar*)buddy_getjid(bud);
       
    94   }
       
    95 
    81   screen_run_script(args);
    96   screen_run_script(args);
    82 }
    97 }
    83 
    98 
    84 static void extsayng_init(void)
    99 static void extsayng_init(void)
    85 {
   100 {