diff options
| author | Tomas Bzatek <tbzatek@users.sourceforge.net> | 2009-02-26 22:50:39 +0100 |
|---|---|---|
| committer | Tomas Bzatek <tbzatek@users.sourceforge.net> | 2009-02-26 22:50:39 +0100 |
| commit | 89c58dc04c264c5778ae34d1428e12483f3ac5ac (patch) | |
| tree | d5aef506841b3b0e2e91016d0c0bbb608535873c /items.c | |
| parent | 10a77c7a1c4648693ded958d6ac8641afcdf1d34 (diff) | |
| download | cataract-89c58dc04c264c5778ae34d1428e12483f3ac5ac.tar.xz | |
Autotoolize
Diffstat (limited to 'items.c')
| -rw-r--r-- | items.c | 320 |
1 files changed, 0 insertions, 320 deletions
diff --git a/items.c b/items.c deleted file mode 100644 index 986fd6c..0000000 --- a/items.c +++ /dev/null @@ -1,320 +0,0 @@ -/* Cataract - Static web photo gallery generator - * Copyright (C) 2008 Tomas Bzatek <tbzatek@users.sourceforge.net> - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation; either version 2 - * of the License, or any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - */ -#include <stdio.h> -#include <string.h> -#include <stdlib.h> - -#include <libxml/xmlmemory.h> -#include <libxml/parser.h> -#include <libxml/xpath.h> -#include <libxml/xpathInternals.h> - -#include "items.h" -#include "xml-parser.h" - - - -/* - * parse_album_xml: XML parser for gallery index.xml files - */ -gboolean -parse_album_xml (const char *filename, TAlbum *index) -{ - TXMLFile *xml; - char *gallery_type; - int count; - int i; - char *s, *s2; - char *node_name; - TIndexItem *item; - - xml = xml_parser_load (filename); - if (xml == NULL) - return FALSE; - - /* Initialize data struct */ - if (index == NULL) - index = malloc (sizeof (TAlbum)); - memset (index, 0, sizeof (TAlbum)); - - index->base_dir = g_path_get_dirname (filename); - - /* Retrieve gallery type */ - gallery_type = xml_file_get_node_attribute (xml, "/gallery", "type"); - #ifdef __DEBUG_ALL__ - printf("gallery_type = %s\n", gallery_type); - #endif - if (strcmp (gallery_type, "index") == 0) - index->type = GALLERY_TYPE_INDEX; - else - if (strcmp (gallery_type, "album") == 0) - index->type = GALLERY_TYPE_ALBUM; - else { - printf ("Invalid gallery type (%s)\n", gallery_type); - free (index); - return FALSE; - } - - /* Section General */ - index->ID = xml_file_get_node_value (xml, "/gallery/general/ID/text()"); - index->title = xml_file_get_node_value (xml, "/gallery/general/title/text()"); - index->desc = xml_file_get_node_value (xml, "/gallery/general/description/text()"); - index->footnote = xml_file_get_node_value (xml, "/gallery/general/footnote/text()"); - - index->quality = xml_file_get_node_attribute_long (xml, "/gallery/general/images", "quality", -1); - index->landscape_width = xml_file_get_node_attribute_long (xml, "/gallery/general/images", "landscape_w", 0); - index->landscape_height = xml_file_get_node_attribute_long (xml, "/gallery/general/images", "landscape_h", 0); - index->portrait_width = xml_file_get_node_attribute_long (xml, "/gallery/general/images", "portrait_w", 0); - index->portrait_height = xml_file_get_node_attribute_long (xml, "/gallery/general/images", "portrait_h", 0); - - index->border_style = xml_file_get_node_attribute (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()"); - index->meta_keywords = xml_file_get_node_value (xml, "/gallery/general/meta/keywords/text()"); - - index->nofullsize = xml_file_get_node_present (xml, "/gallery/general/nofullsize"); - index->fullsize = xml_file_get_node_present (xml, "/gallery/general/fullsize"); - - /* Section Items */ - count = xml_file_node_get_children_count (xml, "/gallery/items/*"); - #ifdef __DEBUG_ALL__ - printf("parse_album_xml: items count = %d\n", count); - #endif - index->items = g_ptr_array_new(); - - for (i = 0; i < count; i++) - { - item = malloc (sizeof (TIndexItem)); - memset (item, 0, sizeof (TIndexItem)); - - s = g_strdup_printf ("/gallery/items/*[%d]", i + 1); - node_name = xml_file_get_node_name (xml, s); - if (! node_name) continue; - #ifdef __DEBUG_ALL__ - printf("parse_album_xml: item[%d] = '%s'\n", i + 1, node_name); - #endif - - if (strcmp (node_name, "item") == 0) { - item->type = INDEX_ITEM_TYPE_PICTURE; - if (index->type == GALLERY_TYPE_INDEX) - item->path = xml_file_get_node_attribute (xml, s, "path"); - else - item->path = xml_file_get_node_attribute (xml, s, "src"); - item->preview = xml_file_get_node_attribute (xml, s, "preview"); - item->quality = xml_file_get_node_attribute_long (xml, s, "quality", -1); - item->width = xml_file_get_node_attribute_long (xml, s, "width", 0); - item->height = xml_file_get_node_attribute_long (xml, s, "height", 0); - item->border_style = xml_file_get_node_attribute (xml, s, "border"); - if (index->type == GALLERY_TYPE_ALBUM) - item->thumbnail = xml_file_get_node_attribute (xml, s, "thumbnail"); - g_free (s); - - s = g_strdup_printf ("/gallery/items/*[%d]/title/text()", i + 1); - item->title = xml_file_get_node_value (xml, s); - g_free (s); - - s = g_strdup_printf ("/gallery/items/*[%d]/title_description/text()", i + 1); - 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); - 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); - g_free (s); - - s = g_strdup_printf ("/gallery/items/*[%d]/hidden", i + 1); - item->hidden = (xml_file_get_node_present (xml, s)); - g_free (s); - - /* Retrieve title and description from linked album if not defined here */ - if (index->type == GALLERY_TYPE_INDEX && - item->title == NULL && item->title_description == NULL) { - s = g_strconcat (index->base_dir, "/", item->path, "/index.xml", NULL); - get_album_titles (s, &item->title, &item->title_description, NULL); - g_free (s); - } - - /* Retrieve thumbnail from linked album if not defined here */ - if (index->type == GALLERY_TYPE_INDEX && item->thumbnail == NULL) { - s = g_strconcat (index->base_dir, "/", item->path, "/index.xml", NULL); - s2 = NULL; - get_album_titles (s, NULL, NULL, &s2); - if (s2) { - item->thumbnail = g_strconcat (item->path, "/", s2, NULL); - g_free (s2); - } - g_free (s); - } - - if (item->path || item->preview) - { - g_ptr_array_add (index->items, item); - } - else - { - fprintf (stderr, "%s: No image src specified, skipping!\n", filename); - free (item); - } - } - else - if (strcmp (node_name, "separator") == 0) { - item->type = INDEX_ITEM_TYPE_SEPARATOR; - - s = g_strdup_printf ("/gallery/items/*[%d]/text()", i + 1); - item->title = xml_file_get_node_value (xml, s); - g_free (s); - - g_ptr_array_add (index->items, item); - } - else { - /* Free the item if nobody cares */ - free (item); - } - free (node_name); - } - - xml_parser_close (xml); - - /* Print the items */ - #ifdef __DEBUG_ALL__ - printf ("ID = '%s'\ntitle = '%s'\ndescription = '%s'\n", index->ID, index->title, index->desc); - for (i = 0; i < index->items->len; i++) { - TIndexItem *item = g_ptr_array_index (index->items, i); - printf ("item %d: path = '%s', title = '%s', title_description = '%s', thumbnail = '%s'\n", - i, item->path, item->title, item->title_description, item->thumbnail); - } - #endif - return TRUE; -} - - -/* - * free_album_data: free allocated album data - */ -void -free_album_data (TAlbum *album) -{ - if (album) { - if (album->ID) - free (album->ID); - if (album->title) - free (album->title); - if (album->desc) - free (album->desc); - if (album->footnote) - free (album->footnote); - if (album->base_dir) - free (album->base_dir); - if (album->border_style) - free (album->border_style); - if (album->meta_author) - free (album->meta_author); - if (album->meta_description) - free (album->meta_description); - if (album->meta_keywords) - free (album->meta_keywords); - - if (album->items) { - if (album->items->len > 0) { - TIndexItem *item; - int i; - - for (i = 0; i < album->items->len; i++) { - item = g_ptr_array_index (album->items, i); - if (item != NULL) { - if (item->path) - free (item->path); - if (item->title) - free (item->title); - if (item->title_description) - free (item->title_description); - if (item->thumbnail) - free (item->thumbnail); - if (item->preview) - free (item->preview); - if (item->border_style) - free (item->border_style); - free (item); - } - } - } - g_ptr_array_free (album->items, TRUE); - } - free (album); - album = NULL; - } -} - - -/* - * get_gallery_objects_count: retrieve number of items in specified album - */ -int -get_album_objects_count (const char *filename) -{ - TXMLFile *xml; - int count; - - xml = xml_parser_load (filename); - if (xml == NULL) - return 0; - - count = xml_file_node_get_children_count (xml, "/gallery/items/item"); - xml_parser_close (xml); - - #ifdef __DEBUG_ALL__ - printf ("get_objects_count(%s) = %d\n", filename, count); - #endif - return count; -} - -/* - * get_album_titles: retrieve title, description and first thumbnail from specified album - */ -void -get_album_titles (const char *filename, char **title, char **description, char **thumbnail) -{ - TXMLFile *xml; - - xml = xml_parser_load (filename); - if (xml == NULL) - return; - - if (title) - *title = xml_file_get_node_value (xml, "/gallery/general/title/text()"); - if (description) - *description = xml_file_get_node_value (xml, "/gallery/general/description/text()"); - if (thumbnail) { - *thumbnail = xml_file_get_node_attribute (xml, "/gallery/items/item[1]/thumbnail", "src"); - if (! *thumbnail) - *thumbnail = xml_file_get_node_attribute (xml, "/gallery/items/item[1]", "src"); - if (! *thumbnail) - *thumbnail = xml_file_get_node_attribute (xml, "/gallery/items/item[1]", "preview"); - } - - xml_parser_close (xml); -} |
