#!/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 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 $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 ($rdtitle, $rdlog, $status, $errorstring) = RHRD::rddb::get_show_title_and_log($ctx, $showid); if(!defined $rdtitle || !defined $rdlog) { print "$status: $errorstring\n"; $errcnt++; } elsif ($title ne $rdtitle) { print "WARNING: title mismatch (PV: '$title' != RD: '$rdtitle')\n"; $errcnt++; } else { # TODO: check DayOfWeek!!! 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;