From 806cf7c0ffc73182a8099de40ad84b10825eff53 Mon Sep 17 00:00:00 2001 From: TidusJar Date: Tue, 4 Dec 2018 09:45:22 +0000 Subject: [PATCH] More on the UI !wip --- src/Ombi.Store/Context/OmbiContext.cs | 1 + .../Migrations/20181203213532_RequestQueue.cs | 17 ---- ...> 20181204084915_RequestQueue.Designer.cs} | 24 ++++- .../Migrations/20181204084915_RequestQueue.cs | 35 +++++++ .../Migrations/OmbiContextModelSnapshot.cs | 22 +++++ .../app/interfaces/IFailedRequests.ts | 11 +++ .../ClientApp/app/interfaces/IRequestModel.ts | 2 +- src/Ombi/ClientApp/app/interfaces/index.ts | 1 + src/Ombi/ClientApp/app/services/index.ts | 1 + .../app/services/requestretry.service.ts | 6 +- .../failedrequest.component.html | 25 +++++ .../failedrequests.component.ts | 23 ++--- .../app/settings/jobs/jobs.component.ts | 1 + .../ClientApp/app/settings/settings.module.ts | 3 +- .../Controllers/RequestRetryController.cs | 92 +++++++++++++++++++ src/Ombi/Controllers/RequestRetyController.cs | 45 --------- src/Ombi/Models/FailedRequestViewModel.cs | 17 ++++ 17 files changed, 243 insertions(+), 83 deletions(-) delete mode 100644 src/Ombi.Store/Migrations/20181203213532_RequestQueue.cs rename src/Ombi.Store/Migrations/{20181203213532_RequestQueue.Designer.cs => 20181204084915_RequestQueue.Designer.cs} (98%) create mode 100644 src/Ombi.Store/Migrations/20181204084915_RequestQueue.cs create mode 100644 src/Ombi/ClientApp/app/interfaces/IFailedRequests.ts create mode 100644 src/Ombi/Controllers/RequestRetryController.cs delete mode 100644 src/Ombi/Controllers/RequestRetyController.cs create mode 100644 src/Ombi/Models/FailedRequestViewModel.cs diff --git a/src/Ombi.Store/Context/OmbiContext.cs b/src/Ombi.Store/Context/OmbiContext.cs index 16f26c65a..3d8c05daa 100644 --- a/src/Ombi.Store/Context/OmbiContext.cs +++ b/src/Ombi.Store/Context/OmbiContext.cs @@ -56,6 +56,7 @@ namespace Ombi.Store.Context public DbSet RequestSubscription { get; set; } public DbSet UserNotificationPreferences { get; set; } public DbSet UserQualityProfileses { get; set; } + public DbSet RequestQueue { get; set; } protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) { diff --git a/src/Ombi.Store/Migrations/20181203213532_RequestQueue.cs b/src/Ombi.Store/Migrations/20181203213532_RequestQueue.cs deleted file mode 100644 index cd577cc26..000000000 --- a/src/Ombi.Store/Migrations/20181203213532_RequestQueue.cs +++ /dev/null @@ -1,17 +0,0 @@ -using Microsoft.EntityFrameworkCore.Migrations; - -namespace Ombi.Store.Migrations -{ - public partial class RequestQueue : Migration - { - protected override void Up(MigrationBuilder migrationBuilder) - { - - } - - protected override void Down(MigrationBuilder migrationBuilder) - { - - } - } -} diff --git a/src/Ombi.Store/Migrations/20181203213532_RequestQueue.Designer.cs b/src/Ombi.Store/Migrations/20181204084915_RequestQueue.Designer.cs similarity index 98% rename from src/Ombi.Store/Migrations/20181203213532_RequestQueue.Designer.cs rename to src/Ombi.Store/Migrations/20181204084915_RequestQueue.Designer.cs index 5de4398af..468abb2c7 100644 --- a/src/Ombi.Store/Migrations/20181203213532_RequestQueue.Designer.cs +++ b/src/Ombi.Store/Migrations/20181204084915_RequestQueue.Designer.cs @@ -9,7 +9,7 @@ using Ombi.Store.Context; namespace Ombi.Store.Migrations { [DbContext(typeof(OmbiContext))] - [Migration("20181203213532_RequestQueue")] + [Migration("20181204084915_RequestQueue")] partial class RequestQueue { protected override void BuildTargetModel(ModelBuilder modelBuilder) @@ -510,6 +510,28 @@ namespace Ombi.Store.Migrations b.ToTable("RecentlyAddedLog"); }); + modelBuilder.Entity("Ombi.Store.Entities.RequestQueue", b => + { + b.Property("Id") + .ValueGeneratedOnAdd(); + + b.Property("Completed"); + + b.Property("Dts"); + + b.Property("Error"); + + b.Property("RequestId"); + + b.Property("RetryCount"); + + b.Property("Type"); + + b.HasKey("Id"); + + b.ToTable("RequestQueue"); + }); + modelBuilder.Entity("Ombi.Store.Entities.Requests.AlbumRequest", b => { b.Property("Id") diff --git a/src/Ombi.Store/Migrations/20181204084915_RequestQueue.cs b/src/Ombi.Store/Migrations/20181204084915_RequestQueue.cs new file mode 100644 index 000000000..820ce50af --- /dev/null +++ b/src/Ombi.Store/Migrations/20181204084915_RequestQueue.cs @@ -0,0 +1,35 @@ +using System; +using Microsoft.EntityFrameworkCore.Migrations; + +namespace Ombi.Store.Migrations +{ + public partial class RequestQueue : Migration + { + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.CreateTable( + name: "RequestQueue", + columns: table => new + { + Id = table.Column(nullable: false) + .Annotation("Sqlite:Autoincrement", true), + RequestId = table.Column(nullable: false), + Type = table.Column(nullable: false), + Dts = table.Column(nullable: false), + Error = table.Column(nullable: true), + Completed = table.Column(nullable: true), + RetryCount = table.Column(nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_RequestQueue", x => x.Id); + }); + } + + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropTable( + name: "RequestQueue"); + } + } +} diff --git a/src/Ombi.Store/Migrations/OmbiContextModelSnapshot.cs b/src/Ombi.Store/Migrations/OmbiContextModelSnapshot.cs index 672525b41..5a009d5ef 100644 --- a/src/Ombi.Store/Migrations/OmbiContextModelSnapshot.cs +++ b/src/Ombi.Store/Migrations/OmbiContextModelSnapshot.cs @@ -508,6 +508,28 @@ namespace Ombi.Store.Migrations b.ToTable("RecentlyAddedLog"); }); + modelBuilder.Entity("Ombi.Store.Entities.RequestQueue", b => + { + b.Property("Id") + .ValueGeneratedOnAdd(); + + b.Property("Completed"); + + b.Property("Dts"); + + b.Property("Error"); + + b.Property("RequestId"); + + b.Property("RetryCount"); + + b.Property("Type"); + + b.HasKey("Id"); + + b.ToTable("RequestQueue"); + }); + modelBuilder.Entity("Ombi.Store.Entities.Requests.AlbumRequest", b => { b.Property("Id") diff --git a/src/Ombi/ClientApp/app/interfaces/IFailedRequests.ts b/src/Ombi/ClientApp/app/interfaces/IFailedRequests.ts new file mode 100644 index 000000000..002904386 --- /dev/null +++ b/src/Ombi/ClientApp/app/interfaces/IFailedRequests.ts @@ -0,0 +1,11 @@ +import { RequestType } from "."; +export interface IFailedRequestsViewModel { + failedId: number; + title: string; + releaseYear: Date; + requestId: number; + requestType: RequestType; + dts: Date; + error: string; + retryCount: number; +} diff --git a/src/Ombi/ClientApp/app/interfaces/IRequestModel.ts b/src/Ombi/ClientApp/app/interfaces/IRequestModel.ts index 310aaa6fd..5a72abf31 100644 --- a/src/Ombi/ClientApp/app/interfaces/IRequestModel.ts +++ b/src/Ombi/ClientApp/app/interfaces/IRequestModel.ts @@ -3,7 +3,7 @@ export enum RequestType { movie = 1, tvShow = 2, - + album = 3, } // NEW WORLD diff --git a/src/Ombi/ClientApp/app/interfaces/index.ts b/src/Ombi/ClientApp/app/interfaces/index.ts index bfc89edc6..e1cf823e8 100644 --- a/src/Ombi/ClientApp/app/interfaces/index.ts +++ b/src/Ombi/ClientApp/app/interfaces/index.ts @@ -17,3 +17,4 @@ export * from "./IRecentlyAdded"; export * from "./ILidarr"; export * from "./ISearchMusicResult"; export * from "./IVote"; +export * from "./IFailedRequests"; diff --git a/src/Ombi/ClientApp/app/services/index.ts b/src/Ombi/ClientApp/app/services/index.ts index c1ccc2585..edffdd625 100644 --- a/src/Ombi/ClientApp/app/services/index.ts +++ b/src/Ombi/ClientApp/app/services/index.ts @@ -15,3 +15,4 @@ export * from "./mobile.service"; export * from "./notificationMessage.service"; export * from "./recentlyAdded.service"; export * from "./vote.service"; +export * from "./requestretry.service"; diff --git a/src/Ombi/ClientApp/app/services/requestretry.service.ts b/src/Ombi/ClientApp/app/services/requestretry.service.ts index 338475609..09e345566 100644 --- a/src/Ombi/ClientApp/app/services/requestretry.service.ts +++ b/src/Ombi/ClientApp/app/services/requestretry.service.ts @@ -4,7 +4,7 @@ import { Injectable } from "@angular/core"; import { HttpClient } from "@angular/common/http"; import { Observable } from "rxjs"; -import { IMobileUsersViewModel } from "../interfaces"; +import { IFailedRequestsViewModel } from "../interfaces"; import { ServiceHelpers } from "./service.helpers"; @Injectable() @@ -12,7 +12,7 @@ export class RequestRetryService extends ServiceHelpers { constructor(http: HttpClient, public platformLocation: PlatformLocation) { super(http, "/api/v1/requestretry/", platformLocation); } - public getUserDeviceList(): Observable { - return this.http.get(`${this.url}notification/`, {headers: this.headers}); + public getFailedRequests(): Observable { + return this.http.get(this.url, {headers: this.headers}); } } diff --git a/src/Ombi/ClientApp/app/settings/failedrequests/failedrequest.component.html b/src/Ombi/ClientApp/app/settings/failedrequests/failedrequest.component.html index 4689eef46..d1e5b13ec 100644 --- a/src/Ombi/ClientApp/app/settings/failedrequests/failedrequest.component.html +++ b/src/Ombi/ClientApp/app/settings/failedrequests/failedrequest.component.html @@ -1,3 +1,28 @@  + + + + + + + + + + + + + + + + + + + + + + +
TitleTypeRetry CountError DescriptionRetryDelete
+ {{v.title}} + {{RequestType[v.type] | humanize}}{{v.retryCount}}
diff --git a/src/Ombi/ClientApp/app/settings/failedrequests/failedrequests.component.ts b/src/Ombi/ClientApp/app/settings/failedrequests/failedrequests.component.ts index af75a8bf1..214729840 100644 --- a/src/Ombi/ClientApp/app/settings/failedrequests/failedrequests.component.ts +++ b/src/Ombi/ClientApp/app/settings/failedrequests/failedrequests.component.ts @@ -1,25 +1,18 @@ import { Component, OnInit } from "@angular/core"; -import { IAbout } from "../../interfaces/ISettings"; -import { JobService, SettingsService } from "../../services"; +import { IFailedRequestsViewModel, RequestType } from "../../interfaces"; +import { RequestRetryService } from "../../services"; @Component({ - templateUrl: "./about.component.html", + templateUrl: "./failedrequest.component.html", }) -export class AboutComponent implements OnInit { +export class FailedRequestsComponent implements OnInit { - public about: IAbout; - public newUpdate: boolean; + public vm: IFailedRequestsViewModel[]; + public RequestType = RequestType; - constructor(private readonly settingsService: SettingsService, - private readonly jobService: JobService) { } + constructor(private retry: RequestRetryService) { } public ngOnInit() { - this.settingsService.about().subscribe(x => this.about = x); - this.jobService.getCachedUpdate().subscribe(x => { - if (x === true) { - this.newUpdate = true; - } - }); - + this.retry.getFailedRequests().subscribe(x => this.vm = x); } } diff --git a/src/Ombi/ClientApp/app/settings/jobs/jobs.component.ts b/src/Ombi/ClientApp/app/settings/jobs/jobs.component.ts index d8ce106ae..853005185 100644 --- a/src/Ombi/ClientApp/app/settings/jobs/jobs.component.ts +++ b/src/Ombi/ClientApp/app/settings/jobs/jobs.component.ts @@ -36,6 +36,7 @@ export class JobsComponent implements OnInit { plexRecentlyAddedSync: [x.plexRecentlyAddedSync, Validators.required], lidarrArtistSync: [x.lidarrArtistSync, Validators.required], issuesPurge: [x.issuesPurge, Validators.required], + retryRequests: [x.retryRequests, Validators.required], }); }); } diff --git a/src/Ombi/ClientApp/app/settings/settings.module.ts b/src/Ombi/ClientApp/app/settings/settings.module.ts index e0fd90db9..fb1a10abe 100644 --- a/src/Ombi/ClientApp/app/settings/settings.module.ts +++ b/src/Ombi/ClientApp/app/settings/settings.module.ts @@ -9,7 +9,7 @@ import { AuthGuard } from "../auth/auth.guard"; import { AuthService } from "../auth/auth.service"; import { CouchPotatoService, EmbyService, IssuesService, JobService, LidarrService, MobileService, NotificationMessageService, PlexService, RadarrService, - SonarrService, TesterService, ValidationService, + RequestRetryService, SonarrService, TesterService, ValidationService, } from "../services"; import { PipeModule } from "../pipes/pipe.module"; @@ -152,6 +152,7 @@ const routes: Routes = [ MobileService, NotificationMessageService, LidarrService, + RequestRetryService, ], }) diff --git a/src/Ombi/Controllers/RequestRetryController.cs b/src/Ombi/Controllers/RequestRetryController.cs new file mode 100644 index 000000000..6a53f9732 --- /dev/null +++ b/src/Ombi/Controllers/RequestRetryController.cs @@ -0,0 +1,92 @@ +using System.Threading.Tasks; +using Microsoft.AspNetCore.Authorization; +using Microsoft.AspNetCore.Mvc; +using Ombi.Store.Entities.Requests; +using Ombi.Store.Repository; +using System.Collections.Generic; +using System.Linq; +using Microsoft.EntityFrameworkCore; +using Ombi.Attributes; +using Ombi.Models; +using Ombi.Store.Entities; +using Ombi.Store.Repository.Requests; + +namespace Ombi.Controllers +{ + [ApiV1] + [Admin] + [Produces("application/json")] + public class RequestRetryController : Controller + { + public RequestRetryController(IRepository requestQueue, IMovieRequestRepository movieRepo, + ITvRequestRepository tvRepo, IMusicRequestRepository musicRepo) + { + _requestQueueRepository = requestQueue; + _movieRequestRepository = movieRepo; + _tvRequestRepository = tvRepo; + _musicRequestRepository = musicRepo; + } + + private readonly IRepository _requestQueueRepository; + private readonly IMovieRequestRepository _movieRequestRepository; + private readonly ITvRequestRepository _tvRequestRepository; + private readonly IMusicRequestRepository _musicRequestRepository; + + /// + /// Get's all the failed requests that are currently in the queue + /// + /// + [HttpGet] + public async Task> GetFailedRequests() + { + var failed = await _requestQueueRepository.GetAll().Where(x => !x.Completed.HasValue).ToListAsync(); + + var vm = new List(); + foreach (var f in failed) + { + var vmModel = new FailedRequestViewModel + { + RequestId = f.RequestId, + RetryCount = f.RetryCount, + Dts = f.Dts, + Error = f.Error, + FailedId = f.Id, + Type = f.Type + }; + + if (f.Type == RequestType.Movie) + { + var request = await _movieRequestRepository.Find(f.RequestId); + vmModel.Title = request.Title; + vmModel.ReleaseYear = request.ReleaseDate; + } + + if (f.Type == RequestType.Album) + { + var request = await _musicRequestRepository.Find(f.RequestId); + vmModel.Title = request.Title; + vmModel.ReleaseYear = request.ReleaseDate; + } + + if (f.Type == RequestType.TvShow) + { + var request = await _tvRequestRepository.GetChild().Include(x => x.ParentRequest).FirstOrDefaultAsync(x => x.Id == f.RequestId); + vmModel.Title = request.Title; + vmModel.ReleaseYear = request.ParentRequest.ReleaseDate; + } + vm.Add(vmModel); + } + + return vm; + } + + [HttpDelete("{queueId:int}")] + public async Task Delete(int queueId) + { + var queueItem = await _requestQueueRepository.GetAll().FirstOrDefaultAsync(x => x.Id == queueId); + await _requestQueueRepository.Delete(queueItem); + return Ok(); + } + + } +} \ No newline at end of file diff --git a/src/Ombi/Controllers/RequestRetyController.cs b/src/Ombi/Controllers/RequestRetyController.cs deleted file mode 100644 index 69e379838..000000000 --- a/src/Ombi/Controllers/RequestRetyController.cs +++ /dev/null @@ -1,45 +0,0 @@ -using System.Threading.Tasks; -using Microsoft.AspNetCore.Authorization; -using Microsoft.AspNetCore.Mvc; -using Ombi.Store.Entities.Requests; -using Ombi.Store.Repository; -using System.Collections.Generic; -using System.Linq; -using Microsoft.EntityFrameworkCore; -using Ombi.Attributes; -using Ombi.Store.Entities; - -namespace Ombi.Controllers -{ - [ApiV1] - [Admin] - [Produces("application/json")] - public class RequestRetyController : Controller - { - public RequestRetyController(IRepository requestQueue) - { - _requestQueueRepository = requestQueue; - } - - private readonly IRepository _requestQueueRepository; - - /// - /// Get's all the failed requests that are currently in the queue - /// - /// - [HttpGet] - public async Task> Categories() - { - return await _requestQueueRepository.GetAll().Where(x => !x.Completed.HasValue).ToListAsync(); - } - - [HttpDelete("{queueId:int}")] - public async Task Delete(int queueId) - { - var queueItem = await _requestQueueRepository.GetAll().FirstOrDefaultAsync(x => x.Id == queueId); - await _requestQueueRepository.Delete(queueItem); - return Ok(); - } - - } -} \ No newline at end of file diff --git a/src/Ombi/Models/FailedRequestViewModel.cs b/src/Ombi/Models/FailedRequestViewModel.cs new file mode 100644 index 000000000..bd3f7a858 --- /dev/null +++ b/src/Ombi/Models/FailedRequestViewModel.cs @@ -0,0 +1,17 @@ +using System; +using Ombi.Store.Entities; + +namespace Ombi.Models +{ + public class FailedRequestViewModel + { + public int FailedId { get; set; } + public string Title { get; set; } + public DateTime ReleaseYear { get; set; } + public int RequestId { get; set; } + public RequestType Type { get; set; } + public DateTime Dts { get; set; } + public string Error { get; set; } + public int RetryCount { get; set; } + } +} \ No newline at end of file