Merge branch 'develop' of https://github.com/tidusjar/ombi into develop

pull/2605/head
TidusJar 6 years ago
commit f586d4f082

@ -98,7 +98,7 @@ namespace Ombi.Schedule.Jobs.Ombi
// Get the Content // Get the Content
var plexContent = _plex.GetAll().Include(x => x.Episodes).AsNoTracking(); var plexContent = _plex.GetAll().Include(x => x.Episodes).AsNoTracking();
var embyContent = _emby.GetAll().Include(x => x.Episodes).AsNoTracking(); var embyContent = _emby.GetAll().Include(x => x.Episodes).AsNoTracking();
var lidarrContent = _lidarrAlbumRepository.GetAll().AsNoTracking(); var lidarrContent = _lidarrAlbumRepository.GetAll().Where(x => x.FullyAvailable).AsNoTracking();
var addedLog = _recentlyAddedLog.GetAll(); var addedLog = _recentlyAddedLog.GetAll();
var addedPlexMovieLogIds = addedLog.Where(x => x.Type == RecentlyAddedType.Plex && x.ContentType == ContentType.Parent).Select(x => x.ContentId); var addedPlexMovieLogIds = addedLog.Where(x => x.Type == RecentlyAddedType.Plex && x.ContentType == ContentType.Parent).Select(x => x.ContentId);

@ -117,37 +117,37 @@
</a> </a>
<ul class="dropdown-menu" role="menu"> <ul class="dropdown-menu" role="menu">
<li [ngClass]="{'active': 'en' === translate.currentLang}"> <li [ngClass]="{'active': 'en' === translate.currentLang}">
<a (click)="translate.use('en')" [translate]="'NavigationBar.Language.English'"></a> <a (click)="translate.use('en')">English</a>
</li> </li>
<li [ngClass]="{'active': 'fr' === translate.currentLang}"> <li [ngClass]="{'active': 'fr' === translate.currentLang}">
<a (click)="translate.use('fr')" [translate]="'NavigationBar.Language.French'"></a> <a (click)="translate.use('fr')">Français</a>
</li> </li>
<li [ngClass]="{'active': 'da' === translate.currentLang}"> <li [ngClass]="{'active': 'da' === translate.currentLang}">
<a (click)="translate.use('da')" [translate]="'NavigationBar.Language.Danish'"></a> <a (click)="translate.use('da')">Dansk</a>
</li> </li>
<li [ngClass]="{'active': 'de' === translate.currentLang}"> <li [ngClass]="{'active': 'de' === translate.currentLang}">
<a (click)="translate.use('de')" [translate]="'NavigationBar.Language.German'"></a> <a (click)="translate.use('de')">Deutsch</a>
</li> </li>
<li [ngClass]="{'active': 'it' === translate.currentLang}"> <li [ngClass]="{'active': 'it' === translate.currentLang}">
<a (click)="translate.use('it')" [translate]="'NavigationBar.Language.Italian'"></a> <a (click)="translate.use('it')">Italiano</a>
</li> </li>
<li [ngClass]="{'active': 'es' === translate.currentLang}"> <li [ngClass]="{'active': 'es' === translate.currentLang}">
<a (click)="translate.use('es')" [translate]="'NavigationBar.Language.Spanish'"></a> <a (click)="translate.use('es')">Español</a>
</li> </li>
<li [ngClass]="{'active': 'nl' === translate.currentLang}"> <li [ngClass]="{'active': 'nl' === translate.currentLang}">
<a (click)="translate.use('nl')" [translate]="'NavigationBar.Language.Dutch'"></a> <a (click)="translate.use('nl')">Nederlands</a>
</li> </li>
<li [ngClass]="{'active': 'no' === translate.currentLang}"> <li [ngClass]="{'active': 'no' === translate.currentLang}">
<a (click)="translate.use('no')" [translate]="'NavigationBar.Language.Norwegian'"></a> <a (click)="translate.use('no')">Norsk</a>
</li> </li>
<li [ngClass]="{'active': 'pt' === translate.currentLang}"> <li [ngClass]="{'active': 'pt' === translate.currentLang}">
<a (click)="translate.use('pt')" [translate]="'NavigationBar.Language.BrazillianPortuguese'"></a> <a (click)="translate.use('pt')">Português (Brasil)</a>
</li> </li>
<li [ngClass]="{'active': 'pl' === translate.currentLang}"> <li [ngClass]="{'active': 'pl' === translate.currentLang}">
<a (click)="translate.use('pl')" [translate]="'NavigationBar.Language.Polish'"></a> <a (click)="translate.use('pl')">Polski</a>
</li> </li>
<li [ngClass]="{'active': 'sv' === translate.currentLang}"> <li [ngClass]="{'active': 'sv' === translate.currentLang}">
<a (click)="translate.use('sv')" [translate]="'NavigationBar.Language.Swedish'"></a> <a (click)="translate.use('sv')">Svenska</a>
</li> </li>
</ul> </ul>
</li> </li>

@ -129,7 +129,7 @@
</form> </form>
<!--Radarr Root Folder--> <!--Radarr Root Folder-->
<div *ngIf="radarrRootFolders" class="btn-group btn-split" id="rootFolderBtn"> <div *ngIf="radarrRootFolders?.length > 1" class="btn-group btn-split" id="rootFolderBtn">
<button type="button" class="btn btn-sm btn-warning-outline"> <button type="button" class="btn btn-sm btn-warning-outline">
<i class="fa fa-plus"></i> {{ 'Requests.ChangeRootFolder' | translate }} <i class="fa fa-plus"></i> {{ 'Requests.ChangeRootFolder' | translate }}
</button> </button>
@ -145,7 +145,7 @@
</div> </div>
<!--Radarr Quality Profiles --> <!--Radarr Quality Profiles -->
<div *ngIf="radarrProfiles" class="btn-group btn-split" id="changeQualityBtn"> <div *ngIf="radarrProfiles?.length > 1" class="btn-group btn-split" id="changeQualityBtn">
<button type="button" class="btn btn-sm btn-warning-outline"> <button type="button" class="btn btn-sm btn-warning-outline">
<i class="fa fa-plus"></i> {{ 'Requests.ChangeQualityProfile' | translate }} <i class="fa fa-plus"></i> {{ 'Requests.ChangeQualityProfile' | translate }}
</button> </button>
@ -166,11 +166,7 @@
</button> </button>
</div> </div>
</div> </div>
<form id="removeBtn">
<button (click)="removeRequest(request)" style="text-align: right" class="btn btn-sm btn-danger-outline delete">
<i class="fa fa-minus"></i> {{ 'Requests.Remove' | translate }}
</button>
</form>
<form id="markBtnGroup"> <form id="markBtnGroup">
<button id="unavailableBtn" *ngIf="request.available" (click)="changeAvailability(request, false)" style="text-align: right" <button id="unavailableBtn" *ngIf="request.available" (click)="changeAvailability(request, false)" style="text-align: right"
@ -185,6 +181,13 @@
</div>
<div *ngIf="isAdmin || isRequestUser(request)">
<form id="removeBtn">
<button (click)="removeRequest(request)" style="text-align: right" class="btn btn-sm btn-danger-outline delete">
<i class="fa fa-minus"></i> {{ 'Requests.Remove' | translate }}
</button>
</form>
</div> </div>
<div class="dropdown" *ngIf="issueCategories && issuesEnabled" id="issuesBtn"> <div class="dropdown" *ngIf="issueCategories && issuesEnabled" id="issuesBtn">
<button class="btn btn-sm btn-primary-outline dropdown-toggle" type="button" data-toggle="dropdown" aria-haspopup="true" <button class="btn btn-sm btn-primary-outline dropdown-toggle" type="button" data-toggle="dropdown" aria-haspopup="true"

@ -218,6 +218,13 @@ export class MovieRequestsComponent implements OnInit {
}); });
} }
public isRequestUser(request: IMovieRequests) {
if (request.requestedUser.userName === this.auth.claims().name) {
return true;
}
return false;
}
private filterActiveStyle(el: any) { private filterActiveStyle(el: any) {
el = el.toElement || el.relatedTarget || el.target || el.srcElement; el = el.toElement || el.relatedTarget || el.target || el.srcElement;
@ -365,4 +372,5 @@ export class MovieRequestsComponent implements OnInit {
req.backgroundPath = this.sanitizer.bypassSecurityTrustStyle req.backgroundPath = this.sanitizer.bypassSecurityTrustStyle
("url(" + "https://image.tmdb.org/t/p/w1280" + req.background + ")"); ("url(" + "https://image.tmdb.org/t/p/w1280" + req.background + ")");
} }
} }

@ -169,11 +169,7 @@
</button> </button>
</div> </div>
</div> </div>
<form id="removeBtn" class="col-md-6">
<button (click)="removeRequest(request)" style="text-align: right" class="btn btn-sm btn-danger-outline delete">
<i class="fa fa-minus"></i> {{ 'Requests.Remove' | translate }}
</button>
</form>
<form id="markBtnGroup"> <form id="markBtnGroup">
<button id="unavailableBtn" *ngIf="request.available" (click)="changeAvailability(request, false)" style="text-align: right" <button id="unavailableBtn" *ngIf="request.available" (click)="changeAvailability(request, false)" style="text-align: right"
@ -188,6 +184,13 @@
</div>
<div *ngIf="isAdmin || isRequestUser(request)">
<form id="removeBtn" class="col-md-6">
<button (click)="removeRequest(request)" style="text-align: right" class="btn btn-sm btn-danger-outline delete">
<i class="fa fa-minus"></i> {{ 'Requests.Remove' | translate }}
</button>
</form>
</div> </div>
<div class="dropdown" *ngIf="issueCategories && issuesEnabled" id="issuesBtn"> <div class="dropdown" *ngIf="issueCategories && issuesEnabled" id="issuesBtn">
<button class="btn btn-sm btn-primary-outline dropdown-toggle" type="button" data-toggle="dropdown" aria-haspopup="true" <button class="btn btn-sm btn-primary-outline dropdown-toggle" type="button" data-toggle="dropdown" aria-haspopup="true"

@ -198,6 +198,13 @@ export class MusicRequestsComponent implements OnInit {
this.loadInit(); this.loadInit();
} }
public isRequestUser(request: IAlbumRequest) {
if (request.requestedUser.userName === this.auth.claims().name) {
return true;
}
return false;
}
// public subscribe(request: IAlbumRequest) { // public subscribe(request: IAlbumRequest) {
// request.subscribed = true; // request.subscribed = true;
// this.requestService.subscribeToMovie(request.id) // this.requestService.subscribeToMovie(request.id)
@ -348,4 +355,5 @@ export class MusicRequestsComponent implements OnInit {
req.background = this.sanitizer.bypassSecurityTrustStyle req.background = this.sanitizer.bypassSecurityTrustStyle
("url(" + req.cover + ")"); ("url(" + req.cover + ")");
} }
} }

@ -23,8 +23,10 @@
<button id="denyBtn" *ngIf="!child.denied" type="button" (click)="deny(child)" class="btn btn-sm btn-danger-outline deny"><i class="fa fa-times"></i> {{ 'Requests.Deny' | translate }}</button> <button id="denyBtn" *ngIf="!child.denied" type="button" (click)="deny(child)" class="btn btn-sm btn-danger-outline deny"><i class="fa fa-times"></i> {{ 'Requests.Deny' | translate }}</button>
<button id="removeBtn" type="button" (click)="removeRequest(child)" class="btn btn-sm btn-danger-outline deny"><i class="fa fa-times"></i> {{ 'Requests.Remove' | translate }}</button>
</div> </div>
<div *ngIf="isAdmin || isRequestUser(child)">
<button id="removeBtn" type="button" (click)="removeRequest(child)" class="btn btn-sm btn-danger-outline deny"><i class="fa fa-times"></i> {{ 'Requests.Remove' | translate }}</button>
</div>
</div> </div>

@ -10,6 +10,7 @@ import { NotificationService, RequestService } from "../services";
export class TvRequestChildrenComponent { export class TvRequestChildrenComponent {
@Input() public childRequests: IChildRequests[]; @Input() public childRequests: IChildRequests[];
@Input() public isAdmin: boolean; @Input() public isAdmin: boolean;
@Input() public currentUser: string;
@Output() public requestDeleted = new EventEmitter<number>(); @Output() public requestDeleted = new EventEmitter<number>();
@ -110,10 +111,18 @@ export class TvRequestChildrenComponent {
}); });
} }
public isRequestUser(request: IChildRequests) {
if (request.requestedUser.userName === this.currentUser) {
return true;
}
return false;
}
private removeRequestFromUi(key: IChildRequests) { private removeRequestFromUi(key: IChildRequests) {
const index = this.childRequests.indexOf(key, 0); const index = this.childRequests.indexOf(key, 0);
if (index > -1) { if (index > -1) {
this.childRequests.splice(index, 1); this.childRequests.splice(index, 1);
} }
} }
} }

@ -50,7 +50,7 @@
<i class="fa fa-plus"></i> View</button> <i class="fa fa-plus"></i> View</button>
<div *ngIf="isAdmin"> <div *ngIf="isAdmin">
<!--Sonarr Root Folder--> <!--Sonarr Root Folder-->
<div *ngIf="sonarrRootFolders" class="btn-group btn-split" id="rootFolderBtn"> <div *ngIf="sonarrRootFolders?.length > 1" class="btn-group btn-split" id="rootFolderBtn">
<button type="button" class="btn btn-sm btn-warning-outline"> <button type="button" class="btn btn-sm btn-warning-outline">
<i class="fa fa-plus"></i> {{ 'Requests.ChangeRootFolder' | translate }} <i class="fa fa-plus"></i> {{ 'Requests.ChangeRootFolder' | translate }}
</button> </button>
@ -66,7 +66,7 @@
</div> </div>
<!--Sonarr Quality Profiles --> <!--Sonarr Quality Profiles -->
<div *ngIf="sonarrProfiles" class="btn-group btn-split" id="changeQualityBtn"> <div *ngIf="sonarrProfiles?.length > 1" class="btn-group btn-split" id="changeQualityBtn">
<button type="button" class="btn btn-sm btn-warning-outline"> <button type="button" class="btn btn-sm btn-warning-outline">
<i class="fa fa-plus"></i> {{ 'Requests.ChangeQualityProfile' | translate }} <i class="fa fa-plus"></i> {{ 'Requests.ChangeQualityProfile' | translate }}
</button> </button>
@ -99,7 +99,7 @@
</div> </div>
<!--This is the section that holds the child seasons if they want to specify specific episodes--> <!--This is the section that holds the child seasons if they want to specify specific episodes-->
<div *ngIf="node.open"> <div *ngIf="node.open">
<tvrequests-children [childRequests]="node.childRequests" [isAdmin]="isAdmin" (requestDeleted)="childRequestDeleted($event)"></tvrequests-children> <tvrequests-children [childRequests]="node.childRequests" [isAdmin]="isAdmin" [currentUser]="currentUser" (requestDeleted)="childRequestDeleted($event)"></tvrequests-children>
</div> </div>
<br/> <br/>

@ -20,6 +20,7 @@ export class TvRequestsComponent implements OnInit {
public searchChanged = new Subject<string>(); public searchChanged = new Subject<string>();
public searchText: string; public searchText: string;
public isAdmin: boolean; public isAdmin: boolean;
public currentUser: string;
public showChildDialogue = false; // This is for the child modal popup public showChildDialogue = false; // This is for the child modal popup
public selectedSeason: ITvRequests; public selectedSeason: ITvRequests;
public defaultPoster: string; public defaultPoster: string;
@ -48,6 +49,7 @@ export class TvRequestsComponent implements OnInit {
private readonly platformLocation: PlatformLocation) { private readonly platformLocation: PlatformLocation) {
this.isAdmin = this.auth.hasRole("admin") || this.auth.hasRole("poweruser"); this.isAdmin = this.auth.hasRole("admin") || this.auth.hasRole("poweruser");
this.currentUser = this.auth.claims().name;
if (this.isAdmin) { if (this.isAdmin) {
this.sonarrService.getQualityProfilesWithoutSettings() this.sonarrService.getQualityProfilesWithoutSettings()
.subscribe(x => this.sonarrProfiles = x); .subscribe(x => this.sonarrProfiles = x);

@ -3,7 +3,6 @@ using System.Collections.Generic;
using System.Threading.Tasks; using System.Threading.Tasks;
using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Caching.Memory;
using Ombi.Api.Radarr; using Ombi.Api.Radarr;
using Ombi.Api.Radarr.Models; using Ombi.Api.Radarr.Models;
using Ombi.Attributes; using Ombi.Attributes;
@ -13,9 +12,9 @@ using Ombi.Settings.Settings.Models.External;
namespace Ombi.Controllers.External namespace Ombi.Controllers.External
{ {
[Authorize] [Authorize]
[ApiV1] [ApiV1]
[Produces("application/json")] [Produces("application/json")]
public class RadarrController : Controller public class RadarrController : Controller
{ {
public RadarrController(IRadarrApi radarr, ISettingsService<RadarrSettings> settings, public RadarrController(IRadarrApi radarr, ISettingsService<RadarrSettings> settings,
@ -24,6 +23,7 @@ namespace Ombi.Controllers.External
RadarrApi = radarr; RadarrApi = radarr;
RadarrSettings = settings; RadarrSettings = settings;
Cache = mem; Cache = mem;
RadarrSettings.ClearCache();
} }
private IRadarrApi RadarrApi { get; } private IRadarrApi RadarrApi { get; }
@ -59,17 +59,15 @@ namespace Ombi.Controllers.External
/// </summary> /// </summary>
/// <returns></returns> /// <returns></returns>
[HttpGet("Profiles")] [HttpGet("Profiles")]
[PowerUser]
public async Task<IEnumerable<RadarrProfile>> GetProfiles() public async Task<IEnumerable<RadarrProfile>> GetProfiles()
{ {
return await Cache.GetOrAdd(CacheKeys.RadarrQualityProfiles, async () => var settings = await RadarrSettings.GetSettingsAsync();
if (settings.Enabled)
{ {
var settings = await RadarrSettings.GetSettingsAsync(); return await RadarrApi.GetProfiles(settings.ApiKey, settings.FullUri);
if (settings.Enabled) }
{ return null;
return await RadarrApi.GetProfiles(settings.ApiKey, settings.FullUri);
}
return null;
}, DateTime.Now.AddHours(1));
} }
/// <summary> /// <summary>
@ -78,17 +76,15 @@ namespace Ombi.Controllers.External
/// </summary> /// </summary>
/// <returns></returns> /// <returns></returns>
[HttpGet("RootFolders")] [HttpGet("RootFolders")]
[PowerUser]
public async Task<IEnumerable<RadarrRootFolder>> GetRootFolders() public async Task<IEnumerable<RadarrRootFolder>> GetRootFolders()
{ {
return await Cache.GetOrAdd(CacheKeys.RadarrRootProfiles, async () => var settings = await RadarrSettings.GetSettingsAsync();
if (settings.Enabled)
{ {
var settings = await RadarrSettings.GetSettingsAsync(); return await RadarrApi.GetRootFolders(settings.ApiKey, settings.FullUri);
if (settings.Enabled) }
{ return null;
return await RadarrApi.GetRootFolders(settings.ApiKey, settings.FullUri);
}
return null;
}, DateTime.Now.AddHours(1));
} }
} }
} }

@ -20,6 +20,7 @@ namespace Ombi.Controllers.External
{ {
SonarrApi = sonarr; SonarrApi = sonarr;
SonarrSettings = settings; SonarrSettings = settings;
SonarrSettings.ClearCache();
} }
private ISonarrApi SonarrApi { get; } private ISonarrApi SonarrApi { get; }
@ -54,6 +55,7 @@ namespace Ombi.Controllers.External
/// </summary> /// </summary>
/// <returns></returns> /// <returns></returns>
[HttpGet("Profiles")] [HttpGet("Profiles")]
[PowerUser]
public async Task<IEnumerable<SonarrProfile>> GetProfiles() public async Task<IEnumerable<SonarrProfile>> GetProfiles()
{ {
var settings = await SonarrSettings.GetSettingsAsync(); var settings = await SonarrSettings.GetSettingsAsync();
@ -69,6 +71,7 @@ namespace Ombi.Controllers.External
/// </summary> /// </summary>
/// <returns></returns> /// <returns></returns>
[HttpGet("RootFolders")] [HttpGet("RootFolders")]
[PowerUser]
public async Task<IEnumerable<SonarrRootFolder>> GetRootFolders() public async Task<IEnumerable<SonarrRootFolder>> GetRootFolders()
{ {
var settings = await SonarrSettings.GetSettingsAsync(); var settings = await SonarrSettings.GetSettingsAsync();

@ -12,8 +12,8 @@
"Common": { "Common": {
"ContinueButton": "Fortsæt", "ContinueButton": "Fortsæt",
"Available": "Tilgængelig", "Available": "Tilgængelig",
"PartiallyAvailable": "Partially Available", "PartiallyAvailable": "Delvist tilgængelig",
"Monitored": "Monitored", "Monitored": "Overvåget",
"NotAvailable": "Ikke tilgængelig", "NotAvailable": "Ikke tilgængelig",
"ProcessingRequest": "Behandler anmodning", "ProcessingRequest": "Behandler anmodning",
"PendingApproval": "Afventer godkendelse", "PendingApproval": "Afventer godkendelse",
@ -48,7 +48,7 @@
"Requests": "Anmodninger", "Requests": "Anmodninger",
"UserManagement": "Brugeradministration", "UserManagement": "Brugeradministration",
"Issues": "Problemer", "Issues": "Problemer",
"Vote": "Vote", "Vote": "Stem",
"Donate": "Donér!", "Donate": "Donér!",
"DonateLibraryMaintainer": "Donér til vedligeholder af bibliotek", "DonateLibraryMaintainer": "Donér til vedligeholder af bibliotek",
"DonateTooltip": "Sådan overbeviser jeg min kone om, at jeg skal bruge min fritid på at udvikle Ombi :)", "DonateTooltip": "Sådan overbeviser jeg min kone om, at jeg skal bruge min fritid på at udvikle Ombi :)",
@ -57,36 +57,23 @@
"Welcome": "Velkommen til {{username}}", "Welcome": "Velkommen til {{username}}",
"UpdateDetails": "Opdater loginoplysninger", "UpdateDetails": "Opdater loginoplysninger",
"Logout": "Log af", "Logout": "Log af",
"Language": {
"English": "Engelsk",
"French": "Fransk",
"Spanish": "Spansk",
"German": "Tysk",
"Italian": "Italiensk",
"Danish": "Dansk",
"Dutch": "Hollandsk",
"Norwegian": "Norsk",
"BrazillianPortuguese": "Brazillian Portuguese",
"Polish": "Polish",
"Swedish": "Swedish"
},
"OpenMobileApp": "Åbn mobilapp", "OpenMobileApp": "Åbn mobilapp",
"RecentlyAdded": "Recently Added" "RecentlyAdded": "Senest tilføjet"
}, },
"Search": { "Search": {
"Title": "Søg", "Title": "Søg",
"Paragraph": "Ønsker du at se noget, som er utilgængeligt? intet problem, bare søg efter det nedenfor og anmod om det!", "Paragraph": "Ønsker du at se noget, som er utilgængeligt? intet problem, bare søg efter det nedenfor og anmod om det!",
"MoviesTab": "Film", "MoviesTab": "Film",
"TvTab": "Tv-serier", "TvTab": "Tv-serier",
"MusicTab": "Music", "MusicTab": "Musik",
"Suggestions": "Forslag", "Suggestions": "Forslag",
"NoResults": "Beklager, vi fandt ingen resultater!", "NoResults": "Beklager, vi fandt ingen resultater!",
"DigitalDate": "Digital Release: {{date}}", "DigitalDate": "Digital udgivelse: {{date}}",
"TheatricalRelease": "Theatrical Release: {{date}}", "TheatricalRelease": "Biografudgivelse: {{date}}",
"ViewOnPlex": "Se på Plex", "ViewOnPlex": "Se på Plex",
"ViewOnEmby": "Se på Emby", "ViewOnEmby": "Se på Emby",
"RequestAdded": "{{title}} er anmodet med succes", "RequestAdded": "{{title}} er anmodet med succes",
"Similar": "Similar", "Similar": "Lignende",
"Movies": { "Movies": {
"PopularMovies": "Populære film", "PopularMovies": "Populære film",
"UpcomingMovies": "Kommende film", "UpcomingMovies": "Kommende film",
@ -116,15 +103,15 @@
"Paragraph": "Herunder kan du se dine og alle andre anmodninger, samt status for download og godkendelse.", "Paragraph": "Herunder kan du se dine og alle andre anmodninger, samt status for download og godkendelse.",
"MoviesTab": "Film", "MoviesTab": "Film",
"TvTab": "Tv-serier", "TvTab": "Tv-serier",
"MusicTab": "Music", "MusicTab": "Musik",
"RequestedBy": "Anmodet af:", "RequestedBy": "Anmodet af:",
"Status": "Status:", "Status": "Status:",
"RequestStatus": "Status for anmodning:", "RequestStatus": "Status for anmodning:",
"Denied": " Afvist:", "Denied": " Afvist:",
"TheatricalRelease": "Theatrical Release: {{date}}", "TheatricalRelease": "Biografudgivelse: {{date}}",
"ReleaseDate": "Released: {{date}}", "ReleaseDate": "Udgivet: {{date}}",
"TheatricalReleaseSort": "Theatrical Release", "TheatricalReleaseSort": "Biografudgivelse",
"DigitalRelease": "Digital Release: {{date}}", "DigitalRelease": "Digital udgivelse: {{date}}",
"RequestDate": "Dato for anmodning:", "RequestDate": "Dato for anmodning:",
"QualityOverride": "Tilsidesæt kvalitet:", "QualityOverride": "Tilsidesæt kvalitet:",
"RootFolderOverride": "Tilsidesæt rodmappe:", "RootFolderOverride": "Tilsidesæt rodmappe:",
@ -140,20 +127,20 @@
"GridStatus": "Status", "GridStatus": "Status",
"ReportIssue": "Rapportér problem", "ReportIssue": "Rapportér problem",
"Filter": "Filter", "Filter": "Filter",
"Sort": "Sort", "Sort": "Sorter",
"SeasonNumberHeading": "Sæson: {seasonNumber}", "SeasonNumberHeading": "Sæson: {seasonNumber}",
"SortTitleAsc": "Title ▲", "SortTitleAsc": "Titel ▲",
"SortTitleDesc": "Title ▼", "SortTitleDesc": "Titel ▼",
"SortRequestDateAsc": "Request Date ▲", "SortRequestDateAsc": "Dato for anmodning ▲",
"SortRequestDateDesc": "Request Date ▼", "SortRequestDateDesc": "Dato for anmodning ▼",
"SortStatusAsc": "Status ▲", "SortStatusAsc": "Status ▲",
"SortStatusDesc": "Status ▼", "SortStatusDesc": "Status ▼",
"Remaining": { "Remaining": {
"Quota": "{{remaining}}/{{total}} requests remaining", "Quota": "{{remaining}}/{{total}} anmodninger, der er tilbage",
"NextDays": "Another request will be added in {{time}} days", "NextDays": "En anden anmodning vil blive tilføjet i {{time}} Dage",
"NextHours": "Another request will be added in {{time}} hours", "NextHours": "En anden anmodning vil blive tilføjet i {{time}} Timer",
"NextMinutes": "Another request will be added in {{time}} minutes", "NextMinutes": "En anden anmodning vil blive tilføjet i {{time}} Minutter",
"NextMinute": "Another request will be added in {{time}} minute" "NextMinute": "En anden anmodning vil blive tilføjet i {{time}} Minut"
} }
}, },
"Issues": { "Issues": {
@ -180,18 +167,18 @@
"FilterHeaderAvailability": "Tilgængelighed", "FilterHeaderAvailability": "Tilgængelighed",
"FilterHeaderRequestStatus": "Status", "FilterHeaderRequestStatus": "Status",
"Approved": "Godkendt", "Approved": "Godkendt",
"PendingApproval": "Pending Approval" "PendingApproval": "Afventer godkendelse"
}, },
"UserManagment": { "UserManagment": {
"TvRemaining": "TV: {{remaining}}/{{total}} remaining", "TvRemaining": "Tv: {{remaining}}/{{total}} Resterende",
"MovieRemaining": "Movies: {{remaining}}/{{total}} remaining", "MovieRemaining": "Film: {{remaining}}/{{total}} Resterende",
"MusicRemaining": "Music: {{remaining}}/{{total}} remaining", "MusicRemaining": "Musik: {{remaining}}/{{total}} Resterende",
"TvDue": "TV: {{date}}", "TvDue": "Tv: {{date}}",
"MovieDue": "Movie: {{date}}", "MovieDue": "Film: {{date}}",
"MusicDue": "Music: {{date}}" "MusicDue": "Musik: {{date}}"
}, },
"Votes": { "Votes": {
"CompletedVotesTab": "Voted", "CompletedVotesTab": "Stemt",
"VotesTab": "Votes Needed" "VotesTab": "Nødvendige stemmer"
} }
} }

@ -57,19 +57,6 @@
"Welcome": "Willkommen {{username}}", "Welcome": "Willkommen {{username}}",
"UpdateDetails": "Update-Details", "UpdateDetails": "Update-Details",
"Logout": "Ausloggen", "Logout": "Ausloggen",
"Language": {
"English": "Englisch",
"French": "Französisch",
"Spanish": "Spanisch",
"German": "Deutsch",
"Italian": "Italienisch",
"Danish": "Dänisch",
"Dutch": "Niederländisch",
"Norwegian": "Norwegisch",
"BrazillianPortuguese": "Portugiesisch (Brasilien)",
"Polish": "Polnisch",
"Swedish": "Schwedisch"
},
"OpenMobileApp": "Mobile App", "OpenMobileApp": "Mobile App",
"RecentlyAdded": "Kürzlich hinzugefügt" "RecentlyAdded": "Kürzlich hinzugefügt"
}, },

@ -60,19 +60,6 @@
"Welcome": "Welcome {{username}}", "Welcome": "Welcome {{username}}",
"UpdateDetails": "Update Details", "UpdateDetails": "Update Details",
"Logout": "Logout", "Logout": "Logout",
"Language": {
"English": "English",
"French": "French",
"Spanish": "Spanish",
"German": "German",
"Italian": "Italian",
"Danish": "Danish",
"Dutch": "Dutch",
"Norwegian":"Norwegian",
"BrazillianPortuguese": "Brazillian Portuguese",
"Polish":"Polish",
"Swedish":"Swedish"
},
"OpenMobileApp":"Open Mobile App", "OpenMobileApp":"Open Mobile App",
"RecentlyAdded":"Recently Added" "RecentlyAdded":"Recently Added"
}, },

@ -57,19 +57,6 @@
"Welcome": "Bienvenido {{username}}", "Welcome": "Bienvenido {{username}}",
"UpdateDetails": "Detalles de la actualización", "UpdateDetails": "Detalles de la actualización",
"Logout": "Cerrar sesión", "Logout": "Cerrar sesión",
"Language": {
"English": "Inglés",
"French": "Francés",
"Spanish": "Español",
"German": "Alemán",
"Italian": "Italiano",
"Danish": "Danés",
"Dutch": "Holandés",
"Norwegian": "Norwegian",
"BrazillianPortuguese": "Brazillian Portuguese",
"Polish": "Polish",
"Swedish": "Swedish"
},
"OpenMobileApp": "Open Mobile App", "OpenMobileApp": "Open Mobile App",
"RecentlyAdded": "Recently Added" "RecentlyAdded": "Recently Added"
}, },

@ -57,19 +57,6 @@
"Welcome": "Bienvenue {{username}}", "Welcome": "Bienvenue {{username}}",
"UpdateDetails": "Détails de la mise à jour", "UpdateDetails": "Détails de la mise à jour",
"Logout": "Déconnexion", "Logout": "Déconnexion",
"Language": {
"English": "Anglais",
"French": "Français",
"Spanish": "Espagnol",
"German": "Allemand",
"Italian": "Italien",
"Danish": "Danois",
"Dutch": "Néerlandais",
"Norwegian": "Norvégien",
"BrazillianPortuguese": "Portuguais brésilien",
"Polish": "Polonais",
"Swedish": "Swedish"
},
"OpenMobileApp": "Ouvrir l'application mobile", "OpenMobileApp": "Ouvrir l'application mobile",
"RecentlyAdded": "Ajouts récents" "RecentlyAdded": "Ajouts récents"
}, },

@ -57,19 +57,6 @@
"Welcome": "Benvenuto {{username}}", "Welcome": "Benvenuto {{username}}",
"UpdateDetails": "Aggiorna i tuoi dati", "UpdateDetails": "Aggiorna i tuoi dati",
"Logout": "Logout", "Logout": "Logout",
"Language": {
"English": "Inglese",
"French": "Francese",
"Spanish": "Spagnolo",
"German": "Tedesco",
"Italian": "Italiano",
"Danish": "Danese",
"Dutch": "Olandese",
"Norwegian": "Norvegese",
"BrazillianPortuguese": "Brazillian Portuguese",
"Polish": "Polish",
"Swedish": "Swedish"
},
"OpenMobileApp": "Apri l'applicazione mobile", "OpenMobileApp": "Apri l'applicazione mobile",
"RecentlyAdded": "Recently Added" "RecentlyAdded": "Recently Added"
}, },

@ -57,19 +57,6 @@
"Welcome": "Welkom {{username}}", "Welcome": "Welkom {{username}}",
"UpdateDetails": "Update gegevens", "UpdateDetails": "Update gegevens",
"Logout": "Logout", "Logout": "Logout",
"Language": {
"English": "Engels",
"French": "Frans",
"Spanish": "Spaans",
"German": "Duits",
"Italian": "Italiaans",
"Danish": "Deens",
"Dutch": "Nederlands",
"Norwegian": "Noors",
"BrazillianPortuguese": "Brazillian Portuguese",
"Polish": "Polish",
"Swedish": "Swedish"
},
"OpenMobileApp": "Open Mobiele App", "OpenMobileApp": "Open Mobiele App",
"RecentlyAdded": "Recently Added" "RecentlyAdded": "Recently Added"
}, },

@ -57,19 +57,6 @@
"Welcome": "Velkommen {{username}}", "Welcome": "Velkommen {{username}}",
"UpdateDetails": "Oppdater detaljer", "UpdateDetails": "Oppdater detaljer",
"Logout": "Logg av", "Logout": "Logg av",
"Language": {
"English": "Engelsk",
"French": "Fransk",
"Spanish": "Spansk",
"German": "Tysk",
"Italian": "Italiensk",
"Danish": "Dansk",
"Dutch": "Nederlandsk",
"Norwegian": "Norsk",
"BrazillianPortuguese": "Brazillian Portuguese",
"Polish": "Polish",
"Swedish": "Swedish"
},
"OpenMobileApp": "Åpne mobilapp", "OpenMobileApp": "Åpne mobilapp",
"RecentlyAdded": "Recently Added" "RecentlyAdded": "Recently Added"
}, },

@ -57,19 +57,6 @@
"Welcome": "Witaj {{username}}", "Welcome": "Witaj {{username}}",
"UpdateDetails": "Podaj szczegóły", "UpdateDetails": "Podaj szczegóły",
"Logout": "Wyloguj", "Logout": "Wyloguj",
"Language": {
"English": "Angielski",
"French": "Francuski",
"Spanish": "Hiszpański",
"German": "Niemiecki",
"Italian": "Włoski",
"Danish": "Duński",
"Dutch": "Holenderski",
"Norwegian": "Norweski",
"BrazillianPortuguese": "Brazylijski portugalski",
"Polish": "Polski",
"Swedish": "Swedish"
},
"OpenMobileApp": "Otwórz aplikację mobilną", "OpenMobileApp": "Otwórz aplikację mobilną",
"RecentlyAdded": "Ostatnio dodane" "RecentlyAdded": "Ostatnio dodane"
}, },

@ -57,19 +57,6 @@
"Welcome": "Bem-vindo, {{username}}", "Welcome": "Bem-vindo, {{username}}",
"UpdateDetails": "Detalhes da Atualização", "UpdateDetails": "Detalhes da Atualização",
"Logout": "Sair", "Logout": "Sair",
"Language": {
"English": "Inglês",
"French": "Francês",
"Spanish": "Espanhol",
"German": "Alemão",
"Italian": "Italiano",
"Danish": "Dinamarquês",
"Dutch": "Holandês",
"Norwegian": "Norueguês",
"BrazillianPortuguese": "Português (Brasil)",
"Polish": "Polonês",
"Swedish": "Swedish"
},
"OpenMobileApp": "Abrir aplicativo do celular", "OpenMobileApp": "Abrir aplicativo do celular",
"RecentlyAdded": "Recentemente adicionado" "RecentlyAdded": "Recentemente adicionado"
}, },

@ -57,19 +57,6 @@
"Welcome": "Välkommen {{username}}", "Welcome": "Välkommen {{username}}",
"UpdateDetails": "Uppdatera information", "UpdateDetails": "Uppdatera information",
"Logout": "Logga ut", "Logout": "Logga ut",
"Language": {
"English": "Engelska",
"French": "Franska",
"Spanish": "Spanska",
"German": "Tyska",
"Italian": "Italienska",
"Danish": "Danska",
"Dutch": "Holländska",
"Norwegian": "Norska",
"BrazillianPortuguese": "Brazillian portugisiska",
"Polish": "Polska",
"Swedish": "Swedish"
},
"OpenMobileApp": "Öppna Mobil App", "OpenMobileApp": "Öppna Mobil App",
"RecentlyAdded": "Nyligen tillagda" "RecentlyAdded": "Nyligen tillagda"
}, },

Loading…
Cancel
Save