mirror of https://github.com/Ombi-app/Ombi
parent
6ace4d844e
commit
bbf4d72de1
@ -0,0 +1,73 @@
|
||||
<div class="spinner-container">
|
||||
<mat-spinner *ngIf="loading" [color]="'accent'"></mat-spinner>
|
||||
</div>
|
||||
<div *ngIf="!loading" mat-dialog-content class="background">
|
||||
<div class="row">
|
||||
|
||||
<div class="col-12" *ngFor="let season of series.seasonRequests">
|
||||
<mat-expansion-panel>
|
||||
<mat-expansion-panel-header>
|
||||
<mat-panel-title>
|
||||
<mat-checkbox *ngIf="!season.seasonAvailable" (click)="$event.stopPropagation();" (change)="seasonChanged($event, season)"> Season {{season.seasonNumber}}</mat-checkbox>
|
||||
<span *ngIf="season.seasonAvailable">Season {{season.seasonNumber}}</span>
|
||||
</mat-panel-title>
|
||||
<mat-panel-description>
|
||||
Description
|
||||
</mat-panel-description>
|
||||
</mat-expansion-panel-header>
|
||||
|
||||
<div class="row" *ngFor="let ep of season.episodes">
|
||||
<div class="col-1">
|
||||
<div *ngIf="!ep.available && !ep.requested && !ep.approved">
|
||||
<mat-checkbox *ngIf="!ep.selected" [ngModel]="ep.selected" (click)="addRequest(ep)"></mat-checkbox>
|
||||
<mat-checkbox *ngIf="ep.selected" [ngModel]="ep.selected" (click)="removeRequest(ep)"></mat-checkbox>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-1">
|
||||
{{ep.episodeNumber}}
|
||||
</div>
|
||||
<div class="col-3">
|
||||
{{ep.title}}
|
||||
</div>
|
||||
<div class="col-2" *ngIf="ep.airDateDisplay != 'Unknown'">
|
||||
{{ep.airDate | amLocal | amDateFormat: 'L' }}
|
||||
</div>
|
||||
<div class="col-2" *ngIf="ep.airDateDisplay == 'Unknown'">
|
||||
{{ep.airDateDisplay }}
|
||||
</div>
|
||||
<div class="col-3">
|
||||
<ng-template [ngIf]="ep.available"><span class="label label-success"
|
||||
id="availableLabel">Available</span></ng-template>
|
||||
<ng-template [ngIf]="ep.approved && !ep.available "><span class="label label-info"
|
||||
id="processingRequestLabel">Processing Request</span></ng-template>
|
||||
<ng-template [ngIf]="ep.selected"><span class="label label-info"
|
||||
id="selectedLabel">Selected</span></ng-template>
|
||||
<ng-template [ngIf]="ep.requested && !ep.approved && !ep.available && !ep.selected"><span
|
||||
class="label label-warning" id="pendingApprovalLabel">Pending Approval</span>
|
||||
</ng-template>
|
||||
<ng-template [ngIf]="!ep.requested && !ep.available && !ep.approved && !ep.selected"><span
|
||||
class="label label-danger" id="notRequetsedLabel">Not Requested</span></ng-template>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
</mat-expansion-panel>
|
||||
|
||||
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<div mat-dialog-actions>
|
||||
<div class="action-buttons-right">
|
||||
<div class="col-md-12">
|
||||
<button mat-raised-button class="btn-spacing btn-orange">{{
|
||||
'Common.Request' | translate }}</button>
|
||||
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
@ -0,0 +1,91 @@
|
||||
import { Component, OnInit, Inject } from "@angular/core";
|
||||
import { MatDialogRef, MAT_DIALOG_DATA, MatCheckboxChange } from "@angular/material";
|
||||
import { ISearchTvResultV2 } from "../../interfaces/ISearchTvResultV2";
|
||||
import { RequestService, NotificationService } from "../../services";
|
||||
import { ITvRequestViewModel, ISeasonsViewModel, IEpisodesRequests, INewSeasonRequests } from "../../interfaces";
|
||||
|
||||
|
||||
@Component({
|
||||
selector: "episode-request",
|
||||
templateUrl: "episode-request.component.html",
|
||||
})
|
||||
export class EpisodeRequestComponent implements OnInit {
|
||||
|
||||
public loading: boolean;
|
||||
|
||||
constructor(public dialogRef: MatDialogRef<EpisodeRequestComponent>, @Inject(MAT_DIALOG_DATA) public series: ISearchTvResultV2,
|
||||
private requestService: RequestService, private notificationService: NotificationService) { }
|
||||
|
||||
public ngOnInit() {
|
||||
this.loading = true;
|
||||
|
||||
this.loading = false;
|
||||
}
|
||||
|
||||
public submitRequests() {
|
||||
// Make sure something has been selected
|
||||
const selected = this.series.seasonRequests.some((season) => {
|
||||
return season.episodes.some((ep) => {
|
||||
return ep.selected;
|
||||
});
|
||||
});
|
||||
|
||||
if (!selected) {
|
||||
this.notificationService.error("You need to select some episodes!");
|
||||
return;
|
||||
}
|
||||
|
||||
this.series.requested = true;
|
||||
|
||||
const viewModel = <ITvRequestViewModel>{ firstSeason: this.series.firstSeason, latestSeason: this.series.latestSeason, requestAll: this.series.requestAll, tvDbId: this.series.id };
|
||||
viewModel.seasons = [];
|
||||
this.series.seasonRequests.forEach((season) => {
|
||||
const seasonsViewModel = <ISeasonsViewModel>{ seasonNumber: season.seasonNumber, episodes: [] };
|
||||
season.episodes.forEach(ep => {
|
||||
ep.requested = true;
|
||||
if (!this.series.latestSeason || !this.series.requestAll || !this.series.firstSeason) {
|
||||
if (ep.selected) {
|
||||
seasonsViewModel.episodes.push({ episodeNumber: ep.episodeNumber });
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
viewModel.seasons.push(seasonsViewModel);
|
||||
});
|
||||
|
||||
this.requestService.requestTv(viewModel)
|
||||
.subscribe(x => {
|
||||
if (x.result) {
|
||||
this.notificationService.success(
|
||||
`Request for ${this.series.title} has been added successfully`);
|
||||
|
||||
this.series.seasonRequests.forEach((season) => {
|
||||
season.episodes.forEach((ep) => {
|
||||
ep.selected = false;
|
||||
});
|
||||
});
|
||||
|
||||
} else {
|
||||
this.notificationService.warning("Request Added", x.errorMessage ? x.errorMessage : x.message);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
public addRequest(episode: IEpisodesRequests) {
|
||||
episode.selected = true;
|
||||
}
|
||||
|
||||
public removeRequest(episode: IEpisodesRequests) {
|
||||
episode.selected = false;
|
||||
}
|
||||
|
||||
public seasonChanged(checkbox: MatCheckboxChange, season: INewSeasonRequests) {
|
||||
season.episodes.forEach((ep) => {
|
||||
if (checkbox.checked) {
|
||||
this.addRequest(ep)
|
||||
} else {
|
||||
this.removeRequest(ep);
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
Loading…
Reference in new issue