From 28b31f6d427056c5629c7b2af97503f67079ec09 Mon Sep 17 00:00:00 2001 From: Tomas Bzatek Date: Sun, 11 Jan 2015 18:42:24 +0100 Subject: generators: Allow undefined album image and thumbnail sizes There may be certain cases where images or thumbnails on album pages are not needed and textual representation is just fine. Metadata pulled from the source image files are still processed and exposed. --- src/generators.c | 153 ++++++++++++++++++++++++++++--------------------------- 1 file changed, 77 insertions(+), 76 deletions(-) diff --git a/src/generators.c b/src/generators.c index f627839..cc1cc0a 100644 --- a/src/generators.c +++ b/src/generators.c @@ -758,7 +758,8 @@ process_img_item (TGallerySetup *setup, GHashTable *defines, TImageSize *image_size, TImageSize *thumb_image_size, - ExifData *exif) + ExifData *exif, + gboolean list_mode) { unsigned long img_w, img_h; unsigned long img_orig_w, img_orig_h; @@ -773,53 +774,53 @@ process_img_item (TGallerySetup *setup, gchar *title, *title_desc; TImageSize *orig_image_size; - /* FIXME: checking for image sizes essentially means thumbnails are always generated even though some pages would be fine with just textual item listing */ - - /* Index stuff */ - album_protected = FALSE; - if (items->type == GALLERY_TYPE_INDEX) { - album_objects_count = 0; - s1 = g_build_filename (path_info->src_dir, item->path, "index.xml", NULL); - /* FIXME: doing additional I/O, port to global item tree */ - get_album_info (s1, &album_objects_count, &album_protected); - g_free (s1); - replace_table_add_key_int (replace_table, "ALBUM_NUM_ITEMS", album_objects_count); - replace_table_add_key_printf (replace_table, "ALBUM_SUBPATH", "%s/%s", item->path, get_index_filename (items, theme, path_info, item)); - if (album_protected && theme->index_protected_thumbnail != NULL) - g_hash_table_replace (defines, g_strdup ("IS_PROTECTED"), g_strdup ("")); - } - - /* Thumbnail stuff */ - if (thumb_image_size != NULL) { - if (album_protected && theme->index_protected_thumbnail != NULL) { - s1 = setup->supplemental_files_use_common_root ? make_string ("../", get_root_level (items)) : g_strdup (""); - /* expecting both global and theme supplemental files are in place at this moment */ - s2 = g_build_filename (path_info->dest_dir, s1, theme->index_protected_thumbnail, NULL); - s3 = g_strconcat (s1, theme->index_protected_thumbnail, NULL); + if (list_mode) { + /* Index stuff */ + album_protected = FALSE; + if (items->type == GALLERY_TYPE_INDEX) { + album_objects_count = 0; + s1 = g_build_filename (path_info->src_dir, item->path, "index.xml", NULL); + /* FIXME: doing additional I/O, port to global item tree */ + get_album_info (s1, &album_objects_count, &album_protected); g_free (s1); + replace_table_add_key_int (replace_table, "ALBUM_NUM_ITEMS", album_objects_count); + replace_table_add_key_printf (replace_table, "ALBUM_SUBPATH", "%s/%s", item->path, get_index_filename (items, theme, path_info, item)); + if (album_protected && theme->index_protected_thumbnail != NULL) + g_hash_table_replace (defines, g_strdup ("IS_PROTECTED"), g_strdup ("")); } - else { - get_image_paths (setup, items, item, path_info, thumb_image_size, NULL, &s2, &s3); - } - img_thumb_w = img_thumb_h = 0; - if (s2 != NULL) - get_image_sizes (s2, &img_thumb_w, &img_thumb_h, setup->autorotate); + /* Thumbnail stuff */ + if (thumb_image_size != NULL) { + if (album_protected && theme->index_protected_thumbnail != NULL) { + s1 = setup->supplemental_files_use_common_root ? make_string ("../", get_root_level (items)) : g_strdup (""); + /* expecting both global and theme supplemental files are in place at this moment */ + s2 = g_build_filename (path_info->dest_dir, s1, theme->index_protected_thumbnail, NULL); + s3 = g_strconcat (s1, theme->index_protected_thumbnail, NULL); + g_free (s1); + } + else { + get_image_paths (setup, items, item, path_info, thumb_image_size, NULL, &s2, &s3); + } + + img_thumb_w = img_thumb_h = 0; + if (s2 != NULL) + get_image_sizes (s2, &img_thumb_w, &img_thumb_h, setup->autorotate); - if (img_thumb_w == img_thumb_h) - replace_table_add_key (replace_table, "THUMB_ORIENTATION", "squared"); - else - replace_table_add_key (replace_table, "THUMB_ORIENTATION", (img_thumb_h > img_thumb_w) ? "portrait" : "landscape"); + if (img_thumb_w == img_thumb_h) + replace_table_add_key (replace_table, "THUMB_ORIENTATION", "squared"); + else + replace_table_add_key (replace_table, "THUMB_ORIENTATION", (img_thumb_h > img_thumb_w) ? "portrait" : "landscape"); - if (s3 != NULL) { - replace_table_add_key (replace_table, "IMG_SRC_THUMB", s3); - if (img_thumb_w > 0 && img_thumb_h > 0) { - replace_table_add_key_int (replace_table, "IMG_SIZE_THUMB_W", img_thumb_w); - replace_table_add_key_int (replace_table, "IMG_SIZE_THUMB_H", img_thumb_h); + if (s3 != NULL) { + replace_table_add_key (replace_table, "IMG_SRC_THUMB", s3); + if (img_thumb_w > 0 && img_thumb_h > 0) { + replace_table_add_key_int (replace_table, "IMG_SIZE_THUMB_W", img_thumb_w); + replace_table_add_key_int (replace_table, "IMG_SIZE_THUMB_H", img_thumb_h); + } } + g_free (s2); + g_free (s3); } - g_free (s2); - g_free (s3); s1 = GET_ITEM_TARGET_FILENAME (item); replace_table_add_key_printf (replace_table, "IMG_SUBPAGE", theme->picture_filename, s1); @@ -857,43 +858,43 @@ process_img_item (TGallerySetup *setup, g_free (img_orig_dst_page); } - /* Get title and description from IPTC/EXIF/JPEG if not defined */ - get_item_titles (setup, item, exif, &title, &title_desc); - replace_table_add_key (replace_table, "IMG_TITLE", title); - replace_table_add_key (replace_table, "IMG_DESCRIPTION", title_desc); - - /* Page title */ - s1 = (title && strlen (title) > 0) ? g_strdup_printf ("%s | ", title) : NULL; - s2 = g_strdup_printf ("%s [%d/%d]", items->title ? items->title : items->ID, get_display_item_index (items, item), get_display_item_count (items)); - s3 = setup->site_title ? g_strdup_printf (" | %s", setup->site_title) : NULL; - s4 = g_strconcat (s1 ? s1 : "", s2, s3 ? s3 : "", NULL); - replace_table_add_key (replace_table, "PAGE_TITLE", s4); - g_free (s1); - g_free (s2); - g_free (s3); - g_free (s4); - - g_free (title); - g_free (title_desc); - - /* EXIF callbacks - all do handle NULL value pointer */ - replace_table_register_function (replace_table, "get_exif_value", get_exif_value_cb, exif); - replace_table_register_function (replace_table, "get_exif_value_fixed", get_exif_value_fixed_cb, exif); - block_parser_register_function (block_parser, "has_exif_key", has_exif_key_cb, exif); - if (exif != NULL && exif_has_key (exif, EXIF_APERTURE) && - exif_has_key (exif, EXIF_FOCAL_LENGTH) && - exif_has_key (exif, EXIF_EXPOSURE)) - g_hash_table_replace (defines, g_strdup ("HAS_EXIF"), g_strdup ("")); - - /* Border style */ - s1 = get_prop_string (items, item, PROP_BORDER_STYLE, NULL); - if (s1) - g_hash_table_replace (defines, g_strdup ("BORDER_STYLE"), s1); - g_free (img_dst); g_free (img_dst_page); } + /* Get title and description from IPTC/EXIF/JPEG if not defined */ + get_item_titles (setup, item, exif, &title, &title_desc); + replace_table_add_key (replace_table, "IMG_TITLE", title); + replace_table_add_key (replace_table, "IMG_DESCRIPTION", title_desc); + + /* Page title */ + s1 = (title && strlen (title) > 0) ? g_strdup_printf ("%s | ", title) : NULL; + s2 = g_strdup_printf ("%s [%d/%d]", items->title ? items->title : items->ID, get_display_item_index (items, item), get_display_item_count (items)); + s3 = setup->site_title ? g_strdup_printf (" | %s", setup->site_title) : NULL; + s4 = g_strconcat (s1 ? s1 : "", s2, s3 ? s3 : "", NULL); + replace_table_add_key (replace_table, "PAGE_TITLE", s4); + g_free (s1); + g_free (s2); + g_free (s3); + g_free (s4); + + g_free (title); + g_free (title_desc); + + /* EXIF callbacks - all do handle NULL value pointer */ + replace_table_register_function (replace_table, "get_exif_value", get_exif_value_cb, exif); + replace_table_register_function (replace_table, "get_exif_value_fixed", get_exif_value_fixed_cb, exif); + block_parser_register_function (block_parser, "has_exif_key", has_exif_key_cb, exif); + if (exif != NULL && exif_has_key (exif, EXIF_APERTURE) && + exif_has_key (exif, EXIF_FOCAL_LENGTH) && + exif_has_key (exif, EXIF_EXPOSURE)) + g_hash_table_replace (defines, g_strdup ("HAS_EXIF"), g_strdup ("")); + + /* Border style */ + s1 = get_prop_string (items, item, PROP_BORDER_STYLE, NULL); + if (s1) + g_hash_table_replace (defines, g_strdup ("BORDER_STYLE"), s1); + /* Common tags */ replace_table_add_key_printf (replace_table, "IMG_POS_MARKER", POSITION_MARKER_FMT, get_item_index (items, item)); replace_table_add_key_int (replace_table, "ITEM_INDEX", get_display_item_index (items, item)); @@ -1055,7 +1056,7 @@ write_html_page (TGallerySetup *setup, s1 = block_parser_get_data (block_parser, "LIST_PICTURE"); if (image_size != NULL) exif = get_img_exif_data (setup, path_info, items, iter_item, image_size); - process_img_item (setup, path_info, theme, items, iter_item, local_block_parser, local_replace_table, local_defines, image_size, thumb_image_size, exif); + process_img_item (setup, path_info, theme, items, iter_item, local_block_parser, local_replace_table, local_defines, image_size, thumb_image_size, exif, TRUE); } break; @@ -1095,7 +1096,7 @@ write_html_page (TGallerySetup *setup, exif = NULL; if (image_size != NULL) exif = get_img_exif_data (setup, path_info, items, item, image_size); - process_img_item (setup, path_info, theme, items, item, local_block_parser, global_replace_table, defines, image_size, thumb_image_size, exif); + process_img_item (setup, path_info, theme, items, item, local_block_parser, global_replace_table, defines, image_size, thumb_image_size, exif, FALSE); s1 = block_parser_get_data (block_parser, "SINGLE_PICTURE"); s2 = process_block (setup, local_block_parser, global_replace_table, defines, s1); replace_table_process (&s2, global_replace_table); -- cgit v1.2.3