annotate src/thumb_standard.c @ 1672:994169573393

Complete commit @1747 (intltool usage) With using intltool the localisation will fail cause of missing desktop.in file. Also the old desktop files are obsoleted by this commit. Also it is not necessary any more to have a './' in front of the files in POTFILES.in.
author mow
date Sat, 27 Jun 2009 22:57:56 +0000
parents c776b1310ca6
children 46284779a897
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
1284
8b89e3ff286b Add year 2009 to copyright info everywhere.
zas_
parents: 1148
diff changeset
4 * Copyright (C) 2008 - 2009 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 "image-load.h"
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
18 #include "md5-util.h"
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
19 #include "pixbuf_util.h"
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
20 #include "ui_fileops.h"
838
9bd49e725ad3 use FileData in thumb_loader
nadvornik
parents: 827
diff changeset
21 #include "filedata.h"
839
14520c3a91f8 rotate thumbnails by exif
nadvornik
parents: 838
diff changeset
22 #include "exif.h"
1288
10073464e6aa use metadata_read_* functions where possible
nadvornik
parents: 1284
diff changeset
23 #include "metadata.h"
9
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
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
26 /*
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
27 * This thumbnail caching implementation attempts to conform
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
28 * to the Thumbnail Managing Standard proposed on freedesktop.org
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
29 * The standard is documented here:
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
30 * http://triq.net/~jens/thumbnail-spec/index.html
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
31 * (why isn't it actually hosted on freedesktop.org?)
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 * 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
34 *
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
35 * Notes:
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
36 * > 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
37 * 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
38 * escape functions escape the same set of chars, comparing the unescaped
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
39 * versions may be more accurate.
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
40 * > 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
41 * Storing the Size, Width, Height should probably be implemented.
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
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
44
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
45 #define THUMB_SIZE_NORMAL 128
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
46 #define THUMB_SIZE_LARGE 256
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
47
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
48 #define THUMB_MARKER_URI "tEXt::Thumb::URI"
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
49 #define THUMB_MARKER_MTIME "tEXt::Thumb::MTime"
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
50 #define THUMB_MARKER_SIZE "tEXt::Thumb::Size"
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
51 #define THUMB_MARKER_WIDTH "tEXt::Thumb::Image::Width"
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
52 #define THUMB_MARKER_HEIGHT "tEXt::Thumb::Image::Height"
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
53 #define THUMB_MARKER_APP "tEXt::Software"
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
54
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
55 #define THUMB_PERMS_FOLDER 0700
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
56 #define THUMB_PERMS_THUMB 0600
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 /*
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 * thumbnail loader
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
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
66
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
67 static void thumb_loader_std_error_cb(ImageLoader *il, gpointer data);
1009
dd311dae857a fixed thumbnail loader for the new raw preview interface
nadvornik
parents: 972
diff changeset
68 static gint thumb_loader_std_setup(ThumbLoaderStd *tl, FileData *fd);
dd311dae857a fixed thumbnail loader for the new raw preview interface
nadvornik
parents: 972
diff changeset
69 static gint thumb_loader_std_setup_path(ThumbLoaderStd *tl, const gchar *path);
9
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
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
72 ThumbLoaderStd *thumb_loader_std_new(gint width, gint height)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
73 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
74 ThumbLoaderStd *tl;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
75
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
76 tl = g_new0(ThumbLoaderStd, 1);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
77
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
78 tl->standard_loader = TRUE;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
79 tl->requested_width = width;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
80 tl->requested_height = height;
333
767b53cd9ab7 Rename thumbnails related options.
zas_
parents: 318
diff changeset
81 tl->cache_enable = options->thumbnails.enable_caching;
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
82
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
83 return tl;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
84 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
85
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
86 void thumb_loader_std_set_callbacks(ThumbLoaderStd *tl,
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
87 ThumbLoaderStdFunc func_done,
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
88 ThumbLoaderStdFunc func_error,
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
89 ThumbLoaderStdFunc func_progress,
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
90 gpointer data)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
91 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
92 if (!tl) return;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
93
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
94 tl->func_done = func_done;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
95 tl->func_error = func_error;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
96 tl->func_progress = func_progress;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
97 tl->data = data;
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
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
100 static void thumb_loader_std_reset(ThumbLoaderStd *tl)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
101 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
102 image_loader_free(tl->il);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
103 tl->il = NULL;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
104
838
9bd49e725ad3 use FileData in thumb_loader
nadvornik
parents: 827
diff changeset
105 file_data_unref(tl->fd);
9bd49e725ad3 use FileData in thumb_loader
nadvornik
parents: 827
diff changeset
106 tl->fd = NULL;
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
107
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
108 g_free(tl->thumb_path);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
109 tl->thumb_path = NULL;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
110
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
111 g_free(tl->thumb_uri);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
112 tl->thumb_uri = NULL;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
113 tl->local_uri = NULL;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
114
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
115 tl->thumb_path_local = FALSE;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
116
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
117 tl->cache_hit = FALSE;
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 tl->source_mtime = 0;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
120 tl->source_size = 0;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
121 tl->source_mode = 0;
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->progress = 0.0;
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
1446
a6f9ba6fd751 gint -> gboolean.
zas_
parents: 1437
diff changeset
126 static gchar *thumb_std_cache_path(const gchar *path, const gchar *uri, gboolean local,
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
127 const gchar *cache_subfolder)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
128 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
129 gchar *result = NULL;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
130 gchar *md5_text;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
131 guchar digest[16];
716
c534b8cecc1f thumb_std_cache_path(): use g_build_filename() and simplify.
zas_
parents: 671
diff changeset
132 gchar *name;
9
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 if (!path || !uri || !cache_subfolder) return NULL;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
135
716
c534b8cecc1f thumb_std_cache_path(): use g_build_filename() and simplify.
zas_
parents: 671
diff changeset
136 md5_get_digest((guchar *)uri, strlen(uri), digest);
c534b8cecc1f thumb_std_cache_path(): use g_build_filename() and simplify.
zas_
parents: 671
diff changeset
137 md5_text = md5_digest_to_text(digest);
c534b8cecc1f thumb_std_cache_path(): use g_build_filename() and simplify.
zas_
parents: 671
diff changeset
138
c534b8cecc1f thumb_std_cache_path(): use g_build_filename() and simplify.
zas_
parents: 671
diff changeset
139 if (!md5_text) return NULL;
c534b8cecc1f thumb_std_cache_path(): use g_build_filename() and simplify.
zas_
parents: 671
diff changeset
140
c534b8cecc1f thumb_std_cache_path(): use g_build_filename() and simplify.
zas_
parents: 671
diff changeset
141 name = g_strconcat(md5_text, THUMB_NAME_EXTENSION, NULL);
c534b8cecc1f thumb_std_cache_path(): use g_build_filename() and simplify.
zas_
parents: 671
diff changeset
142
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
143 if (local)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
144 {
716
c534b8cecc1f thumb_std_cache_path(): use g_build_filename() and simplify.
zas_
parents: 671
diff changeset
145 gchar *base = remove_level_from_path(path);
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
146
716
c534b8cecc1f thumb_std_cache_path(): use g_build_filename() and simplify.
zas_
parents: 671
diff changeset
147 result = g_build_filename(base, THUMB_FOLDER_LOCAL, cache_subfolder, name, NULL);
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
148 g_free(base);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
149 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
150 else
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
151 {
716
c534b8cecc1f thumb_std_cache_path(): use g_build_filename() and simplify.
zas_
parents: 671
diff changeset
152 result = g_build_filename(homedir(), THUMB_FOLDER_GLOBAL, cache_subfolder, name, NULL);
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
153 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
154
716
c534b8cecc1f thumb_std_cache_path(): use g_build_filename() and simplify.
zas_
parents: 671
diff changeset
155 g_free(name);
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
156 g_free(md5_text);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
157
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
158 return result;
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
1446
a6f9ba6fd751 gint -> gboolean.
zas_
parents: 1437
diff changeset
161 static gchar *thumb_loader_std_cache_path(ThumbLoaderStd *tl, gboolean local, GdkPixbuf *pixbuf, gboolean fail)
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
162 {
436
f0289d80ecc1 Rename inappropriate folder_size to folder.
zas_
parents: 333
diff changeset
163 const gchar *folder;
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
164 gint w, h;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
165
838
9bd49e725ad3 use FileData in thumb_loader
nadvornik
parents: 827
diff changeset
166 if (!tl->fd || !tl->thumb_uri) return NULL;
9
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 if (pixbuf)
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 w = gdk_pixbuf_get_width(pixbuf);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
171 h = gdk_pixbuf_get_height(pixbuf);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
172 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
173 else
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
174 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
175 w = tl->requested_width;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
176 h = tl->requested_height;
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
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
179 if (fail)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
180 {
436
f0289d80ecc1 Rename inappropriate folder_size to folder.
zas_
parents: 333
diff changeset
181 folder = THUMB_FOLDER_FAIL;
9
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 if (w > THUMB_SIZE_NORMAL || h > THUMB_SIZE_NORMAL)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
184 {
436
f0289d80ecc1 Rename inappropriate folder_size to folder.
zas_
parents: 333
diff changeset
185 folder = THUMB_FOLDER_LARGE;
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
186 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
187 else
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
188 {
436
f0289d80ecc1 Rename inappropriate folder_size to folder.
zas_
parents: 333
diff changeset
189 folder = THUMB_FOLDER_NORMAL;
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
190 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
191
838
9bd49e725ad3 use FileData in thumb_loader
nadvornik
parents: 827
diff changeset
192 return thumb_std_cache_path(tl->fd->path,
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
193 (local) ? tl->local_uri : tl->thumb_uri,
436
f0289d80ecc1 Rename inappropriate folder_size to folder.
zas_
parents: 333
diff changeset
194 local, folder);
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
195 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
196
1446
a6f9ba6fd751 gint -> gboolean.
zas_
parents: 1437
diff changeset
197 static gboolean thumb_loader_std_fail_check(ThumbLoaderStd *tl)
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
198 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
199 gchar *fail_path;
1437
a3d3208b0c50 gint -> gboolean.
zas_
parents: 1365
diff changeset
200 gboolean result = FALSE;
9
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 fail_path = thumb_loader_std_cache_path(tl, FALSE, NULL, TRUE);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
203 if (isfile(fail_path))
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
204 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
205 GdkPixbuf *pixbuf;
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 if (tl->cache_retry)
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 pixbuf = NULL;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
210 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
211 else
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
212 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
213 gchar *pathl;
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 pathl = path_from_utf8(fail_path);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
216 pixbuf = gdk_pixbuf_new_from_file(pathl, NULL);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
217 g_free(pathl);
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
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
220 if (pixbuf)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
221 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
222 const gchar *mtime_str;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
223
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
224 mtime_str = gdk_pixbuf_get_option(pixbuf, THUMB_MARKER_MTIME);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
225 if (mtime_str && strtol(mtime_str, NULL, 10) == tl->source_mtime)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
226 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
227 result = TRUE;
838
9bd49e725ad3 use FileData in thumb_loader
nadvornik
parents: 827
diff changeset
228 DEBUG_1("thumb fail valid: %s", tl->fd->path);
506
fc9c8a3e1a8b Handle the newline in DEBUG_N() macro instead of adding one
zas_
parents: 495
diff changeset
229 DEBUG_1(" thumb: %s", fail_path);
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
230 }
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 g_object_unref(G_OBJECT(pixbuf));
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
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
235 if (!result) unlink_file(fail_path);
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 g_free(fail_path);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
238
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
239 return result;
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
1446
a6f9ba6fd751 gint -> gboolean.
zas_
parents: 1437
diff changeset
242 static gboolean thumb_loader_std_validate(ThumbLoaderStd *tl, GdkPixbuf *pixbuf)
9
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 const gchar *valid_uri;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
245 const gchar *uri;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
246 const gchar *mtime_str;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
247 time_t mtime;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
248 gint w, h;
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 if (!pixbuf) return FALSE;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
251
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
252 w = gdk_pixbuf_get_width(pixbuf);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
253 h = gdk_pixbuf_get_height(pixbuf);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
254
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
255 if (w != THUMB_SIZE_NORMAL && w != THUMB_SIZE_LARGE &&
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
256 h != THUMB_SIZE_NORMAL && h != THUMB_SIZE_LARGE) return FALSE;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
257
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
258 valid_uri = (tl->thumb_path_local) ? tl->local_uri : tl->thumb_uri;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
259
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
260 uri = gdk_pixbuf_get_option(pixbuf, THUMB_MARKER_URI);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
261 mtime_str = gdk_pixbuf_get_option(pixbuf, THUMB_MARKER_MTIME);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
262
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
263 if (!mtime_str || !uri || !valid_uri) return FALSE;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
264 if (strcmp(uri, valid_uri) != 0) return FALSE;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
265
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
266 mtime = strtol(mtime_str, NULL, 10);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
267 if (tl->source_mtime != mtime) return FALSE;
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 return TRUE;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
270 }
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 static void thumb_loader_std_save(ThumbLoaderStd *tl, GdkPixbuf *pixbuf)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
273 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
274 gchar *base_path;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
275 gchar *tmp_path;
1446
a6f9ba6fd751 gint -> gboolean.
zas_
parents: 1437
diff changeset
276 gboolean fail;
9
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 if (!tl->cache_enable || tl->cache_hit) return;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
279 if (tl->thumb_path) return;
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 if (!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 /* local failures are not stored */
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
284 if (tl->cache_local) return;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
285
436
f0289d80ecc1 Rename inappropriate folder_size to folder.
zas_
parents: 333
diff changeset
286 pixbuf = gdk_pixbuf_new(GDK_COLORSPACE_RGB, TRUE, 8, 1, 1);
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
287 fail = TRUE;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
288 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
289 else
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
290 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
291 g_object_ref(G_OBJECT(pixbuf));
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
292 fail = FALSE;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
293 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
294
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
295 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
296 if (!tl->thumb_path)
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 g_object_unref(G_OBJECT(pixbuf));
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
299 return;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
300 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
301 tl->thumb_path_local = tl->cache_local;
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 /* create thumbnail dir if needed */
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
304 base_path = remove_level_from_path(tl->thumb_path);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
305 if (tl->cache_local)
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 if (!isdir(base_path))
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
308 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
309 struct stat st;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
310 gchar *source_base;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
311
838
9bd49e725ad3 use FileData in thumb_loader
nadvornik
parents: 827
diff changeset
312 source_base = remove_level_from_path(tl->fd->path);
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
313 if (stat_utf8(source_base, &st))
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
314 {
1148
95860439070b Replace cache_ensure_dir_exists() by new recursive_mkdir_if_not_exists().
zas_
parents: 1055
diff changeset
315 recursive_mkdir_if_not_exists(base_path, st.st_mode);
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
316 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
317 g_free(source_base);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
318 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
319 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
320 else
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
321 {
1148
95860439070b Replace cache_ensure_dir_exists() by new recursive_mkdir_if_not_exists().
zas_
parents: 1055
diff changeset
322 recursive_mkdir_if_not_exists(base_path, THUMB_PERMS_FOLDER);
9
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 g_free(base_path);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
325
838
9bd49e725ad3 use FileData in thumb_loader
nadvornik
parents: 827
diff changeset
326 DEBUG_1("thumb saving: %s", tl->fd->path);
506
fc9c8a3e1a8b Handle the newline in DEBUG_N() macro instead of adding one
zas_
parents: 495
diff changeset
327 DEBUG_1(" saved: %s", tl->thumb_path);
9
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 /* save thumb, using a temp file then renaming into place */
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
330 tmp_path = unique_filename(tl->thumb_path, ".tmp", "_", 2);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
331 if (tmp_path)
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 const gchar *mark_uri;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
334 gchar *mark_app;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
335 gchar *mark_mtime;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
336 gchar *pathl;
1446
a6f9ba6fd751 gint -> gboolean.
zas_
parents: 1437
diff changeset
337 gboolean success;
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
338
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
339 mark_uri = (tl->cache_local) ? tl->local_uri :tl->thumb_uri;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
340
288
d1f74154463e Replace occurences of Geeqie / geeqie by constants defined in main.h.
zas_
parents: 281
diff changeset
341 mark_app = g_strdup_printf("%s %s", GQ_APPNAME, VERSION);
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
342 mark_mtime = g_strdup_printf("%lu", tl->source_mtime);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
343
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
344 pathl = path_from_utf8(tmp_path);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
345 success = gdk_pixbuf_save(pixbuf, pathl, "png", NULL,
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
346 THUMB_MARKER_URI, mark_uri,
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
347 THUMB_MARKER_MTIME, mark_mtime,
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
348 THUMB_MARKER_APP, mark_app,
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
349 NULL);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
350 if (success)
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 chmod(pathl, (tl->cache_local) ? tl->source_mode : THUMB_PERMS_THUMB);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
353 success = rename_file(tmp_path, tl->thumb_path);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
354 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
355
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
356 g_free(pathl);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
357
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
358 g_free(mark_mtime);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
359 g_free(mark_app);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
360
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
361 g_free(tmp_path);
506
fc9c8a3e1a8b Handle the newline in DEBUG_N() macro instead of adding one
zas_
parents: 495
diff changeset
362 if (!success)
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
363 {
838
9bd49e725ad3 use FileData in thumb_loader
nadvornik
parents: 827
diff changeset
364 DEBUG_1("thumb save failed: %s", tl->fd->path);
506
fc9c8a3e1a8b Handle the newline in DEBUG_N() macro instead of adding one
zas_
parents: 495
diff changeset
365 DEBUG_1(" thumb: %s", tl->thumb_path);
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
366 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
367
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
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
370 g_object_unref(G_OBJECT(pixbuf));
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
876
2d8705f33da5 set fallback thumbnail pixbuf only if the loading really fails
nadvornik
parents: 864
diff changeset
373 static void thumb_loader_std_set_fallback(ThumbLoaderStd *tl)
2d8705f33da5 set fallback thumbnail pixbuf only if the loading really fails
nadvornik
parents: 864
diff changeset
374 {
2d8705f33da5 set fallback thumbnail pixbuf only if the loading really fails
nadvornik
parents: 864
diff changeset
375 if (tl->fd->thumb_pixbuf) g_object_unref(tl->fd->thumb_pixbuf);
2d8705f33da5 set fallback thumbnail pixbuf only if the loading really fails
nadvornik
parents: 864
diff changeset
376 tl->fd->thumb_pixbuf = pixbuf_fallback(tl->fd, tl->requested_width, tl->requested_height);
2d8705f33da5 set fallback thumbnail pixbuf only if the loading really fails
nadvornik
parents: 864
diff changeset
377 }
2d8705f33da5 set fallback thumbnail pixbuf only if the loading really fails
nadvornik
parents: 864
diff changeset
378
1446
a6f9ba6fd751 gint -> gboolean.
zas_
parents: 1437
diff changeset
379 static GdkPixbuf *thumb_loader_std_finish(ThumbLoaderStd *tl, GdkPixbuf *pixbuf, gboolean shrunk)
9
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 GdkPixbuf *pixbuf_thumb = NULL;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
382 GdkPixbuf *result;
839
14520c3a91f8 rotate thumbnails by exif
nadvornik
parents: 838
diff changeset
383 GdkPixbuf *rotated = NULL;
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
384 gint sw, sh;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
385
839
14520c3a91f8 rotate thumbnails by exif
nadvornik
parents: 838
diff changeset
386
14520c3a91f8 rotate thumbnails by exif
nadvornik
parents: 838
diff changeset
387 if (!tl->cache_hit && options->image.exif_rotate_enable)
14520c3a91f8 rotate thumbnails by exif
nadvornik
parents: 838
diff changeset
388 {
14520c3a91f8 rotate thumbnails by exif
nadvornik
parents: 838
diff changeset
389 if (!tl->fd->exif_orientation)
14520c3a91f8 rotate thumbnails by exif
nadvornik
parents: 838
diff changeset
390 {
1567
c776b1310ca6 added an option to write image orientation to the metadata
nadvornik
parents: 1523
diff changeset
391 tl->fd->exif_orientation = metadata_read_int(tl->fd, ORIENTATION_KEY, EXIF_ORIENTATION_TOP_LEFT);
839
14520c3a91f8 rotate thumbnails by exif
nadvornik
parents: 838
diff changeset
392 }
14520c3a91f8 rotate thumbnails by exif
nadvornik
parents: 838
diff changeset
393
842
94048d7843ba do not allocate new buffer for thumbnails with correct orientation
nadvornik
parents: 841
diff changeset
394 if (tl->fd->exif_orientation != EXIF_ORIENTATION_TOP_LEFT)
94048d7843ba do not allocate new buffer for thumbnails with correct orientation
nadvornik
parents: 841
diff changeset
395 {
94048d7843ba do not allocate new buffer for thumbnails with correct orientation
nadvornik
parents: 841
diff changeset
396 rotated = pixbuf_apply_orientation(pixbuf, tl->fd->exif_orientation);
94048d7843ba do not allocate new buffer for thumbnails with correct orientation
nadvornik
parents: 841
diff changeset
397 pixbuf = rotated;
94048d7843ba do not allocate new buffer for thumbnails with correct orientation
nadvornik
parents: 841
diff changeset
398 }
839
14520c3a91f8 rotate thumbnails by exif
nadvornik
parents: 838
diff changeset
399 }
14520c3a91f8 rotate thumbnails by exif
nadvornik
parents: 838
diff changeset
400
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
401 sw = gdk_pixbuf_get_width(pixbuf);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
402 sh = gdk_pixbuf_get_height(pixbuf);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
403
40
dcc04a6a58bf Sat Apr 16 12:29:42 2005 John Ellis <johne@verizon.net>
gqview
parents: 14
diff changeset
404 if (tl->cache_enable)
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
405 {
40
dcc04a6a58bf Sat Apr 16 12:29:42 2005 John Ellis <johne@verizon.net>
gqview
parents: 14
diff changeset
406 if (!tl->cache_hit)
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
407 {
40
dcc04a6a58bf Sat Apr 16 12:29:42 2005 John Ellis <johne@verizon.net>
gqview
parents: 14
diff changeset
408 gint cache_w, cache_h;
dcc04a6a58bf Sat Apr 16 12:29:42 2005 John Ellis <johne@verizon.net>
gqview
parents: 14
diff changeset
409
dcc04a6a58bf Sat Apr 16 12:29:42 2005 John Ellis <johne@verizon.net>
gqview
parents: 14
diff changeset
410 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
411 {
dcc04a6a58bf Sat Apr 16 12:29:42 2005 John Ellis <johne@verizon.net>
gqview
parents: 14
diff changeset
412 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
413 }
dcc04a6a58bf Sat Apr 16 12:29:42 2005 John Ellis <johne@verizon.net>
gqview
parents: 14
diff changeset
414 else
dcc04a6a58bf Sat Apr 16 12:29:42 2005 John Ellis <johne@verizon.net>
gqview
parents: 14
diff changeset
415 {
dcc04a6a58bf Sat Apr 16 12:29:42 2005 John Ellis <johne@verizon.net>
gqview
parents: 14
diff changeset
416 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
417 }
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 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
420 {
dcc04a6a58bf Sat Apr 16 12:29:42 2005 John Ellis <johne@verizon.net>
gqview
parents: 14
diff changeset
421 gint thumb_w, thumb_h;
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
422
864
f40509d56fe3 added pixbuf_fallback function
nadvornik
parents: 845
diff changeset
423 if (pixbuf_scale_aspect(cache_w, cache_h, sw, sh,
40
dcc04a6a58bf Sat Apr 16 12:29:42 2005 John Ellis <johne@verizon.net>
gqview
parents: 14
diff changeset
424 &thumb_w, &thumb_h))
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 pixbuf_thumb = gdk_pixbuf_scale_simple(pixbuf, thumb_w, thumb_h,
333
767b53cd9ab7 Rename thumbnails related options.
zas_
parents: 318
diff changeset
427 (GdkInterpType)options->thumbnails.quality);
40
dcc04a6a58bf Sat Apr 16 12:29:42 2005 John Ellis <johne@verizon.net>
gqview
parents: 14
diff changeset
428 }
dcc04a6a58bf Sat Apr 16 12:29:42 2005 John Ellis <johne@verizon.net>
gqview
parents: 14
diff changeset
429 else
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 = pixbuf;
dcc04a6a58bf Sat Apr 16 12:29:42 2005 John Ellis <johne@verizon.net>
gqview
parents: 14
diff changeset
432 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
433 }
dcc04a6a58bf Sat Apr 16 12:29:42 2005 John Ellis <johne@verizon.net>
gqview
parents: 14
diff changeset
434
dcc04a6a58bf Sat Apr 16 12:29:42 2005 John Ellis <johne@verizon.net>
gqview
parents: 14
diff changeset
435 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
436 }
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
437 }
40
dcc04a6a58bf Sat Apr 16 12:29:42 2005 John Ellis <johne@verizon.net>
gqview
parents: 14
diff changeset
438 else if (tl->cache_hit &&
dcc04a6a58bf Sat Apr 16 12:29:42 2005 John Ellis <johne@verizon.net>
gqview
parents: 14
diff changeset
439 tl->cache_local && !tl->thumb_path_local)
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
440 {
40
dcc04a6a58bf Sat Apr 16 12:29:42 2005 John Ellis <johne@verizon.net>
gqview
parents: 14
diff changeset
441 /* 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
442 * 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
443 */
dcc04a6a58bf Sat Apr 16 12:29:42 2005 John Ellis <johne@verizon.net>
gqview
parents: 14
diff changeset
444 g_free(tl->thumb_path);
dcc04a6a58bf Sat Apr 16 12:29:42 2005 John Ellis <johne@verizon.net>
gqview
parents: 14
diff changeset
445 tl->thumb_path = NULL;
dcc04a6a58bf Sat Apr 16 12:29:42 2005 John Ellis <johne@verizon.net>
gqview
parents: 14
diff changeset
446
dcc04a6a58bf Sat Apr 16 12:29:42 2005 John Ellis <johne@verizon.net>
gqview
parents: 14
diff changeset
447 tl->cache_hit = FALSE;
dcc04a6a58bf Sat Apr 16 12:29:42 2005 John Ellis <johne@verizon.net>
gqview
parents: 14
diff changeset
448
838
9bd49e725ad3 use FileData in thumb_loader
nadvornik
parents: 827
diff changeset
449 DEBUG_1("thumb copied: %s", tl->fd->path);
40
dcc04a6a58bf Sat Apr 16 12:29:42 2005 John Ellis <johne@verizon.net>
gqview
parents: 14
diff changeset
450
dcc04a6a58bf Sat Apr 16 12:29:42 2005 John Ellis <johne@verizon.net>
gqview
parents: 14
diff changeset
451 thumb_loader_std_save(tl, pixbuf);
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
452 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
453 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
454
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
455 if (sw <= tl->requested_width && sh <= tl->requested_height)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
456 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
457 result = pixbuf;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
458 g_object_ref(result);
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 else
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 gint thumb_w, thumb_h;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
463
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
464 if (pixbuf_thumb)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
465 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
466 pixbuf = pixbuf_thumb;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
467 sw = gdk_pixbuf_get_width(pixbuf);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
468 sh = gdk_pixbuf_get_height(pixbuf);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
469 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
470
864
f40509d56fe3 added pixbuf_fallback function
nadvornik
parents: 845
diff changeset
471 if (pixbuf_scale_aspect(tl->requested_width, tl->requested_height, sw, sh,
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
472 &thumb_w, &thumb_h))
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
473 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
474 result = gdk_pixbuf_scale_simple(pixbuf, thumb_w, thumb_h,
333
767b53cd9ab7 Rename thumbnails related options.
zas_
parents: 318
diff changeset
475 (GdkInterpType)options->thumbnails.quality);
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
476 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
477 else
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 = pixbuf;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
480 g_object_ref(result);
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 }
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 if (pixbuf_thumb) g_object_unref(pixbuf_thumb);
839
14520c3a91f8 rotate thumbnails by exif
nadvornik
parents: 838
diff changeset
485 if (rotated) g_object_unref(rotated);
9
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 return result;
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
1446
a6f9ba6fd751 gint -> gboolean.
zas_
parents: 1437
diff changeset
490 static gboolean thumb_loader_std_next_source(ThumbLoaderStd *tl, gboolean remove_broken)
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
491 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
492 image_loader_free(tl->il);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
493 tl->il = NULL;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
494
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
495 if (tl->thumb_path)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
496 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
497 if (!tl->thumb_path_local && remove_broken)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
498 {
506
fc9c8a3e1a8b Handle the newline in DEBUG_N() macro instead of adding one
zas_
parents: 495
diff changeset
499 DEBUG_1("thumb broken, unlinking: %s", tl->thumb_path);
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
500 unlink_file(tl->thumb_path);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
501 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
502
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
503 g_free(tl->thumb_path);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
504 tl->thumb_path = NULL;
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 if (!tl->thumb_path_local)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
507 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
508 tl->thumb_path = thumb_loader_std_cache_path(tl, TRUE, NULL, FALSE);
1009
dd311dae857a fixed thumbnail loader for the new raw preview interface
nadvornik
parents: 972
diff changeset
509 if (isfile(tl->thumb_path) && thumb_loader_std_setup_path(tl, tl->thumb_path))
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
510 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
511 tl->thumb_path_local = TRUE;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
512 return TRUE;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
513 }
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 g_free(tl->thumb_path);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
516 tl->thumb_path = NULL;
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
1009
dd311dae857a fixed thumbnail loader for the new raw preview interface
nadvornik
parents: 972
diff changeset
519 if (thumb_loader_std_setup(tl, tl->fd)) return TRUE;
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
520 }
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 thumb_loader_std_save(tl, NULL);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
523 return FALSE;
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 static void thumb_loader_std_done_cb(ImageLoader *il, gpointer data)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
527 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
528 ThumbLoaderStd *tl = data;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
529 GdkPixbuf *pixbuf;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
530
881
10d0bf784323 Prevent segfault in certain conditions when displaying debug message.
zas_
parents: 876
diff changeset
531 DEBUG_1("thumb image done: %s", tl->fd ? tl->fd->path : "???");
1011
616b14da08c2 do not access image_loader directly
nadvornik
parents: 1009
diff changeset
532 DEBUG_1(" from: %s", image_loader_get_fd(tl->il)->path);
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
533
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
534 pixbuf = image_loader_get_pixbuf(tl->il);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
535 if (!pixbuf)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
536 {
506
fc9c8a3e1a8b Handle the newline in DEBUG_N() macro instead of adding one
zas_
parents: 495
diff changeset
537 DEBUG_1("...but no pixbuf");
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
538 thumb_loader_std_error_cb(il, data);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
539 return;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
540 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
541
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
542 if (tl->thumb_path && !thumb_loader_std_validate(tl, pixbuf))
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 if (thumb_loader_std_next_source(tl, TRUE)) return;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
545
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
546 if (tl->func_error) tl->func_error(tl, tl->data);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
547 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
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
550 tl->cache_hit = (tl->thumb_path != NULL);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
551
838
9bd49e725ad3 use FileData in thumb_loader
nadvornik
parents: 827
diff changeset
552 if (tl->fd)
9bd49e725ad3 use FileData in thumb_loader
nadvornik
parents: 827
diff changeset
553 {
845
06929cbcd796 renamed fd->pixbuf to fd->thumb_pixbuf
nadvornik
parents: 844
diff changeset
554 if (tl->fd->thumb_pixbuf) g_object_unref(tl->fd->thumb_pixbuf);
1011
616b14da08c2 do not access image_loader directly
nadvornik
parents: 1009
diff changeset
555 tl->fd->thumb_pixbuf = thumb_loader_std_finish(tl, pixbuf, image_loader_get_shrunk(il));
838
9bd49e725ad3 use FileData in thumb_loader
nadvornik
parents: 827
diff changeset
556 }
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
557
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
558 if (tl->func_done) tl->func_done(tl, tl->data);
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
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
561 static void thumb_loader_std_error_cb(ImageLoader *il, gpointer data)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
562 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
563 ThumbLoaderStd *tl = data;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
564
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
565 /* if at least some of the image is available, go to done */
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
566 if (image_loader_get_pixbuf(tl->il) != NULL)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
567 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
568 thumb_loader_std_done_cb(il, data);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
569 return;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
570 }
495
c7a2471e5c4e Introduce macros to display debug messages.
zas_
parents: 475
diff changeset
571
838
9bd49e725ad3 use FileData in thumb_loader
nadvornik
parents: 827
diff changeset
572 DEBUG_1("thumb image error: %s", tl->fd->path);
1011
616b14da08c2 do not access image_loader directly
nadvornik
parents: 1009
diff changeset
573 DEBUG_1(" from: %s", image_loader_get_fd(tl->il)->path);
9
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 (thumb_loader_std_next_source(tl, TRUE)) return;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
576
876
2d8705f33da5 set fallback thumbnail pixbuf only if the loading really fails
nadvornik
parents: 864
diff changeset
577 thumb_loader_std_set_fallback(tl);
2d8705f33da5 set fallback thumbnail pixbuf only if the loading really fails
nadvornik
parents: 864
diff changeset
578
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
579 if (tl->func_error) tl->func_error(tl, tl->data);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
580 }
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 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
583 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
584 ThumbLoaderStd *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 tl->progress = (gdouble)percent;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
587
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
588 if (tl->func_progress) tl->func_progress(tl, tl->data);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
589 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
590
1446
a6f9ba6fd751 gint -> gboolean.
zas_
parents: 1437
diff changeset
591 static gboolean thumb_loader_std_setup(ThumbLoaderStd *tl, FileData *fd)
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
592 {
1009
dd311dae857a fixed thumbnail loader for the new raw preview interface
nadvornik
parents: 972
diff changeset
593 tl->il = image_loader_new(fd);
1036
ab24c46aa6e4 load thumbnails with lower priority
nadvornik
parents: 1012
diff changeset
594 image_loader_set_priority(tl->il, G_PRIORITY_LOW);
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
595
1521
68b73d524ca3 unconditionally enable fast jpeg thumbnailing
nadvornik
parents: 1446
diff changeset
596 /* this will speed up jpegs by up to 3x in some cases */
68b73d524ca3 unconditionally enable fast jpeg thumbnailing
nadvornik
parents: 1446
diff changeset
597 if (tl->requested_width <= THUMB_SIZE_NORMAL &&
68b73d524ca3 unconditionally enable fast jpeg thumbnailing
nadvornik
parents: 1446
diff changeset
598 tl->requested_height <= THUMB_SIZE_NORMAL)
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
599 {
1521
68b73d524ca3 unconditionally enable fast jpeg thumbnailing
nadvornik
parents: 1446
diff changeset
600 image_loader_set_requested_size(tl->il, THUMB_SIZE_NORMAL, THUMB_SIZE_NORMAL);
68b73d524ca3 unconditionally enable fast jpeg thumbnailing
nadvornik
parents: 1446
diff changeset
601 }
68b73d524ca3 unconditionally enable fast jpeg thumbnailing
nadvornik
parents: 1446
diff changeset
602 else
68b73d524ca3 unconditionally enable fast jpeg thumbnailing
nadvornik
parents: 1446
diff changeset
603 {
68b73d524ca3 unconditionally enable fast jpeg thumbnailing
nadvornik
parents: 1446
diff changeset
604 image_loader_set_requested_size(tl->il, THUMB_SIZE_LARGE, THUMB_SIZE_LARGE);
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
605 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
606
1346
c9949c19a6d0 No space between function name and first parenthesis, it eases greping (see CODING).
zas_
parents: 1288
diff changeset
607 g_signal_connect(G_OBJECT(tl->il), "error", (GCallback)thumb_loader_std_error_cb, tl);
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
608 if (tl->func_progress)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
609 {
1346
c9949c19a6d0 No space between function name and first parenthesis, it eases greping (see CODING).
zas_
parents: 1288
diff changeset
610 g_signal_connect(G_OBJECT(tl->il), "percent", (GCallback)thumb_loader_std_progress_cb, tl);
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
611 }
1346
c9949c19a6d0 No space between function name and first parenthesis, it eases greping (see CODING).
zas_
parents: 1288
diff changeset
612 g_signal_connect(G_OBJECT(tl->il), "done", (GCallback)thumb_loader_std_done_cb, tl);
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
613
1012
fe82830ab8fd converted image loader to a GObject and use signals for notification
nadvornik
parents: 1011
diff changeset
614 if (image_loader_start(tl->il))
9
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 return TRUE;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
617 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
618
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
619 image_loader_free(tl->il);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
620 tl->il = NULL;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
621 return FALSE;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
622 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
623
1446
a6f9ba6fd751 gint -> gboolean.
zas_
parents: 1437
diff changeset
624 static gboolean thumb_loader_std_setup_path(ThumbLoaderStd *tl, const gchar *path)
1009
dd311dae857a fixed thumbnail loader for the new raw preview interface
nadvornik
parents: 972
diff changeset
625 {
dd311dae857a fixed thumbnail loader for the new raw preview interface
nadvornik
parents: 972
diff changeset
626 FileData *fd = file_data_new_simple(path);
1446
a6f9ba6fd751 gint -> gboolean.
zas_
parents: 1437
diff changeset
627 gboolean ret = thumb_loader_std_setup(tl, fd);
1009
dd311dae857a fixed thumbnail loader for the new raw preview interface
nadvornik
parents: 972
diff changeset
628 file_data_unref(fd);
dd311dae857a fixed thumbnail loader for the new raw preview interface
nadvornik
parents: 972
diff changeset
629 return ret;
dd311dae857a fixed thumbnail loader for the new raw preview interface
nadvornik
parents: 972
diff changeset
630 }
dd311dae857a fixed thumbnail loader for the new raw preview interface
nadvornik
parents: 972
diff changeset
631
9
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 * 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
634 * 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
635 */
1446
a6f9ba6fd751 gint -> gboolean.
zas_
parents: 1437
diff changeset
636 void thumb_loader_std_set_cache(ThumbLoaderStd *tl, gboolean enable_cache, gboolean local, gboolean retry_failed)
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
637 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
638 if (!tl) return;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
639
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
640 tl->cache_enable = enable_cache;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
641 tl->cache_local = local;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
642 tl->cache_retry = retry_failed;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
643 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
644
1446
a6f9ba6fd751 gint -> gboolean.
zas_
parents: 1437
diff changeset
645 gboolean thumb_loader_std_start(ThumbLoaderStd *tl, FileData *fd)
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
646 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
647 static gchar *thumb_cache = NULL;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
648 struct stat st;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
649
838
9bd49e725ad3 use FileData in thumb_loader
nadvornik
parents: 827
diff changeset
650 if (!tl || !fd) return FALSE;
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
651
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
652 thumb_loader_std_reset(tl);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
653
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
654
838
9bd49e725ad3 use FileData in thumb_loader
nadvornik
parents: 827
diff changeset
655 tl->fd = file_data_ref(fd);
972
2ea1059a6091 set fallback pixbuf in case of missing file
nadvornik
parents: 881
diff changeset
656 if (!stat_utf8(fd->path, &st))
2ea1059a6091 set fallback pixbuf in case of missing file
nadvornik
parents: 881
diff changeset
657 {
2ea1059a6091 set fallback pixbuf in case of missing file
nadvornik
parents: 881
diff changeset
658 thumb_loader_std_set_fallback(tl);
2ea1059a6091 set fallback pixbuf in case of missing file
nadvornik
parents: 881
diff changeset
659 return FALSE;
2ea1059a6091 set fallback pixbuf in case of missing file
nadvornik
parents: 881
diff changeset
660 }
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
661 tl->source_mtime = st.st_mtime;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
662 tl->source_size = st.st_size;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
663 tl->source_mode = st.st_mode;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
664
717
aae956e84de4 Use g_build_filename().
zas_
parents: 716
diff changeset
665 if (!thumb_cache) thumb_cache = g_build_filename(homedir(), THUMB_FOLDER_GLOBAL, NULL);
838
9bd49e725ad3 use FileData in thumb_loader
nadvornik
parents: 827
diff changeset
666 if (strncmp(tl->fd->path, thumb_cache, strlen(thumb_cache)) != 0)
9
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 gchar *pathl;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
669
838
9bd49e725ad3 use FileData in thumb_loader
nadvornik
parents: 827
diff changeset
670 pathl = path_from_utf8(fd->path);
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
671 tl->thumb_uri = g_filename_to_uri(pathl, NULL, NULL);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
672 tl->local_uri = filename_from_path(tl->thumb_uri);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
673 g_free(pathl);
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 (tl->cache_enable)
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 gint found;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
679
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
680 tl->thumb_path = thumb_loader_std_cache_path(tl, FALSE, NULL, FALSE);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
681 tl->thumb_path_local = FALSE;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
682
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
683 found = isfile(tl->thumb_path);
1009
dd311dae857a fixed thumbnail loader for the new raw preview interface
nadvornik
parents: 972
diff changeset
684 if (found && thumb_loader_std_setup_path(tl, tl->thumb_path)) return TRUE;
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
685
876
2d8705f33da5 set fallback thumbnail pixbuf only if the loading really fails
nadvornik
parents: 864
diff changeset
686 if (thumb_loader_std_fail_check(tl) ||
2d8705f33da5 set fallback thumbnail pixbuf only if the loading really fails
nadvornik
parents: 864
diff changeset
687 !thumb_loader_std_next_source(tl, found))
2d8705f33da5 set fallback thumbnail pixbuf only if the loading really fails
nadvornik
parents: 864
diff changeset
688 {
2d8705f33da5 set fallback thumbnail pixbuf only if the loading really fails
nadvornik
parents: 864
diff changeset
689 thumb_loader_std_set_fallback(tl);
2d8705f33da5 set fallback thumbnail pixbuf only if the loading really fails
nadvornik
parents: 864
diff changeset
690 return FALSE;
2d8705f33da5 set fallback thumbnail pixbuf only if the loading really fails
nadvornik
parents: 864
diff changeset
691 }
2d8705f33da5 set fallback thumbnail pixbuf only if the loading really fails
nadvornik
parents: 864
diff changeset
692 return TRUE;
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
693 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
694
1009
dd311dae857a fixed thumbnail loader for the new raw preview interface
nadvornik
parents: 972
diff changeset
695 if (!thumb_loader_std_setup(tl, tl->fd))
9
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 thumb_loader_std_save(tl, NULL);
876
2d8705f33da5 set fallback thumbnail pixbuf only if the loading really fails
nadvornik
parents: 864
diff changeset
698 thumb_loader_std_set_fallback(tl);
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
699 return FALSE;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
700 }
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 return TRUE;
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
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
705 void thumb_loader_std_free(ThumbLoaderStd *tl)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
706 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
707 if (!tl) return;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
708
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
709 thumb_loader_std_reset(tl);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
710 g_free(tl);
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
864
f40509d56fe3 added pixbuf_fallback function
nadvornik
parents: 845
diff changeset
713 GdkPixbuf *thumb_loader_std_get_pixbuf(ThumbLoaderStd *tl)
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
714 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
715 GdkPixbuf *pixbuf;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
716
845
06929cbcd796 renamed fd->pixbuf to fd->thumb_pixbuf
nadvornik
parents: 844
diff changeset
717 if (tl && tl->fd && tl->fd->thumb_pixbuf)
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
718 {
845
06929cbcd796 renamed fd->pixbuf to fd->thumb_pixbuf
nadvornik
parents: 844
diff changeset
719 pixbuf = tl->fd->thumb_pixbuf;
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
720 g_object_ref(pixbuf);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
721 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
722 else
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
723 {
864
f40509d56fe3 added pixbuf_fallback function
nadvornik
parents: 845
diff changeset
724 pixbuf = pixbuf_fallback(NULL, tl->requested_width, tl->requested_height);
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
725 }
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 return pixbuf;
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
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
731 typedef struct _ThumbValidate ThumbValidate;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
732 struct _ThumbValidate
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 ThumbLoaderStd *tl;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
735 gchar *path;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
736 gint days;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
737
1446
a6f9ba6fd751 gint -> gboolean.
zas_
parents: 1437
diff changeset
738 void (*func_valid)(const gchar *path, gboolean valid, gpointer data);
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
739 gpointer data;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
740
1523
24a12aa0cb54 Fix up event source ids type: gint -> guint.
zas_
parents: 1521
diff changeset
741 guint idle_id; /* event source id */
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
742 };
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 static void thumb_loader_std_thumb_file_validate_free(ThumbValidate *tv)
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 thumb_loader_std_free(tv->tl);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
747 g_free(tv->path);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
748 g_free(tv);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
749 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
750
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
751 void thumb_loader_std_thumb_file_validate_cancel(ThumbLoaderStd *tl)
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 ThumbValidate *tv;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
754
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
755 if (!tl) return;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
756
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
757 tv = tl->data;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
758
1523
24a12aa0cb54 Fix up event source ids type: gint -> guint.
zas_
parents: 1521
diff changeset
759 if (tv->idle_id)
24a12aa0cb54 Fix up event source ids type: gint -> guint.
zas_
parents: 1521
diff changeset
760 {
24a12aa0cb54 Fix up event source ids type: gint -> guint.
zas_
parents: 1521
diff changeset
761 g_source_remove(tv->idle_id);
24a12aa0cb54 Fix up event source ids type: gint -> guint.
zas_
parents: 1521
diff changeset
762 tv->idle_id = 0;
24a12aa0cb54 Fix up event source ids type: gint -> guint.
zas_
parents: 1521
diff changeset
763 }
9
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
1446
a6f9ba6fd751 gint -> gboolean.
zas_
parents: 1437
diff changeset
768 static void thumb_loader_std_thumb_file_validate_finish(ThumbValidate *tv, gboolean valid)
9
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;
1437
a3d3208b0c50 gint -> gboolean.
zas_
parents: 1365
diff changeset
779 gboolean valid = FALSE;
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
780
864
f40509d56fe3 added pixbuf_fallback function
nadvornik
parents: 845
diff changeset
781 /* this function is called on success, so the pixbuf should not be a fallback*/
f40509d56fe3 added pixbuf_fallback function
nadvornik
parents: 845
diff changeset
782 pixbuf = thumb_loader_std_get_pixbuf(tv->tl);
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
783 if (pixbuf)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
784 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
785 const gchar *uri;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
786 const gchar *mtime_str;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
787
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
788 uri = gdk_pixbuf_get_option(pixbuf, THUMB_MARKER_URI);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
789 mtime_str = gdk_pixbuf_get_option(pixbuf, THUMB_MARKER_MTIME);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
790 if (uri && mtime_str)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
791 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
792 if (strncmp(uri, "file:", strlen("file:")) == 0)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
793 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
794 struct stat st;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
795 gchar *target;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
796
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
797 target = g_filename_from_uri(uri, NULL, NULL);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
798 if (stat(target, &st) == 0 &&
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
799 st.st_mtime == strtol(mtime_str, NULL, 10))
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
800 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
801 valid = TRUE;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
802 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
803 g_free(target);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
804 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
805 else
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
806 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
807 struct stat st;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
808
506
fc9c8a3e1a8b Handle the newline in DEBUG_N() macro instead of adding one
zas_
parents: 495
diff changeset
809 DEBUG_1("thumb uri foreign, doing day check: %s", uri);
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
810
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
811 if (stat_utf8(tv->path, &st))
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
812 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
813 time_t now;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
814
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
815 now = time(NULL);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
816 if (st.st_atime >= now - (time_t)tv->days * 24 * 60 * 60)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
817 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
818 valid = TRUE;
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
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
824 g_object_unref(pixbuf);
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
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
827 thumb_loader_std_thumb_file_validate_finish(tv, valid);
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
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
830 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
831 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
832 ThumbValidate *tv = data;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
833
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
834 thumb_loader_std_thumb_file_validate_finish(tv, FALSE);
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
1446
a6f9ba6fd751 gint -> gboolean.
zas_
parents: 1437
diff changeset
837 static gboolean thumb_loader_std_thumb_file_validate_idle_cb(gpointer data)
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
838 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
839 ThumbValidate *tv = data;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
840
1523
24a12aa0cb54 Fix up event source ids type: gint -> guint.
zas_
parents: 1521
diff changeset
841 tv->idle_id = 0;
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
842 thumb_loader_std_thumb_file_validate_finish(tv, FALSE);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
843
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
844 return FALSE;
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
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
847 ThumbLoaderStd *thumb_loader_std_thumb_file_validate(const gchar *thumb_path, gint allowed_days,
1446
a6f9ba6fd751 gint -> gboolean.
zas_
parents: 1437
diff changeset
848 void (*func_valid)(const gchar *path, gboolean valid, gpointer data),
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
849 gpointer data)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
850 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
851 ThumbValidate *tv;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
852
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
853 tv = g_new0(ThumbValidate, 1);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
854
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
855 tv->tl = thumb_loader_std_new(THUMB_SIZE_LARGE, THUMB_SIZE_LARGE);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
856 thumb_loader_std_set_callbacks(tv->tl,
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
857 thumb_loader_std_thumb_file_validate_done_cb,
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
858 thumb_loader_std_thumb_file_validate_error_cb,
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
859 NULL,
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
860 tv);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
861 thumb_loader_std_reset(tv->tl);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
862
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
863 tv->path = g_strdup(thumb_path);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
864 tv->days = allowed_days;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
865 tv->func_valid = func_valid;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
866 tv->data = data;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
867
1009
dd311dae857a fixed thumbnail loader for the new raw preview interface
nadvornik
parents: 972
diff changeset
868 if (!thumb_loader_std_setup_path(tv->tl, thumb_path))
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
869 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
870 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
871 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
872 else
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
873 {
1523
24a12aa0cb54 Fix up event source ids type: gint -> guint.
zas_
parents: 1521
diff changeset
874 tv->idle_id = 0;
9
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
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
877 return tv->tl;
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
1446
a6f9ba6fd751 gint -> gboolean.
zas_
parents: 1437
diff changeset
880 static void thumb_std_maint_remove_one(const gchar *source, const gchar *uri, gboolean local,
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
881 const gchar *subfolder)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
882 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
883 gchar *thumb_path;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
884
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
885 thumb_path = thumb_std_cache_path(source,
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
886 (local) ? filename_from_path(uri) : uri,
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
887 local, subfolder);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
888 if (isfile(thumb_path))
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
889 {
506
fc9c8a3e1a8b Handle the newline in DEBUG_N() macro instead of adding one
zas_
parents: 495
diff changeset
890 DEBUG_1("thumb removing: %s", thumb_path);
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
891 unlink_file(thumb_path);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
892 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
893 g_free(thumb_path);
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
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
896 /* 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
897 void thumb_std_maint_removed(const gchar *source)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
898 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
899 gchar *uri;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
900 gchar *sourcel;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
901
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
902 sourcel = path_from_utf8(source);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
903 uri = g_filename_to_uri(sourcel, NULL, NULL);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
904 g_free(sourcel);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
905
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
906 /* all this to remove a thumbnail? */
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
907
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
908 thumb_std_maint_remove_one(source, uri, FALSE, THUMB_FOLDER_NORMAL);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
909 thumb_std_maint_remove_one(source, uri, FALSE, THUMB_FOLDER_LARGE);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
910 thumb_std_maint_remove_one(source, uri, FALSE, THUMB_FOLDER_FAIL);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
911 thumb_std_maint_remove_one(source, uri, TRUE, THUMB_FOLDER_NORMAL);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
912 thumb_std_maint_remove_one(source, uri, TRUE, THUMB_FOLDER_LARGE);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
913
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
914 g_free(uri);
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
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
917 typedef struct _TMaintMove TMaintMove;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
918 struct _TMaintMove
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
919 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
920 gchar *source;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
921 gchar *dest;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
922
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
923 ThumbLoaderStd *tl;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
924 gchar *source_uri;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
925 gchar *thumb_path;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
926
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
927 gint pass;
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
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
930 static GList *thumb_std_maint_move_list = NULL;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
931 static GList *thumb_std_maint_move_tail = NULL;
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
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
934 static void thumb_std_maint_move_step(TMaintMove *tm);
1446
a6f9ba6fd751 gint -> gboolean.
zas_
parents: 1437
diff changeset
935 static gboolean thumb_std_maint_move_idle(gpointer data);
9
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
1446
a6f9ba6fd751 gint -> gboolean.
zas_
parents: 1437
diff changeset
938 static void thumb_std_maint_move_validate_cb(const gchar *path, gboolean valid, gpointer data)
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
939 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
940 TMaintMove *tm = data;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
941 GdkPixbuf *pixbuf;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
942
864
f40509d56fe3 added pixbuf_fallback function
nadvornik
parents: 845
diff changeset
943 /* this function is called on success, so the pixbuf should not be a fallback*/
f40509d56fe3 added pixbuf_fallback function
nadvornik
parents: 845
diff changeset
944 pixbuf = thumb_loader_std_get_pixbuf(tm->tl);
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
945 if (pixbuf)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
946 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
947 const gchar *uri;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
948 const gchar *mtime_str;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
949
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
950 uri = gdk_pixbuf_get_option(pixbuf, THUMB_MARKER_URI);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
951 mtime_str = gdk_pixbuf_get_option(pixbuf, THUMB_MARKER_MTIME);
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 if (uri && mtime_str && strcmp(uri, tm->source_uri) == 0)
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 gchar *pathl;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
956
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
957 /* The validation utility abuses ThumbLoader, and we
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
958 * abuse the utility just to load the thumbnail,
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
959 * but the loader needs to look sane for the save to complete.
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
960 */
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
961
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
962 tm->tl->cache_enable = TRUE;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
963 tm->tl->cache_hit = FALSE;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
964 tm->tl->cache_local = FALSE;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
965
838
9bd49e725ad3 use FileData in thumb_loader
nadvornik
parents: 827
diff changeset
966 file_data_unref(tm->tl->fd);
9bd49e725ad3 use FileData in thumb_loader
nadvornik
parents: 827
diff changeset
967 tm->tl->fd = file_data_new_simple(tm->dest);
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
968 tm->tl->source_mtime = strtol(mtime_str, NULL, 10);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
969
838
9bd49e725ad3 use FileData in thumb_loader
nadvornik
parents: 827
diff changeset
970 pathl = path_from_utf8(tm->tl->fd->path);
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
971 g_free(tm->tl->thumb_uri);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
972 tm->tl->thumb_uri = g_filename_to_uri(pathl, NULL, NULL);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
973 tm->tl->local_uri = filename_from_path(tm->tl->thumb_uri);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
974 g_free(pathl);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
975
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
976 g_free(tm->tl->thumb_path);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
977 tm->tl->thumb_path = NULL;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
978 tm->tl->thumb_path_local = FALSE;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
979
506
fc9c8a3e1a8b Handle the newline in DEBUG_N() macro instead of adding one
zas_
parents: 495
diff changeset
980 DEBUG_1("thumb move attempting save:");
9
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 thumb_loader_std_save(tm->tl, pixbuf);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
983 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
984
506
fc9c8a3e1a8b Handle the newline in DEBUG_N() macro instead of adding one
zas_
parents: 495
diff changeset
985 DEBUG_1("thumb move unlink: %s", tm->thumb_path);
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
986 unlink_file(tm->thumb_path);
864
f40509d56fe3 added pixbuf_fallback function
nadvornik
parents: 845
diff changeset
987 g_object_unref(pixbuf);
9
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 thumb_std_maint_move_step(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
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
993 static void thumb_std_maint_move_step(TMaintMove *tm)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
994 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
995 const gchar *folder;
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 tm->pass++;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
998 if (tm->pass > 2)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
999 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1000 g_free(tm->source);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1001 g_free(tm->dest);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1002 g_free(tm->source_uri);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1003 g_free(tm->thumb_path);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1004 g_free(tm);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1005
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1006 if (thumb_std_maint_move_list)
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 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
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 return;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1012 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1013
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1014 folder = (tm->pass == 1) ? THUMB_FOLDER_NORMAL : THUMB_FOLDER_LARGE;
442
4b2d7f9af171 Big whitespaces cleanup:
zas_
parents: 436
diff changeset
1015
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1016 g_free(tm->thumb_path);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1017 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
1018 tm->tl = thumb_loader_std_thumb_file_validate(tm->thumb_path, 0,
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1019 thumb_std_maint_move_validate_cb, tm);
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
1446
a6f9ba6fd751 gint -> gboolean.
zas_
parents: 1437
diff changeset
1022 static gboolean thumb_std_maint_move_idle(gpointer data)
9
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 TMaintMove *tm;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1025 gchar *pathl;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1026
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1027 if (!thumb_std_maint_move_list) return FALSE;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1028
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1029 tm = thumb_std_maint_move_list->data;
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 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
1032 if (!thumb_std_maint_move_list) thumb_std_maint_move_tail = NULL;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1033
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1034 pathl = path_from_utf8(tm->source);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1035 tm->source_uri = g_filename_to_uri(pathl, NULL, NULL);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1036 g_free(pathl);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1037
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1038 tm->pass = 0;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1039
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1040 thumb_std_maint_move_step(tm);
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 return FALSE;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1043 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1044
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1045 /* 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
1046 * 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
1047 * moving the thumbnails at the same time because:
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1048 *
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1049 * 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
1050 *
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1051 * The thumbnails are processed when the app is idle. If the app
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1052 * exits early well too bad - they can simply be regenerated from scratch.
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1053 *
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1054 * This does not manage local thumbnails (fixme ?)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1055 */
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1056 void thumb_std_maint_moved(const gchar *source, const gchar *dest)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1057 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1058 TMaintMove *tm;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1059
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1060 tm = g_new0(TMaintMove, 1);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1061 tm->source = g_strdup(source);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1062 tm->dest = g_strdup(dest);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1063
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1064 if (!thumb_std_maint_move_list)
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 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
1067 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1068
827
e5172386f229 Revert patches 759 and 760.
zas_
parents: 717
diff changeset
1069 if (thumb_std_maint_move_tail)
e5172386f229 Revert patches 759 and 760.
zas_
parents: 717
diff changeset
1070 {
e5172386f229 Revert patches 759 and 760.
zas_
parents: 717
diff changeset
1071 thumb_std_maint_move_tail = g_list_append(thumb_std_maint_move_tail, tm);
e5172386f229 Revert patches 759 and 760.
zas_
parents: 717
diff changeset
1072 thumb_std_maint_move_tail = thumb_std_maint_move_tail->next;
e5172386f229 Revert patches 759 and 760.
zas_
parents: 717
diff changeset
1073 }
e5172386f229 Revert patches 759 and 760.
zas_
parents: 717
diff changeset
1074 else
e5172386f229 Revert patches 759 and 760.
zas_
parents: 717
diff changeset
1075 {
e5172386f229 Revert patches 759 and 760.
zas_
parents: 717
diff changeset
1076 thumb_std_maint_move_list = g_list_append(thumb_std_maint_move_list, tm);
e5172386f229 Revert patches 759 and 760.
zas_
parents: 717
diff changeset
1077 thumb_std_maint_move_tail = thumb_std_maint_move_list;
e5172386f229 Revert patches 759 and 760.
zas_
parents: 717
diff changeset
1078 }
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1079 }
1055
1646720364cf Adding a vim modeline to all files - patch by Klaus Ethgen
nadvornik
parents: 1036
diff changeset
1080 /* vim: set shiftwidth=8 softtabstop=0 cindent cinoptions={1s: */