From 47593c4e5a71a95fb5ee9824e7bef8bf31d4f41f Mon Sep 17 00:00:00 2001 From: Matt Ranostay Date: Sun, 1 Oct 2017 16:38:49 -0700 Subject: binding: mediascanner: add media metadata to JSON output Add metadata of the tracks artist, title, album and genre to the JSON output for media results. Bug-AGL: SPEC-924 Change-Id: I240481b3b36909cb2de6ff7ba5c0a168d7973dc2 Signed-off-by: Matt Ranostay --- binding/media-manager.c | 27 ++++++++++++++++++++++++--- 1 file changed, 24 insertions(+), 3 deletions(-) (limited to 'binding/media-manager.c') diff --git a/binding/media-manager.c b/binding/media-manager.c index 342df47..d451b3d 100644 --- a/binding/media-manager.c +++ b/binding/media-manager.c @@ -98,7 +98,9 @@ GList* media_local_scan(GList *list) while ((tmp = (gchar *) g_dir_read_name(dir)) != NULL) { - list = g_list_append(list, g_strdup_printf("file://%s/%s", path, tmp)); + struct Media_Item *item = g_malloc0(sizeof(*item)); + item->path = g_strdup_printf("file://%s", path); + list = g_list_append(list, item); } g_free(path); @@ -132,18 +134,37 @@ GList* media_lightmediascanner_scan(void) while (sqlite3_step(res) == SQLITE_ROW) { struct stat buf; + struct Media_Item *item; const char *path = (const char *) sqlite3_column_text(res, 0); ret = stat(path, &buf); if (ret) continue; - list = g_list_append(list, g_strdup_printf("file://%s", path)); + item = g_malloc0(sizeof(*item)); + item->path = g_strdup_printf("file://%s", path); + item->metadata.title = g_strdup((gchar *) sqlite3_column_text(res, 1)); + item->metadata.artist = g_strdup((gchar *) sqlite3_column_text(res, 2)); + item->metadata.album = g_strdup((gchar *) sqlite3_column_text(res, 3)); + item->metadata.genre = g_strdup((gchar *) sqlite3_column_text(res, 4)); + item->metadata.duration = sqlite3_column_int(res, 5) * 1000; + list = g_list_append(list, item); } return list; } +static void free_media_item(void *data) +{ + struct Media_Item *item = data; + + g_free(item->metadata.title); + g_free(item->metadata.artist); + g_free(item->metadata.album); + g_free(item->metadata.genre); + g_free(item->path); + g_free(item); +} static void on_interface_proxy_properties_changed (GDBusProxy *proxy, @@ -183,7 +204,7 @@ on_interface_proxy_properties_changed (GDBusProxy *proxy, if (list != NULL && g_RegisterCallback.binding_device_added) g_RegisterCallback.binding_device_added(list); - g_list_free_full(list, g_free); + g_list_free_full(list, free_media_item); ListUnlock(); } -- cgit 1.2.3-korg