diff options
Diffstat (limited to 'src/generators.c')
| -rw-r--r-- | src/generators.c | 97 |
1 files changed, 44 insertions, 53 deletions
diff --git a/src/generators.c b/src/generators.c index a7f94cb..e1bedf9 100644 --- a/src/generators.c +++ b/src/generators.c @@ -190,7 +190,6 @@ get_item_titles (TGallerySetup *setup, *title_desc = g_strstrip (*title_desc); } -/* FIXME: this badly needs port to the new theming system */ static void get_image_paths (TGallerySetup *setup, TAlbum *items, @@ -202,7 +201,6 @@ get_image_paths (TGallerySetup *setup, gchar **page_img_dst) { gboolean nofullsize; - gboolean is_preview; gboolean is_original; gchar *s1, *s2, *s3; gchar *target_image_dir; @@ -214,10 +212,8 @@ get_image_paths (TGallerySetup *setup, *full_img_dst = NULL; if (page_img_dst) *page_img_dst = NULL; - preview_image_size = NULL; nofullsize = IS_NOFULLSIZE (item, items, setup); - is_preview = g_ascii_strcasecmp ("preview", image_size->name) == 0; is_original = g_ascii_strcasecmp ("original", image_size->name) == 0; /* ignore combinations that are not valid */ @@ -226,52 +222,48 @@ get_image_paths (TGallerySetup *setup, (image_size->is_thumbnail && items->type == GALLERY_TYPE_INDEX && (item->thumbnail == NULL || strlen (item->thumbnail) == 0))) return; - /* nofullsize specified, fall back to preview if available */ - if (is_original && nofullsize) - preview_image_size = lookup_image_size_for_name (setup, "preview"); - target_image_dir = g_strdup_printf ("%s%s", TARGET_IMAGE_DIR_PREFIX, preview_image_size ? preview_image_size->name : image_size->name); + s1 = NULL; + if (image_size->is_thumbnail && items->type == GALLERY_TYPE_INDEX) + s1 = item->thumbnail; + if (s1 == NULL && ! is_original && item->image_sizes != NULL) { + s1 = g_hash_table_lookup (item->image_sizes, image_size->name); + } + if (s1 == NULL) + s1 = item->path; + + /* legacy behaviour fallback */ + if (s1 == NULL && item->image_sizes != NULL) + s1 = g_hash_table_lookup (item->image_sizes, "preview"); + if (s1 == NULL) { + log_error ("Unable to find image source for item #%d (\"%s\") for image size \"%s\"\n", get_item_index (items, item), item->title, image_size->name); + return; + } - /* Thumbnail special case */ - if (image_size->is_thumbnail) { - s1 = NULL; - if (items->type == GALLERY_TYPE_INDEX) { - s1 = item->thumbnail; - } else - if (items->type == GALLERY_TYPE_ALBUM) { - s1 = (item->path == NULL && item->preview) ? item->preview : item->path; - s1 = (item->thumbnail) ? item->thumbnail : s1; + if (full_img_src) + *full_img_src = g_build_filename (path_info->src_dir, s1, NULL); + + /* Use preview image for targets but leave original source if nofullsize is defined (legacy behaviour) */ + preview_image_size = NULL; + if (is_original && nofullsize && item->image_sizes != NULL) { + s2 = g_hash_table_lookup (item->image_sizes, "preview"); + if (s2 != NULL) { + s1 = s2; + preview_image_size = lookup_image_size_for_name (setup, "preview"); } - s2 = g_path_get_basename (s1); - if (full_img_src) - *full_img_src = g_build_filename (path_info->src_dir, s1, NULL); - s3 = g_strdup_printf (THUMBNAIL_NAME_FORMAT, get_item_index (items, item), s2); - g_free (s2); - if (full_img_dst) - *full_img_dst = g_build_filename (path_info->dest_dir, target_image_dir, s3, NULL); - if (page_img_dst) - *page_img_dst = g_build_filename (target_image_dir, s3, NULL); - g_free (s3); } + target_image_dir = g_strdup_printf ("%s%s", TARGET_IMAGE_DIR_PREFIX, preview_image_size ? preview_image_size->name : image_size->name); - /* Other image sizes */ - else { - if (is_preview) - s1 = (item->preview) ? item->preview : item->path; - else - s1 = (item->path == NULL && item->preview) ? item->preview : item->path; - if (full_img_src) - *full_img_src = g_build_filename (path_info->src_dir, s1, NULL); - /* Use preview image for targets but leave original source if nofullsize is defined */ - if (is_original && nofullsize) - s1 = (item->preview) ? item->preview : item->path; - s2 = g_path_get_basename (s1); - if (full_img_dst) - *full_img_dst = g_build_filename (path_info->dest_dir, target_image_dir, s2, NULL); - if (page_img_dst) - *page_img_dst = g_build_filename (target_image_dir, s2, NULL); + s2 = g_path_get_basename (s1); + if (image_size->is_thumbnail) { + s3 = g_strdup_printf (THUMBNAIL_NAME_FORMAT, get_item_index (items, item), s2); g_free (s2); + s2 = s3; } - + if (full_img_dst) + *full_img_dst = g_build_filename (path_info->dest_dir, target_image_dir, s2, NULL); + if (page_img_dst) + *page_img_dst = g_build_filename (target_image_dir, s2, NULL); + g_free (s2); g_free (target_image_dir); } @@ -369,9 +361,8 @@ generate_image (TGallerySetup *setup, for (l = g_list_first (setup->design->image_sizes); l; l = g_list_next (l)) { image_size = l->data; - /* TODO: this is too specific */ - is_preview = g_ascii_strcasecmp ("preview", image_size->name) == 0; is_original = g_ascii_strcasecmp ("original", image_size->name) == 0; + is_preview = g_ascii_strcasecmp ("preview", image_size->name) == 0; if (is_original && IS_NOFULLSIZE (item, items, setup)) continue; @@ -392,8 +383,8 @@ generate_image (TGallerySetup *setup, /* Do something when required */ res = res || needs_update (img_src, img_dst); if (! query_update) { - /* Copy the source file */ - if (! image_size->is_thumbnail && image_size->no_resize && ((is_preview && item->preview) || is_original)) { + /* Determine whether to perform file copy or resize */ + if (! image_size->is_thumbnail && image_size->no_resize && (is_original || (item->image_sizes && g_hash_table_lookup (item->image_sizes, image_size->name)))) { if (! copy_file (img_src, img_dst)) log_error (" Error copying image %s to %s\n", img_src, img_dst); } @@ -417,7 +408,7 @@ generate_image (TGallerySetup *setup, } } else { - /* Only the "preview" size is affected by deprecated item and album overrides */ + /* Only the "preview" size is affected by legacy item and album overrides */ if (is_preview) { tmpw = get_prop_int (items, item, PROP_WIDTH, img_w); tmph = get_prop_int (items, item, PROP_HEIGHT, img_h); @@ -669,7 +660,7 @@ add_next_prev_links (TGallerySetup *setup, } if (next_item) { - s = GET_ITEM_TARGET_FILENAME (next_item); + s = get_item_target_filename (next_item); replace_table_add_key_printf (replace_table, "LINK_NEXT", theme->picture_filename, s); g_free (s); } @@ -677,7 +668,7 @@ add_next_prev_links (TGallerySetup *setup, replace_table_add_key (replace_table, "LINK_NEXT", get_index_filename (items, theme, NULL, NULL)); if (previous_item) { - s = GET_ITEM_TARGET_FILENAME (previous_item); + s = get_item_target_filename (previous_item); replace_table_add_key_printf (replace_table, "LINK_PREV", theme->picture_filename, s); g_free (s); } @@ -822,7 +813,7 @@ process_img_item (TGallerySetup *setup, g_free (s3); } - s1 = GET_ITEM_TARGET_FILENAME (item); + s1 = get_item_target_filename (item); replace_table_add_key_printf (replace_table, "IMG_SUBPAGE", theme->picture_filename, s1); replace_table_add_key (replace_table, "IMG_FILENAME", s1); g_free (s1); @@ -1096,7 +1087,7 @@ write_html_page (TGallerySetup *setup, } if (block_parser_has_unused_data (block_parser, "NAV_BAR")) { - s2 = item != NULL ? GET_ITEM_TARGET_FILENAME (item) : NULL; + s2 = item != NULL ? get_item_target_filename (item) : NULL; s1 = make_navbar_string (setup, theme, block_parser, defines, items, item ? get_item_index (items, item) : -1, s2 ? s2 : items->ID); g_free (s2); replace_table_process (&s1, global_replace_table); |
