[grilo-plugins] tracker: Correctly set "title-from-filename"



commit ff9afc6bb2d6515c773a77b1d8ed1a985a635b17
Author: Bastien Nocera <hadess hadess net>
Date:   Wed Nov 26 15:45:39 2014 +0100

    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

 src/tracker/grl-tracker-source-api.c |   36 ++++++++++++++++++++++++++++++++++
 1 files changed, 36 insertions(+), 0 deletions(-)
---
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 {


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]