From 5182ac2a135e5ba0d8dea384e4954c9be77fbb6a Mon Sep 17 00:00:00 2001 From: Qstick Date: Thu, 26 Nov 2020 22:12:04 -0500 Subject: [PATCH] Fixed: Migrate Mediainfo properties that changed names --- ...188_mediainfo_channel_propertiesFixture.cs | 105 ++++++++++++++++++ .../Migration/188_mediainfo_channels.cs | 18 +++ .../MediaInfo/VideoFileInfoReader.cs | 2 +- 3 files changed, 124 insertions(+), 1 deletion(-) create mode 100644 src/NzbDrone.Core.Test/Datastore/Migration/188_mediainfo_channel_propertiesFixture.cs create mode 100644 src/NzbDrone.Core/Datastore/Migration/188_mediainfo_channels.cs diff --git a/src/NzbDrone.Core.Test/Datastore/Migration/188_mediainfo_channel_propertiesFixture.cs b/src/NzbDrone.Core.Test/Datastore/Migration/188_mediainfo_channel_propertiesFixture.cs new file mode 100644 index 000000000..14fa22164 --- /dev/null +++ b/src/NzbDrone.Core.Test/Datastore/Migration/188_mediainfo_channel_propertiesFixture.cs @@ -0,0 +1,105 @@ +using System; +using System.Linq; +using FluentAssertions; +using NUnit.Framework; +using NzbDrone.Common.Serializer; +using NzbDrone.Core.Datastore.Migration; +using NzbDrone.Core.Test.Framework; + +namespace NzbDrone.Core.Test.Datastore.Migration +{ + [TestFixture] + public class mediainfo_channel_propertiesFixture : MigrationTest + { + private void AddMovieFile(mediainfo_channels m, int id) + { + var movie = new + { + Id = id, + MovieId = id, + Quality = new { }.ToJson(), + Size = 0, + DateAdded = DateTime.UtcNow, + RelativePath = "SomeFile.mkv", + Languages = new[] { 1, 2 }.ToJson(), + IndexerFlags = 0, + MediaInfo = new + { + ContainerFormat = "Matroska", + VideoFormat = "AVC", + VideoCodecID = "V_MPEG4/ISO/AVC", + VideoProfile = "High@L4.1", + VideoCodecLibrary = "x264 - core 155 r2867+74 66b5600 t_mod_Custom_2 [8-bit@all X86_64]", + VideoBitrate = 6243046, + VideoBitDepth = 8, + VideoMultiViewCount = 0, + VideoColourPrimaries = "BT.709", + VideoTransferCharacteristics = "BT.709", + Width = 1280, + Height = 692, + AudioFormat = "AC-3", + AudioCodecID = "A_AC3", + AudioCodecLibrary = "", + AudioAdditionalFeatures = "", + AudioBitrate = 640000, + RunTime = "01:36:47.8720000", + AudioStreamCount = 3, + AudioChannels = 6, + AudioChannelPositions = "3/2/0.1", + AudioChannelPositionsText = "Front: L C R, Side: L R, LFE", + AudioProfile = "", + VideoFps = 23.976, + AudioLanguages = "Czech / Slovak / English", + Subtitles = "Czech / Czech", + ScanType = "Progressive", + SchemaRevision = 5 + }.ToJson() + }; + + m.Insert.IntoTable("MovieFiles").Row(movie); + } + + [Test] + public void should_change_property_names_for_audio_channels() + { + var db = WithMigrationTestDb(c => + { + AddMovieFile(c, 1); + }); + + var items = db.Query("SELECT MediaInfo FROM MovieFiles"); + + items.Should().HaveCount(1); + + var mediainfo = items.First().MediaInfo; + + //Removed props should be null + mediainfo.AudioChannels.Should().BeNull(); + mediainfo.AudioChannelPositionsText.Should().BeNull(); + + //Renamed should have original value + mediainfo.AudioChannelsContainer.Should().NotBeNull(); + mediainfo.AudioChannelPositionsTextContainer.Should().NotBeNull(); + mediainfo.AudioChannelsContainer.Should().Be(6); + mediainfo.AudioChannelPositionsTextContainer.Should().Be("Front: L C R, Side: L R, LFE"); + + //Should not touch other props + mediainfo.AudioChannelPositions.Should().Be("3/2/0.1"); + } + + public class MovieFile188 + { + public int Id { get; set; } + public MediaInfo188 MediaInfo { get; set; } + } + + public class MediaInfo188 + { + public int? AudioChannels { get; set; } + public int? AudioChannelsContainer { get; set; } + public string AudioChannelPositionsText { get; set; } + public string AudioChannelPositionsTextContainer { get; set; } + public string AudioChannelPositions { get; set; } + } + } +} diff --git a/src/NzbDrone.Core/Datastore/Migration/188_mediainfo_channels.cs b/src/NzbDrone.Core/Datastore/Migration/188_mediainfo_channels.cs new file mode 100644 index 000000000..2efee19f2 --- /dev/null +++ b/src/NzbDrone.Core/Datastore/Migration/188_mediainfo_channels.cs @@ -0,0 +1,18 @@ +using FluentMigrator; +using NzbDrone.Core.Datastore.Migration.Framework; + +namespace NzbDrone.Core.Datastore.Migration +{ + [Migration(188)] + public class mediainfo_channels : NzbDroneMigrationBase + { + protected override void MainDbUpgrade() + { + Execute.Sql("UPDATE MovieFiles SET MediaInfo = Replace(MediaInfo, '\"audioChannels\"', '\"audioChannelsContainer\"');"); + Execute.Sql("UPDATE MovieFiles SET MediaInfo = Replace(MediaInfo, '\"audioChannelPositionsText\"', '\"audioChannelPositionsTextContainer\"');"); + + //Change List Interval from Min to Hour + Execute.Sql("UPDATE Config SET Value = max((Value / 60) + 1, 6) WHERE Key = 'importlistsyncinterval'"); + } + } +} diff --git a/src/NzbDrone.Core/MediaFiles/MediaInfo/VideoFileInfoReader.cs b/src/NzbDrone.Core/MediaFiles/MediaInfo/VideoFileInfoReader.cs index 26fb4b50b..f848469cb 100644 --- a/src/NzbDrone.Core/MediaFiles/MediaInfo/VideoFileInfoReader.cs +++ b/src/NzbDrone.Core/MediaFiles/MediaInfo/VideoFileInfoReader.cs @@ -18,7 +18,7 @@ public class VideoFileInfoReader : IVideoFileInfoReader private readonly IDiskProvider _diskProvider; private readonly Logger _logger; - public const int MINIMUM_MEDIA_INFO_SCHEMA_REVISION = 3; + public const int MINIMUM_MEDIA_INFO_SCHEMA_REVISION = 4; public const int CURRENT_MEDIA_INFO_SCHEMA_REVISION = 6; public VideoFileInfoReader(IDiskProvider diskProvider, Logger logger)