Files
racalmas/lib/calcms/audio_recordings.pm

222 lines
6.2 KiB
Perl

package audio_recordings;
use strict;
use warnings;
no warnings 'redefine';
use Data::Dumper;
use db();
#use base 'Exporter';
our @EXPORT_OK = qw(get_columns get);
# columns:
# id, project_id, studio_id, event_id
# path, size, created_by, created_at
# mastered, processed
# audioDuration, eventDuration, rmsLeft, rmsRight
sub get_columns($) {
my ($config) = @_;
my $dbh = db::connect($config);
return db::get_columns_hash( $dbh, 'calcms_audio_recordings' );
}
# get playout entries
sub get($$) {
my ($config, $condition) = @_;
my $date_range_include = 0;
$date_range_include = 1
if ( defined $condition->{date_range_include} ) && ( $condition->{date_range_include} == 1 );
my $dbh = db::connect($config);
my $conditions = [];
my $bind_values = [];
if ( ( defined $condition->{id} ) && ( $condition->{id} ne '' ) ) {
push @$conditions, 'id=?';
push @$bind_values, $condition->{id};
}
if ( ( defined $condition->{project_id} ) && ( $condition->{project_id} ne '' ) ) {
push @$conditions, 'project_id=?';
push @$bind_values, $condition->{project_id};
}
if ( ( defined $condition->{studio_id} ) && ( $condition->{studio_id} ne '' ) ) {
push @$conditions, 'studio_id=?';
push @$bind_values, $condition->{studio_id};
}
if ( ( defined $condition->{event_id} ) && ( $condition->{event_id} ne '' ) ) {
push @$conditions, 'event_id=?';
push @$bind_values, $condition->{event_id};
}
if ( ( defined $condition->{path} ) && ( $condition->{path} ne '' ) ) {
push @$conditions, 'path=?';
push @$bind_values, $condition->{path};
}
my $limit = '';
if ( ( defined $condition->{limit} ) && ( $condition->{limit} ne '' ) ) {
$limit = 'limit ' . $condition->{limit};
}
my $whereClause = '';
$whereClause = " where " . join( " and ", @$conditions ) if ( scalar @$conditions > 0 );
my $query = qq{
select id
,project_id
,studio_id
,event_id
,active
,path
,size
,created_by
,created_at
,modified_at
,mastered
,processed
,audioDuration
,eventDuration
,rmsLeft
,rmsRight
from calcms_audio_recordings
$whereClause
order by created_at desc
};
my $entries = db::get( $dbh, $query, $bind_values );
return $entries;
}
sub update_active($$) {
my ($config, $entry) = @_;
return undef unless defined $entry->{project_id};
return undef unless defined $entry->{studio_id};
return undef unless defined $entry->{event_id};
my $dbh = db::connect($config);
my $bind_values = [ $entry->{project_id}, $entry->{studio_id}, $entry->{event_id} ];
my $query = qq{
update calcms_audio_recordings
set active=0
where project_id=? and studio_id=? and event_id=? and active=1
};
db::put( $dbh, $query, $bind_values );
$query = qq{
select max(id) id from calcms_audio_recordings
where project_id=? and studio_id=? and event_id=?
};
my $entries = db::get( $dbh, $query, $bind_values );
my $max = $entries->[0];
return undef unless defined $max->{id};
$query = qq{
update calcms_audio_recordings
set active=1
where id=?
};
return db::put( $dbh, $query, [$max->{id}] );
}
# update playout entry if differs to old values
sub update($$) {
my ($config, $entry) = @_;
my $day_start = $config->{date}->{day_starting_hour};
my $dbh = db::connect($config);
my $bind_values = [
$entry->{path}, $entry->{size},
$entry->{created_by}, $entry->{created_at},
$entry->{modified_at} || time::time_to_datetime( time() ), $entry->{processed},
$entry->{mastered}, $entry->{eventDuration},
$entry->{audioDuration}, $entry->{rmsLeft},
$entry->{rmsRight}, $entry->{project_id},
$entry->{studio_id}, $entry->{event_id}
];
my $query = qq{
update calcms_audio_recordings
set path=?, size=?,
created_by=?, created_at=?,
modified_at=?,
processed=?, mastered=?,
eventDuration=?, audioDuration=?,
rmsLeft=?, rmsRight=?
where project_id=? and studio_id=? and event_id=?
};
if ( defined $entry->{id} ) {
$query .= ' and id=?';
push @$bind_values, $entry->{id};
}
my $result = db::put( $dbh, $query, $bind_values );
update_active($config, $entry);
return $result;
}
# insert playout entry
sub insert ($$) {
my ($config, $entry) = @_;
return undef unless defined $entry->{project_id};
return undef unless defined $entry->{studio_id};
return undef unless defined $entry->{event_id};
return undef unless defined $entry->{path};
my $dbh = db::connect($config);
$entry = {
project_id => $entry->{project_id},
studio_id => $entry->{studio_id},
event_id => $entry->{event_id},
path => $entry->{path},
size => $entry->{size},
created_by => $entry->{created_by},
eventDuration => $entry->{eventDuration},
audioDuration => $entry->{audioDuration},
rmsLeft => $entry->{rmsLeft},
rmsRight => $entry->{rmsRight},
processed => $entry->{processed},
mastered => $entry->{mastered} || '0',
};
my $result = db::insert( $dbh, 'calcms_audio_recordings', $entry );
update_active($config, $entry);
return $result;
}
# delete playout entry
sub delete ($$) {
my ($config, $entry) = @_;
return undef unless defined $entry->{project_id};
return undef unless defined $entry->{studio_id};
return undef unless defined $entry->{event_id};
return undef unless defined $entry->{path};
my $dbh = db::connect($config);
my $query = qq{
delete
from calcms_audio_recordings
where project_id=? and studio_id=? and event_id=? and path=?
};
my $bind_values = [ $entry->{project_id}, $entry->{studio_id}, $entry->{event_id}, $entry->{path} ];
my $result = db::put( $dbh, $query, $bind_values );
update_active($config, $entry);
return $result;
}
sub error($) {
my $msg = shift;
print "ERROR: $msg<br/>\n";
}
#do not delete last line!
1;