diff options
| -rw-r--r-- | src/generators.c | 37 |
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); |
