[gnome-photos/wip/rishi/buffer-decoder: 14/23] Make photos_base_item_download return a GFile instead of a path
- From: Debarshi Ray <debarshir src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-photos/wip/rishi/buffer-decoder: 14/23] Make photos_base_item_download return a GFile instead of a path
- Date: Tue, 18 Sep 2018 05:40:14 +0000 (UTC)
commit c070b6d42fa7cac8db93105b67ac39a268ceee13
Author: Debarshi Ray <debarshir gnome org>
Date: Thu Sep 6 09:58:37 2018 +0200
Make photos_base_item_download return a GFile instead of a path
It's prudent to standardize around GFile across the code because:
* Being a reference counted object it's cheaper to pass around. No
need to allocate little memory buffers to copy strings around.
* Supports both paths and URIs. Even though, in this particular case,
it's always going to be a local path, that's not true for other
areas of the code.
* Encapsulates all GIO operations that can be performed on a file. No
need to create temporary file objects before doing something.
For all these reasons, the new codec API for GeglBuffer is also based
around GFile.
https://gitlab.gnome.org/GNOME/gnome-photos/issues/63
src/photos-base-item.c | 28 ++++++++++++++++++----------
src/photos-base-item.h | 8 ++++----
src/photos-device-item.c | 2 +-
src/photos-dlna-renderer.c | 12 +++++++++---
src/photos-facebook-item.c | 10 +++++-----
src/photos-flickr-item.c | 6 +++---
src/photos-google-item.c | 9 ++++-----
src/photos-local-item.c | 14 ++++++++------
src/photos-media-server-item.c | 6 +++---
9 files changed, 55 insertions(+), 40 deletions(-)
---
diff --git a/src/photos-base-item.c b/src/photos-base-item.c
index 453e2eee..c6709735 100644
--- a/src/photos-base-item.c
+++ b/src/photos-base-item.c
@@ -1049,12 +1049,12 @@ photos_base_item_download_in_thread_func (GTask *task,
GCancellable *cancellable)
{
PhotosBaseItem *self = PHOTOS_BASE_ITEM (source_object);
- g_autofree gchar *path = NULL;
+ g_autoptr (GFile) file = NULL;
{
g_autoptr (GError) error = NULL;
- path = photos_base_item_download (self, cancellable, &error);
+ file = photos_base_item_download (self, cancellable, &error);
if (error != NULL)
{
g_task_return_error (task, g_steal_pointer (&error));
@@ -1062,7 +1062,7 @@ photos_base_item_download_in_thread_func (GTask *task,
}
}
- g_task_return_pointer (task, g_strdup (path), g_free);
+ g_task_return_pointer (task, g_object_ref (file), g_object_unref);
out:
return;
@@ -1461,6 +1461,7 @@ static GeglBuffer *
photos_base_item_load_buffer (PhotosBaseItem *self, GCancellable *cancellable, GError **error)
{
PhotosBaseItemPrivate *priv;
+ g_autoptr (GFile) file = NULL;
g_autoptr (GeglBuffer) buffer = NULL;
GeglBuffer *ret_val = NULL;
GeglNode *buffer_sink;
@@ -1472,10 +1473,11 @@ photos_base_item_load_buffer (PhotosBaseItem *self, GCancellable *cancellable, G
priv = photos_base_item_get_instance_private (self);
- path = photos_base_item_download (self, cancellable, error);
- if (path == NULL)
+ file = photos_base_item_download (self, cancellable, error);
+ if (file == NULL)
goto out;
+ path = g_file_get_path (file);
if (!g_utf8_validate (path, -1, NULL))
{
g_set_error (error, PHOTOS_ERROR, 0, "Path is not UTF-8 encoded");
@@ -1960,6 +1962,7 @@ photos_base_item_save_metadata_in_thread_func (GTask *task,
PhotosBaseItem *self = PHOTOS_BASE_ITEM (source_object);
PhotosBaseItemPrivate *priv;
GFile *export_file = G_FILE (task_data);
+ g_autoptr (GFile) source_file = NULL;
g_autoptr (GExiv2Metadata) metadata = NULL;
g_autofree gchar *export_path = NULL;
g_autofree gchar *source_path = NULL;
@@ -1971,7 +1974,7 @@ photos_base_item_save_metadata_in_thread_func (GTask *task,
{
g_autoptr (GError) error = NULL;
- source_path = photos_base_item_download (self, cancellable, &error);
+ source_file = photos_base_item_download (self, cancellable, &error);
if (error != NULL)
{
g_task_return_error (task, g_steal_pointer (&error));
@@ -1980,6 +1983,7 @@ photos_base_item_save_metadata_in_thread_func (GTask *task,
}
metadata = gexiv2_metadata_new ();
+ source_path = g_file_get_path (source_file);
{
g_autoptr (GError) error = NULL;
@@ -3349,19 +3353,23 @@ photos_base_item_destroy (PhotosBaseItem *self)
}
-gchar *
+GFile *
photos_base_item_download (PhotosBaseItem *self, GCancellable *cancellable, GError **error)
{
PhotosBaseItemPrivate *priv;
- gchar *ret_val;
+ g_autoptr (GFile) file = NULL;
+ GFile *ret_val = NULL;
g_return_val_if_fail (PHOTOS_IS_BASE_ITEM (self), NULL);
priv = photos_base_item_get_instance_private (self);
g_mutex_lock (&priv->mutex_download);
- ret_val = PHOTOS_BASE_ITEM_GET_CLASS (self)->download (self, cancellable, error);
+ file = PHOTOS_BASE_ITEM_GET_CLASS (self)->download (self, cancellable, error);
g_mutex_unlock (&priv->mutex_download);
+ g_return_val_if_fail (g_file_is_native (file), NULL);
+ ret_val = g_object_ref (file);
+
return ret_val;
}
@@ -3383,7 +3391,7 @@ photos_base_item_download_async (PhotosBaseItem *self,
}
-gchar *
+GFile *
photos_base_item_download_finish (PhotosBaseItem *self, GAsyncResult *res, GError **error)
{
GTask *task;
diff --git a/src/photos-base-item.h b/src/photos-base-item.h
index c889ee16..864cdddc 100644
--- a/src/photos-base-item.h
+++ b/src/photos-base-item.h
@@ -1,7 +1,7 @@
/*
* Photos - access, organize and share your photos on GNOME
* Copyright © 2014 Pranav Kant
- * Copyright © 2012 – 2017 Red Hat, Inc.
+ * Copyright © 2012 – 2018 Red Hat, Inc.
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -60,7 +60,7 @@ struct _PhotosBaseItemClass
GStrv (*create_pipeline_paths) (PhotosBaseItem *self);
gboolean (*create_thumbnail) (PhotosBaseItem *self, GCancellable *cancellable, GError
**error);
gchar *(*create_thumbnail_path) (PhotosBaseItem *self);
- gchar *(*download) (PhotosBaseItem *self, GCancellable *cancellable, GError
**error);
+ GFile *(*download) (PhotosBaseItem *self, GCancellable *cancellable, GError
**error);
GtkWidget *(*get_source_widget) (PhotosBaseItem *self);
gboolean (*metadata_add_shared) (PhotosBaseItem *self,
const gchar *provider_type,
@@ -95,7 +95,7 @@ gchar *photos_base_item_create_thumbnail_path (PhotosBaseItem *se
void photos_base_item_destroy (PhotosBaseItem *self);
-gchar *photos_base_item_download (PhotosBaseItem *self,
+GFile *photos_base_item_download (PhotosBaseItem *self,
GCancellable *cancellable,
GError **error);
@@ -104,7 +104,7 @@ void photos_base_item_download_async (PhotosBaseItem *se
GAsyncReadyCallback callback,
gpointer user_data);
-gchar *photos_base_item_download_finish (PhotosBaseItem *self,
+GFile *photos_base_item_download_finish (PhotosBaseItem *self,
GAsyncResult *res,
GError **error);
diff --git a/src/photos-device-item.c b/src/photos-device-item.c
index 7d775617..cf067edd 100644
--- a/src/photos-device-item.c
+++ b/src/photos-device-item.c
@@ -302,7 +302,7 @@ photos_device_item_create_thumbnail_path (PhotosBaseItem *item)
}
-static gchar *
+static GFile *
photos_device_item_download (PhotosBaseItem *item, GCancellable *cancellable, GError **error)
{
g_assert_not_reached ();
diff --git a/src/photos-dlna-renderer.c b/src/photos-dlna-renderer.c
index 2fbae0bf..3beea43a 100644
--- a/src/photos-dlna-renderer.c
+++ b/src/photos-dlna-renderer.c
@@ -1,7 +1,7 @@
/*
* Photos - access, organize and share your photos on GNOME
* Copyright © 2013 Intel Corporation. All rights reserved.
- * Copyright © 2013 – 2017 Red Hat, Inc.
+ * Copyright © 2013 – 2018 Red Hat, Inc.
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -431,13 +431,14 @@ photos_dlna_renderer_share_download_cb (GObject *source_object,
{
PhotosDlnaRenderer *self;
GError *error;
+ GFile *file = NULL;
GTask *task = G_TASK (user_data);
gchar *filename;
self = PHOTOS_DLNA_RENDERER (g_task_get_source_object (task));
error = NULL;
- filename = photos_base_item_download_finish (PHOTOS_BASE_ITEM (source_object), res, &error);
+ file = photos_base_item_download_finish (PHOTOS_BASE_ITEM (source_object), res, &error);
RETURN_ON_ERROR (task, error, "Unable to extract the local filename for the shared item");
/* This will call a sequence of DBus methods to send the item to the DMR:
@@ -451,12 +452,14 @@ photos_dlna_renderer_share_download_cb (GObject *source_object,
*/
/* 1) DleynaRenderer.PushHost.HostFile() */
+ filename = g_file_get_path (file);
dleyna_renderer_push_host_call_host_file (self->push_host,
filename,
g_task_get_cancellable (task),
photos_dlna_renderer_share_host_file_cb,
task);
g_free (filename);
+ g_object_unref (file);
}
@@ -539,21 +542,24 @@ photos_dlna_renderer_unshare_download_cb (GObject *source_object,
{
PhotosDlnaRenderer *self;
GError *error;
+ GFile *file = NULL;
GTask *task = G_TASK (user_data);
gchar *filename;
self = PHOTOS_DLNA_RENDERER (g_task_get_source_object (task));
error = NULL;
- filename = photos_base_item_download_finish (PHOTOS_BASE_ITEM (source_object), res, &error);
+ file = photos_base_item_download_finish (PHOTOS_BASE_ITEM (source_object), res, &error);
RETURN_ON_ERROR (task, error, "Unable to extract the local filename for the shared item");
+ filename = g_file_get_path (file);
dleyna_renderer_push_host_call_remove_file (self->push_host,
filename,
g_task_get_cancellable (task),
photos_dlna_renderer_unshare_remove_file_cb,
task);
g_free (filename);
+ g_object_unref (file);
}
diff --git a/src/photos-facebook-item.c b/src/photos-facebook-item.c
index 33c9efc0..980775a8 100644
--- a/src/photos-facebook-item.c
+++ b/src/photos-facebook-item.c
@@ -1,7 +1,7 @@
/*
* Photos - access, organize and share your photos on GNOME
* Copyright © 2013 Álvaro Peña
- * Copyright © 2014 – 2017 Red Hat, Inc.
+ * Copyright © 2014 – 2018 Red Hat, Inc.
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -190,9 +190,10 @@ photos_facebook_item_create_thumbnail (PhotosBaseItem *item, GCancellable *cance
}
-static gchar *
+static GFile *
photos_facebook_item_download (PhotosBaseItem *item, GCancellable *cancellable, GError **error)
{
+ GFile *ret_val = NULL;
g_autoptr (GFile) local_file = NULL;
g_autoptr (GFile) remote_file = NULL;
GFBGraphPhoto *photo = NULL; /* TODO: use g_autoptr */
@@ -201,7 +202,6 @@ photos_facebook_item_download (PhotosBaseItem *item, GCancellable *cancellable,
const gchar *local_filename;
g_autofree gchar *local_dir = NULL;
g_autofree gchar *local_path = NULL;
- gchar *ret_val = NULL;
cache_dir = g_get_user_cache_dir ();
local_dir = g_build_filename (cache_dir, PACKAGE_TARNAME, "facebook", NULL);
@@ -209,6 +209,7 @@ photos_facebook_item_download (PhotosBaseItem *item, GCancellable *cancellable,
local_filename = photos_base_item_get_filename (item);
local_path = g_build_filename (local_dir, local_filename, NULL);
+ local_file = g_file_new_for_path (local_path);
if (g_file_test (local_path, G_FILE_TEST_EXISTS))
goto end;
@@ -224,7 +225,6 @@ photos_facebook_item_download (PhotosBaseItem *item, GCancellable *cancellable,
}
remote_file = g_file_new_for_uri (higher_image->source);
- local_file = g_file_new_for_path (local_path);
photos_debug (PHOTOS_DEBUG_NETWORK, "Downloading %s from Facebook to %s", higher_image->source,
local_path);
if (!g_file_copy (remote_file,
@@ -240,7 +240,7 @@ photos_facebook_item_download (PhotosBaseItem *item, GCancellable *cancellable,
}
end:
- ret_val = g_steal_pointer (&local_path);
+ ret_val = g_object_ref (local_file);
out:
g_clear_object (&photo);
diff --git a/src/photos-flickr-item.c b/src/photos-flickr-item.c
index 3f5d478c..7b344a7c 100644
--- a/src/photos-flickr-item.c
+++ b/src/photos-flickr-item.c
@@ -258,9 +258,10 @@ photos_flickr_item_create_thumbnail (PhotosBaseItem *item, GCancellable *cancell
}
-static gchar *
+static GFile *
photos_flickr_item_download (PhotosBaseItem *item, GCancellable *cancellable, GError **error)
{
+ GFile *ret_val = NULL;
g_autoptr (GFile) local_file = NULL;
g_autoptr (GFile) remote_file = NULL;
const gchar *cache_dir;
@@ -268,7 +269,6 @@ photos_flickr_item_download (PhotosBaseItem *item, GCancellable *cancellable, GE
const gchar *uri;
g_autofree gchar *local_dir = NULL;
g_autofree gchar *local_path = NULL;
- gchar *ret_val = NULL;
uri = photos_base_item_get_uri (item);
remote_file = g_file_new_for_uri (uri);
@@ -297,7 +297,7 @@ photos_flickr_item_download (PhotosBaseItem *item, GCancellable *cancellable, GE
}
}
- ret_val = g_steal_pointer (&local_path);
+ ret_val = g_object_ref (local_file);
out:
return ret_val;
diff --git a/src/photos-google-item.c b/src/photos-google-item.c
index faf7104a..718ee346 100644
--- a/src/photos-google-item.c
+++ b/src/photos-google-item.c
@@ -219,18 +219,18 @@ photos_google_item_create_thumbnail (PhotosBaseItem *item, GCancellable *cancell
}
-static gchar *
+static GFile *
photos_google_item_download (PhotosBaseItem *item, GCancellable *cancellable, GError **error)
{
GDataEntry *entry = NULL;
GFile *local_file = NULL;
GFile *remote_file = NULL;
+ GFile *ret_val = NULL;
const gchar *cache_dir;
const gchar *local_filename;
const gchar *uri;
gchar *local_dir = NULL;
gchar *local_path = NULL;
- gchar *ret_val = NULL;
cache_dir = g_get_user_cache_dir ();
local_dir = g_build_filename (cache_dir, PACKAGE_TARNAME, "google", NULL);
@@ -238,6 +238,7 @@ photos_google_item_download (PhotosBaseItem *item, GCancellable *cancellable, GE
local_filename = photos_base_item_get_filename (item);
local_path = g_build_filename (local_dir, local_filename, NULL);
+ local_file = g_file_new_for_path (local_path);
if (g_file_test (local_path, G_FILE_TEST_EXISTS))
goto end;
@@ -247,7 +248,6 @@ photos_google_item_download (PhotosBaseItem *item, GCancellable *cancellable, GE
uri = gdata_entry_get_content_uri (entry);
remote_file = g_file_new_for_uri (uri);
- local_file = g_file_new_for_path (local_path);
photos_debug (PHOTOS_DEBUG_NETWORK, "Downloading %s from Google to %s", uri, local_path);
if (!g_file_copy (remote_file,
@@ -263,8 +263,7 @@ photos_google_item_download (PhotosBaseItem *item, GCancellable *cancellable, GE
}
end:
- ret_val = local_path;
- local_path = NULL;
+ ret_val = g_object_ref (local_file);
out:
g_free (local_path);
diff --git a/src/photos-local-item.c b/src/photos-local-item.c
index a337bad1..49a40947 100644
--- a/src/photos-local-item.c
+++ b/src/photos-local-item.c
@@ -217,15 +217,15 @@ photos_local_item_create_thumbnail (PhotosBaseItem *item, GCancellable *cancella
}
-static gchar *
+static GFile *
photos_local_item_download (PhotosBaseItem *item, GCancellable *cancellable, GError **error)
{
+ GFile *file;
const gchar *uri;
- gchar *path;
uri = photos_base_item_get_uri (item);
- path = g_filename_from_uri (uri, NULL, error);
- return path;
+ file = g_file_new_for_uri (uri);
+ return file;
}
@@ -281,6 +281,7 @@ photos_local_item_metadata_add_shared (PhotosBaseItem *item,
GCancellable *cancellable,
GError **error)
{
+ g_autoptr (GFile) file = NULL;
g_autoptr (GVariant) shared_variant = NULL;
const GVariantType *tuple_items[] =
{
@@ -307,11 +308,12 @@ photos_local_item_metadata_add_shared (PhotosBaseItem *item,
goto out;
}
- path = photos_base_item_download (item, cancellable, error);
- if (path == NULL)
+ file = photos_base_item_download (item, cancellable, error);
+ if (file == NULL)
goto out;
metadata = gexiv2_metadata_new ();
+ path = g_file_get_path (file);
if (!gexiv2_metadata_open_path (metadata, path, error))
goto out;
diff --git a/src/photos-media-server-item.c b/src/photos-media-server-item.c
index 029a2b51..1668d4dc 100644
--- a/src/photos-media-server-item.c
+++ b/src/photos-media-server-item.c
@@ -112,9 +112,10 @@ photos_media_server_item_create_thumbnail (PhotosBaseItem *item, GCancellable *c
}
-static gchar *
+static GFile *
photos_media_server_item_download (PhotosBaseItem *item, GCancellable *cancellable, GError **error)
{
+ GFile *ret_val = NULL;
g_autoptr (GFile) local_file = NULL;
g_autoptr (GFile) remote_file = NULL;
const gchar *cache_dir;
@@ -122,7 +123,6 @@ photos_media_server_item_download (PhotosBaseItem *item, GCancellable *cancellab
g_autofree gchar *local_dir = NULL;
g_autofree gchar *local_filename = NULL;
g_autofree gchar *local_path = NULL;
- gchar *ret_val = NULL;
uri = photos_base_item_get_uri (item);
remote_file = g_file_new_for_uri (uri);
@@ -151,7 +151,7 @@ photos_media_server_item_download (PhotosBaseItem *item, GCancellable *cancellab
}
}
- ret_val = g_steal_pointer (&local_path);
+ ret_val = g_object_ref (local_file);
out:
return ret_val;
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]