graveman-cvs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Graveman-cvs] Changes to graveman/current/src/dvdrwmediainfo.c


From: sylvain cresto
Subject: [Graveman-cvs] Changes to graveman/current/src/dvdrwmediainfo.c
Date: Mon, 28 Mar 2005 19:10:27 -0500

Index: graveman/current/src/dvdrwmediainfo.c
diff -u graveman/current/src/dvdrwmediainfo.c:1.4 
graveman/current/src/dvdrwmediainfo.c:1.5
--- graveman/current/src/dvdrwmediainfo.c:1.4   Sun Mar 27 23:51:07 2005
+++ graveman/current/src/dvdrwmediainfo.c       Tue Mar 29 00:10:26 2005
@@ -35,26 +35,56 @@
 #define DVDRWMEDIAINFO_COMPLETE "complete"
 
 /* retourne les infos sur le media inseré dans le lecteur */
-gint get_dvdinfo(Tgrave *Ag, gchar *Adevice, GError **Aerror)
+gint get_dvdinfo(Tgrave *Ag, Tdriveinfo *Adevice, GError **Aerror)
 {
   gchar Lcommandline[_BUF_SIZE];
   gboolean Lstatus;
-  gint Lexit = 0;
-  gchar *Lout = NULL, *Lerr = NULL;
+  gchar **Lcmd;
   gchar **Larrbuf;
   gint i;
   gint Llu = _MEDIA_NONE;
+  gint g_err, g_out, Lnbrarg;
+  GIOChannel *Lcom;
+  guint Lcomevent;
+  gint Lloccont = 2;
+  gint *Lpid = (gint *)sc_grave_get_data(Ag, "pid");
+  GString *Loutput;
+
+  g_snprintf(Lcommandline, sizeof(Lcommandline)-1, "%s %s", 
conf_get_string("dvd+rw-mediainfo"),
+      get_dvdrwtools_bus(Adevice));
+_DEB("execution de [%s]\n", Lcommandline);
+  if (!g_shell_parse_argv(Lcommandline, &Lnbrarg, &Lcmd, Aerror)) return 0;
+
+  Lstatus = g_spawn_async_with_pipes(NULL, Lcmd, NULL, (GSpawnFlags) 
(G_SPAWN_DO_NOT_REAP_CHILD), NULL, NULL, Lpid,
+      NULL, &g_out, &g_err, Aerror);
+  g_strfreev(Lcmd);
 
-  g_snprintf(Lcommandline, sizeof(Lcommandline)-1, "%s %s", 
conf_get_string("dvd+rw-mediainfo"), Adevice);
+  if (Lstatus == FALSE) {
+    return 0;
+  }
 
-  Lstatus = g_spawn_command_line_sync(Lcommandline, &Lout, &Lerr, &Lexit, 
Aerror);
+  Loutput = g_string_new("");
+  sc_grave_set_data(Ag, Loutput, "buffer");
+  sc_grave_set_data(Ag, &Lloccont, "loccont");
+
+  Lcom = g_io_channel_unix_new( g_out );
+  g_io_channel_set_encoding (Lcom, NULL, NULL);
+  g_io_channel_set_flags( Lcom, G_IO_FLAG_NONBLOCK, NULL );
+  Lcomevent = g_io_add_watch (Lcom, (G_IO_IN | G_IO_HUP | G_IO_ERR | G_IO_PRI),
+                                      read_all_output_callback, Ag);
 
-  if (Lstatus == FALSE || Lexit != 0) {
-    g_free(Lout); g_free(Lerr);
-    return FALSE;
+  while (Lloccont > 0) {
+    gtk_main_iteration();
   }
+  exit_prog(*Lpid, FALSE, Aerror, NULL);
+
+  g_source_remove(Lcomevent);
 
-  Larrbuf = g_strsplit(Lout, "\n", 0);
+  g_io_channel_shutdown(Lcom, FALSE, NULL);
+  g_io_channel_unref(Lcom);
+  g_spawn_close_pid(*Lpid);
+printf(" LU = >%s\n", Loutput->str);  
+  Larrbuf = g_strsplit(Loutput->str, "\n", 0);
 
   for (i=0; Larrbuf[i]; i++) {
     if (!*Larrbuf[i]) continue;




reply via email to

[Prev in Thread] Current Thread [Next in Thread]