Browse Source

allow trailing slash in plex path replacement (#108)

* add test for unc path replacement

* allow trailing slash in plex path replacement
pull/110/head
Jason Dove 5 years ago committed by GitHub
parent
commit
a5e1cc7c3d
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 64
      ErsatzTV.Core.Tests/Plex/PlexPathReplacementServiceTests.cs
  2. 3
      ErsatzTV.Core/Plex/PlexPathReplacementService.cs

64
ErsatzTV.Core.Tests/Plex/PlexPathReplacementServiceTests.cs

@ -79,6 +79,70 @@ namespace ErsatzTV.Core.Tests.Plex @@ -79,6 +79,70 @@ namespace ErsatzTV.Core.Tests.Plex
result.Should().Be(@"/mnt/something else/Some Shared Folder/Some Movie/Some Movie.mkv");
}
[Test]
public async Task PlexWindows_To_EtvLinux_UncPath()
{
var replacements = new List<PlexPathReplacement>
{
new()
{
Id = 1,
PlexPath = @"\\192.168.1.100\Something\Some Shared Folder",
LocalPath = @"/mnt/something else/Some Shared Folder",
PlexMediaSource = new PlexMediaSource { Platform = "Windows" }
}
};
var repo = new Mock<IMediaSourceRepository>();
repo.Setup(x => x.GetPlexPathReplacementsByLibraryId(It.IsAny<int>())).Returns(replacements.AsTask());
var runtime = new Mock<IRuntimeInfo>();
runtime.Setup(x => x.IsOSPlatform(OSPlatform.Windows)).Returns(false);
var service = new PlexPathReplacementService(
repo.Object,
runtime.Object,
new Mock<ILogger<PlexPathReplacementService>>().Object);
string result = await service.GetReplacementPlexPath(
0,
@"\\192.168.1.100\Something\Some Shared Folder\Some Movie\Some Movie.mkv");
result.Should().Be(@"/mnt/something else/Some Shared Folder/Some Movie/Some Movie.mkv");
}
[Test]
public async Task PlexWindows_To_EtvLinux_UncPathWithTrailingSlash()
{
var replacements = new List<PlexPathReplacement>
{
new()
{
Id = 1,
PlexPath = @"\\192.168.1.100\Something\Some Shared Folder\",
LocalPath = @"/mnt/something else/Some Shared Folder/",
PlexMediaSource = new PlexMediaSource { Platform = "Windows" }
}
};
var repo = new Mock<IMediaSourceRepository>();
repo.Setup(x => x.GetPlexPathReplacementsByLibraryId(It.IsAny<int>())).Returns(replacements.AsTask());
var runtime = new Mock<IRuntimeInfo>();
runtime.Setup(x => x.IsOSPlatform(OSPlatform.Windows)).Returns(false);
var service = new PlexPathReplacementService(
repo.Object,
runtime.Object,
new Mock<ILogger<PlexPathReplacementService>>().Object);
string result = await service.GetReplacementPlexPath(
0,
@"\\192.168.1.100\Something\Some Shared Folder\Some Movie\Some Movie.mkv");
result.Should().Be(@"/mnt/something else/Some Shared Folder/Some Movie/Some Movie.mkv");
}
[Test]
public async Task PlexLinux_To_EtvWindows()

3
ErsatzTV.Core/Plex/PlexPathReplacementService.cs

@ -36,7 +36,8 @@ namespace ErsatzTV.Core.Plex @@ -36,7 +36,8 @@ namespace ErsatzTV.Core.Plex
r =>
{
string separatorChar = IsWindows(r.PlexMediaSource) ? @"\" : @"/";
return path.StartsWith(r.PlexPath + separatorChar);
string prefix = r.PlexPath.EndsWith(separatorChar) ? r.PlexPath : r.PlexPath + separatorChar;
return path.StartsWith(prefix);
});
return maybeReplacement.Match(
replacement =>

Loading…
Cancel
Save