diff options
Diffstat (limited to 'src/exporters/cookmlexporter.cpp')
-rw-r--r-- | src/exporters/cookmlexporter.cpp | 121 |
1 files changed, 121 insertions, 0 deletions
diff --git a/src/exporters/cookmlexporter.cpp b/src/exporters/cookmlexporter.cpp new file mode 100644 index 0000000..f8f9d40 --- /dev/null +++ b/src/exporters/cookmlexporter.cpp @@ -0,0 +1,121 @@ +/*************************************************************************** +* Copyright (C) 2003 by * +* Jason Kivlighn ([email protected]) * +* * +* 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 * +* (at your option) any later version. * +***************************************************************************/ + +#include "cookmlexporter.h" + +#include <tqbuffer.h> +#include <tqdom.h> +#include <tqimage.h> +#include <tqpixmap.h> +#include <tqfile.h> + +#include <tdeconfig.h> +#include <kdebug.h> +#include <tdelocale.h> +#include <tdetempfile.h> +#include <kmdcodec.h> +#include <tdeglobal.h> +#include <kstandarddirs.h> + +#include "backends/recipedb.h" + +CookMLExporter::CookMLExporter( const TQString& filename, const TQString &format ) : + BaseExporter( filename, format ) +{} + + +CookMLExporter::~CookMLExporter() +{} + +int CookMLExporter::supportedItems() const +{ + return RecipeDB::All ^ RecipeDB::Ratings; +} + +TQString CookMLExporter::createHeader( const RecipeList& ) +{ + TQString xml = "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>\n"; + xml += "<!DOCTYPE cookml PUBLIC \"-\" \"cookml.dtd\">"; + xml += "<cookml version=\"1.0.13\" prog=\"Krecipes\" progver=\""+krecipes_version()+"\">"; + return xml; +} + +TQString CookMLExporter::createFooter() +{ + return "</cookml>"; +} + +TQString CookMLExporter::createContent( const RecipeList& recipes ) +{ + TQString xml; + TQDomDocument doc; + + RecipeList::const_iterator recipe_it; + for ( recipe_it = recipes.begin(); recipe_it != recipes.end(); ++recipe_it ) { + TQDomElement recipe_tag = doc.createElement( "recipe" ); + recipe_tag.setAttribute( "lang", ( TDEGlobal::locale() ) ->language() ); + + //cookml_tag.appendChild( recipe_tag ); + + TQDomElement head_tag = doc.createElement( "head" ); + head_tag.setAttribute( "title", ( *recipe_it ).title ); + head_tag.setAttribute( "servingqty", ( *recipe_it ).yield.amount ); + head_tag.setAttribute( "servingtype", ( *recipe_it ).yield.type ); + head_tag.setAttribute( "rid", "" ); //FIXME:what's this...recipe ID?? + recipe_tag.appendChild( head_tag ); + + for ( ElementList::const_iterator cat_it = ( *recipe_it ).categoryList.begin(); cat_it != ( *recipe_it ).categoryList.end(); ++cat_it ) { + TQDomElement cat_tag = doc.createElement( "cat" ); + cat_tag.appendChild( doc.createTextNode( ( *cat_it ).name ) ); + head_tag.appendChild( cat_tag ); + } + + for ( ElementList::const_iterator author_it = ( *recipe_it ).authorList.begin(); author_it != ( *recipe_it ).authorList.end(); ++author_it ) { + TQDomElement sourceline_tag = doc.createElement( "sourceline" ); + sourceline_tag.appendChild( doc.createTextNode( ( *author_it ).name ) ); + head_tag.appendChild( sourceline_tag ); + } + + TQDomElement picbin_tag = doc.createElement( "picbin" ); + picbin_tag.setAttribute( "format", "JPG" ); + + TQByteArray data; + TQBuffer buffer( data ); + buffer.open( IO_WriteOnly ); + TQImageIO iio( &buffer, "JPEG" ); + iio.setImage( ( *recipe_it ).photo.convertToImage() ); + iio.write(); + + picbin_tag.appendChild( doc.createTextNode( KCodecs::base64Encode( data, true ) ) ); + head_tag.appendChild( picbin_tag ); + + TQDomElement part_tag = doc.createElement( "part" ); + for ( IngredientList::const_iterator ing_it = ( *recipe_it ).ingList.begin(); ing_it != ( *recipe_it ).ingList.end(); ++ing_it ) { + TQDomElement ingredient_tag = doc.createElement( "ingredient" ); + ingredient_tag.setAttribute( "qty", TQString::number( ( *ing_it ).amount ) ); + ingredient_tag.setAttribute( "unit", ( ( *ing_it ).amount > 1 ) ? ( *ing_it ).units.plural : ( *ing_it ).units.name ); + ingredient_tag.setAttribute( "item", ( *ing_it ).name ); + ingredient_tag.setAttribute( "preparation", ( *ing_it ).prepMethodList.join(",") ); + part_tag.appendChild( ingredient_tag ); + } + recipe_tag.appendChild( part_tag ); + + TQDomElement preparation_tag = doc.createElement( "preparation" ); + recipe_tag.appendChild( preparation_tag ); + + TQDomElement text_tag = doc.createElement( "text" ); + preparation_tag.appendChild( text_tag ); + text_tag.appendChild( doc.createTextNode( ( *recipe_it ).instructions ) ); + + xml += recipe_tag.text(); + } + + return xml; +} |