[Top][All Lists]
[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 */