diff options
author | Vivia Nikolaidou <vivia@ahiru.eu> | 2015-06-08 20:32:02 +0300 |
---|---|---|
committer | Tim-Philipp Müller <tim@centricular.com> | 2015-06-08 20:25:40 +0100 |
commit | 4fdbe215dcd55004ec00d42e875210b58bc0d2b6 (patch) | |
tree | e8152ef68d5b371ea3f204f458bb7e9572c76710 /tools/gst-play.c | |
parent | 6221c95d482e6111ffe8fffdde1b832192c00d8c (diff) |
tools: gst-play: sort directory entries
When adding a directory to the playlist, the order would be whatever
g_dir_read_name returned. Sorting these using natural sort order.
https://bugzilla.gnome.org/show_bug.cgi?id=750585
Diffstat (limited to 'tools/gst-play.c')
-rw-r--r-- | tools/gst-play.c | 28 |
1 files changed, 25 insertions, 3 deletions
diff --git a/tools/gst-play.c b/tools/gst-play.c index 26bebd94d..2902df3c7 100644 --- a/tools/gst-play.c +++ b/tools/gst-play.c @@ -588,6 +588,21 @@ do_play (GstPlay * play) g_main_loop_run (play->loop); } +static gint +compare (gconstpointer a, gconstpointer b) +{ + gchar *a1, *b1; + gint ret; + + a1 = g_utf8_collate_key_for_filename ((gchar *) a, -1); + b1 = g_utf8_collate_key_for_filename ((gchar *) b, -1); + ret = strcmp (a1, b1); + g_free (a1); + g_free (b1); + + return ret; +} + static void add_to_playlist (GPtrArray * playlist, const gchar * filename) { @@ -601,17 +616,24 @@ add_to_playlist (GPtrArray * playlist, const gchar * filename) if ((dir = g_dir_open (filename, 0, NULL))) { const gchar *entry; + GList *l, *files = NULL; - /* FIXME: sort entries for each directory? */ while ((entry = g_dir_read_name (dir))) { gchar *path; path = g_strconcat (filename, G_DIR_SEPARATOR_S, entry, NULL); - add_to_playlist (playlist, path); - g_free (path); + files = g_list_insert_sorted (files, path, compare); } g_dir_close (dir); + + for (l = files; l != NULL; l = l->next) { + gchar *path = (gchar *) l->data; + + add_to_playlist (playlist, path); + g_free (path); + } + g_list_free (files); return; } |