/usr/share/perl5/Mail/Server/IMAP4/List.pm is in libmail-box-perl 2.099-1.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
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 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 | # Copyrights 2001-2011 by Mark Overmeer.
# For other contributors see ChangeLog.
# See the manual pages for details on the licensing terms.
# Pod stripped from pm file by OODoc 2.00.
use strict;
use warnings;
package Mail::Server::IMAP4::List;
use vars '$VERSION';
$VERSION = '2.099';
sub new($)
{ my ($class, %args) = @_;
my $self = bless {}, $class;
my $user = $self->{MSIL_user} = $args{user};
$self->{MSIL_folders} = $args{folders};
$self->{MSIL_inbox} = $args{inbox};
$self->{MSIL_delim} = exists $args{delimiter} ? $args{delimiter} : '/';
$self;
}
#------------------------------------------
sub delimiter(;$)
{ my $delim = shift->{MSIL_delim};
ref $delim ? $delim->(shift) : $delim;
}
#------------------------------------------
sub user() { shift->{MSIL_user} }
#------------------------------------------
sub folders()
{ my $self = shift;
$self->{MSIL_folders} || $self->user->topfolder;
}
#------------------------------------------
sub inbox()
{ my $self = shift;
$self->{MSIL_inbox} || $self->user->inbox;
}
#------------------------------------------
sub list($$)
{ my ($self, $base, $pattern) = @_;
return [ '(\Noselect)', $self->delimiter($base), '' ]
if $pattern eq '';
my $delim = $self->delimiter($base);
my @path = split $delim, $base;
my $folder = $self->folders;
while(@path && defined $folder)
{ $folder = $folder->folder(shift @path);
}
defined $folder or return ();
my @pattern = split $delim, $pattern;
return $self->_list($folder, $delim, @pattern);
}
sub _list($$@)
{ my ($self, $folder, $delim) = (shift, shift, shift);
if(!@_)
{ my @flags;
push @flags, '\Noselect'
if $folder->onlySubfolders || $folder->deleted;
push @flags, '\Noinferiors' unless $folder->inferiors;
my $marked = $folder->marked;
push @flags, ($marked ? '\Marked' : '\Unmarked')
if defined $marked;
local $" = ' ';
# This is not always correct... should compose the name from the
# parts... but in nearly all cases, the following is sufficient.
my $name = $folder->fullname;
for($name)
{ s/^=//;
s![/\\]!$delim!g;
}
return [ "(@flags)", $delim, $name ];
}
my $pat = shift;
if($pat eq '%')
{ my $subs = $folder->subfolders
or return $self->_list($folder, $delim);
return map { $self->_list($_, $delim, @_) } $subs->sorted;
}
if($pat eq '*')
{ my @own = $self->_list($folder, $delim, @_);
my $subs = $folder->subfolders or return @own;
return @own, map { $self->_list($_, $delim, '*', @_) } $subs->sorted;
}
$folder = $folder->find(subfolders => $pat) or return ();
$self->_list($folder, $delim, @_);
}
#------------------------------------------
1;
|