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/cdrdao.c


From: sylvain cresto
Subject: [Graveman-cvs] Changes to graveman/current/src/cdrdao.c
Date: Sun, 27 Mar 2005 18:51:27 -0500

Index: graveman/current/src/cdrdao.c
diff -u graveman/current/src/cdrdao.c:1.8 graveman/current/src/cdrdao.c:1.9
--- graveman/current/src/cdrdao.c:1.8   Tue Mar 22 00:27:13 2005
+++ graveman/current/src/cdrdao.c       Sun Mar 27 23:51:07 2005
@@ -106,7 +106,7 @@
   *Lbuffer = 0;
   Lstatus = g_io_channel_read_chars(Astd, Lbuffer, _BUF_SIZE-1, &Llu, NULL);  
   if (!*Lbuffer || Lstatus == G_IO_STATUS_ERROR || Lstatus == 
G_IO_STATUS_AGAIN) {
-    return FALSE;
+    return TRUE;
   }
   Lbuffer[Llu]=0;
 _DEB("===>%s", Lbuffer);
@@ -329,6 +329,10 @@
     if (Lcurcd > 1 && !Ldosimul) {
       /* copie sur un nouveau cd, on demande a l'utilisateur d'inserer le
        * nouveau cd vierge */
+      GSList *Llmediarequis = g_slist_append(NULL, GINT_TO_POINTER(_MEDIA_CDR 
+ _MEDIA_APPENDABLE));
+      gboolean Lstatus;
+      Llmediarequis = g_slist_append(Llmediarequis, 
GINT_TO_POINTER(_MEDIA_CDRW + _MEDIA_APPENDABLE));
+
 /*      gint Lrep;
       GtkWidget *Lconfirm = gtk_message_dialog_new(Lwindow,
                                               GTK_DIALOG_MODAL, 
GTK_MESSAGE_QUESTION,
@@ -337,12 +341,14 @@
       Lrep = gtk_dialog_run(GTK_DIALOG(Lconfirm));
       gtk_widget_destroy(Lconfirm);
       if (Lrep == GTK_RESPONSE_NO) {*/
-      if (waiting_for_user("", Ag, _MEDIA_CDR + _MEDIA_APPENDABLE , 
&Lmediadetect1, Lbufgrav)==FALSE) {
+      Lstatus = waiting_for_user(_MEDIA_BLANKORAPPENDABLE, Ag, Llmediarequis, 
&Lmediadetect1, Lbufgrav);
+      g_slist_free(Llmediarequis);
+
+      if (Lstatus==FALSE) {
         /* si c'est non alors on arrete */
         *Labort = TRUE;
         Lstatus = TRUE;
       }
-
     }
 
 /*    Lbuftitle = get_title(Lnbrgravure, Lcurcd, Ldosimul);
@@ -465,26 +471,60 @@
 
 
 /* retourne les infos sur le media inseré dans le lecteur */
-gint get_cdinfo(gchar *Adevice, GError **Aerror)
+gint get_cdinfo(Tgrave *Ag, gchar *Adevice, GError **Aerror)
 {
   gchar Lcommandline[_BUF_SIZE];
   gboolean Lstatus;
-  gint Lexit = 0;
-  gchar *Lout = NULL, *Lerr = NULL;
   gchar **Larrbuf;
+  gchar **Lcmd;
   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 disk-info --device %s", 
conf_get_string("cdrdao"), Adevice);
+  if (!g_shell_parse_argv(Lcommandline, &Lnbrarg, &Lcmd, Aerror)) return 0;
+
 
-  Lstatus = g_spawn_command_line_sync(Lcommandline, &Lout, &Lerr, &Lexit, 
Aerror);
+  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);
 
-  if (Lstatus == FALSE || Lexit != 0) {
-    g_free(Lout); g_free(Lerr);
+  if (Lstatus == FALSE) {
     return 0;
   }
-printf("lout = %s\n", Lout);
-  Larrbuf = g_strsplit(Lout, "\n", 0);
+
+  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);
+
+  while (Lloccont > 0) {
+    gtk_main_iteration();
+  }
+
+  g_source_remove(Lcomevent);
+
+  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);
+
+  g_string_free(Loutput, TRUE);
+
+  sc_grave_del_data(Ag, "loccount");
+  sc_grave_del_data(Ag, "buffer");
+
 
   for (i=0; Larrbuf[i]; i++) {
     if (!*Larrbuf[i]) continue;
@@ -496,10 +536,12 @@
     } else if (!strncmp(Larrbuf[i], CDRDAO_TOCTYPE, strlen(CDRDAO_TOCTYPE))) {
       if (strstr(Larrbuf[i], CDRDAO_CD)) {
         Llu += _MEDIA_CD;
+        printf("oui cd !\n");
       }
     } else if (!strncmp(Larrbuf[i], CDRDAO_CDR, strlen(CDRDAO_CDR))) {
       if (!strstr(Larrbuf[i], CDRDAO_NA)) {
         Llu += _MEDIA_CDR;
+        printf("oui cdr !\n");
       }
     } else if (!strncmp(Larrbuf[i], CDRDAO_EMPTY, strlen(CDRDAO_EMPTY))) {
       if (strstr(Larrbuf[i], CDRDAO_YES)) {
@@ -512,6 +554,7 @@
     } else if (!strncmp(Larrbuf[i], CDRDAO_APPENDABLE, 
strlen(CDRDAO_APPENDABLE))) {
       if (!strstr(Larrbuf[i], CDRDAO_NO)) {
         Llu += _MEDIA_APPENDABLE;
+        printf("oui appednable !\n");
       }
     }
   }




reply via email to

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