Myth recent recordings.pl
From MythTV Official Wiki
Note: The correct title of this article is myth_recent_recordings.pl. It appears incorrectly here due to technical restrictions.
myth_recent_recordings.pl outputs information about the most-recently-recorded shows.
Contents |
Examples
Command-line Usage
To get detailed help:
myth_recent_recordings.pl --help
To show a plain-text list of all shows recorded in the last 24 hours:
myth_recent_recordings.pl --recordings=-1 --plain_text --hours=24 --heading 'Shows Recorded Today:\n\n'
Miscellaneous Status Information Script Usage
When used as a Miscellaneous Status Information script, recording information will be shown in the "Miscellaneous" section of the backend status page (available through MythWeb's Backend Status page or http://[hostname]:6544/ ).
To show all shows recorded in the last 24 hours:
myth_recent_recordings.pl --recordings=-1 --hours=24 --heading '<h3>Shows Recorded Today</h3>'
The Script
#!/usr/bin/perl -w
#
# Outputs information about the most-recently-recorded shows.
#
# Automatically detects database settings.
#
# Includes
use DBI;
use Getopt::Long;
use MythTV;
# Some variables we'll use here
our ($num_recordings, $live, $heading, $plain_text, $text_format, $usage);
our ($hours, $minutes, $seconds);
our ($dnum_recordings, $dheading, $dtext_format);
our ($dhours, $dminutes, $dseconds);
our ($status_text_format, $status_value_format);
our ($dstatus_text_format, $dstatus_value_format);
# Default number of recent recordings to show
$dnum_recordings = 5;
# Default period in which to show recordings
$dhours = -1;
$dminutes = -1;
$dseconds = -1;
# Default status output heading
$dheading='Recent Recordings:\n';
# Default format of plain-text output
$dtext_format='%n/%j, %g:%i %A - %cc\n%T - %S\n%R\n\n';
# Default format of status output display text
$dstatus_text_format= '<a href="#">%n/%j, %g:%i %A - %cc - %T - %S<br />'.
'<span><strong>%T</strong> %n/%j, %g:%i %A<br />'.
'<em>%S</em><br /><br />%R<br /></span></a><hr />';
# Default format of status output value
$dstatus_value_format = '%n/%j, %g:%i %A - %T - %S';
# Provide default values for GetOptions
$num_recordings = $dnum_recordings;
$hours = $dhours;
$minutes = $dminutes;
$seconds = $dseconds;
$heading = $dheading;
$text_format = $dtext_format;
$status_text_format = $dstatus_text_format;
$status_value_format = $dstatus_value_format;
# Load the cli options
GetOptions('num_recordings|recordings=s' => \$num_recordings,
'hours|o=i' => \$hours,
'minutes=i' => \$minutes,
'seconds|e=i' => \$seconds,
'live' => \$live,
'heading=s' => \$heading,
'plain_text' => \$plain_text,
'text_format=s' => \$text_format,
'status_text_format=s' => \$status_text_format,
'status_value_format=s' => \$status_value_format,
'usage|help' => \$usage
);
# Print usage
if ($usage) {
print <<EOF;
$0 usage:
options:
--recordings [number of recordings]
Outputs information on the last [number of recordings] shows recorded by
MythTV. To output information on all recordings, specify -1.
default: $dnum_recordings
--hours [number of hours]
Outputs information on recordings that occurred within [number of hours].
This option may be specified in conjunction with --minutes and --seconds.
To output information on all matching recordings regardless of start time,
specify -1 for --hours, --minutes, and --seconds.
default: $dhours
--minutes [number of minutes]
Outputs information on recordings that occurred within [number of minutes].
This option may be specified in conjunction with --hours and --seconds.
To output information on all matching recordings regardless of start time,
specify -1 for --hours, --minutes, and --seconds.
default: $dminutes
--seconds [number of seconds]
Outputs information on recordings that occurred within [number of seconds].
This option may be specified in conjunction with --hours and --minutes.
To output information on all matching recordings regardless of start time,
specify -1 for --hours, --minutes, and --seconds.
default: $dseconds
--live
Include information on recent LiveTV recordings.
--heading [heading]
Output the [heading] before printing information about recordings.
default: \'$dheading\'
--plain_text
Output information in plain text format (i.e. for inclusion in an e-mail
notification).
--text_format [format]
Use the provided [format] to display information on the recordings. The
format should use the same format specifiers used by mythlink.pl, but
may also use \\r and/or \\n for line breaks. This option is ignored
if --plain_text is not used.
default: \'$dtext_format\'
--help
Show this help text.
EOF
exit;
}
# Determine the period of interest
my $now = time();
my $start_after = $now;
$start_after = $start_after - ($hours * 3600) if ($hours > 0);
$start_after = $start_after - ($minutes * 60) if ($minutes > 0);
$start_after = $start_after - $seconds if ($seconds > 0);
$start_after = 0 if (!($start_after < $now));
# Fix the heading.
if (defined($plain_text)) {
$heading =~ s/\\r/\r/g;
$heading =~ s/\\n/\n/g;
}
else {
# Remove line break format specifiers from heading for status output
$heading =~ s/(\\r|\\n)//g;
}
# Connect to mythbackend
my $Myth = new MythTV();
# Get the list of recordings
my $count = 0;
my %rows = $Myth->backend_rows('QUERY_RECORDINGS Delete');
our $show;
foreach my $row (@{$rows{'rows'}}) {
last unless (($count < $num_recordings) || ($num_recordings < 0));
$show = new MythTV::Program(@$row);
# Skip LiveTV recordings?
next unless (defined($live) || $show->{'recgroup'} ne 'LiveTV');
# Within the period of interest?
last if (($start_after) && ($show->{'recstartts'} < $start_after));
# Print the recording information in the desired format
if (defined($plain_text)) {
text_print($count);
}
else {
status_print($count);
}
$count++;
}
# Print the output for use in the backend status page.
sub status_print {
my $count = shift;
my $text = $show->format_name($status_text_format, ' ', ' ', 1, 0 ,1);
my $value = $show->format_name($status_value_format, ' ', ' ',
1, 0 ,1);
print("$heading<div class=\"schedule\">") if ($count == 0);
print("$text");
print("</div>") if ($count == ($num_recordings - 1));
print("[]:[]recording$count");
print("[]:[]$value\n");
}
# Print the output in plain text format
sub text_print {
my $count = shift;
my $text = $show->format_name($text_format, ' ', ' ', 1, 0 ,1);
$text =~ s/\\r/\r/g;
$text =~ s/\\n/\n/g;
print("$heading") if ($count == 0);
print("$text");
}