From 77cde138dc6e17e5a6a5ff29528a0fae2ab09ebe Mon Sep 17 00:00:00 2001 From: Mark McDowall Date: Mon, 20 Feb 2023 16:03:05 -0800 Subject: [PATCH] Fixed: Don't handle images in metadata folder as Roksbox images (cherry picked from commit 95a8f59a32d55550d5367f08a964859a97a0df44) --- .../PathExtensionFixture.cs | 19 ++++++ .../Extensions/PathExtensions.cs | 11 +++- ..._invalid_roksbox_metadata_imagesFixture.cs | 64 +++++++++++++++++++ ..._remove_invalid_roksbox_metadata_images.cs | 15 +++++ .../Consumers/Roksbox/RoksboxMetadata.cs | 3 +- 5 files changed, 108 insertions(+), 4 deletions(-) create mode 100644 src/NzbDrone.Core.Test/Datastore/Migration/223_remove_invalid_roksbox_metadata_imagesFixture.cs create mode 100644 src/NzbDrone.Core/Datastore/Migration/223_remove_invalid_roksbox_metadata_images.cs diff --git a/src/NzbDrone.Common.Test/PathExtensionFixture.cs b/src/NzbDrone.Common.Test/PathExtensionFixture.cs index 196e92f0c2..163f3f566f 100644 --- a/src/NzbDrone.Common.Test/PathExtensionFixture.cs +++ b/src/NzbDrone.Common.Test/PathExtensionFixture.cs @@ -158,6 +158,25 @@ public void path_should_return_parent_mono(string path, string parentPath) path.GetParentPath().Should().Be(parentPath); } + [TestCase(@"C:\Test\mydir", "Test")] + [TestCase(@"C:\Test\", @"C:\")] + [TestCase(@"C:\", null)] + [TestCase(@"\\server\share", null)] + [TestCase(@"\\server\share\test", @"\\server\share")] + public void path_should_return_parent_name_windows(string path, string parentPath) + { + WindowsOnly(); + path.GetParentName().Should().Be(parentPath); + } + + [TestCase(@"/", null)] + [TestCase(@"/test", "/")] + public void path_should_return_parent_name_mono(string path, string parentPath) + { + PosixOnly(); + path.GetParentName().Should().Be(parentPath); + } + [Test] public void path_should_return_parent_for_oversized_path() { diff --git a/src/NzbDrone.Common/Extensions/PathExtensions.cs b/src/NzbDrone.Common/Extensions/PathExtensions.cs index c82907ec99..9d0025a445 100644 --- a/src/NzbDrone.Common/Extensions/PathExtensions.cs +++ b/src/NzbDrone.Common/Extensions/PathExtensions.cs @@ -87,9 +87,7 @@ public static string GetRelativePath(this string parentPath, string childPath) public static string GetParentPath(this string childPath) { - var cleanPath = OsInfo.IsWindows - ? PARENT_PATH_END_SLASH_REGEX.Replace(childPath, "") - : childPath.TrimEnd(Path.DirectorySeparatorChar); + var cleanPath = childPath.GetCleanPath(); if (cleanPath.IsNullOrWhiteSpace()) { @@ -99,6 +97,13 @@ public static string GetParentPath(this string childPath) return Directory.GetParent(cleanPath)?.FullName; } + public static string GetParentName(this string childPath) + { + var cleanPath = childPath.GetCleanPath(); + + return Directory.GetParent(cleanPath)?.Name; + } + public static string GetCleanPath(this string path) { var cleanPath = OsInfo.IsWindows diff --git a/src/NzbDrone.Core.Test/Datastore/Migration/223_remove_invalid_roksbox_metadata_imagesFixture.cs b/src/NzbDrone.Core.Test/Datastore/Migration/223_remove_invalid_roksbox_metadata_imagesFixture.cs new file mode 100644 index 0000000000..39416552d7 --- /dev/null +++ b/src/NzbDrone.Core.Test/Datastore/Migration/223_remove_invalid_roksbox_metadata_imagesFixture.cs @@ -0,0 +1,64 @@ +using System; +using System.Linq; +using Dapper; +using FluentAssertions; +using NUnit.Framework; +using NzbDrone.Core.Datastore.Migration; +using NzbDrone.Core.Test.Framework; + +namespace NzbDrone.Core.Test.Datastore.Migration +{ + [TestFixture] + public class remove_invalid_roksbox_metadata_imagesFixture : MigrationTest + { + [Test] + public void should_remove_incorrect_roksbox_metadata_images() + { + var db = WithDapperMigrationTestDb(c => + { + c.Insert.IntoTable("MetadataFiles").Row(new + { + MovieId = 1, + Consumer = "RoksboxMetadata", + Type = 5, + RelativePath = @"metadata\Movie Title (2023).jpg", + LastUpdated = "2023-01-21 00:00:00.000", + Added = "2023-01-21 00:00:00.000", + MovieFileId = 1, + Extension = ".jpg" + }); + + c.Insert.IntoTable("MetadataFiles").Row(new + { + MovieId = 1, + Consumer = "RoksboxMetadata", + Type = 5, + RelativePath = @"Movie Title (2023).jpg", + LastUpdated = "2023-01-21 00:00:00.000", + MovieFileId = 1, + Added = "2023-01-21 00:00:00.000", + Extension = ".jpg" + }); + }); + + var metadataFiles = db.Query("SELECT * FROM \"MetadataFiles\""); + + metadataFiles.Should().HaveCount(1); + metadataFiles.First().RelativePath.Should().NotContain("metadata"); + } + } + + public class MetadataFile223 + { + public int Id { get; set; } + public int MovieId { get; set; } + public int? MovieFileId { get; set; } + public string RelativePath { get; set; } + public DateTime Added { get; set; } + public DateTime LastUpdated { get; set; } + public string Extension { get; set; } + public string Hash { get; set; } + public string Consumer { get; set; } + public int Type { get; set; } + } +} diff --git a/src/NzbDrone.Core/Datastore/Migration/223_remove_invalid_roksbox_metadata_images.cs b/src/NzbDrone.Core/Datastore/Migration/223_remove_invalid_roksbox_metadata_images.cs new file mode 100644 index 0000000000..e8f51d95c7 --- /dev/null +++ b/src/NzbDrone.Core/Datastore/Migration/223_remove_invalid_roksbox_metadata_images.cs @@ -0,0 +1,15 @@ +using FluentMigrator; +using NzbDrone.Core.Datastore.Migration.Framework; + +namespace NzbDrone.Core.Datastore.Migration +{ + [Migration(223)] + public class remove_invalid_roksbox_metadata_images : NzbDroneMigrationBase + { + protected override void MainDbUpgrade() + { + IfDatabase("sqlite").Execute.Sql("DELETE FROM \"MetadataFiles\" WHERE \"Consumer\" = 'RoksboxMetadata' AND \"Type\" = 5 AND (\"RelativePath\" LIKE 'metadata/%' OR \"RelativePath\" LIKE 'metadata\\%')"); + IfDatabase("postgresql").Execute.Sql("DELETE FROM \"MetadataFiles\" WHERE \"Consumer\" = 'RoksboxMetadata' AND \"Type\" = 5 AND (\"RelativePath\" LIKE 'metadata/%' OR \"RelativePath\" LIKE 'metadata\\\\%')"); + } + } +} diff --git a/src/NzbDrone.Core/Extras/Metadata/Consumers/Roksbox/RoksboxMetadata.cs b/src/NzbDrone.Core/Extras/Metadata/Consumers/Roksbox/RoksboxMetadata.cs index 1f49040643..7bf94bb281 100644 --- a/src/NzbDrone.Core/Extras/Metadata/Consumers/Roksbox/RoksboxMetadata.cs +++ b/src/NzbDrone.Core/Extras/Metadata/Consumers/Roksbox/RoksboxMetadata.cs @@ -84,7 +84,8 @@ public override MetadataFile FindMetadataFile(Movie movie, string path) if (extension == ".jpg") { - if (Path.GetFileNameWithoutExtension(filename).Equals(parentdir.Name, StringComparison.InvariantCultureIgnoreCase)) + if (Path.GetFileNameWithoutExtension(filename).Equals(parentdir.Name, StringComparison.InvariantCultureIgnoreCase) && + !path.GetParentName().Equals("metadata", StringComparison.InvariantCultureIgnoreCase)) { metadata.Type = MetadataType.MovieImage; return metadata;