From 7442cb4c6870b3e7788b6ccd4fe36ac02211f0d9 Mon Sep 17 00:00:00 2001 From: Mark McDowall Date: Sun, 17 Nov 2013 00:41:50 -0800 Subject: [PATCH] Cleanup naming specs if there is more than one Fixed: Rare scenario where settings wouldn't load due to data issue --- .../CleanupAdditionalNamingSpecsFixture.cs | 37 +++++++++++++++++++ .../CleanupAdditionalNamingSpecs.cs | 29 +++++++++++++++ .../Housekeepers/CleanupOrphanedEpisodes.cs | 1 - .../CleanupOrphanedHistoryItems.cs | 1 - 4 files changed, 66 insertions(+), 2 deletions(-) create mode 100644 src/NzbDrone.Core.Test/Housekeeping/Housekeepers/CleanupAdditionalNamingSpecsFixture.cs create mode 100644 src/NzbDrone.Core/Housekeeping/Housekeepers/CleanupAdditionalNamingSpecs.cs diff --git a/src/NzbDrone.Core.Test/Housekeeping/Housekeepers/CleanupAdditionalNamingSpecsFixture.cs b/src/NzbDrone.Core.Test/Housekeeping/Housekeepers/CleanupAdditionalNamingSpecsFixture.cs new file mode 100644 index 000000000..b369ec925 --- /dev/null +++ b/src/NzbDrone.Core.Test/Housekeeping/Housekeepers/CleanupAdditionalNamingSpecsFixture.cs @@ -0,0 +1,37 @@ +using FizzWare.NBuilder; +using FluentAssertions; +using NUnit.Framework; +using NzbDrone.Core.Housekeeping.Housekeepers; +using NzbDrone.Core.Organizer; +using NzbDrone.Core.Test.Framework; + +namespace NzbDrone.Core.Test.Housekeeping.Housekeepers +{ + [TestFixture] + public class CleanupAdditionalNamingSpecsFixture : DbTest + { + [Test] + public void should_delete_additional_naming_configs() + { + var specs = Builder.CreateListOfSize(5) + .BuildListOfNew(); + + Db.InsertMany(specs); + + Subject.Clean(); + AllStoredModels.Should().HaveCount(1); + } + + [Test] + public void should_not_delete_if_only_one_spec() + { + var spec = Builder.CreateNew() + .BuildNew(); + + Db.Insert(spec); + + Subject.Clean(); + AllStoredModels.Should().HaveCount(1); + } + } +} \ No newline at end of file diff --git a/src/NzbDrone.Core/Housekeeping/Housekeepers/CleanupAdditionalNamingSpecs.cs b/src/NzbDrone.Core/Housekeeping/Housekeepers/CleanupAdditionalNamingSpecs.cs new file mode 100644 index 000000000..ece5ce6c7 --- /dev/null +++ b/src/NzbDrone.Core/Housekeeping/Housekeepers/CleanupAdditionalNamingSpecs.cs @@ -0,0 +1,29 @@ +using NLog; +using NzbDrone.Core.Datastore; + +namespace NzbDrone.Core.Housekeeping.Housekeepers +{ + public class CleanupAdditionalNamingSpecs : IHousekeepingTask + { + private readonly IDatabase _database; + private readonly Logger _logger; + + public CleanupAdditionalNamingSpecs(IDatabase database, Logger logger) + { + _database = database; + _logger = logger; + } + + public void Clean() + { + _logger.Trace("Running naming spec cleanup"); + + var mapper = _database.GetDataMapper(); + + mapper.ExecuteNonQuery(@"DELETE FROM NamingConfig + WHERE ID NOT IN ( + SELECT ID FROM NamingConfig + LIMIT 1)"); + } + } +} diff --git a/src/NzbDrone.Core/Housekeeping/Housekeepers/CleanupOrphanedEpisodes.cs b/src/NzbDrone.Core/Housekeeping/Housekeepers/CleanupOrphanedEpisodes.cs index 0965fc33c..a75a69ded 100644 --- a/src/NzbDrone.Core/Housekeeping/Housekeepers/CleanupOrphanedEpisodes.cs +++ b/src/NzbDrone.Core/Housekeeping/Housekeepers/CleanupOrphanedEpisodes.cs @@ -1,6 +1,5 @@ using NLog; using NzbDrone.Core.Datastore; -using NzbDrone.Core.Tv; namespace NzbDrone.Core.Housekeeping.Housekeepers { diff --git a/src/NzbDrone.Core/Housekeeping/Housekeepers/CleanupOrphanedHistoryItems.cs b/src/NzbDrone.Core/Housekeeping/Housekeepers/CleanupOrphanedHistoryItems.cs index 11567a2ba..f715665fb 100644 --- a/src/NzbDrone.Core/Housekeeping/Housekeepers/CleanupOrphanedHistoryItems.cs +++ b/src/NzbDrone.Core/Housekeeping/Housekeepers/CleanupOrphanedHistoryItems.cs @@ -1,6 +1,5 @@ using NLog; using NzbDrone.Core.Datastore; -using NzbDrone.Core.History; namespace NzbDrone.Core.Housekeeping.Housekeepers {