summaryrefslogtreecommitdiff
path: root/items.c
diff options
context:
space:
mode:
authorTomas Bzatek <tbzatek@users.sourceforge.net>2009-02-26 22:50:39 +0100
committerTomas Bzatek <tbzatek@users.sourceforge.net>2009-02-26 22:50:39 +0100
commit89c58dc04c264c5778ae34d1428e12483f3ac5ac (patch)
treed5aef506841b3b0e2e91016d0c0bbb608535873c /items.c
parent10a77c7a1c4648693ded958d6ac8641afcdf1d34 (diff)
downloadcataract-89c58dc04c264c5778ae34d1428e12483f3ac5ac.tar.xz
Autotoolize
Diffstat (limited to 'items.c')
-rw-r--r--items.c320
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);
-}