Files
racalmas/website/agenda/planung/show-playout.cgi
Milan 60aa3387f0 verify uploads and playout
check if attributes for uploaded audio match expected ranges and mark
them by colors to help finding issues with duration, channels, RMS, mode
(CBR, ABR), bitrate.

increase upload limit to 400 MB for audio
2019-06-30 01:26:06 +02:00

169 lines
4.9 KiB
Perl
Executable File

#!/usr/bin/perl
use strict;
use warnings;
no warnings 'redefine';
use Data::Dumper;
use ModPerl::Util ();
use config;
use log;
use localization;
use auth;
use uac;
use studios;
use series;
use template;
use playout;
use audio;
binmode STDOUT, ":utf8";
my $r = shift;
( my $cgi, my $params, my $error ) = params::get($r);
my $config = config::get('../config/config.cgi');
my $debug = $config->{system}->{debug};
my ( $user, $expires ) = auth::get_user( $config, $params, $cgi );
return if ( !defined $user ) || ( $user eq '' );
my $user_presets = uac::get_user_presets(
$config,
{
project_id => $params->{project_id},
studio_id => $params->{studio_id},
user => $user
}
);
$params->{default_studio_id} = $user_presets->{studio_id};
$params = uac::setDefaultStudio( $params, $user_presets );
$params = uac::setDefaultProject( $params, $user_presets );
my $request = {
url => $ENV{QUERY_STRING} || '',
params => {
original => $params,
checked => check_params( $config, $params ),
},
};
$request = uac::prepare_request( $request, $user_presets );
$params = $request->{params}->{checked};
#process header
unless ( params::isJson() ) {
my $headerParams = uac::set_template_permissions( $request->{permissions}, $params );
$headerParams->{loc} = localization::get( $config, { user => $user, file => 'menu' } );
template::process( $config, 'print', template::check( $config, 'default.html' ),
$headerParams );
}
return unless uac::check( $config, $params, $user_presets ) == 1;
print q{
<script src="js/show-playout.js" type="text/javascript"></script>
<link rel="stylesheet" href="css/show-playout.css" type="text/css" />
} unless (params::isJson);
my $permissions = $request->{permissions};
$params->{action} = '' unless defined $params->{action};
$params->{error} = $error || '';
showPlayout( $config, $request );
print STDERR "$0 ERROR: " . $params->{error} . "\n" if $params->{error} ne '';
$params->{loc} =
localization::get( $config, { user => $params->{presets}->{user}, file => 'event,comment' } );
template::process( $config, 'print', $params->{template}, $params );
exit;
sub showPlayout {
my $config = shift;
my $request = shift;
my $params = $request->{params}->{checked};
my $permissions = $request->{permissions};
for my $attr ( 'project_id', 'studio_id' ) {
unless ( defined $params->{$attr} ) {
uac::print_error( "missing " . $attr . " to show playout" );
return;
}
}
my $today = time::time_to_date( time() );
my $startDate = time::add_days_to_date( $today, -14 );
my $events = playout::get_scheduled(
$config,
{
project_id => $params->{project_id},
studio_id => $params->{studio_id},
order => 'modified_at asc, start asc',
from => $startDate
}
);
unless ( defined $events ) {
uac::print_error("not found");
return;
}
for my $event (@$events) {
$event->{stream_size} ||= '';
$event->{stream_size} =~ s/(\d)(\d\d\d)$/$1\.$2/g;
$event->{stream_size} =~ s/(\d)(\d\d\d\.\d\d\d)$/$1\.$2/g;
$event->{duration} =~ s/(\d\.\d)(\d+)$/$1/g;
$event->{duration} =~ s/(\d)\.0/$1/g;
$event->{rms_left} = audio::formatLoudness( $event->{rms_left} );
$event->{rms_right} = audio::formatLoudness( $event->{rms_right} );
$event->{bitrate} = audio::formatBitrate( $event->{bitrate} );
$event->{bitrate_mode} = audio::formatBitrateMode( $event->{bitrate_mode} );
$event->{sampling_rate} = audio::formatSamplingRate( $event->{sampling_rate} );
$event->{duration} = audio::formatDuration(
$event->{duration},
$event->{event_duration},
sprintf( "%.1g h", $event->{duration} / 3600)
);
$event->{channels} = audio::formatChannels( $event->{channels} );
if ( $event->{start} lt $today ) {
$event->{class} = "past";
}
}
$params->{events} = $events;
}
sub check_params {
my $config = shift;
my $params = shift;
my $checked = {};
$checked->{error} = '';
$checked->{template} = template::check( $config, $params->{template}, 'show_playout' );
#numeric values
for my $param ( 'project_id', 'studio_id', 'default_studio_id', 'series_id', 'event_id', 'id' )
{
if ( ( defined $params->{$param} ) && ( $params->{$param} =~ /^\d+$/ ) ) {
$checked->{$param} = $params->{$param};
}
}
if ( defined $checked->{studio_id} ) {
$checked->{default_studio_id} = $checked->{studio_id};
} else {
$checked->{studio_id} = -1;
}
#word
for my $param ('debug') {
if ( ( defined $params->{$param} ) && ( $params->{$param} =~ /^\s*(.+?)\s*$/ ) ) {
$checked->{$param} = $1;
}
}
return $checked;
}