[gthumb] Add an escaped uri field to the file_data struct
- From: Michael J. Chudobiak <mjc src gnome org>
- To: svn-commits-list gnome org
- Subject: [gthumb] Add an escaped uri field to the file_data struct
- Date: Tue, 19 May 2009 15:02:06 -0400 (EDT)
commit 82846f16d9aa1cec014bb18f3db2e263149d2111
Author: Michael J. Chudobiak <mjc avtechpulse com>
Date: Tue May 19 15:01:04 2009 -0400
Add an escaped uri field to the file_data struct
Also, make all gnome_thumbnail functions use this new uri field.
The new uri field is symlink resolved.
---
libgthumb/file-data.c | 12 ++++++++++++
libgthumb/file-data.h | 9 +++++----
libgthumb/file-utils.c | 26 +++++++++++++-------------
libgthumb/thumb-cache.c | 31 +++++--------------------------
libgthumb/thumb-loader.c | 12 ++++++------
5 files changed, 41 insertions(+), 49 deletions(-)
diff --git a/libgthumb/file-data.c b/libgthumb/file-data.c
index a08e182..e2ea382 100644
--- a/libgthumb/file-data.c
+++ b/libgthumb/file-data.c
@@ -60,8 +60,10 @@ load_info (FileData *fd)
{
GFileInfo *info;
GFile *gfile;
+ GFile *gfile_resolved;
GError *error = NULL;
GTimeVal tv;
+ char *resolved_path;
g_free (fd->local_path);
gfile = gfile_new (fd->path);
@@ -77,6 +79,14 @@ load_info (FileData *fd)
fd->local_path = NULL;
}
+ g_free (fd->uri);
+
+ resolved_path = resolve_all_symlinks (fd->path);
+ gfile_resolved = gfile_new (resolved_path);
+ fd->uri = g_file_get_uri (gfile_resolved);
+ g_object_unref (gfile_resolved);
+ g_free (resolved_path);
+
info = g_file_query_info (gfile,
G_FILE_ATTRIBUTE_STANDARD_SIZE ","
G_FILE_ATTRIBUTE_TIME_CHANGED ","
@@ -168,6 +178,7 @@ file_data_dup (FileData *source)
fd->utf8_path = g_strdup (source->utf8_path);
fd->utf8_name = file_name_from_path (fd->utf8_path);
fd->local_path = g_strdup (source->local_path);
+ fd->uri = g_strdup (source->uri);
fd->mime_type = get_static_string (source->mime_type);
fd->size = source->size;
@@ -199,6 +210,7 @@ file_data_unref (FileData *fd)
g_free (fd->path);
g_free (fd->utf8_path);
g_free (fd->local_path);
+ g_free (fd->uri);
if (fd->comment_data != NULL)
comment_data_free (fd->comment_data);
g_free (fd->comment);
diff --git a/libgthumb/file-data.h b/libgthumb/file-data.h
index 9e56a33..f562757 100644
--- a/libgthumb/file-data.h
+++ b/libgthumb/file-data.h
@@ -33,11 +33,12 @@
typedef struct {
guint ref : 8;
- char *path; /* Full path name. */
- const char *name; /* File name only. */
- char *utf8_path; /* Always unescaped UTF8 */
- const char *utf8_name; /* Always unescaped UTF8 */
+ char *path; /* Full path name, may be escaped or unescaped. */
+ const char *name; /* File name only, may be escaped on unescaped. */
+ char *utf8_path; /* Full path name, always unescaped UTF8 */
+ const char *utf8_name; /* File name only, always unescaped UTF8 */
char *local_path; /* May be a gvfs mount point */
+ char *uri; /* Always escaped URI. Symlinks are resolved. */
const char *mime_type;
goffset size;
time_t ctime;
diff --git a/libgthumb/file-utils.c b/libgthumb/file-utils.c
index de53f05..8ef990e 100644
--- a/libgthumb/file-utils.c
+++ b/libgthumb/file-utils.c
@@ -651,22 +651,22 @@ file_unlink (const char *path)
void
delete_thumbnail (const char *path)
{
- char *uri;
- char *large_thumbnail;
- char *normal_thumbnail;
+ char *large_thumbnail;
+ char *normal_thumbnail;
+ FileData *fd;
- uri = add_scheme_if_absent (path);
+ fd = file_data_new (path);
/* delete associated thumbnails, if present */
- large_thumbnail = gnome_thumbnail_path_for_uri (uri, GNOME_THUMBNAIL_SIZE_LARGE);
- normal_thumbnail = gnome_thumbnail_path_for_uri (uri, GNOME_THUMBNAIL_SIZE_NORMAL);
+ large_thumbnail = gnome_thumbnail_path_for_uri (fd->uri, GNOME_THUMBNAIL_SIZE_LARGE);
+ normal_thumbnail = gnome_thumbnail_path_for_uri (fd->uri, GNOME_THUMBNAIL_SIZE_NORMAL);
file_unlink (large_thumbnail);
file_unlink (normal_thumbnail);
g_free (large_thumbnail);
g_free (normal_thumbnail);
- g_free (uri);
+ file_data_unref (fd);
}
@@ -1547,6 +1547,9 @@ char *resolve_all_symlinks (const char *uri)
gfile_full = gfile_new (uri);
gfile_curr = gfile_new (uri);
+ if (!g_file_query_exists (gfile_curr, NULL))
+ return g_strdup (uri);
+
while ((parent = g_file_get_parent (gfile_curr)) != NULL) {
GFileInfo *info;
GError *error = NULL;
@@ -2328,12 +2331,10 @@ gth_pixbuf_new_from_video (FileData *file,
gboolean resolve_symlinks)
{
GdkPixbuf *pixbuf = NULL;
- char *file_uri = NULL;
char *thumbnail_uri;
- file_uri = resolve_all_symlinks (file->path);
thumbnail_uri = gnome_thumbnail_factory_lookup (factory,
- file_uri,
+ file->uri,
file->mtime);
if (thumbnail_uri != NULL) {
char *thumbnail_path;
@@ -2343,18 +2344,17 @@ gth_pixbuf_new_from_video (FileData *file,
g_free (thumbnail_path);
}
else if (gnome_thumbnail_factory_has_valid_failed_thumbnail (factory,
- file_uri,
+ file->uri,
file->mtime))
{
pixbuf = NULL;
}
else
pixbuf = gnome_thumbnail_factory_generate_thumbnail (factory,
- file_uri,
+ file->uri,
file->mime_type);
g_free (thumbnail_uri);
- g_free (file_uri);
return pixbuf;
}
diff --git a/libgthumb/thumb-cache.c b/libgthumb/thumb-cache.c
index a2c112b..0d4d0de 100644
--- a/libgthumb/thumb-cache.c
+++ b/libgthumb/thumb-cache.c
@@ -39,6 +39,7 @@
#include "typedefs.h"
#include "thumb-cache.h"
#include "file-utils.h"
+#include "gfile-utils.h"
#include "file-data.h"
#include "gtk-utils.h"
@@ -49,34 +50,12 @@
char *
cache_get_nautilus_cache_name (const char *path)
{
- char *parent;
- char *resolved_parent;
- char *resolved_path = NULL;
- GnomeVFSURI *uri;
- char *uri_txt;
char *retval;
+ FileData *fd;
- parent = remove_level_from_path (path);
- resolved_parent = resolve_all_symlinks (parent);
- g_free (parent);
-
- resolved_path = g_strconcat (resolved_parent,
- "/",
- file_name_from_path (path),
- NULL);
- uri = new_uri_from_path (resolved_path);
-
- g_free (resolved_path);
- g_free (resolved_parent);
-
- uri_txt = gnome_vfs_uri_to_string (uri, GNOME_VFS_URI_HIDE_NONE);
- gnome_vfs_uri_unref (uri);
-
- if (uri_txt == NULL)
- return NULL;
-
- retval = gnome_thumbnail_path_for_uri (uri_txt, GNOME_THUMBNAIL_SIZE_NORMAL);
- g_free (uri_txt);
+ fd = file_data_new (path);
+ retval = gnome_thumbnail_path_for_uri (fd->uri, GNOME_THUMBNAIL_SIZE_NORMAL);
+ file_data_unref (fd);
return retval;
}
diff --git a/libgthumb/thumb-loader.c b/libgthumb/thumb-loader.c
index c375590..05b96dc 100644
--- a/libgthumb/thumb-loader.c
+++ b/libgthumb/thumb-loader.c
@@ -374,12 +374,12 @@ thumb_loader_start__step2 (ThumbLoader *tl)
if (tl->priv->use_cache) {
cache_path = gnome_thumbnail_factory_lookup (tl->priv->thumb_factory,
- tl->priv->file->path,
+ tl->priv->file->uri,
tl->priv->file->mtime);
if ((cache_path == NULL)
&& gnome_thumbnail_factory_has_valid_failed_thumbnail (tl->priv->thumb_factory,
- tl->priv->file->path,
+ tl->priv->file->uri,
tl->priv->file->mtime)
&& ((time (NULL) - tl->priv->file->mtime) > (time_t) 5))
{
@@ -470,7 +470,7 @@ thumb_loader_save_to_cache (ThumbLoader *tl)
g_free (cache_base_uri);
}
- cache_file = gnome_thumbnail_path_for_uri (tl->priv->file->path, tl->priv->thumb_size);
+ cache_file = gnome_thumbnail_path_for_uri (tl->priv->file->uri, tl->priv->thumb_size);
if (cache_file == NULL)
return FALSE;
@@ -480,7 +480,7 @@ thumb_loader_save_to_cache (ThumbLoader *tl)
if (ensure_dir_exists (cache_dir))
gnome_thumbnail_factory_save_thumbnail (tl->priv->thumb_factory,
tl->priv->pixbuf,
- tl->priv->file->path,
+ tl->priv->file->uri,
tl->priv->file->mtime);
g_free (cache_dir);
@@ -507,7 +507,7 @@ thumb_loader_done_cb (ImageLoader *il,
if (pixbuf == NULL) {
gnome_thumbnail_factory_create_failed_thumbnail (priv->thumb_factory,
- priv->file->path,
+ priv->file->uri,
priv->file->mtime);
g_signal_emit (G_OBJECT (tl), thumb_loader_signals[THUMB_ERROR], 0);
return;
@@ -585,7 +585,7 @@ thumb_loader_error_cb (ImageLoader *il,
}
gnome_thumbnail_factory_create_failed_thumbnail (priv->thumb_factory,
- priv->file->path,
+ priv->file->uri,
priv->file->mtime);
g_signal_emit (G_OBJECT (tl), thumb_loader_signals[THUMB_ERROR], 0);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]