annotate src/thumb_standard.c @ 495:c7a2471e5c4e

Introduce macros to display debug messages. if (debug) printf(...) is now replaced by variadic macros: DEBUG_1() And for higher debugging levels: DEBUG_2() DEBUG_3() DEBUG_4()
author zas_
date Wed, 23 Apr 2008 20:47:19 +0000
parents 48c8e49b571c
children fc9c8a3e1a8b
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1 /*
196
f6e307c7bad6 rename GQview -> Geeqie over the code
nadvornik
parents: 138
diff changeset
2 * Geeqie
79
528e3432e0c0 Thu Oct 19 07:23:37 2006 John Ellis <johne@verizon.net>
gqview
parents: 66
diff changeset
3 * (C) 2006 John Ellis
475
48c8e49b571c updated copyright in source files
nadvornik
parents: 446
diff changeset
4 * Copyright (C) 2008 The Geeqie Team
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
5 *
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
6 * Author: John Ellis
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
7 *
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
8 * This software is released under the GNU General Public License (GNU GPL).
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
9 * Please read the included file COPYING for more information.
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
10 * This software comes with no warranty of any kind, use at your own risk!
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
11 */
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
12
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
13
281
9995c5fb202a gqview.h -> main.h
zas_
parents: 255
diff changeset
14 #include "main.h"
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
15 #include "thumb_standard.h"
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
16
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
17 #include "cache.h" /* for cache_ensure_dir_exists */
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
18 #include "image-load.h"
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
19 #include "md5-util.h"
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
20 #include "pixbuf_util.h"
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
21 #include "ui_fileops.h"
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
22
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
23
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
24 /*
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
25 * This thumbnail caching implementation attempts to conform
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
26 * to the Thumbnail Managing Standard proposed on freedesktop.org
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
27 * The standard is documented here:
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
28 * http://triq.net/~jens/thumbnail-spec/index.html
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
29 * (why isn't it actually hosted on freedesktop.org?)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
30 *
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
31 * This code attempts to conform to version 0.7.0 of the standard.
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
32 *
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
33 * Notes:
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
34 * > Validation of the thumb's embedded uri is a simple strcmp between our
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
35 * version of the escaped uri and the thumb's escaped uri. But not all uri
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
36 * escape functions escape the same set of chars, comparing the unescaped
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
37 * versions may be more accurate.
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
38 * > Only Thumb::URI and Thumb::MTime are stored in a thumb at this time.
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
39 * Storing the Size, Width, Height should probably be implemented.
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
40 */
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
41
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
42
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
43 #define THUMB_SIZE_NORMAL 128
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
44 #define THUMB_SIZE_LARGE 256
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
45
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
46 #define THUMB_MARKER_URI "tEXt::Thumb::URI"
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
47 #define THUMB_MARKER_MTIME "tEXt::Thumb::MTime"
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
48 #define THUMB_MARKER_SIZE "tEXt::Thumb::Size"
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
49 #define THUMB_MARKER_WIDTH "tEXt::Thumb::Image::Width"
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
50 #define THUMB_MARKER_HEIGHT "tEXt::Thumb::Image::Height"
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
51 #define THUMB_MARKER_APP "tEXt::Software"
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
52
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
53 #define THUMB_PERMS_FOLDER 0700
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
54 #define THUMB_PERMS_THUMB 0600
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
55
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
56
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
57
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
58 /*
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
59 *-----------------------------------------------------------------------------
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
60 * thumbnail loader
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
61 *-----------------------------------------------------------------------------
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
62 */
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
63
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
64
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
65 static void thumb_loader_std_error_cb(ImageLoader *il, gpointer data);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
66 static gint thumb_loader_std_setup(ThumbLoaderStd *tl, const gchar *path);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
67
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
68
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
69 ThumbLoaderStd *thumb_loader_std_new(gint width, gint height)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
70 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
71 ThumbLoaderStd *tl;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
72
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
73 tl = g_new0(ThumbLoaderStd, 1);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
74
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
75 tl->standard_loader = TRUE;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
76
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
77 tl->requested_width = width;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
78 tl->requested_height = height;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
79
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
80 tl->pixbuf = NULL;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
81 tl->il = NULL;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
82 tl->source_path = NULL;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
83
333
767b53cd9ab7 Rename thumbnails related options.
zas_
parents: 318
diff changeset
84 tl->cache_enable = options->thumbnails.enable_caching;
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
85 tl->cache_local = FALSE;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
86 tl->cache_retry = FALSE;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
87
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
88 return tl;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
89 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
90
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
91 void thumb_loader_std_set_callbacks(ThumbLoaderStd *tl,
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
92 ThumbLoaderStdFunc func_done,
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
93 ThumbLoaderStdFunc func_error,
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
94 ThumbLoaderStdFunc func_progress,
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
95 gpointer data)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
96 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
97 if (!tl) return;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
98
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
99 tl->func_done = func_done;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
100 tl->func_error = func_error;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
101 tl->func_progress = func_progress;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
102 tl->data = data;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
103 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
104
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
105 static void thumb_loader_std_reset(ThumbLoaderStd *tl)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
106 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
107 if (tl->pixbuf) g_object_unref(tl->pixbuf);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
108 tl->pixbuf = NULL;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
109
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
110 image_loader_free(tl->il);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
111 tl->il = NULL;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
112
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
113 g_free(tl->source_path);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
114 tl->source_path = NULL;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
115
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
116 g_free(tl->thumb_path);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
117 tl->thumb_path = NULL;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
118
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
119 g_free(tl->thumb_uri);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
120 tl->thumb_uri = NULL;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
121 tl->local_uri = NULL;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
122
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
123 tl->thumb_path_local = FALSE;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
124
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
125 tl->cache_hit = FALSE;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
126
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
127 tl->source_mtime = 0;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
128 tl->source_size = 0;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
129 tl->source_mode = 0;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
130
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
131 tl->progress = 0.0;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
132 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
133
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
134 static gchar *thumb_std_cache_path(const gchar *path, const gchar *uri, gint local,
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
135 const gchar *cache_subfolder)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
136 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
137 gchar *result = NULL;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
138 gchar *cache_base;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
139 gchar *md5_text;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
140 guchar digest[16];
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
141
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
142 if (!path || !uri || !cache_subfolder) return NULL;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
143
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
144 if (local)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
145 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
146 gchar *base;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
147
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
148 base = remove_level_from_path(path);
79
528e3432e0c0 Thu Oct 19 07:23:37 2006 John Ellis <johne@verizon.net>
gqview
parents: 66
diff changeset
149 cache_base = g_strconcat(base, "/", THUMB_FOLDER_LOCAL, "/", cache_subfolder, NULL);
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
150 g_free(base);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
151 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
152 else
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
153 {
79
528e3432e0c0 Thu Oct 19 07:23:37 2006 John Ellis <johne@verizon.net>
gqview
parents: 66
diff changeset
154 cache_base = g_strconcat(homedir(), "/", THUMB_FOLDER_GLOBAL, "/", cache_subfolder, NULL);
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
155 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
156
64
04ff0df3ad2f Mon Aug 15 17:13:57 2005 John Ellis <johne@verizon.net>
gqview
parents: 43
diff changeset
157 md5_get_digest((guchar *)uri, strlen(uri), digest);
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
158 md5_text = md5_digest_to_text(digest);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
159
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
160 if (cache_base && md5_text)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
161 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
162 result = g_strconcat(cache_base, "/", md5_text, THUMB_NAME_EXTENSION, NULL);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
163 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
164
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
165 g_free(cache_base);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
166 g_free(md5_text);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
167
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
168 return result;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
169 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
170
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
171 static gchar *thumb_loader_std_cache_path(ThumbLoaderStd *tl, gint local, GdkPixbuf *pixbuf, gint fail)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
172 {
436
f0289d80ecc1 Rename inappropriate folder_size to folder.
zas_
parents: 333
diff changeset
173 const gchar *folder;
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
174 gint w, h;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
175
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
176 if (!tl->source_path || !tl->thumb_uri) return NULL;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
177
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
178 if (pixbuf)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
179 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
180 w = gdk_pixbuf_get_width(pixbuf);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
181 h = gdk_pixbuf_get_height(pixbuf);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
182 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
183 else
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
184 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
185 w = tl->requested_width;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
186 h = tl->requested_height;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
187 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
188
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
189 if (fail)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
190 {
436
f0289d80ecc1 Rename inappropriate folder_size to folder.
zas_
parents: 333
diff changeset
191 folder = THUMB_FOLDER_FAIL;
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
192 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
193 else if (w > THUMB_SIZE_NORMAL || h > THUMB_SIZE_NORMAL)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
194 {
436
f0289d80ecc1 Rename inappropriate folder_size to folder.
zas_
parents: 333
diff changeset
195 folder = THUMB_FOLDER_LARGE;
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
196 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
197 else
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
198 {
436
f0289d80ecc1 Rename inappropriate folder_size to folder.
zas_
parents: 333
diff changeset
199 folder = THUMB_FOLDER_NORMAL;
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
200 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
201
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
202 return thumb_std_cache_path(tl->source_path,
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
203 (local) ? tl->local_uri : tl->thumb_uri,
436
f0289d80ecc1 Rename inappropriate folder_size to folder.
zas_
parents: 333
diff changeset
204 local, folder);
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
205 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
206
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
207 static gint thumb_loader_std_fail_check(ThumbLoaderStd *tl)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
208 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
209 gchar *fail_path;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
210 gint result = FALSE;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
211
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
212 fail_path = thumb_loader_std_cache_path(tl, FALSE, NULL, TRUE);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
213 if (isfile(fail_path))
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
214 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
215 GdkPixbuf *pixbuf;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
216
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
217 if (tl->cache_retry)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
218 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
219 pixbuf = NULL;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
220 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
221 else
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
222 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
223 gchar *pathl;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
224
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
225 pathl = path_from_utf8(fail_path);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
226 pixbuf = gdk_pixbuf_new_from_file(pathl, NULL);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
227 g_free(pathl);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
228 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
229
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
230 if (pixbuf)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
231 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
232 const gchar *mtime_str;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
233
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
234 mtime_str = gdk_pixbuf_get_option(pixbuf, THUMB_MARKER_MTIME);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
235 if (mtime_str && strtol(mtime_str, NULL, 10) == tl->source_mtime)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
236 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
237 result = TRUE;
495
c7a2471e5c4e Introduce macros to display debug messages.
zas_
parents: 475
diff changeset
238 DEBUG_1("thumb fail valid: %s\n thumb: %s\n", tl->source_path, fail_path);
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
239 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
240
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
241 g_object_unref(G_OBJECT(pixbuf));
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
242 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
243
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
244 if (!result) unlink_file(fail_path);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
245 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
246 g_free(fail_path);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
247
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
248 return result;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
249 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
250
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
251 static gint thumb_loader_std_validate(ThumbLoaderStd *tl, GdkPixbuf *pixbuf)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
252 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
253 const gchar *valid_uri;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
254 const gchar *uri;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
255 const gchar *mtime_str;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
256 time_t mtime;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
257 gint w, h;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
258
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
259 if (!pixbuf) return FALSE;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
260
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
261 w = gdk_pixbuf_get_width(pixbuf);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
262 h = gdk_pixbuf_get_height(pixbuf);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
263
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
264 if (w != THUMB_SIZE_NORMAL && w != THUMB_SIZE_LARGE &&
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
265 h != THUMB_SIZE_NORMAL && h != THUMB_SIZE_LARGE) return FALSE;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
266
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
267 valid_uri = (tl->thumb_path_local) ? tl->local_uri : tl->thumb_uri;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
268
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
269 uri = gdk_pixbuf_get_option(pixbuf, THUMB_MARKER_URI);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
270 mtime_str = gdk_pixbuf_get_option(pixbuf, THUMB_MARKER_MTIME);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
271
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
272 if (!mtime_str || !uri || !valid_uri) return FALSE;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
273 if (strcmp(uri, valid_uri) != 0) return FALSE;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
274
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
275 mtime = strtol(mtime_str, NULL, 10);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
276 if (tl->source_mtime != mtime) return FALSE;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
277
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
278 return TRUE;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
279 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
280
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
281 static void thumb_loader_std_save(ThumbLoaderStd *tl, GdkPixbuf *pixbuf)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
282 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
283 gchar *base_path;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
284 gchar *tmp_path;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
285 gint fail;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
286
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
287 if (!tl->cache_enable || tl->cache_hit) return;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
288 if (tl->thumb_path) return;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
289
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
290 if (!pixbuf)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
291 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
292 /* local failures are not stored */
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
293 if (tl->cache_local) return;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
294
436
f0289d80ecc1 Rename inappropriate folder_size to folder.
zas_
parents: 333
diff changeset
295 pixbuf = gdk_pixbuf_new(GDK_COLORSPACE_RGB, TRUE, 8, 1, 1);
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
296 fail = TRUE;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
297 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
298 else
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
299 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
300 g_object_ref(G_OBJECT(pixbuf));
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
301 fail = FALSE;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
302 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
303
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
304 tl->thumb_path = thumb_loader_std_cache_path(tl, tl->cache_local, pixbuf, fail);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
305 if (!tl->thumb_path)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
306 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
307 g_object_unref(G_OBJECT(pixbuf));
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
308 return;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
309 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
310 tl->thumb_path_local = tl->cache_local;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
311
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
312 /* create thumbnail dir if needed */
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
313 base_path = remove_level_from_path(tl->thumb_path);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
314 if (tl->cache_local)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
315 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
316 if (!isdir(base_path))
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
317 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
318 struct stat st;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
319 gchar *source_base;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
320
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
321 source_base = remove_level_from_path(tl->source_path);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
322 if (stat_utf8(source_base, &st))
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
323 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
324 cache_ensure_dir_exists(base_path, st.st_mode);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
325 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
326 g_free(source_base);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
327 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
328 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
329 else
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
330 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
331 cache_ensure_dir_exists(base_path, THUMB_PERMS_FOLDER);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
332 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
333 g_free(base_path);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
334
495
c7a2471e5c4e Introduce macros to display debug messages.
zas_
parents: 475
diff changeset
335 DEBUG_1("thumb saving: %s\n saved: %s\n", tl->source_path, tl->thumb_path);
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
336
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
337 /* save thumb, using a temp file then renaming into place */
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
338 tmp_path = unique_filename(tl->thumb_path, ".tmp", "_", 2);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
339 if (tmp_path)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
340 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
341 const gchar *mark_uri;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
342 gchar *mark_app;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
343 gchar *mark_mtime;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
344 gchar *pathl;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
345 gint success;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
346
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
347 mark_uri = (tl->cache_local) ? tl->local_uri :tl->thumb_uri;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
348
288
d1f74154463e Replace occurences of Geeqie / geeqie by constants defined in main.h.
zas_
parents: 281
diff changeset
349 mark_app = g_strdup_printf("%s %s", GQ_APPNAME, VERSION);
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
350 mark_mtime = g_strdup_printf("%lu", tl->source_mtime);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
351
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
352 pathl = path_from_utf8(tmp_path);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
353 success = gdk_pixbuf_save(pixbuf, pathl, "png", NULL,
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
354 THUMB_MARKER_URI, mark_uri,
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
355 THUMB_MARKER_MTIME, mark_mtime,
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
356 THUMB_MARKER_APP, mark_app,
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
357 NULL);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
358 if (success)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
359 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
360 chmod(pathl, (tl->cache_local) ? tl->source_mode : THUMB_PERMS_THUMB);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
361 success = rename_file(tmp_path, tl->thumb_path);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
362 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
363
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
364 g_free(pathl);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
365
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
366 g_free(mark_mtime);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
367 g_free(mark_app);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
368
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
369 g_free(tmp_path);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
370 if (!success && debug)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
371 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
372 printf("thumb save failed: %s\n", tl->source_path);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
373 printf(" thumb: %s\n", tl->thumb_path);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
374 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
375
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
376 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
377
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
378 g_object_unref(G_OBJECT(pixbuf));
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
379 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
380
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
381 static gint thumb_loader_std_scale_aspect(gint req_w, gint req_h, gint old_w, gint old_h,
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
382 gint *new_w, gint *new_h)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
383 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
384 if (((gdouble)req_w / old_w) < ((gdouble)req_h / old_h))
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
385 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
386 *new_w = req_w;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
387 *new_h = (gdouble)*new_w / old_w * old_h;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
388 if (*new_h < 1) *new_h = 1;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
389 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
390 else
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
391 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
392 *new_h = req_h;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
393 *new_w = (gdouble)*new_h / old_h * old_w;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
394 if (*new_w < 1) *new_w = 1;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
395 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
396
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
397 return (*new_w != old_w || *new_h != old_h);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
398 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
399
14
25335c62cd9b ##### Note: GQview CVS on sourceforge is not always up to date, please use #####
gqview
parents: 9
diff changeset
400 static GdkPixbuf *thumb_loader_std_finish(ThumbLoaderStd *tl, GdkPixbuf *pixbuf, gint shrunk)
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
401 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
402 GdkPixbuf *pixbuf_thumb = NULL;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
403 GdkPixbuf *result;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
404 gint sw, sh;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
405
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
406 sw = gdk_pixbuf_get_width(pixbuf);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
407 sh = gdk_pixbuf_get_height(pixbuf);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
408
40
dcc04a6a58bf Sat Apr 16 12:29:42 2005 John Ellis <johne@verizon.net>
gqview
parents: 14
diff changeset
409 if (tl->cache_enable)
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
410 {
40
dcc04a6a58bf Sat Apr 16 12:29:42 2005 John Ellis <johne@verizon.net>
gqview
parents: 14
diff changeset
411 if (!tl->cache_hit)
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
412 {
40
dcc04a6a58bf Sat Apr 16 12:29:42 2005 John Ellis <johne@verizon.net>
gqview
parents: 14
diff changeset
413 gint cache_w, cache_h;
dcc04a6a58bf Sat Apr 16 12:29:42 2005 John Ellis <johne@verizon.net>
gqview
parents: 14
diff changeset
414
dcc04a6a58bf Sat Apr 16 12:29:42 2005 John Ellis <johne@verizon.net>
gqview
parents: 14
diff changeset
415 if (tl->requested_width > THUMB_SIZE_NORMAL || tl->requested_height > THUMB_SIZE_NORMAL)
dcc04a6a58bf Sat Apr 16 12:29:42 2005 John Ellis <johne@verizon.net>
gqview
parents: 14
diff changeset
416 {
dcc04a6a58bf Sat Apr 16 12:29:42 2005 John Ellis <johne@verizon.net>
gqview
parents: 14
diff changeset
417 cache_w = cache_h = THUMB_SIZE_LARGE;
dcc04a6a58bf Sat Apr 16 12:29:42 2005 John Ellis <johne@verizon.net>
gqview
parents: 14
diff changeset
418 }
dcc04a6a58bf Sat Apr 16 12:29:42 2005 John Ellis <johne@verizon.net>
gqview
parents: 14
diff changeset
419 else
dcc04a6a58bf Sat Apr 16 12:29:42 2005 John Ellis <johne@verizon.net>
gqview
parents: 14
diff changeset
420 {
dcc04a6a58bf Sat Apr 16 12:29:42 2005 John Ellis <johne@verizon.net>
gqview
parents: 14
diff changeset
421 cache_w = cache_h = THUMB_SIZE_NORMAL;
dcc04a6a58bf Sat Apr 16 12:29:42 2005 John Ellis <johne@verizon.net>
gqview
parents: 14
diff changeset
422 }
dcc04a6a58bf Sat Apr 16 12:29:42 2005 John Ellis <johne@verizon.net>
gqview
parents: 14
diff changeset
423
dcc04a6a58bf Sat Apr 16 12:29:42 2005 John Ellis <johne@verizon.net>
gqview
parents: 14
diff changeset
424 if (sw > cache_w || sh > cache_h || shrunk)
dcc04a6a58bf Sat Apr 16 12:29:42 2005 John Ellis <johne@verizon.net>
gqview
parents: 14
diff changeset
425 {
dcc04a6a58bf Sat Apr 16 12:29:42 2005 John Ellis <johne@verizon.net>
gqview
parents: 14
diff changeset
426 gint thumb_w, thumb_h;
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
427
40
dcc04a6a58bf Sat Apr 16 12:29:42 2005 John Ellis <johne@verizon.net>
gqview
parents: 14
diff changeset
428 if (thumb_loader_std_scale_aspect(cache_w, cache_h, sw, sh,
dcc04a6a58bf Sat Apr 16 12:29:42 2005 John Ellis <johne@verizon.net>
gqview
parents: 14
diff changeset
429 &thumb_w, &thumb_h))
dcc04a6a58bf Sat Apr 16 12:29:42 2005 John Ellis <johne@verizon.net>
gqview
parents: 14
diff changeset
430 {
dcc04a6a58bf Sat Apr 16 12:29:42 2005 John Ellis <johne@verizon.net>
gqview
parents: 14
diff changeset
431 pixbuf_thumb = gdk_pixbuf_scale_simple(pixbuf, thumb_w, thumb_h,
333
767b53cd9ab7 Rename thumbnails related options.
zas_
parents: 318
diff changeset
432 (GdkInterpType)options->thumbnails.quality);
40
dcc04a6a58bf Sat Apr 16 12:29:42 2005 John Ellis <johne@verizon.net>
gqview
parents: 14
diff changeset
433 }
dcc04a6a58bf Sat Apr 16 12:29:42 2005 John Ellis <johne@verizon.net>
gqview
parents: 14
diff changeset
434 else
dcc04a6a58bf Sat Apr 16 12:29:42 2005 John Ellis <johne@verizon.net>
gqview
parents: 14
diff changeset
435 {
dcc04a6a58bf Sat Apr 16 12:29:42 2005 John Ellis <johne@verizon.net>
gqview
parents: 14
diff changeset
436 pixbuf_thumb = pixbuf;
dcc04a6a58bf Sat Apr 16 12:29:42 2005 John Ellis <johne@verizon.net>
gqview
parents: 14
diff changeset
437 g_object_ref(G_OBJECT(pixbuf_thumb));
dcc04a6a58bf Sat Apr 16 12:29:42 2005 John Ellis <johne@verizon.net>
gqview
parents: 14
diff changeset
438 }
dcc04a6a58bf Sat Apr 16 12:29:42 2005 John Ellis <johne@verizon.net>
gqview
parents: 14
diff changeset
439
dcc04a6a58bf Sat Apr 16 12:29:42 2005 John Ellis <johne@verizon.net>
gqview
parents: 14
diff changeset
440 thumb_loader_std_save(tl, pixbuf_thumb);
dcc04a6a58bf Sat Apr 16 12:29:42 2005 John Ellis <johne@verizon.net>
gqview
parents: 14
diff changeset
441 }
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
442 }
40
dcc04a6a58bf Sat Apr 16 12:29:42 2005 John Ellis <johne@verizon.net>
gqview
parents: 14
diff changeset
443 else if (tl->cache_hit &&
dcc04a6a58bf Sat Apr 16 12:29:42 2005 John Ellis <johne@verizon.net>
gqview
parents: 14
diff changeset
444 tl->cache_local && !tl->thumb_path_local)
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
445 {
40
dcc04a6a58bf Sat Apr 16 12:29:42 2005 John Ellis <johne@verizon.net>
gqview
parents: 14
diff changeset
446 /* A local cache save was requested, but a valid thumb is in $HOME,
dcc04a6a58bf Sat Apr 16 12:29:42 2005 John Ellis <johne@verizon.net>
gqview
parents: 14
diff changeset
447 * so specifically save as a local thumbnail.
dcc04a6a58bf Sat Apr 16 12:29:42 2005 John Ellis <johne@verizon.net>
gqview
parents: 14
diff changeset
448 */
dcc04a6a58bf Sat Apr 16 12:29:42 2005 John Ellis <johne@verizon.net>
gqview
parents: 14
diff changeset
449 g_free(tl->thumb_path);
dcc04a6a58bf Sat Apr 16 12:29:42 2005 John Ellis <johne@verizon.net>
gqview
parents: 14
diff changeset
450 tl->thumb_path = NULL;
dcc04a6a58bf Sat Apr 16 12:29:42 2005 John Ellis <johne@verizon.net>
gqview
parents: 14
diff changeset
451
dcc04a6a58bf Sat Apr 16 12:29:42 2005 John Ellis <johne@verizon.net>
gqview
parents: 14
diff changeset
452 tl->cache_hit = FALSE;
dcc04a6a58bf Sat Apr 16 12:29:42 2005 John Ellis <johne@verizon.net>
gqview
parents: 14
diff changeset
453
495
c7a2471e5c4e Introduce macros to display debug messages.
zas_
parents: 475
diff changeset
454 DEBUG_1("thumb copied: %s\n", tl->source_path);
40
dcc04a6a58bf Sat Apr 16 12:29:42 2005 John Ellis <johne@verizon.net>
gqview
parents: 14
diff changeset
455
dcc04a6a58bf Sat Apr 16 12:29:42 2005 John Ellis <johne@verizon.net>
gqview
parents: 14
diff changeset
456 thumb_loader_std_save(tl, pixbuf);
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
457 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
458 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
459
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
460 if (sw <= tl->requested_width && sh <= tl->requested_height)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
461 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
462 result = pixbuf;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
463 g_object_ref(result);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
464 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
465 else
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
466 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
467 gint thumb_w, thumb_h;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
468
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
469 if (pixbuf_thumb)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
470 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
471 pixbuf = pixbuf_thumb;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
472 sw = gdk_pixbuf_get_width(pixbuf);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
473 sh = gdk_pixbuf_get_height(pixbuf);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
474 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
475
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
476 if (thumb_loader_std_scale_aspect(tl->requested_width, tl->requested_height, sw, sh,
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
477 &thumb_w, &thumb_h))
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
478 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
479 result = gdk_pixbuf_scale_simple(pixbuf, thumb_w, thumb_h,
333
767b53cd9ab7 Rename thumbnails related options.
zas_
parents: 318
diff changeset
480 (GdkInterpType)options->thumbnails.quality);
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
481 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
482 else
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
483 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
484 result = pixbuf;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
485 g_object_ref(result);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
486 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
487 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
488
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
489 if (pixbuf_thumb) g_object_unref(pixbuf_thumb);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
490
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
491 return result;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
492 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
493
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
494 static gint thumb_loader_std_next_source(ThumbLoaderStd *tl, gint remove_broken)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
495 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
496 image_loader_free(tl->il);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
497 tl->il = NULL;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
498
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
499 if (tl->thumb_path)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
500 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
501 if (!tl->thumb_path_local && remove_broken)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
502 {
495
c7a2471e5c4e Introduce macros to display debug messages.
zas_
parents: 475
diff changeset
503 DEBUG_1("thumb broken, unlinking: %s\n", tl->thumb_path);
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
504 unlink_file(tl->thumb_path);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
505 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
506
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
507 g_free(tl->thumb_path);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
508 tl->thumb_path = NULL;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
509
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
510 if (!tl->thumb_path_local)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
511 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
512 tl->thumb_path = thumb_loader_std_cache_path(tl, TRUE, NULL, FALSE);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
513 if (isfile(tl->thumb_path) && thumb_loader_std_setup(tl, tl->thumb_path))
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
514 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
515 tl->thumb_path_local = TRUE;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
516 return TRUE;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
517 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
518
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
519 g_free(tl->thumb_path);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
520 tl->thumb_path = NULL;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
521 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
522
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
523 if (thumb_loader_std_setup(tl, tl->source_path)) return TRUE;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
524 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
525
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
526 thumb_loader_std_save(tl, NULL);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
527 return FALSE;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
528 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
529
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
530 static void thumb_loader_std_done_cb(ImageLoader *il, gpointer data)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
531 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
532 ThumbLoaderStd *tl = data;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
533 GdkPixbuf *pixbuf;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
534
495
c7a2471e5c4e Introduce macros to display debug messages.
zas_
parents: 475
diff changeset
535 DEBUG_1("thumb image done: %s\n from: %s\n", tl->source_path, tl->il->path);
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
536
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
537 pixbuf = image_loader_get_pixbuf(tl->il);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
538 if (!pixbuf)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
539 {
495
c7a2471e5c4e Introduce macros to display debug messages.
zas_
parents: 475
diff changeset
540 DEBUG_1("...but no pixbuf\n");
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
541 thumb_loader_std_error_cb(il, data);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
542 return;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
543 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
544
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
545 if (tl->thumb_path && !thumb_loader_std_validate(tl, pixbuf))
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
546 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
547 if (thumb_loader_std_next_source(tl, TRUE)) return;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
548
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
549 if (tl->func_error) tl->func_error(tl, tl->data);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
550 return;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
551 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
552
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
553 tl->cache_hit = (tl->thumb_path != NULL);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
554
14
25335c62cd9b ##### Note: GQview CVS on sourceforge is not always up to date, please use #####
gqview
parents: 9
diff changeset
555 tl->pixbuf = thumb_loader_std_finish(tl, pixbuf, il->shrunk);
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
556
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
557 if (tl->func_done) tl->func_done(tl, tl->data);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
558 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
559
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
560 static void thumb_loader_std_error_cb(ImageLoader *il, gpointer data)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
561 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
562 ThumbLoaderStd *tl = data;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
563
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
564 /* if at least some of the image is available, go to done */
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
565 if (image_loader_get_pixbuf(tl->il) != NULL)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
566 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
567 thumb_loader_std_done_cb(il, data);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
568 return;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
569 }
495
c7a2471e5c4e Introduce macros to display debug messages.
zas_
parents: 475
diff changeset
570
c7a2471e5c4e Introduce macros to display debug messages.
zas_
parents: 475
diff changeset
571 DEBUG_1("thumb image error: %s\n from: %s\n", tl->source_path, tl->il->fd->path);
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
572
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
573 if (thumb_loader_std_next_source(tl, TRUE)) return;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
574
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
575 if (tl->func_error) tl->func_error(tl, tl->data);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
576 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
577
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
578 static void thumb_loader_std_progress_cb(ImageLoader *il, gdouble percent, gpointer data)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
579 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
580 ThumbLoaderStd *tl = data;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
581
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
582 tl->progress = (gdouble)percent;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
583
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
584 if (tl->func_progress) tl->func_progress(tl, tl->data);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
585 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
586
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
587 static gint thumb_loader_std_setup(ThumbLoaderStd *tl, const gchar *path)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
588 {
138
71e1ebee420e replaced gchar* path with FileData *fd
nadvornik
parents: 79
diff changeset
589 tl->il = image_loader_new_from_path(path);
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
590
333
767b53cd9ab7 Rename thumbnails related options.
zas_
parents: 318
diff changeset
591 if (options->thumbnails.fast)
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
592 {
14
25335c62cd9b ##### Note: GQview CVS on sourceforge is not always up to date, please use #####
gqview
parents: 9
diff changeset
593 /* this will speed up jpegs by up to 3x in some cases */
25335c62cd9b ##### Note: GQview CVS on sourceforge is not always up to date, please use #####
gqview
parents: 9
diff changeset
594 if (tl->requested_width <= THUMB_SIZE_NORMAL &&
25335c62cd9b ##### Note: GQview CVS on sourceforge is not always up to date, please use #####
gqview
parents: 9
diff changeset
595 tl->requested_height <= THUMB_SIZE_NORMAL)
25335c62cd9b ##### Note: GQview CVS on sourceforge is not always up to date, please use #####
gqview
parents: 9
diff changeset
596 {
25335c62cd9b ##### Note: GQview CVS on sourceforge is not always up to date, please use #####
gqview
parents: 9
diff changeset
597 image_loader_set_requested_size(tl->il, THUMB_SIZE_NORMAL, THUMB_SIZE_NORMAL);
25335c62cd9b ##### Note: GQview CVS on sourceforge is not always up to date, please use #####
gqview
parents: 9
diff changeset
598 }
25335c62cd9b ##### Note: GQview CVS on sourceforge is not always up to date, please use #####
gqview
parents: 9
diff changeset
599 else
25335c62cd9b ##### Note: GQview CVS on sourceforge is not always up to date, please use #####
gqview
parents: 9
diff changeset
600 {
25335c62cd9b ##### Note: GQview CVS on sourceforge is not always up to date, please use #####
gqview
parents: 9
diff changeset
601 image_loader_set_requested_size(tl->il, THUMB_SIZE_LARGE, THUMB_SIZE_LARGE);
25335c62cd9b ##### Note: GQview CVS on sourceforge is not always up to date, please use #####
gqview
parents: 9
diff changeset
602 }
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
603 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
604
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
605 image_loader_set_error_func(tl->il, thumb_loader_std_error_cb, tl);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
606 if (tl->func_progress)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
607 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
608 image_loader_set_percent_func(tl->il, thumb_loader_std_progress_cb, tl);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
609 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
610
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
611 if (image_loader_start(tl->il, thumb_loader_std_done_cb, tl))
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
612 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
613 return TRUE;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
614 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
615
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
616 image_loader_free(tl->il);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
617 tl->il = NULL;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
618 return FALSE;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
619 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
620
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
621 /*
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
622 * Note: Currently local_cache only specifies where to save a _new_ thumb, if
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
623 * a valid existing thumb is found anywhere the local thumb will not be created.
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
624 */
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
625 void thumb_loader_std_set_cache(ThumbLoaderStd *tl, gint enable_cache, gint local, gint retry_failed)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
626 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
627 if (!tl) return;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
628
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
629 tl->cache_enable = enable_cache;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
630 tl->cache_local = local;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
631 tl->cache_retry = retry_failed;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
632 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
633
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
634 gint thumb_loader_std_start(ThumbLoaderStd *tl, const gchar *path)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
635 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
636 static gchar *thumb_cache = NULL;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
637 struct stat st;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
638
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
639 if (!tl || !path) return FALSE;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
640
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
641 thumb_loader_std_reset(tl);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
642
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
643 if (!stat_utf8(path, &st)) return FALSE;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
644
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
645 tl->source_path = g_strdup(path);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
646 tl->source_mtime = st.st_mtime;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
647 tl->source_size = st.st_size;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
648 tl->source_mode = st.st_mode;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
649
79
528e3432e0c0 Thu Oct 19 07:23:37 2006 John Ellis <johne@verizon.net>
gqview
parents: 66
diff changeset
650 if (!thumb_cache) thumb_cache = g_strconcat(homedir(), "/", THUMB_FOLDER_GLOBAL, NULL);
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
651 if (strncmp(tl->source_path, thumb_cache, strlen(thumb_cache)) != 0)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
652 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
653 gchar *pathl;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
654
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
655 pathl = path_from_utf8(path);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
656 tl->thumb_uri = g_filename_to_uri(pathl, NULL, NULL);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
657 tl->local_uri = filename_from_path(tl->thumb_uri);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
658 g_free(pathl);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
659 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
660
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
661 if (tl->cache_enable)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
662 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
663 gint found;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
664
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
665 tl->thumb_path = thumb_loader_std_cache_path(tl, FALSE, NULL, FALSE);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
666 tl->thumb_path_local = FALSE;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
667
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
668 found = isfile(tl->thumb_path);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
669 if (found && thumb_loader_std_setup(tl, tl->thumb_path)) return TRUE;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
670
43
ee03f36e9e4b Sun May 15 21:40:26 2005 John Ellis <johne@verizon.net>
gqview
parents: 40
diff changeset
671 if (thumb_loader_std_fail_check(tl)) return FALSE;
ee03f36e9e4b Sun May 15 21:40:26 2005 John Ellis <johne@verizon.net>
gqview
parents: 40
diff changeset
672
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
673 return thumb_loader_std_next_source(tl, found);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
674 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
675
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
676 if (!thumb_loader_std_setup(tl, tl->source_path))
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
677 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
678 thumb_loader_std_save(tl, NULL);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
679 return FALSE;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
680 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
681
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
682 return TRUE;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
683 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
684
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
685 void thumb_loader_std_free(ThumbLoaderStd *tl)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
686 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
687 if (!tl) return;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
688
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
689 thumb_loader_std_reset(tl);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
690 g_free(tl);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
691 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
692
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
693 GdkPixbuf *thumb_loader_std_get_pixbuf(ThumbLoaderStd *tl, gint with_fallback)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
694 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
695 GdkPixbuf *pixbuf;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
696
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
697 if (tl && tl->pixbuf)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
698 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
699 pixbuf = tl->pixbuf;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
700 g_object_ref(pixbuf);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
701 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
702 else if (with_fallback)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
703 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
704 gint w, h;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
705
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
706 pixbuf = pixbuf_inline(PIXBUF_INLINE_BROKEN);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
707 w = gdk_pixbuf_get_width(pixbuf);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
708 h = gdk_pixbuf_get_height(pixbuf);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
709
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
710 if (w > tl->requested_width || h > tl->requested_height)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
711 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
712 gint nw, nh;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
713
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
714 if (thumb_loader_std_scale_aspect(tl->requested_width, tl->requested_height,
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
715 w, h, &nw, &nh))
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
716 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
717 GdkPixbuf *tmp;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
718
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
719 tmp = pixbuf;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
720 pixbuf = gdk_pixbuf_scale_simple(tmp, nw, nh, GDK_INTERP_TILES);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
721 g_object_unref(G_OBJECT(tmp));
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
722 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
723 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
724 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
725 else
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
726 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
727 pixbuf = NULL;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
728 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
729
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
730 return pixbuf;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
731 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
732
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
733
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
734 typedef struct _ThumbValidate ThumbValidate;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
735 struct _ThumbValidate
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
736 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
737 ThumbLoaderStd *tl;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
738 gchar *path;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
739 gint days;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
740
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
741 void (*func_valid)(const gchar *path, gint valid, gpointer data);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
742 gpointer data;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
743
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
744 gint idle_id;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
745 };
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
746
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
747 static void thumb_loader_std_thumb_file_validate_free(ThumbValidate *tv)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
748 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
749 thumb_loader_std_free(tv->tl);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
750 g_free(tv->path);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
751 g_free(tv);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
752 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
753
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
754 void thumb_loader_std_thumb_file_validate_cancel(ThumbLoaderStd *tl)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
755 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
756 ThumbValidate *tv;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
757
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
758 if (!tl) return;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
759
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
760 tv = tl->data;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
761
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
762 if (tv->idle_id != -1) g_source_remove(tv->idle_id);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
763 tv->idle_id = -1;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
764
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
765 thumb_loader_std_thumb_file_validate_free(tv);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
766 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
767
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
768 static void thumb_loader_std_thumb_file_validate_finish(ThumbValidate *tv, gint valid)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
769 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
770 if (tv->func_valid) tv->func_valid(tv->path, valid, tv->data);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
771
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
772 thumb_loader_std_thumb_file_validate_free(tv);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
773 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
774
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
775 static void thumb_loader_std_thumb_file_validate_done_cb(ThumbLoaderStd *tl, gpointer data)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
776 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
777 ThumbValidate *tv = data;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
778 GdkPixbuf *pixbuf;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
779 gint valid = FALSE;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
780
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
781 pixbuf = thumb_loader_std_get_pixbuf(tv->tl, FALSE);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
782 if (pixbuf)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
783 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
784 const gchar *uri;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
785 const gchar *mtime_str;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
786
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
787 uri = gdk_pixbuf_get_option(pixbuf, THUMB_MARKER_URI);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
788 mtime_str = gdk_pixbuf_get_option(pixbuf, THUMB_MARKER_MTIME);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
789 if (uri && mtime_str)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
790 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
791 if (strncmp(uri, "file:", strlen("file:")) == 0)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
792 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
793 struct stat st;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
794 gchar *target;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
795
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
796 target = g_filename_from_uri(uri, NULL, NULL);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
797 if (stat(target, &st) == 0 &&
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
798 st.st_mtime == strtol(mtime_str, NULL, 10))
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
799 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
800 valid = TRUE;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
801 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
802 g_free(target);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
803 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
804 else
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
805 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
806 struct stat st;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
807
495
c7a2471e5c4e Introduce macros to display debug messages.
zas_
parents: 475
diff changeset
808 DEBUG_1("thumb uri foreign, doing day check: %s\n", uri);
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
809
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
810 if (stat_utf8(tv->path, &st))
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
811 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
812 time_t now;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
813
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
814 now = time(NULL);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
815 if (st.st_atime >= now - (time_t)tv->days * 24 * 60 * 60)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
816 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
817 valid = TRUE;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
818 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
819 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
820 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
821 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
822
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
823 g_object_unref(pixbuf);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
824 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
825
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
826 thumb_loader_std_thumb_file_validate_finish(tv, valid);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
827 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
828
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
829 static void thumb_loader_std_thumb_file_validate_error_cb(ThumbLoaderStd *tl, gpointer data)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
830 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
831 ThumbValidate *tv = data;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
832
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
833 thumb_loader_std_thumb_file_validate_finish(tv, FALSE);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
834 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
835
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
836 static gint thumb_loader_std_thumb_file_validate_idle_cb(gpointer data)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
837 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
838 ThumbValidate *tv = data;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
839
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
840 tv->idle_id = -1;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
841 thumb_loader_std_thumb_file_validate_finish(tv, FALSE);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
842
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
843 return FALSE;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
844 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
845
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
846 ThumbLoaderStd *thumb_loader_std_thumb_file_validate(const gchar *thumb_path, gint allowed_days,
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
847 void (*func_valid)(const gchar *path, gint valid, gpointer data),
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
848 gpointer data)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
849 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
850 ThumbValidate *tv;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
851
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
852 tv = g_new0(ThumbValidate, 1);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
853
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
854 tv->tl = thumb_loader_std_new(THUMB_SIZE_LARGE, THUMB_SIZE_LARGE);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
855 thumb_loader_std_set_callbacks(tv->tl,
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
856 thumb_loader_std_thumb_file_validate_done_cb,
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
857 thumb_loader_std_thumb_file_validate_error_cb,
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
858 NULL,
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
859 tv);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
860 thumb_loader_std_reset(tv->tl);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
861
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
862 tv->path = g_strdup(thumb_path);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
863 tv->days = allowed_days;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
864 tv->func_valid = func_valid;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
865 tv->data = data;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
866
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
867 if (!thumb_loader_std_setup(tv->tl, thumb_path))
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
868 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
869 tv->idle_id = g_idle_add(thumb_loader_std_thumb_file_validate_idle_cb, tv);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
870 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
871 else
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
872 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
873 tv->idle_id = -1;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
874 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
875
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
876 return tv->tl;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
877 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
878
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
879 static void thumb_std_maint_remove_one(const gchar *source, const gchar *uri, gint local,
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
880 const gchar *subfolder)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
881 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
882 gchar *thumb_path;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
883
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
884 thumb_path = thumb_std_cache_path(source,
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
885 (local) ? filename_from_path(uri) : uri,
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
886 local, subfolder);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
887 if (isfile(thumb_path))
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
888 {
495
c7a2471e5c4e Introduce macros to display debug messages.
zas_
parents: 475
diff changeset
889 DEBUG_1("thumb removing: %s\n", thumb_path);
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
890 unlink_file(thumb_path);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
891 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
892 g_free(thumb_path);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
893 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
894
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
895 /* this also removes local thumbnails (the source is gone so it makes sense) */
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
896 void thumb_std_maint_removed(const gchar *source)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
897 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
898 gchar *uri;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
899 gchar *sourcel;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
900
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
901 sourcel = path_from_utf8(source);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
902 uri = g_filename_to_uri(sourcel, NULL, NULL);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
903 g_free(sourcel);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
904
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
905 /* all this to remove a thumbnail? */
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
906
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
907 thumb_std_maint_remove_one(source, uri, FALSE, THUMB_FOLDER_NORMAL);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
908 thumb_std_maint_remove_one(source, uri, FALSE, THUMB_FOLDER_LARGE);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
909 thumb_std_maint_remove_one(source, uri, FALSE, THUMB_FOLDER_FAIL);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
910 thumb_std_maint_remove_one(source, uri, TRUE, THUMB_FOLDER_NORMAL);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
911 thumb_std_maint_remove_one(source, uri, TRUE, THUMB_FOLDER_LARGE);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
912
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
913 g_free(uri);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
914 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
915
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
916 typedef struct _TMaintMove TMaintMove;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
917 struct _TMaintMove
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
918 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
919 gchar *source;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
920 gchar *dest;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
921
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
922 ThumbLoaderStd *tl;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
923 gchar *source_uri;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
924 gchar *thumb_path;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
925
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
926 gint pass;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
927 };
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
928
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
929 static GList *thumb_std_maint_move_list = NULL;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
930 static GList *thumb_std_maint_move_tail = NULL;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
931
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
932
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
933 static void thumb_std_maint_move_step(TMaintMove *tm);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
934 static gint thumb_std_maint_move_idle(gpointer data);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
935
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
936
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
937 static void thumb_std_maint_move_validate_cb(const gchar *path, gint valid, gpointer data)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
938 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
939 TMaintMove *tm = data;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
940 GdkPixbuf *pixbuf;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
941
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
942 pixbuf = thumb_loader_std_get_pixbuf(tm->tl, FALSE);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
943 if (pixbuf)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
944 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
945 const gchar *uri;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
946 const gchar *mtime_str;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
947
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
948 uri = gdk_pixbuf_get_option(pixbuf, THUMB_MARKER_URI);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
949 mtime_str = gdk_pixbuf_get_option(pixbuf, THUMB_MARKER_MTIME);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
950
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
951 if (uri && mtime_str && strcmp(uri, tm->source_uri) == 0)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
952 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
953 gchar *pathl;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
954
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
955 /* The validation utility abuses ThumbLoader, and we
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
956 * abuse the utility just to load the thumbnail,
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
957 * but the loader needs to look sane for the save to complete.
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
958 */
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
959
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
960 tm->tl->cache_enable = TRUE;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
961 tm->tl->cache_hit = FALSE;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
962 tm->tl->cache_local = FALSE;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
963
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
964 g_free(tm->tl->source_path);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
965 tm->tl->source_path = g_strdup(tm->dest);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
966 tm->tl->source_mtime = strtol(mtime_str, NULL, 10);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
967
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
968 pathl = path_from_utf8(tm->tl->source_path);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
969 g_free(tm->tl->thumb_uri);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
970 tm->tl->thumb_uri = g_filename_to_uri(pathl, NULL, NULL);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
971 tm->tl->local_uri = filename_from_path(tm->tl->thumb_uri);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
972 g_free(pathl);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
973
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
974 g_free(tm->tl->thumb_path);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
975 tm->tl->thumb_path = NULL;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
976 tm->tl->thumb_path_local = FALSE;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
977
495
c7a2471e5c4e Introduce macros to display debug messages.
zas_
parents: 475
diff changeset
978 DEBUG_1("thumb move attempting save:\n");
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
979
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
980 thumb_loader_std_save(tm->tl, pixbuf);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
981 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
982
495
c7a2471e5c4e Introduce macros to display debug messages.
zas_
parents: 475
diff changeset
983 DEBUG_1("thumb move unlink: %s\n", tm->thumb_path);
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
984 unlink_file(tm->thumb_path);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
985 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
986
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
987 thumb_std_maint_move_step(tm);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
988 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
989
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
990 static void thumb_std_maint_move_step(TMaintMove *tm)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
991 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
992 const gchar *folder;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
993
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
994 tm->pass++;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
995 if (tm->pass > 2)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
996 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
997 g_free(tm->source);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
998 g_free(tm->dest);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
999 g_free(tm->source_uri);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1000 g_free(tm->thumb_path);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1001 g_free(tm);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1002
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1003 if (thumb_std_maint_move_list)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1004 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1005 g_idle_add_full(G_PRIORITY_LOW, thumb_std_maint_move_idle, NULL, NULL);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1006 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1007
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1008 return;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1009 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1010
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1011 folder = (tm->pass == 1) ? THUMB_FOLDER_NORMAL : THUMB_FOLDER_LARGE;
442
4b2d7f9af171 Big whitespaces cleanup:
zas_
parents: 436
diff changeset
1012
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1013 g_free(tm->thumb_path);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1014 tm->thumb_path = thumb_std_cache_path(tm->source, tm->source_uri, FALSE, folder);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1015 tm->tl = thumb_loader_std_thumb_file_validate(tm->thumb_path, 0,
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1016 thumb_std_maint_move_validate_cb, tm);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1017 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1018
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1019 static gint thumb_std_maint_move_idle(gpointer data)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1020 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1021 TMaintMove *tm;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1022 gchar *pathl;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1023
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1024 if (!thumb_std_maint_move_list) return FALSE;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1025
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1026 tm = thumb_std_maint_move_list->data;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1027
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1028 thumb_std_maint_move_list = g_list_remove(thumb_std_maint_move_list, tm);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1029 if (!thumb_std_maint_move_list) thumb_std_maint_move_tail = NULL;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1030
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1031 pathl = path_from_utf8(tm->source);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1032 tm->source_uri = g_filename_to_uri(pathl, NULL, NULL);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1033 g_free(pathl);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1034
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1035 tm->pass = 0;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1036
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1037 thumb_std_maint_move_step(tm);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1038
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1039 return FALSE;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1040 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1041
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1042 /* This will schedule a move of the thumbnail for source image to dest when idle.
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1043 * We do this so that file renaming or moving speed is not sacrificed by
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1044 * moving the thumbnails at the same time because:
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1045 *
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1046 * This cache design requires the tedious task of loading the png thumbnails and saving them.
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1047 *
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1048 * The thumbnails are processed when the app is idle. If the app
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1049 * exits early well too bad - they can simply be regenerated from scratch.
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1050 *
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1051 * This does not manage local thumbnails (fixme ?)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1052 */
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1053 void thumb_std_maint_moved(const gchar *source, const gchar *dest)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1054 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1055 TMaintMove *tm;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1056
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1057 tm = g_new0(TMaintMove, 1);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1058 tm->source = g_strdup(source);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1059 tm->dest = g_strdup(dest);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1060
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1061 if (!thumb_std_maint_move_list)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1062 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1063 g_idle_add_full(G_PRIORITY_LOW, thumb_std_maint_move_idle, NULL, NULL);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1064 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1065
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1066 if (thumb_std_maint_move_tail)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1067 {
66
ebbff299ad0d Fri Sep 1 02:12:45 2006 John Ellis <johne@verizon.net>
gqview
parents: 64
diff changeset
1068 thumb_std_maint_move_tail = g_list_append(thumb_std_maint_move_tail, tm);
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1069 thumb_std_maint_move_tail = thumb_std_maint_move_tail->next;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1070 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1071 else
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1072 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1073 thumb_std_maint_move_list = g_list_append(thumb_std_maint_move_list, tm);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1074 thumb_std_maint_move_tail = thumb_std_maint_move_list;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1075 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1076 }