[grilo-plugins] local-metadata: Override title when set from filename
- From: Bastien Nocera <hadess src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [grilo-plugins] local-metadata: Override title when set from filename
- Date: Fri, 28 Mar 2014 09:26:22 +0000 (UTC)
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]