diff --git a/ErsatzTV.Core.Tests/Plex/PlexPathReplacementServiceTests.cs b/ErsatzTV.Core.Tests/Plex/PlexPathReplacementServiceTests.cs index 6a9f4ca04..a4adeeced 100644 --- a/ErsatzTV.Core.Tests/Plex/PlexPathReplacementServiceTests.cs +++ b/ErsatzTV.Core.Tests/Plex/PlexPathReplacementServiceTests.cs @@ -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 + { + 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(); + repo.Setup(x => x.GetPlexPathReplacementsByLibraryId(It.IsAny())).Returns(replacements.AsTask()); + + var runtime = new Mock(); + runtime.Setup(x => x.IsOSPlatform(OSPlatform.Windows)).Returns(false); + + var service = new PlexPathReplacementService( + repo.Object, + runtime.Object, + new Mock>().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 + { + 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(); + repo.Setup(x => x.GetPlexPathReplacementsByLibraryId(It.IsAny())).Returns(replacements.AsTask()); + + var runtime = new Mock(); + runtime.Setup(x => x.IsOSPlatform(OSPlatform.Windows)).Returns(false); + + var service = new PlexPathReplacementService( + repo.Object, + runtime.Object, + new Mock>().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() diff --git a/ErsatzTV.Core/Plex/PlexPathReplacementService.cs b/ErsatzTV.Core/Plex/PlexPathReplacementService.cs index 0a8db8d8a..8e5a5eb1a 100644 --- a/ErsatzTV.Core/Plex/PlexPathReplacementService.cs +++ b/ErsatzTV.Core/Plex/PlexPathReplacementService.cs @@ -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 =>