/[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.9 by scresto, Mon May 2 23:18:32 2005 UTC revision 1.10 by scresto, Wed May 4 01:31:06 2005 UTC
# Line 138  _DEB("===>%s", Lbuffer); Line 138  _DEB("===>%s", Lbuffer);
138    return TRUE;    return TRUE;
139  }  }
140    
141  /* copie d'une image iso */  /* copie de donnees */
142  gboolean burn_dvd(Tgrave *Ag, GError **Aerror) {  gboolean burn_data2dvd(Tgrave *Ag, GError **Aerror) {
143    gchar **Lcmd;    gchar **Lcmd;
144    gchar *Lcommandline, *Ltxt;    gchar *Lcommandline, *Ltxt;
145    gchar *Lrepertoire = (gchar *)sc_grave_get_data(Ag, "tmpdir");    gchar *Lrepertoire = (gchar *)sc_grave_get_data(Ag, "tmpdir");
# Line 184  _DEB("nbr gravure = [%d]\n", Lnbrgravure Line 184  _DEB("nbr gravure = [%d]\n", Lnbrgravure
184      if (Lcurcd > 1 && !Ldosimul) {      if (Lcurcd > 1 && !Ldosimul) {
185        /* copie sur un nouveau dvd, on demande a l'utilisateur d'inserer le        /* copie sur un nouveau dvd, on demande a l'utilisateur d'inserer le
186         * nouveau dvdvierge */         * nouveau dvdvierge */
187  /*      gint Lrep;        GSList *Llmediarequis1 = sc_grave_get_data(Ag, "mediarequis1");
188          gint *Lmediatitle1 = sc_grave_get_data(Ag, "mediatitle1");
189          gboolean Lstatus;
190          Tgrave *Ldialoghash;
191          GtkWidget *Lconfirm;
192          gint Lrep;
193    
194          eject_cd(get_dvdrwtools_bus(Ldevice), NULL);
195          Lstatus = waiting_for_user(*Lmediatitle1, Ag, Llmediarequis1 , &Lmediadetect1, Ldevice);
196              
197          if (Lstatus==FALSE) {
198            /* si c'est non alors on arrete */
199            *Labort = TRUE; Lstatus = TRUE; break;
200          }
201          
202          Ldialoghash = create_dialog_select_dvdoperation(GTK_WIDGET(Lwindow), Lmediadetect1);
203          Lconfirm = sc_grave_get_data(Ldialoghash, "window");
204          Lrep = gtk_dialog_run(GTK_DIALOG(Lconfirm));
205    
206          if (Lrep != GTK_RESPONSE_YES) {
207            /* si c'est non alors on arrete */
208            *Labort = TRUE; Lstatus = TRUE;
209          } else {
210            GtkRadioButton *Labradio = GTK_RADIO_BUTTON(sc_grave_get_widget(Ldialoghash, "burninitial"));
211            g_free(Loperation);
212            Loperation = g_strdup(gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(Labradio)) ? "-Z" : "-M");
213          }
214          gtk_widget_destroy(Lconfirm);
215    
216          if (*Labort == TRUE) break;
217        }
218    
219        /* faut il ejecter le DVD apres l'operation ?
220         * oui si l'utilisateur a cocher la case "ejecter le cd" ou
221         * si il faut realiser d'autre gravure sur d'autres DVD */
222        Leject = ((Lcurcd > 1 && (Lwanteject || Lcurcd<Lnbrgravure)) || (Lcurcd == 1 && !Ldosimul && Lwanteject));
223    
224        *Loperationstatus = FALSE;
225    
226        _DEB("gravure du cd [%d]", Lcurcd);
227    
228        Ltxt = get_title_preparing(Lnbrgravure, Lcurcd, Ldosimul);
229        gtk_label_set_text(Ltitle, Ltxt);
230        g_free(Ltxt);
231    
232        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",
233            conf_get_string("growisofs"),
234            Lnotfix ? "" : "-dvd-compat",
235            Loperation,
236            get_dvdrwtools_bus(Ldevice),
237            *Lbufvitesse != '0' ? "-speed=" : "", *Lbufvitesse != '0' ? Lbufvitesse : "",
238            conf_get_boolean("overburn") ? "-overburn" : "",
239            Ldosimul ? ",dummy" : "",  /* simulation ? */
240            Lisopara,  /* parametres supplementaires tel que le nom de volume du cd */
241            Lrepertoire
242          );
243    
244        _DEB("execution [%s]\n", Lcommandline);
245        Lstatus = g_shell_parse_argv(Lcommandline, &Lnbrarg, &Lcmd, Aerror);
246        g_free(Lcommandline);
247    
248        if (Lstatus == FALSE) {
249          break;
250        }
251    
252        Lstatus = g_spawn_async_with_pipes(NULL, Lcmd, NULL, /* env argument */
253            (GSpawnFlags ) (G_SPAWN_DO_NOT_REAP_CHILD),
254            NULL, NULL, Lpid, NULL, &g_out, &g_err, Aerror);
255        g_strfreev(Lcmd);
256    
257        if (Lstatus == FALSE) {
258          g_warning("ERROR EXECUTION !\n");
259          break;
260        }
261    
262        *Lcont = 1;
263    
264        Lcom = g_io_channel_unix_new( g_out );
265        g_io_channel_set_encoding (Lcom, NULL, NULL);
266        g_io_channel_set_flags( Lcom, G_IO_FLAG_NONBLOCK, NULL );
267        Lcomevent = g_io_add_watch (Lcom, (G_IO_IN | G_IO_HUP | G_IO_ERR | G_IO_PRI),
268                                            growisofs_grave_callback, Ag);
269      
270        Lcomerr = g_io_channel_unix_new( g_err );
271        g_io_channel_set_encoding (Lcomerr, NULL, NULL);
272        g_io_channel_set_flags( Lcomerr, G_IO_FLAG_NONBLOCK, NULL );
273        Lcomerrevent = g_io_add_watch (Lcomerr, (G_IO_IN | G_IO_HUP | G_IO_ERR | G_IO_PRI),
274                                            growisofs_grave_callback, Ag);  
275        
276        while (*Lcont>0 && *Labort == FALSE) {
277          gtk_main_iteration();
278        }
279        exit_prog(*Lpid, *Labort, Aerror, NULL);
280    
281        g_source_remove(Lcomerrevent);
282        g_source_remove(Lcomevent);
283    
284        g_io_channel_shutdown(Lcomerr, FALSE, NULL);
285        g_io_channel_unref(Lcomerr);  
286        g_io_channel_shutdown(Lcom, FALSE, NULL);
287        g_io_channel_unref(Lcom);
288    
289        g_spawn_close_pid(*Lpid);
290        *Lpid = 0;
291        
292        if (*Aerror) {
293          Lstatus = FALSE;
294          break;
295        }
296        if (*Loperationstatus == FALSE) {
297          /* growisofs n'a pas reussi a grave le cd mais on n'a intercepte aucune erreur ! argh!
298           * dans tous les cas ce n'est pas normal, on genere une erreur */
299          g_set_error(Aerror, GRAVEMAN_ERROR, _ERR_UNKNOWN_ERROR,
300              _("Communication error with growisofs !"));
301          Lstatus = FALSE;
302          break;
303        }
304    
305        if (Ldosimul) {
306          /* fin de la simulation, tout s'est apparement bien passe
307           * on demande confirmation avent de commencer la vrai gravure */
308          gint Lrep;
309        GtkWidget *Lconfirm = gtk_message_dialog_new(Lwindow,        GtkWidget *Lconfirm = gtk_message_dialog_new(Lwindow,
310                                                GTK_DIALOG_MODAL, GTK_MESSAGE_QUESTION,                                              GTK_DIALOG_MODAL, GTK_MESSAGE_QUESTION,
311                                                GTK_BUTTONS_YES_NO,                                              GTK_BUTTONS_YES_NO,
312                   _("Now you should insert next DVD-RW/DVD+RW, do you want to continue operation ?"));                        _("Simulation successful. Do you want to write the DVD for real?"));
313        Lrep = gtk_dialog_run(GTK_DIALOG(Lconfirm));        Lrep = gtk_dialog_run(GTK_DIALOG(Lconfirm));
314        gtk_widget_destroy(Lconfirm);        gtk_widget_destroy(Lconfirm);
315        if (Lrep == GTK_RESPONSE_NO) {*/        if (Lrep == GTK_RESPONSE_NO) {
316          /* si c'est non alors on arrete */          /* si c'est non alors on arrete */
317  /*        *Labort = TRUE;          *Labort = TRUE;
318          Lstatus = TRUE;          Lstatus = TRUE;
319          break;          break;
320        }*/        }
321        }
322        (*Ldone)++;
323      }
324    
325      g_free(Lisopara);
326      g_free(Lbufvitesse);
327    
328    
329      return *Aerror ? FALSE : TRUE;
330    }
331    
332    /* copie d'une image iso */
333    gboolean burn_iso2dvd(Tgrave *Ag, GError **Aerror) {
334      gchar **Lcmd;
335      gchar *Lcommandline, *Ltxt;
336      gchar *Lrepertoire = (gchar *)sc_grave_get_data(Ag, "tmpdir");
337      gint *Lcont = (gint *) sc_grave_get_data(Ag, "cont");
338      gboolean *Labort = (gboolean *) sc_grave_get_data(Ag, "gabort");
339      GtkWindow *Lwindow = GTK_WINDOW(sc_grave_get_data(Ag, "window_burn"));
340      gboolean Lsimul = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(sc_grave_get_widget(Ag, "dvddatasimul")));
341      gint Lnbrgravure = gtk_spin_button_get_value(GTK_SPIN_BUTTON(sc_grave_get_widget(Ag, "nbrdvddata")));
342      gint *Ldone = (gint *)sc_grave_get_data(Ag, "done"); /* fais */
343    
344      gboolean *Loperationstatus = (gboolean *)sc_grave_get_data(Ag, "operationstatus");
345      gboolean Lwanteject = conf_get_boolean("eject");
346    
347      gint *Lpid = (gint *) sc_grave_get_data(Ag, "pid");
348      GtkWidget *Lvitesse = sc_grave_get_widget(Ag, "dstdvddataspeed");
349      Tdriveinfo *Ldevice = get_drive_info(Ag, "dstdvddatacombo");
350      GtkLabel *Ltitle = GTK_LABEL(sc_grave_get_data(Ag, "gravetitle"));
351      gchar *Loperation = sc_grave_get_data(Ag, "typeburn");
352      gboolean Leject = FALSE;
353      gboolean Ldosimul;
354      gchar *Lbufvitesse;
355      gint Lcurcd;
356      gint Lnbrpass=1;
357      gint g_out, g_err, Lnbrarg;
358      guint Lcomevent, Lcomerrevent;
359      GIOChannel *Lcom, *Lcomerr;
360      gchar *Lisopara = NULL;
361      gboolean Lstatus;
362      gint Lmediadetect1 = _MEDIA_CDRW;
363      GtkToggleButton *Lbtnnotfix = GTK_TOGGLE_BUTTON(sc_grave_get_widget(Ag, "dvddatanotfix"));
364      gboolean Lnotfix = Lbtnnotfix ? gtk_toggle_button_get_active(Lbtnnotfix) : FALSE;
365    _DEB("DVD DATA\n");
366    _DEB("nbr gravure = [%d]\n", Lnbrgravure);
367    
368      Lbufvitesse = get_combo_value(Lvitesse);
369      Lisopara = make_image_getextrapara(Ag, "dvddata");
370    
371      for (Lcurcd=1; Lcurcd<= Lnbrgravure;
372          ((Lsimul && Lnbrpass>1) || (!Lsimul)) ? ( Lcurcd++, Lnbrpass=1 ) : ( Lnbrpass++ )) {
373    
374        Ldosimul = (Lsimul && Lnbrpass==1);
375        if (Lcurcd > 1 && !Ldosimul) {
376          /* copie sur un nouveau dvd, on demande a l'utilisateur d'inserer le
377           * nouveau dvdvierge */
378        GSList *Llmediarequis1 = sc_grave_get_data(Ag, "mediarequis1");        GSList *Llmediarequis1 = sc_grave_get_data(Ag, "mediarequis1");
379        gint *Lmediatitle1 = sc_grave_get_data(Ag, "mediatitle1");        gint *Lmediatitle1 = sc_grave_get_data(Ag, "mediatitle1");
380        gboolean Lstatus;        gboolean Lstatus;
# Line 229  _DEB("nbr gravure = [%d]\n", Lnbrgravure Line 407  _DEB("nbr gravure = [%d]\n", Lnbrgravure
407        if (*Labort == TRUE) break;        if (*Labort == TRUE) break;
408      }      }
409    
   
   
410      /* faut il ejecter le DVD apres l'operation ?      /* faut il ejecter le DVD apres l'operation ?
411       * oui si l'utilisateur a cocher la case "ejecter le cd" ou       * oui si l'utilisateur a cocher la case "ejecter le cd" ou
412       * si il faut realiser d'autre gravure sur d'autres DVD */       * si il faut realiser d'autre gravure sur d'autres DVD */

Legend:
Removed from v.1.9  
changed lines
  Added in v.1.10

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