From 3120aae34b05b770aa10e271f74e8600801bb8a4 Mon Sep 17 00:00:00 2001 From: Jamie Date: Fri, 21 Sep 2018 22:07:29 +0100 Subject: [PATCH 01/43] Update CHANGELOG.md --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 7d0faf5b4..d0d86a692 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,6 @@ # Changelog -## (unreleased) +## v3.0.3776 (2018-09-21) ### **New Features** From 938547fd75ca79d8f9c3ab0d09f7f3fc1ca2fd7b Mon Sep 17 00:00:00 2001 From: Jamie Date: Sat, 22 Sep 2018 22:53:32 +0100 Subject: [PATCH 02/43] Update CHANGELOG.md --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 4485d3d2b..5bb60935c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,6 @@ # Changelog -## v3.0.3776 (2018-09-21) +## v3.0.3786 (2018-09-22) ### **Fixes** From 7fe01206c9297f91438dd5edcadd2e2d41627809 Mon Sep 17 00:00:00 2001 From: Jamie Date: Sun, 23 Sep 2018 22:02:34 +0100 Subject: [PATCH 03/43] Update CHANGELOG.md --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index c5bf0fb75..cb87ae237 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,6 @@ # Changelog -## v3.0.3786 (2018-09-22) +## v3.0.3795 (2018-09-23) ### **Fixes** From 5b6283f6b834048415a330866979bf1143a689da Mon Sep 17 00:00:00 2001 From: Jamie Date: Thu, 27 Sep 2018 13:18:19 +0100 Subject: [PATCH 04/43] Revert "Feature/purge issues" --- src/Ombi.DependencyInjection/IocExtensions.cs | 1 - src/Ombi.Schedule.Tests/IssuesPurgeTests.cs | 85 ------------------- .../Jobs/Lidarr/LidarrAvailabilityChecker.cs | 2 +- src/Ombi.Schedule/Jobs/Ombi/IIssuesPurge.cs | 9 -- src/Ombi.Schedule/Jobs/Ombi/IssuesPurge.cs | 63 -------------- .../Settings/Models/IssueSettings.cs | 3 - .../Settings/Models/JobSettings.cs | 1 - .../Settings/Models/JobSettingsHelper.cs | 5 -- src/Ombi.Store/Entities/Requests/Issues.cs | 1 - .../ClientApp/app/interfaces/ISettings.ts | 3 - .../music/musicrequests.component.html | 2 +- .../app/settings/issues/issues.component.html | 14 --- .../app/settings/issues/issues.component.ts | 6 +- .../app/settings/jobs/jobs.component.html | 9 +- .../app/settings/jobs/jobs.component.ts | 1 - .../usermanagement-user.component.html | 12 +-- src/Ombi/Controllers/SettingsController.cs | 3 +- 17 files changed, 12 insertions(+), 208 deletions(-) delete mode 100644 src/Ombi.Schedule.Tests/IssuesPurgeTests.cs delete mode 100644 src/Ombi.Schedule/Jobs/Ombi/IIssuesPurge.cs delete mode 100644 src/Ombi.Schedule/Jobs/Ombi/IssuesPurge.cs diff --git a/src/Ombi.DependencyInjection/IocExtensions.cs b/src/Ombi.DependencyInjection/IocExtensions.cs index 3af06b476..334b94675 100644 --- a/src/Ombi.DependencyInjection/IocExtensions.cs +++ b/src/Ombi.DependencyInjection/IocExtensions.cs @@ -191,7 +191,6 @@ namespace Ombi.DependencyInjection services.AddTransient(); services.AddTransient(); services.AddTransient(); - services.AddTransient(); } } } diff --git a/src/Ombi.Schedule.Tests/IssuesPurgeTests.cs b/src/Ombi.Schedule.Tests/IssuesPurgeTests.cs deleted file mode 100644 index 932022cd8..000000000 --- a/src/Ombi.Schedule.Tests/IssuesPurgeTests.cs +++ /dev/null @@ -1,85 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using Moq; -using NUnit.Framework; -using Ombi.Core.Settings; -using Ombi.Schedule.Jobs.Ombi; -using Ombi.Settings.Settings.Models; -using Ombi.Store.Entities.Requests; -using Ombi.Store.Repository; -using System.Threading.Tasks; - -namespace Ombi.Schedule.Tests -{ - [TestFixture] - public class IssuesPurgeTests - { - - [SetUp] - public void Setup() - { - Repo = new Mock>(); - Settings = new Mock>(); - Settings.Setup(x => x.GetSettingsAsync()).ReturnsAsync(new IssueSettings()); - Job = new IssuesPurge(Repo.Object, Settings.Object); - } - - public Mock> Repo { get; set; } - public Mock> Settings { get; set; } - public IssuesPurge Job { get; set; } - - [Test] - public async Task DoesNotRun_WhenDisabled() - { - await Job.Start(); - Repo.Verify(x => x.GetAll(),Times.Never); - } - - [Test] - public async Task Deletes_Correct_Issue() - { - var issues = new List() - { - new Issues - { - Status = IssueStatus.Resolved, - ResovledDate = DateTime.Now.AddDays(-5).AddHours(-1) - } - }; - - Settings.Setup(x => x.GetSettingsAsync()).ReturnsAsync(new IssueSettings { DeleteIssues = true, DaysAfterResolvedToDelete = 5 }); - Repo.Setup(x => x.GetAll()).Returns(new EnumerableQuery(issues)); - await Job.Start(); - - Assert.That(issues.First().Status, Is.EqualTo(IssueStatus.Deleted)); - Repo.Verify(x => x.SaveChangesAsync(), Times.Once); - } - - [Test] - public async Task DoesNot_Delete_AnyIssues() - { - var issues = new List() - { - new Issues - { - Status = IssueStatus.Resolved, - ResovledDate = DateTime.Now.AddDays(-2) - }, - new Issues - { - Status = IssueStatus.Resolved, - ResovledDate = DateTime.Now.AddDays(-6) - } - }; - - Settings.Setup(x => x.GetSettingsAsync()).ReturnsAsync(new IssueSettings { DeleteIssues = true, DaysAfterResolvedToDelete = 5 }); - Repo.Setup(x => x.GetAll()).Returns(new EnumerableQuery(issues)); - await Job.Start(); - - Assert.That(issues[0].Status, Is.Not.EqualTo(IssueStatus.Deleted)); - Assert.That(issues[1].Status, Is.EqualTo(IssueStatus.Deleted)); - Repo.Verify(x => x.SaveChangesAsync(), Times.Once); - } - } -} \ No newline at end of file diff --git a/src/Ombi.Schedule/Jobs/Lidarr/LidarrAvailabilityChecker.cs b/src/Ombi.Schedule/Jobs/Lidarr/LidarrAvailabilityChecker.cs index 9db24784d..d5ba14a6d 100644 --- a/src/Ombi.Schedule/Jobs/Lidarr/LidarrAvailabilityChecker.cs +++ b/src/Ombi.Schedule/Jobs/Lidarr/LidarrAvailabilityChecker.cs @@ -43,7 +43,7 @@ namespace Ombi.Schedule.Jobs.Lidarr var cachedAlbum = await _cachedAlbums.FirstOrDefaultAsync(x => x.ForeignAlbumId.Equals(request.ForeignAlbumId)); if (cachedAlbum != null) { - if (cachedAlbum.FullyAvailable) + if (cachedAlbum.Monitored && cachedAlbum.FullyAvailable) { request.Available = true; request.MarkedAsAvailable = DateTime.Now; diff --git a/src/Ombi.Schedule/Jobs/Ombi/IIssuesPurge.cs b/src/Ombi.Schedule/Jobs/Ombi/IIssuesPurge.cs deleted file mode 100644 index fbd1e3aaf..000000000 --- a/src/Ombi.Schedule/Jobs/Ombi/IIssuesPurge.cs +++ /dev/null @@ -1,9 +0,0 @@ -using System.Threading.Tasks; - -namespace Ombi.Schedule.Jobs.Ombi -{ - public interface IIssuesPurge : IBaseJob - { - Task Start(); - } -} \ No newline at end of file diff --git a/src/Ombi.Schedule/Jobs/Ombi/IssuesPurge.cs b/src/Ombi.Schedule/Jobs/Ombi/IssuesPurge.cs deleted file mode 100644 index 92ca31071..000000000 --- a/src/Ombi.Schedule/Jobs/Ombi/IssuesPurge.cs +++ /dev/null @@ -1,63 +0,0 @@ -using System; -using System.Linq; -using System.Threading.Tasks; -using Ombi.Core.Settings; -using Ombi.Settings.Settings.Models; -using Ombi.Store.Entities.Requests; -using Ombi.Store.Repository; - -namespace Ombi.Schedule.Jobs.Ombi -{ - public class IssuesPurge : IIssuesPurge - { - public IssuesPurge(IRepository issuesRepo, ISettingsService issueSettings) - { - _issuesRepository = issuesRepo; - _settings = issueSettings; - _settings.ClearCache(); - } - - private readonly IRepository _issuesRepository; - private readonly ISettingsService _settings; - - public async Task Start() - { - var settings = await _settings.GetSettingsAsync(); - if (!settings.DeleteIssues) - { - return; - } - - var now = DateTime.Now.AddDays(-settings.DaysAfterResolvedToDelete).Date; - var resolved = _issuesRepository.GetAll().Where(x => x.Status == IssueStatus.Resolved); - var toDelete = resolved.Where(x => x.ResovledDate.HasValue && x.ResovledDate.Value.Date <= now); - - foreach (var d in toDelete) - { - d.Status = IssueStatus.Deleted; - } - - await _issuesRepository.SaveChangesAsync(); - } - - private bool _disposed; - protected virtual void Dispose(bool disposing) - { - if (_disposed) - return; - - if (disposing) - { - _issuesRepository?.Dispose(); - _settings?.Dispose(); - } - _disposed = true; - } - - public void Dispose() - { - Dispose(true); - GC.SuppressFinalize(this); - } - } -} \ No newline at end of file diff --git a/src/Ombi.Settings/Settings/Models/IssueSettings.cs b/src/Ombi.Settings/Settings/Models/IssueSettings.cs index d7a35c0d9..e025c82d1 100644 --- a/src/Ombi.Settings/Settings/Models/IssueSettings.cs +++ b/src/Ombi.Settings/Settings/Models/IssueSettings.cs @@ -4,8 +4,5 @@ { public bool Enabled { get; set; } public bool EnableInProgress { get; set; } - - public bool DeleteIssues { get; set; } - public int DaysAfterResolvedToDelete { get; set; } } } \ No newline at end of file diff --git a/src/Ombi.Settings/Settings/Models/JobSettings.cs b/src/Ombi.Settings/Settings/Models/JobSettings.cs index 8b283cdf7..48c721e29 100644 --- a/src/Ombi.Settings/Settings/Models/JobSettings.cs +++ b/src/Ombi.Settings/Settings/Models/JobSettings.cs @@ -14,6 +14,5 @@ public string RefreshMetadata { get; set; } public string Newsletter { get; set; } public string LidarrArtistSync { get; set; } - public string IssuesPurge { get; set; } } } \ No newline at end of file diff --git a/src/Ombi.Settings/Settings/Models/JobSettingsHelper.cs b/src/Ombi.Settings/Settings/Models/JobSettingsHelper.cs index 4491ca27a..0f8fec5fd 100644 --- a/src/Ombi.Settings/Settings/Models/JobSettingsHelper.cs +++ b/src/Ombi.Settings/Settings/Models/JobSettingsHelper.cs @@ -57,11 +57,6 @@ namespace Ombi.Settings.Settings.Models return Get(s.LidarrArtistSync, Cron.Hourly(40)); } - public static string IssuePurge(JobSettings s) - { - return Get(s.IssuesPurge, Cron.Daily()); - } - private static string Get(string settings, string defaultCron) { return settings.HasValue() ? settings : defaultCron; diff --git a/src/Ombi.Store/Entities/Requests/Issues.cs b/src/Ombi.Store/Entities/Requests/Issues.cs index 9fbc6a83e..b1021e362 100644 --- a/src/Ombi.Store/Entities/Requests/Issues.cs +++ b/src/Ombi.Store/Entities/Requests/Issues.cs @@ -29,6 +29,5 @@ namespace Ombi.Store.Entities.Requests Pending = 0, InProgress = 1, Resolved = 2, - Deleted = 3, } } \ No newline at end of file diff --git a/src/Ombi/ClientApp/app/interfaces/ISettings.ts b/src/Ombi/ClientApp/app/interfaces/ISettings.ts index 7a889e722..db4db935e 100644 --- a/src/Ombi/ClientApp/app/interfaces/ISettings.ts +++ b/src/Ombi/ClientApp/app/interfaces/ISettings.ts @@ -144,14 +144,11 @@ export interface IJobSettings { newsletter: string; plexRecentlyAddedSync: string; lidarrArtistSync: string; - issuesPurge: string; } export interface IIssueSettings extends ISettings { enabled: boolean; enableInProgress: boolean; - deleteIssues: boolean; - daysAfterResolvedToDelete: number; } export interface IAuthenticationSettings extends ISettings { diff --git a/src/Ombi/ClientApp/app/requests/music/musicrequests.component.html b/src/Ombi/ClientApp/app/requests/music/musicrequests.component.html index f6ad4bb2a..c89c2be0a 100644 --- a/src/Ombi/ClientApp/app/requests/music/musicrequests.component.html +++ b/src/Ombi/ClientApp/app/requests/music/musicrequests.component.html @@ -59,7 +59,7 @@

- {{request.title | truncate: 36}} + {{request.title}}

diff --git a/src/Ombi/ClientApp/app/settings/issues/issues.component.html b/src/Ombi/ClientApp/app/settings/issues/issues.component.html index ee780a1a1..e30d84e26 100644 --- a/src/Ombi/ClientApp/app/settings/issues/issues.component.html +++ b/src/Ombi/ClientApp/app/settings/issues/issues.component.html @@ -18,20 +18,6 @@
-
-
- - -
-
- -
-
- - -
-
-
diff --git a/src/Ombi/ClientApp/app/settings/issues/issues.component.ts b/src/Ombi/ClientApp/app/settings/issues/issues.component.ts index 37ead870a..c8a85e8e1 100644 --- a/src/Ombi/ClientApp/app/settings/issues/issues.component.ts +++ b/src/Ombi/ClientApp/app/settings/issues/issues.component.ts @@ -21,10 +21,8 @@ export class IssuesComponent implements OnInit { public ngOnInit() { this.settingsService.getIssueSettings().subscribe(x => { this.form = this.fb.group({ - enabled: [x.enabled], - enableInProgress: [x.enableInProgress], - deleteIssues: [x.deleteIssues], - daysAfterResolvedToDelete: [x.daysAfterResolvedToDelete], + enabled: [x.enabled], + enableInProgress: [x.enableInProgress], }); }); this.getCategories(); diff --git a/src/Ombi/ClientApp/app/settings/jobs/jobs.component.html b/src/Ombi/ClientApp/app/settings/jobs/jobs.component.html index 1365710f0..a4dcd6fb3 100644 --- a/src/Ombi/ClientApp/app/settings/jobs/jobs.component.html +++ b/src/Ombi/ClientApp/app/settings/jobs/jobs.component.html @@ -85,19 +85,12 @@
-
+
The Newsletter is required
- -
- - - The Issues Purge is required - -
diff --git a/src/Ombi/ClientApp/app/settings/jobs/jobs.component.ts b/src/Ombi/ClientApp/app/settings/jobs/jobs.component.ts index d8ce106ae..756d6ba89 100644 --- a/src/Ombi/ClientApp/app/settings/jobs/jobs.component.ts +++ b/src/Ombi/ClientApp/app/settings/jobs/jobs.component.ts @@ -35,7 +35,6 @@ export class JobsComponent implements OnInit { newsletter: [x.newsletter, Validators.required], plexRecentlyAddedSync: [x.plexRecentlyAddedSync, Validators.required], lidarrArtistSync: [x.lidarrArtistSync, Validators.required], - issuesPurge: [x.issuesPurge, Validators.required], }); }); } diff --git a/src/Ombi/ClientApp/app/usermanagement/usermanagement-user.component.html b/src/Ombi/ClientApp/app/usermanagement/usermanagement-user.component.html index 6f3ae63ee..0d13b17c3 100644 --- a/src/Ombi/ClientApp/app/usermanagement/usermanagement-user.component.html +++ b/src/Ombi/ClientApp/app/usermanagement/usermanagement-user.component.html @@ -144,7 +144,7 @@
-
+
@@ -162,7 +162,7 @@
-
+
@@ -179,7 +179,7 @@
-
+
-
+
+
diff --git a/src/Ombi/ClientApp/app/settings/massemail/massemail.component.ts b/src/Ombi/ClientApp/app/settings/massemail/massemail.component.ts index a80f7adfe..91693103f 100644 --- a/src/Ombi/ClientApp/app/settings/massemail/massemail.component.ts +++ b/src/Ombi/ClientApp/app/settings/massemail/massemail.component.ts @@ -38,10 +38,6 @@ export class MassEmailComponent implements OnInit { this.users.forEach(u => u.selected = !u.selected); } - public selectSingleUser(user: IMassEmailUserModel) { - user.selected = !user.selected; - } - public send() { if(!this.subject) { this.missingSubject = true; From fed7708a0d0e24bdef99d9d4915532fb4ba03d34 Mon Sep 17 00:00:00 2001 From: TidusJar Date: Wed, 10 Oct 2018 15:36:37 +0100 Subject: [PATCH 38/43] fixed the build. Thanks Matt! --- src/Ombi/package.json | 3 ++- src/Ombi/tsconfig.json | 3 --- src/Ombi/yarn.lock | 10 +++------- 3 files changed, 5 insertions(+), 11 deletions(-) diff --git a/src/Ombi/package.json b/src/Ombi/package.json index ceb7fc621..fa476f66b 100644 --- a/src/Ombi/package.json +++ b/src/Ombi/package.json @@ -91,7 +91,8 @@ "zone.js": "^0.8.26" }, "resolutions": { - "@types/tapable": "1.0.0" + "@types/tapable": "1.0.0", + "cypress/**/@types/sinon": "4.3.3" }, "devDependencies": { "cypress": "^3.1.0" diff --git a/src/Ombi/tsconfig.json b/src/Ombi/tsconfig.json index bd114dcdb..1e41f53b9 100644 --- a/src/Ombi/tsconfig.json +++ b/src/Ombi/tsconfig.json @@ -28,9 +28,6 @@ } ] }, - "types": [ - "cypress" - ], "include": [ "ClientApp/**/*", "typings/**/*", diff --git a/src/Ombi/yarn.lock b/src/Ombi/yarn.lock index 1debb9f2d..77c0b08f6 100644 --- a/src/Ombi/yarn.lock +++ b/src/Ombi/yarn.lock @@ -210,13 +210,9 @@ "@types/chai" "*" "@types/sinon" "*" -"@types/sinon@*": - version "5.0.4" - resolved "https://registry.yarnpkg.com/@types/sinon/-/sinon-5.0.4.tgz#a765b390b373cf01a3b19b0c97f9eb4bb2a168b1" - -"@types/sinon@4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@types/sinon/-/sinon-4.0.0.tgz#9a93ffa4ee1329e85166278a5ed99f81dc4c8362" +"@types/sinon@*", "@types/sinon@4.0.0", "@types/sinon@4.3.3": + version "4.3.3" + resolved "https://registry.yarnpkg.com/@types/sinon/-/sinon-4.3.3.tgz#97cbbfddc3282b5fd40c7abf80b99db426fd4237" "@types/sizzle@*": version "2.3.2" From 870a07de9d181abb3663eee25e13815e14382717 Mon Sep 17 00:00:00 2001 From: TidusJar Date: Wed, 10 Oct 2018 15:47:50 +0100 Subject: [PATCH 39/43] revert, no idea how this happened --- src/Ombi.DependencyInjection/IocExtensions.cs | 1 + src/Ombi.Schedule.Tests/IssuesPurgeTests.cs | 85 +++++++++++++++++++ src/Ombi.Schedule/Jobs/Ombi/IIssuesPurge.cs | 9 ++ src/Ombi.Schedule/Jobs/Ombi/IssuesPurge.cs | 63 ++++++++++++++ .../Settings/Models/IssueSettings.cs | 3 + .../Settings/Models/JobSettings.cs | 1 + .../Settings/Models/JobSettingsHelper.cs | 5 ++ src/Ombi.Store/Entities/Requests/Issues.cs | 1 + .../ClientApp/app/interfaces/ISettings.ts | 3 + .../music/musicrequests.component.html | 2 +- .../app/settings/issues/issues.component.ts | 6 +- .../app/settings/jobs/jobs.component.html | 9 +- .../app/settings/jobs/jobs.component.ts | 1 + .../usermanagement-user.component.html | 12 +-- src/Ombi/Controllers/SettingsController.cs | 3 +- 15 files changed, 193 insertions(+), 11 deletions(-) create mode 100644 src/Ombi.Schedule.Tests/IssuesPurgeTests.cs create mode 100644 src/Ombi.Schedule/Jobs/Ombi/IIssuesPurge.cs create mode 100644 src/Ombi.Schedule/Jobs/Ombi/IssuesPurge.cs diff --git a/src/Ombi.DependencyInjection/IocExtensions.cs b/src/Ombi.DependencyInjection/IocExtensions.cs index eac6812bc..30ccb6973 100644 --- a/src/Ombi.DependencyInjection/IocExtensions.cs +++ b/src/Ombi.DependencyInjection/IocExtensions.cs @@ -192,6 +192,7 @@ namespace Ombi.DependencyInjection services.AddTransient(); services.AddTransient(); services.AddTransient(); + services.AddTransient(); } } } diff --git a/src/Ombi.Schedule.Tests/IssuesPurgeTests.cs b/src/Ombi.Schedule.Tests/IssuesPurgeTests.cs new file mode 100644 index 000000000..932022cd8 --- /dev/null +++ b/src/Ombi.Schedule.Tests/IssuesPurgeTests.cs @@ -0,0 +1,85 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using Moq; +using NUnit.Framework; +using Ombi.Core.Settings; +using Ombi.Schedule.Jobs.Ombi; +using Ombi.Settings.Settings.Models; +using Ombi.Store.Entities.Requests; +using Ombi.Store.Repository; +using System.Threading.Tasks; + +namespace Ombi.Schedule.Tests +{ + [TestFixture] + public class IssuesPurgeTests + { + + [SetUp] + public void Setup() + { + Repo = new Mock>(); + Settings = new Mock>(); + Settings.Setup(x => x.GetSettingsAsync()).ReturnsAsync(new IssueSettings()); + Job = new IssuesPurge(Repo.Object, Settings.Object); + } + + public Mock> Repo { get; set; } + public Mock> Settings { get; set; } + public IssuesPurge Job { get; set; } + + [Test] + public async Task DoesNotRun_WhenDisabled() + { + await Job.Start(); + Repo.Verify(x => x.GetAll(),Times.Never); + } + + [Test] + public async Task Deletes_Correct_Issue() + { + var issues = new List() + { + new Issues + { + Status = IssueStatus.Resolved, + ResovledDate = DateTime.Now.AddDays(-5).AddHours(-1) + } + }; + + Settings.Setup(x => x.GetSettingsAsync()).ReturnsAsync(new IssueSettings { DeleteIssues = true, DaysAfterResolvedToDelete = 5 }); + Repo.Setup(x => x.GetAll()).Returns(new EnumerableQuery(issues)); + await Job.Start(); + + Assert.That(issues.First().Status, Is.EqualTo(IssueStatus.Deleted)); + Repo.Verify(x => x.SaveChangesAsync(), Times.Once); + } + + [Test] + public async Task DoesNot_Delete_AnyIssues() + { + var issues = new List() + { + new Issues + { + Status = IssueStatus.Resolved, + ResovledDate = DateTime.Now.AddDays(-2) + }, + new Issues + { + Status = IssueStatus.Resolved, + ResovledDate = DateTime.Now.AddDays(-6) + } + }; + + Settings.Setup(x => x.GetSettingsAsync()).ReturnsAsync(new IssueSettings { DeleteIssues = true, DaysAfterResolvedToDelete = 5 }); + Repo.Setup(x => x.GetAll()).Returns(new EnumerableQuery(issues)); + await Job.Start(); + + Assert.That(issues[0].Status, Is.Not.EqualTo(IssueStatus.Deleted)); + Assert.That(issues[1].Status, Is.EqualTo(IssueStatus.Deleted)); + Repo.Verify(x => x.SaveChangesAsync(), Times.Once); + } + } +} \ No newline at end of file diff --git a/src/Ombi.Schedule/Jobs/Ombi/IIssuesPurge.cs b/src/Ombi.Schedule/Jobs/Ombi/IIssuesPurge.cs new file mode 100644 index 000000000..fbd1e3aaf --- /dev/null +++ b/src/Ombi.Schedule/Jobs/Ombi/IIssuesPurge.cs @@ -0,0 +1,9 @@ +using System.Threading.Tasks; + +namespace Ombi.Schedule.Jobs.Ombi +{ + public interface IIssuesPurge : IBaseJob + { + Task Start(); + } +} \ No newline at end of file diff --git a/src/Ombi.Schedule/Jobs/Ombi/IssuesPurge.cs b/src/Ombi.Schedule/Jobs/Ombi/IssuesPurge.cs new file mode 100644 index 000000000..92ca31071 --- /dev/null +++ b/src/Ombi.Schedule/Jobs/Ombi/IssuesPurge.cs @@ -0,0 +1,63 @@ +using System; +using System.Linq; +using System.Threading.Tasks; +using Ombi.Core.Settings; +using Ombi.Settings.Settings.Models; +using Ombi.Store.Entities.Requests; +using Ombi.Store.Repository; + +namespace Ombi.Schedule.Jobs.Ombi +{ + public class IssuesPurge : IIssuesPurge + { + public IssuesPurge(IRepository issuesRepo, ISettingsService issueSettings) + { + _issuesRepository = issuesRepo; + _settings = issueSettings; + _settings.ClearCache(); + } + + private readonly IRepository _issuesRepository; + private readonly ISettingsService _settings; + + public async Task Start() + { + var settings = await _settings.GetSettingsAsync(); + if (!settings.DeleteIssues) + { + return; + } + + var now = DateTime.Now.AddDays(-settings.DaysAfterResolvedToDelete).Date; + var resolved = _issuesRepository.GetAll().Where(x => x.Status == IssueStatus.Resolved); + var toDelete = resolved.Where(x => x.ResovledDate.HasValue && x.ResovledDate.Value.Date <= now); + + foreach (var d in toDelete) + { + d.Status = IssueStatus.Deleted; + } + + await _issuesRepository.SaveChangesAsync(); + } + + private bool _disposed; + protected virtual void Dispose(bool disposing) + { + if (_disposed) + return; + + if (disposing) + { + _issuesRepository?.Dispose(); + _settings?.Dispose(); + } + _disposed = true; + } + + public void Dispose() + { + Dispose(true); + GC.SuppressFinalize(this); + } + } +} \ No newline at end of file diff --git a/src/Ombi.Settings/Settings/Models/IssueSettings.cs b/src/Ombi.Settings/Settings/Models/IssueSettings.cs index e025c82d1..d7a35c0d9 100644 --- a/src/Ombi.Settings/Settings/Models/IssueSettings.cs +++ b/src/Ombi.Settings/Settings/Models/IssueSettings.cs @@ -4,5 +4,8 @@ { public bool Enabled { get; set; } public bool EnableInProgress { get; set; } + + public bool DeleteIssues { get; set; } + public int DaysAfterResolvedToDelete { get; set; } } } \ No newline at end of file diff --git a/src/Ombi.Settings/Settings/Models/JobSettings.cs b/src/Ombi.Settings/Settings/Models/JobSettings.cs index 48c721e29..8b283cdf7 100644 --- a/src/Ombi.Settings/Settings/Models/JobSettings.cs +++ b/src/Ombi.Settings/Settings/Models/JobSettings.cs @@ -14,5 +14,6 @@ public string RefreshMetadata { get; set; } public string Newsletter { get; set; } public string LidarrArtistSync { get; set; } + public string IssuesPurge { get; set; } } } \ No newline at end of file diff --git a/src/Ombi.Settings/Settings/Models/JobSettingsHelper.cs b/src/Ombi.Settings/Settings/Models/JobSettingsHelper.cs index 0f8fec5fd..4491ca27a 100644 --- a/src/Ombi.Settings/Settings/Models/JobSettingsHelper.cs +++ b/src/Ombi.Settings/Settings/Models/JobSettingsHelper.cs @@ -57,6 +57,11 @@ namespace Ombi.Settings.Settings.Models return Get(s.LidarrArtistSync, Cron.Hourly(40)); } + public static string IssuePurge(JobSettings s) + { + return Get(s.IssuesPurge, Cron.Daily()); + } + private static string Get(string settings, string defaultCron) { return settings.HasValue() ? settings : defaultCron; diff --git a/src/Ombi.Store/Entities/Requests/Issues.cs b/src/Ombi.Store/Entities/Requests/Issues.cs index b1021e362..9fbc6a83e 100644 --- a/src/Ombi.Store/Entities/Requests/Issues.cs +++ b/src/Ombi.Store/Entities/Requests/Issues.cs @@ -29,5 +29,6 @@ namespace Ombi.Store.Entities.Requests Pending = 0, InProgress = 1, Resolved = 2, + Deleted = 3, } } \ No newline at end of file diff --git a/src/Ombi/ClientApp/app/interfaces/ISettings.ts b/src/Ombi/ClientApp/app/interfaces/ISettings.ts index 5f1b255a4..f1934a994 100644 --- a/src/Ombi/ClientApp/app/interfaces/ISettings.ts +++ b/src/Ombi/ClientApp/app/interfaces/ISettings.ts @@ -144,11 +144,14 @@ export interface IJobSettings { newsletter: string; plexRecentlyAddedSync: string; lidarrArtistSync: string; + issuesPurge: string; } export interface IIssueSettings extends ISettings { enabled: boolean; enableInProgress: boolean; + deleteIssues: boolean; + daysAfterResolvedToDelete: number; } export interface IAuthenticationSettings extends ISettings { diff --git a/src/Ombi/ClientApp/app/requests/music/musicrequests.component.html b/src/Ombi/ClientApp/app/requests/music/musicrequests.component.html index f86d3351d..c4c903da2 100644 --- a/src/Ombi/ClientApp/app/requests/music/musicrequests.component.html +++ b/src/Ombi/ClientApp/app/requests/music/musicrequests.component.html @@ -59,7 +59,7 @@

- {{request.title}} + {{request.title | truncate: 36}}

diff --git a/src/Ombi/ClientApp/app/settings/issues/issues.component.ts b/src/Ombi/ClientApp/app/settings/issues/issues.component.ts index 005202f1e..cfe0bd65c 100644 --- a/src/Ombi/ClientApp/app/settings/issues/issues.component.ts +++ b/src/Ombi/ClientApp/app/settings/issues/issues.component.ts @@ -21,8 +21,10 @@ export class IssuesComponent implements OnInit { public ngOnInit() { this.settingsService.getIssueSettings().subscribe(x => { this.form = this.fb.group({ - enabled: [x.enabled], - enableInProgress: [x.enableInProgress], + enabled: [x.enabled], + enableInProgress: [x.enableInProgress], + deleteIssues: [x.deleteIssues], + daysAfterResolvedToDelete: [x.daysAfterResolvedToDelete], }); }); this.getCategories(); diff --git a/src/Ombi/ClientApp/app/settings/jobs/jobs.component.html b/src/Ombi/ClientApp/app/settings/jobs/jobs.component.html index a4dcd6fb3..1365710f0 100644 --- a/src/Ombi/ClientApp/app/settings/jobs/jobs.component.html +++ b/src/Ombi/ClientApp/app/settings/jobs/jobs.component.html @@ -85,12 +85,19 @@
-
+
The Newsletter is required
+ +
+ + + The Issues Purge is required + +
diff --git a/src/Ombi/ClientApp/app/settings/jobs/jobs.component.ts b/src/Ombi/ClientApp/app/settings/jobs/jobs.component.ts index 756d6ba89..d8ce106ae 100644 --- a/src/Ombi/ClientApp/app/settings/jobs/jobs.component.ts +++ b/src/Ombi/ClientApp/app/settings/jobs/jobs.component.ts @@ -35,6 +35,7 @@ export class JobsComponent implements OnInit { newsletter: [x.newsletter, Validators.required], plexRecentlyAddedSync: [x.plexRecentlyAddedSync, Validators.required], lidarrArtistSync: [x.lidarrArtistSync, Validators.required], + issuesPurge: [x.issuesPurge, Validators.required], }); }); } diff --git a/src/Ombi/ClientApp/app/usermanagement/usermanagement-user.component.html b/src/Ombi/ClientApp/app/usermanagement/usermanagement-user.component.html index bf0e53895..3f44a808b 100644 --- a/src/Ombi/ClientApp/app/usermanagement/usermanagement-user.component.html +++ b/src/Ombi/ClientApp/app/usermanagement/usermanagement-user.component.html @@ -147,7 +147,7 @@
-
+
@@ -165,7 +165,7 @@
-
+
@@ -182,7 +182,7 @@
-
+
-
+