File: Subset.pm

package info (click to toggle)
libmail-box-perl 4.01-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 1,744 kB
  • sloc: perl: 9,021; makefile: 6
file content (94 lines) | stat: -rw-r--r-- 1,982 bytes parent folder | download
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
# 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::Head::Subset;{
our $VERSION = '4.01';
}

use parent 'Mail::Message::Head';

use strict;
use warnings;

use Log::Report      'mail-box', import => [ qw// ];

use Object::Realize::Later
	becomes        => 'Mail::Message::Head::Complete',
	realize        => 'load',
	believe_caller => 1;

use Date::Parse       qw/str2time/;

#--------------------

sub count($)
{	my ($self, $name) = @_;
	my @values = $self->get($name)
		or return $self->load->count($name);
	scalar @values;
}


sub get($;$)
{	my $self = shift;

	if(wantarray)
	{	my @values = $self->SUPER::get(@_);
		return @values if @values;
	}
	else
	{	my $value  = $self->SUPER::get(@_);
		return $value  if defined $value;
	}

	$self->load->get(@_);
}


#--------------------

sub guessBodySize()
{	my $self = shift;

	my $cl = $self->SUPER::get('Content-Length');
	return $1 if defined $cl && $cl =~ m/(\d+)/;

	my $lines = $self->SUPER::get('Lines');   # 40 chars per lines
	defined $lines && $lines =~ m/(\d+)/ ? $1 * 40 : undef
}

# Be careful not to trigger loading: this is not the thoroughness
# we want from this method.

sub guessTimestamp()
{	my $self = shift;
	return $self->{MMHS_timestamp} if $self->{MMHS_timestamp};

	my $stamp;
	if(my $date = $self->SUPER::get('date'))
	{	$stamp = str2time($date, 'GMT');
	}

	unless($stamp)
	{	foreach my $time ($self->SUPER::get('received'))
		{	$stamp = str2time($time, 'GMT');
			last if $stamp;
		}
	}

	$self->{MMHS_timestamp} = $stamp;
}

#--------------------

sub load() { $_[0] = $_[0]->message->loadHead }

1;