From d4246abad513e984dc05608c31f0cf63450bace9 Mon Sep 17 00:00:00 2001 From: Jamie Rees Date: Fri, 8 Mar 2019 11:13:54 +0000 Subject: [PATCH] More work on the deny and also got the Partially flag working !wip --- .../Rules/Search/AvailabilityRuleHelper.cs | 4 ++ .../src/app/media-details/components/index.ts | 9 ++++ .../movie/movie-details.component.html | 30 ++++++++---- .../movie/movie-details.component.ts | 21 +++++---- .../deny-dialog/deny-dialog.component.html | 10 ++++ .../deny-dialog/deny-dialog.component.ts | 47 +++++++++++++++++++ .../shared/interfaces/interfaces.ts | 7 +++ .../components/tv/tv-details.component.html | 6 ++- .../media-details.component.scss | 2 +- .../app/media-details/media-details.module.ts | 3 +- .../episode-request.component.ts | 2 +- src/Ombi/wwwroot/translations/en.json | 3 ++ 12 files changed, 120 insertions(+), 24 deletions(-) create mode 100644 src/Ombi/ClientApp/src/app/media-details/components/shared/deny-dialog/deny-dialog.component.html create mode 100644 src/Ombi/ClientApp/src/app/media-details/components/shared/deny-dialog/deny-dialog.component.ts create mode 100644 src/Ombi/ClientApp/src/app/media-details/components/shared/interfaces/interfaces.ts diff --git a/src/Ombi.Core/Rule/Rules/Search/AvailabilityRuleHelper.cs b/src/Ombi.Core/Rule/Rules/Search/AvailabilityRuleHelper.cs index 33f999ca2..24faa3a97 100644 --- a/src/Ombi.Core/Rule/Rules/Search/AvailabilityRuleHelper.cs +++ b/src/Ombi.Core/Rule/Rules/Search/AvailabilityRuleHelper.cs @@ -21,6 +21,10 @@ namespace Ombi.Core.Rule.Rules.Search season.SeasonAvailable = true; } } + if(search.SeasonRequests.Any(x => x.Episodes.Any(e => e.Available))) + { + search.PartlyAvailable = true; + } if (search.SeasonRequests.All(x => x.Episodes.All(e => e.Available))) { search.FullyAvailable = true; diff --git a/src/Ombi/ClientApp/src/app/media-details/components/index.ts b/src/Ombi/ClientApp/src/app/media-details/components/index.ts index 0e149c06c..99d46d339 100644 --- a/src/Ombi/ClientApp/src/app/media-details/components/index.ts +++ b/src/Ombi/ClientApp/src/app/media-details/components/index.ts @@ -7,6 +7,7 @@ import { TopBannerComponent } from "./shared/top-banner/top-banner.component"; import { SocialIconsComponent } from "./shared/social-icons/social-icons.component"; import { MediaPosterComponent } from "./shared/media-poster/media-poster.component"; import { CastCarouselComponent } from "./shared/cast-carousel/cast-carousel.component"; +import { DenyDialogComponent } from "./shared/deny-dialog/deny-dialog.component"; export const components: any[] = [ MovieDetailsComponent, @@ -18,4 +19,12 @@ export const components: any[] = [ SocialIconsComponent, MediaPosterComponent, CastCarouselComponent, + DenyDialogComponent, +]; + + + +export const entryComponents: any[] = [ + YoutubeTrailerComponent, + DenyDialogComponent, ]; diff --git a/src/Ombi/ClientApp/src/app/media-details/components/movie/movie-details.component.html b/src/Ombi/ClientApp/src/app/media-details/components/movie/movie-details.component.html index 5ce3fe39d..e3483ab92 100644 --- a/src/Ombi/ClientApp/src/app/media-details/components/movie/movie-details.component.html +++ b/src/Ombi/ClientApp/src/app/media-details/components/movie/movie-details.component.html @@ -3,8 +3,6 @@ - -
@@ -13,7 +11,7 @@ -
+
{{ 'Common.Available' | translate }} - + + - - - + + + + + + + + +
@@ -77,8 +87,8 @@
- - + +
diff --git a/src/Ombi/ClientApp/src/app/media-details/components/movie/movie-details.component.ts b/src/Ombi/ClientApp/src/app/media-details/components/movie/movie-details.component.ts index e65404f35..c8c0e3ed4 100644 --- a/src/Ombi/ClientApp/src/app/media-details/components/movie/movie-details.component.ts +++ b/src/Ombi/ClientApp/src/app/media-details/components/movie/movie-details.component.ts @@ -6,7 +6,8 @@ import { ISearchMovieResultV2 } from "../../../interfaces/ISearchMovieResultV2"; import { MatDialog } from "@angular/material"; import { YoutubeTrailerComponent } from "../shared/youtube-trailer.component"; import { AuthService } from "../../../auth/auth.service"; -import { IMovieRequests, IRadarrProfile, IRadarrRootFolder } from "../../../interfaces"; +import { IMovieRequests, IRadarrProfile, IRadarrRootFolder, RequestType } from "../../../interfaces"; +import { DenyDialogComponent } from "../shared/deny-dialog/deny-dialog.component"; @Component({ templateUrl: "./movie-details.component.html", @@ -85,13 +86,17 @@ export class MovieDetailsComponent { } public async deny() { - const result = await this.requestService.denyMovie({ id: this.movieRequest.id, reason: "" }).toPromise(); - if (result.result) { - this.movie.approved = false; - this.messageService.send(result.message, "Ok"); - } else { - this.messageService.send(result.errorMessage, "Ok"); - } + const dialogRef = this.dialog.open(DenyDialogComponent, { + width: '250px', + data: {requestId: this.movieRequest.id, requestType: RequestType.movie} + }); + + dialogRef.afterClosed().subscribe(result => { + this.movieRequest.denied = result; + if(this.movieRequest.denied) { + this.movie.approved = false; + } + }); } public async approve() { diff --git a/src/Ombi/ClientApp/src/app/media-details/components/shared/deny-dialog/deny-dialog.component.html b/src/Ombi/ClientApp/src/app/media-details/components/shared/deny-dialog/deny-dialog.component.html new file mode 100644 index 000000000..e6c319c24 --- /dev/null +++ b/src/Ombi/ClientApp/src/app/media-details/components/shared/deny-dialog/deny-dialog.component.html @@ -0,0 +1,10 @@ +

Deny Reason

+
+ + + +
+
+ + +
\ No newline at end of file diff --git a/src/Ombi/ClientApp/src/app/media-details/components/shared/deny-dialog/deny-dialog.component.ts b/src/Ombi/ClientApp/src/app/media-details/components/shared/deny-dialog/deny-dialog.component.ts new file mode 100644 index 000000000..8d6e92e64 --- /dev/null +++ b/src/Ombi/ClientApp/src/app/media-details/components/shared/deny-dialog/deny-dialog.component.ts @@ -0,0 +1,47 @@ +import { Component, Inject, Output, EventEmitter } from "@angular/core"; +import { IDenyDialogData } from "../interfaces/interfaces"; +import { MatDialogRef, MAT_DIALOG_DATA } from "@angular/material"; +import { RequestService, MessageService } from "../../../../services"; +import { RequestType, IRequestEngineResult } from "../../../../interfaces"; + +@Component({ + selector: "deny-dialog", + templateUrl: "./deny-dialog.component.html", +}) +export class DenyDialogComponent { + constructor( + public dialogRef: MatDialogRef, + @Inject(MAT_DIALOG_DATA) public data: IDenyDialogData, + private requestService: RequestService, + public messageService: MessageService) {} + + public denyReason: string; + + public async deny() { + let result: IRequestEngineResult; + if(this.data.requestType == RequestType.movie) { + result = await this.requestService.denyMovie({id: this.data.requestId, reason: this.denyReason }).toPromise(); + } + if(this.data.requestType == RequestType.tvShow) { + result = await this.requestService.denyChild({id: this.data.requestId, reason: this.denyReason }).toPromise(); + } + if(this.data.requestType == RequestType.album) { + result = await this.requestService.denyAlbum({id: this.data.requestId, reason: this.denyReason }).toPromise(); + } + + if (result.result) { + this.messageService.send("Denied Request", "Ok"); + this.data.denied = true; + } else { + this.messageService.send(result.errorMessage, "Ok"); + this.data.denied = false; + } + + this.dialogRef.close(); + } + + onNoClick(): void { + this.dialogRef.close(); + this.data.denied = false; + } +} diff --git a/src/Ombi/ClientApp/src/app/media-details/components/shared/interfaces/interfaces.ts b/src/Ombi/ClientApp/src/app/media-details/components/shared/interfaces/interfaces.ts new file mode 100644 index 000000000..205a146c4 --- /dev/null +++ b/src/Ombi/ClientApp/src/app/media-details/components/shared/interfaces/interfaces.ts @@ -0,0 +1,7 @@ +import { RequestType } from "../../../../interfaces"; + +export interface IDenyDialogData { + requestType: RequestType; + requestId: number; + denied: boolean; +} \ No newline at end of file diff --git a/src/Ombi/ClientApp/src/app/media-details/components/tv/tv-details.component.html b/src/Ombi/ClientApp/src/app/media-details/components/tv/tv-details.component.html index b6ae8644a..8e107554f 100644 --- a/src/Ombi/ClientApp/src/app/media-details/components/tv/tv-details.component.html +++ b/src/Ombi/ClientApp/src/app/media-details/components/tv/tv-details.component.html @@ -19,12 +19,14 @@
- - +
diff --git a/src/Ombi/ClientApp/src/app/media-details/media-details.component.scss b/src/Ombi/ClientApp/src/app/media-details/media-details.component.scss index ba1c10494..918deaa07 100644 --- a/src/Ombi/ClientApp/src/app/media-details/media-details.component.scss +++ b/src/Ombi/ClientApp/src/app/media-details/media-details.component.scss @@ -114,7 +114,7 @@ } #info-wrapper .sidebar-poster { - margin-top: -300px; + margin-top: -280px; width: 250px; } diff --git a/src/Ombi/ClientApp/src/app/media-details/media-details.module.ts b/src/Ombi/ClientApp/src/app/media-details/media-details.module.ts index f3bf768e9..da68ba6b2 100644 --- a/src/Ombi/ClientApp/src/app/media-details/media-details.module.ts +++ b/src/Ombi/ClientApp/src/app/media-details/media-details.module.ts @@ -9,7 +9,6 @@ import { SharedModule } from "../shared/shared.module"; import { MovieDetailsComponent } from "./components/movie/movie-details.component"; import { TvDetailsComponent } from "./components/tv/tv-details.component"; import { PipeModule } from "../pipes/pipe.module"; -import { YoutubeTrailerComponent } from "./components/shared/youtube-trailer.component"; import * as fromComponents from './components'; import { AuthGuard } from "../auth/auth.guard"; @@ -34,7 +33,7 @@ const routes: Routes = [ RouterModule, ], entryComponents: [ - YoutubeTrailerComponent + ...fromComponents.entryComponents ], providers: [ SearchService, diff --git a/src/Ombi/ClientApp/src/app/shared/episode-request/episode-request.component.ts b/src/Ombi/ClientApp/src/app/shared/episode-request/episode-request.component.ts index 5caeb6126..8b03556f5 100644 --- a/src/Ombi/ClientApp/src/app/shared/episode-request/episode-request.component.ts +++ b/src/Ombi/ClientApp/src/app/shared/episode-request/episode-request.component.ts @@ -66,7 +66,7 @@ export class EpisodeRequestComponent implements OnInit { }); } else { - this.notificationService.send("Request Added", requestResult.errorMessage ? requestResult.errorMessage : requestResult.message); + this.notificationService.send(requestResult.errorMessage ? requestResult.errorMessage : requestResult.message); } this.dialogRef.close(); } diff --git a/src/Ombi/wwwroot/translations/en.json b/src/Ombi/wwwroot/translations/en.json index 6cc391d25..fb9d5dcbd 100644 --- a/src/Ombi/wwwroot/translations/en.json +++ b/src/Ombi/wwwroot/translations/en.json @@ -188,5 +188,8 @@ "Votes": { "CompletedVotesTab": "Voted", "VotesTab": "Votes Needed" + }, + "MediaDetails": { + "Denied": "Denied" } }