From 126bb8cb6b93240bb4d3a2b816b74c286c3d422b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B6rg=20Frings-F=C3=BCrst?= Date: Sun, 6 Jul 2014 15:20:38 +0200 Subject: Imported Upstream version 1.7.0 --- lib/gcstar/GCExport/GCExportTellico.pm | 512 +++++++++++++++++++++++++++++++++ 1 file changed, 512 insertions(+) create mode 100644 lib/gcstar/GCExport/GCExportTellico.pm (limited to 'lib/gcstar/GCExport/GCExportTellico.pm') diff --git a/lib/gcstar/GCExport/GCExportTellico.pm b/lib/gcstar/GCExport/GCExportTellico.pm new file mode 100644 index 0000000..2bac594 --- /dev/null +++ b/lib/gcstar/GCExport/GCExportTellico.pm @@ -0,0 +1,512 @@ +package GCExport::GCExportTellico; + +################################################### +# +# Copyright 2005-2010 Christian Jodar +# +# This file is part of GCstar. +# +# GCstar 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. +# +# GCstar 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 GCstar; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA +# +################################################### + +use strict; + +use GCExport::GCExportBase; + +{ + package GCExport::GCExporterTellico; + + use base qw(GCExport::GCExportBaseClass); + use GCUtils; + + sub new + { + my $proto = shift; + my $class = ref($proto) || $proto; + my $self = $class->SUPER::new(); + bless ($self, $class); + + $self->checkModule('MIME::Base64'); + $self->checkModule('Digest::MD5'); + + #List of collections: http://www.periapsis.org/tellico/doc/collection-type-values.html + # [ entryTitle, type, extra fields ] + $self->{models} = { + GCbooks => ['Books', '2', ''], + GCfilms => ['Videos', '3', ''], + GCmusics => ['Music', '4', ''], + GCcoins => ['Coin', '8', ''], + GCgames => ['Games', '11', ''] + }; + + return $self; + } + + sub getName + { + my $self = shift; + + return "Tellico"; + } + + sub getModels + { + my $self = shift; + + my @models = keys %{$self->{models}}; + return \@models; + } + + sub needsUTF8 + { + my $self = shift; + + return 1; + } + + sub getOptions + { + my $self = shift; + + return []; + } + + sub wantsFieldsSelection + { + return 0; + } + + sub preProcess + { + my $self = shift; + + $self->{imagesInfos} = {}; + return 1; + } + + sub getHeader + { + my ($self, $number) = @_; + my $result; + + my $model = $self->{model}; + my $title = $model->getDescription; + my $info = $self->{models}->{$model->getName}; + + $result = ' + + + + + + '.$info->[2].' + +'; + + return $result; + } + + sub transformData + { + my ($self, $data) = @_; + + $data =~ s/&/&/g; + + return $data; + } + + sub transformList + { + my ($self, $list, $tag) = @_; + + my $result = ''; + if (ref($list) eq 'ARRAY') + { + foreach (@{$list}) + { + $result .= " <$tag>".$self->transformData($_->[0]) + ."\n"; + } + } + else + { + foreach (split ',', $list) + { + s/;.*$//; + $result .= " <$tag>".$self->transformData($_)."\n"; + } + } + return $result; + } + + sub encodeImage + { + my ($self, $file) = @_; + my $image = GCUtils::getDisplayedImage($file, $self->{options}->{defaultImage}, $self->{original}); + (my $suffix = $image) =~ s/.*?\.([^.]*)$/$1/; + $suffix = 'jpeg' if $suffix eq 'jpg'; + open PIC, "<$image" or return (undef,undef,undef); + my $data = do {local $/; }; + close PIC; + my $pictureId = Digest::MD5::md5_hex($data).'.'.$suffix; + my %infos; + $infos{id} = $pictureId; + $infos{format} = uc $suffix; + $infos{width} = 120; + $infos{height} = 160; + $infos{data} = MIME::Base64::encode_base64($data); + return \%infos; + } + + sub getItem + { + my ($self, $item, $number) = @_; + + my $methodName = 'get'.$self->{model}->getName.'Item'; + + return $self->$methodName($item); + } + + sub getGCfilmsItem + { + my ($self, $movie, $number) = @_; + my $result; + + #(my $synopsis = $movie->{synopsis}) =~ s/
/\n/gm; + #(my $comments = $movie->{comment}) =~ s/
/\n/gm; + + use integer; + my $rating = $movie->{rating} / 2; + no integer; + + my $age = $movie->{age}; + my $certification; + + if ($age == 1) + { + $certification = 'U (USA)'; + } + elsif ($age == 2) + { + $certification = 'G (USA)'; + } + elsif ($age <= 5) + { + $certification = 'PG (USA)'; + } + elsif ($age <= 13) + { + $certification = 'PG-13 (USA)'; + } + elsif ($age <= 17) + { + $certification = 'R (USA)'; + } + + my $imageInfos = $self->encodeImage($movie->{image}); + $self->{imagesInfos}->{$imageInfos->{id}} = $imageInfos; + + my $year = GCPreProcess::extractYear($movie->{date}); + + $result = ' + '.$self->transformData($movie->{title}).' + '.$self->transformData($movie->{format}).' + '.$year.' + '.$certification.' + +'; + $result .= $self->transformList($movie->{genre}, 'genre'); + $result .= ' + + '.$self->transformData($movie->{country}).' + + +'; + foreach (split ',', $movie->{actors}) + { + $result .= " ".$self->transformData($_)."\n"; + } + $result .= ' + + '.$self->transformData($movie->{director}).' + + +'; + $result .= $self->transformList($movie->{audio}, 'language'); + $result .= ' + '.$self->transformData($movie->{time}).' + '.$self->transformData($movie->{synopsis}).' + '.$rating.' + '.$self->transformData($movie->{comments}).' +'; + if (($movie->{borrower}) && ($movie->{borrower} ne 'none')) + { + $result .= ' true +'; + } + + $result .= ' '.$imageInfos->{id}.' +'; + + $result .= ' +'; + + return $result; + } + + sub getGCgamesItem + { + my ($self, $item, $number) = @_; + my $result; + + use integer; + my $rating = $item->{rating} / 2; + no integer; + + my $imageInfos = $self->encodeImage($item->{boxpic}); + $self->{imagesInfos}->{$imageInfos->{id}} = $imageInfos; + + my $year = GCPreProcess::extractYear($item->{released}); + + $result = ' + '.$self->transformData($item->{name}).' + '.$self->transformData($item->{platform}).' + '.$self->transformData($item->{description}).' + '.$year.' + '.$self->transformData($item->{added}).' + +'; + $result .= $self->transformList($item->{genre}, 'genre'); + $result .= ' + + '.$self->transformData($item->{editor}).' + + '.$rating.' +'; + if (($item->{borrower}) && ($item->{borrower} ne 'none')) + { + $result .= ' true +'; + } + if ($item->{completion} >= 100) + { + $result .= ' true +'; + } + + $result .= ' '.$imageInfos->{id}.' +'; + + $result .= ' +'; + + return $result; + } + + sub getGCbooksItem + { + my ($self, $item, $number) = @_; + my $result; + + use integer; + my $rating = $item->{rating} / 2; + no integer; + + my $imageInfos = $self->encodeImage($item->{cover}); + $self->{imagesInfos}->{$imageInfos->{id}} = $imageInfos; + + my $year = GCPreProcess::extractYear($item->{publication}); + + $result = ' + '.$self->transformData($item->{title}).' + '.$self->transformData($item->{isbn}).' + '.$self->transformData($item->{serie}).' + '.$self->transformData($item->{edition}).' + '.$self->transformData($item->{format}).' + '.$self->transformData($item->{description}).' + '.$self->transformData($item->{pages}).' + '.$self->transformData($item->{acquisition}).' + '.$year.' + '.$self->transformData($item->{publisher}).' + +'; + $result .= $self->transformList($item->{authors}, 'author'); + $result .= ' + +'; + $result .= $self->transformList($item->{language}, 'language'); + $result .= ' + +'; + $result .= $self->transformList($item->{genre}, 'genre'); + $result .= ' + '.$rating.' +'; + if (($item->{borrower}) && ($item->{borrower} ne 'none')) + { + $result .= ' true +'; + } + if ($item->{read}) + { + $result .= ' true +'; + } + + $result .= ' '.$imageInfos->{id}.' +'; + + $result .= ' +'; + + return $result; + } + + sub getGCmusicsItem + { + my ($self, $item, $number) = @_; + my $result; + + use integer; + my $rating = $item->{rating} / 2; + no integer; + + my $imageInfos = $self->encodeImage($item->{cover}); + $self->{imagesInfos}->{$imageInfos->{id}} = $imageInfos; + + my $year = GCPreProcess::extractYear($item->{release}); + + $result = ' + '.$self->transformData($item->{title}).' + '.$self->transformData($item->{format}).' + '.$year.' + + '.$self->transformData($item->{comment}).' + +'; + $result .= $self->transformList($item->{artist}, 'artist'); + $result .= ' + +'; + $result .= $self->transformList($item->{genre}, 'genre'); + $result .= ' + '.$rating.' + '; + foreach (@{$item->{tracks}}) + { + $result .= ' + + '.$self->transformData($_->[1]).' + '.$self->transformData($item->{artist}).' + '.$self->transformData($_->[2]).' + ' + } + $result .= ' + +'; + + + if (($item->{borrower}) && ($item->{borrower} ne 'none')) + { + $result .= ' true +'; + } + $result .= ' '.$imageInfos->{id}.' +'; + + $result .= ' +'; + + return $result; + } + + sub getGCcoinsItem + { + my ($self, $item, $number) = @_; + my $result; + + my $frontInfos = $self->encodeImage($item->{front}); + $self->{imagesInfos}->{$frontInfos->{id}} = $frontInfos; + my $backInfos = $self->encodeImage($item->{back}); + $self->{imagesInfos}->{$backInfos->{id}} = $backInfos; + + $result = ' + '.$self->transformData($item->{name}).' + '.$self->transformData($item->{currency}).' + '.$self->transformData($item->{value}).' + '.$self->transformData($item->{year}).' + '.$self->transformData($item->{country}).' + '.(($item->{type} eq 'coin') ? 'true' : 'false').' + '.$self->transformData($item->{added}).' + '.$self->transformData($item->{estimate}).' + '.$self->transformData($item->{location}).' + '.$self->transformData($item->{comments}).' + '.$frontInfos->{id}.' + '.$backInfos->{id}.' + +'; + return $result; + } + + sub getFooter + { + my $self = shift; + my $result; + + $result = ' +'; + foreach (values %{$self->{imagesInfos}}) + { + $result .= ' '. + $_->{data}.''; + } + $result .=' +
+
+'; + + return $result; + } + + # postProcess + # Called after all processing. Use it if you need to perform extra stuff on the header. + # $header is a reference to the header string. + sub postProcess + { + my ($self, $header, $body) = @_; + + # Your code here + # As header is a reference, it can be modified on place with $$header + } + + # getEndInfo + # Used to display some information to user when export is ended. + # To localize your message, use $self->{options}->{lang}. + # Returns a string that will be displayed in a message box. + sub getEndInfo + { + my $self = shift; + my $message; + + # Your code here + # Don't do put anything in message if you don't want information to be displayed. + + return $message; + } +} + +1; -- cgit v1.2.3