App-MonM
view release on metacpan or search on metacpan
lib/App/MonM/Util.pm view on Meta::CPAN
SFT_DEFAULT => '[00:00-23:59]',
OFFSET_START => 0, # 00:00
OFFSET_FINISH => 60*60*24-1, # 23:59
};
sub new {
my $class = shift;
my %args = @_;
my $self = bless {
calendar => {}, # { channel_name => [ { weekday_index => [start, finish] } ] }
added => {}, # { channel_name => at }
}, $class;
return $self;
}
sub getAtString {
my $self = shift;
my $chname = shift;
croak("The channel name missing") unless $chname;
lib/App/MonM/Util.pm view on Meta::CPAN
# Maybe already exists? - return
my $added = $self->{added};
return $self if $added->{$chname} && $added->{$chname} eq $at;
$added->{$chname} = $at;
# Split by days & times
my @wdt_blocks = ();
while ($at =~ /([a-z\-]{3,18}(\[([0-9\-:,;]+|none|no|off)\])?)/ig) {
push @wdt_blocks, _parse_wdt($1);
}
$self->{calendar}{$chname} = [@wdt_blocks];
return $self;
}
sub check {
my $self = shift;
my $chname = shift || "default";
my $test = shift || time();
# Exists
return 1 unless exists $self->{calendar}{$chname}; # No calendar - no limits
my $calendar = array($self->{calendar}, $chname);
return 0 if is_void($calendar); # No allow intervals in the calendar - denied
# Get test values
my ($sec, $min, $hour, $mday, $mon, $year, $wday, $yday, $isdst) = localtime($test);
my $t = $hour*60*60 + $min*60 + $sec;
# Check
my $allow = 0; # denied by default
foreach my $int (@$calendar) {
next unless is_hash($int);
my $sec = $int->{$wday};
next unless $sec && is_array($sec);
my ($s, $f) = (($sec->[0] || 0), ($sec->[1] || 0));
next unless $s+$f;
if (($t >= $s and $t <= $f) || ($t >= $f and $t <= $s)) {
$allow++;
next;
}
}
( run in 2.735 seconds using v1.01-cache-2.11-cpan-39bf76dae61 )