]> git.rmz.io Git - dotfiles.git/blobdiff - bin/renameseries
add tardis bin
[dotfiles.git] / bin / renameseries
diff --git a/bin/renameseries b/bin/renameseries
new file mode 100755 (executable)
index 0000000..066347b
--- /dev/null
@@ -0,0 +1,102 @@
+#! /usr/bin/perl
+
+use warnings;
+use strict;
+# getopts module
+use Getopt::Std;
+# getstore madule
+use LWP::Simple;
+# Curent Working Directory module
+use Cwd;
+use HTML::Entities;
+#use utf8;
+
+# eguides URL
+my $url = 'http://epguides.com';
+
+# get options
+our($opt_n, $opt_s, $opt_h);
+getopts('ns:h') or $opt_h = 1;  # sets opt_n to true if -n is given
+                        #+or dies when options are unknown
+
+if ($opt_h) {
+    print "Usage: renameseries [OPTION]... [DIRECTORY]\n";
+    print "   or: renameseries [OPTION]... -s SERIE [DIRECTORY]\n";
+    print "Rename all files in DIRECTORY to the name downloaded from epguides.com\n";
+    exit 0;
+}
+
+my $path = getcwd();
+#print $path;
+my $series_name;
+if ($opt_s) {
+       $series_name = $opt_s;
+} else {
+       $path .= @ARGV==1?"/$ARGV[0]":"";
+#      $path =~ /.*\/(.*?)(?: *\[.*?\])*(?:\/Season \d+)/;
+       my @paths = split("\\/",$path);
+       foreach my $p (reverse(@paths)) {
+               if ($p =~ /Season|Series/ || !$p ) {
+                       next;
+               } 
+               $series_name = $p; 
+#              print "$p\n"; 
+               last;
+       }
+#      $series_name = $1 or die("Could not find Series name in path");
+#      print $series_name . "\n";
+
+#      substitute 'The' at the beginning
+#or    substitute any of the folowing characters '-' ',' '.' ' ' 
+#or    substitute [.*]
+       $series_name =~ s/(^The|[- ,\.]|\[.*\])//g;
+}
+#print $series_name;
+$path = @ARGV==1?"./$ARGV[0]":"./";
+
+my $tmp = '/tmp/renameseries';
+getstore( "$url/$series_name",  $tmp);
+open FILE, $tmp or die "Could not download '$series_name' from '$url'";
+my @lines = <FILE>;
+close FILE;
+unlink($tmp);
+
+#use diagnostics;
+#my @old_file_names = <"$path". *>;
+opendir(my $dh , $path) or die "Couldn't open dir '$path': $!";
+my @old_file_names;# = readdir $dh;
+
+@old_file_names = grep { /^/ && -f "$path/$_" } readdir($dh);
+
+#foreach my $old_file_name (@old_file_names) {
+#      print $old_file_name . "\n";
+#}
+
+if ($opt_n) {
+       print "Path : " . $path . "\n";
+}
+foreach my $old_file_name (@old_file_names) {
+#      print $old_file_name . "\n";
+       if ($old_file_name =~ /0?(?<season>\d+).*?0?(?<episode>\d+)(.*\.(?<extension>.*)|.*)/) {
+#              print $+{episode} . "\n";
+               my $episode = length($+{episode}) == 1 ? '0' . $+{episode} : $+{episode};
+               my $pattern = '(0?'.$+{season}.')-([0 ]?'.$+{episode}.').*?>(.*?) *<\/a>';
+               my $extension = $+{extension} ? $+{extension} : "avi";
+               foreach my $line (@lines) { 
+                       if ($line =~ /$pattern/) {
+                               my $new_file_name = $1 . "x" . $episode . " " .$3 . ".$extension";
+                               decode_entities($new_file_name);
+#                              print "pattern -> " . $pattern . "\n";
+                               if ($new_file_name eq $old_file_name) {
+                                       last;
+                               }
+                               if ($opt_n) {
+                                       print $old_file_name . " -> " . $new_file_name . "\n";
+                               } else {
+                                       rename("$path/$old_file_name", "$path/$new_file_name");
+                               }
+                               last;
+                       }
+               }
+       }
+}