[Xfce4-commits] <parole:bluesabre/gtk3> Handle m3u files which do not use absolute filenames (Bug 10038)

Sean Davis noreply at xfce.org
Sun Aug 11 15:17:37 CEST 2013


Updating branch refs/heads/bluesabre/gtk3
         to f5c42c8707e552ba3e27fd1ab2caba1338f2c9cd (commit)
       from 980b0e2196837e1f5797977e9c4baa5069dd0681 (commit)

commit f5c42c8707e552ba3e27fd1ab2caba1338f2c9cd
Author: Sean Davis <smd.seandavis at gmail.com>
Date:   Tue Apr 30 05:35:19 2013 -0400

    Handle m3u files which do not use absolute filenames (Bug 10038)

 src/misc/parole-pl-parser.c |   49 ++++++++++++++++++++++++++++++++++++++++++-
 1 file changed, 48 insertions(+), 1 deletion(-)

diff --git a/src/misc/parole-pl-parser.c b/src/misc/parole-pl-parser.c
index b35eadf..70dde3a 100644
--- a/src/misc/parole-pl-parser.c
+++ b/src/misc/parole-pl-parser.c
@@ -56,6 +56,10 @@ typedef struct
     
 } ParoleParserData;
 
+gchar *g_substr (const gchar* string, gint start, gint end);
+
+gchar *g_char_dirname (const gchar *filename);
+
 static gchar*
 parole_filename_to_utf8(const gchar* filename)
 {
@@ -306,12 +310,44 @@ out:
     return data.list;
 }
 
+gchar *
+g_substr (const gchar* string,
+          gint         start,
+          gint         end)
+{
+    gsize len = (end - start + 1);
+    gchar *output = g_malloc0 (len + 1);
+    return g_utf8_strncpy (output, &string[start], len);
+}
+
+gchar *
+g_char_dirname (const gchar *filename)
+{
+    int index;
+    const gchar *ptr;
+    char *find;
+    gchar *f_name;
+    
+    f_name = g_strdup(filename);
+
+    find = "/";
+    ptr = strrchr((char *) f_name, find[0]);
+    
+    if (ptr)
+    {
+        index = ptr - f_name;
+        return g_substr(filename, 0, index);
+    }
+    return NULL;
+}
+
 static GSList *
 parole_pl_parser_parse_m3u (const gchar *filename)
 {
     GFile *file;
     gchar **lines;
     gchar *contents;
+    gchar *path, *pl_filename;
     GSList *list = NULL;
     gsize size;
     guint num_lines;
@@ -319,6 +355,7 @@ parole_pl_parser_parse_m3u (const gchar *filename)
     guint i;
     
     file = g_file_new_for_path (filename);
+    path = g_char_dirname(filename);
     
     if ( !g_file_load_contents (file, NULL, &contents, &size, NULL, NULL) )
 	goto out;
@@ -353,10 +390,20 @@ parole_pl_parser_parse_m3u (const gchar *filename)
     {
 	if ( lines[i][0] == '\0' || lines[i][0] == '#')
 	    continue;
+	    
+    if ( lines[i][0] != '/' )
+    {
+        pl_filename = g_strjoin("", path, lines[i], NULL);
+        list = g_slist_append (list, parole_file_new (pl_filename));
+    }
 
-	list = g_slist_append (list, parole_file_new (lines[i]));
+    else {
+	    list = g_slist_append (list, parole_file_new (lines[i]));
+	}
     }
 
+    if (pl_filename)
+        g_free(pl_filename);
     g_strfreev (lines);
 out:
 


More information about the Xfce4-commits mailing list