Ver Fonte

Use the more advanced SSE matching from tranmission.
Consider placing this stuff in a library then immediately give up. I will, but not tonight.

Zachary Kotlarek há 11 anos atrás
pai
commit
afe84e4f00
1 ficheiros alterados com 31 adições e 12 exclusões
  1. 31 12
      findTorrent.pl

+ 31 - 12
findTorrent.pl

@@ -979,7 +979,7 @@ foreach my $tor (@tors) {
 			}
 			}
 			next;
 			next;
 
 
-			# Skip files that don't contain the episode number, unless MORE_NUMBER_FORMATS is set and NO_SEAONS is not
+			# Skip files that don't contain the episode number, unless MORE_NUMBER_FORMATS is set and NO_SEASONS is not
 		} elsif ((!defined($tor->{'episode'}) || !$need{ $tor->{'episode'} })
 		} elsif ((!defined($tor->{'episode'}) || !$need{ $tor->{'episode'} })
 			&& !($MORE_NUMBER_FORMATS && $NO_QUALITY_CHECKS && defined($tor->{'episode'}) && $tor->{'episode'} == 0))
 			&& !($MORE_NUMBER_FORMATS && $NO_QUALITY_CHECKS && defined($tor->{'episode'}) && $tor->{'episode'} == 0))
 		{
 		{
@@ -1298,23 +1298,42 @@ sub splitTags($$$) {
 
 
 # Extract season
 # Extract season
 sub findSE($) {
 sub findSE($) {
-	my ($title) = @_;
+	my ($name)  = @_;
 	my $season  = 0;
 	my $season  = 0;
 	my $episode = 0;
 	my $episode = 0;
 
 
-	if ($title =~ /[\W_]s(?:eason|eries)?\s*(\d+)/i) {
-		$season = $1;
-	} elsif ($title =~ /\b(\d+)x(\d+)\b/i) {
-		$season  = $1;
-		$episode = $2;
+	my $seasonBlock = '';
+	if ($name =~ /(?:\b|_)(20\d\d(?:\.|\-)[01]?\d(?:\.|\-)[0-3]?\d)(?:\b|_)/) {
+		$seasonBlock = $1;
+		my ($month, $day);
+		($season, $month, $day) = $seasonBlock =~ /(20\d\d)(?:\.|\-)([01]?\d)(?:\.|\-)([0-3]?\d)/;
+		$season = int($season);
+		$episode = sprintf('%04d-%02d-%02d', $season, $month, $day);
+	} elsif ($name =~ /(?:\b|_)(S(?:eason)?[_\s\.\-]*\d{1,2}[_\s\.\-]*E(?:pisode)?[_\s\.]*\d{1,3}(?:E\d{1,3})?)(?:\b|_)/i) {
+		$seasonBlock = $1;
+		($season, $episode) = $seasonBlock =~ /S(?:eason)?[_\s\.\-]*(\d{1,2})[_\s\.\-]*E(?:pisode)?[_\s\.\-]*(\d{1,3})/i;
+		$season = int($season);
+		$episode = sprintf('%02d', int($episode));
+	} elsif ($name =~ /[\[\_\.](\d{1,2}x\d{2,3})[\]\_\.]/i) {
+		$seasonBlock = $1;
+		($season, $episode) = $seasonBlock =~ /(\d+)x(\d+)/i;
+		$season = int($season);
+		$episode = sprintf('%02d', int($episode));
+	} elsif ($name =~ /(?:\b|_)([01]?\d[_\s\.]?[0-3]\d)(?:\b|_)/i) {
+		$seasonBlock = $1;
+		($season, $episode) = $seasonBlock =~ /(?:\b|_)([01]?\d)[_\s\.]?([0-3]\d)/i;
+		$season = int($season);
+		$episode = sprintf('%02d', int($episode));
 	}
 	}
 
 
-	if (!$episode && $title =~ /e(?:ipsode)?\s*(\d{1,2})/i) {
-		$episode = $1;
+	# Return something valid or UNDEF
+	if (!defined($seasonBlock) || $season < 1 || length($episode) < 1 || $episode eq '0') {
+		if ($DEBUG) {
+			print STDERR 'Could not find seasonBlock in: ' . $name . "\n";
+		}
+		$season  = undef();
+		$episode = undef();
 	}
 	}
-
-	$season  = int($season);
-	$episode = int($episode);
 	return ($season, $episode);
 	return ($season, $episode);
 }
 }