summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/generators.c37
1 files changed, 37 insertions, 0 deletions
diff --git a/src/generators.c b/src/generators.c
index 845e5c1..e1b1fdc 100644
--- a/src/generators.c
+++ b/src/generators.c
@@ -369,6 +369,36 @@ have_image_size_cb (gchar **args, gpointer user_data)
return FALSE;
}
+static gboolean
+have_album_image_size_cb (gchar **args, gpointer user_data)
+{
+ struct HaveImageSizeData *data = user_data;
+ gboolean is_original;
+ TIndexItem *iter_item;
+ int i;
+
+ g_return_val_if_fail (g_strv_length (args) != 2, FALSE); /* incl. trailing NULL */
+
+ /* no image size of that name available */
+ if (! lookup_image_size_for_name (data->setup, *args))
+ return FALSE;
+
+ is_original = g_ascii_strcasecmp ("original", *args) == 0;
+
+ for (i = 0; i < data->items->items->len; i++) {
+ iter_item = g_ptr_array_index (data->items->items, i);
+ if (iter_item == NULL || iter_item->type != INDEX_ITEM_TYPE_PICTURE || iter_item->hidden)
+ continue;
+
+ if (! is_original && iter_item->image_sizes && g_hash_table_lookup (iter_item->image_sizes, *args))
+ return TRUE;
+
+ if (is_original && iter_item->path && ! IS_NOFULLSIZE (iter_item, data->items, data->setup))
+ return TRUE;
+ }
+
+ return FALSE;
+}
/*
@@ -976,6 +1006,7 @@ write_html_page (TGallerySetup *setup,
GHashTable *defines;
GHashTable *local_defines;
TImageSize *image_size, *thumb_image_size;
+ struct HaveImageSizeData *img_size_data;
res = TRUE;
@@ -1048,6 +1079,12 @@ write_html_page (TGallerySetup *setup,
thumb_image_size = lookup_image_size_for_name (setup, items->type == GALLERY_TYPE_ALBUM ? theme->album_thumb_size : theme->index_thumb_size);
}
+ /* Album image size availability callback */
+ img_size_data = g_new0 (struct HaveImageSizeData, 1);
+ img_size_data->setup = setup;
+ img_size_data->items = items;
+ block_parser_register_function (block_parser, "have_album_image_size", have_album_image_size_cb, img_size_data, g_free);
+
/* Picture page tags */
if (item != NULL) {
add_next_prev_links (setup, path_info, theme, items, item, global_replace_table, image_size);