[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Graveman-cvs] Changes to graveman/current/src/dvdrwmediainfo.c
From: |
sylvain cresto |
Subject: |
[Graveman-cvs] Changes to graveman/current/src/dvdrwmediainfo.c |
Date: |
Mon, 28 Mar 2005 19:10:27 -0500 |
Index: graveman/current/src/dvdrwmediainfo.c
diff -u graveman/current/src/dvdrwmediainfo.c:1.4
graveman/current/src/dvdrwmediainfo.c:1.5
--- graveman/current/src/dvdrwmediainfo.c:1.4 Sun Mar 27 23:51:07 2005
+++ graveman/current/src/dvdrwmediainfo.c Tue Mar 29 00:10:26 2005
@@ -35,26 +35,56 @@
#define DVDRWMEDIAINFO_COMPLETE "complete"
/* retourne les infos sur le media inseré dans le lecteur */
-gint get_dvdinfo(Tgrave *Ag, gchar *Adevice, GError **Aerror)
+gint get_dvdinfo(Tgrave *Ag, Tdriveinfo *Adevice, GError **Aerror)
{
gchar Lcommandline[_BUF_SIZE];
gboolean Lstatus;
- gint Lexit = 0;
- gchar *Lout = NULL, *Lerr = NULL;
+ gchar **Lcmd;
gchar **Larrbuf;
gint i;
gint Llu = _MEDIA_NONE;
+ gint g_err, g_out, Lnbrarg;
+ GIOChannel *Lcom;
+ guint Lcomevent;
+ gint Lloccont = 2;
+ gint *Lpid = (gint *)sc_grave_get_data(Ag, "pid");
+ GString *Loutput;
+
+ g_snprintf(Lcommandline, sizeof(Lcommandline)-1, "%s %s",
conf_get_string("dvd+rw-mediainfo"),
+ get_dvdrwtools_bus(Adevice));
+_DEB("execution de [%s]\n", Lcommandline);
+ if (!g_shell_parse_argv(Lcommandline, &Lnbrarg, &Lcmd, Aerror)) return 0;
+
+ Lstatus = g_spawn_async_with_pipes(NULL, Lcmd, NULL, (GSpawnFlags)
(G_SPAWN_DO_NOT_REAP_CHILD), NULL, NULL, Lpid,
+ NULL, &g_out, &g_err, Aerror);
+ g_strfreev(Lcmd);
- g_snprintf(Lcommandline, sizeof(Lcommandline)-1, "%s %s",
conf_get_string("dvd+rw-mediainfo"), Adevice);
+ if (Lstatus == FALSE) {
+ return 0;
+ }
- Lstatus = g_spawn_command_line_sync(Lcommandline, &Lout, &Lerr, &Lexit,
Aerror);
+ Loutput = g_string_new("");
+ sc_grave_set_data(Ag, Loutput, "buffer");
+ sc_grave_set_data(Ag, &Lloccont, "loccont");
+
+ 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),
+ read_all_output_callback, Ag);
- if (Lstatus == FALSE || Lexit != 0) {
- g_free(Lout); g_free(Lerr);
- return FALSE;
+ while (Lloccont > 0) {
+ gtk_main_iteration();
}
+ exit_prog(*Lpid, FALSE, Aerror, NULL);
+
+ g_source_remove(Lcomevent);
- Larrbuf = g_strsplit(Lout, "\n", 0);
+ g_io_channel_shutdown(Lcom, FALSE, NULL);
+ g_io_channel_unref(Lcom);
+ g_spawn_close_pid(*Lpid);
+printf(" LU = >%s\n", Loutput->str);
+ Larrbuf = g_strsplit(Loutput->str, "\n", 0);
for (i=0; Larrbuf[i]; i++) {
if (!*Larrbuf[i]) continue;