/[graveman]/graveman/current/src/growisofs.c
ViewVC logotype

Diff of /graveman/current/src/growisofs.c

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 1.1 by scresto, Tue Feb 8 02:32:57 2005 UTC revision 1.2 by scresto, Wed Feb 9 00:27:30 2005 UTC
# Line 24  Line 24 
24    
25  #include "graveman.h"  #include "graveman.h"
26    
27    #define GROWISOFS_CURRENT_WRITE_SPEED "\"Current Write Speed\" is "
28    #define GROWISOFS_DONE " done, estimate finish"
29    #define GROWISOFS_FLUSHING_CACHE ": flushing cache"
30    #define GROWISOFS_WRITING_LEADOUT ": writing lead-out"
31    #define GROWISOFS_FAILED ":-( write failed:"
32    #define GROWISOFS_USING "Using "
33    
34  /* communication avec growisofs */  /* communication avec growisofs */
35  static gchar *get_title(gint Anbrgravure, gint Acurcd, gboolean Adosimul)  
36    /* mise a jour du titre depuis le template prepare avec prepare_title */
37    void set_title(GHashTable *Ahash, gchar *Avitesse) {
38      GtkLabel *Llabel = g_hash_table_lookup(Ahash, "gravetitle");
39      gchar *Ltitleshow = g_strdup_printf(_("Writing DVD in progress at %sx..."), Avitesse);
40    
41      gtk_label_set_text(Llabel, Ltitleshow);
42      g_free(Ltitleshow);
43    }
44    
45    gchar *get_title_preparing(gint Anbrgravure, gint Acurcd, gboolean Adosimul)
46  {  {
   gchar *Ltxt = NULL;  
47    if (Anbrgravure==1) {    if (Anbrgravure==1) {
48      if (!Adosimul) {      if (!Adosimul) {
49        Ltxt = g_strdup(_("Writing in progress..."));        return g_strdup(_("DVD writing will start..."));
50      } else {      } else {
51        Ltxt = g_strdup(_("AABB Simulated DVD writing in progress..."));        return g_strdup(_("Simulated DVD writing will start..."));
52      }      }
53    } else {    } else {
54      if (!Adosimul) {      if (!Adosimul) {
55        Ltxt = g_strdup_printf(_("Writing DVD %d/%d in progress..."), Acurcd, Anbrgravure);        return g_strdup_printf(_("DVD writing %d/%d will start..."), Acurcd, Anbrgravure);
56      } else {      } else {
57        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);
58      }      }
59    }    }
   
   return Ltxt;  
60  }  }
61    
62  /* callback appele lorsque cdrecord grave les pistes */  /* callback appele lorsque cdrecord grave les pistes */
# Line 51  gboolean growisofs_grave_callback(GIOCha Line 65  gboolean growisofs_grave_callback(GIOCha
65    GIOStatus Lstatus;    GIOStatus Lstatus;
66    GHashTable *Lhash = (GHashTable *)Adata;    GHashTable *Lhash = (GHashTable *)Adata;
67    gchar *Lbuffer;    gchar *Lbuffer;
68      gchar *s, *t;
69      GtkProgressBar *Lprogressbar = GTK_PROGRESS_BAR(g_hash_table_lookup(Lhash, "pb_total"));
70      GtkProgressBar *Lprogressbar2 = GTK_PROGRESS_BAR(g_hash_table_lookup(Lhash, "pb_step"));
71      GtkLabel *Ltitle = GTK_LABEL(g_hash_table_lookup(Lhash, "gravetitle"));
72      GError **Lerreur = (GError **) g_hash_table_lookup(Lhash, "gerror"); /* pointeur erreur */
73      gdouble Lpct, Ltava;
74      gchar Lsbuf[100], Lsbuf2[100];
75      gint *Lcont = (gint *) g_hash_table_lookup(Lhash, "cont"); /* on traite encore des donnees ? */
76      gint *Ltodo = (gint *) g_hash_table_lookup(Lhash, "todo"); /* nombre de piste a traiter */
77      gint *Ldone = (gint *) g_hash_table_lookup(Lhash, "done"); /* nombre de piste deja traite */
78    
79      if (Acond == G_IO_HUP || Acond == G_IO_ERR) {
80        *Lcont = 0;
81        return FALSE;
82      }
83    
84    Lstatus = g_io_channel_read_line(Astd, &Lbuffer, NULL, NULL, NULL);      Lstatus = g_io_channel_read_line(Astd, &Lbuffer, NULL, NULL, NULL);  
85    if (!Lbuffer) return FALSE;    if (!Lbuffer) return FALSE;
86    
87  _DEB("===>%s", Lbuffer);  _DEB("===>%s", Lbuffer);
88    
89    
90      if ((s=strstr(Lbuffer, GROWISOFS_CURRENT_WRITE_SPEED))) {
91        /* mise a jour du titre lorsque l'on recois la vitesse */
92        s+=strlen(GROWISOFS_CURRENT_WRITE_SPEED);
93        if ((t = strchr(s, 'x'))) {
94          *t = 0;
95          set_title(Lhash, s);
96        }
97      } else if (!strncmp(Lbuffer, GROWISOFS_USING, strlen(GROWISOFS_USING))) {
98        /* rien pour le moment */
99      } else if (strstr(Lbuffer, GROWISOFS_DONE)) {
100        /* gravure en cours ... */
101        if ((t=strchr(Lbuffer, '%'))) {
102          s=ltrim(Lbuffer);
103    
104          /* avancement tache */
105          Lpct = 0.01 * atof(s);
106          *t=0;
107    
108          gtk_progress_bar_set_fraction(Lprogressbar2, Lpct);
109          g_snprintf(Lsbuf, sizeof(Lsbuf)-1, "%s%%", s);
110          gtk_progress_bar_set_text(Lprogressbar2, Lsbuf);
111          /* avancement total */
112          Ltava = (1.0 / (*Ltodo)) * ((*Ldone)-1+Lpct);
113          gtk_progress_bar_set_fraction(Lprogressbar, Ltava);
114          g_snprintf(Lsbuf2, sizeof(Lsbuf2)-1, "%.0f%%", Ltava*100);
115          gtk_progress_bar_set_text(Lprogressbar, Lsbuf2);
116        }
117      } else if (strstr(Lbuffer, GROWISOFS_FLUSHING_CACHE)) {
118        gtk_label_set_text(Ltitle, _("Flushing cache..."));
119        gtk_progress_bar_set_fraction(Lprogressbar2, 1);
120        gtk_progress_bar_set_text(Lprogressbar2, _("100%"));
121        Ltava = (1.0 / (*Ltodo)) * ((*Ldone));
122        gtk_progress_bar_set_fraction(Lprogressbar, Ltava);
123        g_snprintf(Lsbuf2, sizeof(Lsbuf2)-1, "%.0f%%", Ltava*100);
124        gtk_progress_bar_set_text(Lprogressbar, Lsbuf2);
125      } else if (strstr(Lbuffer, GROWISOFS_WRITING_LEADOUT)) {
126        gboolean *Loperationstatus = (gboolean *)g_hash_table_lookup(Lhash, "operationstatus");
127        gtk_label_set_text(Ltitle, _("Writing lead-out..."));
128        *Loperationstatus = TRUE;
129      } else if ((s=strstr(Lbuffer, GROWISOFS_FAILED))) {
130        gtk_label_set_text(Ltitle, _("Operation failed !"));
131        s+=strlen(GROWISOFS_FAILED);
132        g_set_error(Lerreur, GRAVEMAN_ERROR, _ERR_GROWISOFS, s ? s : _("Operation failed !"));
133        return FALSE;
134      }
135    
136    g_free(Lbuffer);    g_free(Lbuffer);
137    
138    return TRUE;    return TRUE;
# Line 101  _DEB("nbr gravure = [%d]\n", Lnbrgravure Line 178  _DEB("nbr gravure = [%d]\n", Lnbrgravure
178    Lbufgrav = get_combo_value(Lgraveur);    Lbufgrav = get_combo_value(Lgraveur);
179    Lisopara = make_image_getextrapara(Ahash, "dvddata");    Lisopara = make_image_getextrapara(Ahash, "dvddata");
180    
   
181    for (Lcurcd=1; Lcurcd<= Lnbrgravure;    for (Lcurcd=1; Lcurcd<= Lnbrgravure;
182        ((Lsimul && Lnbrpass>1) || (!Lsimul)) ? ( Lcurcd++, Lnbrpass=1 ) : ( Lnbrpass++ )) {        ((Lsimul && Lnbrpass>1) || (!Lsimul)) ? ( Lcurcd++, Lnbrpass=1 ) : ( Lnbrpass++ )) {
183    
184      Ldosimul = (Lsimul && Lnbrpass==1);      Ldosimul = (Lsimul && Lnbrpass==1);
185        if (Lcurcd > 1 && !Ldosimul) {
186          /* copie sur un nouveau dvd, on demande a l'utilisateur d'inserer le
187           * nouveau dvdvierge */
188          gint Lrep;
189          GtkWidget *Lconfirm = gtk_message_dialog_new(Lwindow,
190                                                  GTK_DIALOG_MODAL, GTK_MESSAGE_QUESTION,
191                                                  GTK_BUTTONS_YES_NO,
192                     _("Now you should insert next DVD-RW/DVD+RW, do you want to continue operation ?"));
193          Lrep = gtk_dialog_run(GTK_DIALOG(Lconfirm));
194          gtk_widget_destroy(Lconfirm);
195          if (Lrep == GTK_RESPONSE_NO) {
196            /* si c'est non alors on arrete */
197            *Labort = TRUE;
198            Lstatus = TRUE;
199            break;
200          }
201    
202        }
203    
204    
205    
206      /* faut il ejecter le DVD apres l'operation ?      /* faut il ejecter le DVD apres l'operation ?
207       * oui si l'utilisateur a cocher la case "ejecter le cd" ou       * oui si l'utilisateur a cocher la case "ejecter le cd" ou
208       * si il faut realiser d'autre gravure sur d'autres DVD */       * si il faut realiser d'autre gravure sur d'autres DVD */
# Line 114  _DEB("nbr gravure = [%d]\n", Lnbrgravure Line 211  _DEB("nbr gravure = [%d]\n", Lnbrgravure
211      *Loperationstatus = FALSE;      *Loperationstatus = FALSE;
212    
213      _DEB("gravure du cd [%d]", Lcurcd);      _DEB("gravure du cd [%d]", Lcurcd);
214      Ltxt = get_title(Lnbrgravure, Lcurcd, Ldosimul);  
215        Ltxt = get_title_preparing(Lnbrgravure, Lcurcd, Ldosimul);
216      gtk_label_set_text(Ltitle, Ltxt);      gtk_label_set_text(Ltitle, Ltxt);
217      g_free(Ltxt);      g_free(Ltxt);
218    
219      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/",
220          conf_get_string("growisofs"),          conf_get_string("growisofs"),
221          Lnotfix ? "" : "-dvd-compat",          Lnotfix ? "" : "-dvd-compat",
222          Loperation, Lbufgrav,          Loperation, Lbufgrav,
223          *Lbufvitesse != '0' ? "speed=" : "", *Lbufvitesse != '0' ? Lbufvitesse : "",          *Lbufvitesse != '0' ? "-speed=" : "", *Lbufvitesse != '0' ? Lbufvitesse : "",
224            conf_get_boolean("overburn") ? "-overburn" : "",
225          Ldosimul ? ",dummy" : "",  /* simulation ? */          Ldosimul ? ",dummy" : "",  /* simulation ? */
226          Lisopara,  /* parametres supplementaires tel que le nom de volume du cd */          Lisopara,  /* parametres supplementaires tel que le nom de volume du cd */
227          *Lrepertoire          *Lrepertoire
# Line 150  _DEB("nbr gravure = [%d]\n", Lnbrgravure Line 249  _DEB("nbr gravure = [%d]\n", Lnbrgravure
249    
250      Lcom = g_io_channel_unix_new( g_out );      Lcom = g_io_channel_unix_new( g_out );
251      g_io_channel_set_encoding (Lcom, NULL, NULL);      g_io_channel_set_encoding (Lcom, NULL, NULL);
     g_io_channel_set_buffered(Lcom, FALSE);  
252      g_io_channel_set_flags( Lcom, G_IO_FLAG_NONBLOCK, NULL );      g_io_channel_set_flags( Lcom, G_IO_FLAG_NONBLOCK, NULL );
253      Lcomevent = g_io_add_watch (Lcom, (G_IO_IN | G_IO_HUP | G_IO_ERR | G_IO_PRI),      Lcomevent = g_io_add_watch (Lcom, (G_IO_IN | G_IO_HUP | G_IO_ERR | G_IO_PRI),
254                                          growisofs_grave_callback, Ahash);                                          growisofs_grave_callback, Ahash);
255        
256      Lcomerr = g_io_channel_unix_new( g_err );      Lcomerr = g_io_channel_unix_new( g_err );
257      g_io_channel_set_encoding (Lcomerr, NULL, NULL);      g_io_channel_set_encoding (Lcomerr, NULL, NULL);
     g_io_channel_set_buffered(Lcomerr, FALSE);  
258      g_io_channel_set_flags( Lcomerr, G_IO_FLAG_NONBLOCK, NULL );      g_io_channel_set_flags( Lcomerr, G_IO_FLAG_NONBLOCK, NULL );
259      Lcomerrevent = g_io_add_watch (Lcomerr, (G_IO_IN | G_IO_HUP | G_IO_ERR | G_IO_PRI),      Lcomerrevent = g_io_add_watch (Lcomerr, (G_IO_IN | G_IO_HUP | G_IO_ERR | G_IO_PRI),
260                                          growisofs_grave_callback, Ahash);                                            growisofs_grave_callback, Ahash);  
# Line 176  _DEB("nbr gravure = [%d]\n", Lnbrgravure Line 273  _DEB("nbr gravure = [%d]\n", Lnbrgravure
273      g_io_channel_unref(Lcom);      g_io_channel_unref(Lcom);
274      g_spawn_close_pid(*Lpid);      g_spawn_close_pid(*Lpid);
275      *Lpid = 0;      *Lpid = 0;
276        
277      if (*Aerror) {      if (*Aerror) {
278        Lstatus = FALSE;        Lstatus = FALSE;
279        break;        break;

Legend:
Removed from v.1.1  
changed lines
  Added in v.1.2

savannah-hackers-public@gnu.org
ViewVC Help
Powered by ViewVC 1.1.26