diff options
Diffstat (limited to 'tools/ARDOUR/SourceInfoLoader.pm')
-rw-r--r-- | tools/ARDOUR/SourceInfoLoader.pm | 75 |
1 files changed, 75 insertions, 0 deletions
diff --git a/tools/ARDOUR/SourceInfoLoader.pm b/tools/ARDOUR/SourceInfoLoader.pm new file mode 100644 index 0000000000..ec327d91f6 --- /dev/null +++ b/tools/ARDOUR/SourceInfoLoader.pm @@ -0,0 +1,75 @@ +package ARDOUR::SourceInfoLoader; + + +use XML::Handler::Subs; + +@ISA = qw( XML::Handler::Subs ); + +$VERSION = 1.0; + + +sub new { + my ($type, $sessionName) = @_; + + my $self = $type->SUPER::new(); + + $self->{SessionName} = $sessionName; + $self->{InRegions} = 0; + %self->{Sources} = {}; + + + return $self; +} + +sub start_element { + my $self = shift; + my $element = shift; + + my $atts = $element->{Attributes}; + + if ( $element->{Name} eq "Source") { + if ( ! -f "interchange/".$sessionName."/audiofiles/".$atts->{name}) { + $atts->{calculated_length} = 1; + $self->{Sources}->{$atts->{id}} = $atts; + } + } + + + if ( $self->{InRegions} eq 1 && $element->{Name} eq "Region") { + #print "Looking at region ".$atts->{id}."\n"; + my $num = 0; + + my $region_length = $atts->{length}; + while ( $atts->{"source-".$num} ne "" ) { + + if ($region_length > $self->{Sources}->{$atts->{"source-".$num}}->{calculated_length} ) { + $self->{Sources}->{$atts->{"source-".$num}}->{calculated_length} = $region_length; + } + + $num++; + } + } + + if ( $element->{Name} eq "Regions") { + $self->{InRegions} = 1; + #print "In regions\n"; + } + + +} + +sub end_element { + my $self = shift; + my $element = shift; + + if ( $element->{Name} eq "Regions") { + $self->{InRegions} = 0; + #print "Out of regions\n"; + } + +} + +1; + + + |