Reworked the tv details page request section

pull/4016/head v4.0.1040
tidusjar 3 years ago
parent fad49a251d
commit 1de4af0907

@ -50,7 +50,7 @@ namespace Ombi.Store.Repository.Requests
return "Common.ProcessingRequest";
}
if (!Approved && !Available)
if (!Approved && !Available && Requested)
{
return "Common.PendingApproval";
}

@ -9,12 +9,10 @@
<span>{{getAvailbilityStatus()}}</span>
</div>
</div>
<img [routerLink]="generateDetailsLink()" id="cardImage" src="{{result.posterPath}}" class="image"
alt="{{result.title}}">
<div class="middle">
<a class="poster-overlay" [routerLink]="generateDetailsLink()">
<a class="poster-overlay">
<div class="summary">
<div class="title">{{result.title}}</div>
<div class="small-text ellipsis">{{result.overview}}</div>

@ -19,6 +19,7 @@ import { ArtistReleasePanel } from "./artist/panels/artist-release-panel/artist-
import { IssuesPanelComponent } from "./shared/issues-panel/issues-panel.component";
import { TvAdvancedOptionsComponent } from "./tv/panels/tv-advanced-options/tv-advanced-options.component";
import { RequestBehalfComponent } from "./shared/request-behalf/request-behalf.component";
import { TvRequestGridComponent } from "./tv/panels/tv-request-grid/tv-request-grid.component";
export const components: any[] = [
MovieDetailsComponent,
@ -40,6 +41,7 @@ export const components: any[] = [
ArtistReleasePanel,
RequestBehalfComponent,
IssuesPanelComponent,
TvRequestGridComponent,
];
export const entryComponents: any[] = [

@ -0,0 +1,81 @@
<mat-tab-group>
<mat-tab *ngFor="let season of tv.seasonRequests">
<ng-template mat-tab-label>
<div class="{{getStatusClass(season)}} top-right">
<span>{{ 'Requests.Season' | translate }} {{season.seasonNumber}}</span>
</div>
</ng-template>
<table mat-table [dataSource]="season.episodes" class="mat-elevation-z8">
<ng-container matColumnDef="select">
<th mat-header-cell *matHeaderCellDef>
<mat-checkbox *ngIf="isSeasonCheckable(season)" (change)="$event ? masterToggle(season.episodes) : null"
[checked]="selection.hasValue() && isAllSelected(season.episodes)"
[indeterminate]="selection.hasValue() && !isAllSelected(season.episodes)">
</mat-checkbox>
</th>
<td mat-cell *matCellDef="let row">
<mat-checkbox *ngIf="!row.available && !row.requested && !row.approved" (click)="$event.stopPropagation()"
(change)="$event ? selection.toggle(row) : null"
[checked]="selection.isSelected(row)">
</mat-checkbox>
</td>
</ng-container>
<ng-container matColumnDef="number">
<th mat-header-cell *matHeaderCellDef> # </th>
<td mat-cell *matCellDef="let element"> {{element.episodeNumber}} </td>
</ng-container>
<ng-container matColumnDef="title">
<th mat-header-cell *matHeaderCellDef> {{ 'Requests.GridTitle' | translate }} </th>
<td mat-cell *matCellDef="let element"> {{element.title}} </td>
</ng-container>
<ng-container matColumnDef="airDate">
<th mat-header-cell *matHeaderCellDef> {{ 'Requests.AirDate' | translate }} </th>
<td mat-cell *matCellDef="let element"> {{element.airDate | amLocal | amDateFormat: 'L' }}</td>
</ng-container>
<ng-container matColumnDef="status">
<th mat-header-cell *matHeaderCellDef> {{ 'Requests.GridStatus' | translate }} </th>
<td mat-cell *matCellDef="let ep">
<div class="{{getEpisodeStatusClass(ep)}} top-right">
<span>{{ep.requestStatus | translate}}</span>
</div>
</td>
</ng-container>
<tr mat-header-row *matHeaderRowDef="displayedColumns"></tr>
<tr mat-row *matRowDef="let row; columns: displayedColumns;"
(click)="selection.toggle(row)">
</tr>
</table>
</mat-tab>
</mat-tab-group>
<!-- <div *ngIf="isAdmin">
<button *ngIf="!request.approved" mat-raised-button color="accent" (click)="approve(request);"> {{ 'Common.Approve' | translate }}</button>
<button *ngIf="!request.available" mat-raised-button color="warn" (click)="changeAvailability(request, true);">{{ 'Requests.MarkAvailable' | translate }}</button>
<button *ngIf="request.available" mat-raised-button color="warn" (click)="changeAvailability(request, false);">{{ 'Requests.MarkUnavailable' | translate }}</button>
<button *ngIf="!request.denied" mat-raised-button color="danger" (click)="deny(request);">{{ 'Requests.Deny' | translate }}</button>
</div>
-->
<button *ngIf="!tv.fullyAvailable && requestable" mat-fab color="accent" class="floating-fab" [matMenuTriggerFor]="aboveMenu">
<mat-icon>add</mat-icon></button>
<mat-menu #aboveMenu="matMenu" yPosition="above">
<button mat-menu-item (click)="requestAllSeasons()">{{'Search.TvShows.AllSeasons' | translate }}</button>
<button mat-menu-item (click)="requestFirstSeason()">{{ 'Search.TvShows.FirstSeason' | translate }}</button>
<button mat-menu-item (click)="requestLatestSeason()">{{ 'Search.TvShows.LatestSeason' | translate }}</button>
<button mat-menu-item (click)="submitRequests()">{{ 'Common.Request' | translate }}</button>
</mat-menu>

@ -0,0 +1,44 @@
.floating-fab {
position: fixed;
right: 3%;
bottom: 6%;
z-index: 10;
}
.top-right span:before{
content: '';
width: 10px;
height: 10px;
-moz-border-radius: 7.5px;
-webkit-border-radius: 7.5px;
border-radius: 7.5px;
margin-right:5px;
}
.top-right.available span{
display:block;
}
.top-right.available span:before{
display: inline-block;
background-color: #1DE9B6;
}
.top-right.approved span {
display: block;
}
.top-right.approved span:before{
display: inline-block;
background-color: #ff5722;
}
.top-right.requested span {
display: block;
}
.top-right.requested span:before{
display: inline-block;
background-color: #ffd740;
}

@ -0,0 +1,215 @@
import { Component, Input } from "@angular/core";
import { IChildRequests, IEpisodesRequests, INewSeasonRequests, ISeasonsViewModel, ITvRequestViewModel, RequestType } from "../../../../../interfaces";
import { RequestService } from "../../../../../services/request.service";
import { MessageService } from "../../../../../services";
import { DenyDialogComponent } from "../../../shared/deny-dialog/deny-dialog.component";
import { ISearchTvResultV2 } from "../../../../../interfaces/ISearchTvResultV2";
import { MatDialog } from "@angular/material/dialog";
import { SelectionModel } from "@angular/cdk/collections";
@Component({
templateUrl: "./tv-request-grid.component.html",
styleUrls: ["./tv-request-grid.component.scss"],
selector: "tv-request-grid"
})
export class TvRequestGridComponent {
@Input() public tv: ISearchTvResultV2;
@Input() public tvRequest: IChildRequests[];
@Input() public isAdmin: boolean;
public selection = new SelectionModel<IEpisodesRequests>(true, []);
public get requestable() {
return this.tv?.seasonRequests?.length > 0
}
public displayedColumns: string[] = ['select', 'number', 'title', 'airDate', 'status'];
constructor(private requestService: RequestService, private notificationService: MessageService,
private dialog: MatDialog) {
}
public async submitRequests() {
// Make sure something has been selected
const selected = this.selection.hasValue();
if (!selected && !this.tv.requestAll && !this.tv.firstSeason && !this.tv.latestSeason) {
this.notificationService.send("You need to select some episodes!", "OK");
return;
}
this.tv.requested = true;
const viewModel = <ITvRequestViewModel>{
firstSeason: this.tv.firstSeason, latestSeason: this.tv.latestSeason, requestAll: this.tv.requestAll, tvDbId: this.tv.id,
requestOnBehalf: null
};
viewModel.seasons = [];
this.tv.seasonRequests.forEach((season) => {
const seasonsViewModel = <ISeasonsViewModel>{ seasonNumber: season.seasonNumber, episodes: [] };
if (!this.tv.latestSeason && !this.tv.requestAll && !this.tv.firstSeason) {
season.episodes.forEach(ep => {
if (this.selection.isSelected(ep)) {
ep.requested = true;
seasonsViewModel.episodes.push({ episodeNumber: ep.episodeNumber });
}
});
}
viewModel.seasons.push(seasonsViewModel);
});
const requestResult = await this.requestService.requestTv(viewModel).toPromise();
if (requestResult.result) {
this.notificationService.send(
`Request for ${this.tv.title} has been added successfully`);
this.selection.clear();
} else {
this.notificationService.send(requestResult.errorMessage ? requestResult.errorMessage : requestResult.message);
}
}
public async approve(request: IChildRequests) {
const result = await this.requestService.approveChild({
id: request.id
}).toPromise();
if (result.result) {
request.approved = true;
request.denied = false;
request.seasonRequests.forEach((season) => {
season.episodes.forEach((ep) => {
ep.approved = true;
});
});
this.notificationService.send("Request has been approved", "Ok");
} else {
this.notificationService.send(result.errorMessage, "Ok");
}
}
public changeAvailability(request: IChildRequests, available: boolean) {
request.available = available;
request.seasonRequests.forEach((season) => {
season.episodes.forEach((ep) => {
ep.available = available;
});
});
if (available) {
this.requestService.markTvAvailable({ id: request.id }).subscribe(x => {
if (x.result) {
this.notificationService.send(
`This request is now available`);
} else {
this.notificationService.send("Request Available", x.message ? x.message : x.errorMessage);
request.approved = false;
}
});
} else {
this.requestService.markTvUnavailable({ id: request.id }).subscribe(x => {
if (x.result) {
this.notificationService.send(
`This request is now unavailable`);
} else {
this.notificationService.send("Request Available", x.message ? x.message : x.errorMessage);
request.approved = false;
}
});
}
}
public async deny(request: IChildRequests) {
const dialogRef = this.dialog.open(DenyDialogComponent, {
width: '250px',
data: {requestId: request.id, requestType: RequestType.tvShow}
});
dialogRef.afterClosed().subscribe(result => {
request.denied = true;
request.seasonRequests.forEach((season) => {
season.episodes.forEach((ep) => {
ep.approved = false;
});
});
});
}
public async requestAllSeasons() {
this.tv.requestAll = true;
await this.submitRequests();
}
public async requestFirstSeason() {
this.tv.firstSeason = true;
await this.submitRequests();
}
public async requestLatestSeason() {
this.tv.latestSeason = true;
await this.submitRequests();
}
/** Whether the number of selected elements matches the total number of rows. */
public isAllSelected(dataSource: IEpisodesRequests[]) {
const numSelected = this.selection.selected.length;
const numRows = dataSource.length;
return numSelected === numRows;
}
/** Selects all rows if they are not all selected; otherwise clear selection. */
public masterToggle(dataSource: IEpisodesRequests[]) {
this.isAllSelected(dataSource) ?
this.selection.clear() :
dataSource.forEach(row => {
if (!row.available && !row.requested && !row.approved) {
this.selection.select(row)
}
});
}
public isSeasonCheckable(season: INewSeasonRequests) {
const seasonAvailable = season.episodes.every((ep) => {
return ep.available || ep.requested || ep.approved;
});
return !seasonAvailable;
}
public getStatusClass(season: INewSeasonRequests): string {
const seasonAvailable = season.episodes.every((ep) => {
return ep.available;
});
if (seasonAvailable) {
return "available";
}
const seasonPending = season.episodes.some((ep) => {
return ep.requested && !ep.approved
});
if (seasonPending) {
return "requested";
}
const seasonApproved = season.episodes.some((ep) => {
return ep.requested && ep.approved
});
if (seasonApproved) {
return "approved";
}
return "";
}
public getEpisodeStatusClass(ep: IEpisodesRequests): string {
if (ep.available) {
return "available";
}
if (ep.requested && !ep.approved) {
return "requested";
}
if (ep.requested && ep.approved) {
return "approved";
}
return "";
}
}

@ -15,7 +15,7 @@
</div>
</mat-panel-title>
<mat-panel-description>
Requested By '{{request.requestedUser.userAlias}}' on
{{'Requests.RequestedBy' | translate}} '{{request.requestedUser.userAlias}}' on
{{request.requestedDate | amLocal | amDateFormat: 'LL' }}
<span *ngIf="request.denied"> - {{request.deniedReason}}</span>
</mat-panel-description>
@ -29,7 +29,7 @@
<ng-container matColumnDef="number">
<th mat-header-cell *matHeaderCellDef> {{ 'Requests.Number' | translate }} </th>
<th mat-header-cell *matHeaderCellDef> # </th>
<td mat-cell *matCellDef="let element"> {{element.episodeNumber}} </td>
</ng-container>

@ -36,9 +36,9 @@
<div class="col-12 col-lg-5 col-xl-5 media-row">
<button *ngIf="!tv.fullyAvailable" mat-raised-button class="btn-spacing" color="primary"
<!-- <button *ngIf="!tv.fullyAvailable" mat-raised-button class="btn-spacing" color="primary"
(click)="request()"><i class="fa fa-plus"></i>
{{ 'Common.Request' | translate }}</button>
{{ 'Common.Request' | translate }}</button> -->
<button *ngIf="tv.fullyAvailable" mat-raised-button class="btn-spacing" color="accent"
[disabled]>
@ -106,10 +106,17 @@
<!--Just some space yo-->
</div>
<div class="col-12 col-md-10">
<tv-request-grid [tvRequest]="tvRequest" [isAdmin]="isAdmin" [tv]="tv"></tv-request-grid>
</div>
<div class="col-12 col-md-2">
<!--Just some space yo-->
</div>
<div class="col-12 col-md-10">
<div class="issuesPanel">
<issues-panel [providerId]="tv.theTvDbId" [isAdmin]="isAdmin"></issues-panel>

@ -1,7 +1,4 @@
<div class="spinner-container">
<mat-spinner *ngIf="loading" [color]="'accent'"></mat-spinner>
</div>
<div *ngIf="!loading" mat-dialog-content class="background">
<div mat-dialog-content class="background">
<div *ngIf="!requestable">
{{'MediaDetails.EpisodeSelector.NoEpisodes' | translate}}
</div>
@ -22,9 +19,9 @@
<mat-expansion-panel>
<mat-expansion-panel-header>
<mat-panel-title>
<mat-checkbox *ngIf="!season.seasonAvailable" (click)="$event.stopPropagation();" (change)="seasonChanged($event, season)">
<mat-checkbox *ngIf="!season.seasonAvailable && isSeasonCheckable(season)" (click)="$event.stopPropagation();" (change)="seasonChanged($event, season)">
Season {{season.seasonNumber}}</mat-checkbox>
<span *ngIf="season.seasonAvailable">Season {{season.seasonNumber}}</span>
<span *ngIf="season.seasonAvailable || !isSeasonCheckable(season)">Season {{season.seasonNumber}}</span>
</mat-panel-title>
<mat-panel-description>
<!-- Description -->
@ -51,14 +48,7 @@
{{ep.airDateDisplay }}
</div>
<div class="col-3">
<ng-template [ngIf]="ep.available"><span class="label label-success" id="availableLabel">{{'Common.Available' | translate}}</span></ng-template>
<ng-template [ngIf]="ep.requested && ep.approved && !ep.available "><span class="label label-info" id="processingRequestLabel">{{'Common.ProcessingRequest' | translate}}</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">{{'Common.PendingApproval' | translate}}</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>
{{ep.requestStatus | translate}}
</div>
</div>

@ -14,9 +14,8 @@ export interface EpisodeRequestData {
selector: "episode-request",
templateUrl: "episode-request.component.html",
})
export class EpisodeRequestComponent implements OnInit {
export class EpisodeRequestComponent {
public loading: boolean;
public get requestable() {
return this.data?.series?.seasonRequests?.length > 0
}
@ -24,11 +23,6 @@ export class EpisodeRequestComponent implements OnInit {
constructor(public dialogRef: MatDialogRef<EpisodeRequestComponent>, @Inject(MAT_DIALOG_DATA) public data: EpisodeRequestData,
private requestService: RequestService, private notificationService: MessageService) { }
public ngOnInit() {
this.loading = true;
this.loading = false;
}
public async submitRequests() {
// Make sure something has been selected
@ -99,6 +93,13 @@ export class EpisodeRequestComponent implements OnInit {
});
}
public isSeasonCheckable(season: INewSeasonRequests) {
const seasonAvailable = season.episodes.every((ep) => {
return ep.available || ep.requested || ep.approved;
});
return !seasonAvailable;
}
public async requestAllSeasons() {
this.data.series.requestAll = true;
await this.submitRequests();

@ -116,7 +116,7 @@
"LatestSeason": "Последен сезон",
"Select": "Изберете...",
"SubmitRequest": "Подаване на заявка",
"Season": "Сезон: {{seasonNumber}}",
"Season": "Сезон {{seasonNumber}}",
"SelectAllInSeason": "Избиране на всичко в сезона {{seasonNumber}}"
}
},
@ -146,7 +146,7 @@
"Remove": "Премахване",
"Deny": "Отказване",
"DenyReason": "Deny Reason",
"Season": "Сезон:",
"Season": "Сезон",
"GridTitle": "Заглавие",
"AirDate": "Дата на излъчване",
"GridStatus": "Състояние",

@ -116,7 +116,7 @@
"LatestSeason": "Seneste sæson",
"Select": "Vælg ...",
"SubmitRequest": "Send anmodning",
"Season": "Sæson: {{seasonNumber}}",
"Season": "Sæson {{seasonNumber}}",
"SelectAllInSeason": "Vælg alle i sæson {{seasonNumber}}"
}
},
@ -146,7 +146,7 @@
"Remove": "Fjern",
"Deny": "Afvis",
"DenyReason": "Deny Reason",
"Season": "Sæson:",
"Season": "Sæson",
"GridTitle": "Titel",
"AirDate": "Sendt",
"GridStatus": "Status",

@ -116,7 +116,7 @@
"LatestSeason": "aktuellste Staffel",
"Select": "Wähle...",
"SubmitRequest": "Anfrage einreichen",
"Season": "Staffel: {{seasonNumber}}",
"Season": "Staffel {{seasonNumber}}",
"SelectAllInSeason": "Markiere alles in Staffel {{seasonNumber}}"
}
},
@ -146,7 +146,7 @@
"Remove": "Entfernen",
"Deny": "Ablehnen",
"DenyReason": "Ablehnungsgrund",
"Season": "Staffel:",
"Season": "Staffel",
"GridTitle": "Titel",
"AirDate": "Erstausstrahlung",
"GridStatus": "Status",

@ -117,7 +117,7 @@
"LatestSeason": "Latest Season",
"Select": "Select ...",
"SubmitRequest": "Submit Request",
"Season": "Season: {{seasonNumber}}",
"Season": "Season {{seasonNumber}}",
"SelectAllInSeason": "Select All in Season {{seasonNumber}}"
}
},
@ -147,7 +147,7 @@
"Remove": "Remove",
"Deny": "Deny",
"DenyReason": "Deny Reason",
"Season": "Season:",
"Season": "Season",
"GridTitle": "Title",
"AirDate": "AirDate",
"GridStatus": "Status",

@ -116,7 +116,7 @@
"LatestSeason": "Última temporada",
"Select": "Selecciona...",
"SubmitRequest": "Enviar solicitud",
"Season": "Temporada: {{seasonNumber}}",
"Season": "Temporada {{seasonNumber}}",
"SelectAllInSeason": "Seleccionar todo en temporada {{seasonNumber}}"
}
},
@ -146,7 +146,7 @@
"Remove": "Eliminar",
"Deny": "Denegar",
"DenyReason": "Razón Denegada",
"Season": "Temporada:",
"Season": "Temporada",
"GridTitle": "Título",
"AirDate": "Fecha de estreno",
"GridStatus": "Estado",

@ -116,7 +116,7 @@
"LatestSeason": "Dernière saison",
"Select": "Sélectionner...",
"SubmitRequest": "Envoyer la demande",
"Season": "Saison: {{seasonNumber}}",
"Season": "Saison {{seasonNumber}}",
"SelectAllInSeason": "Tout sélectionner dans la saison {{seasonNumber}}"
}
},
@ -146,7 +146,7 @@
"Remove": "Supprimer",
"Deny": "Refuser",
"DenyReason": "Raison de refus",
"Season": "Saison :",
"Season": "Saison",
"GridTitle": "Titre",
"AirDate": "Date de diffusion",
"GridStatus": "Statut",

@ -116,7 +116,7 @@
"LatestSeason": "Utolsó évad",
"Select": "Kiválasztás...",
"SubmitRequest": "Kérés küldése",
"Season": "Évad: {{seasonNumber}}",
"Season": "Évad {{seasonNumber}}",
"SelectAllInSeason": "Egész {{seasonNumber}}. évad kiválasztása"
}
},
@ -146,7 +146,7 @@
"Remove": "Törlés",
"Deny": "Elutasítás",
"DenyReason": "Deny Reason",
"Season": "Évad:",
"Season": "Évad",
"GridTitle": "Cím",
"AirDate": "Bemutató",
"GridStatus": "Állapot",

@ -116,7 +116,7 @@
"LatestSeason": "Ultima Stagione",
"Select": "Seleziona ...",
"SubmitRequest": "Invia richiesta",
"Season": "Stagione: {{seasonNumber}}",
"Season": "Stagione {{seasonNumber}}",
"SelectAllInSeason": "Seleziona Tutto nella Stagione {{seasonNumber}}"
}
},
@ -146,7 +146,7 @@
"Remove": "Elimina",
"Deny": "Nega",
"DenyReason": "Nega Motivo",
"Season": "Stagione:",
"Season": "Stagione",
"GridTitle": "Titolo",
"AirDate": "Data di trasmissione",
"GridStatus": "Stato",

@ -116,7 +116,7 @@
"LatestSeason": "Laatste Seizoen",
"Select": "Selecteer...",
"SubmitRequest": "Verzoek Indienen",
"Season": "Seizoen: {{seasonNumber}}",
"Season": "Seizoen {{seasonNumber}}",
"SelectAllInSeason": "Selecteer Alles in het Seizoen {{seasonNumber}}"
}
},
@ -146,7 +146,7 @@
"Remove": "Verwijderen",
"Deny": "Weigeren",
"DenyReason": "Reden van afwijzing",
"Season": "Seizoen:",
"Season": "Seizoen",
"GridTitle": "Titel",
"AirDate": "Uitzenddatum",
"GridStatus": "Status",

@ -116,7 +116,7 @@
"LatestSeason": "Siste sesong",
"Select": "Velg...",
"SubmitRequest": "Send forespørsel",
"Season": "Sesong: {{seasonNumber}}",
"Season": "Sesong {{seasonNumber}}",
"SelectAllInSeason": "Velg alle i sesong {{seasonNumber}}"
}
},
@ -146,7 +146,7 @@
"Remove": "Fjern",
"Deny": "Avslå",
"DenyReason": "Deny Reason",
"Season": "Sesong:",
"Season": "Sesong",
"GridTitle": "Tittel",
"AirDate": "Sendedato",
"GridStatus": "Status",

@ -116,7 +116,7 @@
"LatestSeason": "Najnowszy sezon",
"Select": "Wybierz…",
"SubmitRequest": "Dodaj zgłoszenie",
"Season": "Sezon: {{seasonNumber}}",
"Season": "Sezon {{seasonNumber}}",
"SelectAllInSeason": "Wybierz wszystkie w sezonie {{seasonNumber}}"
}
},
@ -146,7 +146,7 @@
"Remove": "Usuń",
"Deny": "Odrzuć",
"DenyReason": "Powód odrzucenia",
"Season": "Sezon:",
"Season": "Sezon",
"GridTitle": "Tytuł",
"AirDate": "Data emisji",
"GridStatus": "Status",

@ -116,7 +116,7 @@
"LatestSeason": "Latest Season",
"Select": "Select ...",
"SubmitRequest": "Submit Request",
"Season": "Season: {{seasonNumber}}",
"Season": "Season {{seasonNumber}}",
"SelectAllInSeason": "Select All in Season {{seasonNumber}}"
}
},
@ -146,7 +146,7 @@
"Remove": "Remove",
"Deny": "Deny",
"DenyReason": "Deny Reason",
"Season": "Season:",
"Season": "Season",
"GridTitle": "Title",
"AirDate": "AirDate",
"GridStatus": "Status",

@ -116,7 +116,7 @@
"LatestSeason": "Последний сезон",
"Select": "Выбрать...",
"SubmitRequest": "Подать запрос",
"Season": "Сезон: {{seasonNumber}}",
"Season": "Сезон {{seasonNumber}}",
"SelectAllInSeason": "Выбрать все в сезоне {{seasonNumber}}"
}
},
@ -146,7 +146,7 @@
"Remove": "Удалить",
"Deny": "Отклонить",
"DenyReason": "Deny Reason",
"Season": "Сезон:",
"Season": "Сезон",
"GridTitle": "Название",
"AirDate": "Дата",
"GridStatus": "Статус",

@ -116,7 +116,7 @@
"LatestSeason": "Posledná séria",
"Select": "Vybrať ...",
"SubmitRequest": "Poslať žiadosť",
"Season": "Séria: {{seasonNumber}}",
"Season": "Séria {{seasonNumber}}",
"SelectAllInSeason": "Vybrať všetko v danej sérii {{seasonNumber}}"
}
},
@ -146,7 +146,7 @@
"Remove": "Odstrániť",
"Deny": "Odmietnuť",
"DenyReason": "Deny Reason",
"Season": "Séria:",
"Season": "Séria",
"GridTitle": "Názov",
"AirDate": "Dátum vysielania",
"GridStatus": "Stav",

@ -116,7 +116,7 @@
"LatestSeason": "Senaste säsongen",
"Select": "Välj...",
"SubmitRequest": "Skicka begäran",
"Season": "Säsong: {{seasonNumber}}",
"Season": "Säsong {{seasonNumber}}",
"SelectAllInSeason": "Välj alla avsnitt i säsong {{seasonNumber}}"
}
},
@ -146,7 +146,7 @@
"Remove": "Ta bort",
"Deny": "Neka",
"DenyReason": "Anledning för nekande",
"Season": "Säsong:",
"Season": "Säsong",
"GridTitle": "Titel",
"AirDate": "Releasedatum",
"GridStatus": "Status",

Loading…
Cancel
Save