summaryrefslogtreecommitdiff
path: root/rhimport-mz
diff options
context:
space:
mode:
Diffstat (limited to 'rhimport-mz')
-rwxr-xr-xrhimport-mz216
1 files changed, 216 insertions, 0 deletions
diff --git a/rhimport-mz b/rhimport-mz
new file mode 100755
index 0000000..224cfb4
--- /dev/null
+++ b/rhimport-mz
@@ -0,0 +1,216 @@
+#!/usr/bin/perl -w
+#
+#
+# rhimport
+#
+# Copyright (C) 2009 Christian Pointner <equinox@helsinki.at>
+#
+# This file is part of rhimport.
+#
+# rhimport 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.
+#
+# rhimport 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 rhimport. If not, see <http://www.gnu.org/licenses/>.
+#
+
+use strict;
+use Switch;
+use DBI;
+use Date::Calc;
+use Time::localtime;
+use IO::Handle;
+use IPC::Open3;
+use File::Slurp;
+
+use lib '/usr/local/share/rhimport/';
+use rhimport;
+
+my $DBHOST = "airplay";
+my $DBUSER = "rivendell";
+my $DBPW = "lldriven";
+my $DB = "rivendell";
+
+my @STATIC_FILES = ($ENV{'HOME'} . "/frontex", $ENV{'HOME'} . "/maribor" );
+my $ZF_NOTE_FILE = $ENV{'HOME'} . "/rhimport-zf.last_note";
+my $ZF_NEW_FILE = $ENV{'HOME'} . "/rhimport-zf.is_new";
+my $PV_ID = '320';
+
+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 = DBI->connect("DBI:mysql:$DB:$DBHOST","$DBUSER","$DBPW") or die "Database Error: $DBI::errstr";
+my @allowed_dbs = rhimport::get_dropboxes($dbh, $user, $group);
+if(scalar(@allowed_dbs) != 1) {
+ print "found no or more than one Dropboxes for this group?!\n";
+ $dbh->disconnect();
+ exit 1;
+}
+my $dropbox = $allowed_dbs[0]->{'PATH'};
+
+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', chomp => 1);
+ return "" unless ($lines[0]);
+ return $lines[0];
+};
+
+sub get_note {
+ my ($file) = @_;
+ my @lines = read_file($file, binmode => ':utf8', err_mode => 'quiet');
+ chomp($lines[0]);
+ $lines[0] = "<p><strong>$lines[0]</strong></p>\n";
+ return "" unless ($lines[0]);
+ 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);
+
+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";
+ }
+
+ $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");
+}
+
+print "\nsummary:\n" . $sum_title . "\n\n" . $sum_text . "\n";
+#rhimport::pv_add_note($sum_title, $sum_text, $PV_ID, sprintf("%04d-%02d-%02d", $import_day[0], $import_day[1], $import_day[2]), "1");
+print "\n";
+
+
+print "will import " . join(", ", @files) . " to dropbox $dropbox\n";
+
+
+my $error_cb = sub {
+ my ($text) = @_;
+
+ print "\n$text";
+ return 0;
+};
+
+rhimport::check_key_file() or die "Import Key not found, use rhimport-create-id to create one\n";
+
+my $ret;
+my $log = rhimport::clear_carts($dbh, $group, 0);
+my ($cart, $high_cart) = rhimport::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) = rhimport::import_single($file, $dropbox, $user, 0, $error_cb);
+ $log .= $import_log;
+ last unless $ret;
+
+ $cart++;
+}
+
+$dbh->disconnect();
+
+if(!$ret) {
+ print "\nImport Error:\n";
+ print $log;
+ exit 1;
+}
+
+unlink($ZF_NEW_FILE);
+
+exit 0;