aboutsummaryrefslogtreecommitdiffstats
path: root/contrib/scripts/messages-expire.pl
blob: bb4fec5b38d2ee9802717b02b5776714c9d9a6ca (plain)
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
#!/usr/bin/perl
#
# Script to expire voicemail after a specified number of days
# by Steve Creel <screel@turbs.com>
# 

# Directory housing the voicemail spool for asterisk
$dir = "/var/spool/asterisk/voicemail";

# Context for which the script should be running
$context = "default";

# Age (Delete files older than $age days old)
$age = 31;

# Delete all files older than $age (but named msg????.??? to be sure
# we don't delete greetings or the user's name)

system('find '.$dir.'/'.$context.' -name msg????.??? -mtime +'.$age.' -exec rm {} \; -exec echo Deleted {} \;');

# For testing - what number to we start when we renumber?
$start = "0";

# Rename to msg and a 4 digit number, 0 padded.
$fnbase = sprintf "msg%04d", $start;

# Make $dir include the context too
$dir.="/".$context;

( -d $dir ) || die "Can't read list of mailboxes ($dir): $!\n"; 
@mailboxes = `ls -A1 $dir`;
chomp(@mailboxes);

$save_fnbase = $fnbase;

foreach $mailbox (@mailboxes) {

  ( -d $dir."/".$mailbox) || die "Can't read list of folders (".$dir."/".$mailbox."): $!\n";
  @folders = `ls -A1 $dir/$mailbox`;
  chomp(@folders);

  foreach $folder (@folders) {
   if (-d $dir."/".$mailbox."/".$folder) {
    ( -d $dir."/".$mailbox."/".$folder) || die "Can't read list of messages (".$dir."/".$mailbox."/".$folder.") $!\n";
    @files = `ls -A1 $dir/$mailbox/$folder/`;

    # Sort so everything is in proper order.
    @files = sort @files;
    chomp(@files);

    # If there is still (after deleting old files earlier in the
    # script) a msg0000.txt, we don't need to shuffle anything
    # in this folder.
    if (-f $dir."/".$mailbox."/".$folder."/msg0000.txt") { next; }

    foreach $ext (("WAV", "wav", "gsm", "txt")) {
      # Reset the fnbase for each file type
      $fnbase = $save_fnbase;

      foreach $file (@files) {
	if ( $file =~ /$ext/ ) {
		chdir($dir."/".$mailbox."/".$folder."/") || die "Can't change folder: $!";
		print "Renaming: ".$dir."/".$mailbox."/".$folder."/".$file." to ".$fnbase.".".$ext."\n";
		rename($file, $fnbase.".".$ext) || die "Cannot rename: $!";
		$fnbase++;
	}
      }
    }
   }
  }
}

__END__