| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139 |
- #!/usr/bin/perl
- use strict;
- use warnings;
- # Includes
- use File::Basename;
- # Parameters
- my @BASE_DIRS = ('/mnt/media/TV', '/mnt/media/Download');
- my @skipped = ();
- my @monitored = ();
- my @done = ();
- # Command-line parameters
- my ($prg) = @ARGV;
- # For each directory
- for my $BASE_DIR (@BASE_DIRS) {
- # For each show
- opendir(BASE_DIR, $BASE_DIR)
- or die("Unable to open input directory: ${!}\n");
- while (my $dir = readdir(BASE_DIR)) {
- # Skip the stock entries
- if (!$dir || $dir eq '.' || $dir eq '..') {
- next;
- }
- # Construct the path
- my $path = $BASE_DIR . '/' . $dir;
- # Skip non-folders
- if (!-d $path) {
- next;
- }
- # Look for "skip" files
- if (-e $path . '/skip') {
- push(@skipped, $dir);
- next;
- }
- # Look for season folders
- opendir(SUB_DIR, $path)
- or die('Unable to open subfolder "' . $path . '": ' . $! . "\n");
- while (my $subdir = readdir(SUB_DIR)) {
- # Skip the stock entries
- if (!$dir || $dir eq '.' || $dir eq '..') {
- next;
- }
- # Construct the path
- my $subpath = $path . '/' . $subdir;
- # Skip non-folders
- if (!-d $subpath) {
- next;
- }
- # Skip symlinks
- if (-l $subpath) {
- next;
- }
- # Look for "season" folders
- if ($subdir =~ /^Season\s+(\d+)$/i) {
- my $season_num = $1;
- # Construct a name
- my $name = '';
- if ($prg) {
- $name = $subpath;
- } else {
- $name = $dir . ' - ' . $subdir;
- }
- # Check if the season is done
- if (-e $subpath . '/season_done') {
- push(@done, $name);
- # Season 0 is always done
- } elsif ($season_num == 0) {
- push(@done, $name);
- # Otherwise record the season
- } else {
- push(@monitored, $name);
- }
- }
- }
- close(SUB_DIR);
- }
- close(BASE_DIR);
- }
- # Print results
- if ($prg =~ /NULL/i) {
- foreach my $show (@monitored) {
- print $show . "\0";
- }
- } elsif ($prg =~ /STORE/i) {
- my %shows = ();
- foreach my $show (@monitored) {
- $shows{ basename(dirname($show)) } = 1;
- }
- foreach my $key (keys(%shows)) {
- print $key . "\n";
- }
- } else {
- if (scalar(@done) > 0) {
- print "\nDone:\n";
- foreach my $show (@done) {
- print $show . "\n";
- }
- } else {
- print "\nNo seasons done\n";
- }
- if (scalar(@skipped) > 0) {
- print "\nSkipped:\n";
- foreach my $show (@skipped) {
- print $show . "\n";
- }
- } else {
- print "\nNo shows skipped\n";
- }
- if (scalar(@monitored) > 0) {
- print "\nMonitored:\n";
- foreach my $show (@monitored) {
- print $show . "\n";
- }
- } else {
- print "\nNo shows monitored\n";
- }
- }
- # Cleanup
- exit(0);
|