#
# Announce and Talk Handling routines
#
# Copyright (c) 2000 Dirk Koopman
#
# $Id$
#

package AnnTalk;

use strict;

use DXUtil;
use DXDebug;

use vars qw(%dup $duplth $dupage);

%dup = ();						# the duplicates hash
$duplth = 60;					# the length of text to use in the deduping
$dupage = 24*3600;               # the length of time to hold spot dups

# enter the spot for dup checking and return true if it is already a dup
sub dup
{
	my ($call, $to, $text) = @_; 
	my $d = $main::systime / 60;

	chomp $text;
	unpad($text);
	$text = substr($text, 0, $duplth) if length $text > $duplth; 
	my $dupkey = "$call|$to|$text";
	return 1 if exists $dup{$dupkey};
	$dup{$dupkey} = $d * 60;         # in seconds (to the nearest minute)
	return 0; 
}

# called every hour and cleans out the dup cache
sub process
{
	my $cutoff = $main::systime - $dupage;
	while (my ($key, $val) = each %dup) {
		delete $dup{$key} if $val < $cutoff;
	}
}

sub listdups
{
	my @out;
	for (sort { $dup{$a} <=> $dup{$b} } keys %dup) {
		my $val = $dup{$_};
		push @out, "$_ = $val (" . cldatetime($val) . ")";
	}
	return @out;
}

1; 

