You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
krecipes/krecipes/src/exporters/cookmlexporter.cpp

122 lines
4.4 KiB

/***************************************************************************
* Copyright (C) 2003 by *
* Jason Kivlighn (jkivlighn@gmail.com) *
* *
* 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 <ntqbuffer.h>
#include <ntqdom.h>
#include <ntqimage.h>
#include <ntqpixmap.h>
#include <ntqfile.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;
}