From fa871cef365c57f80442a9a02c34ff4bf82ae833 Mon Sep 17 00:00:00 2001 From: Tomas Bzatek Date: Fri, 30 Jan 2015 21:32:29 +0100 Subject: theming: Implement have_album_image_size() block function Similar to the have_image_size() block function this is its variation operating over the album. The block condition is true if there's at least one item in the album of the specified image size. Respects the legacy "nofullsize" tags. Takes one mandatory argument of image size name. --- src/generators.c | 37 +++++++++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) (limited to 'src') 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); -- cgit v1.2.3