summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorTomas Bzatek <tbzatek@users.sourceforge.net>2009-09-23 10:10:12 +0200
committerTomas Bzatek <tbzatek@users.sourceforge.net>2009-09-23 10:10:12 +0200
commitbf19313cd64fb6ac21004a06586f90fd3765293b (patch)
tree34d4bf1755ae1de2bf7454149305ec657dc7d151 /src
parentdbd6c19704aae916ad948861ae0b83cafa479810 (diff)
downloadcataract-bf19313cd64fb6ac21004a06586f90fd3765293b.tar.xz
Generate source image and thumbnail paths on demand
Another step to get rid of writes to unlocked objects during threading.
Diffstat (limited to 'src')
-rw-r--r--src/generators.c90
-rw-r--r--src/items.h2
2 files changed, 68 insertions, 24 deletions
diff --git a/src/generators.c b/src/generators.c
index 0db1b76..f53b826 100644
--- a/src/generators.c
+++ b/src/generators.c
@@ -36,6 +36,7 @@
+/* Returns newly allocated string */
static gchar *
make_thumbnail_string (TGallerySetup *setup, unsigned int item_index, const gchar *imgname)
{
@@ -51,6 +52,53 @@ make_thumbnail_string (TGallerySetup *setup, unsigned int item_index, const gcha
return s;
}
+/* Get full image source path */
+/* Returns newly allocated string */
+static gchar *
+item_get_img_src (TGallerySetup *setup, TAlbum *items, TIndexItem *item)
+{
+ if (items->type == GALLERY_TYPE_INDEX) {
+ if (item->thumbnail == NULL || strlen (item->thumbnail) == 0)
+ return NULL;
+ return g_path_get_basename (item->thumbnail);
+ }
+ else
+ if (items->type == GALLERY_TYPE_ALBUM) {
+ return g_path_get_basename ((item->path == NULL && item->preview) ? item->preview : item->path);
+ }
+ g_assert_not_reached ();
+ return NULL;
+}
+
+/* Get full thumbnail source path */
+/* Returns newly allocated string */
+static gchar *
+item_get_thumbnail_src (TGallerySetup *setup, TAlbum *items, TIndexItem *item, unsigned int item_index)
+{
+ gchar *s1, *ret;
+ const gchar *gen_img_src;
+
+ if (items->type == GALLERY_TYPE_INDEX) {
+ if (item->thumbnail == NULL || strlen (item->thumbnail) == 0)
+ return NULL;
+ s1 = g_path_get_basename (item->thumbnail);
+ ret = make_thumbnail_string (setup, item_index, s1);
+ g_free (s1);
+ return ret;
+ }
+ else
+ if (items->type == GALLERY_TYPE_ALBUM) {
+ gen_img_src = (item->path == NULL && item->preview) ? item->preview : item->path;
+ s1 = g_path_get_basename ((item->thumbnail) ? item->thumbnail : gen_img_src);
+ ret = make_thumbnail_string (setup, item_index, s1);
+ g_free (s1);
+ return ret;
+ }
+ g_assert_not_reached ();
+ return NULL;
+}
+
+
/*
* generate_image: generate needed image sizes
@@ -76,8 +124,6 @@ generate_image (TGallerySetup *setup,
gboolean res;
- item->gen_img_src = NULL;
- item->gen_thumb = NULL;
thumb_src_full = NULL;
img_src_full = NULL;
orig_dst = NULL;
@@ -87,32 +133,28 @@ generate_image (TGallerySetup *setup,
return FALSE;
img_src_full = g_strconcat (items->base_dir, "/", item->thumbnail, NULL);
thumb_src_full = g_strconcat (items->base_dir, "/", item->thumbnail, NULL);
- item->gen_img_src = g_path_get_basename (item->thumbnail);
- s1 = g_path_get_basename (item->thumbnail);
- item->gen_thumb = make_thumbnail_string (setup, item_index, s1);
- g_free (s1);
}
else
if (items->type == GALLERY_TYPE_ALBUM) {
- item->gen_img_src = (item->path == NULL && item->preview) ? item->preview : item->path;
- item->gen_thumb = (item->thumbnail) ? item->thumbnail : item->gen_img_src;
- img_src_full = g_strconcat (items->base_dir, "/", item->gen_img_src, NULL);
- thumb_src_full = g_strconcat (items->base_dir, "/", item->gen_thumb, NULL);
- item->gen_img_src = g_path_get_basename (item->gen_img_src);
- s1 = g_path_get_basename (item->gen_thumb);
- item->gen_thumb = make_thumbnail_string (setup, item_index, s1);
- g_free (s1);
+ s1 = (item->path == NULL && item->preview) ? item->preview : item->path;
+ thumb_src_full = (item->thumbnail) ? item->thumbnail : s1;
+ img_src_full = g_strconcat (items->base_dir, "/", s1, NULL);
+ thumb_src_full = g_strconcat (items->base_dir, "/", thumb_src_full, NULL);
}
/* Make paths */
- thumb_dst = g_strconcat (dst_dir, "/", setup->thumbnail_dir, "/", item->gen_thumb, NULL);
- big_dst = g_strconcat (dst_dir, "/", setup->img_big_dir, "/", item->gen_img_src, NULL);
+ s1 = item_get_thumbnail_src (setup, items, item, item_index);
+ thumb_dst = g_strconcat (dst_dir, "/", setup->thumbnail_dir, "/", s1, NULL);
+ g_free (s1);
+ s1 = item_get_img_src (setup, items, item);
+ big_dst = g_strconcat (dst_dir, "/", setup->img_big_dir, "/", s1, NULL);
if (item->force_fullsize || (items->fullsize && ! item->force_nofullsize) ||
(! item->force_nofullsize && ! items->nofullsize && ! setup->nofullsize))
- orig_dst = g_strconcat (dst_dir, "/", setup->img_orig_dir, "/", item->gen_img_src, NULL);
+ orig_dst = g_strconcat (dst_dir, "/", setup->img_orig_dir, "/", s1, NULL);
res = (! update_when_necessary) || needs_update (thumb_src_full, thumb_dst) ||
(items->type == GALLERY_TYPE_ALBUM && (needs_update (img_src_full, big_dst) || (orig_dst && needs_update (img_src_full, orig_dst))));
-
+ g_free (s1);
+
/* Do something when necessary */
if (res) {
get_image_sizes (img_src_full, &new_w, &new_h);
@@ -405,13 +447,17 @@ write_html_album (TGallerySetup *setup,
if (! item->hidden) {
s1 = block_parser_get_data (block_parser, item->gen_portrait ? "IMG_LIST_PORTRAIT" : "IMG_LIST_LANDSCAPE");
replace_table_add_key_printf (local_replace_table, "ALBUM_SUBPATH", "%s/%s", item->path, setup->index_file_name);
- replace_table_add_key_printf (local_replace_table, "IMG_SUBPAGE", "%s%s", item->gen_img_src, GET_EXT (setup->index_file_name));
+ s3 = item_get_img_src (setup, items, item);
+ replace_table_add_key_printf (local_replace_table, "IMG_SUBPAGE", "%s%s", s3, GET_EXT (setup->index_file_name));
+ replace_table_add_key (local_replace_table, "IMG_FILENAME", s3);
+ g_free (s3);
+ s3 = item_get_thumbnail_src (setup, items, item, i);
+ if (s3 != NULL)
+ replace_table_add_key_printf (local_replace_table, "IMG_THUMBNAIL", "%s/%s", setup->thumbnail_dir, s3);
+ g_free (s3);
replace_table_add_key (local_replace_table, "IMG_TITLE", item->title);
replace_table_add_key (local_replace_table, "IMG_DESCRIPTION", item->title_description);
replace_table_add_key_printf (local_replace_table, "IMG_LIST_ID", "i%d", i + 1);
- if (item->gen_thumb != NULL)
- replace_table_add_key_printf (local_replace_table, "IMG_THUMBNAIL", "%s/%s", setup->thumbnail_dir, item->gen_thumb);
- replace_table_add_key (local_replace_table, "IMG_FILENAME", item->gen_img_src);
if (items->type == GALLERY_TYPE_INDEX) {
s3 = g_strconcat (items->base_dir, "/", item->path, "/index.xml", NULL);
replace_table_add_key_int (local_replace_table, "ALBUM_NUM_ITEMS", get_album_objects_count (s3));
diff --git a/src/items.h b/src/items.h
index c61863b..de71a71 100644
--- a/src/items.h
+++ b/src/items.h
@@ -73,8 +73,6 @@ typedef struct {
gboolean hidden;
/* generated item info */
- gchar *gen_img_src;
- gchar *gen_thumb;
gboolean gen_portrait;
} TIndexItem;