#!/usr/bin/perl -w # # rhrdlibs # # Copyright (C) 2015-2016 Christian Pointner # # This file is part of rhrdlibs. # # rhrdlibs is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as published by # the Free Software Foundation, either version 3 of the License, or # any later version. # # rhrdlibs is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU Affero General Public License for more details. # # You should have received a copy of the GNU Affero General Public License # along with rhrdlibs. If not, see . # use strict; # TODO: remove me!!! use lib "../lib/"; use RHRD::rddb; use RHRD::utils; use DateTime; use Date::Calc; sub print_usage { print STDERR "Usage: rhrd-schedules generate YYYY-MM-DD\n" . " rhrd-schedules show (W1|W2|W3|W4|ALL) (MO|TU|WE|TH|FR|SA|SU|ALL)\n"; } sub generate { my ($ctx, $year, $month, $day) = @_; my ($ret, $data) = RHRD::utils::fetch_parse_json("https://pv.helsinki.at/export/day_schedule/$year/$month/$day", "rhrd-schedules"); if(!$ret) { print STDERR "Error fetching export from PV: $data\n"; return 1; } for my $entry (@{$data}) { my $start = ${$entry}{'start'}; my $title = ${$entry}{'title'}; my $showid = ${$entry}{'id'}; print "$start: ($showid) $title\n"; } # TODO: create day log in rddb return 0; } sub show__day { my ($ctx, @date) = @_; print "https://pv.helsinki.at/export/day_schedule/$date[0]/$date[1]/$date[2]\n"; my ($ret, $data) = RHRD::utils::fetch_parse_json("https://pv.helsinki.at/export/day_schedule/$date[0]/$date[1]/$date[2]", "rhrd-schedules"); if(!$ret) { print STDERR "Error fetching export from PV: $data\n"; return 1; } my $dow = Date::Calc::Day_of_Week(@date); my $week = RHRD::utils::get_rd_week(DateTime->new(year => $date[0], month => $date[1], day => $date[2], hour => 12)); my $errcnt = 0; for my $entry (@{$data}) { my $start = ${$entry}{'start'}; my $title = ${$entry}{'title'}; my $pvid = ${$entry}{'id'}; my $showid = ${$entry}{'automation-id'}; next if $pvid == 1; # 'Unmoderiertes Musikprogramm' print " $start: ($showid) -> "; if($showid > 0) { my ($show, $status, $errorstring) = RHRD::rddb::get_show_info($ctx, $showid); if(!defined $show) { print "$status: $errorstring\n"; $errcnt++; } else { my @weeks = split('', ${$show}{'RHYTHM'}); if ($title ne ${$show}{'TITLE'}) { print "WARNING: title mismatch (PV: '$title' != RD: '" . ${$show}{'TITLE'} . "')\n"; $errcnt++; } elsif ($dow != ${$show}{'DOW'}) { print "WARNING: wrong day of week (PV: " . Date::Calc::Day_of_Week_to_Text($dow) . " != RD: " . Date::Calc::Day_of_Week_to_Text(${$show}{'DOW'}) . ")\n"; $errcnt++; } elsif ($weeks[$week-1] != '1') { print "WARNING: this is week $week but show rhythm is: " . ${$show}{'RHYTHM'} . " -> show shouldn't air in this week!\n"; $errcnt++; } else { # TODO: check for STARTTIME # TODO: check for LEN (missing endtime in pv export...) print "OK: $title\n"; } } } else { print "ERROR: show '$pvid|$title' not configured\n"; $errcnt++; } } return $errcnt; } sub show { my ($ctx, $week, $dow) = @_; # TODO: parse week number and day my @date = (2016, 4, 14); # print "$date[0].$date[1].$date[2] (" . Date::Calc::Day_of_Week_to_Text() . "):\n"; print Date::Calc::Date_to_Text(@date) . ":\n"; my $errcnt = show__day($ctx, @date); print " -> $errcnt errors.\n\n"; return 0; } my $num_args = $#ARGV + 1; if($num_args < 1) { print_usage(); exit(1); } my $cmd = $ARGV[0]; my $ret = 0; my ($ctx, undef, $errorstring) = RHRD::rddb::init(); if(defined $ctx) { if($cmd eq "generate") { if($num_args == 2 && $ARGV[1] =~ m/^(\d{4})-(\d{2})-(\d{2})$/) { $ret = generate($ctx, $1, $2, $3); } else { print_usage(); $ret = 1; } } elsif($cmd eq "show") { if($num_args != 3) { print_usage(); $ret = 1; } else { $ret = show($ctx, $ARGV[1], $ARGV[2]); } } else { print_usage(); $ret = 1; } RHRD::rddb::destroy($ctx); } else { print STDERR "$errorstring\n"; $ret = 1; } exit $ret;