Created
April 22, 2016 21:44
-
-
Save bonelifer/91dde5780f99590adcbdf00e45251263 to your computer and use it in GitHub Desktop.
Flush Deleted Recordings
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/perl -w | |
# | |
# Tell MythTV to truly delete all recordings in the "Deleted" recgroup | |
# | |
# @url $URL$ | |
# @date $Date$ | |
# @version $Revision$ | |
# @author $Author$ | |
# | |
# Libraries we'll use | |
use English; | |
use Getopt::Long; | |
use File::Basename; | |
use Cwd 'abs_path'; | |
use lib '.', dirname(abs_path($0 or $PROGRAM_NAME)); | |
use MythTV; | |
# Some variables we'll use here | |
our ($command, $force, $usage); | |
# Load the cli options | |
GetOptions('force' => \$force, | |
'usage|help|h' => \$usage | |
); | |
# Print usage | |
if ($usage) | |
{ | |
print <<EOF; | |
Usage: | |
$0 [options] | |
Deletes recording files and metadata for all recordings in the Deleted | |
recording group. | |
options: | |
--force | |
Delete the recording metadata even if the file does not exist. Note that | |
this option should only be used when all storage is connected to and file | |
systems are mounted on all your backends. Otherwise, forcing deletion of the | |
metadata may leave orphaned recording files on unconnected file systems. | |
This option is primarily useful for deleting metadata for a large number of | |
recordings after losing a file system or otherwise losing many recording | |
files. Rather than deleting them one by one using mythfrontend and having to | |
confirm deletion of each recording when the file is not found, you may add a | |
bunch of recordings to a playlist, then choose MENU|Playlist Options|Change | |
Recording Group and add the recordings to the Deleted recording group (create | |
a new group if necessary--its name /must/ be Deleted and is case-sensitive). | |
Finally, run this script with the --force option. Note that if you have | |
enabled the setting, "Auto Expire Instead of Delete Recording," this process | |
will delete all the recordings you just put into the Deleted recording group | |
and any others that were in there from normal recording deletion. | |
--help | |
Show this help text. | |
EOF | |
exit; | |
} | |
# Check whether to force metadata deletion for non-existent files. | |
$argument_force = $force ? 'FORCE' : 'NO_FORCE'; | |
# Connect to the backend | |
my $myth = new MythTV(); | |
# Load all of the recordings | |
my %rows = $myth->backend_rows('QUERY_RECORDINGS Descending'); | |
# Parse each recording, and delete anything in the "Deleted" recgroup | |
my $i = 0; | |
foreach my $row (@{$rows{'rows'}}) { | |
my $show = $myth->new_recording(@$row); | |
next unless ($show->{'recgroup'} eq 'Deleted'); | |
print "DELETE: $show->{'title'}: $show->{'subtitle'}\n"; | |
my $delete_command = 'DELETE_RECORDING ' . | |
$show->{'chanid'} . | |
' ' . | |
unix_to_myth_time ($show->{'recstartts'}) . | |
' ' . | |
$argument_force; | |
my $err = $myth->backend_command($delete_command); | |
if ($err ne '-1') { | |
print " error: $err\n"; | |
} | |
else { | |
$i++; | |
} | |
} | |
# Done | |
if ($i > 0) { | |
"\n", | |
"Depending on your configuration, it may be several minutes before\n", | |
"MythTV completely flushes these recordings from your system.\n"; | |
} | |
else { | |
print "No recordings were found in the Deleted recording group.\n"; | |
} | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment