[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, 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;