summaryrefslogtreecommitdiff
path: root/lib/gcstar/GCImport/GCImportBase.pm
diff options
context:
space:
mode:
Diffstat (limited to 'lib/gcstar/GCImport/GCImportBase.pm')
-rw-r--r--lib/gcstar/GCImport/GCImportBase.pm217
1 files changed, 217 insertions, 0 deletions
diff --git a/lib/gcstar/GCImport/GCImportBase.pm b/lib/gcstar/GCImport/GCImportBase.pm
new file mode 100644
index 0000000..026be19
--- /dev/null
+++ b/lib/gcstar/GCImport/GCImportBase.pm
@@ -0,0 +1,217 @@
+package GCImport::GCImportBase;
+
+###################################################
+#
+# 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 GCExportImport;
+
+{
+ package GCImport::GCImportBaseClass;
+
+ use base 'GCExportImportBase';
+ use File::Basename;
+ use File::Copy;
+
+ #Methods to be overriden in specific classes
+
+ sub new
+ {
+ my $proto = shift;
+ my $class = ref($proto) || $proto;
+ my $self = $class->SUPER::new;
+
+ $self->{parsingError} = '';
+ $self->{modelAlreadySet} = 0;
+
+ bless ($self, $class);
+ return $self;
+ }
+
+ sub getFilePatterns
+ {
+ return (['*.*', '*.*']);
+ }
+
+ sub getSuffix
+ {
+ my $self = shift;
+ return '' if ! ($self->getFilePatterns)[0];
+ (my $pattern = ($self->getFilePatterns)[0]->[1]) =~ s/.*?([[:alnum:]]+)/$1/;
+ return $pattern;
+ }
+
+ #Return supported models name
+ sub getModels
+ {
+ return [];
+ }
+
+ #Return current model name
+ sub getModelName
+ {
+ return 'GCfilms';
+ }
+
+ sub getOptions
+ {
+ }
+
+ sub wantsFieldsSelection
+ {
+ return 0;
+ }
+
+ sub wantsIgnoreField
+ {
+ return 0;
+ }
+
+ sub wantsImagesSelection
+ {
+ return 0;
+ }
+
+ sub wantsFileSelection
+ {
+ return 1;
+ }
+
+ sub wantsDirectorySelection
+ {
+ return 0;
+ }
+
+ # Returns true if the module should be hidden from
+ # the menu when a collection of an incompatible kind is open.
+ sub shouldBeHidden
+ {
+ return 0;
+ }
+
+ sub generateId
+ {
+ return 1;
+ }
+
+ sub getEndInfo
+ {
+ }
+
+ sub getItemsArray
+ {
+ }
+
+ #End of methods to be overriden
+
+ # If you need really specific processing, you can instead override the process method
+
+ sub process
+ {
+ my ($self, $options) = @_;
+ $self->{options} = $options;
+
+ $options->{parent}->{items}->updateSelectedItemInfoFromPanel;
+ my $alreadySaved = 0;
+ if ($options->{newList})
+ {
+ return if !$options->{parent}->checkAndSave;
+ $alreadySaved = 1;
+ $options->{parent}->setFile('');
+ }
+ $self->{options}->{parent}->setWaitCursor($self->{options}->{lang}->{ImportListTitle}.' ('.$options->{file}.')');
+ my @tmpArray = @{$self->getItemsArray($options->{file})};
+
+ if ($self->{parsingError})
+ {
+ $self->{options}->{parent}->restoreCursor;
+ return $self->getEndInfo;
+ }
+
+ my $realModel = $self->getModelName;
+
+ # Here we really know the model so we force a new list if needed
+ if (($options->{newList})
+ || ($options->{parent}->{model}->getName ne $realModel))
+ {
+ $options->{parent}->newList($realModel, $self->{modelAlreadySet}, $alreadySaved);
+ }
+
+ my $generateId = $self->generateId;
+ foreach (@tmpArray)
+ {
+ $options->{parent}->{items}->addItem($_, !$generateId, 1);
+ }
+ $options->{parent}->{items}->unselect;
+ $self->{options}->{parent}->restoreCursor;
+
+ $options->{parent}->checkPanelVisibility;
+ $options->{parent}->selectFirst;
+ $options->{parent}->markAsUpdated;
+ $options->{parent}->viewAllItems;
+ return $self->getEndInfo;
+ }
+
+ # This method could only be use if $self->{model} has been initialized
+ sub copyPictures
+ {
+ my ($self, $itemsArray, $file) = @_;
+ return if !$self->{model};
+ foreach my $item(@$itemsArray)
+ {
+ my $title = $item->{$self->{model}->{commonFields}->{title}};
+ foreach my $field(@{$self->{model}->{fieldsImage}})
+ {
+ (my $suffix = $item->{$field}) =~ s/.*?(\.[^.]*)$/$1/;
+ my $imageFile = $self->{options}->{parent}->getUniqueImageFileName($suffix, $title);
+ copy(GCUtils::getDisplayedImage($item->{$field}, '', $file),
+ $imageFile)
+ if $item->{$field};
+ $item->{$field} = $imageFile;
+ }
+ }
+ }
+
+ # 3 methods below are created to implement interface
+ # from GCFrame plugins could need to simulate if using
+ # some backends
+ sub preloadModel
+ {
+ my ($self, $model) = @_;
+ # Preload the model into the factory cache
+ $self->{modelsFactory}->getModel($model);
+ }
+
+ sub setCurrentModel
+ {
+ my ($self, $model) = @_;
+ $self->{model} = $self->{modelsFactory}->getModel($model);
+ }
+
+ sub setCurrentModelFromInline
+ {
+ my ($self, $container) = @_;
+ $self->{model} = GCModelLoader->newFromInline($self, $container);
+ }
+}
+
+1;