35 |
#define DVDRWMEDIAINFO_COMPLETE "complete" |
#define DVDRWMEDIAINFO_COMPLETE "complete" |
36 |
|
|
37 |
/* retourne les infos sur le media inseré dans le lecteur */ |
/* retourne les infos sur le media inseré dans le lecteur */ |
38 |
gint get_dvdinfo(Tgrave *Ag, gchar *Adevice, GError **Aerror) |
gint get_dvdinfo(Tgrave *Ag, Tdriveinfo *Adevice, GError **Aerror) |
39 |
{ |
{ |
40 |
gchar Lcommandline[_BUF_SIZE]; |
gchar Lcommandline[_BUF_SIZE]; |
41 |
gboolean Lstatus; |
gboolean Lstatus; |
42 |
gint Lexit = 0; |
gchar **Lcmd; |
|
gchar *Lout = NULL, *Lerr = NULL; |
|
43 |
gchar **Larrbuf; |
gchar **Larrbuf; |
44 |
gint i; |
gint i; |
45 |
gint Llu = _MEDIA_NONE; |
gint Llu = _MEDIA_NONE; |
46 |
|
gint g_err, g_out, Lnbrarg; |
47 |
|
GIOChannel *Lcom; |
48 |
|
guint Lcomevent; |
49 |
|
gint Lloccont = 2; |
50 |
|
gint *Lpid = (gint *)sc_grave_get_data(Ag, "pid"); |
51 |
|
GString *Loutput; |
52 |
|
|
53 |
|
g_snprintf(Lcommandline, sizeof(Lcommandline)-1, "%s %s", conf_get_string("dvd+rw-mediainfo"), |
54 |
|
get_dvdrwtools_bus(Adevice)); |
55 |
|
_DEB("execution de [%s]\n", Lcommandline); |
56 |
|
if (!g_shell_parse_argv(Lcommandline, &Lnbrarg, &Lcmd, Aerror)) return 0; |
57 |
|
|
58 |
|
Lstatus = g_spawn_async_with_pipes(NULL, Lcmd, NULL, (GSpawnFlags) (G_SPAWN_DO_NOT_REAP_CHILD), NULL, NULL, Lpid, |
59 |
|
NULL, &g_out, &g_err, Aerror); |
60 |
|
g_strfreev(Lcmd); |
61 |
|
|
62 |
g_snprintf(Lcommandline, sizeof(Lcommandline)-1, "%s %s", conf_get_string("dvd+rw-mediainfo"), Adevice); |
if (Lstatus == FALSE) { |
63 |
|
return 0; |
64 |
|
} |
65 |
|
|
66 |
Lstatus = g_spawn_command_line_sync(Lcommandline, &Lout, &Lerr, &Lexit, Aerror); |
Loutput = g_string_new(""); |
67 |
|
sc_grave_set_data(Ag, Loutput, "buffer"); |
68 |
|
sc_grave_set_data(Ag, &Lloccont, "loccont"); |
69 |
|
|
70 |
|
Lcom = g_io_channel_unix_new( g_out ); |
71 |
|
g_io_channel_set_encoding (Lcom, NULL, NULL); |
72 |
|
g_io_channel_set_flags( Lcom, G_IO_FLAG_NONBLOCK, NULL ); |
73 |
|
Lcomevent = g_io_add_watch (Lcom, (G_IO_IN | G_IO_HUP | G_IO_ERR | G_IO_PRI), |
74 |
|
read_all_output_callback, Ag); |
75 |
|
|
76 |
if (Lstatus == FALSE || Lexit != 0) { |
while (Lloccont > 0) { |
77 |
g_free(Lout); g_free(Lerr); |
gtk_main_iteration(); |
|
return FALSE; |
|
78 |
} |
} |
79 |
|
exit_prog(*Lpid, FALSE, Aerror, NULL); |
80 |
|
|
81 |
|
g_source_remove(Lcomevent); |
82 |
|
|
83 |
Larrbuf = g_strsplit(Lout, "\n", 0); |
g_io_channel_shutdown(Lcom, FALSE, NULL); |
84 |
|
g_io_channel_unref(Lcom); |
85 |
|
g_spawn_close_pid(*Lpid); |
86 |
|
printf(" LU = >%s\n", Loutput->str); |
87 |
|
Larrbuf = g_strsplit(Loutput->str, "\n", 0); |
88 |
|
|
89 |
for (i=0; Larrbuf[i]; i++) { |
for (i=0; Larrbuf[i]; i++) { |
90 |
if (!*Larrbuf[i]) continue; |
if (!*Larrbuf[i]) continue; |