summaryrefslogtreecommitdiff
path: root/lib/gcstar/GCImport/GCImportMyMovies.pm
diff options
context:
space:
mode:
Diffstat (limited to 'lib/gcstar/GCImport/GCImportMyMovies.pm')
-rw-r--r--lib/gcstar/GCImport/GCImportMyMovies.pm211
1 files changed, 211 insertions, 0 deletions
diff --git a/lib/gcstar/GCImport/GCImportMyMovies.pm b/lib/gcstar/GCImport/GCImportMyMovies.pm
new file mode 100644
index 0000000..a51b1c4
--- /dev/null
+++ b/lib/gcstar/GCImport/GCImportMyMovies.pm
@@ -0,0 +1,211 @@
+package GCImport::GCImportMyMovies;
+
+#################################################################################
+#
+# Created by Rob Maas rob@progob.nl | http://www.robmaas.eu (2008)
+#
+#
+# This file is strongly based op the already existing DVDProfiler
+# import class. It is also my first perl script :-)
+#
+# Since MyMovies has some different fields then GCStar, there are some work
+# arounds to get as much of the original data.
+#
+# If the field ExtraFeatures is filled, it will appear in the General tab in
+# the synopsis.
+#
+# The rating system will be calculated back to the Dutch rating system.
+#
+# If data was imported from IMDB, the webpage button will link to the specific
+# movie site on IMDB.
+#
+# Cause GCstar hasnĀ“t (yet?) a real EAN field, the EAN code is placed on the
+# details tab under comments.
+#
+# Special thanks goes to Tian who helped me with some array trouble :-P and
+# for creating this software.
+#
+#################################################################################
+
+use strict;
+use GCImport::GCImportBase;
+
+{
+ package GCImport::GCImporterMyMovies;
+
+ use base qw(GCImport::GCImportBaseClass);
+
+ use XML::Simple;
+
+ sub new
+ {
+ my $proto = shift;
+ my $class = ref($proto) || $proto;
+ my $self = $class->SUPER::new();
+ bless ($self, $class);
+
+ return $self;
+ }
+
+ sub getName
+ {
+ return "MyMovies (.xml)";
+ }
+
+ sub getOptions
+ {
+ my $self = shift;
+ my @options;
+ return \@options;
+ }
+
+ sub getFilePatterns
+ {
+ return (['MyMovies (.xml)', '*.xml']);
+ }
+
+ #Return supported models name
+ sub getModels
+ {
+ return ['GCfilms'];
+ }
+
+ # Ignored for the moment
+ sub wantsFieldsSelection
+ {
+ return 0;
+ }
+ sub getEndInfo
+ {
+ return "";
+ }
+
+ sub getItemsArray
+ {
+ my ($self, $file) = @_;
+ my $xml;
+ my $data;
+ # Creates an object / Skip empty ellements
+ $xml = new XML::Simple(suppressempty => 1);
+ $data = $xml->XMLin ("$file");
+
+ my @result;
+ my $film;
+
+ # For each "Title" in the XML file
+ foreach $film(@{$data->{Title}}){
+ my $item;
+
+ #General fields
+ $item->{title} = $film->{LocalTitle};
+ $item->{original} = $film->{OriginalTitle};
+ $item->{date} = $film->{ProductionYear};
+ $item->{time} = $film->{RunningTime}.' min';
+ $item->{synopsis} = $film->{Description};
+
+ #Extra's on the disc
+ if ($film->{ExtraFeatures}->{content}){
+ $item->{synopsis} .= "\n\nEXTRA\n";
+ $item->{synopsis} .= $film->{ExtraFeatures}->{content};
+ }
+
+ #Based on the Dutch ratings!
+
+ $item->{age} =
+ ($film->{ParentalRating}->{Value} == 1) ? 1
+ : ($film->{ParentalRating}->{Value} == 2) ? 2
+ : ($film->{ParentalRating}->{Value} == 3) ? 5
+ : ($film->{ParentalRating}->{Value} == 4) ? 12
+ : 16;
+
+ if ($film->{DataProvider} eq 'IMDB.com'){
+ $item->{webPage} = 'http://www.imdb.com/title/'.$film->{DataProviderId};
+ }
+ $item->{country} = $film->{Country};
+
+ ###### GENRE #########
+ my $type;
+ if (ref ($film->{Genres}->{Genre}) eq "ARRAY"){
+ foreach $type(@{$film->{Genres}->{Genre}}){
+ $item->{genre} .= $type.',';
+ }
+ }
+ else{
+ $item->{genre} = $film->{Genres}->{Genre};
+ }
+ ###### END GENRE #########
+ ####### DIRECTOR AND ACTORS #########
+ my $actor;
+ if (ref ($film->{Persons}->{Person}) eq "ARRAY") {
+ foreach $actor(@{$film->{Persons}->{Person}}){
+ if ($actor->{Type} eq 'Director'){
+ $item->{director} = $actor->{Name};
+ }
+ else{
+ $item->{actors}.= $actor->{Name}.' ('.$actor->{Role}.'), ';
+ }
+ }
+ }
+ else{
+ $item->{actors}.= $film->{Persons}->{Person}->{Name}.' ('.$film->{Persons}->{Person}->{Role}.')';
+ }
+ ###### END DIRECTOR AND ACTORS ######
+
+ ##DETAIL
+ $item->{format} = $film->{Type};
+ $item->{video} = $film->{VideoStandard};
+ $item->{added} = $film->{Added};
+ $item->{identifier} = $film->{CollectionNumber};
+
+ #Temporately cause a real barcode field is missing
+ if (length($film->{Barcode}) gt 0){
+ $item->{comment} = 'EAN: '.$film->{Barcode};
+ }
+
+ ###### AUDIO #########
+ my $audio;
+ my @audioTracks;
+ if (ref ($film->{AudioTracks}->{AudioTrack}) eq "ARRAY"){
+ foreach $audio(@{$film->{AudioTracks}->{AudioTrack}}){
+ push @audioTracks, [$audio->{Language}, $audio->{Type}.' '.$audio->{Channels}];
+ }
+ $item->{audio} = \@audioTracks;
+ }
+ else{
+ $item->{audio} = [[$audio->{Language}, $audio->{Type}]];
+ }
+ ###### END AUDIO #########
+ ###### SUBTITLES #########
+ my $subt;
+ if (ref ($film->{Subtitles}->{Subtitle}) eq "ARRAY"){
+ foreach $subt(@{$film->{Subtitles}->{Subtitle}}){
+ $item->{subt} .= $subt->{Language}.',';
+ }
+ }
+ else{
+ $item->{subt} = $subt->{Language};
+ }
+ ###### END SUBTITLES #########
+
+ #$item->{borrower} = $film->{Title};
+ #$item->{lendDate} = $film->{Title};
+ #$item->{history} = $film->{Title};
+ #$item->{seen} = $film->{Title};# non par defaut ?
+ #$item->{image} = $film->{Title};
+ #$item->{number} = $film->{CollectionNumber};
+ #$item->{rating} = $film->{Title};# note par defaut
+ #$item->{place} = $film->{Title};
+
+ $item->{director} =~ s/, $//;
+ $item->{actors} =~ s/, $//;
+ $item->{audio} =~ s/, $//;
+ $item->{subt} =~ s/, $//;
+ $item->{genre} =~ s/, $//;
+ push @result, $item;
+ }
+ return \@result;
+
+ }
+}
+
+1;