Ticket #865: mythrename.diff

File mythrename.diff, 4.8 KB (added by tom@…, 15 years ago)

patch file

  • mythrename.pl

     
    2222    use File::Path;
    2323
    2424# Some variables we'll use here
    25     our ($dest, $format, $usage, $underscores);
     25    our ($dest, $format, $usage, $underscores, $sub);
    2626    our ($dformat, $dseparator, $dreplacement, $separator, $replacement);
    2727    our ($db_host, $db_user, $db_name, $db_pass, $video_dir);
    2828    our ($hostname, $dbh, $sh, $sh2, $q, $q2, $count);
     
    4343    GetOptions('link|dest|destination|path:s' => \$dest,
    4444               'format=s'                     => \$format,
    4545               'separator=s'                  => \$separator,
     46               'sub'                          => \$sub,
    4647               'replacement=s'                => \$replacement,
    4748               'usage|help|h'                 => \$usage,
    48                'underscores'                  => \$underscores
     49               'underscores'                  => \$underscores,
     50               'verbose'                      => \$verbose
    4951              );
    5052
    5153# Print usage
     
    6466
    6567    /var/video/show_names/
    6668
     69--sub
     70
     71    Only takes effect with --link option. If you would like to make subdirectories
     72    per title, specify --sub. In the future you will be able to pick the field
     73    to sub on.
     74
    6775--format
    6876
    6977    default:  $dformat
     
    124132
    125133    default:  No underscores
    126134
     135--verbose
     136
     137    Print some debug info, otherwise be quiet.
     138
    127139--help
    128140
    129141    Show this help text.
     
    215227    # Double-check the destination
    216228        $dest ||= "$video_dir/show_names";
    217229    # Alert the user
    218         print "Link destination directory:  $dest\n";
     230        if ($verbose) {
     231            print "Link destination directory:  $dest\n";
     232        }
    219233    # Create nonexistent paths
    220234        unless (-e $dest) {
    221235            mkpath($dest, 0, 0755) or die "Failed to create $dest:  $!\n";
     
    244258    while (my $ref = $sh->fetchrow_hashref()) {
    245259        my %info = %{$ref};
    246260        die "This script requires mythtv >= 0.19\n" unless ($info{'basename'});
     261        next unless (-e "$video_dir/".$info{'basename'});
    247262    # Default times
    248263        my ($syear, $smonth, $sday, $shour, $sminute, $ssecond) = $info{'starttime'} =~ /(\d+)-(\d+)-(\d+)\s+(\d+):(\d+):(\d+)/;
    249264        my ($eyear, $emonth, $eday, $ehour, $eminute, $esecond) = $info{'endtime'}   =~ /(\d+)-(\d+)-(\d+)\s+(\d+):(\d+):(\d+)/;
     
    330345        $name =~ s/(?:(?:$safe_sep)+\s*)+(?=[^\d\s])/$separator /sg;
    331346        $name =~ s/^($safe_sep|$safe_rep|\ )+//s;
    332347        $name =~ s/($safe_sep|$safe_rep|\ )+$//s;
     348    # Remove spaces from titles to simplify unlinking (I'm lazy)
     349        my $title = $info{'title'};
     350        $title =~ s/\s/\_/sg;
    333351    # Underscores?
    334352        if ($underscores) {
    335353            $name =~ tr/ /_/s;
     
    352370                $name .= ".$count";
    353371            }
    354372            $name .= $suffix;
    355         # Create the link
    356             symlink "$video_dir/".$info{'basename'}, "$dest/$name"
    357                 or die "Can't create symlink $dest/$name:  $!\n";
    358             print "$dest/$name\n";
     373
     374        # Sub destination
     375            if (defined($sub)) {
     376            # Double-check the destination
     377                $sub = "$dest/$title";
     378            # Alert the user
     379                if ($verbose) {
     380                    print "Link destination sub-directory:  $sub\n";
     381                }
     382            # Create nonexistent paths
     383                unless (-e $sub) {
     384                    mkpath($sub, 0, 0755) or die "Failed to create $sub:  $!\n";
     385                }
     386            # Bad path
     387                die "$sub is not a directory.\n" unless (-d $sub);
     388            # Delete any old links
     389                foreach my $file (<$sub/*>) {
     390                    if ($verbose) {
     391                        print "unlinking $file\n";
     392                    }
     393                    next unless (-l $file);
     394                    unlink $file or die "Couldn't remove old symlink $file:  $!\n";
     395                }
     396                symlink "$video_dir/".$info{'basename'}, "$sub/$name"
     397                    or die "Can't create symlink $sub/$name:  $!\n";
     398                if ($verbose) {
     399                    print "$sub/$name\n";
     400                }
     401            } else {
     402
     403            # Create the link
     404                symlink "$video_dir/".$info{'basename'}, "$dest/$name"
     405                    or die "Can't create symlink $dest/$name:  $!\n";
     406                if ($verbose) {
     407                    print "$dest/$name\n";
     408                }
     409            }
    359410        }
    360411    # Rename the file
    361412        else {
     
    378429                    $rows = $sh2->execute($info{'basename'}, $info{'chanid'}, $info{'starttime'});
    379430                    die "Couldn't restore original basename in database for ".$info{'basename'}.":  ($q2)\n" unless ($rows == 1);
    380431                }
    381                 print $info{'basename'}."\t-> $name\n";
     432                if ($verbose) {
     433                    print $info{'basename'}."\t-> $name\n";
     434                }
    382435            }
    383436        }
    384437    }