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, 03 May 2005 21:31:18 -0400

Index: graveman/current/src/growisofs.c
diff -u graveman/current/src/growisofs.c:1.9 
graveman/current/src/growisofs.c:1.10
--- graveman/current/src/growisofs.c:1.9        Mon May  2 23:18:32 2005
+++ graveman/current/src/growisofs.c    Wed May  4 01:31:06 2005
@@ -138,8 +138,8 @@
   return TRUE;
 }
 
-/* copie d'une image iso */
-gboolean burn_dvd(Tgrave *Ag, GError **Aerror) {
+/* copie de donnees */
+gboolean burn_data2dvd(Tgrave *Ag, GError **Aerror) {
   gchar **Lcmd;
   gchar *Lcommandline, *Ltxt;
   gchar *Lrepertoire = (gchar *)sc_grave_get_data(Ag, "tmpdir");
@@ -184,19 +184,197 @@
     if (Lcurcd > 1 && !Ldosimul) {
       /* copie sur un nouveau dvd, on demande a l'utilisateur d'inserer le
        * nouveau dvdvierge */
-/*      gint Lrep;
+      GSList *Llmediarequis1 = sc_grave_get_data(Ag, "mediarequis1");
+      gint *Lmediatitle1 = sc_grave_get_data(Ag, "mediatitle1");
+      gboolean Lstatus;
+      Tgrave *Ldialoghash;
+      GtkWidget *Lconfirm;
+      gint Lrep;
+
+      eject_cd(get_dvdrwtools_bus(Ldevice), NULL);
+      Lstatus = waiting_for_user(*Lmediatitle1, Ag, Llmediarequis1 , 
&Lmediadetect1, Ldevice);
+          
+      if (Lstatus==FALSE) {
+        /* si c'est non alors on arrete */
+        *Labort = TRUE; Lstatus = TRUE; break;
+      } 
+      
+      Ldialoghash = create_dialog_select_dvdoperation(GTK_WIDGET(Lwindow), 
Lmediadetect1);
+      Lconfirm = sc_grave_get_data(Ldialoghash, "window");
+      Lrep = gtk_dialog_run(GTK_DIALOG(Lconfirm));
+
+      if (Lrep != GTK_RESPONSE_YES) {
+        /* si c'est non alors on arrete */
+        *Labort = TRUE; Lstatus = TRUE;
+      } else {
+        GtkRadioButton *Labradio = 
GTK_RADIO_BUTTON(sc_grave_get_widget(Ldialoghash, "burninitial"));
+        g_free(Loperation);
+        Loperation = 
g_strdup(gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(Labradio)) ? "-Z" : 
"-M");
+      }
+      gtk_widget_destroy(Lconfirm);
+
+      if (*Labort == 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 */
+    Leject = ((Lcurcd > 1 && (Lwanteject || Lcurcd<Lnbrgravure)) || (Lcurcd == 
1 && !Ldosimul && Lwanteject));
+
+    *Loperationstatus = FALSE;
+
+    _DEB("gravure du cd [%d]", Lcurcd);
+
+    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 %s -gui 
-use-the-force-luke=tty%s %s -graft-points -path-list %s/pathlist",
+        conf_get_string("growisofs"), 
+        Lnotfix ? "" : "-dvd-compat",
+        Loperation,
+        get_dvdrwtools_bus(Ldevice),
+        *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
+      );
+
+    _DEB("execution [%s]\n", Lcommandline);
+    Lstatus = g_shell_parse_argv(Lcommandline, &Lnbrarg, &Lcmd, Aerror);
+    g_free(Lcommandline);
+
+    if (Lstatus == FALSE) {
+      break;
+    }
+
+    Lstatus = g_spawn_async_with_pipes(NULL, Lcmd, NULL, /* env argument */
+        (GSpawnFlags ) (G_SPAWN_DO_NOT_REAP_CHILD),
+        NULL, NULL, Lpid, NULL, &g_out, &g_err, Aerror);
+    g_strfreev(Lcmd);
+
+    if (Lstatus == FALSE) {
+      g_warning("ERROR EXECUTION !\n");
+      break;
+    }
+
+    *Lcont = 1;
+
+    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),
+                                        growisofs_grave_callback, Ag);
+  
+    Lcomerr = g_io_channel_unix_new( g_err );
+    g_io_channel_set_encoding (Lcomerr, NULL, NULL);
+    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, Ag);  
+    
+    while (*Lcont>0 && *Labort == FALSE) {
+      gtk_main_iteration(); 
+    }
+    exit_prog(*Lpid, *Labort, Aerror, NULL);
+
+    g_source_remove(Lcomerrevent);
+    g_source_remove(Lcomevent);
+
+    g_io_channel_shutdown(Lcomerr, FALSE, NULL);
+    g_io_channel_unref(Lcomerr);  
+    g_io_channel_shutdown(Lcom, FALSE, NULL);
+    g_io_channel_unref(Lcom);
+
+    g_spawn_close_pid(*Lpid);
+    *Lpid = 0;
+    
+    if (*Aerror) {
+      Lstatus = FALSE;
+      break;
+    }
+    if (*Loperationstatus == FALSE) {
+      /* growisofs n'a pas reussi a grave le cd mais on n'a intercepte aucune 
erreur ! argh!
+       * dans tous les cas ce n'est pas normal, on genere une erreur */
+      g_set_error(Aerror, GRAVEMAN_ERROR, _ERR_UNKNOWN_ERROR, 
+          _("Communication error with growisofs !"));
+      Lstatus = FALSE;
+      break;
+    }
+
+    if (Ldosimul) {
+      /* fin de la simulation, tout s'est apparement bien passe
+       * on demande confirmation avent de commencer la vrai gravure */
+      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 ?"));
+                                            GTK_DIALOG_MODAL, 
GTK_MESSAGE_QUESTION,
+                                            GTK_BUTTONS_YES_NO, 
+                      _("Simulation successful. Do you want to write the DVD 
for real?"));
       Lrep = gtk_dialog_run(GTK_DIALOG(Lconfirm));
       gtk_widget_destroy(Lconfirm);
-      if (Lrep == GTK_RESPONSE_NO) {*/
+      if (Lrep == GTK_RESPONSE_NO) {
         /* si c'est non alors on arrete */
-/*        *Labort = TRUE;
+        *Labort = TRUE;
         Lstatus = TRUE;
         break;
-      }*/
+      }
+    }
+    (*Ldone)++;
+  }
+
+  g_free(Lisopara);
+  g_free(Lbufvitesse);
+
+
+  return *Aerror ? FALSE : TRUE;
+}
+
+/* copie d'une image iso */
+gboolean burn_iso2dvd(Tgrave *Ag, GError **Aerror) {
+  gchar **Lcmd;
+  gchar *Lcommandline, *Ltxt;
+  gchar *Lrepertoire = (gchar *)sc_grave_get_data(Ag, "tmpdir");
+  gint *Lcont = (gint *) sc_grave_get_data(Ag, "cont");
+  gboolean *Labort = (gboolean *) sc_grave_get_data(Ag, "gabort");
+  GtkWindow *Lwindow = GTK_WINDOW(sc_grave_get_data(Ag, "window_burn"));
+  gboolean Lsimul = 
gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(sc_grave_get_widget(Ag, 
"dvddatasimul")));
+  gint Lnbrgravure = 
gtk_spin_button_get_value(GTK_SPIN_BUTTON(sc_grave_get_widget(Ag, 
"nbrdvddata"))); 
+  gint *Ldone = (gint *)sc_grave_get_data(Ag, "done"); /* fais */
+
+  gboolean *Loperationstatus = (gboolean *)sc_grave_get_data(Ag, 
"operationstatus");
+  gboolean Lwanteject = conf_get_boolean("eject");
+
+  gint *Lpid = (gint *) sc_grave_get_data(Ag, "pid");
+  GtkWidget *Lvitesse = sc_grave_get_widget(Ag, "dstdvddataspeed");
+  Tdriveinfo *Ldevice = get_drive_info(Ag, "dstdvddatacombo");
+  GtkLabel *Ltitle = GTK_LABEL(sc_grave_get_data(Ag, "gravetitle"));
+  gchar *Loperation = sc_grave_get_data(Ag, "typeburn");
+  gboolean Leject = FALSE;
+  gboolean Ldosimul;
+  gchar *Lbufvitesse;
+  gint Lcurcd;
+  gint Lnbrpass=1;
+  gint g_out, g_err, Lnbrarg;
+  guint Lcomevent, Lcomerrevent;
+  GIOChannel *Lcom, *Lcomerr;
+  gchar *Lisopara = NULL;
+  gboolean Lstatus;
+  gint Lmediadetect1 = _MEDIA_CDRW;
+  GtkToggleButton *Lbtnnotfix = GTK_TOGGLE_BUTTON(sc_grave_get_widget(Ag, 
"dvddatanotfix"));
+  gboolean Lnotfix = Lbtnnotfix ? gtk_toggle_button_get_active(Lbtnnotfix) : 
FALSE;
+_DEB("DVD DATA\n");
+_DEB("nbr gravure = [%d]\n", Lnbrgravure);
+
+  Lbufvitesse = get_combo_value(Lvitesse);
+  Lisopara = make_image_getextrapara(Ag, "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 */
       GSList *Llmediarequis1 = sc_grave_get_data(Ag, "mediarequis1");
       gint *Lmediatitle1 = sc_grave_get_data(Ag, "mediatitle1");
       gboolean Lstatus;
@@ -229,8 +407,6 @@
       if (*Labort == 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 */




reply via email to

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