Linux-DVB-DVBT-Apps-QuartzPVR
view release on metacpan or search on metacpan
lib/Linux/DVB/DVBT/Apps/QuartzPVR.pm view on Meta::CPAN
{
%args = () ;
}
# Add extra fields
$class->add_fields(\%FIELDS, \%args) ;
# init class
$class->SUPER::init_class(%args) ;
# Create a class instance object - allows these methods to be called via class
$class->class_instance(%args) ;
}
#============================================================================================
# OBJECT DATA METHODS
#============================================================================================
#============================================================================================
# OBJECT METHODS
#============================================================================================
#--------------------------------------------------------------------------------------------
# Works out what to do based on the command options, then does it
sub process
{
my $this = shift ;
my ($opts_href) = @_ ;
my $num_adapters = $this->num_adapters ;
if ($opts_href->{'info'})
{
## Display settings
$this->show_info($opts_href) ;
}
elsif ($opts_href->{'rec'})
{
die "Error: You must have at least one DVB-T adapter available for recording" unless $num_adapters ;
## Handle new/changed recording
$this->modify_recording($opts_href->{'rec'}) ;
}
else
{
die "Error: You must have at least one DVB-T adapter available for recording" unless $num_adapters ;
## Do the update
$this->update() ;
}
}
#--------------------------------------------------------------------------------------------
# Gathers all the latest information from the EPG database and the recordings database and re-schedules
sub update
{
my $this = shift ;
Linux::DVB::DVBT::Apps::QuartzPVR::Base::DbgProf::startfn() ;
Linux::DVB::DVBT::Apps::QuartzPVR::Base::DbgTrace::trace_clear() ;
print "Linux::DVB::DVBT::Apps::QuartzPVR::update() : ".$this->date."\n" if $this->debug ;
my $tvrec = $this->_tvrec ;
my $tvreport = $this->_tvreport ;
my $tvsched = $this->_tvsched ;
my $tviplay = $this->_tviplay ;
my $num_adapters = $this->num_adapters ;
## Get list of recordings and expand into schedule (ignoring any old programs)
my @schedule = () ;
my @iplay_schedule = () ;
my @unscheduled = () ;
my @recording_schedule = $tvrec->get_recording($this->date) ;
my @iplay_recordings = $tvrec->get_iplay_recording($this->date) ;
Linux::DVB::DVBT::Apps::QuartzPVR::Prog::disp_sched("IPLAY recordings=", \@iplay_recordings) if $tviplay->debug >= 4 ;
Linux::DVB::DVBT::Apps::QuartzPVR::Prog::disp_sched("DVBT recordings=", \@recording_schedule) if $tvsched->debug >= 4 ;
## Ensure any current recordings are marked as "locked"
my @existing_schedule = $tvsched->existing_schedule() ;
$tvsched->mark_locked_recordings(\@recording_schedule, \@existing_schedule) ;
## Handle any get_iplayer recordings
$tviplay->schedule_recordings(\@iplay_recordings, \@iplay_schedule) ;
## Perform the scheduling (of DVBT recordings)
my $ok = $tvsched->schedule_recordings($num_adapters, \@recording_schedule, \@schedule, \@unscheduled,
'enable_multirec' => $this->enable_multirec,
'max_timeslip' => $this->max_timeslip,
) ;
Linux::DVB::DVBT::Apps::QuartzPVR::Prog::disp_sched("IPLAY schedule=", \@iplay_schedule) if $tviplay->debug >= 4 ;
Linux::DVB::DVBT::Apps::QuartzPVR::Prog::disp_sched("DVBT schedule=", \@schedule) if $tvsched->debug >= 4 ;
## If unscheduled programs
if (!$ok && !$this->test)
{
## Mail warning
Linux::DVB::DVBT::Apps::QuartzPVR::Mail::mail_error("dvb_record_mgr unscheduled", "Warning: some programs left unscheduled during update") ;
}
## Update schedule
$tvsched->update_cron(\@schedule) ;
$tviplay->update_cron(\@iplay_schedule) ;
$tvsched->commit(\@schedule, $this->test) ;
$tviplay->commit(\@iplay_schedule, $this->test) ;
## Print report if required
if ($this->report)
{
## Create report
( run in 2.683 seconds using v1.01-cache-2.11-cpan-75ffa21a3d4 )