Browse Source

fix local subtitle scans for non-lowercase extensions (#1865)

* fix local subtitle scans for non-lowercase extensions

* remove some unneeded changes
pull/1866/head
Jason Dove 11 months ago committed by GitHub
parent
commit
94db4bf679
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
  1. 1
      CHANGELOG.md
  2. 8
      ErsatzTV.Scanner.Tests/Core/Metadata/LocalSubtitlesProviderTests.cs
  3. 16
      ErsatzTV.Scanner/Core/Metadata/LocalSubtitlesProvider.cs

1
CHANGELOG.md

@ -62,6 +62,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). @@ -62,6 +62,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).
- This allows these movies to appear in the Trash where they can be deleted
- Fix synchronizing trakt lists from users with special characters in their username
- Note that these lists MUST be added as URLs; the short-form `user/list` will NOT work with special characters
- Fix local subtitle scanner to detect non-lowercase extensions (e.g. `Movie (2000).EN.SRT`)
### Changed
- Remove some unnecessary API calls related to media server scanning and paging

8
ErsatzTV.Scanner.Tests/Core/Metadata/LocalSubtitlesProviderTests.cs

@ -41,7 +41,9 @@ public class LocalSubtitlesProviderTests @@ -41,7 +41,9 @@ public class LocalSubtitlesProviderTests
new(@"/Movies/Avatar (2009)/Avatar (2009).en.forced.ass"),
new(@"/Movies/Avatar (2009)/Avatar (2009).en.sdh.srt"),
new(@"/Movies/Avatar (2009)/Avatar (2009).de.srt"),
new(@"/Movies/Avatar (2009)/Avatar (2009).de.sdh.forced.srt")
// non-uniform (lower-case) extensions should also work
new(@"/Movies/Avatar (2009)/Avatar (2009).DE.SDH.FORCED.SRT")
};
var provider = new LocalSubtitlesProvider(
@ -84,7 +86,9 @@ public class LocalSubtitlesProviderTests @@ -84,7 +86,9 @@ public class LocalSubtitlesProviderTests
new(@"/Movies/Avatar (2009)/Avatar (2009).en.sdh.srt"),
new(@"/Movies/Avatar (2009)/Avatar (2009).sdh.en.srt"),
new(@"/Movies/Avatar (2009)/Avatar (2009).de.srt"),
new(@"/Movies/Avatar (2009)/Avatar (2009).de.sdh.forced.srt")
// non-uniform (lower-case) extensions should also work
new(@"/Movies/Avatar (2009)/Avatar (2009).DE.SDH.FORCED.SRT")
};
var provider = new LocalSubtitlesProvider(

16
ErsatzTV.Scanner/Core/Metadata/LocalSubtitlesProvider.cs

@ -108,13 +108,15 @@ public class LocalSubtitlesProvider : ILocalSubtitlesProvider @@ -108,13 +108,15 @@ public class LocalSubtitlesProvider : ILocalSubtitlesProvider
string withoutExtension = Path.GetFileNameWithoutExtension(mediaItemPath);
foreach (string file in _localFileSystem.ListFiles(folder, $"{withoutExtension}*"))
{
string lowerFile = file.ToLowerInvariant();
string fileName = Path.GetFileName(file);
if (!fileName.StartsWith(withoutExtension, StringComparison.OrdinalIgnoreCase))
{
continue;
}
string extension = Path.GetExtension(file);
string extension = Path.GetExtension(lowerFile);
string codec = extension switch
{
".ssa" or ".ass" => "ass",
@ -128,30 +130,32 @@ public class LocalSubtitlesProvider : ILocalSubtitlesProvider @@ -128,30 +130,32 @@ public class LocalSubtitlesProvider : ILocalSubtitlesProvider
continue;
}
string language = fileName;
string language = Path.GetFileName(lowerFile);
var forced = false;
var sdh = false;
if (file.Contains(".forced."))
if (lowerFile.Contains(".forced."))
{
forced = true;
language = language.Replace(".forced", string.Empty);
}
if (file.Contains(".sdh"))
if (lowerFile.Contains(".sdh"))
{
sdh = true;
language = language.Replace(".sdh", string.Empty);
}
if (file.Contains(".cc."))
if (lowerFile.Contains(".cc."))
{
sdh = true;
language = language.Replace(".cc", string.Empty);
}
language = language.Replace($"{withoutExtension}.", string.Empty)[..3].Replace(".", string.Empty);
language = language
.Replace($"{withoutExtension.ToLowerInvariant()}.", string.Empty)[..3]
.Replace(".", string.Empty);
Option<CultureInfo> maybeCulture = languageCodes.Find(
ci => ci.TwoLetterISOLanguageName == language || ci.ThreeLetterISOLanguageName == language);

Loading…
Cancel
Save