1 package NonameTV
::Augmenter
::Tvdb
;
10 use NonameTV qw
/norm/;
11 use NonameTV
::Augmenter
::Base
;
12 use NonameTV
::Config qw
/ReadConfig/;
13 use NonameTV
::Log qw
/w/;
15 use base
'NonameTV::Augmenter::Base';
20 my $class = ref($proto) || $proto;
21 my $self = $class->SUPER::new
( @_ );
22 bless ($self, $class);
24 defined( $self->{ApiKey
} ) or die "You must specify ApiKey";
25 defined( $self->{Language
} ) or die "You must specify Language";
27 # need config for main content cache path
28 my $conf = ReadConfig
( );
30 my $cachefile = $conf->{ContentCachePath
} . '/' . $self->{Type
} . '/tvdb.db';
31 my $bannerdir = $conf->{ContentCachePath
} . '/' . $self->{Type
} . '/banner';
33 $self->{tvdb
} = TVDB
::API
::new
({ apikey
=> $self->{ApiKey
},
34 lang
=> $self->{Language
},
38 $self->{tvdb
}->getUpdates( 'guess' );
40 my $opt = { quiet
=> 1 };
41 Debug
::Simple
::debuglevels
($opt);
47 sub FillHash
( $$$$ ) {
48 my( $self, $resultref, $series, $episode )=@_;
50 return if( !defined $episode );
52 my $episodeid = $series->{Seasons
}[$episode->{SeasonNumber
}][$episode->{EpisodeNumber
}];
54 $resultref->{title
} = $series->{SeriesName
};
56 $resultref->{episode
} = ($episode->{SeasonNumber
} - 1) . ' . ' . ($episode->{EpisodeNumber
} - 1) . ' .';
58 $resultref->{subtitle
} = decode
( 'utf-8', $episode->{EpisodeName
} );
60 if( defined( $episode->{Overview
} ) ) {
61 $resultref->{description
} = decode
( 'utf-8', $episode->{Overview
} ) . "\nQuelle: Tvdb";
64 $resultref->{production_date
} = $episode->{FirstAired
};
66 # FIXME link to the correct language instead of hardcoding german (14)
67 $resultref->{url
} = sprintf(
68 'http://thetvdb.com/?tab=episode&seriesid=%d&seasonid=%d&id=%d&lid=%d',
69 $episode->{seriesid
}, $episode->{seasonid
}, $episodeid, 14
72 my @actors = split( '\|', decode
( 'utf-8', $series->{Actors
} ) );
79 @actors = grep{ defined } @actors;
81 # replace programme's actors
82 $resultref->{actors
} = join( ', ', @actors );
84 # remove existing actors from programme
85 $resultref->{actors
} = undef;
88 $resultref->{program_type
} = 'series';
92 sub AugmentProgram
( $$$ ){
93 my( $self, $ceref, $ruleref ) = @_;
95 # empty hash to get all attributes to change
97 # result string, empty/false for success, message/true for failure
100 if( $ruleref->{matchby
} eq 'episodeabs' ) {
101 # match by absolute episode number from program hash
103 if( defined $ceref->{episode
} ){
104 my( $episodeabs )=( $ceref->{episode
} =~ m
|^\s
*\
.\s
*(\d
+)\s
*/?\s
*\d
*\s
*\
.\s
*$| );
105 if( defined $episodeabs ){
109 if( defined( $ruleref->{remoteref
} ) ) {
110 my $seriesname = $self->{tvdb
}->getSeriesName( $ruleref->{remoteref
} );
111 $series = $self->{tvdb
}->getSeries( $seriesname );
113 $series = $self->{tvdb
}->getSeries( $ceref->{title
} );
115 if( defined $series ){
116 my $episode = $self->{tvdb
}->getEpisodeAbs( $series->{SeriesName
}, $episodeabs );
118 if( defined( $episode ) ) {
119 $self->FillHash( $resultref, $series, $episode );
121 w
( "no absolute episode " . $episodeabs . " found for '" . $ceref->{title
} . "'" );
131 }elsif( $ruleref->{matchby
} eq 'episodetitle' ) {
132 # match by episode title from program hash
134 if( defined( $ceref->{subtitle
} ) ) {
136 if( defined( $ruleref->{remoteref
} ) ) {
137 my $seriesname = $self->{tvdb
}->getSeriesName( $ruleref->{remoteref
} );
138 $series = $self->{tvdb
}->getSeries( $seriesname );
140 $series = $self->{tvdb
}->getSeries( $ceref->{title
} );
143 my $episodetitle = $ceref->{subtitle
};
144 $episodetitle =~ s
|,\s
+Teil\s
+(\d
+)$| ($1)|;
145 $episodetitle =~ s
|\s
+-\s
+Teil\s
+(\d
+)$| ($1)|;
146 $episodetitle =~ s
|\s
+\
(Teil\s
+(\d
+)\
)$| ($1)|;
147 $episodetitle =~ s
|\s
+-\s
+(\d
+)\
.\s
+Teil
$| ($1)|;
149 my $episode = $self->{tvdb
}->getEpisodeByName( $series->{SeriesName
}, $episodetitle );
150 if( defined( $episode ) ) {
151 $self->FillHash( $resultref, $series, $episode );
160 $result = "don't know how to match by '" . $ruleref->{matchby
} . "'";
163 return( $resultref, $result );