summaryrefslogtreecommitdiff
path: root/rhautoimport-mz
diff options
context:
space:
mode:
Diffstat (limited to 'rhautoimport-mz')
-rwxr-xr-xrhautoimport-mz247
1 files changed, 247 insertions, 0 deletions
diff --git a/rhautoimport-mz b/rhautoimport-mz
new file mode 100755
index 0000000..fa50a69
--- /dev/null
+++ b/rhautoimport-mz
@@ -0,0 +1,247 @@
+#!/usr/bin/perl -w
+#
+#
+# rhautoimport
+#
+# Copyright (C) 2009-2015 Christian Pointner <equinox@helsinki.at>
+#
+# This file is part of rhautoimport.
+#
+# rhautoimport is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# any later version.
+#
+# rhautoimport 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 General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with rhautoimport. If not, see <http://www.gnu.org/licenses/>.
+#
+
+use strict;
+use Switch;
+use Date::Calc;
+use Time::localtime;
+use IO::Handle;
+use IPC::Open3;
+use File::Slurp;
+use RHRD::rddb;
+
+use lib '/usr/local/share/rhautoimport/';
+use rhautoimport;
+
+
+my @STATIC_FILES = ($ENV{'HOME'} . "/frontex", $ENV{'HOME'} . "/maribor" );
+
+my $STAT_FILE = $ENV{'HOME'} . "/rhautoimport-mz.stat";
+my $ZF_NOTE_FILE = $ENV{'HOME'} . "/rhautoimport-zf.last_note";
+my $ZF_NEW_FILE = $ENV{'HOME'} . "/rhautoimport-zf.is_new";
+my $PV_ID = '352';
+
+binmode(STDIN, ":utf8");
+binmode(STDOUT, ":utf8");
+binmode(STDERR, ":utf8");
+
+if($#ARGV >= 0 && $ARGV[0] eq 'last') {
+ print "!!!This is the last attempt, there won't be a retry on error!!!\n"
+}
+
+my $user = `/usr/bin/id -un`;
+$user =~ s/\n//;
+
+my @today = Date::Calc::Today();
+my @next_day = Date::Calc::Add_Delta_Days(@today, 1);
+my $dow = Date::Calc::Day_of_Week(@today);
+if($dow == 5) {
+ @next_day = Date::Calc::Add_Delta_Days(@today, 3);
+}
+
+print "today: " . Date::Calc::Date_to_Text(@today) . "\n";
+print "next day would be: " . Date::Calc::Date_to_Text(@next_day) . "\n";
+my @import_day = @next_day;
+if(localtime->hour < 12) {
+ print "It's forenoon, assuming to import for today\n";
+ @import_day = @today;
+}
+print "day of broadcast: " . Date::Calc::Date_to_Text(@import_day) . "\n";
+
+
+$dow = Date::Calc::Day_of_Week(@import_day);
+my $group = "";
+switch($dow) {
+ case 1 { $group = "mahlzeitMo" }
+ case 2 { $group = "mahlzeitDi" }
+ case 3 { $group = "mahlzeitMi" }
+ case 4 { $group = "mahlzeitDo" }
+ case 5 { $group = "mahlzeitFr" }
+ else { print("invalid day of week?!\n"); exit 1; }
+}
+
+my ($dbh, $errorstring) = RHRD::rddb::opendb();
+if(!defined $dbh) {
+ print "$errorstring\n";
+ exit 1;
+}
+my @allowed_dbs = RHRD::rddb::get_dropboxes($dbh, $user, $group);
+if(!defined $allowed_dbs[0] && defined $allowed_dbs[2]) {
+ print "$allowed_dbs[2]\n";
+ exit 1;
+}
+
+if(scalar(@allowed_dbs) != 1) {
+ print "found no or more than one Dropboxes for this group?!\n";
+ RHRD::rddb::closedb($dbh);
+ exit 1;
+}
+my $dropbox = $allowed_dbs[0]->{'PATH'};
+
+
+my $import_date = sprintf("%04d-%02d-%02d", @import_day);
+my $current_date = `cat $STAT_FILE`;
+if($current_date eq $import_date) {
+ print "Already downloaded file of day in question\n";
+ RHRD::rddb::closedb($dbh);
+ exit 0;
+}
+
+unless(-e $ZF_NEW_FILE) {
+ print "zip-fm not imported yet - ";
+ if($#ARGV >= 0 && $ARGV[0] eq 'last') {
+ print "giving up, rebroadcasting last show";
+ } else {
+ print "will retry later\n";
+ exit 0,
+ }
+}
+
+
+sub read_first_line {
+ my ($file) = @_;
+ my @lines = read_file($file, binmode => ':utf8', err_mode => 'quiet');
+ return "" unless ($lines[0]);
+
+ chomp($lines[0]);
+ return $lines[0];
+};
+
+sub get_note {
+ my ($file) = @_;
+ my @lines = read_file($file, binmode => ':utf8', err_mode => 'quiet');
+ return "" unless ($lines[0]);
+
+ chomp($lines[0]);
+ $lines[0] = "<p><strong>$lines[0]</strong></p>\n";
+ return join('',@lines);
+};
+
+sub find_next_file {
+ my ($dir, $current) = @_;
+
+ my %files = ();
+ opendir(my $dh, $dir) or die $!;
+ while (my $file = readdir($dh)) {
+ next if ($file =~ m/^\./);
+ next if ($file =~ m/_notes$/);
+ $files{$file} = 1;
+ }
+ closedir($dh);
+
+ my $num = scalar keys %files;
+ foreach my $file (sort keys %files) {
+ if($file gt $current) {
+ return $num, $file;
+ }
+ $num--;
+ }
+
+ return 0, "";
+};
+
+my $sum_title = "zip-fm (WH)";
+my $sum_text = get_note($ZF_NOTE_FILE) . "<br/>\n";
+
+print "\nsearching local files:\n";
+
+my @files = ();
+my %next_files = ();
+foreach my $dir (@STATIC_FILES) {
+ my $file = read_first_line("$dir/.current");
+ if($file eq "") {
+ print " $dir: skipped !!! (no .current file or no more files)\n";
+ next;
+ }
+ my ($remaining, $next_file) = find_next_file($dir, $file);
+ if($remaining >= 1) {
+ print " $dir: adding $file\n (next: $next_file, $remaining files remaining)\n";
+ } else {
+ print " $dir: adding $file\n (this was the last file!!!!)\n";
+ }
+ $next_files{$dir} = $next_file;
+
+ $sum_title = "$sum_title, " . read_first_line("$dir/.sum_title");
+ $sum_text = $sum_text . "<br />\n" . get_note("$dir/$file" . "_notes");
+ foreach my $ext ("flac", "wav", "ogg", "mp3") {
+ push(@files, "$dir/.jingle.$ext") if(-e "$dir/.jingle.$ext");
+ }
+ push(@files, "$dir/$file");
+}
+$sum_text = $sum_text . "<br/><br/>\n";
+
+print "\nsummary:\n" . $sum_title . "\n\n" . $sum_text . "\n";
+rhautoimport::pv_add_note($sum_title, $sum_text, $PV_ID, sprintf("%04d-%02d-%02d", @import_day), "1");
+print "\n";
+
+
+print "will import " . join(", ", @files) . " to dropbox $dropbox\n";
+
+
+my $error_cb = sub {
+ my ($text) = @_;
+
+ print "\n$text";
+ return 0;
+};
+
+rhautoimport::check_key_file() or die "Import Key not found, use rhautoimport-create-id to create one\n";
+
+my $ret = 1;
+my $log = rhautoimport::clear_carts($dbh, $group, 0);
+my ($cart, $high_cart) = rhautoimport::get_cart_range($dbh, $group);
+foreach my $file (@files) {
+ if($cart > $high_cart) {
+ print "not enough carts - will ignore remaining files!!!";
+ last;
+ }
+ print " importing $file to cart $cart\n";
+ my $import_log;
+ ($ret, $import_log) = rhautoimport::import_single($file, $dropbox, $user, 0, $error_cb);
+ $log .= $import_log;
+ last unless $ret;
+
+ $cart++;
+}
+
+RHRD::rddb::closedb($dbh);
+
+if(!$ret) {
+ print "\nImport Error:\n";
+ print $log;
+ exit 1;
+}
+
+unlink($STAT_FILE);
+open(my $fhs, '>', $STAT_FILE);
+print $fhs $import_date;
+close($fhs);
+
+unlink($ZF_NEW_FILE);
+foreach my $dir (@STATIC_FILES) {
+ open(my $fhs, '>', "$dir/.current");
+ print $fhs $next_files{$dir} if ($next_files{$dir});
+ close($fhs);
+}
+
+exit 0;