From ff9afc6bb2d6515c773a77b1d8ed1a985a635b17 Mon Sep 17 00:00:00 2001 From: Bastien Nocera Date: Wed, 26 Nov 2014 15:45:39 +0100 Subject: tracker: Correctly set "title-from-filename" Tracker usually provides us with a title that's derived from the filename. Replicate its process to create a title from a filename to check if the title is actually set from the filename. This allows the local-metadata plugin to parse it to remove gunk, and other plugins to override its throwaway title. https://bugzilla.gnome.org/show_bug.cgi?id=740756 diff --git a/src/tracker/grl-tracker-source-api.c b/src/tracker/grl-tracker-source-api.c index 8c9fd55..fbc69a3 100644 --- a/src/tracker/grl-tracker-source-api.c +++ b/src/tracker/grl-tracker-source-api.c @@ -203,6 +203,39 @@ static GHashTable *grl_tracker_operations; /**/ static void +set_title_from_filename (GrlMedia *media) +{ + const gchar *url; + gchar *path, *display_name, *ext, *title; + guint suffix_len; + + url = grl_media_get_url (media); + if (url == NULL) + return; + + path = g_filename_from_uri (url, NULL, NULL); + if (!path) + return; + display_name = g_filename_display_basename (path); + g_free (path); + ext = strrchr (display_name, '.'); + if (!ext) + goto out; + + suffix_len = strlen (ext); + if (suffix_len != 4 && suffix_len != 5) + goto out; + + title = g_strndup (display_name, ext - display_name); + if (g_strcmp0 (grl_media_get_title (media), title) == 0) + grl_data_set_boolean (GRL_DATA (media), GRL_METADATA_KEY_TITLE_FROM_FILENAME, TRUE); + g_free (title); + +out: + g_free (display_name); +} + +static void fill_grilo_media_from_sparql (GrlTrackerSource *source, GrlMedia *media, TrackerSparqlCursor *cursor, @@ -402,6 +435,7 @@ get_sparql_type_filter (GrlOperationOptions *options, fill_grilo_media_from_sparql (GRL_TRACKER_SOURCE (spec->source), \ media, os->cursor, col); \ } \ + set_title_from_filename (media); \ \ spec->callback (spec->source, \ spec->operation_id, \ @@ -507,6 +541,7 @@ tracker_resolve_cb (GObject *source_object, fill_grilo_media_from_sparql (GRL_TRACKER_SOURCE (rs->source), rs->media, cursor, col); } + set_title_from_filename (rs->media); rs->callback (rs->source, rs->operation_id, rs->media, rs->user_data, NULL); } else { @@ -565,6 +600,7 @@ tracker_media_from_uri_cb (GObject *source_object, fill_grilo_media_from_sparql (GRL_TRACKER_SOURCE (mfus->source), media, cursor, col); } + set_title_from_filename (media); mfus->callback (mfus->source, mfus->operation_id, media, mfus->user_data, NULL); } else { -- cgit v0.10.2