[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Graveman-cvs] Changes to graveman/current/src/cdrecord.c
From: |
sylvain cresto |
Subject: |
[Graveman-cvs] Changes to graveman/current/src/cdrecord.c |
Date: |
Sun, 20 Feb 2005 20:25:40 -0500 |
Index: graveman/current/src/cdrecord.c
diff -u graveman/current/src/cdrecord.c:1.20
graveman/current/src/cdrecord.c:1.21
--- graveman/current/src/cdrecord.c:1.20 Sun Feb 20 17:45:02 2005
+++ graveman/current/src/cdrecord.c Mon Feb 21 01:25:28 2005
@@ -1074,6 +1074,101 @@
return *Aerror ? FALSE : TRUE;
}
+gboolean cdrecord_mediainfo_callback(GIOChannel *Astd, GIOCondition Acond,
gpointer Adata)
+{
+ GIOStatus Lstatus;
+ Tgrave *Lg = (Tgrave *)Adata;
+ gint *Lcont = (gint *) sc_grave_get_data(Lg, "cont"); /* on traite encore
des donnees ? */
+ gchar *Ltrouve = (gchar *) sc_grave_get_data(Lg, "msinfo");
+ gchar *Lbuffer = NULL;
+ gchar *s;
+ gint Lniveau = 0;
+
+ /* fin du callback lorsque l'on recoi un signal comme quoi le pipe est ferme
*/
+ if (Acond == G_IO_HUP || Acond == G_IO_ERR) {
+ *Lcont = 0;
+ return FALSE;
+ }
+ Lstatus = g_io_channel_read_line(Astd, &Lbuffer, NULL, NULL, NULL);
+
+ for (s=Lbuffer; *s; s++) {
+ if (isdigit(*s)) {
+ if (Lniveau == 2) {
+ Lniveau = 3;
+ } else if (Lniveau == 0) {
+ Lniveau = 1;
+ }
+ } else if (*s==',') {
+ if (Lniveau == 1) {
+ Lniveau = 2;
+ } else {
+ Lniveau = 0;
+ break;
+ }
+ } else {
+ if (Lniveau != 3) Lniveau = 0;
+ break;
+ }
+ }
+
+ if (Lniveau == 3) {
+ g_strlcpy(Ltrouve, Lbuffer, _BUF_SIZE-1);
+ }
+
+ g_free(Lbuffer);
+
+ return TRUE;
+}
+
+gchar *cdrecord_get_mediainfo(Tgrave *Ag, gchar *Adevice, GError **Aerror)
+{
+ gchar **Lcmd;
+ gchar *Lcommandline, *Lout = NULL;
+ gint *Lpid = (gint *) sc_grave_get_data(Ag, "pid");
+ gint *Lcont = (gint *)sc_grave_get_data(Ag, "cont");
+ gboolean *Labort = (gboolean *) sc_grave_get_data(Ag, "gabort");
+ gchar *Lreturn = NULL;
+ gboolean Lstatus = FALSE;
+ gchar Lmsinfo[_BUF_SIZE] = "";
+ GIOChannel *Lcom;
+ guint Lcomevent;
+ gint Lexit, Lnbrarg, g_out;
+ guint Ltimeout;
+
+ (*Lcont) = 2;
+ Ltimeout = g_timeout_add(500, encours_callback, Ag);
+
+ sc_grave_set_data(Ag, &Lmsinfo, "msinfo");
+
+ Lcommandline = g_strdup_printf("%s dev=%s -msinfo",
conf_get_string("cdrecord"), Adevice);
+_DEB("execution [%s]", Lcommandline);
+ Lstatus = g_shell_parse_argv(Lcommandline, &Lnbrarg, &Lcmd, Aerror);
+ g_free(Lcommandline);
+ if (Lstatus != FALSE) {
+ *Lcont = 2;
+
+ Lstatus = g_spawn_async_with_pipes(NULL, Lcmd, NULL, (GSpawnFlags)
(G_SPAWN_DO_NOT_REAP_CHILD),
+ NULL, NULL, Lpid, NULL, &g_out, NULL, Aerror);
+
+ 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),
+ cdrecord_mediainfo_callback, Ag);
+
+ while (*Lcont > 0 && *Labort == FALSE) {
+ gtk_main_iteration();
+ }
+ }
+ g_strfreev(Lcmd);
+
+ sc_grave_del_data(Ag, "msinfo");
+
+ /* attente de la fin du timeout */
+ g_source_remove(Ltimeout);
+
+ return *Lmsinfo ? g_strdup(Lmsinfo) : NULL;
+}
/*
- [Graveman-cvs] Changes to graveman/current/src/cdrecord.c, (continued)
- [Graveman-cvs] Changes to graveman/current/src/cdrecord.c, sylvain cresto, 2005/02/02
- [Graveman-cvs] Changes to graveman/current/src/cdrecord.c, sylvain cresto, 2005/02/05
- [Graveman-cvs] Changes to graveman/current/src/cdrecord.c, sylvain cresto, 2005/02/07
- [Graveman-cvs] Changes to graveman/current/src/cdrecord.c, sylvain cresto, 2005/02/08
- [Graveman-cvs] Changes to graveman/current/src/cdrecord.c, sylvain cresto, 2005/02/12
- [Graveman-cvs] Changes to graveman/current/src/cdrecord.c, sylvain cresto, 2005/02/12
- [Graveman-cvs] Changes to graveman/current/src/cdrecord.c, sylvain cresto, 2005/02/15
- [Graveman-cvs] Changes to graveman/current/src/cdrecord.c, sylvain cresto, 2005/02/16
- [Graveman-cvs] Changes to graveman/current/src/cdrecord.c, sylvain cresto, 2005/02/19
- [Graveman-cvs] Changes to graveman/current/src/cdrecord.c, sylvain cresto, 2005/02/20
- [Graveman-cvs] Changes to graveman/current/src/cdrecord.c,
sylvain cresto <=
- [Graveman-cvs] Changes to graveman/current/src/cdrecord.c, sylvain cresto, 2005/02/26