File Coverage

lib/Asterisk/Voicemail.pm
Criterion Covered Total %
statement 25 121 20.6
branch 14 72 19.4
condition 1 12 8.3
subroutine 6 18 33.3
pod 0 16 0.0
total 46 239 19.2


line stmt bran cond sub pod time code
1             package Asterisk::Voicemail;
2              
3             require 5.004;
4              
5             =head1 NAME
6              
7             Asterisk::Voicemail - Stuff to deal with asterisk voicemail
8              
9             =head1 SYNOPSIS
10              
11             This is not completed yet
12              
13             =head1 DESCRIPTION
14              
15             description
16              
17             =cut
18              
19 1     1   558 use Asterisk;
  1         2  
  1         1239  
20              
21             @ISA = ( 'Asterisk' );
22              
23             $VERSION = '0.01';
24              
25             $DEBUG = 5;
26              
27 0     0 0 0 sub version { $VERSION; }
28              
29             sub new {
30 1     1 0 538 my ($class, %args) = @_;
31 1         2 my $self = {};
32 1   33     5 bless $self, ref $class || $class;
33             # while (my ($key,$value) = each %args) { $self->set($key,$value); }
34 1         2 return $self;
35             }
36              
37       0     sub DESTROY { }
38              
39             sub spooldirectory {
40 3     3 0 5 my ($self, $directory) = @_;
41              
42 3 100       4 if (defined($directory)) {
43 1         2 $self->{'spooldirectory'} = $directory;
44             } else {
45 2 100       7 $self->{'spooldirectory'} = '/var/spool/asterisk/vm' if (!defined($self->{'spooldirectory'}));
46             }
47              
48 3         8 return $self->{'spooldirectory'};
49             }
50              
51             sub sounddirectory {
52 3     3 0 4 my ($self, $directory) = @_;
53              
54 3 100       4 if (defined($directory)) {
55 1         2 $self->{'sounddirectory'} = $directory;
56             } else {
57 2 100       5 $self->{'sounddirectory'} = '/var/lib/asterisk/sounds' if (!defined($self->{'sounddirectory'}));
58             }
59              
60 3         6 return $self->{'sounddirectory'};
61             }
62              
63             sub serveremail {
64 3     3 0 4 my ($self, $email) = @_;
65              
66 3 100       6 $self->{'serveremail'} = $email if (defined($email));
67              
68 3         7 return $self->{'serveremail'};
69             }
70              
71             sub format {
72 0     0 0 0 my ($self, @formats) = @_;
73              
74 0 0       0 if (@formats) {
75 0         0 $self->{'formats'} = @formats;
76             }
77              
78 0         0 return $self->{'formats'};
79             }
80              
81             sub vmbox {
82 0     0 0 0 my ($self, $vmbox, $vmpass, $vmfn, $vmemail) = @_;
83              
84 0 0 0     0 if (defined($vmbox) && (defined($vmpass) || defined($vmfn) || defined($vmemail)) ) {
    0 0        
85 0 0       0 $self->{'vmbox'}{$vmbox}{'pass'} = $vmpass if (defined($vmpass));
86 0 0       0 $self->{'vmbox'}{$vmbox}{'fn'} = $vmfn if (defined($vmfn));
87 0 0       0 $self->{'vmbox'}{$vmbox}{'email'} = $vmemail if (defined($vmemail));
88             } elsif (defined($vmbox)) {
89             return ($self->{'vmbox'}{$vmbox}{'pass'},
90             $self->{'vmbox'}{$vmbox}{'fn'},
91 0         0 $self->{'vmbox'}{$vmbox}{'email'} );
92             }
93              
94             }
95              
96             sub getfolders {
97 0     0 0 0 my ($self, $vmbox) = @_;
98              
99 0         0 my @folders = ();
100              
101 0         0 my $spool = $self->spooldirectory();
102              
103 0         0 foreach $file (<$spool/$vmbox/*>) {
104 0 0       0 if ( -d $file ) {
105 0         0 $file =~ s/$spool\/$vmbox\///;
106 0         0 push(@folders, $file);
107             }
108             }
109 0         0 return @folders;
110             }
111              
112             sub configfile {
113 3     3 0 823 my ($self, $configfile) = @_;
114              
115 3 100       5 if (defined($configfile)) {
116 1         1 $self->{'configfile'} = $configfile;
117             } else {
118 2 100       8 $self->{'configfile'} = '/etc/asterisk/voicemail.conf' if (!defined($self->{'configfile'}));
119             }
120              
121 3         10 return $self->{'configfile'};
122             }
123              
124             sub readconfig {
125 0     0 0   my ($self) = @_;
126              
127 0           my $context = '';
128 0           my $line = '';
129              
130 0           my $configfile = $self->configfile();
131              
132 0 0         open(CF, "<$configfile") || die "Error loading $configfile: $!\n";
133 0           while ($line = ) {
134 0           chop($line);
135              
136 0           $line =~ s/;.*$//;
137 0           $line =~ s/\s*$//;
138              
139 0 0         if ($line =~ /^;/) {
    0          
    0          
    0          
    0          
    0          
140 0           next;
141             } elsif ($line =~ /^\s*$/) {
142 0           next;
143             } elsif ($line =~ /^\[(\w+)\]$/) {
144 0           $context = $1;
145 0 0         print STDERR "Context: $context\n" if ($DEBUG>3);
146             } elsif ($line =~ /^format\s*[=>]+\s*(.*)/) {
147 0           my $formats = $1;
148 0           $self->format(split(/|/, $formats));
149             } elsif ($line =~ /^serveremail\s*[=>]+\s*(.*)/) {
150 0           $self->serveremail($1);
151             } elsif ($line =~ /^(\d+)\s*[=>]+\s*(.*)/) {
152 0           my $vmbox = $1;
153 0           my $vmstr = $2;
154 0           my ($vmpass, $vmfn, $vmemail) = split(/,/, $vmstr);
155 0 0         print STDERR "VM BOX ($vmbox)\n" if ($DEBUG>3);
156 0           $self->vmbox($vmbox, $vmpass, $vmfn, $vmstr);
157             } else {
158 0 0         print STDERR "Unknown line: $line\n" if ($DEBUG);
159             }
160             }
161              
162 0           close(CF);
163             }
164              
165             sub appendsoundfile {
166 0     0 0   my ($self, $source, $dest) = @_;
167              
168 0 0         open(IN, "<$source") || return 0;
169 0 0         open(OUT, ">>$dest") || return 0;
170 0           while () {
171 0           print OUT $_;
172             }
173 0           close(IN);
174 0           close(OUT);
175 0           return 1;
176             }
177              
178             sub validmailbox {
179 0     0 0   my ($self, $vmbox) = @_;
180              
181 0 0         return 1 if ($self->vmbox($vmbox));
182 0           return 0;
183             }
184              
185             sub msgcount {
186 0     0 0   my ($self, $vmbox, $folder) = @_;
187              
188 0           my $count = 0;
189              
190 0 0 0       return $count if (!defined($vmbox) || !defined($folder));
191              
192 0           my $spool = $self->spooldirectory() . '/' . $vmbox . '/' . $folder;
193              
194 0 0         if (opendir(DIR, $spool)) {
195 0           my @msgs = grep(/^msg.*\.txt$/, readdir(DIR));
196 0           $count = $#msgs+1;
197 0           closedir(DIR);
198             }
199 0           return $count;
200             }
201              
202             sub msgcountstr {
203 0     0 0   my ($self, $vmbox, $folder) = @_;
204              
205 0           my $count = $self->msgcount($vmbox, $folder);
206              
207 0 0         if ($count > 1) {
    0          
208 0           return "$count messages";
209             } elsif ($count > 0) {
210 0           return "$count message";
211             } else {
212 0           return "no messages";
213             }
214             }
215              
216             sub createdefaultmailbox {
217 0     0 0   my ($self, $vmbox) = @_;
218              
219 0           my $spool = $self->spooldirectory();
220 0           my $sounddir = $self->sounddirectory();
221              
222 0           my $vmdir = "$spool/$vmbox";
223              
224              
225 0 0         if ( -d $vmdir ) {
226 0 0         print STDERR "Directory already exists: $vmdir\n" if ($DEBUG);
227             } else {
228 0 0         mkdir($vmdir, 0755) || return 0;
229 0 0         mkdir("$vmdir/INBOX", 0755) || return 0;
230             }
231              
232 0           $self->appendsoundfile("$sounddir/vm-theperson.gsm", "$vmdir/unavail.gsm");
233 0           $self->appendsoundfile("$sounddir/vm-theperson.gsm", "$vmdir/busy.gsm");
234 0           $self->appendsoundfile("$sounddir/vm-extension.gsm", "$vmdir/greet.gsm");
235              
236 0           foreach $chr (split(//, $vmbox)) {
237 0           $self->appendsoundfile("$sounddir/digits/$chr.gsm", "$vmdir/unavail.gsm");
238 0           $self->appendsoundfile("$sounddir/digits/$chr.gsm", "$vmdir/busy.gsm");
239 0           $self->appendsoundfile("$sounddir/digits/$chr.gsm", "$vmdir/greet.gsm");
240             }
241              
242 0           $self->appendsoundfile("$sounddir/vm-isunavail.gsm", "$vmdir/unavail.gsm");
243 0           $self->appendsoundfile("$sounddir/vm-isonphone.gsm", "$vmdir/busy.gsm");
244              
245 0           return 1;
246             }
247              
248             sub messages {
249 0     0 0   my ($self, $messages, $folder) = @_;
250              
251 0           my $path = $self->spooldirectory() . '/' . $mailbox . '/' . $folder;
252 0 0         if (opendir(DIR, $path)) {
253 0           my @msgs = sort grep(/^msg....\.txt$/, readdir(DIR));
254 0           closedir(DIR);
255 0           return map { s/^msg(....)\.txt$/$1/; $_ } @msgs;
  0            
  0            
256             }
257 0           return ();
258             }
259              
260             1;
261