1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107
|
# This code is part of Perl distribution Mail-Box version 4.01.
# The POD got stripped from this file by OODoc version 3.05.
# For contributors see file ChangeLog.
# This software is copyright (c) 2001-2025 by Mark Overmeer.
# This is free software; you can redistribute it and/or modify it under
# the same terms as the Perl 5 programming language system itself.
# SPDX-License-Identifier: Artistic-1.0-Perl OR GPL-1.0-or-later
package Mail::Message::Body::Delayed;{
our $VERSION = '4.01';
}
use parent 'Mail::Reporter';
use strict;
use warnings;
use Log::Report 'mail-box', import => [ qw/__x error/ ];
use Object::Realize::Later
becomes => 'Mail::Message::Body',
realize => 'load',
warn_realization => 0,
believe_caller => 1;
use Scalar::Util qw/weaken/;
#--------------------
use overload
'""' => 'string_unless_carp',
bool => sub {1},
'@{}' => sub { $_[0]->load->lines };
#--------------------
sub init($)
{ my ($self, $args) = @_;
$self->SUPER::init($args);
$self->{MMB_seqnr} = -1; # for overloaded body comparison
$self->{MMBD_message} = $args->{message}
or error __x"a message must be specified to a delayed body.";
weaken($self->{MMBD_message});
$self;
}
#--------------------
sub message() { $_[0]->{MMBD_message} }
#--------------------
sub modified(;$)
{ return 0 if @_==1 || !$_[1];
shift->forceRealize(shift);
}
sub isModified() { 0 }
sub isDelayed() { 1 }
sub isMultipart() { $_[0]->message->head->isMultipart }
sub guessSize() { $_[0]->{MMBD_size} }
sub nrLines() { $_[0]->{MMBD_lines} // $_[0]->forceRealize->nrLines }
sub string_unless_carp()
{ my $self = shift;
return $self->load->string if (caller)[0] ne 'Carp';
my $class = ref $self =~ s/^Mail::Message/MM/gr;
"$class object";
}
#--------------------
sub read($$;$@)
{ my ($self, $parser, $head, $bodytype) = splice @_, 0, 4;
$self->{MMBD_parser} = $parser;
@$self{ qw/MMBD_begin MMBD_end MMBD_size MMBD_lines/ } = $parser->bodyDelayed(@_);
$self;
}
sub fileLocation(;@) {
my $self = shift;
@_ ? (@$self{ qw/MMBD_begin MMBD_end/ } = @_) : @$self{ qw/MMBD_begin MMBD_end/ };
}
sub moveLocation($)
{ my ($self, $dist) = @_;
$self->{MMBD_begin} -= $dist;
$self->{MMBD_end} -= $dist;
$self;
}
sub load() { $_[0] = $_[0]->message->loadBody }
1;
|