summaryrefslogtreecommitdiff
path: root/tools
diff options
context:
space:
mode:
authorVivia Nikolaidou <vivia@ahiru.eu>2015-06-08 20:32:02 +0300
committerTim-Philipp Müller <tim@centricular.com>2015-06-08 20:25:40 +0100
commit4fdbe215dcd55004ec00d42e875210b58bc0d2b6 (patch)
treee8152ef68d5b371ea3f204f458bb7e9572c76710 /tools
parent6221c95d482e6111ffe8fffdde1b832192c00d8c (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')
-rw-r--r--tools/gst-play.c28
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;
}