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


From: sylvain cresto
Subject: [Graveman-cvs] Changes to graveman/current/src/growisofs.c
Date: Tue, 08 Feb 2005 19:27:34 -0500

Index: graveman/current/src/growisofs.c
diff -u graveman/current/src/growisofs.c:1.1 
graveman/current/src/growisofs.c:1.2
--- graveman/current/src/growisofs.c:1.1        Tue Feb  8 02:32:57 2005
+++ graveman/current/src/growisofs.c    Wed Feb  9 00:27:30 2005
@@ -24,25 +24,39 @@
 
 #include "graveman.h"
 
+#define GROWISOFS_CURRENT_WRITE_SPEED "\"Current Write Speed\" is "
+#define GROWISOFS_DONE " done, estimate finish"
+#define GROWISOFS_FLUSHING_CACHE ": flushing cache"
+#define GROWISOFS_WRITING_LEADOUT ": writing lead-out"
+#define GROWISOFS_FAILED ":-( write failed:"
+#define GROWISOFS_USING "Using "
+
 /* communication avec growisofs */
-static gchar *get_title(gint Anbrgravure, gint Acurcd, gboolean Adosimul)
+
+/* mise a jour du titre depuis le template prepare avec prepare_title */
+void set_title(GHashTable *Ahash, gchar *Avitesse) {
+  GtkLabel *Llabel = g_hash_table_lookup(Ahash, "gravetitle");
+  gchar *Ltitleshow = g_strdup_printf(_("Writing DVD in progress at %sx..."), 
Avitesse);
+
+  gtk_label_set_text(Llabel, Ltitleshow);
+  g_free(Ltitleshow);
+}
+
+gchar *get_title_preparing(gint Anbrgravure, gint Acurcd, gboolean Adosimul)
 {
-  gchar *Ltxt = NULL;
   if (Anbrgravure==1) {
     if (!Adosimul) {
-      Ltxt = g_strdup(_("Writing in progress..."));
+      return g_strdup(_("DVD writing will start..."));
     } else {
-      Ltxt = g_strdup(_("AABB Simulated DVD writing in progress..."));
+      return g_strdup(_("Simulated DVD writing will start..."));
     }
   } else {
     if (!Adosimul) {
-      Ltxt = g_strdup_printf(_("Writing DVD %d/%d in progress..."), Acurcd, 
Anbrgravure);
+      return g_strdup_printf(_("DVD writing %d/%d will start..."), Acurcd, 
Anbrgravure);
     } else {
-      Ltxt = g_strdup_printf(_("Simulated DVD writing %d/%d in progress..."), 
Acurcd, Anbrgravure);
+      return g_strdup_printf(_("Simulated DVD writing %d/%d will start..."), 
Acurcd, Anbrgravure);
     }
   }
-
-  return Ltxt;
 }
 
 /* callback appele lorsque cdrecord grave les pistes */
@@ -51,11 +65,74 @@
   GIOStatus Lstatus;
   GHashTable *Lhash = (GHashTable *)Adata;
   gchar *Lbuffer;
+  gchar *s, *t;
+  GtkProgressBar *Lprogressbar = GTK_PROGRESS_BAR(g_hash_table_lookup(Lhash, 
"pb_total"));
+  GtkProgressBar *Lprogressbar2 = GTK_PROGRESS_BAR(g_hash_table_lookup(Lhash, 
"pb_step"));
+  GtkLabel *Ltitle = GTK_LABEL(g_hash_table_lookup(Lhash, "gravetitle"));
+  GError **Lerreur = (GError **) g_hash_table_lookup(Lhash, "gerror"); /* 
pointeur erreur */
+  gdouble Lpct, Ltava;
+  gchar Lsbuf[100], Lsbuf2[100];
+  gint *Lcont = (gint *) g_hash_table_lookup(Lhash, "cont"); /* on traite 
encore des donnees ? */
+  gint *Ltodo = (gint *) g_hash_table_lookup(Lhash, "todo"); /* nombre de 
piste a traiter */
+  gint *Ldone = (gint *) g_hash_table_lookup(Lhash, "done"); /* nombre de 
piste deja traite */
+
+  if (Acond == G_IO_HUP || Acond == G_IO_ERR) {
+    *Lcont = 0;
+    return FALSE;
+  }
 
   Lstatus = g_io_channel_read_line(Astd, &Lbuffer, NULL, NULL, NULL);  
   if (!Lbuffer) return FALSE;
 
 _DEB("===>%s", Lbuffer);
+
+
+  if ((s=strstr(Lbuffer, GROWISOFS_CURRENT_WRITE_SPEED))) {
+    /* mise a jour du titre lorsque l'on recois la vitesse */ 
+    s+=strlen(GROWISOFS_CURRENT_WRITE_SPEED);
+    if ((t = strchr(s, 'x'))) {
+      *t = 0;
+      set_title(Lhash, s);
+    }
+  } else if (!strncmp(Lbuffer, GROWISOFS_USING, strlen(GROWISOFS_USING))) {
+    /* rien pour le moment */
+  } else if (strstr(Lbuffer, GROWISOFS_DONE)) {
+    /* gravure en cours ... */
+    if ((t=strchr(Lbuffer, '%'))) {
+      s=ltrim(Lbuffer);
+
+      /* avancement tache */
+      Lpct = 0.01 * atof(s);
+      *t=0;
+
+      gtk_progress_bar_set_fraction(Lprogressbar2, Lpct);
+      g_snprintf(Lsbuf, sizeof(Lsbuf)-1, "%s%%", s);
+      gtk_progress_bar_set_text(Lprogressbar2, Lsbuf);
+      /* avancement total */
+      Ltava = (1.0 / (*Ltodo)) * ((*Ldone)-1+Lpct);
+      gtk_progress_bar_set_fraction(Lprogressbar, Ltava);
+      g_snprintf(Lsbuf2, sizeof(Lsbuf2)-1, "%.0f%%", Ltava*100);
+      gtk_progress_bar_set_text(Lprogressbar, Lsbuf2);
+    }
+  } else if (strstr(Lbuffer, GROWISOFS_FLUSHING_CACHE)) {
+    gtk_label_set_text(Ltitle, _("Flushing cache..."));
+    gtk_progress_bar_set_fraction(Lprogressbar2, 1);
+    gtk_progress_bar_set_text(Lprogressbar2, _("100%"));
+    Ltava = (1.0 / (*Ltodo)) * ((*Ldone));
+    gtk_progress_bar_set_fraction(Lprogressbar, Ltava);
+    g_snprintf(Lsbuf2, sizeof(Lsbuf2)-1, "%.0f%%", Ltava*100);
+    gtk_progress_bar_set_text(Lprogressbar, Lsbuf2);
+  } else if (strstr(Lbuffer, GROWISOFS_WRITING_LEADOUT)) {
+    gboolean *Loperationstatus = (gboolean *)g_hash_table_lookup(Lhash, 
"operationstatus");
+    gtk_label_set_text(Ltitle, _("Writing lead-out..."));
+    *Loperationstatus = TRUE;
+  } else if ((s=strstr(Lbuffer, GROWISOFS_FAILED))) {
+    gtk_label_set_text(Ltitle, _("Operation failed !"));
+    s+=strlen(GROWISOFS_FAILED);
+    g_set_error(Lerreur, GRAVEMAN_ERROR, _ERR_GROWISOFS, s ? s : _("Operation 
failed !"));
+    return FALSE;
+  }
+
   g_free(Lbuffer);
 
   return TRUE;
@@ -101,11 +178,31 @@
   Lbufgrav = get_combo_value(Lgraveur);
   Lisopara = make_image_getextrapara(Ahash, "dvddata");
 
-
   for (Lcurcd=1; Lcurcd<= Lnbrgravure;
       ((Lsimul && Lnbrpass>1) || (!Lsimul)) ? ( Lcurcd++, Lnbrpass=1 ) : ( 
Lnbrpass++ )) {
 
     Ldosimul = (Lsimul && Lnbrpass==1);
+    if (Lcurcd > 1 && !Ldosimul) {
+      /* copie sur un nouveau dvd, on demande a l'utilisateur d'inserer le
+       * nouveau dvdvierge */
+      gint Lrep;
+      GtkWidget *Lconfirm = gtk_message_dialog_new(Lwindow,
+                                              GTK_DIALOG_MODAL, 
GTK_MESSAGE_QUESTION,
+                                              GTK_BUTTONS_YES_NO,
+                 _("Now you should insert next DVD-RW/DVD+RW, do you want to 
continue operation ?"));
+      Lrep = gtk_dialog_run(GTK_DIALOG(Lconfirm));
+      gtk_widget_destroy(Lconfirm);
+      if (Lrep == GTK_RESPONSE_NO) {
+        /* si c'est non alors on arrete */
+        *Labort = TRUE;
+        Lstatus = TRUE;
+        break;
+      }
+
+    }
+
+
+
     /* faut il ejecter le DVD apres l'operation ?
      * oui si l'utilisateur a cocher la case "ejecter le cd" ou
      * si il faut realiser d'autre gravure sur d'autres DVD */
@@ -114,15 +211,17 @@
     *Loperationstatus = FALSE;
 
     _DEB("gravure du cd [%d]", Lcurcd);
-    Ltxt = get_title(Lnbrgravure, Lcurcd, Ldosimul);
+
+    Ltxt = get_title_preparing(Lnbrgravure, Lcurcd, Ldosimul);
     gtk_label_set_text(Ltitle, Ltxt);
     g_free(Ltxt);
 
-    Lcommandline = g_strdup_printf("%s %s %s %s %s%s -use-the-force-luke=tty%s 
%s -f %s/",
+    Lcommandline = g_strdup_printf("%s %s %s %s %s%s %s -gui 
-use-the-force-luke=tty%s %s -f %s/",
         conf_get_string("growisofs"), 
         Lnotfix ? "" : "-dvd-compat",
         Loperation, Lbufgrav,
-        *Lbufvitesse != '0' ? "speed=" : "", *Lbufvitesse != '0' ? Lbufvitesse 
: "",
+        *Lbufvitesse != '0' ? "-speed=" : "", *Lbufvitesse != '0' ? 
Lbufvitesse : "",
+        conf_get_boolean("overburn") ? "-overburn" : "",
         Ldosimul ? ",dummy" : "",  /* simulation ? */
         Lisopara,  /* parametres supplementaires tel que le nom de volume du 
cd */
         *Lrepertoire
@@ -150,14 +249,12 @@
 
     Lcom = g_io_channel_unix_new( g_out );
     g_io_channel_set_encoding (Lcom, NULL, NULL);
-    g_io_channel_set_buffered(Lcom, FALSE);
     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),
                                         growisofs_grave_callback, Ahash);
   
     Lcomerr = g_io_channel_unix_new( g_err );
     g_io_channel_set_encoding (Lcomerr, NULL, NULL);
-    g_io_channel_set_buffered(Lcomerr, FALSE);
     g_io_channel_set_flags( Lcomerr, G_IO_FLAG_NONBLOCK, NULL );
     Lcomerrevent = g_io_add_watch (Lcomerr, (G_IO_IN | G_IO_HUP | G_IO_ERR | 
G_IO_PRI),
                                         growisofs_grave_callback, Ahash);  
@@ -176,7 +273,7 @@
     g_io_channel_unref(Lcom);
     g_spawn_close_pid(*Lpid);
     *Lpid = 0;
-
+    
     if (*Aerror) {
       Lstatus = FALSE;
       break;




reply via email to

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