[gnome-photos/wip/rishi/collection: 6/8] Let the BaseItem sub-classes specify where to place their thumbnails
- From: Debarshi Ray <debarshir src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-photos/wip/rishi/collection: 6/8] Let the BaseItem sub-classes specify where to place their thumbnails
- Date: Wed, 24 Jan 2018 18:03:12 +0000 (UTC)
commit 7e417dd71ace0679c414bdfef836c93766b291ae
Author: Debarshi Ray <debarshir gnome org>
Date: Wed Jan 24 17:56:27 2018 +0100
Let the BaseItem sub-classes specify where to place their thumbnails
So far, all thumbnails were located at:
~/.cache/gnome-photos/thumbnails/<size>-<generation>/<hash-of-URI>
A subsequent series of commits will add support for importing content
from attached devices, and it will be nice to separate out those
thumbnails a bit. Cameras adhering to DCF [1] can use the same URI to
refer to different images over time, regardless of whether it is the
same device or not. Manufacturers use the same URI naming scheme for
all their products, so it is likely that two different devices made by
the same manufacturer will have two distinct images at the same URI.
Given enough time, once various counters have wrapped around, it will
happen with images taken by the same camera too.
Therefore, it is desirable to not put all those thumbnails in the same
bucket, and have some degree of separation. This means that
ThumbnailFactory can't continue to determine the location for
everything, and should instead let the BaseItem sub-classes specify
where their thumbnails should be placed.
[1] https://en.wikipedia.org/wiki/Design_rule_for_Camera_File_system
https://bugzilla.gnome.org/show_bug.cgi?id=751212
src/photos-local-item.c | 3 +++
src/photos-media-server-item.c | 3 +++
src/photos-thumbnail-factory.c | 3 +--
src/photos-thumbnail-factory.h | 1 +
src/photos-utils.c | 2 ++
src/photos-utils.h | 1 +
6 files changed, 11 insertions(+), 2 deletions(-)
---
diff --git a/src/photos-local-item.c b/src/photos-local-item.c
index b88d4a48..746e21bf 100644
--- a/src/photos-local-item.c
+++ b/src/photos-local-item.c
@@ -204,6 +204,7 @@ photos_local_item_create_thumbnail (PhotosBaseItem *item, GCancellable *cancella
const gchar *uri;
g_autofree gchar *pipeline_path = NULL;
g_autofree gchar *pipeline_uri = NULL;
+ g_autofree gchar *thumbnail_path = NULL;
gint64 height;
gint64 mtime;
gint64 width;
@@ -215,6 +216,7 @@ photos_local_item_create_thumbnail (PhotosBaseItem *item, GCancellable *cancella
orientation = photos_base_item_get_orientation (PHOTOS_BASE_ITEM (self));
height = photos_base_item_get_height (PHOTOS_BASE_ITEM (self));
width = photos_base_item_get_width (PHOTOS_BASE_ITEM (self));
+ thumbnail_path = photos_utils_get_thumbnail_path_for_uri (uri);
pipeline_path = photos_local_item_get_pipeline_path (self);
pipeline_uri = photos_utils_convert_path_to_uri (pipeline_path);
@@ -226,6 +228,7 @@ photos_local_item_create_thumbnail (PhotosBaseItem *item, GCancellable *cancella
height,
width,
pipeline_uri,
+ thumbnail_path,
cancellable,
error))
goto out;
diff --git a/src/photos-media-server-item.c b/src/photos-media-server-item.c
index 67c71cb7..deed7ba3 100644
--- a/src/photos-media-server-item.c
+++ b/src/photos-media-server-item.c
@@ -81,6 +81,7 @@ photos_media_server_item_create_thumbnail (PhotosBaseItem *item, GCancellable *c
g_autoptr (GFile) file = NULL;
GQuark orientation;
gboolean ret_val;
+ g_autofree gchar *thumbnail_path = NULL;
const gchar *mime_type;
const gchar *uri;
gint64 height;
@@ -94,6 +95,7 @@ photos_media_server_item_create_thumbnail (PhotosBaseItem *item, GCancellable *c
orientation = photos_base_item_get_orientation (item);
height = photos_base_item_get_height (item);
width = photos_base_item_get_width (item);
+ thumbnail_path = photos_utils_get_thumbnail_path_for_uri (uri);
ret_val = photos_utils_create_thumbnail (file,
mime_type,
@@ -102,6 +104,7 @@ photos_media_server_item_create_thumbnail (PhotosBaseItem *item, GCancellable *c
height,
width,
"",
+ thumbnail_path,
cancellable,
error);
diff --git a/src/photos-thumbnail-factory.c b/src/photos-thumbnail-factory.c
index b0f4b3d9..453ab833 100644
--- a/src/photos-thumbnail-factory.c
+++ b/src/photos-thumbnail-factory.c
@@ -360,6 +360,7 @@ photos_thumbnail_factory_generate_thumbnail (PhotosThumbnailFactory *self,
gint64 original_height,
gint64 original_width,
const gchar *pipeline_uri,
+ const gchar *thumbnail_path,
GCancellable *cancellable,
GError **error)
{
@@ -461,14 +462,12 @@ photos_thumbnail_factory_generate_thumbnail (PhotosThumbnailFactory *self,
else
{
const gchar *orientation_str;
- g_autofree gchar *thumbnail_path = NULL;
g_autofree gchar *uri = NULL;
g_assert_true (PHOTOS_IS_THUMBNAILER_DBUS (self->thumbnailer));
uri = g_file_get_uri (file);
orientation_str = g_quark_to_string (orientation);
- thumbnail_path = photos_utils_get_thumbnail_path_for_file (file);
photos_debug (PHOTOS_DEBUG_THUMBNAILER, "Calling GenerateThumbnail for %s", uri);
if (!photos_thumbnailer_dbus_call_generate_thumbnail_sync (self->thumbnailer,
diff --git a/src/photos-thumbnail-factory.h b/src/photos-thumbnail-factory.h
index af22f3b8..4cb7d049 100644
--- a/src/photos-thumbnail-factory.h
+++ b/src/photos-thumbnail-factory.h
@@ -37,6 +37,7 @@ gboolean photos_thumbnail_factory_generate_thumbnail (Photos
gint64 original_height,
gint64 original_width,
const gchar *pipeline_uri,
+ const gchar *thumbnail_path,
GCancellable *cancellable,
GError **error);
diff --git a/src/photos-utils.c b/src/photos-utils.c
index 1743fb2b..fc25f182 100644
--- a/src/photos-utils.c
+++ b/src/photos-utils.c
@@ -362,6 +362,7 @@ photos_utils_create_thumbnail (GFile *file,
gint64 original_height,
gint64 original_width,
const gchar *pipeline_uri,
+ const gchar *thumbnail_path,
GCancellable *cancellable,
GError **error)
{
@@ -376,6 +377,7 @@ photos_utils_create_thumbnail (GFile *file,
original_height,
original_width,
pipeline_uri,
+ thumbnail_path,
cancellable,
error))
goto out;
diff --git a/src/photos-utils.h b/src/photos-utils.h
index ef3af5a6..fad7c0d1 100644
--- a/src/photos-utils.h
+++ b/src/photos-utils.h
@@ -76,6 +76,7 @@ gboolean photos_utils_create_thumbnail (GFile *file,
gint64 original_height,
gint64 original_width,
const gchar *pipeline_uri,
+ const gchar *thumbnail_path,
GCancellable *cancellable,
GError **error);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]