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 1.608 second using v1.01-cache-2.11-cpan-5dc5da66d9d )