[grilo-plugins] filesystem: Only return thumbnails if the y’re valid/up to date
- From: Juan A. Suarez Romero <jasuarez src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [grilo-plugins] filesystem: Only return thumbnails if the y’re valid/up to date
- Date: Tue, 5 Nov 2013 07:56:07 +0000 (UTC)
commit 41594ba590ab1115b48e3d1182c4a6673c0c79c2
Author: Philip Withnall <philip withnall collabora co uk>
Date: Fri Oct 11 11:31:42 2013 +0100
filesystem: Only return thumbnails if they’re valid/up to date
Use G_FILE_ATTRIBUTE_THUMBNAIL_IS_VALID to ensure that only up to date
thumbnails are returned by the filesystem and local-metadata plugins.
This uses an optional GIO dependency bump to 2.39.0. If that version of GIO
isn’t available, the new functionality won’t be used.
https://bugzilla.gnome.org/show_bug.cgi?id=709900
src/filesystem/grl-filesystem.c | 23 ++++++++++++++++++++---
src/local-metadata/grl-local-metadata.c | 29 ++++++++++++++++++++++++-----
2 files changed, 44 insertions(+), 8 deletions(-)
---
diff --git a/src/filesystem/grl-filesystem.c b/src/filesystem/grl-filesystem.c
index 5408c37..7e1f85c 100644
--- a/src/filesystem/grl-filesystem.c
+++ b/src/filesystem/grl-filesystem.c
@@ -40,7 +40,7 @@ GRL_LOG_DOMAIN_STATIC(filesystem_log_domain);
/* -------- File info ------- */
-#define FILE_ATTRIBUTES \
+#define _FILE_ATTRIBUTES \
G_FILE_ATTRIBUTE_STANDARD_NAME "," \
G_FILE_ATTRIBUTE_STANDARD_DISPLAY_NAME "," \
G_FILE_ATTRIBUTE_STANDARD_CONTENT_TYPE "," \
@@ -50,6 +50,14 @@ GRL_LOG_DOMAIN_STATIC(filesystem_log_domain);
G_FILE_ATTRIBUTE_THUMBNAIL_PATH "," \
G_FILE_ATTRIBUTE_THUMBNAILING_FAILED
+#if GLIB_CHECK_VERSION(2, 39, 0)
+#define FILE_ATTRIBUTES \
+ _FILE_ATTRIBUTES "," \
+ G_FILE_ATTRIBUTE_THUMBNAIL_IS_VALID
+#else
+#define FILE_ATTRIBUTES _FILE_ATTRIBUTES
+#endif
+
#define FILE_ATTRIBUTES_FAST \
G_FILE_ATTRIBUTE_STANDARD_IS_HIDDEN
@@ -475,6 +483,7 @@ create_content (GrlMedia *content,
gchar *str;
gchar *extension;
const gchar *mime;
+ gboolean thumb_failed, thumb_is_valid;
GError *error = NULL;
if (!info)
@@ -563,10 +572,18 @@ create_content (GrlMedia *content,
g_date_time_unref (date_time);
/* Thumbnail */
- gboolean thumb_failed =
+ thumb_failed =
g_file_info_get_attribute_boolean (info,
G_FILE_ATTRIBUTE_THUMBNAILING_FAILED);
- if (!thumb_failed) {
+#if GLIB_CHECK_VERSION (2, 39, 0)
+ thumb_is_valid =
+ g_file_info_get_attribute_boolean (info,
+ G_FILE_ATTRIBUTE_THUMBNAIL_IS_VALID);
+#else
+ thumb_is_valid = TRUE;
+#endif
+
+ if (!thumb_failed && thumb_is_valid) {
const gchar *thumb =
g_file_info_get_attribute_byte_string (info,
G_FILE_ATTRIBUTE_THUMBNAIL_PATH);
diff --git a/src/local-metadata/grl-local-metadata.c b/src/local-metadata/grl-local-metadata.c
index 421f0e3..e300433 100644
--- a/src/local-metadata/grl-local-metadata.c
+++ b/src/local-metadata/grl-local-metadata.c
@@ -428,6 +428,7 @@ got_file_info (GFile *file,
GFileInfo *info;
GError *error = NULL;
const gchar *thumbnail_path;
+ gboolean thumbnail_is_valid;
GRL_DEBUG ("got_file_info");
@@ -444,9 +445,15 @@ got_file_info (GFile *file,
thumbnail_path =
g_file_info_get_attribute_byte_string (info, G_FILE_ATTRIBUTE_THUMBNAIL_PATH);
+#if GLIB_CHECK_VERSION (2, 39, 0)
+ thumbnail_is_valid =
+ g_file_info_get_attribute_boolean (info, G_FILE_ATTRIBUTE_THUMBNAIL_IS_VALID);
+#else
+ thumbnail_is_valid = TRUE;
+#endif
- if (thumbnail_path) {
+ if (thumbnail_path && thumbnail_is_valid) {
gchar *thumbnail_uri = g_filename_to_uri (thumbnail_path, NULL, &error);
if (error)
goto error;
@@ -455,14 +462,16 @@ got_file_info (GFile *file,
grl_media_get_url (rs->media));
grl_media_set_thumbnail (rs->media, thumbnail_uri);
g_free (thumbnail_uri);
-
- rs->callback (rs->source, rs->operation_id, rs->media, rs->user_data, NULL);
+ } else if (thumbnail_path && !thumbnail_is_valid) {
+ GRL_INFO ("Found outdated thumbnail %s for media: %s", thumbnail_path,
+ grl_media_get_url (rs->media));
} else {
GRL_INFO ("Could not find thumbnail for media: %s",
grl_media_get_url (rs->media));
- rs->callback (rs->source, rs->operation_id, rs->media, rs->user_data, NULL);
}
+ rs->callback (rs->source, rs->operation_id, rs->media, rs->user_data, NULL);
+
goto exit;
error:
@@ -570,11 +579,21 @@ resolve_image (GrlSource *source,
GRL_DEBUG ("resolve_image");
if (flags & FLAG_THUMBNAIL) {
+ const gchar *attributes;
+
file = g_file_new_for_uri (grl_media_get_url (rs->media));
cancellable = g_cancellable_new ();
grl_operation_set_data (rs->operation_id, cancellable);
- g_file_query_info_async (file, G_FILE_ATTRIBUTE_THUMBNAIL_PATH,
+
+#if GLIB_CHECK_VERSION (2, 39, 0)
+ attributes = G_FILE_ATTRIBUTE_THUMBNAIL_PATH "," \
+ G_FILE_ATTRIBUTE_THUMBNAIL_IS_VALID;
+#else
+ attributes = G_FILE_ATTRIBUTE_THUMBNAIL_PATH;
+#endif
+
+ g_file_query_info_async (file, attributes,
G_FILE_QUERY_INFO_NONE, G_PRIORITY_DEFAULT, cancellable,
(GAsyncReadyCallback)got_file_info, rs);
g_object_unref (file);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]