sub add_tapelabel {
my $self = shift;
- my ($datestamp, $label, $comment, $reuse) = @_;
+ my ($datestamp, $label, $comment, $reuse, $meta, $barcode) = @_;
$reuse = 1 if !defined $reuse;
# prepend this (presumably new) volume to the beginning of the list
- unshift @{$self->{'tles'}}, {
- 'datestamp' => $datestamp,
- 'label' => $label,
- 'reuse' => $reuse,
- 'comment' => $comment,
+ my $tle = {
+ 'datestamp' => $datestamp,
+ 'label' => $label,
+ 'reuse' => $reuse,
+ 'barcode' => $barcode,
+ 'meta' => $meta,
+ 'comment' => $comment,
};
+ my $tles = $self->{'tles'};
+ if (!defined $tles->[0] ||
+ $tles->[0]->{'datestamp'} le $datestamp) {
+ unshift @{$tles}, $tle;
+ } elsif (defined $tles->[0] &&
+ $tles->[@$tles-1]->{'datestamp'} gt $datestamp) {
+ push @{$tles}, $tle;
+ } else {
+ my $added = 0;
+ for my $i (0..(@$tles-1)) {
+ if ($tles->[$i]->{'datestamp'} le $datestamp) {
+ splice @{$tles}, $i, 0, $tle;
+ $added = 1;
+ last;
+ }
+ }
+ push @{$tles}, $tle if !$added;
+ }
$self->_update_positions();
}
my $datestamp = $tle->{'datestamp'};
my $label = $tle->{'label'};
my $reuse = $tle->{'reuse'} ? 'reuse' : 'no-reuse';
+ my $barcode = (defined $tle->{'barcode'})? (" BARCODE:" . $tle->{'barcode'}) : '';
+ my $meta = (defined $tle->{'meta'})? (" META:" . $tle->{'meta'}) : '';
my $comment = (defined $tle->{'comment'})? (" #" . $tle->{'comment'}) : '';
- $result &&= print $fhn "$datestamp $label $reuse$comment\n";
+ $result &&= print $fhn "$datestamp $label $reuse$barcode$meta$comment\n";
}
my $result_close = close($fhn);
$result &&= $result_close;
my @tles;
open(my $fh, "<", $self->{'filename'}) or return $self;
while (my $line = <$fh>) {
- my ($datestamp, $label, $reuse, $comment)
- = $line =~ m/^([0-9]*)\s([^\s]*)\s(reuse|no-reuse)\s*(?:\#(.*))?$/mx;
+ my ($datestamp, $label, $reuse, $barcode, $meta, $comment)
+ = $line =~ m/^([0-9]*)\s([^\s]*)\s(reuse|no-reuse)\s*(?:BARCODE:([^\s]*))?\s*(?:META:([^\s]*))?\s*(?:\#(.*))?$/mx;
next if !defined $datestamp; # silently filter out bogus lines
push @tles, {
'datestamp' => $datestamp,
'label' => $label,
'reuse' => ($reuse eq 'reuse'),
+ 'barcode' => $barcode,
+ 'meta' => $meta,
'comment' => $comment,
};
}