[grilo-plugins] local-metadata: Override title when set from filename



commit 32eb153a76ea3d32cfc57ec45bf8f0dc9acf8cbb
Author: Bastien Nocera <hadess hadess net>
Date:   Thu Mar 27 22:22:09 2014 +0100

    local-metadata: Override title when set from filename
    
    And add test to that effect.
    
    https://bugzilla.gnome.org/show_bug.cgi?id=706877

 src/local-metadata/grl-local-metadata.c    |   17 +++++++--
 tests/local-metadata/test_local_metadata.c |   53 ++++++++++++++++++++++++++++
 2 files changed, 66 insertions(+), 4 deletions(-)
---
diff --git a/src/local-metadata/grl-local-metadata.c b/src/local-metadata/grl-local-metadata.c
index bd12a84..704bb85 100644
--- a/src/local-metadata/grl-local-metadata.c
+++ b/src/local-metadata/grl-local-metadata.c
@@ -512,8 +512,14 @@ resolve_video (GrlSource *source,
                  FLAG_VIDEO_EPISODE)))
     return;
 
-  miss_flags |= grl_data_has_key (data, GRL_METADATA_KEY_TITLE) ?
-    0 : FLAG_VIDEO_TITLE;
+  if (grl_data_has_key (data, GRL_METADATA_KEY_TITLE)) {
+    if (grl_data_get_boolean (data, GRL_METADATA_KEY_TITLE_FROM_FILENAME)) {
+      miss_flags = FLAG_VIDEO_TITLE;
+    } else
+      miss_flags = 0;
+  } else {
+    miss_flags = FLAG_VIDEO_TITLE;
+  }
   miss_flags |= grl_data_has_key (data, GRL_METADATA_KEY_SHOW) ?
     0 : FLAG_VIDEO_SHOWNAME;
   miss_flags |= grl_data_has_key (data, GRL_METADATA_KEY_PUBLICATION_DATE) ?
@@ -549,8 +555,9 @@ resolve_video (GrlSource *source,
              date != NULL ? g_date_time_get_year (date) : 0,
              season, episode);
 
-  /* As this is just a guess, don't erase already provided values. */
-  if (title) {
+  /* As this is just a guess, don't erase already provided values,
+   * unless GRL_METADATA_KEY_TITLE_FROM_FILENAME is set */
+  if (grl_data_get_boolean (data, GRL_METADATA_KEY_TITLE_FROM_FILENAME)) {
     if (fill_flags & FLAG_VIDEO_TITLE) {
       grl_data_set_string (data, GRL_METADATA_KEY_TITLE, title);
     }
@@ -846,6 +853,8 @@ grl_local_metadata_source_resolve (GrlSource *source,
   can_access = has_compatible_media_url (rs->media);
 
   flags = get_resolution_flags (rs->keys);
+  if (grl_data_get_boolean (GRL_DATA (rs->media), GRL_METADATA_KEY_TITLE_FROM_FILENAME))
+    flags |= FLAG_VIDEO_TITLE;
 
    if (!flags)
      error = g_error_new_literal (GRL_CORE_ERROR,
diff --git a/tests/local-metadata/test_local_metadata.c b/tests/local-metadata/test_local_metadata.c
index ae90bf8..b5670cc 100644
--- a/tests/local-metadata/test_local_metadata.c
+++ b/tests/local-metadata/test_local_metadata.c
@@ -50,6 +50,7 @@ get_show_for_title (GrlSource  *source,
   media = grl_media_video_new ();
   grl_media_set_title (media, title);
   grl_media_set_url (media, url);
+  grl_data_set_boolean (GRL_DATA (media), GRL_METADATA_KEY_TITLE_FROM_FILENAME, TRUE);
 
   keys = grl_metadata_key_list_new (GRL_METADATA_KEY_SHOW,
                                    GRL_METADATA_KEY_SEASON,
@@ -123,6 +124,57 @@ test_episodes (void)
   }
 }
 
+static void
+test_title_override (void)
+{
+  GrlRegistry *registry;
+  GrlSource *source;
+  guint i;
+
+  struct {
+    char *title;
+    gboolean from_filename;
+    char *expected;
+  } filename_tests[] = {
+    { "Test.mp4", TRUE, "Test" },
+    { "Boardwalk.Empire.S04E01.HDTV.x264-2HD.mp4", FALSE, "Boardwalk.Empire.S04E01.HDTV.x264-2HD.mp4" }
+  };
+
+  registry = grl_registry_get_default ();
+  source = grl_registry_lookup_source (registry, "grl-local-metadata");
+  g_assert (source);
+
+  for (i = 0; i < G_N_ELEMENTS(filename_tests); i++) {
+    GrlMedia *media;
+    GrlOperationOptions *options;
+    GList *keys;
+    const gchar *title;
+
+    media = grl_media_video_new ();
+    grl_media_set_title (media, filename_tests[i].title);
+    grl_data_set_boolean (GRL_DATA (media), GRL_METADATA_KEY_TITLE_FROM_FILENAME, 
filename_tests[i].from_filename);
+
+    keys = grl_metadata_key_list_new (GRL_METADATA_KEY_TITLE, GRL_METADATA_KEY_SHOW, NULL);
+    options = grl_operation_options_new (NULL);
+    grl_operation_options_set_flags (options, GRL_RESOLVE_FULL);
+
+    grl_source_resolve_sync (source,
+                            media,
+                            keys,
+                            options,
+                            NULL);
+
+    g_list_free (keys);
+    g_object_unref (options);
+
+    title = grl_media_get_title(media);
+
+    g_assert_cmpstr (filename_tests[i].expected, ==, title);
+
+    g_object_unref (media);
+  }
+}
+
 int
 main(int argc, char **argv)
 {
@@ -139,6 +191,7 @@ main(int argc, char **argv)
   test_setup ();
 
   g_test_add_func ("/local-metadata/resolve/episodes", test_episodes);
+  g_test_add_func ("/local-metadata/resolve/title-override", test_title_override);
 
   gint result = g_test_run ();
 


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