diff options
| author | Tomas Bzatek <tbzatek@users.sourceforge.net> | 2016-09-17 12:07:40 +0200 |
|---|---|---|
| committer | Tomas Bzatek <tbzatek@users.sourceforge.net> | 2016-09-17 12:07:40 +0200 |
| commit | 923c421b3cbb2d6b55f40595034a12c19fef7c1b (patch) | |
| tree | c907c5189390ba8b38d1c453bb7db44b2c943ed7 | |
| parent | 6a16a08ea3e75a524cb136f4c6ada1e4eef4bfd4 (diff) | |
| download | cataract-923c421b3cbb2d6b55f40595034a12c19fef7c1b.tar.xz | |
Drop legacy nofullsize and album width/height/quality tags
This drops the legacy functionality that doesn't really fit into the
new flexible design concept and makes code unnecessarily complicated.
Most of these overrides affected only the "preview" image size anyway.
This also makes the <item src> attribute mandatory as it's being the only
source of metadata (unless overriden or supplied externally).
This unfortunately breaks the so-far 100% album XML files compatibility.
| -rw-r--r-- | sample/src/CIAF_1/index.xml | 9 | ||||
| -rw-r--r-- | sample/src/entities/index.xml | 4 | ||||
| -rw-r--r-- | sample/src/setup.xml | 6 | ||||
| -rw-r--r-- | src/cgg.c | 3 | ||||
| -rw-r--r-- | src/generators.c | 107 | ||||
| -rw-r--r-- | src/items.c | 40 | ||||
| -rw-r--r-- | src/items.h | 11 | ||||
| -rw-r--r-- | src/setup.c | 14 | ||||
| -rw-r--r-- | src/setup.h | 2 |
9 files changed, 45 insertions, 151 deletions
diff --git a/sample/src/CIAF_1/index.xml b/sample/src/CIAF_1/index.xml index cf53d61..1172b33 100644 --- a/sample/src/CIAF_1/index.xml +++ b/sample/src/CIAF_1/index.xml @@ -14,8 +14,6 @@ ]]> </footnote> - <!-- legacy behaviour: you can override global settings in each album (applies only to the "preview" image size): --> - <images quality="60" landscape_w="640" landscape_h="480" portrait_w="480" portrait_h="640" /> <!-- override global preview image border style --> <border style="border_none" /> @@ -55,11 +53,6 @@ <interspace><![CDATA[This is so-called intespace - simple paragraph or a block with an additional information to the section. This may be used with <separator> but not necessarily, interspace can stand alone between items in the album. Useful for links or few senteces to separated topic.]]></interspace> - <item preview="preview/img_6802d.jpg"> - <title>Photo title</title> - <title_description>This photo doesn't contain link to original image nor the src parameter, EXIF data are extracted from the preview image.</title_description> - </item> - <item> <title>Invalid item</title> <title_description>Invalid item (no src specified), will be skipped.</title_description> @@ -96,7 +89,7 @@ <separator>Misc.</separator> - <item preview="preview/img_6802g.jpg" thumbnail="thumbnails/gallery_thumbnails.gif"> + <item src="preview/img_6802g.jpg" thumbnail="thumbnails/gallery_thumbnails.gif"> <title>Custom thumbnail</title> <title_description>This item uses supplied thumbnail</title_description> </item> diff --git a/sample/src/entities/index.xml b/sample/src/entities/index.xml index 44776ca..6761015 100644 --- a/sample/src/entities/index.xml +++ b/sample/src/entities/index.xml @@ -20,12 +20,12 @@ </general> <items> - <item preview="preview/img_6802.jpg"> + <item src="preview/img_6802.jpg"> <title>Entities → '&' "&copy;"</title> <title_description>Entities → '&' "&copy;"</title_description> </item> - <item preview="preview/img_6802b.jpg"> + <item src="preview/img_6802b.jpg"> <title><![CDATA[Entities → '&' "©" < <b>ahoj!</b> <!-- comment <b>neco</b> -->]]></title> <title_description><![CDATA[Entities → '&' "©" < <b>ahoj!</b> <!-- comment <b>neco</b> -->]]></title_description> </item> diff --git a/sample/src/setup.xml b/sample/src/setup.xml index a67923d..54bfb5b 100644 --- a/sample/src/setup.xml +++ b/sample/src/setup.xml @@ -36,12 +36,6 @@ <!-- (think of source RAW file vs. processed JPEG image differences) --> <write_supplied_exif value="no" /> - <!-- don't copy full size (original) images --> - <!-- <nofullsize/> can be used globally for whole gallery, --> - <!-- for full album or selectively for each image --> - <!-- - override with <fullsize/> for album or for separate image --> -<!-- <nofullsize /> --> - <!-- autorotate input images according to EXIF information, unless --> <!-- provided in the album source file (copy mode) (default = yes) --> <autorotate value="yes" /> @@ -42,7 +42,6 @@ static gchar *source_dir = NULL; static gchar *dst_dir = NULL; static gboolean verbose = FALSE; static gboolean update = FALSE; -static gboolean fullsize = FALSE; static gboolean dont_strip_unused_tags = FALSE; static gboolean warn_resize = FALSE; static int jobs = 0; @@ -68,7 +67,6 @@ parse_cmd (int argc, char *argv[]) #endif "N" }, { "update", 'u', 0, G_OPTION_ARG_NONE, &update, "Update the output structure", NULL }, - { "fullsize", 'f', 0, G_OPTION_ARG_NONE, &fullsize, "Override the nofullsize switch and generate full gallery", NULL }, { "debug-dont-strip-unused-tags", 0, 0, G_OPTION_ARG_NONE, &dont_strip_unused_tags, "Don't strip unused/unknown template tags", NULL }, { "debug-warn-resize", 0, 0, G_OPTION_ARG_NONE, &warn_resize, "Warn when image is being resized", NULL }, { NULL } @@ -217,7 +215,6 @@ main (int argc, char* argv[]) /* Start building the gallery tree */ setup->verbose = verbose; setup->update_mode = update; - setup->override_nofullsize = fullsize; setup->strip_unused_tags = ! dont_strip_unused_tags; setup->warn_resize = warn_resize; diff --git a/src/generators.c b/src/generators.c index 7fad313..b83382a 100644 --- a/src/generators.c +++ b/src/generators.c @@ -37,11 +37,6 @@ #include "generators.h" -#define IS_NOFULLSIZE(item,parent_items,setup) \ - (! item->force_fullsize && ! setup->override_nofullsize && \ - (! parent_items->fullsize || item->force_nofullsize) && \ - (item->force_nofullsize || parent_items->nofullsize || setup->nofullsize)) - #define BUFFER_SIZE 65536 /* line cannot be longer than this */ #define POSITION_MARKER_FMT "i%d" @@ -201,11 +196,8 @@ get_image_paths (TGallerySetup *setup, gchar **full_img_dst, gchar **page_img_dst) { - gboolean nofullsize; - gboolean is_original; gchar *s1, *s2, *s3; gchar *target_image_dir; - TImageSize *src_image_size; if (full_img_src) *full_img_src = NULL; @@ -214,52 +206,28 @@ get_image_paths (TGallerySetup *setup, if (page_img_dst) *page_img_dst = NULL; - nofullsize = IS_NOFULLSIZE (item, items, setup); - is_original = g_ascii_strcasecmp ("original", image_size->name) == 0; - /* ignore combinations that are not valid */ if ((items->type == GALLERY_TYPE_INDEX && ! image_size->is_thumbnail) || (image_size->is_thumbnail && item->hidden) || (image_size->is_thumbnail && items->type == GALLERY_TYPE_INDEX && (item->thumbnail == NULL || strlen (item->thumbnail) == 0))) return; - if (is_original && nofullsize && image_size->fallback_size == NULL) { - log_error ("Requested legacy nofullsize flag but fallback image size not defined.\n"); - return; - } s1 = NULL; if (image_size->is_thumbnail && items->type == GALLERY_TYPE_INDEX) s1 = item->thumbnail; - if (s1 == NULL && ! is_original && item->image_sizes != NULL) + if (s1 == NULL && item->image_sizes != NULL) s1 = g_hash_table_lookup (item->image_sizes, image_size->name); - if (s1 == NULL && is_original && ! nofullsize) - s1 = item->path; - /* go through the fallback */ while (s1 == NULL && image_size->fallback_size != NULL) { image_size = lookup_image_size_for_name (setup, image_size->fallback_size); - is_original = g_ascii_strcasecmp ("original", image_size->name) == 0; - if (is_original) - s1 = nofullsize ? NULL : item->path; - else - s1 = item->image_sizes ? g_hash_table_lookup (item->image_sizes, image_size->name) : NULL; + s1 = item->image_sizes ? g_hash_table_lookup (item->image_sizes, image_size->name) : NULL; } - /* we have reached our target image size, s1 == NULL means the image should be resized from the original size */ - if (s1 == NULL) { - s1 = item->path; /* nofullsize is handled by the fallback */ - if (s1 == NULL) { - /* no original image available, try fallback as a last resort (i.e. preview fallback) */ - src_image_size = lookup_image_size_for_name (setup, "original"); - while (s1 == NULL && src_image_size->fallback_size != NULL) { - src_image_size = lookup_image_size_for_name (setup, src_image_size->fallback_size); - if (item->image_sizes != NULL) - s1 = g_hash_table_lookup (item->image_sizes, src_image_size->name); - } - } - } + /* we have reached our target image size, s1 == NULL means the image should be resized from the source image */ + if (s1 == NULL) + s1 = item->path; 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); @@ -360,7 +328,6 @@ static gboolean have_image_size_cb (gchar **args, gpointer user_data) { struct HaveImageSizeData *data = user_data; - gboolean is_original; g_return_val_if_fail (g_strv_length (args) != 2, FALSE); /* incl. trailing NULL */ @@ -368,17 +335,12 @@ have_image_size_cb (gchar **args, gpointer user_data) if (! lookup_image_size_for_name (data->setup, *args)) return FALSE; - is_original = g_ascii_strcasecmp ("original", *args) == 0; - - /* no custom image sizes defined for the particular item */ - if (! is_original && ! data->item->image_sizes) - return FALSE; - - if (! is_original && data->item->image_sizes && g_hash_table_lookup (data->item->image_sizes, *args)) + if (data->item->image_sizes && g_hash_table_lookup (data->item->image_sizes, *args)) return TRUE; - if (is_original && data->item->path && ! IS_NOFULLSIZE (data->item, data->items, data->setup)) - return TRUE; + /* FIXME: rework this */ +/* if (data->item->path) + return TRUE; */ return FALSE; } @@ -387,7 +349,6 @@ 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; @@ -397,18 +358,17 @@ have_album_image_size_cb (gchar **args, gpointer user_data) 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)) + if (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; + /* FIXME: rework this */ +/* if (iter_item->path) + return TRUE; */ } return FALSE; @@ -426,14 +386,11 @@ generate_image (TGallerySetup *setup, gboolean query_update) { gboolean res; - gboolean is_preview; - gboolean is_original; gchar *img_src; gchar *img_dst; unsigned long img_w, img_h; unsigned long src_img_w, src_img_h; unsigned long tmpw, tmph; - int quality; GList *l; TImageSize *image_size; ExifData *exif_data; @@ -443,14 +400,8 @@ generate_image (TGallerySetup *setup, for (l = g_list_first (setup->design->image_sizes); l; l = g_list_next (l)) { image_size = l->data; - 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) || item->path == NULL)) - continue; - /* fallback mode, don't generate any image and use different image size */ - if (image_size->fallback_size != NULL && ! is_original && (! item->image_sizes || g_hash_table_lookup (item->image_sizes, image_size->name) == NULL)) + if (image_size->fallback_size != NULL && (item->image_sizes == NULL || g_hash_table_lookup (item->image_sizes, image_size->name) == NULL)) continue; get_image_paths (setup, items, item, path_info, image_size, &img_src, &img_dst, NULL); @@ -470,7 +421,7 @@ generate_image (TGallerySetup *setup, res = res || needs_update (img_src, img_dst); if (! query_update) { /* Determine whether to perform file copy or resize */ - if (! image_size->is_thumbnail && image_size->no_resize && ((is_original && item->path) || (item->image_sizes && g_hash_table_lookup (item->image_sizes, image_size->name)))) { + if (! image_size->is_thumbnail && image_size->no_resize && (! item->image_sizes || (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); } @@ -496,40 +447,21 @@ generate_image (TGallerySetup *setup, else { img_w = src_img_w; img_h = src_img_h; - /* 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); - calculate_sizes (tmpw, tmph, &img_w, &img_h); - } /* Calculate sizes */ if (img_w > img_h) { tmpw = image_size->landscape_width; tmph = image_size->landscape_height; - if (is_preview) { - tmpw = get_prop_int (items, item, PROP_LANDSCAPE_W, tmpw); - tmph = get_prop_int (items, item, PROP_LANDSCAPE_H, tmph); - } } else { tmpw = image_size->portrait_width; tmph = image_size->portrait_height; - if (is_preview) { - tmpw = get_prop_int (items, item, PROP_PORTRAIT_W, tmpw); - tmph = get_prop_int (items, item, PROP_PORTRAIT_H, tmph); - } } calculate_sizes (tmpw, tmph, &img_w, &img_h); } - /* Calculate quality */ - if (is_preview) - quality = get_prop_int (items, item, PROP_QUALITY, image_size->quality); - else - quality = image_size->quality; /* Perform resize and strip */ if (setup->warn_resize && ! image_size->is_thumbnail) printf (" Warning: resizing image %s from %lux%lu to %lux%lu\n", img_src, src_img_w, src_img_h, img_w, img_h); - if (! resize_image (img_src, img_dst, img_w, img_h, quality, image_size->is_thumbnail, setup->autorotate, exif_data)) + if (! resize_image (img_src, img_dst, img_w, img_h, image_size->quality, image_size->is_thumbnail, setup->autorotate, exif_data)) log_error (" Error resizing image %s\n", img_src); } else { log_error ("generate_image: image %s sizes are %lux%lu\n", img_src, src_img_w, src_img_h); @@ -932,8 +864,11 @@ process_img_item (TGallerySetup *setup, exif = get_img_exif_data (setup, path_info, items, item, image_size); /* TODO: legacy stuff, subject to removal */ - orig_image_size = lookup_image_size_for_name (setup, "original"); - if (orig_image_size != NULL && img_orig_dst != NULL && ! IS_NOFULLSIZE (item, items, setup)) { + orig_image_size = NULL; + /* Take the last image size from the sorted list */ + if (g_list_length (setup->design->image_sizes) > 0) + orig_image_size = (TImageSize *) g_list_last (setup->design->image_sizes); + if (orig_image_size != NULL) { img_orig_dst = img_orig_dst_page = NULL; get_image_paths (setup, items, item, path_info, orig_image_size, NULL, &img_orig_dst, &img_orig_dst_page); get_image_sizes (img_orig_dst, &img_orig_w, &img_orig_h, setup->autorotate); diff --git a/src/items.c b/src/items.c index acd4373..27ab57e 100644 --- a/src/items.c +++ b/src/items.c @@ -163,12 +163,6 @@ parse_album_xml (TGallerySetup *setup, const gchar *filename, TPathInfo *path_in g_free (s); } - prop_xml_attr_long (index->properties, PROP_QUALITY, xml, "/gallery/general/images", "quality"); - prop_xml_attr_long (index->properties, PROP_LANDSCAPE_W, xml, "/gallery/general/images", "landscape_w"); - prop_xml_attr_long (index->properties, PROP_LANDSCAPE_H, xml, "/gallery/general/images", "landscape_h"); - prop_xml_attr_long (index->properties, PROP_PORTRAIT_W, xml, "/gallery/general/images", "portrait_w"); - prop_xml_attr_long (index->properties, PROP_PORTRAIT_H, xml, "/gallery/general/images", "portrait_h"); - prop_xml_attr (index->properties, PROP_BORDER_STYLE, xml, "/gallery/general/border", "style"); index->meta_author = xml_file_get_node_value (xml, "/gallery/general/meta/author/text()"); index->meta_description = xml_file_get_node_value (xml, "/gallery/general/meta/description/text()"); @@ -201,9 +195,6 @@ parse_album_xml (TGallerySetup *setup, const gchar *filename, TPathInfo *path_in } - index->nofullsize = xml_file_get_node_present (xml, "/gallery/general/nofullsize"); - index->fullsize = xml_file_get_node_present (xml, "/gallery/general/fullsize"); - /* News records */ if (news_feed) { count = xml_file_node_get_children_count (xml, "/gallery/general/news"); @@ -270,9 +261,6 @@ parse_album_xml (TGallerySetup *setup, const gchar *filename, TPathInfo *path_in item->path = xml_file_get_node_attribute (xml, s, "path"); else item->path = xml_file_get_node_attribute (xml, s, "src"); - prop_xml_attr_long (item->properties, PROP_QUALITY, xml, s, "quality"); - prop_xml_attr_long (item->properties, PROP_WIDTH, xml, s, "width"); - prop_xml_attr_long (item->properties, PROP_HEIGHT, xml, s, "height"); prop_xml_attr (item->properties, PROP_BORDER_STYLE, xml, s, "border"); /* custom image size attributes */ @@ -296,19 +284,15 @@ parse_album_xml (TGallerySetup *setup, const gchar *filename, TPathInfo *path_in item->title_description = xml_file_get_node_value (xml, s); g_free (s); - if (index->type == GALLERY_TYPE_INDEX) { - s = g_strdup_printf ("/gallery/items/*[%d]/thumbnail", i + 1); + s = g_strdup_printf ("/gallery/items/*[%d]/thumbnail", i + 1); + if (index->type == GALLERY_TYPE_INDEX) item->thumbnail = xml_file_get_node_attribute (xml, s, "src"); - g_free (s); - } - - s = g_strdup_printf ("/gallery/items/*[%d]/nofullsize", i + 1); - item->force_nofullsize = (xml_file_get_node_present (xml, s) || item->path == NULL); - g_free (s); - - s = g_strdup_printf ("/gallery/items/*[%d]/fullsize", i + 1); - item->force_fullsize = xml_file_get_node_present (xml, s); + s2 = xml_file_get_node_attribute (xml, s, "crop"); g_free (s); + if (s2 != NULL) { + properties_table_add_int (item->properties, PROP_THUMB_CROP_HINT, parse_thumbnail_crop_hint (s2)); + g_free (s2); + } s = g_strdup_printf ("/gallery/items/*[%d]/hidden", i + 1); item->hidden = (xml_file_get_node_present (xml, s)); @@ -365,15 +349,7 @@ parse_album_xml (TGallerySetup *setup, const gchar *filename, TPathInfo *path_in } g_free (s); - s = g_strdup_printf ("/gallery/items/*[%d]/thumbnail", i + 1); - s2 = xml_file_get_node_attribute (xml, s, "crop"); - g_free (s); - if (s2 != NULL) { - properties_table_add_int (item->properties, PROP_THUMB_CROP_HINT, parse_thumbnail_crop_hint (s2)); - g_free (s2); - } - - if (item->path || item->image_sizes) { + if (item->path) { g_ptr_array_add (index->items, item); } else { log_error ("%s: No image src specified (title = '%s'), skipping!\n", filename, item->title); diff --git a/src/items.h b/src/items.h index e62bc02..2d0df59 100644 --- a/src/items.h +++ b/src/items.h @@ -62,8 +62,6 @@ typedef struct { gchar *meta_author; gchar *meta_description; gchar *meta_keywords; - gboolean nofullsize; - gboolean fullsize; gchar **extra_files; gchar *auth_realm; gchar *auth_username; @@ -79,8 +77,6 @@ typedef struct { gchar *title_description; gchar *thumbnail; /* index pages */ GHashTable *image_sizes; - gboolean force_nofullsize; - gboolean force_fullsize; gboolean hidden; gchar *metadata_external_exif; PropertiesTable *properties; @@ -96,13 +92,6 @@ typedef struct { } TPathInfo; typedef enum { - PROP_QUALITY, - PROP_WIDTH, - PROP_HEIGHT, - PROP_LANDSCAPE_W, - PROP_LANDSCAPE_H, - PROP_PORTRAIT_W, - PROP_PORTRAIT_H, PROP_BORDER_STYLE, PROP_THUMB_CROP_HINT, PROP_METADATA_TZ_SHIFT, /* minutes */ diff --git a/src/setup.c b/src/setup.c index 37a5382..3d1ff2e 100644 --- a/src/setup.c +++ b/src/setup.c @@ -102,7 +102,6 @@ parse_setup_xml (const gchar *filename) setup->erase_exif_thumbnail = xml_file_get_node_attribute_boolean_with_default (xml, "/gallery_setup/images/erase_embed_thumbnail", "value", FALSE); setup->strip_xmp = xml_file_get_node_attribute_boolean_with_default (xml, "/gallery_setup/images/strip_xmp", "value", TRUE); setup->write_supplied_exif = xml_file_get_node_attribute_boolean_with_default (xml, "/gallery_setup/images/write_supplied_exif", "value", FALSE); - setup->nofullsize = xml_file_get_node_present (xml, "/gallery_setup/images/nofullsize"); setup->autorotate = xml_file_get_node_attribute_boolean_with_default (xml, "/gallery_setup/images/autorotate", "value", TRUE); /* meta section */ @@ -144,6 +143,18 @@ parse_setup_xml (const gchar *filename) } +/* Dummy image size sort func */ +static gint +image_sizes_compare_func (TImageSize *a, TImageSize *b) +{ + int sa, sb; + + sa = a->landscape_width + a->landscape_height + a->portrait_width + a->portrait_height + a->square_size; + sb = b->landscape_width + b->landscape_height + b->portrait_width + b->portrait_height + b->square_size; + + return sb - sa; +} + /* * parse_design_setup_xml: XML parser for design.xml file */ @@ -238,6 +249,7 @@ parse_design_setup_xml (const gchar *filename) image_size->fallback_size = xml_file_get_node_attribute (xml, s, "size"); g_free (s); } + design->image_sizes = g_list_sort (design->image_sizes, (GCompareFunc) image_sizes_compare_func); /* theme section */ diff --git a/src/setup.h b/src/setup.h index 4afb6d8..faf02f6 100644 --- a/src/setup.h +++ b/src/setup.h @@ -39,7 +39,6 @@ typedef struct TGalleryDesign TGalleryDesign; typedef struct { gboolean verbose; gboolean update_mode; - gboolean override_nofullsize; gboolean strip_unused_tags; gboolean warn_resize; gchar *setup_xml_path; @@ -57,7 +56,6 @@ typedef struct { gboolean erase_exif_thumbnail; gboolean strip_xmp; gboolean write_supplied_exif; - gboolean nofullsize; gboolean autorotate; /* meta section */ |
