mirror of https://github.com/Ombi-app/Ombi
commit
ec8315ba2e
@ -1,11 +1,11 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<configuration>
|
||||
<runtime>
|
||||
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" culture="neutral" />
|
||||
<bindingRedirect oldVersion="0.0.0.0-8.0.0.0" newVersion="8.0.0.0" />
|
||||
</dependentAssembly>
|
||||
</assemblyBinding>
|
||||
</runtime>
|
||||
<startup><supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5.2" /></startup></configuration>
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<configuration>
|
||||
<runtime>
|
||||
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" culture="neutral" />
|
||||
<bindingRedirect oldVersion="0.0.0.0-8.0.0.0" newVersion="8.0.0.0" />
|
||||
</dependentAssembly>
|
||||
</assemblyBinding>
|
||||
</runtime>
|
||||
<startup><supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5.2" /></startup></configuration>
|
||||
|
@ -1,11 +1,11 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<configuration>
|
||||
<runtime>
|
||||
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" culture="neutral" />
|
||||
<bindingRedirect oldVersion="0.0.0.0-8.0.0.0" newVersion="8.0.0.0" />
|
||||
</dependentAssembly>
|
||||
</assemblyBinding>
|
||||
</runtime>
|
||||
<startup><supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5.2" /></startup></configuration>
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<configuration>
|
||||
<runtime>
|
||||
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" culture="neutral" />
|
||||
<bindingRedirect oldVersion="0.0.0.0-8.0.0.0" newVersion="8.0.0.0" />
|
||||
</dependentAssembly>
|
||||
</assemblyBinding>
|
||||
</runtime>
|
||||
<startup><supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5.2" /></startup></configuration>
|
||||
|
@ -1,9 +1,9 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<packages>
|
||||
<package id="Nancy" version="1.4.3" targetFramework="net45" />
|
||||
<package id="Nancy.Authentication.Forms" version="1.4.1" targetFramework="net45" />
|
||||
<package id="Newtonsoft.Json" version="8.0.2" targetFramework="net45" />
|
||||
<package id="NLog" version="4.3.4" targetFramework="net45" />
|
||||
<package id="Octokit" version="0.19.0" targetFramework="net45" />
|
||||
<package id="valueinjecter" version="3.1.1.2" targetFramework="net45" />
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<packages>
|
||||
<package id="Nancy" version="1.4.3" targetFramework="net45" />
|
||||
<package id="Nancy.Authentication.Forms" version="1.4.1" targetFramework="net45" />
|
||||
<package id="Newtonsoft.Json" version="8.0.2" targetFramework="net45" />
|
||||
<package id="NLog" version="4.3.4" targetFramework="net45" />
|
||||
<package id="Octokit" version="0.19.0" targetFramework="net45" />
|
||||
<package id="valueinjecter" version="3.1.1.2" targetFramework="net45" />
|
||||
</packages>
|
@ -1,11 +1,11 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<configuration>
|
||||
<runtime>
|
||||
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" culture="neutral" />
|
||||
<bindingRedirect oldVersion="0.0.0.0-8.0.0.0" newVersion="8.0.0.0" />
|
||||
</dependentAssembly>
|
||||
</assemblyBinding>
|
||||
</runtime>
|
||||
<startup><supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5.2" /></startup></configuration>
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<configuration>
|
||||
<runtime>
|
||||
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" culture="neutral" />
|
||||
<bindingRedirect oldVersion="0.0.0.0-8.0.0.0" newVersion="8.0.0.0" />
|
||||
</dependentAssembly>
|
||||
</assemblyBinding>
|
||||
</runtime>
|
||||
<startup><supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5.2" /></startup></configuration>
|
||||
|
@ -1,8 +1,9 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<packages>
|
||||
<package id="Common.Logging" version="3.0.0" targetFramework="net452" />
|
||||
<package id="Common.Logging.Core" version="3.0.0" targetFramework="net452" />
|
||||
<package id="Moq" version="4.2.1510.2205" targetFramework="net46" />
|
||||
<package id="NUnit" version="3.2.0" targetFramework="net46" />
|
||||
<package id="Quartz" version="2.3.3" targetFramework="net452" />
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<packages>
|
||||
<package id="AutoFixture" version="3.40.0" targetFramework="net452" />
|
||||
<package id="Common.Logging" version="3.0.0" targetFramework="net452" />
|
||||
<package id="Common.Logging.Core" version="3.0.0" targetFramework="net452" />
|
||||
<package id="Moq" version="4.2.1510.2205" targetFramework="net46" />
|
||||
<package id="NUnit" version="3.2.0" targetFramework="net46" />
|
||||
<package id="Quartz" version="2.3.3" targetFramework="net452" />
|
||||
</packages>
|
@ -1,11 +1,11 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<configuration>
|
||||
<runtime>
|
||||
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" culture="neutral" />
|
||||
<bindingRedirect oldVersion="0.0.0.0-8.0.0.0" newVersion="8.0.0.0" />
|
||||
</dependentAssembly>
|
||||
</assemblyBinding>
|
||||
</runtime>
|
||||
<startup><supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5.2" /></startup></configuration>
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<configuration>
|
||||
<runtime>
|
||||
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" culture="neutral" />
|
||||
<bindingRedirect oldVersion="0.0.0.0-8.0.0.0" newVersion="8.0.0.0" />
|
||||
</dependentAssembly>
|
||||
</assemblyBinding>
|
||||
</runtime>
|
||||
<startup><supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5.2" /></startup></configuration>
|
||||
|
@ -1,28 +1,28 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<configuration>
|
||||
<configSections>
|
||||
<sectionGroup name="system.web.webPages.razor" type="System.Web.WebPages.Razor.Configuration.RazorWebSectionGroup, System.Web.WebPages.Razor, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">
|
||||
<section name="pages" type="System.Web.WebPages.Razor.Configuration.RazorPagesSection, System.Web.WebPages.Razor, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" />
|
||||
</sectionGroup>
|
||||
</configSections>
|
||||
<runtime>
|
||||
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" culture="neutral" />
|
||||
<bindingRedirect oldVersion="0.0.0.0-8.0.0.0" newVersion="8.0.0.0" />
|
||||
</dependentAssembly>
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity name="Microsoft.Owin" publicKeyToken="31bf3856ad364e35" culture="neutral" />
|
||||
<bindingRedirect oldVersion="0.0.0.0-3.0.1.0" newVersion="3.0.1.0" />
|
||||
</dependentAssembly>
|
||||
</assemblyBinding>
|
||||
</runtime>
|
||||
<appSettings>
|
||||
<add key="webPages:Enabled" value="false" />
|
||||
</appSettings><system.web.webPages.razor>
|
||||
<pages pageBaseType="Nancy.ViewEngines.Razor.NancyRazorViewBase">
|
||||
<namespaces>
|
||||
<add namespace="Nancy.ViewEngines.Razor" />
|
||||
</namespaces>
|
||||
</pages>
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<configuration>
|
||||
<configSections>
|
||||
<sectionGroup name="system.web.webPages.razor" type="System.Web.WebPages.Razor.Configuration.RazorWebSectionGroup, System.Web.WebPages.Razor, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">
|
||||
<section name="pages" type="System.Web.WebPages.Razor.Configuration.RazorPagesSection, System.Web.WebPages.Razor, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" />
|
||||
</sectionGroup>
|
||||
</configSections>
|
||||
<runtime>
|
||||
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" culture="neutral" />
|
||||
<bindingRedirect oldVersion="0.0.0.0-8.0.0.0" newVersion="8.0.0.0" />
|
||||
</dependentAssembly>
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity name="Microsoft.Owin" publicKeyToken="31bf3856ad364e35" culture="neutral" />
|
||||
<bindingRedirect oldVersion="0.0.0.0-3.0.1.0" newVersion="3.0.1.0" />
|
||||
</dependentAssembly>
|
||||
</assemblyBinding>
|
||||
</runtime>
|
||||
<appSettings>
|
||||
<add key="webPages:Enabled" value="false" />
|
||||
</appSettings><system.web.webPages.razor>
|
||||
<pages pageBaseType="Nancy.ViewEngines.Razor.NancyRazorViewBase">
|
||||
<namespaces>
|
||||
<add namespace="Nancy.ViewEngines.Razor" />
|
||||
</namespaces>
|
||||
</pages>
|
||||
</system.web.webPages.razor></configuration>
|
@ -1,377 +1,387 @@
|
||||
#region Copyright
|
||||
// /************************************************************************
|
||||
// Copyright (c) 2016 Jamie Rees
|
||||
// File: RequestsModule.cs
|
||||
// Created By: Jamie Rees
|
||||
//
|
||||
// Permission is hereby granted, free of charge, to any person obtaining
|
||||
// a copy of this software and associated documentation files (the
|
||||
// "Software"), to deal in the Software without restriction, including
|
||||
// without limitation the rights to use, copy, modify, merge, publish,
|
||||
// distribute, sublicense, and/or sell copies of the Software, and to
|
||||
// permit persons to whom the Software is furnished to do so, subject to
|
||||
// the following conditions:
|
||||
//
|
||||
// The above copyright notice and this permission notice shall be
|
||||
// included in all copies or substantial portions of the Software.
|
||||
//
|
||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||
// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||
// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||
// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
||||
// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
||||
// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||
// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
// ************************************************************************/
|
||||
#endregion
|
||||
|
||||
using System;
|
||||
using System.Linq;
|
||||
|
||||
using Nancy;
|
||||
using Nancy.Responses.Negotiation;
|
||||
using Nancy.Security;
|
||||
|
||||
using PlexRequests.Core;
|
||||
using PlexRequests.Core.SettingModels;
|
||||
using PlexRequests.Services.Interfaces;
|
||||
using PlexRequests.Services.Notification;
|
||||
using PlexRequests.Store;
|
||||
using PlexRequests.UI.Models;
|
||||
using PlexRequests.Helpers;
|
||||
using PlexRequests.UI.Helpers;
|
||||
using System.Collections.Generic;
|
||||
using PlexRequests.Api.Interfaces;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
using NLog;
|
||||
|
||||
namespace PlexRequests.UI.Modules
|
||||
{
|
||||
public class RequestsModule : BaseAuthModule
|
||||
{
|
||||
public RequestsModule(
|
||||
IRequestService service,
|
||||
ISettingsService<PlexRequestSettings> prSettings,
|
||||
ISettingsService<PlexSettings> plex,
|
||||
INotificationService notify,
|
||||
ISettingsService<SonarrSettings> sonarrSettings,
|
||||
ISettingsService<SickRageSettings> sickRageSettings,
|
||||
ISettingsService<CouchPotatoSettings> cpSettings,
|
||||
ICouchPotatoApi cpApi,
|
||||
ISonarrApi sonarrApi,
|
||||
ISickRageApi sickRageApi,
|
||||
ICacheProvider cache) : base("requests", prSettings)
|
||||
{
|
||||
Service = service;
|
||||
PrSettings = prSettings;
|
||||
PlexSettings = plex;
|
||||
NotificationService = notify;
|
||||
SonarrSettings = sonarrSettings;
|
||||
SickRageSettings = sickRageSettings;
|
||||
CpSettings = cpSettings;
|
||||
SonarrApi = sonarrApi;
|
||||
SickRageApi = sickRageApi;
|
||||
CpApi = cpApi;
|
||||
Cache = cache;
|
||||
|
||||
Get["/", true] = async (x, ct) => await LoadRequests();
|
||||
Get["/movies", true] = async (x, ct) => await GetMovies();
|
||||
Get["/tvshows", true] = async (c, ct) => await GetTvShows();
|
||||
Get["/albums", true] = async (x, ct) => await GetAlbumRequests();
|
||||
Post["/delete", true] = async (x, ct) => await DeleteRequest((int)Request.Form.id);
|
||||
Post["/reportissue", true] = async (x, ct) => await ReportIssue((int)Request.Form.requestId, (IssueState)(int)Request.Form.issue, null);
|
||||
Post["/reportissuecomment", true] = async (x, ct) => await ReportIssue((int)Request.Form.requestId, IssueState.Other, (string)Request.Form.commentArea);
|
||||
|
||||
Post["/clearissues", true] = async (x, ct) => await ClearIssue((int)Request.Form.Id);
|
||||
|
||||
Post["/changeavailability", true] = async (x, ct) => await ChangeRequestAvailability((int)Request.Form.Id, (bool)Request.Form.Available);
|
||||
}
|
||||
|
||||
private static Logger Log = LogManager.GetCurrentClassLogger();
|
||||
private IRequestService Service { get; }
|
||||
private INotificationService NotificationService { get; }
|
||||
private ISettingsService<PlexRequestSettings> PrSettings { get; }
|
||||
private ISettingsService<PlexSettings> PlexSettings { get; }
|
||||
private ISettingsService<SonarrSettings> SonarrSettings { get; }
|
||||
private ISettingsService<SickRageSettings> SickRageSettings { get; }
|
||||
private ISettingsService<CouchPotatoSettings> CpSettings { get; }
|
||||
private ISonarrApi SonarrApi { get; }
|
||||
private ISickRageApi SickRageApi { get; }
|
||||
private ICouchPotatoApi CpApi { get; }
|
||||
private ICacheProvider Cache { get; }
|
||||
|
||||
private async Task<Negotiator> LoadRequests()
|
||||
{
|
||||
var settings = await PrSettings.GetSettingsAsync();
|
||||
return View["Index", settings];
|
||||
}
|
||||
|
||||
private async Task<Response> GetMovies()
|
||||
{
|
||||
var settings = PrSettings.GetSettings();
|
||||
|
||||
var allRequests = await Service.GetAllAsync();
|
||||
allRequests = allRequests.Where(x => x.Type == RequestType.Movie);
|
||||
|
||||
var dbMovies = allRequests.ToList();
|
||||
|
||||
if (settings.UsersCanViewOnlyOwnRequests && !IsAdmin)
|
||||
{
|
||||
dbMovies = dbMovies.Where(x => x.UserHasRequested(Username)).ToList();
|
||||
}
|
||||
|
||||
List<QualityModel> qualities = new List<QualityModel>();
|
||||
|
||||
if (IsAdmin)
|
||||
{
|
||||
var cpSettings = CpSettings.GetSettings();
|
||||
if (cpSettings.Enabled)
|
||||
{
|
||||
try
|
||||
{
|
||||
var result = await Cache.GetOrSetAsync(CacheKeys.CouchPotatoQualityProfiles, async () =>
|
||||
{
|
||||
return await Task.Run(() => CpApi.GetProfiles(cpSettings.FullUri, cpSettings.ApiKey)).ConfigureAwait(false);
|
||||
});
|
||||
|
||||
qualities = result.list.Select(x => new QualityModel() { Id = x._id, Name = x.label }).ToList();
|
||||
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
Log.Info(e);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
var viewModel = dbMovies.Select(movie => new RequestViewModel
|
||||
{
|
||||
ProviderId = movie.ProviderId,
|
||||
Type = movie.Type,
|
||||
Status = movie.Status,
|
||||
ImdbId = movie.ImdbId,
|
||||
Id = movie.Id,
|
||||
PosterPath = movie.PosterPath,
|
||||
ReleaseDate = movie.ReleaseDate,
|
||||
ReleaseDateTicks = movie.ReleaseDate.Ticks,
|
||||
RequestedDate = movie.RequestedDate,
|
||||
Released = DateTime.Now > movie.ReleaseDate,
|
||||
RequestedDateTicks = DateTimeHelper.OffsetUTCDateTime(movie.RequestedDate, DateTimeOffset).Ticks,
|
||||
Approved = movie.Available || movie.Approved,
|
||||
Title = movie.Title,
|
||||
Overview = movie.Overview,
|
||||
RequestedUsers = IsAdmin ? movie.AllUsers.ToArray() : new string[] { },
|
||||
ReleaseYear = movie.ReleaseDate.Year.ToString(),
|
||||
Available = movie.Available,
|
||||
Admin = IsAdmin,
|
||||
IssueId = movie.IssueId,
|
||||
Qualities = qualities.ToArray()
|
||||
}).ToList();
|
||||
|
||||
return Response.AsJson(viewModel);
|
||||
}
|
||||
|
||||
private async Task<Response> GetTvShows()
|
||||
{
|
||||
var settings = PrSettings.GetSettings();
|
||||
|
||||
var requests = await Service.GetAllAsync();
|
||||
requests = requests.Where(x => x.Type == RequestType.TvShow);
|
||||
|
||||
var dbTv = requests;
|
||||
|
||||
if (settings.UsersCanViewOnlyOwnRequests && !IsAdmin)
|
||||
{
|
||||
dbTv = dbTv.Where(x => x.UserHasRequested(Username)).ToList();
|
||||
}
|
||||
|
||||
IEnumerable<QualityModel> qualities = new List<QualityModel>();
|
||||
if (IsAdmin)
|
||||
{
|
||||
try
|
||||
{
|
||||
var sonarrSettings = SonarrSettings.GetSettings();
|
||||
if (sonarrSettings.Enabled)
|
||||
{
|
||||
var result = Cache.GetOrSetAsync(CacheKeys.SonarrQualityProfiles, async () =>
|
||||
{
|
||||
return await Task.Run(() => SonarrApi.GetProfiles(sonarrSettings.ApiKey, sonarrSettings.FullUri));
|
||||
});
|
||||
qualities = result.Result.Select(x => new QualityModel() { Id = x.id.ToString(), Name = x.name }).ToList();
|
||||
}
|
||||
else
|
||||
{
|
||||
var sickRageSettings = SickRageSettings.GetSettings();
|
||||
if (sickRageSettings.Enabled)
|
||||
{
|
||||
qualities = sickRageSettings.Qualities.Select(x => new QualityModel() { Id = x.Key, Name = x.Value }).ToList();
|
||||
}
|
||||
}
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
Log.Info(e);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
var viewModel = dbTv.Select(tv =>
|
||||
{
|
||||
return new RequestViewModel
|
||||
{
|
||||
ProviderId = tv.ProviderId,
|
||||
Type = tv.Type,
|
||||
Status = tv.Status,
|
||||
ImdbId = tv.ImdbId,
|
||||
Id = tv.Id,
|
||||
PosterPath = tv.PosterPath,
|
||||
ReleaseDate = tv.ReleaseDate,
|
||||
ReleaseDateTicks = tv.ReleaseDate.Ticks,
|
||||
RequestedDate = tv.RequestedDate,
|
||||
RequestedDateTicks = DateTimeHelper.OffsetUTCDateTime(tv.RequestedDate, DateTimeOffset).Ticks,
|
||||
Released = DateTime.Now > tv.ReleaseDate,
|
||||
Approved = tv.Available || tv.Approved,
|
||||
Title = tv.Title,
|
||||
Overview = tv.Overview,
|
||||
RequestedUsers = IsAdmin ? tv.AllUsers.ToArray() : new string[] { },
|
||||
ReleaseYear = tv.ReleaseDate.Year.ToString(),
|
||||
Available = tv.Available,
|
||||
Admin = IsAdmin,
|
||||
IssueId = tv.IssueId,
|
||||
TvSeriesRequestType = tv.SeasonsRequested,
|
||||
Qualities = qualities.ToArray()
|
||||
};
|
||||
}).ToList();
|
||||
|
||||
return Response.AsJson(viewModel);
|
||||
}
|
||||
|
||||
private async Task<Response> GetAlbumRequests()
|
||||
{
|
||||
var settings = PrSettings.GetSettings();
|
||||
var dbAlbum = await Service.GetAllAsync();
|
||||
dbAlbum = dbAlbum.Where(x => x.Type == RequestType.Album);
|
||||
if (settings.UsersCanViewOnlyOwnRequests && !IsAdmin)
|
||||
{
|
||||
dbAlbum = dbAlbum.Where(x => x.UserHasRequested(Username));
|
||||
}
|
||||
|
||||
var viewModel = dbAlbum.Select(album =>
|
||||
{
|
||||
return new RequestViewModel
|
||||
{
|
||||
ProviderId = album.ProviderId,
|
||||
Type = album.Type,
|
||||
Status = album.Status,
|
||||
ImdbId = album.ImdbId,
|
||||
Id = album.Id,
|
||||
PosterPath = album.PosterPath,
|
||||
ReleaseDate = album.ReleaseDate,
|
||||
ReleaseDateTicks = album.ReleaseDate.Ticks,
|
||||
RequestedDate = album.RequestedDate,
|
||||
RequestedDateTicks = DateTimeHelper.OffsetUTCDateTime(album.RequestedDate, DateTimeOffset).Ticks,
|
||||
Released = DateTime.Now > album.ReleaseDate,
|
||||
Approved = album.Available || album.Approved,
|
||||
Title = album.Title,
|
||||
Overview = album.Overview,
|
||||
RequestedUsers = IsAdmin ? album.AllUsers.ToArray() : new string[] { },
|
||||
ReleaseYear = album.ReleaseDate.Year.ToString(),
|
||||
Available = album.Available,
|
||||
Admin = IsAdmin,
|
||||
IssueId = album.IssueId,
|
||||
TvSeriesRequestType = album.SeasonsRequested,
|
||||
MusicBrainzId = album.MusicBrainzId,
|
||||
ArtistName = album.ArtistName
|
||||
|
||||
};
|
||||
}).ToList();
|
||||
|
||||
return Response.AsJson(viewModel);
|
||||
}
|
||||
|
||||
private async Task<Response> DeleteRequest(int requestid)
|
||||
{
|
||||
this.RequiresClaims(UserClaims.Admin);
|
||||
|
||||
var currentEntity = await Service.GetAsync(requestid);
|
||||
await Service.DeleteRequestAsync(currentEntity);
|
||||
return Response.AsJson(new JsonResponseModel { Result = true });
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Reports the issue.
|
||||
/// Comment can be null if the <c>IssueState != Other</c>
|
||||
/// </summary>
|
||||
/// <param name="requestId">The request identifier.</param>
|
||||
/// <param name="issue">The issue.</param>
|
||||
/// <param name="comment">The comment.</param>
|
||||
/// <returns></returns>
|
||||
private async Task<Response> ReportIssue(int requestId, IssueState issue, string comment)
|
||||
{
|
||||
var originalRequest = await Service.GetAsync(requestId);
|
||||
if (originalRequest == null)
|
||||
{
|
||||
return Response.AsJson(new JsonResponseModel { Result = false, Message = "Could not add issue, please try again or contact the administrator!" });
|
||||
}
|
||||
originalRequest.Issues = issue;
|
||||
originalRequest.OtherMessage = !string.IsNullOrEmpty(comment)
|
||||
? $"{Username} - {comment}"
|
||||
: string.Empty;
|
||||
|
||||
|
||||
var result = await Service.UpdateRequestAsync(originalRequest);
|
||||
|
||||
var model = new NotificationModel
|
||||
{
|
||||
User = Username,
|
||||
NotificationType = NotificationType.Issue,
|
||||
Title = originalRequest.Title,
|
||||
DateTime = DateTime.Now,
|
||||
Body = issue == IssueState.Other ? comment : issue.ToString().ToCamelCaseWords()
|
||||
};
|
||||
await NotificationService.Publish(model);
|
||||
|
||||
return Response.AsJson(result
|
||||
? new JsonResponseModel { Result = true }
|
||||
: new JsonResponseModel { Result = false, Message = "Could not add issue, please try again or contact the administrator!" });
|
||||
}
|
||||
|
||||
private async Task<Response> ClearIssue(int requestId)
|
||||
{
|
||||
this.RequiresClaims(UserClaims.Admin);
|
||||
|
||||
var originalRequest = await Service.GetAsync(requestId);
|
||||
if (originalRequest == null)
|
||||
{
|
||||
return Response.AsJson(new JsonResponseModel { Result = false, Message = "Request does not exist to clear it!" });
|
||||
}
|
||||
originalRequest.Issues = IssueState.None;
|
||||
originalRequest.OtherMessage = string.Empty;
|
||||
|
||||
var result = await Service.UpdateRequestAsync(originalRequest);
|
||||
return Response.AsJson(result
|
||||
? new JsonResponseModel { Result = true }
|
||||
: new JsonResponseModel { Result = false, Message = "Could not clear issue, please try again or check the logs" });
|
||||
}
|
||||
|
||||
private async Task<Response> ChangeRequestAvailability(int requestId, bool available)
|
||||
{
|
||||
this.RequiresClaims(UserClaims.Admin);
|
||||
var originalRequest = await Service.GetAsync(requestId);
|
||||
if (originalRequest == null)
|
||||
{
|
||||
return Response.AsJson(new JsonResponseModel { Result = false, Message = "Request does not exist to change the availability!" });
|
||||
}
|
||||
|
||||
originalRequest.Available = available;
|
||||
|
||||
var result = await Service.UpdateRequestAsync(originalRequest);
|
||||
return Response.AsJson(result
|
||||
? new { Result = true, Available = available, Message = string.Empty }
|
||||
: new { Result = false, Available = false, Message = "Could not update the availability, please try again or check the logs" });
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
#region Copyright
|
||||
// /************************************************************************
|
||||
// Copyright (c) 2016 Jamie Rees
|
||||
// File: RequestsModule.cs
|
||||
// Created By: Jamie Rees
|
||||
//
|
||||
// Permission is hereby granted, free of charge, to any person obtaining
|
||||
// a copy of this software and associated documentation files (the
|
||||
// "Software"), to deal in the Software without restriction, including
|
||||
// without limitation the rights to use, copy, modify, merge, publish,
|
||||
// distribute, sublicense, and/or sell copies of the Software, and to
|
||||
// permit persons to whom the Software is furnished to do so, subject to
|
||||
// the following conditions:
|
||||
//
|
||||
// The above copyright notice and this permission notice shall be
|
||||
// included in all copies or substantial portions of the Software.
|
||||
//
|
||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||
// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||
// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||
// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
||||
// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
||||
// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||
// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
// ************************************************************************/
|
||||
#endregion
|
||||
|
||||
using System;
|
||||
using System.Linq;
|
||||
|
||||
using Nancy;
|
||||
using Nancy.Responses.Negotiation;
|
||||
using Nancy.Security;
|
||||
|
||||
using PlexRequests.Core;
|
||||
using PlexRequests.Core.SettingModels;
|
||||
using PlexRequests.Services.Interfaces;
|
||||
using PlexRequests.Services.Notification;
|
||||
using PlexRequests.Store;
|
||||
using PlexRequests.UI.Models;
|
||||
using PlexRequests.Helpers;
|
||||
using PlexRequests.UI.Helpers;
|
||||
using System.Collections.Generic;
|
||||
using PlexRequests.Api.Interfaces;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
using NLog;
|
||||
|
||||
using PlexRequests.Core.Models;
|
||||
using PlexRequests.Helpers.Analytics;
|
||||
|
||||
using Action = PlexRequests.Helpers.Analytics.Action;
|
||||
|
||||
namespace PlexRequests.UI.Modules
|
||||
{
|
||||
public class RequestsModule : BaseAuthModule
|
||||
{
|
||||
public RequestsModule(
|
||||
IRequestService service,
|
||||
ISettingsService<PlexRequestSettings> prSettings,
|
||||
ISettingsService<PlexSettings> plex,
|
||||
INotificationService notify,
|
||||
ISettingsService<SonarrSettings> sonarrSettings,
|
||||
ISettingsService<SickRageSettings> sickRageSettings,
|
||||
ISettingsService<CouchPotatoSettings> cpSettings,
|
||||
ICouchPotatoApi cpApi,
|
||||
ISonarrApi sonarrApi,
|
||||
ISickRageApi sickRageApi,
|
||||
ICacheProvider cache,
|
||||
IAnalytics an) : base("requests", prSettings)
|
||||
{
|
||||
Service = service;
|
||||
PrSettings = prSettings;
|
||||
PlexSettings = plex;
|
||||
NotificationService = notify;
|
||||
SonarrSettings = sonarrSettings;
|
||||
SickRageSettings = sickRageSettings;
|
||||
CpSettings = cpSettings;
|
||||
SonarrApi = sonarrApi;
|
||||
SickRageApi = sickRageApi;
|
||||
CpApi = cpApi;
|
||||
Cache = cache;
|
||||
Analytics = an;
|
||||
|
||||
Get["/", true] = async (x, ct) => await LoadRequests();
|
||||
Get["/movies", true] = async (x, ct) => await GetMovies();
|
||||
Get["/tvshows", true] = async (c, ct) => await GetTvShows();
|
||||
Get["/albums", true] = async (x, ct) => await GetAlbumRequests();
|
||||
Post["/delete", true] = async (x, ct) => await DeleteRequest((int)Request.Form.id);
|
||||
Post["/reportissue", true] = async (x, ct) => await ReportIssue((int)Request.Form.requestId, (IssueState)(int)Request.Form.issue, null);
|
||||
Post["/reportissuecomment", true] = async (x, ct) => await ReportIssue((int)Request.Form.requestId, IssueState.Other, (string)Request.Form.commentArea);
|
||||
|
||||
Post["/clearissues", true] = async (x, ct) => await ClearIssue((int)Request.Form.Id);
|
||||
|
||||
Post["/changeavailability", true] = async (x, ct) => await ChangeRequestAvailability((int)Request.Form.Id, (bool)Request.Form.Available);
|
||||
}
|
||||
|
||||
private static Logger Log = LogManager.GetCurrentClassLogger();
|
||||
private IRequestService Service { get; }
|
||||
private IAnalytics Analytics { get; }
|
||||
private INotificationService NotificationService { get; }
|
||||
private ISettingsService<PlexRequestSettings> PrSettings { get; }
|
||||
private ISettingsService<PlexSettings> PlexSettings { get; }
|
||||
private ISettingsService<SonarrSettings> SonarrSettings { get; }
|
||||
private ISettingsService<SickRageSettings> SickRageSettings { get; }
|
||||
private ISettingsService<CouchPotatoSettings> CpSettings { get; }
|
||||
private ISonarrApi SonarrApi { get; }
|
||||
private ISickRageApi SickRageApi { get; }
|
||||
private ICouchPotatoApi CpApi { get; }
|
||||
private ICacheProvider Cache { get; }
|
||||
|
||||
private async Task<Negotiator> LoadRequests()
|
||||
{
|
||||
var settings = await PrSettings.GetSettingsAsync();
|
||||
return View["Index", settings];
|
||||
}
|
||||
|
||||
private async Task<Response> GetMovies()
|
||||
{
|
||||
var settings = PrSettings.GetSettings();
|
||||
|
||||
var allRequests = await Service.GetAllAsync();
|
||||
allRequests = allRequests.Where(x => x.Type == RequestType.Movie);
|
||||
|
||||
var dbMovies = allRequests.ToList();
|
||||
|
||||
if (settings.UsersCanViewOnlyOwnRequests && !IsAdmin)
|
||||
{
|
||||
dbMovies = dbMovies.Where(x => x.UserHasRequested(Username)).ToList();
|
||||
}
|
||||
|
||||
List<QualityModel> qualities = new List<QualityModel>();
|
||||
|
||||
if (IsAdmin)
|
||||
{
|
||||
var cpSettings = CpSettings.GetSettings();
|
||||
if (cpSettings.Enabled)
|
||||
{
|
||||
try
|
||||
{
|
||||
var result = await Cache.GetOrSetAsync(CacheKeys.CouchPotatoQualityProfiles, async () =>
|
||||
{
|
||||
return await Task.Run(() => CpApi.GetProfiles(cpSettings.FullUri, cpSettings.ApiKey)).ConfigureAwait(false);
|
||||
});
|
||||
|
||||
qualities = result.list.Select(x => new QualityModel() { Id = x._id, Name = x.label }).ToList();
|
||||
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
Log.Info(e);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
var viewModel = dbMovies.Select(movie => new RequestViewModel
|
||||
{
|
||||
ProviderId = movie.ProviderId,
|
||||
Type = movie.Type,
|
||||
Status = movie.Status,
|
||||
ImdbId = movie.ImdbId,
|
||||
Id = movie.Id,
|
||||
PosterPath = movie.PosterPath,
|
||||
ReleaseDate = movie.ReleaseDate,
|
||||
ReleaseDateTicks = movie.ReleaseDate.Ticks,
|
||||
RequestedDate = movie.RequestedDate,
|
||||
Released = DateTime.Now > movie.ReleaseDate,
|
||||
RequestedDateTicks = DateTimeHelper.OffsetUTCDateTime(movie.RequestedDate, DateTimeOffset).Ticks,
|
||||
Approved = movie.Available || movie.Approved,
|
||||
Title = movie.Title,
|
||||
Overview = movie.Overview,
|
||||
RequestedUsers = IsAdmin ? movie.AllUsers.ToArray() : new string[] { },
|
||||
ReleaseYear = movie.ReleaseDate.Year.ToString(),
|
||||
Available = movie.Available,
|
||||
Admin = IsAdmin,
|
||||
IssueId = movie.IssueId,
|
||||
Qualities = qualities.ToArray()
|
||||
}).ToList();
|
||||
|
||||
return Response.AsJson(viewModel);
|
||||
}
|
||||
|
||||
private async Task<Response> GetTvShows()
|
||||
{
|
||||
var settings = PrSettings.GetSettings();
|
||||
|
||||
var requests = await Service.GetAllAsync();
|
||||
requests = requests.Where(x => x.Type == RequestType.TvShow);
|
||||
|
||||
var dbTv = requests;
|
||||
|
||||
if (settings.UsersCanViewOnlyOwnRequests && !IsAdmin)
|
||||
{
|
||||
dbTv = dbTv.Where(x => x.UserHasRequested(Username)).ToList();
|
||||
}
|
||||
|
||||
IEnumerable<QualityModel> qualities = new List<QualityModel>();
|
||||
if (IsAdmin)
|
||||
{
|
||||
try
|
||||
{
|
||||
var sonarrSettings = SonarrSettings.GetSettings();
|
||||
if (sonarrSettings.Enabled)
|
||||
{
|
||||
var result = Cache.GetOrSetAsync(CacheKeys.SonarrQualityProfiles, async () =>
|
||||
{
|
||||
return await Task.Run(() => SonarrApi.GetProfiles(sonarrSettings.ApiKey, sonarrSettings.FullUri));
|
||||
});
|
||||
qualities = result.Result.Select(x => new QualityModel() { Id = x.id.ToString(), Name = x.name }).ToList();
|
||||
}
|
||||
else
|
||||
{
|
||||
var sickRageSettings = SickRageSettings.GetSettings();
|
||||
if (sickRageSettings.Enabled)
|
||||
{
|
||||
qualities = sickRageSettings.Qualities.Select(x => new QualityModel() { Id = x.Key, Name = x.Value }).ToList();
|
||||
}
|
||||
}
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
Log.Info(e);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
var viewModel = dbTv.Select(tv =>
|
||||
{
|
||||
return new RequestViewModel
|
||||
{
|
||||
ProviderId = tv.ProviderId,
|
||||
Type = tv.Type,
|
||||
Status = tv.Status,
|
||||
ImdbId = tv.ImdbId,
|
||||
Id = tv.Id,
|
||||
PosterPath = tv.PosterPath,
|
||||
ReleaseDate = tv.ReleaseDate,
|
||||
ReleaseDateTicks = tv.ReleaseDate.Ticks,
|
||||
RequestedDate = tv.RequestedDate,
|
||||
RequestedDateTicks = DateTimeHelper.OffsetUTCDateTime(tv.RequestedDate, DateTimeOffset).Ticks,
|
||||
Released = DateTime.Now > tv.ReleaseDate,
|
||||
Approved = tv.Available || tv.Approved,
|
||||
Title = tv.Title,
|
||||
Overview = tv.Overview,
|
||||
RequestedUsers = IsAdmin ? tv.AllUsers.ToArray() : new string[] { },
|
||||
ReleaseYear = tv.ReleaseDate.Year.ToString(),
|
||||
Available = tv.Available,
|
||||
Admin = IsAdmin,
|
||||
IssueId = tv.IssueId,
|
||||
TvSeriesRequestType = tv.SeasonsRequested,
|
||||
Qualities = qualities.ToArray()
|
||||
};
|
||||
}).ToList();
|
||||
|
||||
return Response.AsJson(viewModel);
|
||||
}
|
||||
|
||||
private async Task<Response> GetAlbumRequests()
|
||||
{
|
||||
var settings = PrSettings.GetSettings();
|
||||
var dbAlbum = await Service.GetAllAsync();
|
||||
dbAlbum = dbAlbum.Where(x => x.Type == RequestType.Album);
|
||||
if (settings.UsersCanViewOnlyOwnRequests && !IsAdmin)
|
||||
{
|
||||
dbAlbum = dbAlbum.Where(x => x.UserHasRequested(Username));
|
||||
}
|
||||
|
||||
var viewModel = dbAlbum.Select(album =>
|
||||
{
|
||||
return new RequestViewModel
|
||||
{
|
||||
ProviderId = album.ProviderId,
|
||||
Type = album.Type,
|
||||
Status = album.Status,
|
||||
ImdbId = album.ImdbId,
|
||||
Id = album.Id,
|
||||
PosterPath = album.PosterPath,
|
||||
ReleaseDate = album.ReleaseDate,
|
||||
ReleaseDateTicks = album.ReleaseDate.Ticks,
|
||||
RequestedDate = album.RequestedDate,
|
||||
RequestedDateTicks = DateTimeHelper.OffsetUTCDateTime(album.RequestedDate, DateTimeOffset).Ticks,
|
||||
Released = DateTime.Now > album.ReleaseDate,
|
||||
Approved = album.Available || album.Approved,
|
||||
Title = album.Title,
|
||||
Overview = album.Overview,
|
||||
RequestedUsers = IsAdmin ? album.AllUsers.ToArray() : new string[] { },
|
||||
ReleaseYear = album.ReleaseDate.Year.ToString(),
|
||||
Available = album.Available,
|
||||
Admin = IsAdmin,
|
||||
IssueId = album.IssueId,
|
||||
TvSeriesRequestType = album.SeasonsRequested,
|
||||
MusicBrainzId = album.MusicBrainzId,
|
||||
ArtistName = album.ArtistName
|
||||
|
||||
};
|
||||
}).ToList();
|
||||
|
||||
return Response.AsJson(viewModel);
|
||||
}
|
||||
|
||||
private async Task<Response> DeleteRequest(int requestid)
|
||||
{
|
||||
this.RequiresClaims(UserClaims.Admin);
|
||||
Analytics.TrackEventAsync(Category.Requests, Action.Delete, "Delete Request", Username, CookieHelper.GetAnalyticClientId(Cookies));
|
||||
|
||||
var currentEntity = await Service.GetAsync(requestid);
|
||||
await Service.DeleteRequestAsync(currentEntity);
|
||||
return Response.AsJson(new JsonResponseModel { Result = true });
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Reports the issue.
|
||||
/// Comment can be null if the <c>IssueState != Other</c>
|
||||
/// </summary>
|
||||
/// <param name="requestId">The request identifier.</param>
|
||||
/// <param name="issue">The issue.</param>
|
||||
/// <param name="comment">The comment.</param>
|
||||
/// <returns></returns>
|
||||
private async Task<Response> ReportIssue(int requestId, IssueState issue, string comment)
|
||||
{
|
||||
var originalRequest = await Service.GetAsync(requestId);
|
||||
if (originalRequest == null)
|
||||
{
|
||||
return Response.AsJson(new JsonResponseModel { Result = false, Message = "Could not add issue, please try again or contact the administrator!" });
|
||||
}
|
||||
originalRequest.Issues = issue;
|
||||
originalRequest.OtherMessage = !string.IsNullOrEmpty(comment)
|
||||
? $"{Username} - {comment}"
|
||||
: string.Empty;
|
||||
|
||||
|
||||
var result = await Service.UpdateRequestAsync(originalRequest);
|
||||
|
||||
var model = new NotificationModel
|
||||
{
|
||||
User = Username,
|
||||
NotificationType = NotificationType.Issue,
|
||||
Title = originalRequest.Title,
|
||||
DateTime = DateTime.Now,
|
||||
Body = issue == IssueState.Other ? comment : issue.ToString().ToCamelCaseWords()
|
||||
};
|
||||
await NotificationService.Publish(model);
|
||||
|
||||
return Response.AsJson(result
|
||||
? new JsonResponseModel { Result = true }
|
||||
: new JsonResponseModel { Result = false, Message = "Could not add issue, please try again or contact the administrator!" });
|
||||
}
|
||||
|
||||
private async Task<Response> ClearIssue(int requestId)
|
||||
{
|
||||
this.RequiresClaims(UserClaims.Admin);
|
||||
|
||||
var originalRequest = await Service.GetAsync(requestId);
|
||||
if (originalRequest == null)
|
||||
{
|
||||
return Response.AsJson(new JsonResponseModel { Result = false, Message = "Request does not exist to clear it!" });
|
||||
}
|
||||
originalRequest.Issues = IssueState.None;
|
||||
originalRequest.OtherMessage = string.Empty;
|
||||
|
||||
var result = await Service.UpdateRequestAsync(originalRequest);
|
||||
return Response.AsJson(result
|
||||
? new JsonResponseModel { Result = true }
|
||||
: new JsonResponseModel { Result = false, Message = "Could not clear issue, please try again or check the logs" });
|
||||
}
|
||||
|
||||
private async Task<Response> ChangeRequestAvailability(int requestId, bool available)
|
||||
{
|
||||
this.RequiresClaims(UserClaims.Admin);
|
||||
Analytics.TrackEventAsync(Category.Requests, Action.Update, available ? "Make request available" : "Make request unavailable", Username, CookieHelper.GetAnalyticClientId(Cookies));
|
||||
var originalRequest = await Service.GetAsync(requestId);
|
||||
if (originalRequest == null)
|
||||
{
|
||||
return Response.AsJson(new JsonResponseModel { Result = false, Message = "Request does not exist to change the availability!" });
|
||||
}
|
||||
|
||||
originalRequest.Available = available;
|
||||
|
||||
var result = await Service.UpdateRequestAsync(originalRequest);
|
||||
return Response.AsJson(result
|
||||
? new { Result = true, Available = available, Message = string.Empty }
|
||||
: new { Result = false, Available = false, Message = "Could not update the availability, please try again or check the logs" });
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,405 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<root>
|
||||
<!--
|
||||
Microsoft ResX Schema
|
||||
|
||||
Version 2.0
|
||||
|
||||
The primary goals of this format is to allow a simple XML format
|
||||
that is mostly human readable. The generation and parsing of the
|
||||
various data types are done through the TypeConverter classes
|
||||
associated with the data types.
|
||||
|
||||
Example:
|
||||
|
||||
... ado.net/XML headers & schema ...
|
||||
<resheader name="resmimetype">text/microsoft-resx</resheader>
|
||||
<resheader name="version">2.0</resheader>
|
||||
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
|
||||
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
|
||||
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
|
||||
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
|
||||
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
|
||||
<value>[base64 mime encoded serialized .NET Framework object]</value>
|
||||
</data>
|
||||
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
|
||||
<comment>This is a comment</comment>
|
||||
</data>
|
||||
|
||||
There are any number of "resheader" rows that contain simple
|
||||
name/value pairs.
|
||||
|
||||
Each data row contains a name, and value. The row also contains a
|
||||
type or mimetype. Type corresponds to a .NET class that support
|
||||
text/value conversion through the TypeConverter architecture.
|
||||
Classes that don't support this are serialized and stored with the
|
||||
mimetype set.
|
||||
|
||||
The mimetype is used for serialized objects, and tells the
|
||||
ResXResourceReader how to depersist the object. This is currently not
|
||||
extensible. For a given mimetype the value must be set accordingly:
|
||||
|
||||
Note - application/x-microsoft.net.object.binary.base64 is the format
|
||||
that the ResXResourceWriter will generate, however the reader can
|
||||
read any of the formats listed below.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.binary.base64
|
||||
value : The object must be serialized with
|
||||
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
|
||||
: and then encoded with base64 encoding.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.soap.base64
|
||||
value : The object must be serialized with
|
||||
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
|
||||
: and then encoded with base64 encoding.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.bytearray.base64
|
||||
value : The object must be serialized into a byte array
|
||||
: using a System.ComponentModel.TypeConverter
|
||||
: and then encoded with base64 encoding.
|
||||
-->
|
||||
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
|
||||
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
|
||||
<xsd:element name="root" msdata:IsDataSet="true">
|
||||
<xsd:complexType>
|
||||
<xsd:choice maxOccurs="unbounded">
|
||||
<xsd:element name="metadata">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" use="required" type="xsd:string" />
|
||||
<xsd:attribute name="type" type="xsd:string" />
|
||||
<xsd:attribute name="mimetype" type="xsd:string" />
|
||||
<xsd:attribute ref="xml:space" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="assembly">
|
||||
<xsd:complexType>
|
||||
<xsd:attribute name="alias" type="xsd:string" />
|
||||
<xsd:attribute name="name" type="xsd:string" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="data">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
|
||||
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
|
||||
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
|
||||
<xsd:attribute ref="xml:space" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="resheader">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" use="required" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:choice>
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:schema>
|
||||
<resheader name="resmimetype">
|
||||
<value>text/microsoft-resx</value>
|
||||
</resheader>
|
||||
<resheader name="version">
|
||||
<value>2.0</value>
|
||||
</resheader>
|
||||
<resheader name="reader">
|
||||
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<resheader name="writer">
|
||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<data name="UserLogin_Title" xml:space="preserve">
|
||||
<value>Log ind</value>
|
||||
</data>
|
||||
<data name="UserLogin_Paragraph" xml:space="preserve">
|
||||
<value>Ønsker du at se en film eller tv-show, men det er i øjeblikket ikke på Plex? Log nedenfor med dit Plex.tv brugernavn og password !!</value>
|
||||
</data>
|
||||
<data name="UserLogin_Paragraph_SpanHover" xml:space="preserve">
|
||||
<value>Dine login-oplysninger bruges kun til at godkende din Plex konto.</value>
|
||||
</data>
|
||||
<data name="UserLogin_Username" xml:space="preserve">
|
||||
<value>Plex.tv Brugernavn</value>
|
||||
</data>
|
||||
<data name="UserLogin_Username_Placeholder" xml:space="preserve">
|
||||
<value>Brugernavn</value>
|
||||
</data>
|
||||
<data name="UserLogin_Password" xml:space="preserve">
|
||||
<value>Adgangskode</value>
|
||||
</data>
|
||||
<data name="UserLogin_SignIn" xml:space="preserve">
|
||||
<value>log på</value>
|
||||
</data>
|
||||
<data name="Javascript_SomethingWentWrong" xml:space="preserve">
|
||||
<value>Noget gik galt</value>
|
||||
</data>
|
||||
<data name="Javascript_Success" xml:space="preserve">
|
||||
<value>Fuldført</value>
|
||||
</data>
|
||||
<data name="Layout_Title" xml:space="preserve">
|
||||
<value>Plex Requests</value>
|
||||
</data>
|
||||
<data name="Layout_Search" xml:space="preserve">
|
||||
<value>Søg</value>
|
||||
</data>
|
||||
<data name="Layout_Requests" xml:space="preserve">
|
||||
<value>Anmodninger</value>
|
||||
</data>
|
||||
<data name="Layout_Issues" xml:space="preserve">
|
||||
<value>Issues</value>
|
||||
</data>
|
||||
<data name="Layout_Donate" xml:space="preserve">
|
||||
<value>STØT</value>
|
||||
</data>
|
||||
<data name="Layout_Admin" xml:space="preserve">
|
||||
<value>Administrator</value>
|
||||
</data>
|
||||
<data name="Layout_Settings" xml:space="preserve">
|
||||
<value>Indstillinger</value>
|
||||
</data>
|
||||
<data name="Layout_ChangePassword" xml:space="preserve">
|
||||
<value>Skift adgangskode</value>
|
||||
</data>
|
||||
<data name="Layout_Logout" xml:space="preserve">
|
||||
<value>Log ud</value>
|
||||
</data>
|
||||
<data name="Layout_UpdateAvailablePart1" xml:space="preserve">
|
||||
<value>Der er en ny opdatering tilgængelig! Klik</value>
|
||||
</data>
|
||||
<data name="Layout_English" xml:space="preserve">
|
||||
<value>Dansk</value>
|
||||
</data>
|
||||
<data name="Layout_Spanish" xml:space="preserve">
|
||||
<value>Spansk</value>
|
||||
</data>
|
||||
<data name="Layout_German" xml:space="preserve">
|
||||
<value>Tysk</value>
|
||||
</data>
|
||||
<data name="Layout_Danish" xml:space="preserve">
|
||||
<value>Dansk</value>
|
||||
</data>
|
||||
<data name="Layout_Portuguese" xml:space="preserve">
|
||||
<value>Portugisisk</value>
|
||||
</data>
|
||||
<data name="Layout_Swedish" xml:space="preserve">
|
||||
<value>Swedish</value>
|
||||
</data>
|
||||
<data name="Layout_Italian" xml:space="preserve">
|
||||
<value>Italiensk</value>
|
||||
</data>
|
||||
<data name="Layout_UpdateAvailablePart2" xml:space="preserve">
|
||||
<value>her</value>
|
||||
</data>
|
||||
<data name="Layout_Dutch" xml:space="preserve">
|
||||
<value>Hollandsk</value>
|
||||
</data>
|
||||
<data name="Search_Movies" xml:space="preserve">
|
||||
<value>Film</value>
|
||||
</data>
|
||||
<data name="Search_TvShows" xml:space="preserve">
|
||||
<value>TV-shows</value>
|
||||
</data>
|
||||
<data name="Search_Albums" xml:space="preserve">
|
||||
<value>Album</value>
|
||||
</data>
|
||||
<data name="Search_Paragraph" xml:space="preserve">
|
||||
<value>Ønsker at se noget, der ikke i øjeblikket på Plex ?! Intet problem! Bare søge efter det nedenfor og anmode den !</value>
|
||||
</data>
|
||||
<data name="Search_Title" xml:space="preserve">
|
||||
<value>Søg</value>
|
||||
</data>
|
||||
<data name="Search_Suggestions" xml:space="preserve">
|
||||
<value>Forslag</value>
|
||||
</data>
|
||||
<data name="Search_ComingSoon" xml:space="preserve">
|
||||
<value>Kommer snart</value>
|
||||
</data>
|
||||
<data name="Search_InTheaters" xml:space="preserve">
|
||||
<value>Teatre</value>
|
||||
</data>
|
||||
<data name="Search_SendNotificationText" xml:space="preserve">
|
||||
<value>Send mig en meddelelse, når emner, jeg har anmodet er blevet tilføjet</value>
|
||||
</data>
|
||||
<data name="Common_Save" xml:space="preserve">
|
||||
<value>Gem</value>
|
||||
</data>
|
||||
<data name="Search_Available" xml:space="preserve">
|
||||
<value>Tilgængelig</value>
|
||||
</data>
|
||||
<data name="Search_Requested" xml:space="preserve">
|
||||
<value>Forespørgsel sendt</value>
|
||||
</data>
|
||||
<data name="Search_Request" xml:space="preserve">
|
||||
<value>Forespørgsel</value>
|
||||
</data>
|
||||
<data name="Search_AllSeasons" xml:space="preserve">
|
||||
<value>Alle sæsoner</value>
|
||||
</data>
|
||||
<data name="Search_FirstSeason" xml:space="preserve">
|
||||
<value>Første sæson</value>
|
||||
</data>
|
||||
<data name="Search_LatestSeason" xml:space="preserve">
|
||||
<value>Sidste sæson</value>
|
||||
</data>
|
||||
<data name="Search_SelectSeason" xml:space="preserve">
|
||||
<value>Vælg</value>
|
||||
</data>
|
||||
<data name="Search_ReportIssue" xml:space="preserve">
|
||||
<value>Rapport Issue</value>
|
||||
</data>
|
||||
<data name="Issues_WrongAudio" xml:space="preserve">
|
||||
<value>Forkert lyd</value>
|
||||
</data>
|
||||
<data name="Issues_NoSubs" xml:space="preserve">
|
||||
<value>Undertekster</value>
|
||||
</data>
|
||||
<data name="Issues_WrongContent" xml:space="preserve">
|
||||
<value>Forkert indhold</value>
|
||||
</data>
|
||||
<data name="Issues_Playback" xml:space="preserve">
|
||||
<value>Playback Issues</value>
|
||||
</data>
|
||||
<data name="Issues_Other" xml:space="preserve">
|
||||
<value>Andet</value>
|
||||
</data>
|
||||
<data name="Search_TrackCount" xml:space="preserve">
|
||||
<value>Track Count</value>
|
||||
</data>
|
||||
<data name="Search_Country" xml:space="preserve">
|
||||
<value>Land</value>
|
||||
</data>
|
||||
<data name="Search_Modal_SeasonsTitle" xml:space="preserve">
|
||||
<value>Årstid</value>
|
||||
</data>
|
||||
<data name="Common_Close" xml:space="preserve">
|
||||
<value>Luk</value>
|
||||
</data>
|
||||
<data name="Issues_Modal_Title" xml:space="preserve">
|
||||
<value>Tilføj et problem!</value>
|
||||
</data>
|
||||
<data name="Issues_Modal_Save" xml:space="preserve">
|
||||
<value>Gem ændringer</value>
|
||||
</data>
|
||||
<data name="Search_Season" xml:space="preserve">
|
||||
<value>Sæson</value>
|
||||
</data>
|
||||
<data name="Layout_Welcome" xml:space="preserve">
|
||||
<value>Velkommen</value>
|
||||
</data>
|
||||
<data name="Requests_Title" xml:space="preserve">
|
||||
<value>Anmodninger</value>
|
||||
</data>
|
||||
<data name="Requests_Paragraph" xml:space="preserve">
|
||||
<value>Nedenfor kan du se dine og alle andre anmodninger, samt deres download og godkendelse status.</value>
|
||||
</data>
|
||||
<data name="Requests_MoviesTabTitle" xml:space="preserve">
|
||||
<value>Film</value>
|
||||
</data>
|
||||
<data name="Requests_TvShowTabTitle" xml:space="preserve">
|
||||
<value>TV-shows</value>
|
||||
</data>
|
||||
<data name="Requests_AlbumsTabTitle" xml:space="preserve">
|
||||
<value>Album</value>
|
||||
</data>
|
||||
<data name="Requests_DeleteMovies" xml:space="preserve">
|
||||
<value>Slet Film</value>
|
||||
</data>
|
||||
<data name="Requests_ApproveMovies" xml:space="preserve">
|
||||
<value>Godkend film</value>
|
||||
</data>
|
||||
<data name="Requests_DeleteTVShows" xml:space="preserve">
|
||||
<value>Slet tv-udsendelser</value>
|
||||
</data>
|
||||
<data name="Requests_ApproveTvShows" xml:space="preserve">
|
||||
<value>Godkend tv-udsendelser</value>
|
||||
</data>
|
||||
<data name="Requests_DeleteMusic" xml:space="preserve">
|
||||
<value>Slet Music</value>
|
||||
</data>
|
||||
<data name="Requests_ApproveMusic" xml:space="preserve">
|
||||
<value>Godkend Music</value>
|
||||
</data>
|
||||
<data name="Requests_Filter_All" xml:space="preserve">
|
||||
<value>Alle</value>
|
||||
</data>
|
||||
<data name="Requests_Filter_Approved" xml:space="preserve">
|
||||
<value>Godkendt</value>
|
||||
</data>
|
||||
<data name="Requests_Filter_NotApproved" xml:space="preserve">
|
||||
<value>Godkendt</value>
|
||||
</data>
|
||||
<data name="Requests_Filter_Available" xml:space="preserve">
|
||||
<value>Tilgængelig</value>
|
||||
</data>
|
||||
<data name="Requests_Filter_NotAvailable" xml:space="preserve">
|
||||
<value>Ikke tilgængelig</value>
|
||||
</data>
|
||||
<data name="Requests_Filter_Released" xml:space="preserve">
|
||||
<value>Udgivet</value>
|
||||
</data>
|
||||
<data name="Requests_Filter_NotReleased" xml:space="preserve">
|
||||
<value>Udgivet:</value>
|
||||
</data>
|
||||
<data name="Requests_Order" xml:space="preserve">
|
||||
<value>Ordrer</value>
|
||||
</data>
|
||||
<data name="Requests_Filter" xml:space="preserve">
|
||||
<value>Filter</value>
|
||||
</data>
|
||||
<data name="Requests_Order_LatestRequests" xml:space="preserve">
|
||||
<value>Seneste anmodninger</value>
|
||||
</data>
|
||||
<data name="Requests_Order_OldestRequests" xml:space="preserve">
|
||||
<value>Ældste anmodninger</value>
|
||||
</data>
|
||||
<data name="Requests_Order_LatestReleases" xml:space="preserve">
|
||||
<value>Nyeste udgivelser</value>
|
||||
</data>
|
||||
<data name="Requests_Order_OldestReleases" xml:space="preserve">
|
||||
<value>Ældste udgivelser</value>
|
||||
</data>
|
||||
<data name="Requests_ReleaseDate" xml:space="preserve">
|
||||
<value>Frigivelsesdato</value>
|
||||
</data>
|
||||
<data name="Requests_SeasonsRequested" xml:space="preserve">
|
||||
<value>Seasons Anmodet</value>
|
||||
</data>
|
||||
<data name="Requests_RequestedBy" xml:space="preserve">
|
||||
<value>Anmodet Af</value>
|
||||
</data>
|
||||
<data name="Requests_RequestedDate" xml:space="preserve">
|
||||
<value>Ønskede dato</value>
|
||||
</data>
|
||||
<data name="Requests_ToggleDropdown" xml:space="preserve">
|
||||
<value>Toggle Dropdown</value>
|
||||
</data>
|
||||
<data name="Common_Approve" xml:space="preserve">
|
||||
<value>Godkend</value>
|
||||
</data>
|
||||
<data name="Common_Remove" xml:space="preserve">
|
||||
<value>Fjern</value>
|
||||
</data>
|
||||
<data name="Requests_MarkUnavailable" xml:space="preserve">
|
||||
<value>ikke tilgængelig</value>
|
||||
</data>
|
||||
<data name="Requests_MarkAvailable" xml:space="preserve">
|
||||
<value>Mark tilgængelig</value>
|
||||
</data>
|
||||
<data name="Common_Approved" xml:space="preserve">
|
||||
<value>Godkendt</value>
|
||||
</data>
|
||||
<data name="Requests_Available" xml:space="preserve">
|
||||
<value>Tilgængelig</value>
|
||||
</data>
|
||||
<data name="Issues_Issue" xml:space="preserve">
|
||||
<value>Aktieemission</value>
|
||||
</data>
|
||||
</root>
|
@ -0,0 +1,405 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<root>
|
||||
<!--
|
||||
Microsoft ResX Schema
|
||||
|
||||
Version 2.0
|
||||
|
||||
The primary goals of this format is to allow a simple XML format
|
||||
that is mostly human readable. The generation and parsing of the
|
||||
various data types are done through the TypeConverter classes
|
||||
associated with the data types.
|
||||
|
||||
Example:
|
||||
|
||||
... ado.net/XML headers & schema ...
|
||||
<resheader name="resmimetype">text/microsoft-resx</resheader>
|
||||
<resheader name="version">2.0</resheader>
|
||||
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
|
||||
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
|
||||
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
|
||||
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
|
||||
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
|
||||
<value>[base64 mime encoded serialized .NET Framework object]</value>
|
||||
</data>
|
||||
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
|
||||
<comment>This is a comment</comment>
|
||||
</data>
|
||||
|
||||
There are any number of "resheader" rows that contain simple
|
||||
name/value pairs.
|
||||
|
||||
Each data row contains a name, and value. The row also contains a
|
||||
type or mimetype. Type corresponds to a .NET class that support
|
||||
text/value conversion through the TypeConverter architecture.
|
||||
Classes that don't support this are serialized and stored with the
|
||||
mimetype set.
|
||||
|
||||
The mimetype is used for serialized objects, and tells the
|
||||
ResXResourceReader how to depersist the object. This is currently not
|
||||
extensible. For a given mimetype the value must be set accordingly:
|
||||
|
||||
Note - application/x-microsoft.net.object.binary.base64 is the format
|
||||
that the ResXResourceWriter will generate, however the reader can
|
||||
read any of the formats listed below.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.binary.base64
|
||||
value : The object must be serialized with
|
||||
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
|
||||
: and then encoded with base64 encoding.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.soap.base64
|
||||
value : The object must be serialized with
|
||||
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
|
||||
: and then encoded with base64 encoding.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.bytearray.base64
|
||||
value : The object must be serialized into a byte array
|
||||
: using a System.ComponentModel.TypeConverter
|
||||
: and then encoded with base64 encoding.
|
||||
-->
|
||||
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
|
||||
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
|
||||
<xsd:element name="root" msdata:IsDataSet="true">
|
||||
<xsd:complexType>
|
||||
<xsd:choice maxOccurs="unbounded">
|
||||
<xsd:element name="metadata">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" use="required" type="xsd:string" />
|
||||
<xsd:attribute name="type" type="xsd:string" />
|
||||
<xsd:attribute name="mimetype" type="xsd:string" />
|
||||
<xsd:attribute ref="xml:space" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="assembly">
|
||||
<xsd:complexType>
|
||||
<xsd:attribute name="alias" type="xsd:string" />
|
||||
<xsd:attribute name="name" type="xsd:string" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="data">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
|
||||
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
|
||||
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
|
||||
<xsd:attribute ref="xml:space" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="resheader">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" use="required" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:choice>
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:schema>
|
||||
<resheader name="resmimetype">
|
||||
<value>text/microsoft-resx</value>
|
||||
</resheader>
|
||||
<resheader name="version">
|
||||
<value>2.0</value>
|
||||
</resheader>
|
||||
<resheader name="reader">
|
||||
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<resheader name="writer">
|
||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<data name="UserLogin_Title" xml:space="preserve">
|
||||
<value>Anmelden</value>
|
||||
</data>
|
||||
<data name="UserLogin_Paragraph" xml:space="preserve">
|
||||
<value>Möchten Sie einen Film oder eine TV-Show zu sehen, aber es ist derzeit nicht auf Plex? Loggen Sie sich unten mit Ihrem Plex.tv Benutzernamen und Passwort !</value>
|
||||
</data>
|
||||
<data name="UserLogin_Paragraph_SpanHover" xml:space="preserve">
|
||||
<value>Ihre Login-Daten werden verwendet, nur Ihr Plex Konto zu authentifizieren.</value>
|
||||
</data>
|
||||
<data name="UserLogin_Username" xml:space="preserve">
|
||||
<value>Plex.tv Benutzername</value>
|
||||
</data>
|
||||
<data name="UserLogin_Username_Placeholder" xml:space="preserve">
|
||||
<value>Benutzername</value>
|
||||
</data>
|
||||
<data name="UserLogin_Password" xml:space="preserve">
|
||||
<value>Passwort</value>
|
||||
</data>
|
||||
<data name="UserLogin_SignIn" xml:space="preserve">
|
||||
<value>Anmelden</value>
|
||||
</data>
|
||||
<data name="Javascript_SomethingWentWrong" xml:space="preserve">
|
||||
<value>Irgendetwas ist falsch gelaufen</value>
|
||||
</data>
|
||||
<data name="Javascript_Success" xml:space="preserve">
|
||||
<value>Erfolg</value>
|
||||
</data>
|
||||
<data name="Layout_Title" xml:space="preserve">
|
||||
<value>Plex Requests</value>
|
||||
</data>
|
||||
<data name="Layout_Search" xml:space="preserve">
|
||||
<value>Suche</value>
|
||||
</data>
|
||||
<data name="Layout_Requests" xml:space="preserve">
|
||||
<value>Anfragen</value>
|
||||
</data>
|
||||
<data name="Layout_Issues" xml:space="preserve">
|
||||
<value>Probleme</value>
|
||||
</data>
|
||||
<data name="Layout_Donate" xml:space="preserve">
|
||||
<value>Spenden</value>
|
||||
</data>
|
||||
<data name="Layout_Admin" xml:space="preserve">
|
||||
<value>Verwaltung</value>
|
||||
</data>
|
||||
<data name="Layout_Settings" xml:space="preserve">
|
||||
<value>Einstellungen</value>
|
||||
</data>
|
||||
<data name="Layout_ChangePassword" xml:space="preserve">
|
||||
<value>Passwort ändern</value>
|
||||
</data>
|
||||
<data name="Layout_Logout" xml:space="preserve">
|
||||
<value>Ausloggen</value>
|
||||
</data>
|
||||
<data name="Layout_UpdateAvailablePart1" xml:space="preserve">
|
||||
<value>Es gibt ein neues Update verfügbar! Klicken</value>
|
||||
</data>
|
||||
<data name="Layout_English" xml:space="preserve">
|
||||
<value>Englisch</value>
|
||||
</data>
|
||||
<data name="Layout_Spanish" xml:space="preserve">
|
||||
<value>Spanisch</value>
|
||||
</data>
|
||||
<data name="Layout_German" xml:space="preserve">
|
||||
<value>Deutsch</value>
|
||||
</data>
|
||||
<data name="Layout_Danish" xml:space="preserve">
|
||||
<value>Dänisch</value>
|
||||
</data>
|
||||
<data name="Layout_Portuguese" xml:space="preserve">
|
||||
<value>Portugiesisch</value>
|
||||
</data>
|
||||
<data name="Layout_Swedish" xml:space="preserve">
|
||||
<value>Schwedisch</value>
|
||||
</data>
|
||||
<data name="Layout_Italian" xml:space="preserve">
|
||||
<value>Italienisch</value>
|
||||
</data>
|
||||
<data name="Layout_UpdateAvailablePart2" xml:space="preserve">
|
||||
<value>hier</value>
|
||||
</data>
|
||||
<data name="Layout_Dutch" xml:space="preserve">
|
||||
<value>Niederländisch</value>
|
||||
</data>
|
||||
<data name="Search_Movies" xml:space="preserve">
|
||||
<value>Filme</value>
|
||||
</data>
|
||||
<data name="Search_TvShows" xml:space="preserve">
|
||||
<value>SERIEN</value>
|
||||
</data>
|
||||
<data name="Search_Albums" xml:space="preserve">
|
||||
<value>Alben</value>
|
||||
</data>
|
||||
<data name="Search_Paragraph" xml:space="preserve">
|
||||
<value>Möchten Sie etwas zu sehen, die derzeit nicht auf Plex ist ?! Kein Problem! Suchen Sie einfach nach unten und es es wünschen !</value>
|
||||
</data>
|
||||
<data name="Search_Title" xml:space="preserve">
|
||||
<value>Suche</value>
|
||||
</data>
|
||||
<data name="Search_Suggestions" xml:space="preserve">
|
||||
<value>Vorschläge</value>
|
||||
</data>
|
||||
<data name="Search_ComingSoon" xml:space="preserve">
|
||||
<value>Demnächst</value>
|
||||
</data>
|
||||
<data name="Search_InTheaters" xml:space="preserve">
|
||||
<value>Theatern</value>
|
||||
</data>
|
||||
<data name="Search_SendNotificationText" xml:space="preserve">
|
||||
<value>Senden Sie mir eine Benachrichtigung, wenn Gegenstände, die ich angefordert wurden hinzugefügt</value>
|
||||
</data>
|
||||
<data name="Common_Save" xml:space="preserve">
|
||||
<value>Speichern</value>
|
||||
</data>
|
||||
<data name="Search_Available" xml:space="preserve">
|
||||
<value>V ERFÜGBAR</value>
|
||||
</data>
|
||||
<data name="Search_Requested" xml:space="preserve">
|
||||
<value>angefragt</value>
|
||||
</data>
|
||||
<data name="Search_Request" xml:space="preserve">
|
||||
<value>Angefordert</value>
|
||||
</data>
|
||||
<data name="Search_AllSeasons" xml:space="preserve">
|
||||
<value>alle Saisonen</value>
|
||||
</data>
|
||||
<data name="Search_FirstSeason" xml:space="preserve">
|
||||
<value>Erste Saison</value>
|
||||
</data>
|
||||
<data name="Search_LatestSeason" xml:space="preserve">
|
||||
<value>Neueste Saison</value>
|
||||
</data>
|
||||
<data name="Search_SelectSeason" xml:space="preserve">
|
||||
<value>Auswählen</value>
|
||||
</data>
|
||||
<data name="Search_ReportIssue" xml:space="preserve">
|
||||
<value>Report Ausgabe</value>
|
||||
</data>
|
||||
<data name="Issues_WrongAudio" xml:space="preserve">
|
||||
<value>Falsche Audio</value>
|
||||
</data>
|
||||
<data name="Issues_NoSubs" xml:space="preserve">
|
||||
<value>Keine Untertitel</value>
|
||||
</data>
|
||||
<data name="Issues_WrongContent" xml:space="preserve">
|
||||
<value>Falscher Inhaltstyp.</value>
|
||||
</data>
|
||||
<data name="Issues_Playback" xml:space="preserve">
|
||||
<value>Wiedergabe-Probleme</value>
|
||||
</data>
|
||||
<data name="Issues_Other" xml:space="preserve">
|
||||
<value>Sonstige</value>
|
||||
</data>
|
||||
<data name="Search_TrackCount" xml:space="preserve">
|
||||
<value>Track-Count</value>
|
||||
</data>
|
||||
<data name="Search_Country" xml:space="preserve">
|
||||
<value>Land</value>
|
||||
</data>
|
||||
<data name="Search_Modal_SeasonsTitle" xml:space="preserve">
|
||||
<value>Jahreszeiten</value>
|
||||
</data>
|
||||
<data name="Common_Close" xml:space="preserve">
|
||||
<value>Schließen</value>
|
||||
</data>
|
||||
<data name="Issues_Modal_Title" xml:space="preserve">
|
||||
<value>Fügen Sie ein Problem</value>
|
||||
</data>
|
||||
<data name="Issues_Modal_Save" xml:space="preserve">
|
||||
<value>Änderungen speichern</value>
|
||||
</data>
|
||||
<data name="Search_Season" xml:space="preserve">
|
||||
<value>Staffel</value>
|
||||
</data>
|
||||
<data name="Layout_Welcome" xml:space="preserve">
|
||||
<value>Herzlich willkommen</value>
|
||||
</data>
|
||||
<data name="Requests_Title" xml:space="preserve">
|
||||
<value>Anfragen</value>
|
||||
</data>
|
||||
<data name="Requests_Paragraph" xml:space="preserve">
|
||||
<value>Im Folgenden finden Sie Ihre und alle anderen Anfragen, sowie deren Download und Genehmigungsstatus zu sehen.</value>
|
||||
</data>
|
||||
<data name="Requests_MoviesTabTitle" xml:space="preserve">
|
||||
<value>Filme</value>
|
||||
</data>
|
||||
<data name="Requests_TvShowTabTitle" xml:space="preserve">
|
||||
<value>SERIEN</value>
|
||||
</data>
|
||||
<data name="Requests_AlbumsTabTitle" xml:space="preserve">
|
||||
<value>Alben</value>
|
||||
</data>
|
||||
<data name="Requests_DeleteMovies" xml:space="preserve">
|
||||
<value>Löschen von Filmen</value>
|
||||
</data>
|
||||
<data name="Requests_ApproveMovies" xml:space="preserve">
|
||||
<value>Genehmigen-Filme</value>
|
||||
</data>
|
||||
<data name="Requests_DeleteTVShows" xml:space="preserve">
|
||||
<value>Löschen TV Shows</value>
|
||||
</data>
|
||||
<data name="Requests_ApproveTvShows" xml:space="preserve">
|
||||
<value>Genehmigen TV Shows</value>
|
||||
</data>
|
||||
<data name="Requests_DeleteMusic" xml:space="preserve">
|
||||
<value>Löschen Music</value>
|
||||
</data>
|
||||
<data name="Requests_ApproveMusic" xml:space="preserve">
|
||||
<value>Genehmigen Music</value>
|
||||
</data>
|
||||
<data name="Requests_Filter_All" xml:space="preserve">
|
||||
<value>Alle</value>
|
||||
</data>
|
||||
<data name="Requests_Filter_Approved" xml:space="preserve">
|
||||
<value>Genehmigt</value>
|
||||
</data>
|
||||
<data name="Requests_Filter_NotApproved" xml:space="preserve">
|
||||
<value>Nicht bestätigt</value>
|
||||
</data>
|
||||
<data name="Requests_Filter_Available" xml:space="preserve">
|
||||
<value>V ERFÜGBAR</value>
|
||||
</data>
|
||||
<data name="Requests_Filter_NotAvailable" xml:space="preserve">
|
||||
<value>Nicht verfügbar</value>
|
||||
</data>
|
||||
<data name="Requests_Filter_Released" xml:space="preserve">
|
||||
<value>Frei</value>
|
||||
</data>
|
||||
<data name="Requests_Filter_NotReleased" xml:space="preserve">
|
||||
<value>Frei</value>
|
||||
</data>
|
||||
<data name="Requests_Order" xml:space="preserve">
|
||||
<value>Bestellung</value>
|
||||
</data>
|
||||
<data name="Requests_Filter" xml:space="preserve">
|
||||
<value>Filter!</value>
|
||||
</data>
|
||||
<data name="Requests_Order_LatestRequests" xml:space="preserve">
|
||||
<value>Aktuelle Anfragen</value>
|
||||
</data>
|
||||
<data name="Requests_Order_OldestRequests" xml:space="preserve">
|
||||
<value>Älteste Anfragen</value>
|
||||
</data>
|
||||
<data name="Requests_Order_LatestReleases" xml:space="preserve">
|
||||
<value>Neueste Veröffentlichungen</value>
|
||||
</data>
|
||||
<data name="Requests_Order_OldestReleases" xml:space="preserve">
|
||||
<value>Die ältesten Releases</value>
|
||||
</data>
|
||||
<data name="Requests_ReleaseDate" xml:space="preserve">
|
||||
<value>Veröffentlichung</value>
|
||||
</data>
|
||||
<data name="Requests_SeasonsRequested" xml:space="preserve">
|
||||
<value>Jahreszeiten heraus</value>
|
||||
</data>
|
||||
<data name="Requests_RequestedBy" xml:space="preserve">
|
||||
<value>Beantragt von</value>
|
||||
</data>
|
||||
<data name="Requests_RequestedDate" xml:space="preserve">
|
||||
<value>angefragt</value>
|
||||
</data>
|
||||
<data name="Requests_ToggleDropdown" xml:space="preserve">
|
||||
<value>Toggle Dropdown</value>
|
||||
</data>
|
||||
<data name="Common_Approve" xml:space="preserve">
|
||||
<value>Genehmigen</value>
|
||||
</data>
|
||||
<data name="Common_Remove" xml:space="preserve">
|
||||
<value>Entfernen</value>
|
||||
</data>
|
||||
<data name="Requests_MarkUnavailable" xml:space="preserve">
|
||||
<value>Nicht verfügbar</value>
|
||||
</data>
|
||||
<data name="Requests_MarkAvailable" xml:space="preserve">
|
||||
<value>V ERFÜGBAR</value>
|
||||
</data>
|
||||
<data name="Common_Approved" xml:space="preserve">
|
||||
<value>Genehmigt</value>
|
||||
</data>
|
||||
<data name="Requests_Available" xml:space="preserve">
|
||||
<value>V ERFÜGBAR</value>
|
||||
</data>
|
||||
<data name="Issues_Issue" xml:space="preserve">
|
||||
<value>Problemstellung</value>
|
||||
</data>
|
||||
</root>
|
@ -0,0 +1,405 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<root>
|
||||
<!--
|
||||
Microsoft ResX Schema
|
||||
|
||||
Version 2.0
|
||||
|
||||
The primary goals of this format is to allow a simple XML format
|
||||
that is mostly human readable. The generation and parsing of the
|
||||
various data types are done through the TypeConverter classes
|
||||
associated with the data types.
|
||||
|
||||
Example:
|
||||
|
||||
... ado.net/XML headers & schema ...
|
||||
<resheader name="resmimetype">text/microsoft-resx</resheader>
|
||||
<resheader name="version">2.0</resheader>
|
||||
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
|
||||
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
|
||||
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
|
||||
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
|
||||
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
|
||||
<value>[base64 mime encoded serialized .NET Framework object]</value>
|
||||
</data>
|
||||
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
|
||||
<comment>This is a comment</comment>
|
||||
</data>
|
||||
|
||||
There are any number of "resheader" rows that contain simple
|
||||
name/value pairs.
|
||||
|
||||
Each data row contains a name, and value. The row also contains a
|
||||
type or mimetype. Type corresponds to a .NET class that support
|
||||
text/value conversion through the TypeConverter architecture.
|
||||
Classes that don't support this are serialized and stored with the
|
||||
mimetype set.
|
||||
|
||||
The mimetype is used for serialized objects, and tells the
|
||||
ResXResourceReader how to depersist the object. This is currently not
|
||||
extensible. For a given mimetype the value must be set accordingly:
|
||||
|
||||
Note - application/x-microsoft.net.object.binary.base64 is the format
|
||||
that the ResXResourceWriter will generate, however the reader can
|
||||
read any of the formats listed below.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.binary.base64
|
||||
value : The object must be serialized with
|
||||
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
|
||||
: and then encoded with base64 encoding.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.soap.base64
|
||||
value : The object must be serialized with
|
||||
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
|
||||
: and then encoded with base64 encoding.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.bytearray.base64
|
||||
value : The object must be serialized into a byte array
|
||||
: using a System.ComponentModel.TypeConverter
|
||||
: and then encoded with base64 encoding.
|
||||
-->
|
||||
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
|
||||
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
|
||||
<xsd:element name="root" msdata:IsDataSet="true">
|
||||
<xsd:complexType>
|
||||
<xsd:choice maxOccurs="unbounded">
|
||||
<xsd:element name="metadata">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" use="required" type="xsd:string" />
|
||||
<xsd:attribute name="type" type="xsd:string" />
|
||||
<xsd:attribute name="mimetype" type="xsd:string" />
|
||||
<xsd:attribute ref="xml:space" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="assembly">
|
||||
<xsd:complexType>
|
||||
<xsd:attribute name="alias" type="xsd:string" />
|
||||
<xsd:attribute name="name" type="xsd:string" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="data">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
|
||||
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
|
||||
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
|
||||
<xsd:attribute ref="xml:space" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="resheader">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" use="required" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:choice>
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:schema>
|
||||
<resheader name="resmimetype">
|
||||
<value>text/microsoft-resx</value>
|
||||
</resheader>
|
||||
<resheader name="version">
|
||||
<value>2.0</value>
|
||||
</resheader>
|
||||
<resheader name="reader">
|
||||
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<resheader name="writer">
|
||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<data name="UserLogin_Title" xml:space="preserve">
|
||||
<value>INICIAR SESIÓN</value>
|
||||
</data>
|
||||
<data name="UserLogin_Paragraph" xml:space="preserve">
|
||||
<value>¿Quieres ver una película o programa de televisión, pero no es actualmente en Plex? Ingresa abajo con su nombre de usuario y contraseña Plex.tv !</value>
|
||||
</data>
|
||||
<data name="UserLogin_Paragraph_SpanHover" xml:space="preserve">
|
||||
<value>Sus datos de acceso sólo se utilizan para autenticar su cuenta Plex.</value>
|
||||
</data>
|
||||
<data name="UserLogin_Username" xml:space="preserve">
|
||||
<value>Plex.tv nombre de usuario</value>
|
||||
</data>
|
||||
<data name="UserLogin_Username_Placeholder" xml:space="preserve">
|
||||
<value>Username</value>
|
||||
</data>
|
||||
<data name="UserLogin_Password" xml:space="preserve">
|
||||
<value>Contraseña</value>
|
||||
</data>
|
||||
<data name="UserLogin_SignIn" xml:space="preserve">
|
||||
<value>Iniciar sesión</value>
|
||||
</data>
|
||||
<data name="Javascript_SomethingWentWrong" xml:space="preserve">
|
||||
<value>Algo salió mal</value>
|
||||
</data>
|
||||
<data name="Javascript_Success" xml:space="preserve">
|
||||
<value>¡Éxito!</value>
|
||||
</data>
|
||||
<data name="Layout_Title" xml:space="preserve">
|
||||
<value>Plex Requests</value>
|
||||
</data>
|
||||
<data name="Layout_Search" xml:space="preserve">
|
||||
<value>Buscar</value>
|
||||
</data>
|
||||
<data name="Layout_Requests" xml:space="preserve">
|
||||
<value>Peticiones</value>
|
||||
</data>
|
||||
<data name="Layout_Issues" xml:space="preserve">
|
||||
<value>Problemas</value>
|
||||
</data>
|
||||
<data name="Layout_Donate" xml:space="preserve">
|
||||
<value>Dona</value>
|
||||
</data>
|
||||
<data name="Layout_Admin" xml:space="preserve">
|
||||
<value>Administración</value>
|
||||
</data>
|
||||
<data name="Layout_Settings" xml:space="preserve">
|
||||
<value>Ajustes</value>
|
||||
</data>
|
||||
<data name="Layout_ChangePassword" xml:space="preserve">
|
||||
<value>Cambiar contraseña</value>
|
||||
</data>
|
||||
<data name="Layout_Logout" xml:space="preserve">
|
||||
<value>Desconectarse</value>
|
||||
</data>
|
||||
<data name="Layout_UpdateAvailablePart1" xml:space="preserve">
|
||||
<value>Hay una nueva actualización disponible! Hacer clic</value>
|
||||
</data>
|
||||
<data name="Layout_English" xml:space="preserve">
|
||||
<value>Inglés</value>
|
||||
</data>
|
||||
<data name="Layout_Spanish" xml:space="preserve">
|
||||
<value>Spanish</value>
|
||||
</data>
|
||||
<data name="Layout_German" xml:space="preserve">
|
||||
<value>German</value>
|
||||
</data>
|
||||
<data name="Layout_Danish" xml:space="preserve">
|
||||
<value>Danés</value>
|
||||
</data>
|
||||
<data name="Layout_Portuguese" xml:space="preserve">
|
||||
<value>Portugués</value>
|
||||
</data>
|
||||
<data name="Layout_Swedish" xml:space="preserve">
|
||||
<value>Sueco</value>
|
||||
</data>
|
||||
<data name="Layout_Italian" xml:space="preserve">
|
||||
<value>Italiano</value>
|
||||
</data>
|
||||
<data name="Layout_UpdateAvailablePart2" xml:space="preserve">
|
||||
<value>aquí</value>
|
||||
</data>
|
||||
<data name="Layout_Dutch" xml:space="preserve">
|
||||
<value>Holandés</value>
|
||||
</data>
|
||||
<data name="Search_Movies" xml:space="preserve">
|
||||
<value>Películas</value>
|
||||
</data>
|
||||
<data name="Search_TvShows" xml:space="preserve">
|
||||
<value>Serie de TV</value>
|
||||
</data>
|
||||
<data name="Search_Albums" xml:space="preserve">
|
||||
<value>Álbumes</value>
|
||||
</data>
|
||||
<data name="Search_Paragraph" xml:space="preserve">
|
||||
<value>¿Quieres ver algo que no se encuentra actualmente en Plex ?! ¡No hay problema! Sólo la búsqueda de abajo y que solicitarlo !</value>
|
||||
</data>
|
||||
<data name="Search_Title" xml:space="preserve">
|
||||
<value>Buscar</value>
|
||||
</data>
|
||||
<data name="Search_Suggestions" xml:space="preserve">
|
||||
<value>Sugerencias</value>
|
||||
</data>
|
||||
<data name="Search_ComingSoon" xml:space="preserve">
|
||||
<value>Muy Pronto</value>
|
||||
</data>
|
||||
<data name="Search_InTheaters" xml:space="preserve">
|
||||
<value>En los cines</value>
|
||||
</data>
|
||||
<data name="Search_SendNotificationText" xml:space="preserve">
|
||||
<value>Envíame una notificación cuando se han añadido elementos que he solicitado</value>
|
||||
</data>
|
||||
<data name="Common_Save" xml:space="preserve">
|
||||
<value>Ahorra</value>
|
||||
</data>
|
||||
<data name="Search_Available" xml:space="preserve">
|
||||
<value>disponible</value>
|
||||
</data>
|
||||
<data name="Search_Requested" xml:space="preserve">
|
||||
<value>Pedido</value>
|
||||
</data>
|
||||
<data name="Search_Request" xml:space="preserve">
|
||||
<value>Solicitud</value>
|
||||
</data>
|
||||
<data name="Search_AllSeasons" xml:space="preserve">
|
||||
<value>Todas las temporadas</value>
|
||||
</data>
|
||||
<data name="Search_FirstSeason" xml:space="preserve">
|
||||
<value>Primera Temporada</value>
|
||||
</data>
|
||||
<data name="Search_LatestSeason" xml:space="preserve">
|
||||
<value>Última estación</value>
|
||||
</data>
|
||||
<data name="Search_SelectSeason" xml:space="preserve">
|
||||
<value>Seleccionar</value>
|
||||
</data>
|
||||
<data name="Search_ReportIssue" xml:space="preserve">
|
||||
<value>Informe del problema</value>
|
||||
</data>
|
||||
<data name="Issues_WrongAudio" xml:space="preserve">
|
||||
<value>Audio mal</value>
|
||||
</data>
|
||||
<data name="Issues_NoSubs" xml:space="preserve">
|
||||
<value>Subtitles</value>
|
||||
</data>
|
||||
<data name="Issues_WrongContent" xml:space="preserve">
|
||||
<value>Contenido incorrecto</value>
|
||||
</data>
|
||||
<data name="Issues_Playback" xml:space="preserve">
|
||||
<value>Problemas de reproducción</value>
|
||||
</data>
|
||||
<data name="Issues_Other" xml:space="preserve">
|
||||
<value>Otro</value>
|
||||
</data>
|
||||
<data name="Search_TrackCount" xml:space="preserve">
|
||||
<value>El número de pistas</value>
|
||||
</data>
|
||||
<data name="Search_Country" xml:space="preserve">
|
||||
<value>País</value>
|
||||
</data>
|
||||
<data name="Search_Modal_SeasonsTitle" xml:space="preserve">
|
||||
<value>Temporadas</value>
|
||||
</data>
|
||||
<data name="Common_Close" xml:space="preserve">
|
||||
<value>Cerrar</value>
|
||||
</data>
|
||||
<data name="Issues_Modal_Title" xml:space="preserve">
|
||||
<value>Añadir un problema</value>
|
||||
</data>
|
||||
<data name="Issues_Modal_Save" xml:space="preserve">
|
||||
<value>Guardar cambios</value>
|
||||
</data>
|
||||
<data name="Search_Season" xml:space="preserve">
|
||||
<value>Temporada</value>
|
||||
</data>
|
||||
<data name="Layout_Welcome" xml:space="preserve">
|
||||
<value>Bienvenido</value>
|
||||
</data>
|
||||
<data name="Requests_Title" xml:space="preserve">
|
||||
<value>Peticiones</value>
|
||||
</data>
|
||||
<data name="Requests_Paragraph" xml:space="preserve">
|
||||
<value>A continuación se puede ver la suya y todas las demás solicitudes, así como su descarga y aprobación de estado.</value>
|
||||
</data>
|
||||
<data name="Requests_MoviesTabTitle" xml:space="preserve">
|
||||
<value>Películas</value>
|
||||
</data>
|
||||
<data name="Requests_TvShowTabTitle" xml:space="preserve">
|
||||
<value>Serie de TV</value>
|
||||
</data>
|
||||
<data name="Requests_AlbumsTabTitle" xml:space="preserve">
|
||||
<value>Álbumes</value>
|
||||
</data>
|
||||
<data name="Requests_DeleteMovies" xml:space="preserve">
|
||||
<value>Eliminar películas</value>
|
||||
</data>
|
||||
<data name="Requests_ApproveMovies" xml:space="preserve">
|
||||
<value>Aprobar películas</value>
|
||||
</data>
|
||||
<data name="Requests_DeleteTVShows" xml:space="preserve">
|
||||
<value>Eliminar programas de televisión</value>
|
||||
</data>
|
||||
<data name="Requests_ApproveTvShows" xml:space="preserve">
|
||||
<value>Aprobar programas de televisión</value>
|
||||
</data>
|
||||
<data name="Requests_DeleteMusic" xml:space="preserve">
|
||||
<value>Eliminar la música</value>
|
||||
</data>
|
||||
<data name="Requests_ApproveMusic" xml:space="preserve">
|
||||
<value>Aprobar la música</value>
|
||||
</data>
|
||||
<data name="Requests_Filter_All" xml:space="preserve">
|
||||
<value>Todo</value>
|
||||
</data>
|
||||
<data name="Requests_Filter_Approved" xml:space="preserve">
|
||||
<value>Aprobado</value>
|
||||
</data>
|
||||
<data name="Requests_Filter_NotApproved" xml:space="preserve">
|
||||
<value>No Aprovado</value>
|
||||
</data>
|
||||
<data name="Requests_Filter_Available" xml:space="preserve">
|
||||
<value>disponible</value>
|
||||
</data>
|
||||
<data name="Requests_Filter_NotAvailable" xml:space="preserve">
|
||||
<value>No disponible</value>
|
||||
</data>
|
||||
<data name="Requests_Filter_Released" xml:space="preserve">
|
||||
<value>Publicado</value>
|
||||
</data>
|
||||
<data name="Requests_Filter_NotReleased" xml:space="preserve">
|
||||
<value>Publicado</value>
|
||||
</data>
|
||||
<data name="Requests_Order" xml:space="preserve">
|
||||
<value>Pedido</value>
|
||||
</data>
|
||||
<data name="Requests_Filter" xml:space="preserve">
|
||||
<value>Filtra</value>
|
||||
</data>
|
||||
<data name="Requests_Order_LatestRequests" xml:space="preserve">
|
||||
<value>Las últimas peticiones</value>
|
||||
</data>
|
||||
<data name="Requests_Order_OldestRequests" xml:space="preserve">
|
||||
<value>Las solicitudes más antiguas</value>
|
||||
</data>
|
||||
<data name="Requests_Order_LatestReleases" xml:space="preserve">
|
||||
<value>Últimos Lanzamientos</value>
|
||||
</data>
|
||||
<data name="Requests_Order_OldestReleases" xml:space="preserve">
|
||||
<value>Estrenos más antiguas</value>
|
||||
</data>
|
||||
<data name="Requests_ReleaseDate" xml:space="preserve">
|
||||
<value>Fecha de lanzamiento</value>
|
||||
</data>
|
||||
<data name="Requests_SeasonsRequested" xml:space="preserve">
|
||||
<value>Estaciones solicitado</value>
|
||||
</data>
|
||||
<data name="Requests_RequestedBy" xml:space="preserve">
|
||||
<value>SOLICITADO POR</value>
|
||||
</data>
|
||||
<data name="Requests_RequestedDate" xml:space="preserve">
|
||||
<value>¡Fecha solicitada</value>
|
||||
</data>
|
||||
<data name="Requests_ToggleDropdown" xml:space="preserve">
|
||||
<value>Toggle Desplegable</value>
|
||||
</data>
|
||||
<data name="Common_Approve" xml:space="preserve">
|
||||
<value>Trabajo aprobado</value>
|
||||
</data>
|
||||
<data name="Common_Remove" xml:space="preserve">
|
||||
<value>Eliminar</value>
|
||||
</data>
|
||||
<data name="Requests_MarkUnavailable" xml:space="preserve">
|
||||
<value>Marcar como no disponible</value>
|
||||
</data>
|
||||
<data name="Requests_MarkAvailable" xml:space="preserve">
|
||||
<value>disponible</value>
|
||||
</data>
|
||||
<data name="Common_Approved" xml:space="preserve">
|
||||
<value>Aprobado</value>
|
||||
</data>
|
||||
<data name="Requests_Available" xml:space="preserve">
|
||||
<value>disponible</value>
|
||||
</data>
|
||||
<data name="Issues_Issue" xml:space="preserve">
|
||||
<value>emitir</value>
|
||||
</data>
|
||||
</root>
|
@ -0,0 +1,405 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<root>
|
||||
<!--
|
||||
Microsoft ResX Schema
|
||||
|
||||
Version 2.0
|
||||
|
||||
The primary goals of this format is to allow a simple XML format
|
||||
that is mostly human readable. The generation and parsing of the
|
||||
various data types are done through the TypeConverter classes
|
||||
associated with the data types.
|
||||
|
||||
Example:
|
||||
|
||||
... ado.net/XML headers & schema ...
|
||||
<resheader name="resmimetype">text/microsoft-resx</resheader>
|
||||
<resheader name="version">2.0</resheader>
|
||||
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
|
||||
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
|
||||
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
|
||||
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
|
||||
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
|
||||
<value>[base64 mime encoded serialized .NET Framework object]</value>
|
||||
</data>
|
||||
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
|
||||
<comment>This is a comment</comment>
|
||||
</data>
|
||||
|
||||
There are any number of "resheader" rows that contain simple
|
||||
name/value pairs.
|
||||
|
||||
Each data row contains a name, and value. The row also contains a
|
||||
type or mimetype. Type corresponds to a .NET class that support
|
||||
text/value conversion through the TypeConverter architecture.
|
||||
Classes that don't support this are serialized and stored with the
|
||||
mimetype set.
|
||||
|
||||
The mimetype is used for serialized objects, and tells the
|
||||
ResXResourceReader how to depersist the object. This is currently not
|
||||
extensible. For a given mimetype the value must be set accordingly:
|
||||
|
||||
Note - application/x-microsoft.net.object.binary.base64 is the format
|
||||
that the ResXResourceWriter will generate, however the reader can
|
||||
read any of the formats listed below.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.binary.base64
|
||||
value : The object must be serialized with
|
||||
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
|
||||
: and then encoded with base64 encoding.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.soap.base64
|
||||
value : The object must be serialized with
|
||||
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
|
||||
: and then encoded with base64 encoding.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.bytearray.base64
|
||||
value : The object must be serialized into a byte array
|
||||
: using a System.ComponentModel.TypeConverter
|
||||
: and then encoded with base64 encoding.
|
||||
-->
|
||||
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
|
||||
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
|
||||
<xsd:element name="root" msdata:IsDataSet="true">
|
||||
<xsd:complexType>
|
||||
<xsd:choice maxOccurs="unbounded">
|
||||
<xsd:element name="metadata">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" use="required" type="xsd:string" />
|
||||
<xsd:attribute name="type" type="xsd:string" />
|
||||
<xsd:attribute name="mimetype" type="xsd:string" />
|
||||
<xsd:attribute ref="xml:space" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="assembly">
|
||||
<xsd:complexType>
|
||||
<xsd:attribute name="alias" type="xsd:string" />
|
||||
<xsd:attribute name="name" type="xsd:string" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="data">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
|
||||
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
|
||||
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
|
||||
<xsd:attribute ref="xml:space" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="resheader">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" use="required" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:choice>
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:schema>
|
||||
<resheader name="resmimetype">
|
||||
<value>text/microsoft-resx</value>
|
||||
</resheader>
|
||||
<resheader name="version">
|
||||
<value>2.0</value>
|
||||
</resheader>
|
||||
<resheader name="reader">
|
||||
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<resheader name="writer">
|
||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<data name="UserLogin_Title" xml:space="preserve">
|
||||
<value>Accesso</value>
|
||||
</data>
|
||||
<data name="UserLogin_Paragraph" xml:space="preserve">
|
||||
<value>Vuoi guardare un film o tv ma non è attualmente in Plex? Effettua il login con il tuo username e la password Plex.tv !</value>
|
||||
</data>
|
||||
<data name="UserLogin_Paragraph_SpanHover" xml:space="preserve">
|
||||
<value>I dati di accesso vengono utilizzati solo per autenticare l&#39;account Plex.!</value>
|
||||
</data>
|
||||
<data name="UserLogin_Username" xml:space="preserve">
|
||||
<value>Plex.tv Nome utente</value>
|
||||
</data>
|
||||
<data name="UserLogin_Username_Placeholder" xml:space="preserve">
|
||||
<value>Nome utente</value>
|
||||
</data>
|
||||
<data name="UserLogin_Password" xml:space="preserve">
|
||||
<value>Parola d'ordine</value>
|
||||
</data>
|
||||
<data name="UserLogin_SignIn" xml:space="preserve">
|
||||
<value>Accedi</value>
|
||||
</data>
|
||||
<data name="Javascript_SomethingWentWrong" xml:space="preserve">
|
||||
<value>Errore</value>
|
||||
</data>
|
||||
<data name="Javascript_Success" xml:space="preserve">
|
||||
<value>Successo</value>
|
||||
</data>
|
||||
<data name="Layout_Title" xml:space="preserve">
|
||||
<value>Plex Requests</value>
|
||||
</data>
|
||||
<data name="Layout_UpdateAvailablePart1" xml:space="preserve">
|
||||
<value>C'è un nuovo aggiornamento disponibile! Clic</value>
|
||||
</data>
|
||||
<data name="Layout_Search" xml:space="preserve">
|
||||
<value>Cerca!</value>
|
||||
</data>
|
||||
<data name="Layout_Requests" xml:space="preserve">
|
||||
<value>Requests</value>
|
||||
</data>
|
||||
<data name="Layout_Issues" xml:space="preserve">
|
||||
<value>problemi quantificati</value>
|
||||
</data>
|
||||
<data name="Layout_Donate" xml:space="preserve">
|
||||
<value>Donazione</value>
|
||||
</data>
|
||||
<data name="Layout_Admin" xml:space="preserve">
|
||||
<value>admin</value>
|
||||
</data>
|
||||
<data name="Layout_Settings" xml:space="preserve">
|
||||
<value>Impostazioni</value>
|
||||
</data>
|
||||
<data name="Layout_ChangePassword" xml:space="preserve">
|
||||
<value>Modifica password</value>
|
||||
</data>
|
||||
<data name="Layout_Logout" xml:space="preserve">
|
||||
<value>Disconnettersi</value>
|
||||
</data>
|
||||
<data name="Layout_English" xml:space="preserve">
|
||||
<value>Inglese</value>
|
||||
</data>
|
||||
<data name="Layout_Spanish" xml:space="preserve">
|
||||
<value>Spagnolo</value>
|
||||
</data>
|
||||
<data name="Layout_German" xml:space="preserve">
|
||||
<value>Tedesco</value>
|
||||
</data>
|
||||
<data name="Layout_Danish" xml:space="preserve">
|
||||
<value>Danese</value>
|
||||
</data>
|
||||
<data name="Layout_Portuguese" xml:space="preserve">
|
||||
<value>Portoghese</value>
|
||||
</data>
|
||||
<data name="Layout_Swedish" xml:space="preserve">
|
||||
<value>Svedese</value>
|
||||
</data>
|
||||
<data name="Layout_Italian" xml:space="preserve">
|
||||
<value>Italiano</value>
|
||||
</data>
|
||||
<data name="Layout_UpdateAvailablePart2" xml:space="preserve">
|
||||
<value>Qui!</value>
|
||||
</data>
|
||||
<data name="Layout_Dutch" xml:space="preserve">
|
||||
<value>Olandese</value>
|
||||
</data>
|
||||
<data name="Search_Title" xml:space="preserve">
|
||||
<value>Cerca</value>
|
||||
</data>
|
||||
<data name="Search_Movies" xml:space="preserve">
|
||||
<value>Film</value>
|
||||
</data>
|
||||
<data name="Search_TvShows" xml:space="preserve">
|
||||
<value>Spettacoli TV</value>
|
||||
</data>
|
||||
<data name="Search_Albums" xml:space="preserve">
|
||||
<value>Album</value>
|
||||
</data>
|
||||
<data name="Search_Paragraph" xml:space="preserve">
|
||||
<value>Voglia di guardare qualcosa che non è attualmente il Plex?! Non c'è problema! Basta cercare per esso qui sotto e richiederla!</value>
|
||||
</data>
|
||||
<data name="Search_Suggestions" xml:space="preserve">
|
||||
<value>Suggerimenti</value>
|
||||
</data>
|
||||
<data name="Search_ComingSoon" xml:space="preserve">
|
||||
<value>Novita</value>
|
||||
</data>
|
||||
<data name="Search_InTheaters" xml:space="preserve">
|
||||
<value>Nei Cinema</value>
|
||||
</data>
|
||||
<data name="Search_SendNotificationText" xml:space="preserve">
|
||||
<value>Inviami una notifica quando sono stati aggiunti elementi che ho chiesto!</value>
|
||||
</data>
|
||||
<data name="Common_Save" xml:space="preserve">
|
||||
<value>Salva</value>
|
||||
</data>
|
||||
<data name="Search_Available" xml:space="preserve">
|
||||
<value>disponibili</value>
|
||||
</data>
|
||||
<data name="Search_Requested" xml:space="preserve">
|
||||
<value>Richiesto</value>
|
||||
</data>
|
||||
<data name="Search_Request" xml:space="preserve">
|
||||
<value>Richiedi</value>
|
||||
</data>
|
||||
<data name="Search_AllSeasons" xml:space="preserve">
|
||||
<value>Tutte le Stagioni</value>
|
||||
</data>
|
||||
<data name="Search_FirstSeason" xml:space="preserve">
|
||||
<value>Prima stagione</value>
|
||||
</data>
|
||||
<data name="Search_LatestSeason" xml:space="preserve">
|
||||
<value>Ultima stagione</value>
|
||||
</data>
|
||||
<data name="Search_SelectSeason" xml:space="preserve">
|
||||
<value>seleziona</value>
|
||||
</data>
|
||||
<data name="Search_ReportIssue" xml:space="preserve">
|
||||
<value>Segnala il problema</value>
|
||||
</data>
|
||||
<data name="Issues_WrongAudio" xml:space="preserve">
|
||||
<value>Audio sbagliato</value>
|
||||
</data>
|
||||
<data name="Issues_NoSubs" xml:space="preserve">
|
||||
<value>Nessun sottotitolo</value>
|
||||
</data>
|
||||
<data name="Issues_WrongContent" xml:space="preserve">
|
||||
<value>Contenuto sbagliato</value>
|
||||
</data>
|
||||
<data name="Issues_Playback" xml:space="preserve">
|
||||
<value>Problemi di riproduzione</value>
|
||||
</data>
|
||||
<data name="Issues_Other" xml:space="preserve">
|
||||
<value>Altre</value>
|
||||
</data>
|
||||
<data name="Search_TrackCount" xml:space="preserve">
|
||||
<value>Conta di pista</value>
|
||||
</data>
|
||||
<data name="Search_Country" xml:space="preserve">
|
||||
<value>Nazione</value>
|
||||
</data>
|
||||
<data name="Search_Modal_SeasonsTitle" xml:space="preserve">
|
||||
<value>Stagioni</value>
|
||||
</data>
|
||||
<data name="Common_Close" xml:space="preserve">
|
||||
<value>Chiudi</value>
|
||||
</data>
|
||||
<data name="Issues_Modal_Title" xml:space="preserve">
|
||||
<value>Aggiungere un problema</value>
|
||||
</data>
|
||||
<data name="Issues_Modal_Save" xml:space="preserve">
|
||||
<value>Salva Cambia</value>
|
||||
</data>
|
||||
<data name="Search_Season" xml:space="preserve">
|
||||
<value>Stagione</value>
|
||||
</data>
|
||||
<data name="Layout_Welcome" xml:space="preserve">
|
||||
<value>Benvenuta</value>
|
||||
</data>
|
||||
<data name="Requests_Title" xml:space="preserve">
|
||||
<value>Requests</value>
|
||||
</data>
|
||||
<data name="Requests_Paragraph" xml:space="preserve">
|
||||
<value>Qui sotto potete vedere il vostro e tutte le altre richieste, così come il loro download e l'approvazione dello stato</value>
|
||||
</data>
|
||||
<data name="Requests_MoviesTabTitle" xml:space="preserve">
|
||||
<value>Film</value>
|
||||
</data>
|
||||
<data name="Requests_TvShowTabTitle" xml:space="preserve">
|
||||
<value>Spettacoli TV</value>
|
||||
</data>
|
||||
<data name="Requests_AlbumsTabTitle" xml:space="preserve">
|
||||
<value>Album</value>
|
||||
</data>
|
||||
<data name="Requests_DeleteMovies" xml:space="preserve">
|
||||
<value>Cancellare i filmati</value>
|
||||
</data>
|
||||
<data name="Requests_ApproveMovies" xml:space="preserve">
|
||||
<value>Approva Film</value>
|
||||
</data>
|
||||
<data name="Requests_DeleteTVShows" xml:space="preserve">
|
||||
<value>Cancellare programmi TV</value>
|
||||
</data>
|
||||
<data name="Requests_ApproveTvShows" xml:space="preserve">
|
||||
<value>Approvare programmi TV</value>
|
||||
</data>
|
||||
<data name="Requests_DeleteMusic" xml:space="preserve">
|
||||
<value>Eliminare la musica</value>
|
||||
</data>
|
||||
<data name="Requests_ApproveMusic" xml:space="preserve">
|
||||
<value>Approva Musica</value>
|
||||
</data>
|
||||
<data name="Requests_Filter_All" xml:space="preserve">
|
||||
<value>Tutto ciò</value>
|
||||
</data>
|
||||
<data name="Requests_Filter_Approved" xml:space="preserve">
|
||||
<value>Approvato</value>
|
||||
</data>
|
||||
<data name="Requests_Filter_NotApproved" xml:space="preserve">
|
||||
<value>Approvato</value>
|
||||
</data>
|
||||
<data name="Requests_Filter_Available" xml:space="preserve">
|
||||
<value>disponibili</value>
|
||||
</data>
|
||||
<data name="Requests_Filter_NotAvailable" xml:space="preserve">
|
||||
<value>Non disponibile</value>
|
||||
</data>
|
||||
<data name="Requests_Filter_Released" xml:space="preserve">
|
||||
<value>Rilasciato</value>
|
||||
</data>
|
||||
<data name="Requests_Filter_NotReleased" xml:space="preserve">
|
||||
<value>Non rilasciato</value>
|
||||
</data>
|
||||
<data name="Requests_Order" xml:space="preserve">
|
||||
<value>Ordina</value>
|
||||
</data>
|
||||
<data name="Requests_Filter" xml:space="preserve">
|
||||
<value>Filtro</value>
|
||||
</data>
|
||||
<data name="Requests_Order_LatestRequests" xml:space="preserve">
|
||||
<value>Ultimi Richieste</value>
|
||||
</data>
|
||||
<data name="Requests_Order_OldestRequests" xml:space="preserve">
|
||||
<value>I più vecchi richieste</value>
|
||||
</data>
|
||||
<data name="Requests_Order_LatestReleases" xml:space="preserve">
|
||||
<value>Ultime uscite</value>
|
||||
</data>
|
||||
<data name="Requests_Order_OldestReleases" xml:space="preserve">
|
||||
<value>I più vecchi uscite</value>
|
||||
</data>
|
||||
<data name="Requests_ReleaseDate" xml:space="preserve">
|
||||
<value>Data di disponibilità</value>
|
||||
</data>
|
||||
<data name="Requests_SeasonsRequested" xml:space="preserve">
|
||||
<value>Stagioni obbligatorio</value>
|
||||
</data>
|
||||
<data name="Requests_RequestedBy" xml:space="preserve">
|
||||
<value>Richiesto</value>
|
||||
</data>
|
||||
<data name="Requests_RequestedDate" xml:space="preserve">
|
||||
<value>Richiesto</value>
|
||||
</data>
|
||||
<data name="Requests_ToggleDropdown" xml:space="preserve">
|
||||
<value>Imposta/rimuovi a discesa</value>
|
||||
</data>
|
||||
<data name="Common_Approve" xml:space="preserve">
|
||||
<value>Approva</value>
|
||||
</data>
|
||||
<data name="Common_Remove" xml:space="preserve">
|
||||
<value>Togliere</value>
|
||||
</data>
|
||||
<data name="Requests_MarkUnavailable" xml:space="preserve">
|
||||
<value>Segna non disponibile</value>
|
||||
</data>
|
||||
<data name="Requests_MarkAvailable" xml:space="preserve">
|
||||
<value>Segna disponibile</value>
|
||||
</data>
|
||||
<data name="Common_Approved" xml:space="preserve">
|
||||
<value>Approvato</value>
|
||||
</data>
|
||||
<data name="Requests_Available" xml:space="preserve">
|
||||
<value>disponibili</value>
|
||||
</data>
|
||||
<data name="Issues_Issue" xml:space="preserve">
|
||||
<value>Problema</value>
|
||||
</data>
|
||||
</root>
|
@ -0,0 +1,405 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<root>
|
||||
<!--
|
||||
Microsoft ResX Schema
|
||||
|
||||
Version 2.0
|
||||
|
||||
The primary goals of this format is to allow a simple XML format
|
||||
that is mostly human readable. The generation and parsing of the
|
||||
various data types are done through the TypeConverter classes
|
||||
associated with the data types.
|
||||
|
||||
Example:
|
||||
|
||||
... ado.net/XML headers & schema ...
|
||||
<resheader name="resmimetype">text/microsoft-resx</resheader>
|
||||
<resheader name="version">2.0</resheader>
|
||||
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
|
||||
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
|
||||
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
|
||||
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
|
||||
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
|
||||
<value>[base64 mime encoded serialized .NET Framework object]</value>
|
||||
</data>
|
||||
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
|
||||
<comment>This is a comment</comment>
|
||||
</data>
|
||||
|
||||
There are any number of "resheader" rows that contain simple
|
||||
name/value pairs.
|
||||
|
||||
Each data row contains a name, and value. The row also contains a
|
||||
type or mimetype. Type corresponds to a .NET class that support
|
||||
text/value conversion through the TypeConverter architecture.
|
||||
Classes that don't support this are serialized and stored with the
|
||||
mimetype set.
|
||||
|
||||
The mimetype is used for serialized objects, and tells the
|
||||
ResXResourceReader how to depersist the object. This is currently not
|
||||
extensible. For a given mimetype the value must be set accordingly:
|
||||
|
||||
Note - application/x-microsoft.net.object.binary.base64 is the format
|
||||
that the ResXResourceWriter will generate, however the reader can
|
||||
read any of the formats listed below.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.binary.base64
|
||||
value : The object must be serialized with
|
||||
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
|
||||
: and then encoded with base64 encoding.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.soap.base64
|
||||
value : The object must be serialized with
|
||||
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
|
||||
: and then encoded with base64 encoding.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.bytearray.base64
|
||||
value : The object must be serialized into a byte array
|
||||
: using a System.ComponentModel.TypeConverter
|
||||
: and then encoded with base64 encoding.
|
||||
-->
|
||||
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
|
||||
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
|
||||
<xsd:element name="root" msdata:IsDataSet="true">
|
||||
<xsd:complexType>
|
||||
<xsd:choice maxOccurs="unbounded">
|
||||
<xsd:element name="metadata">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" use="required" type="xsd:string" />
|
||||
<xsd:attribute name="type" type="xsd:string" />
|
||||
<xsd:attribute name="mimetype" type="xsd:string" />
|
||||
<xsd:attribute ref="xml:space" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="assembly">
|
||||
<xsd:complexType>
|
||||
<xsd:attribute name="alias" type="xsd:string" />
|
||||
<xsd:attribute name="name" type="xsd:string" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="data">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
|
||||
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
|
||||
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
|
||||
<xsd:attribute ref="xml:space" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="resheader">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" use="required" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:choice>
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:schema>
|
||||
<resheader name="resmimetype">
|
||||
<value>text/microsoft-resx</value>
|
||||
</resheader>
|
||||
<resheader name="version">
|
||||
<value>2.0</value>
|
||||
</resheader>
|
||||
<resheader name="reader">
|
||||
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<resheader name="writer">
|
||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<data name="UserLogin_Title" xml:space="preserve">
|
||||
<value>Inloggen</value>
|
||||
</data>
|
||||
<data name="UserLogin_Paragraph" xml:space="preserve">
|
||||
<value>Wilt u een film of tv-show te kijken, maar het is op het moment niet op Plex? Log hieronder in met uw gebruikersnaam en wachtwoord Plex.tv !!</value>
|
||||
</data>
|
||||
<data name="UserLogin_Paragraph_SpanHover" xml:space="preserve">
|
||||
<value>Uw login gegevens worden alleen gebruikt om uw account te verifiëren Plex.</value>
|
||||
</data>
|
||||
<data name="UserLogin_Username" xml:space="preserve">
|
||||
<value>Plex.tv Gebruikersnaam</value>
|
||||
</data>
|
||||
<data name="UserLogin_Username_Placeholder" xml:space="preserve">
|
||||
<value>Gebruikersnaam</value>
|
||||
</data>
|
||||
<data name="UserLogin_Password" xml:space="preserve">
|
||||
<value>Wachtwoord</value>
|
||||
</data>
|
||||
<data name="UserLogin_SignIn" xml:space="preserve">
|
||||
<value>Aanmelden!</value>
|
||||
</data>
|
||||
<data name="Javascript_SomethingWentWrong" xml:space="preserve">
|
||||
<value>Er is iets fout gegaan</value>
|
||||
</data>
|
||||
<data name="Javascript_Success" xml:space="preserve">
|
||||
<value>Succes</value>
|
||||
</data>
|
||||
<data name="Layout_Title" xml:space="preserve">
|
||||
<value>Plex Requests</value>
|
||||
</data>
|
||||
<data name="Layout_Search" xml:space="preserve">
|
||||
<value>Zoeken</value>
|
||||
</data>
|
||||
<data name="Layout_Requests" xml:space="preserve">
|
||||
<value>Verzoeken</value>
|
||||
</data>
|
||||
<data name="Layout_Issues" xml:space="preserve">
|
||||
<value>UItgaves</value>
|
||||
</data>
|
||||
<data name="Layout_Donate" xml:space="preserve">
|
||||
<value>Doneren</value>
|
||||
</data>
|
||||
<data name="Layout_Admin" xml:space="preserve">
|
||||
<value>Admin</value>
|
||||
</data>
|
||||
<data name="Layout_Settings" xml:space="preserve">
|
||||
<value>Instellingen</value>
|
||||
</data>
|
||||
<data name="Layout_ChangePassword" xml:space="preserve">
|
||||
<value>Wachtwoord wijzigen</value>
|
||||
</data>
|
||||
<data name="Layout_Logout" xml:space="preserve">
|
||||
<value>Uitloggen</value>
|
||||
</data>
|
||||
<data name="Layout_UpdateAvailablePart1" xml:space="preserve">
|
||||
<value>Er is een nieuwe update beschikbaar is! Klik</value>
|
||||
</data>
|
||||
<data name="Layout_English" xml:space="preserve">
|
||||
<value>English</value>
|
||||
</data>
|
||||
<data name="Layout_Spanish" xml:space="preserve">
|
||||
<value>Spanish</value>
|
||||
</data>
|
||||
<data name="Layout_German" xml:space="preserve">
|
||||
<value>German</value>
|
||||
</data>
|
||||
<data name="Layout_Danish" xml:space="preserve">
|
||||
<value>Koffiebroodje</value>
|
||||
</data>
|
||||
<data name="Layout_Portuguese" xml:space="preserve">
|
||||
<value>Portuguese</value>
|
||||
</data>
|
||||
<data name="Layout_Swedish" xml:space="preserve">
|
||||
<value>Zweeds</value>
|
||||
</data>
|
||||
<data name="Layout_Italian" xml:space="preserve">
|
||||
<value>Italian</value>
|
||||
</data>
|
||||
<data name="Layout_UpdateAvailablePart2" xml:space="preserve">
|
||||
<value>Hier!</value>
|
||||
</data>
|
||||
<data name="Layout_Dutch" xml:space="preserve">
|
||||
<value>Dutch</value>
|
||||
</data>
|
||||
<data name="Search_Title" xml:space="preserve">
|
||||
<value>Zoeken</value>
|
||||
</data>
|
||||
<data name="Search_Requested" xml:space="preserve">
|
||||
<value>Aangevraagd</value>
|
||||
</data>
|
||||
<data name="Search_Movies" xml:space="preserve">
|
||||
<value>films</value>
|
||||
</data>
|
||||
<data name="Search_TvShows" xml:space="preserve">
|
||||
<value>TV programma's</value>
|
||||
</data>
|
||||
<data name="Search_Albums" xml:space="preserve">
|
||||
<value>albums</value>
|
||||
</data>
|
||||
<data name="Search_Paragraph" xml:space="preserve">
|
||||
<value>Wilt u kijken naar iets dat is momenteel niet op de Plex?! Geen probleem! Onderzoek enkel naar het hieronder en vraag het!</value>
|
||||
</data>
|
||||
<data name="Search_Suggestions" xml:space="preserve">
|
||||
<value>Suggesties</value>
|
||||
</data>
|
||||
<data name="Search_ComingSoon" xml:space="preserve">
|
||||
<value>Binnenkort verwacht</value>
|
||||
</data>
|
||||
<data name="Search_InTheaters" xml:space="preserve">
|
||||
<value>In de Theaters</value>
|
||||
</data>
|
||||
<data name="Search_SendNotificationText" xml:space="preserve">
|
||||
<value>Stuur me een bericht wanneer objecten die ik heb gevraagd zijn toegevoegd</value>
|
||||
</data>
|
||||
<data name="Common_Save" xml:space="preserve">
|
||||
<value>Opslaan</value>
|
||||
</data>
|
||||
<data name="Search_Available" xml:space="preserve">
|
||||
<value>Beschikbaar</value>
|
||||
</data>
|
||||
<data name="Search_Request" xml:space="preserve">
|
||||
<value>Verzoek</value>
|
||||
</data>
|
||||
<data name="Search_AllSeasons" xml:space="preserve">
|
||||
<value>Alle seizoenen</value>
|
||||
</data>
|
||||
<data name="Search_FirstSeason" xml:space="preserve">
|
||||
<value>Eerste seizoen</value>
|
||||
</data>
|
||||
<data name="Search_LatestSeason" xml:space="preserve">
|
||||
<value>Laatste seizoen</value>
|
||||
</data>
|
||||
<data name="Search_SelectSeason" xml:space="preserve">
|
||||
<value>Selecteer</value>
|
||||
</data>
|
||||
<data name="Search_ReportIssue" xml:space="preserve">
|
||||
<value>Probleem melden</value>
|
||||
</data>
|
||||
<data name="Issues_WrongAudio" xml:space="preserve">
|
||||
<value>Verkeerde Audio</value>
|
||||
</data>
|
||||
<data name="Issues_NoSubs" xml:space="preserve">
|
||||
<value>Geen ondertiteling</value>
|
||||
</data>
|
||||
<data name="Issues_WrongContent" xml:space="preserve">
|
||||
<value>Verkeerde inhoud</value>
|
||||
</data>
|
||||
<data name="Issues_Playback" xml:space="preserve">
|
||||
<value>Problemen met het afspelen</value>
|
||||
</data>
|
||||
<data name="Issues_Other" xml:space="preserve">
|
||||
<value>Overig</value>
|
||||
</data>
|
||||
<data name="Search_TrackCount" xml:space="preserve">
|
||||
<value>Spoor de graaf</value>
|
||||
</data>
|
||||
<data name="Search_Country" xml:space="preserve">
|
||||
<value>Land</value>
|
||||
</data>
|
||||
<data name="Search_Modal_SeasonsTitle" xml:space="preserve">
|
||||
<value>Seasons</value>
|
||||
</data>
|
||||
<data name="Common_Close" xml:space="preserve">
|
||||
<value>Dichtbij</value>
|
||||
</data>
|
||||
<data name="Issues_Modal_Title" xml:space="preserve">
|
||||
<value>Een actie-item toevoegen</value>
|
||||
</data>
|
||||
<data name="Issues_Modal_Save" xml:space="preserve">
|
||||
<value>Wijzigingen opslaan</value>
|
||||
</data>
|
||||
<data name="Search_Season" xml:space="preserve">
|
||||
<value>Seizoen</value>
|
||||
</data>
|
||||
<data name="Layout_Welcome" xml:space="preserve">
|
||||
<value>Welkom</value>
|
||||
</data>
|
||||
<data name="Requests_Title" xml:space="preserve">
|
||||
<value>Verzoeken</value>
|
||||
</data>
|
||||
<data name="Requests_Paragraph" xml:space="preserve">
|
||||
<value>Hieronder vindt u de jouwe en alle andere verzoeken kan zien, evenals hun download en goedkeuring-status.</value>
|
||||
</data>
|
||||
<data name="Requests_MoviesTabTitle" xml:space="preserve">
|
||||
<value>films</value>
|
||||
</data>
|
||||
<data name="Requests_TvShowTabTitle" xml:space="preserve">
|
||||
<value>TV programma's</value>
|
||||
</data>
|
||||
<data name="Requests_AlbumsTabTitle" xml:space="preserve">
|
||||
<value>albums</value>
|
||||
</data>
|
||||
<data name="Requests_DeleteMovies" xml:space="preserve">
|
||||
<value>Verwijder Movies</value>
|
||||
</data>
|
||||
<data name="Requests_ApproveMovies" xml:space="preserve">
|
||||
<value>Goedkeuren Movies</value>
|
||||
</data>
|
||||
<data name="Requests_DeleteTVShows" xml:space="preserve">
|
||||
<value>Verwijder TV Shows</value>
|
||||
</data>
|
||||
<data name="Requests_ApproveTvShows" xml:space="preserve">
|
||||
<value>Goedkeuren TV Shows</value>
|
||||
</data>
|
||||
<data name="Requests_DeleteMusic" xml:space="preserve">
|
||||
<value>Verwijderen Muziek</value>
|
||||
</data>
|
||||
<data name="Requests_ApproveMusic" xml:space="preserve">
|
||||
<value>Goedkeuren Music</value>
|
||||
</data>
|
||||
<data name="Requests_Filter_All" xml:space="preserve">
|
||||
<value>Alle</value>
|
||||
</data>
|
||||
<data name="Requests_Filter_Approved" xml:space="preserve">
|
||||
<value>Goedgekeurd</value>
|
||||
</data>
|
||||
<data name="Requests_Filter_NotApproved" xml:space="preserve">
|
||||
<value>Nog niet gestart</value>
|
||||
</data>
|
||||
<data name="Requests_Filter_Available" xml:space="preserve">
|
||||
<value>Beschikbaar</value>
|
||||
</data>
|
||||
<data name="Requests_Filter_NotAvailable" xml:space="preserve">
|
||||
<value>Niet beschikbaar</value>
|
||||
</data>
|
||||
<data name="Requests_Filter_Released" xml:space="preserve">
|
||||
<value>Released</value>
|
||||
</data>
|
||||
<data name="Requests_Filter_NotReleased" xml:space="preserve">
|
||||
<value>Niet vrijgegeven</value>
|
||||
</data>
|
||||
<data name="Requests_Order" xml:space="preserve">
|
||||
<value>Bestel</value>
|
||||
</data>
|
||||
<data name="Requests_Filter" xml:space="preserve">
|
||||
<value>Filter!</value>
|
||||
</data>
|
||||
<data name="Requests_Order_LatestRequests" xml:space="preserve">
|
||||
<value>Laatste aanvragen</value>
|
||||
</data>
|
||||
<data name="Requests_Order_OldestRequests" xml:space="preserve">
|
||||
<value>Oudste aanvragen</value>
|
||||
</data>
|
||||
<data name="Requests_Order_LatestReleases" xml:space="preserve">
|
||||
<value>Nieuwste releases</value>
|
||||
</data>
|
||||
<data name="Requests_Order_OldestReleases" xml:space="preserve">
|
||||
<value>Oudste Releases</value>
|
||||
</data>
|
||||
<data name="Requests_ReleaseDate" xml:space="preserve">
|
||||
<value>Uitgiftedatum</value>
|
||||
</data>
|
||||
<data name="Requests_SeasonsRequested" xml:space="preserve">
|
||||
<value>Seasons gevraagd</value>
|
||||
</data>
|
||||
<data name="Requests_RequestedBy" xml:space="preserve">
|
||||
<value>Verzocht door</value>
|
||||
</data>
|
||||
<data name="Requests_RequestedDate" xml:space="preserve">
|
||||
<value>Aanvraag datum</value>
|
||||
</data>
|
||||
<data name="Requests_ToggleDropdown" xml:space="preserve">
|
||||
<value>Toggle Dropdown</value>
|
||||
</data>
|
||||
<data name="Common_Approve" xml:space="preserve">
|
||||
<value>Goedkeuren</value>
|
||||
</data>
|
||||
<data name="Common_Remove" xml:space="preserve">
|
||||
<value>verwijder</value>
|
||||
</data>
|
||||
<data name="Requests_MarkUnavailable" xml:space="preserve">
|
||||
<value>Niet beschikbaar</value>
|
||||
</data>
|
||||
<data name="Requests_MarkAvailable" xml:space="preserve">
|
||||
<value>Mark beschikbaar</value>
|
||||
</data>
|
||||
<data name="Common_Approved" xml:space="preserve">
|
||||
<value>Goedgekeurd</value>
|
||||
</data>
|
||||
<data name="Requests_Available" xml:space="preserve">
|
||||
<value>Beschikbaar</value>
|
||||
</data>
|
||||
<data name="Issues_Issue" xml:space="preserve">
|
||||
<value>Uitgave</value>
|
||||
</data>
|
||||
</root>
|
@ -0,0 +1,431 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<root>
|
||||
<!--
|
||||
Microsoft ResX Schema
|
||||
|
||||
Version 1.3
|
||||
|
||||
The primary goals of this format is to allow a simple XML format
|
||||
that is mostly human readable. The generation and parsing of the
|
||||
various data types are done through the TypeConverter classes
|
||||
associated with the data types.
|
||||
|
||||
Example:
|
||||
|
||||
... ado.net/XML headers & schema ...
|
||||
<resheader name="resmimetype">text/microsoft-resx</resheader>
|
||||
<resheader name="version">1.3</resheader>
|
||||
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
|
||||
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
|
||||
<data name="Name1">this is my long string</data>
|
||||
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
|
||||
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
|
||||
[base64 mime encoded serialized .NET Framework object]
|
||||
</data>
|
||||
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||
[base64 mime encoded string representing a byte array form of the .NET Framework object]
|
||||
</data>
|
||||
|
||||
There are any number of "resheader" rows that contain simple
|
||||
name/value pairs.
|
||||
|
||||
Each data row contains a name, and value. The row also contains a
|
||||
type or mimetype. Type corresponds to a .NET class that support
|
||||
text/value conversion through the TypeConverter architecture.
|
||||
Classes that don't support this are serialized and stored with the
|
||||
mimetype set.
|
||||
|
||||
The mimetype is used for serialized objects, and tells the
|
||||
ResXResourceReader how to depersist the object. This is currently not
|
||||
extensible. For a given mimetype the value must be set accordingly:
|
||||
|
||||
Note - application/x-microsoft.net.object.binary.base64 is the format
|
||||
that the ResXResourceWriter will generate, however the reader can
|
||||
read any of the formats listed below.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.binary.base64
|
||||
value : The object must be serialized with
|
||||
: System.Serialization.Formatters.Binary.BinaryFormatter
|
||||
: and then encoded with base64 encoding.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.soap.base64
|
||||
value : The object must be serialized with
|
||||
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
|
||||
: and then encoded with base64 encoding.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.bytearray.base64
|
||||
value : The object must be serialized into a byte array
|
||||
: using a System.ComponentModel.TypeConverter
|
||||
: and then encoded with base64 encoding.
|
||||
-->
|
||||
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
|
||||
<xsd:element name="root" msdata:IsDataSet="true">
|
||||
<xsd:complexType>
|
||||
<xsd:choice maxOccurs="unbounded">
|
||||
<xsd:element name="data">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" msdata:Ordinal="1" />
|
||||
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
|
||||
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="resheader">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" use="required" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:choice>
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:schema>
|
||||
<resheader name="resmimetype">
|
||||
<value>text/microsoft-resx</value>
|
||||
</resheader>
|
||||
<resheader name="version">
|
||||
<value>1.3</value>
|
||||
</resheader>
|
||||
<resheader name="reader">
|
||||
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.3500.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<resheader name="writer">
|
||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.3500.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<data name="UserLogin_Title" xml:space="preserve">
|
||||
<value>Login</value>
|
||||
</data>
|
||||
<data name="UserLogin_Paragraph" xml:space="preserve">
|
||||
<value>Want to watch a movie or tv show but it's not currently on Plex?
|
||||
Login below with your Plex.tv username and password!</value>
|
||||
</data>
|
||||
<data name="UserLogin_Paragraph_SpanHover" xml:space="preserve">
|
||||
<value>Your login details are only used to authenticate your Plex account.</value>
|
||||
</data>
|
||||
<data name="UserLogin_Username" xml:space="preserve">
|
||||
<value>Plex.tv Username </value>
|
||||
</data>
|
||||
<data name="UserLogin_Username_Placeholder" xml:space="preserve">
|
||||
<value>Username</value>
|
||||
</data>
|
||||
<data name="UserLogin_Password" xml:space="preserve">
|
||||
<value>Password</value>
|
||||
</data>
|
||||
<data name="UserLogin_SignIn" xml:space="preserve">
|
||||
<value>Sign In</value>
|
||||
</data>
|
||||
<data name="Javascript_SomethingWentWrong" xml:space="preserve">
|
||||
<value>Something went wrong!</value>
|
||||
</data>
|
||||
<data name="Javascript_Success" xml:space="preserve">
|
||||
<value>Success!</value>
|
||||
</data>
|
||||
<data name="Layout_Title" xml:space="preserve">
|
||||
<value>Plex Requests</value>
|
||||
</data>
|
||||
<data name="Layout_Search" xml:space="preserve">
|
||||
<value>Search</value>
|
||||
</data>
|
||||
<data name="Layout_Requests" xml:space="preserve">
|
||||
<value>Requests</value>
|
||||
</data>
|
||||
<data name="Layout_Issues" xml:space="preserve">
|
||||
<value>Issues</value>
|
||||
</data>
|
||||
<data name="Layout_Donate" xml:space="preserve">
|
||||
<value>Donate</value>
|
||||
</data>
|
||||
<data name="Layout_Admin" xml:space="preserve">
|
||||
<value>Admin</value>
|
||||
</data>
|
||||
<data name="Layout_Settings" xml:space="preserve">
|
||||
<value>Settings</value>
|
||||
</data>
|
||||
<data name="Layout_ChangePassword" xml:space="preserve">
|
||||
<value>Change Password</value>
|
||||
</data>
|
||||
<data name="Layout_Logout" xml:space="preserve">
|
||||
<value>Logout</value>
|
||||
</data>
|
||||
<data name="Layout_UpdateAvailablePart1" xml:space="preserve">
|
||||
<value>There is a new update available! Click</value>
|
||||
</data>
|
||||
<data name="Layout_English" xml:space="preserve">
|
||||
<value>English</value>
|
||||
</data>
|
||||
<data name="Layout_Spanish" xml:space="preserve">
|
||||
<value>Spanish</value>
|
||||
</data>
|
||||
<data name="Layout_German" xml:space="preserve">
|
||||
<value>German</value>
|
||||
</data>
|
||||
<data name="Layout_Danish" xml:space="preserve">
|
||||
<value>Danish</value>
|
||||
</data>
|
||||
<data name="Layout_Portuguese" xml:space="preserve">
|
||||
<value>Portuguese</value>
|
||||
</data>
|
||||
<data name="Layout_Swedish" xml:space="preserve">
|
||||
<value>Swedish</value>
|
||||
</data>
|
||||
<data name="Layout_Italian" xml:space="preserve">
|
||||
<value>Italian</value>
|
||||
</data>
|
||||
<data name="Layout_UpdateAvailablePart2" xml:space="preserve">
|
||||
<value>Here!</value>
|
||||
</data>
|
||||
<data name="Layout_Dutch" xml:space="preserve">
|
||||
<value>Dutch</value>
|
||||
</data>
|
||||
<data name="Search_Movies" xml:space="preserve">
|
||||
<value>Movies</value>
|
||||
</data>
|
||||
<data name="Search_TvShows" xml:space="preserve">
|
||||
<value>TV Shows</value>
|
||||
</data>
|
||||
<data name="Search_Albums" xml:space="preserve">
|
||||
<value>Albums</value>
|
||||
</data>
|
||||
<data name="Search_Paragraph" xml:space="preserve">
|
||||
<value>Want to watch something that is not currently on Plex?! No problem! Just search for it below and request it!</value>
|
||||
</data>
|
||||
<data name="Search_Title" xml:space="preserve">
|
||||
<value>Search</value>
|
||||
</data>
|
||||
<data name="Search_Suggestions" xml:space="preserve">
|
||||
<value>Suggestions</value>
|
||||
</data>
|
||||
<data name="Search_ComingSoon" xml:space="preserve">
|
||||
<value>Coming Soon</value>
|
||||
</data>
|
||||
<data name="Search_InTheaters" xml:space="preserve">
|
||||
<value>In Theaters</value>
|
||||
</data>
|
||||
<data name="Search_SendNotificationText" xml:space="preserve">
|
||||
<value>Send me a notification when items I have requested have been added</value>
|
||||
</data>
|
||||
<data name="Common_Save" xml:space="preserve">
|
||||
<value>Save</value>
|
||||
</data>
|
||||
<data name="Search_Available" xml:space="preserve">
|
||||
<value>Available</value>
|
||||
</data>
|
||||
<data name="Search_Requested" xml:space="preserve">
|
||||
<value>Requested</value>
|
||||
</data>
|
||||
<data name="Search_Request" xml:space="preserve">
|
||||
<value>Request</value>
|
||||
</data>
|
||||
<data name="Search_AllSeasons" xml:space="preserve">
|
||||
<value>All Seasons</value>
|
||||
</data>
|
||||
<data name="Search_FirstSeason" xml:space="preserve">
|
||||
<value>First Season</value>
|
||||
</data>
|
||||
<data name="Search_LatestSeason" xml:space="preserve">
|
||||
<value>Latest Season</value>
|
||||
</data>
|
||||
<data name="Search_SelectSeason" xml:space="preserve">
|
||||
<value>Select </value>
|
||||
</data>
|
||||
<data name="Search_ReportIssue" xml:space="preserve">
|
||||
<value>Report Issue</value>
|
||||
</data>
|
||||
<data name="Issues_WrongAudio" xml:space="preserve">
|
||||
<value>Wrong Audio</value>
|
||||
</data>
|
||||
<data name="Issues_NoSubs" xml:space="preserve">
|
||||
<value>No Subtitles</value>
|
||||
</data>
|
||||
<data name="Issues_WrongContent" xml:space="preserve">
|
||||
<value>Wrong Content</value>
|
||||
</data>
|
||||
<data name="Issues_Playback" xml:space="preserve">
|
||||
<value>Playback Issues</value>
|
||||
</data>
|
||||
<data name="Issues_Other" xml:space="preserve">
|
||||
<value>Other</value>
|
||||
</data>
|
||||
<data name="Search_TrackCount" xml:space="preserve">
|
||||
<value>Track Count</value>
|
||||
</data>
|
||||
<data name="Search_Country" xml:space="preserve">
|
||||
<value>Country</value>
|
||||
</data>
|
||||
<data name="Search_Modal_SeasonsTitle" xml:space="preserve">
|
||||
<value>Seasons</value>
|
||||
</data>
|
||||
<data name="Common_Close" xml:space="preserve">
|
||||
<value>Close</value>
|
||||
</data>
|
||||
<data name="Issues_Modal_Title" xml:space="preserve">
|
||||
<value>Add an issue</value>
|
||||
</data>
|
||||
<data name="Issues_Modal_Save" xml:space="preserve">
|
||||
<value>Save Changes</value>
|
||||
</data>
|
||||
<data name="Search_Season" xml:space="preserve">
|
||||
<value>Season</value>
|
||||
</data>
|
||||
<data name="Layout_Welcome" xml:space="preserve">
|
||||
<value>Welcome</value>
|
||||
</data>
|
||||
<data name="Requests_Title" xml:space="preserve">
|
||||
<value>Requests</value>
|
||||
</data>
|
||||
<data name="Requests_Paragraph" xml:space="preserve">
|
||||
<value>Below you can see yours and all other requests, as well as their download and approval status.</value>
|
||||
</data>
|
||||
<data name="Requests_MoviesTabTitle" xml:space="preserve">
|
||||
<value>Movies</value>
|
||||
</data>
|
||||
<data name="Requests_TvShowTabTitle" xml:space="preserve">
|
||||
<value>TV Shows</value>
|
||||
</data>
|
||||
<data name="Requests_AlbumsTabTitle" xml:space="preserve">
|
||||
<value>Albums</value>
|
||||
</data>
|
||||
<data name="Requests_DeleteMovies" xml:space="preserve">
|
||||
<value>Delete Movies</value>
|
||||
</data>
|
||||
<data name="Requests_ApproveMovies" xml:space="preserve">
|
||||
<value>Approve Movies</value>
|
||||
</data>
|
||||
<data name="Requests_DeleteTVShows" xml:space="preserve">
|
||||
<value>Delete TV Shows</value>
|
||||
</data>
|
||||
<data name="Requests_ApproveTvShows" xml:space="preserve">
|
||||
<value>Approve TV Shows</value>
|
||||
</data>
|
||||
<data name="Requests_DeleteMusic" xml:space="preserve">
|
||||
<value>Delete Music</value>
|
||||
</data>
|
||||
<data name="Requests_ApproveMusic" xml:space="preserve">
|
||||
<value>Approve Music</value>
|
||||
</data>
|
||||
<data name="Requests_Filter_All" xml:space="preserve">
|
||||
<value>All</value>
|
||||
</data>
|
||||
<data name="Requests_Filter_Approved" xml:space="preserve">
|
||||
<value>Approved</value>
|
||||
</data>
|
||||
<data name="Requests_Filter_NotApproved" xml:space="preserve">
|
||||
<value>Not Approved</value>
|
||||
</data>
|
||||
<data name="Requests_Filter_Available" xml:space="preserve">
|
||||
<value>Available</value>
|
||||
</data>
|
||||
<data name="Requests_Filter_NotAvailable" xml:space="preserve">
|
||||
<value>Not Available</value>
|
||||
</data>
|
||||
<data name="Requests_Filter_Released" xml:space="preserve">
|
||||
<value>Released</value>
|
||||
</data>
|
||||
<data name="Requests_Filter_NotReleased" xml:space="preserve">
|
||||
<value>Not Released</value>
|
||||
</data>
|
||||
<data name="Requests_Order" xml:space="preserve">
|
||||
<value>Order</value>
|
||||
</data>
|
||||
<data name="Requests_Filter" xml:space="preserve">
|
||||
<value>Filter</value>
|
||||
</data>
|
||||
<data name="Requests_Order_LatestRequests" xml:space="preserve">
|
||||
<value>Latest Requests</value>
|
||||
</data>
|
||||
<data name="Requests_Order_OldestRequests" xml:space="preserve">
|
||||
<value>Oldest Requests</value>
|
||||
</data>
|
||||
<data name="Requests_Order_LatestReleases" xml:space="preserve">
|
||||
<value>Latest Releases</value>
|
||||
</data>
|
||||
<data name="Requests_Order_OldestReleases" xml:space="preserve">
|
||||
<value>Oldest Releases</value>
|
||||
</data>
|
||||
<data name="Requests_ReleaseDate" xml:space="preserve">
|
||||
<value>Release Date</value>
|
||||
</data>
|
||||
<data name="Requests_SeasonsRequested" xml:space="preserve">
|
||||
<value>Seasons Requested</value>
|
||||
</data>
|
||||
<data name="Requests_RequestedBy" xml:space="preserve">
|
||||
<value>Requested By</value>
|
||||
</data>
|
||||
<data name="Requests_RequestedDate" xml:space="preserve">
|
||||
<value>Requested Date</value>
|
||||
</data>
|
||||
<data name="Requests_ToggleDropdown" xml:space="preserve">
|
||||
<value>Toggle Dropdown</value>
|
||||
</data>
|
||||
<data name="Common_Approve" xml:space="preserve">
|
||||
<value>Approve</value>
|
||||
</data>
|
||||
<data name="Common_Remove" xml:space="preserve">
|
||||
<value>Remove</value>
|
||||
</data>
|
||||
<data name="Requests_MarkUnavailable" xml:space="preserve">
|
||||
<value>Mark Unavailable</value>
|
||||
</data>
|
||||
<data name="Requests_MarkAvailable" xml:space="preserve">
|
||||
<value>Mark Available</value>
|
||||
</data>
|
||||
<data name="Common_Approved" xml:space="preserve">
|
||||
<value>Approved</value>
|
||||
</data>
|
||||
<data name="Requests_Available" xml:space="preserve">
|
||||
<value>Available</value>
|
||||
</data>
|
||||
<data name="Issues_Issue" xml:space="preserve">
|
||||
<value>Issue</value>
|
||||
</data>
|
||||
<data name="Search_SuccessfullyAdded" xml:space="preserve">
|
||||
<value>was successfully added!</value>
|
||||
</data>
|
||||
<data name="Search_AlreadyRequested" xml:space="preserve">
|
||||
<value>has already been requested!</value>
|
||||
</data>
|
||||
<data name="Search_CouldNotCheckPlex" xml:space="preserve">
|
||||
<value>We could not check if {0} is in Plex, are you sure it's correctly setup?</value>
|
||||
</data>
|
||||
<data name="Search_CouchPotatoError" xml:space="preserve">
|
||||
<value>Something went wrong adding the movie to CouchPotato! Please check your settings.</value>
|
||||
</data>
|
||||
<data name="Search_WeeklyRequestLimitMovie" xml:space="preserve">
|
||||
<value>You have reached your weekly request limit for Movies! Please contact your admin.</value>
|
||||
</data>
|
||||
<data name="Search_AlreadyInPlex" xml:space="preserve">
|
||||
<value>is already in Plex!</value>
|
||||
</data>
|
||||
<data name="Search_SickrageError" xml:space="preserve">
|
||||
<value>Something went wrong adding the movie to SickRage! Please check your settings.</value>
|
||||
</data>
|
||||
<data name="Search_TvNotSetUp" xml:space="preserve">
|
||||
<value>The request of TV Shows is not correctly set up. Please contact your admin.</value>
|
||||
</data>
|
||||
<data name="Search_WeeklyRequestLimitAlbums" xml:space="preserve">
|
||||
<value>You have reached your weekly request limit for Albums! Please contact your admin.</value>
|
||||
</data>
|
||||
<data name="Search_MusicBrainzError" xml:space="preserve">
|
||||
<value>We could not find the artist on MusicBrainz. Please try again later or contact your admin</value>
|
||||
</data>
|
||||
<data name="Search_WeeklyRequestLimitTVShow" xml:space="preserve">
|
||||
<value>You have reached your weekly request limit for TV Shows! Please contact your admin.</value>
|
||||
</data>
|
||||
<data name="Search_ErrorPlexAccountOnly" xml:space="preserve">
|
||||
<value>Sorry, but this functionality is currently only for users with Plex accounts</value>
|
||||
</data>
|
||||
<data name="Search_ErrorNotEnabled" xml:space="preserve">
|
||||
<value>Sorry, but your administrator has not yet enabled this functionality.</value>
|
||||
</data>
|
||||
<data name="Search_NotificationError" xml:space="preserve">
|
||||
<value>We could not remove this notification because you never had it!</value>
|
||||
</data>
|
||||
<data name="Common_CouldNotSave" xml:space="preserve">
|
||||
<value>Could not save, please try again</value>
|
||||
</data>
|
||||
</root>
|
@ -1,123 +1,151 @@
|
||||
@using PlexRequests.UI.Helpers
|
||||
@Html.Partial("_Sidebar")
|
||||
@Html.LoadTableAssets()
|
||||
|
||||
@{
|
||||
var baseUrl = Html.GetBaseUrl();
|
||||
var formAction = "/admin/loglevel";
|
||||
if (!string.IsNullOrEmpty(baseUrl.ToHtmlString()))
|
||||
{
|
||||
formAction = "/" + baseUrl.ToHtmlString() + formAction;
|
||||
}
|
||||
}
|
||||
|
||||
<div class="col-sm-8 col-sm-push-1">
|
||||
<fieldset>
|
||||
<legend>Logs</legend>
|
||||
<form method="post" id="mainForm" action="@formAction">
|
||||
<div class="form-group">
|
||||
<label for="logLevel" class="control-label">Log Level</label>
|
||||
<div id="logLevel">
|
||||
<select class="form-control" id="selected">
|
||||
<option id="Trace" value="0">Trace</option>
|
||||
<option id="Debug" value="1">Debug</option>
|
||||
<option id="Info" value="2">Info</option>
|
||||
<option id="Warn" value="3">Warn</option>
|
||||
<option id="Error" value="4">Error</option>
|
||||
<option id="Fatal" value="5">Fatal</option>
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<div>
|
||||
<button id="save" type="submit" class="btn btn-primary-outline ">Submit</button>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
|
||||
<table id="example" class="table table-striped table-hover table-responsive">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Message</th>
|
||||
<th>Area</th>
|
||||
<th>Log Level</th>
|
||||
<th>Date</th>
|
||||
</tr>
|
||||
</thead>
|
||||
|
||||
</table>
|
||||
</fieldset>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
<script>
|
||||
$(function () {
|
||||
var baseUrl = '@Html.GetBaseUrl()';
|
||||
|
||||
var logsUrl = "/admin/loadlogs";
|
||||
var url = createBaseUrl(baseUrl, logsUrl);
|
||||
$('#example').DataTable({
|
||||
"ajax": url,
|
||||
"columns": [
|
||||
{ "data": "message" },
|
||||
{ "data": "logger" },
|
||||
{ "data": "level" },
|
||||
{ "data": "dateString" }
|
||||
],
|
||||
"order": [[3, "desc"]]
|
||||
});
|
||||
|
||||
|
||||
var logUrl = "/admin/loglevel";
|
||||
logUrl = createBaseUrl(baseUrl, logUrl);
|
||||
$.ajax({
|
||||
type: "get",
|
||||
url: logUrl,
|
||||
dataType: "json",
|
||||
success: function (response) {
|
||||
if (response && response.length > 0) {
|
||||
$("#selected > option").each(function (level) {
|
||||
var $opt = $(this);
|
||||
if (response[0].ordinal == level) {
|
||||
$opt.prop("selected", "selected");
|
||||
}
|
||||
});
|
||||
}
|
||||
},
|
||||
error: function (e) {
|
||||
console.log(e);
|
||||
generateNotify("Something went wrong!", "danger");
|
||||
}
|
||||
});
|
||||
|
||||
$('#save').click(function (e) {
|
||||
e.preventDefault();
|
||||
|
||||
var logLevel = $("#logLevel option:selected").val();
|
||||
|
||||
var $form = $("#mainForm");
|
||||
var data = "level=" + logLevel;
|
||||
|
||||
$.ajax({
|
||||
type: $form.prop("method"),
|
||||
data: data,
|
||||
url: $form.prop("action"),
|
||||
dataType: "json",
|
||||
success: function (response) {
|
||||
if (response.result === true) {
|
||||
generateNotify(response.message, "success");
|
||||
} else {
|
||||
generateNotify(response.message, "warning");
|
||||
}
|
||||
},
|
||||
error: function (e) {
|
||||
console.log(e);
|
||||
generateNotify("Something went wrong!", "danger");
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
|
||||
});
|
||||
@using PlexRequests.UI.Helpers
|
||||
@Html.Partial("_Sidebar")
|
||||
@Html.LoadTableAssets()
|
||||
|
||||
@{
|
||||
var baseUrl = Html.GetBaseUrl();
|
||||
var formAction = "/admin/loglevel";
|
||||
var clearAction = "/admin/clearlogs";
|
||||
if (!string.IsNullOrEmpty(baseUrl.ToHtmlString()))
|
||||
{
|
||||
formAction = "/" + baseUrl.ToHtmlString() + formAction;
|
||||
clearAction = "/" + baseUrl.ToHtmlString() + clearAction;
|
||||
}
|
||||
}
|
||||
|
||||
<div class="col-sm-8 col-sm-push-1">
|
||||
<fieldset>
|
||||
<legend>Logs</legend>
|
||||
<form method="post" id="mainForm" action="@formAction">
|
||||
<div class="form-group">
|
||||
<label for="logLevel" class="control-label">Log Level</label>
|
||||
<div id="logLevel">
|
||||
<select class="form-control" id="selected">
|
||||
<option id="Trace" value="0">Trace</option>
|
||||
<option id="Debug" value="1">Debug</option>
|
||||
<option id="Info" value="2">Info</option>
|
||||
<option id="Warn" value="3">Warn</option>
|
||||
<option id="Error" value="4">Error</option>
|
||||
<option id="Fatal" value="5">Fatal</option>
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<div>
|
||||
<button id="save" type="submit" class="btn btn-primary-outline ">Submit</button>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
|
||||
<form method="post" id="clearForm" action="@clearAction">
|
||||
<button id="clearLogs" type="submit" class="btn btn-danger-outline ">Clear Logs</button>
|
||||
</form>
|
||||
|
||||
<table id="example" class="table table-striped table-hover table-responsive">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Message</th>
|
||||
<th>Area</th>
|
||||
<th>Log Level</th>
|
||||
<th>Date</th>
|
||||
</tr>
|
||||
</thead>
|
||||
|
||||
</table>
|
||||
</fieldset>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
<script>
|
||||
$(function () {
|
||||
var baseUrl = '@Html.GetBaseUrl()';
|
||||
|
||||
var logsUrl = "/admin/loadlogs";
|
||||
var url = createBaseUrl(baseUrl, logsUrl);
|
||||
$('#example').DataTable({
|
||||
"ajax": url,
|
||||
"columns": [
|
||||
{ "data": "message" },
|
||||
{ "data": "logger" },
|
||||
{ "data": "level" },
|
||||
{ "data": "dateString" }
|
||||
],
|
||||
"order": [[3, "desc"]]
|
||||
});
|
||||
|
||||
|
||||
var logUrl = "/admin/loglevel";
|
||||
logUrl = createBaseUrl(baseUrl, logUrl);
|
||||
$.ajax({
|
||||
type: "get",
|
||||
url: logUrl,
|
||||
dataType: "json",
|
||||
success: function (response) {
|
||||
if (response && response.length > 0) {
|
||||
$("#selected > option").each(function (level) {
|
||||
var $opt = $(this);
|
||||
if (response[0].ordinal == level) {
|
||||
$opt.prop("selected", "selected");
|
||||
}
|
||||
});
|
||||
}
|
||||
},
|
||||
error: function (e) {
|
||||
console.log(e);
|
||||
generateNotify("Something went wrong!", "danger");
|
||||
}
|
||||
});
|
||||
|
||||
$('#save').click(function (e) {
|
||||
e.preventDefault();
|
||||
|
||||
var logLevel = $("#logLevel option:selected").val();
|
||||
|
||||
var $form = $("#mainForm");
|
||||
var data = "level=" + logLevel;
|
||||
|
||||
$.ajax({
|
||||
type: $form.prop("method"),
|
||||
data: data,
|
||||
url: $form.prop("action"),
|
||||
dataType: "json",
|
||||
success: function (response) {
|
||||
if (response.result === true) {
|
||||
generateNotify(response.message, "success");
|
||||
} else {
|
||||
generateNotify(response.message, "warning");
|
||||
}
|
||||
},
|
||||
error: function (e) {
|
||||
console.log(e);
|
||||
generateNotify("Something went wrong!", "danger");
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
$('#clearLogs').click(function(e) {
|
||||
e.preventDefault();
|
||||
var $form = $("#clearForm");
|
||||
|
||||
$.ajax({
|
||||
type: $form.prop("method"),
|
||||
url: $form.prop("action"),
|
||||
dataType: "json",
|
||||
success: function (response) {
|
||||
if (response.result === true) {
|
||||
generateNotify(response.message, "success");
|
||||
} else {
|
||||
generateNotify(response.message, "warning");
|
||||
}
|
||||
},
|
||||
error: function (e) {
|
||||
console.log(e);
|
||||
generateNotify("Something went wrong!", "danger");
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
|
||||
});
|
||||
</script>
|
@ -1,71 +1,71 @@
|
||||
@using PlexRequests.UI.Helpers
|
||||
@Html.Partial("_Sidebar")
|
||||
|
||||
<div class="col-sm-8 col-sm-push-1">
|
||||
<fieldset>
|
||||
<legend>Status</legend>
|
||||
|
||||
|
||||
<div class="form-group">
|
||||
<label class="control-label">Version: </label>
|
||||
<label class="control-label">@Model.Version</label>
|
||||
</div>
|
||||
|
||||
<div class="form-group">
|
||||
<label class="control-label">Update Available: </label>
|
||||
@if (Model.UpdateAvailable)
|
||||
{
|
||||
<label class="control-label"><a href="@Model.UpdateUri" target="_blank"><i class="fa fa-check"></i></a></label>
|
||||
<br />
|
||||
<button id="autoUpdate" class="btn btn-success-outline">Automatic Update <i class="fa fa-download"></i></button>
|
||||
}
|
||||
else
|
||||
{
|
||||
<label class="control-label"><i class="fa fa-times"></i></label>
|
||||
}
|
||||
|
||||
</div>
|
||||
|
||||
@if (Model.UpdateAvailable)
|
||||
{
|
||||
<h2>
|
||||
<a href="@Model.DownloadUri">@Model.ReleaseTitle</a>
|
||||
</h2>
|
||||
<hr />
|
||||
<label>Release Notes:</label>
|
||||
@Html.Raw(Model.ReleaseNotes)
|
||||
}
|
||||
|
||||
|
||||
</fieldset>
|
||||
</div>
|
||||
|
||||
<script>
|
||||
|
||||
var base = '@Html.GetBaseUrl()';
|
||||
$('#autoUpdate')
|
||||
.click(function (e) {
|
||||
e.preventDefault();
|
||||
$('body').append("<i class=\"fa fa-spinner fa-spin fa-5x fa-fw\" style=\"position: absolute; top: 20%; left: 50%;\"></i>");
|
||||
$('#autoUpdate').prop("disabled", "disabled");
|
||||
var count = 0;
|
||||
setInterval(function () {
|
||||
count++;
|
||||
var dots = new Array(count % 10).join('.');
|
||||
document.getElementById('autoUpdate').innerHTML = "Updating" + dots;
|
||||
}, 1000);
|
||||
|
||||
$.ajax({
|
||||
type: "Post",
|
||||
url: "autoupdate",
|
||||
data: { url: "@Model.DownloadUri" },
|
||||
dataType: "json",
|
||||
error: function () {
|
||||
setTimeout(
|
||||
function () {
|
||||
location.reload();
|
||||
}, 30000);
|
||||
}
|
||||
});
|
||||
});
|
||||
@using PlexRequests.UI.Helpers
|
||||
@Html.Partial("_Sidebar")
|
||||
|
||||
<div class="col-sm-8 col-sm-push-1">
|
||||
<fieldset>
|
||||
<legend>Status</legend>
|
||||
|
||||
|
||||
<div class="form-group">
|
||||
<label class="control-label">Version: </label>
|
||||
<label class="control-label">@Model.Version</label>
|
||||
</div>
|
||||
|
||||
<div class="form-group">
|
||||
<label class="control-label">Update Available: </label>
|
||||
@if (Model.UpdateAvailable)
|
||||
{
|
||||
<label class="control-label"><a href="@Model.UpdateUri" target="_blank"><i class="fa fa-check"></i></a></label>
|
||||
<br />
|
||||
@*<button id="autoUpdate" class="btn btn-success-outline">Automatic Update <i class="fa fa-download"></i></button>*@ //TODO
|
||||
}
|
||||
else
|
||||
{
|
||||
<label class="control-label"><i class="fa fa-times"></i></label>
|
||||
}
|
||||
|
||||
</div>
|
||||
|
||||
@if (Model.UpdateAvailable)
|
||||
{
|
||||
<h2>
|
||||
<a href="@Model.DownloadUri">@Model.ReleaseTitle</a>
|
||||
</h2>
|
||||
<hr />
|
||||
<label>Release Notes:</label>
|
||||
@Html.Raw(Model.ReleaseNotes)
|
||||
}
|
||||
|
||||
|
||||
</fieldset>
|
||||
</div>
|
||||
|
||||
<script>
|
||||
|
||||
var base = '@Html.GetBaseUrl()';
|
||||
$('#autoUpdate')
|
||||
.click(function (e) {
|
||||
e.preventDefault();
|
||||
$('body').append("<i class=\"fa fa-spinner fa-spin fa-5x fa-fw\" style=\"position: absolute; top: 20%; left: 50%;\"></i>");
|
||||
$('#autoUpdate').prop("disabled", "disabled");
|
||||
var count = 0;
|
||||
setInterval(function () {
|
||||
count++;
|
||||
var dots = new Array(count % 10).join('.');
|
||||
document.getElementById('autoUpdate').innerHTML = "Updating" + dots;
|
||||
}, 1000);
|
||||
|
||||
$.ajax({
|
||||
type: "Post",
|
||||
url: "autoupdate",
|
||||
data: { url: "@Model.DownloadUri" },
|
||||
dataType: "json",
|
||||
error: function () {
|
||||
setTimeout(
|
||||
function () {
|
||||
location.reload();
|
||||
}, 30000);
|
||||
}
|
||||
});
|
||||
});
|
||||
</script>
|
@ -1,326 +1,327 @@
|
||||
@using PlexRequests.UI.Helpers
|
||||
@{
|
||||
var baseUrl = Html.GetBaseUrl();
|
||||
var url = string.Empty;
|
||||
if (!string.IsNullOrEmpty(baseUrl.ToHtmlString()))
|
||||
{
|
||||
url = "/" + baseUrl.ToHtmlString();
|
||||
}
|
||||
}
|
||||
<div>
|
||||
<h1>Search</h1>
|
||||
<h4>Want to watch something that is not currently on Plex?! No problem! Just search for it below and request it!</h4>
|
||||
<br />
|
||||
<!-- Nav tabs -->
|
||||
|
||||
|
||||
<ul id="nav-tabs" class="nav nav-tabs" role="tablist">
|
||||
@if (Model.SearchForMovies)
|
||||
{
|
||||
<li role="presentation" class="active">
|
||||
<a href="#MoviesTab" aria-controls="home" role="tab" data-toggle="tab"><i class="fa fa-film"></i> Movies</a>
|
||||
|
||||
</li>
|
||||
}
|
||||
@if (Model.SearchForTvShows)
|
||||
{
|
||||
<li role="presentation">
|
||||
<a href="#TvShowTab" aria-controls="profile" role="tab" data-toggle="tab"><i class="fa fa-television"></i> TV Shows</a>
|
||||
|
||||
</li>
|
||||
}
|
||||
@if (Model.SearchForMusic)
|
||||
{
|
||||
<li role="presentation">
|
||||
<a href="#MusicTab" aria-controls="profile" role="tab" data-toggle="tab"><i class="fa fa-music"></i>Albums</a>
|
||||
</li>
|
||||
}
|
||||
|
||||
<li role="presentation" class="nav-tab-right nav-tab-icononly">
|
||||
<a href="#NotificationsTab" aria-controls="profile" role="tab" data-toggle="tab"><i class="fa fa-bell"></i></a>
|
||||
|
||||
</li>
|
||||
|
||||
</ul>
|
||||
|
||||
<!-- Tab panes -->
|
||||
<div class="tab-content">
|
||||
@if (Model.SearchForMovies)
|
||||
{
|
||||
<!-- Movie tab -->
|
||||
<div role="tabpanel" class="tab-pane active" id="MoviesTab">
|
||||
<div class="input-group">
|
||||
<input id="movieSearchContent" type="text" class="form-control form-control-custom form-control-search form-control-withbuttons">
|
||||
<div class="input-group-addon">
|
||||
<div class="btn-group">
|
||||
<a href="#" class="btn btn-sm btn-primary-outline dropdown-toggle" data-toggle="dropdown" aria-expanded="false">
|
||||
Suggestions
|
||||
<i class="fa fa-chevron-down"></i>
|
||||
</a>
|
||||
<ul class="dropdown-menu">
|
||||
<li><a id="moviesComingSoon" href="#">Coming Soon</a></li>
|
||||
<li><a id="moviesInTheaters" href="#">In Theaters</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<i id="movieSearchButton" class="fa fa-search"></i>
|
||||
</div>
|
||||
</div>
|
||||
<br />
|
||||
<br />
|
||||
<!-- Movie content -->
|
||||
<div id="movieList">
|
||||
</div>
|
||||
</div>
|
||||
}
|
||||
|
||||
|
||||
@if (Model.SearchForTvShows)
|
||||
{
|
||||
<!-- TV tab -->
|
||||
<div role="tabpanel" class="tab-pane" id="TvShowTab">
|
||||
<div class="input-group">
|
||||
<input id="tvSearchContent" type="text" class="form-control form-control-custom form-control-search">
|
||||
<div class="input-group-addon">
|
||||
<i id="tvSearchButton" class="fa fa-search"></i>
|
||||
</div>
|
||||
</div>
|
||||
<br />
|
||||
<br />
|
||||
<!-- TV content -->
|
||||
<div id="tvList">
|
||||
</div>
|
||||
</div>
|
||||
}
|
||||
|
||||
@if (Model.SearchForMusic)
|
||||
{
|
||||
<!-- Music tab -->
|
||||
<div role="tabpanel" class="tab-pane" id="MusicTab">
|
||||
<div class="input-group">
|
||||
<input id="musicSearchContent" type="text" class="form-control form-control-custom form-control-search">
|
||||
<div class="input-group-addon">
|
||||
<i id="musicSearchButton" class="fa fa-search"></i>
|
||||
</div>
|
||||
</div>
|
||||
<br />
|
||||
<br />
|
||||
<!-- Music content -->
|
||||
<div id="musicList">
|
||||
</div>
|
||||
</div>
|
||||
}
|
||||
|
||||
<!-- Notification tab -->
|
||||
<div role="tabpanel" class="tab-pane" id="NotificationsTab">
|
||||
<div class="input-group">
|
||||
<div class="input-group-addon input-group-sm"></div>
|
||||
</div>
|
||||
<br />
|
||||
|
||||
<!-- Notifications content -->
|
||||
<form class="form-horizontal" method="POST" id="notificationsForm">
|
||||
<fieldset>
|
||||
<div class="form-group">
|
||||
<div class="checkbox">
|
||||
<input type="checkbox" id="notifyUser" name="Notify">
|
||||
<label for="notifyUser">Send me a notification when items I have requested have been added</label>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<div>
|
||||
<button id="saveNotificationSettings" class="btn btn-primary-outline">Save</button>
|
||||
</div>
|
||||
</div>
|
||||
</fieldset>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Movie and TV Results template -->
|
||||
<script id="search-template" type="text/x-handlebars-template">
|
||||
<div class="row">
|
||||
<div class="col-sm-2">
|
||||
|
||||
{{#if_eq type "movie"}}
|
||||
{{#if posterPath}}
|
||||
<img class="img-responsive" src="https://image.tmdb.org/t/p/w150/{{posterPath}}" alt="poster">
|
||||
{{/if}}
|
||||
{{/if_eq}}
|
||||
{{#if_eq type "tv"}}
|
||||
{{#if posterPath}}
|
||||
<img class="img-responsive" width="150" src="{{posterPath}}" alt="poster">
|
||||
{{/if}}
|
||||
{{/if_eq}}
|
||||
|
||||
</div>
|
||||
<div class="col-sm-5 ">
|
||||
<div>
|
||||
{{#if_eq type "movie"}}
|
||||
<a href="https://www.themoviedb.org/movie/{{id}}/" target="_blank">
|
||||
<h4>{{title}} ({{year}})</h4>
|
||||
</a>
|
||||
{{else}}
|
||||
<a href="http://www.imdb.com/title/{{imdb}}/" target="_blank">
|
||||
<h4>{{title}} ({{year}})</h4>
|
||||
</a>
|
||||
{{/if_eq}}
|
||||
</div>
|
||||
<p>{{overview}}</p>
|
||||
</div>
|
||||
<div class="col-sm-2 col-sm-push-3">
|
||||
<form method="POST" action="@url/search/request/{{type}}" id="form{{id}}">
|
||||
<input name="{{type}}Id" type="text" value="{{id}}" hidden="hidden" />
|
||||
{{#if_eq available true}}
|
||||
<button style="text-align: right" class="btn btn-success-outline disabled" disabled><i class="fa fa-check"></i> Available</button>
|
||||
{{else}}
|
||||
{{#if_eq requested true}}
|
||||
<button style="text-align: right" class="btn btn-primary-outline disabled" disabled><i class="fa fa-check"></i> Requested</button>
|
||||
{{else}}
|
||||
{{#if_eq type "movie"}}
|
||||
<button id="{{id}}" style="text-align: right" class="btn btn-primary-outline requestMovie" type="submit"><i class="fa fa-plus"></i> Request</button>
|
||||
{{/if_eq}}
|
||||
{{#if_eq type "tv"}}
|
||||
<div class="dropdown">
|
||||
<button id="{{id}}" class="btn btn-primary-outline dropdown-toggle" type="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="true">
|
||||
<i class="fa fa-plus"></i> Request
|
||||
<span class="caret"></span>
|
||||
</button>
|
||||
<ul class="dropdown-menu" aria-labelledby="dropdownMenu1">
|
||||
<li><a id="{{id}}" season-select="0" class="dropdownTv " href="#">All Seasons</a></li>
|
||||
<li><a id="{{id}}" season-select="1" class="dropdownTv" href="#">First Season</a></li>
|
||||
<li><a id="{{id}}" season-select="2" class="dropdownTv" href="#">Latest Season</a></li>
|
||||
<li><a id="SeasonSelect" data-identifier="{{id}}" data-toggle="modal" data-target="#seasonsModal" href="#">Select...</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
{{/if_eq}}
|
||||
{{/if_eq}}
|
||||
{{/if_eq}}
|
||||
|
||||
<br />
|
||||
</form>
|
||||
{{#if_eq available true}}
|
||||
<form method="POST" action="@url/issues/nonrequestissue/" id="report{{id}}">
|
||||
<input name="providerId" type="text" value="{{id}}" hidden="hidden" />
|
||||
<input name="type" type="text" value="{{type}}" hidden="hidden" />
|
||||
<div class="dropdown">
|
||||
<button id="{{id}}" class="btn btn-sm btn-danger-outline dropdown-toggle" type="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="true">
|
||||
<i class="fa fa-exclamation"></i> Report Issue
|
||||
<span class="caret"></span>
|
||||
</button>
|
||||
<ul class="dropdown-menu" aria-labelledby="dropdownMenu1">
|
||||
<li><a id="{{id}}" issue-select="0" class="dropdownIssue" href="#">Wrong Audio</a></li>
|
||||
<li><a id="{{id}}" issue-select="1" class="dropdownIssue" href="#">No Subtitles</a></li>
|
||||
<li><a id="{{id}}" issue-select="2" class="dropdownIssue" href="#">Wrong Content</a></li>
|
||||
<li><a id="{{id}}" issue-select="3" class="dropdownIssue" href="#">Playback Issues</a></li>
|
||||
<li><a id="{{id}}" issue-select="4" class="dropdownIssue" data-identifier="{{id}}" data-type="{{type}}" href="#" data-toggle="modal" data-target="#issuesModal">Other</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
</form>
|
||||
{{/if_eq}}
|
||||
</div>
|
||||
|
||||
</div>
|
||||
<hr />
|
||||
</script>
|
||||
|
||||
|
||||
<!-- Music Results template -->
|
||||
<script id="music-template" type="text/x-handlebars-template">
|
||||
<div class="row">
|
||||
<div id="{{id}}imageDiv" class="col-sm-2">
|
||||
{{#if coverArtUrl}}
|
||||
<img id="{{id}}cover" class="img-responsive" src="{{coverArtUrl}}" width="150" alt="poster">
|
||||
{{/if}}
|
||||
</div>
|
||||
<div class="col-sm-5 ">
|
||||
<div>
|
||||
<a href="https://musicbrainz.org/release/{{id}}" target="_blank">
|
||||
<h4>
|
||||
{{artist}} - {{title}}
|
||||
{{#if year}}
|
||||
({{year}})
|
||||
{{/if}}
|
||||
</h4>
|
||||
</a>
|
||||
|
||||
</div>
|
||||
<p>{{overview}}</p>
|
||||
</div>
|
||||
<div class="col-sm-2 col-sm-push-3">
|
||||
<form method="POST" action="@url/search/request/{{type}}" id="form{{id}}">
|
||||
<input name="{{type}}Id" type="text" value="{{id}}" hidden="hidden" />
|
||||
{{#if_eq available true}}
|
||||
<button style="text-align: right" class="btn btn-success-outline disabled" disabled><i class="fa fa-check"></i> Available</button>
|
||||
{{else}}
|
||||
{{#if_eq requested true}}
|
||||
<button style="text-align: right" class="btn btn-success-outline disabled" disabled><i class="fa fa-check"></i> Requested</button>
|
||||
{{else}}
|
||||
<button id="{{id}}" style="text-align: right" class="btn btn-primary-outline requestAlbum" type="submit"><i class="fa fa-plus"></i> Request</button>
|
||||
{{/if_eq}}
|
||||
{{/if_eq}}
|
||||
<br />
|
||||
<small class="row">Track Count: {{trackCount}}</small>
|
||||
<small class="row">Country: {{country}}</small>
|
||||
</form>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
<hr />
|
||||
|
||||
</script>
|
||||
|
||||
<div class="modal fade" id="seasonsModal">
|
||||
<div class="modal-dialog">
|
||||
<div class="modal-content">
|
||||
<div class="modal-header">
|
||||
<button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button>
|
||||
<h4 class="modal-title">Seasons</h4>
|
||||
</div>
|
||||
<div class="modal-body" id="seasonsBody">
|
||||
|
||||
</div>
|
||||
|
||||
<div hidden="hidden" id="selectedSeasonsId"></div>
|
||||
<div class="modal-footer">
|
||||
<button type="button" class="btn btn-default" data-dismiss="modal">Close</button>
|
||||
<button type="button" id="seasonsRequest" class="btn btn-primary">Request</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
<div class="modal fade" id="issuesModal">
|
||||
<div class="modal-dialog">
|
||||
<div class="modal-content">
|
||||
<div class="modal-header">
|
||||
<button type="button" class="close" data-dismiss="modal" aria-hidden="true"><i class="fa fa-times"></i></button>
|
||||
<h4 class="modal-title">Add an issue</h4>
|
||||
</div>
|
||||
<form method="POST" action="@url/issues/nonrequestissuecomment" id="commentForm">
|
||||
<div class="modal-body">
|
||||
<input id="providerIdModal" name="providerId" class="providerId" type="text" hidden="hidden" value="" />
|
||||
<input name="issue" class="issue" type="text" hidden="hidden" value="" />
|
||||
<input id="typeModal" name="type" class="type" type="text" hidden="hidden" value="" />
|
||||
<textarea class="form-control form-control-custom" rows="3" id="commentArea" name="commentArea"></textarea>
|
||||
</div>
|
||||
<div class="modal-footer">
|
||||
<button type="button" class="btn btn-danger-outline" data-dismiss="modal">Close</button>
|
||||
<button type="button" class="btn btn-primary-outline theSaveButton" data-dismiss="modal">Save changes</button>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<script id="seasons-template" type="text/x-handlebars-template">
|
||||
<div class="form-group">
|
||||
<div class="checkbox">
|
||||
<input type="checkbox" class="selectedSeasons" id="{{id}}" name="{{id}}"><label for="{{id}}">Season {{id}}</label>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</script>
|
||||
|
||||
@Html.LoadSearchAssets()
|
||||
@using PlexRequests.UI.Helpers
|
||||
@using PlexRequests.UI.Resources
|
||||
@{
|
||||
var baseUrl = Html.GetBaseUrl();
|
||||
var url = string.Empty;
|
||||
if (!string.IsNullOrEmpty(baseUrl.ToHtmlString()))
|
||||
{
|
||||
url = "/" + baseUrl.ToHtmlString();
|
||||
}
|
||||
}
|
||||
<div>
|
||||
<h1>@UI.Search_Title</h1>
|
||||
<h4>@UI.Search_Paragraph</h4>
|
||||
<br />
|
||||
<!-- Nav tabs -->
|
||||
|
||||
|
||||
<ul id="nav-tabs" class="nav nav-tabs" role="tablist">
|
||||
@if (Model.SearchForMovies)
|
||||
{
|
||||
<li role="presentation" class="active">
|
||||
<a href="#MoviesTab" aria-controls="home" role="tab" data-toggle="tab"><i class="fa fa-film"></i> @UI.Search_Movies</a>
|
||||
|
||||
</li>
|
||||
}
|
||||
@if (Model.SearchForTvShows)
|
||||
{
|
||||
<li role="presentation">
|
||||
<a href="#TvShowTab" aria-controls="profile" role="tab" data-toggle="tab"><i class="fa fa-television"></i> @UI.Search_TvShows</a>
|
||||
|
||||
</li>
|
||||
}
|
||||
@if (Model.SearchForMusic)
|
||||
{
|
||||
<li role="presentation">
|
||||
<a href="#MusicTab" aria-controls="profile" role="tab" data-toggle="tab"><i class="fa fa-music"></i>@UI.Search_Albums</a>
|
||||
</li>
|
||||
}
|
||||
|
||||
<li role="presentation" class="nav-tab-right nav-tab-icononly">
|
||||
<a href="#NotificationsTab" aria-controls="profile" role="tab" data-toggle="tab"><i class="fa fa-bell"></i></a>
|
||||
|
||||
</li>
|
||||
|
||||
</ul>
|
||||
|
||||
<!-- Tab panes -->
|
||||
<div class="tab-content">
|
||||
@if (Model.SearchForMovies)
|
||||
{
|
||||
<!-- Movie tab -->
|
||||
<div role="tabpanel" class="tab-pane active" id="MoviesTab">
|
||||
<div class="input-group">
|
||||
<input id="movieSearchContent" type="text" class="form-control form-control-custom form-control-search form-control-withbuttons">
|
||||
<div class="input-group-addon">
|
||||
<div class="btn-group">
|
||||
<a href="#" class="btn btn-sm btn-primary-outline dropdown-toggle" data-toggle="dropdown" aria-expanded="false">
|
||||
@UI.Search_Suggestions
|
||||
<i class="fa fa-chevron-down"></i>
|
||||
</a>
|
||||
<ul class="dropdown-menu">
|
||||
<li><a id="moviesComingSoon" href="#">@UI.Search_ComingSoon</a></li>
|
||||
<li><a id="moviesInTheaters" href="#">@UI.Search_InTheaters</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<i id="movieSearchButton" class="fa fa-search"></i>
|
||||
</div>
|
||||
</div>
|
||||
<br />
|
||||
<br />
|
||||
<!-- Movie content -->
|
||||
<div id="movieList">
|
||||
</div>
|
||||
</div>
|
||||
}
|
||||
|
||||
|
||||
@if (Model.SearchForTvShows)
|
||||
{
|
||||
<!-- TV tab -->
|
||||
<div role="tabpanel" class="tab-pane" id="TvShowTab">
|
||||
<div class="input-group">
|
||||
<input id="tvSearchContent" type="text" class="form-control form-control-custom form-control-search">
|
||||
<div class="input-group-addon">
|
||||
<i id="tvSearchButton" class="fa fa-search"></i>
|
||||
</div>
|
||||
</div>
|
||||
<br />
|
||||
<br />
|
||||
<!-- TV content -->
|
||||
<div id="tvList">
|
||||
</div>
|
||||
</div>
|
||||
}
|
||||
|
||||
@if (Model.SearchForMusic)
|
||||
{
|
||||
<!-- Music tab -->
|
||||
<div role="tabpanel" class="tab-pane" id="MusicTab">
|
||||
<div class="input-group">
|
||||
<input id="musicSearchContent" type="text" class="form-control form-control-custom form-control-search">
|
||||
<div class="input-group-addon">
|
||||
<i id="musicSearchButton" class="fa fa-search"></i>
|
||||
</div>
|
||||
</div>
|
||||
<br />
|
||||
<br />
|
||||
<!-- Music content -->
|
||||
<div id="musicList">
|
||||
</div>
|
||||
</div>
|
||||
}
|
||||
|
||||
<!-- Notification tab -->
|
||||
<div role="tabpanel" class="tab-pane" id="NotificationsTab">
|
||||
<div class="input-group">
|
||||
<div class="input-group-addon input-group-sm"></div>
|
||||
</div>
|
||||
<br />
|
||||
|
||||
<!-- Notifications content -->
|
||||
<form class="form-horizontal" method="POST" id="notificationsForm">
|
||||
<fieldset>
|
||||
<div class="form-group">
|
||||
<div class="checkbox">
|
||||
<input type="checkbox" id="notifyUser" name="Notify">
|
||||
<label for="notifyUser">@UI.Search_SendNotificationText</label>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<div>
|
||||
<button id="saveNotificationSettings" class="btn btn-primary-outline">@UI.Common_Save</button>
|
||||
</div>
|
||||
</div>
|
||||
</fieldset>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Movie and TV Results template -->
|
||||
<script id="search-template" type="text/x-handlebars-template">
|
||||
<div class="row">
|
||||
<div class="col-sm-2">
|
||||
|
||||
{{#if_eq type "movie"}}
|
||||
{{#if posterPath}}
|
||||
<img class="img-responsive" src="https://image.tmdb.org/t/p/w150/{{posterPath}}" alt="poster">
|
||||
{{/if}}
|
||||
{{/if_eq}}
|
||||
{{#if_eq type "tv"}}
|
||||
{{#if posterPath}}
|
||||
<img class="img-responsive" width="150" src="{{posterPath}}" alt="poster">
|
||||
{{/if}}
|
||||
{{/if_eq}}
|
||||
|
||||
</div>
|
||||
<div class="col-sm-5 ">
|
||||
<div>
|
||||
{{#if_eq type "movie"}}
|
||||
<a href="https://www.themoviedb.org/movie/{{id}}/" target="_blank">
|
||||
<h4>{{title}} ({{year}})</h4>
|
||||
</a>
|
||||
{{else}}
|
||||
<a href="http://www.imdb.com/title/{{imdb}}/" target="_blank">
|
||||
<h4>{{title}} ({{year}})</h4>
|
||||
</a>
|
||||
{{/if_eq}}
|
||||
</div>
|
||||
<p>{{overview}}</p>
|
||||
</div>
|
||||
<div class="col-sm-2 col-sm-push-3">
|
||||
<form method="POST" action="@url/search/request/{{type}}" id="form{{id}}">
|
||||
<input name="{{type}}Id" type="text" value="{{id}}" hidden="hidden" />
|
||||
{{#if_eq available true}}
|
||||
<button style="text-align: right" class="btn btn-success-outline disabled" disabled><i class="fa fa-check"></i> @UI.Search_Available</button>
|
||||
{{else}}
|
||||
{{#if_eq requested true}}
|
||||
<button style="text-align: right" class="btn btn-primary-outline disabled" disabled><i class="fa fa-check"></i> @UI.Search_Requested</button>
|
||||
{{else}}
|
||||
{{#if_eq type "movie"}}
|
||||
<button id="{{id}}" style="text-align: right" class="btn btn-primary-outline requestMovie" type="submit"><i class="fa fa-plus"></i> @UI.Search_Request</button>
|
||||
{{/if_eq}}
|
||||
{{#if_eq type "tv"}}
|
||||
<div class="dropdown">
|
||||
<button id="{{id}}" class="btn btn-primary-outline dropdown-toggle" type="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="true">
|
||||
<i class="fa fa-plus"></i> @UI.Search_Request
|
||||
<span class="caret"></span>
|
||||
</button>
|
||||
<ul class="dropdown-menu" aria-labelledby="dropdownMenu1">
|
||||
<li><a id="{{id}}" season-select="0" class="dropdownTv " href="#">@UI.Search_AllSeasons</a></li>
|
||||
<li><a id="{{id}}" season-select="1" class="dropdownTv" href="#">@UI.Search_FirstSeason</a></li>
|
||||
<li><a id="{{id}}" season-select="2" class="dropdownTv" href="#">@UI.Search_LatestSeason</a></li>
|
||||
<li><a id="SeasonSelect" data-identifier="{{id}}" data-toggle="modal" data-target="#seasonsModal" href="#">@UI.Search_SelectSeason...</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
{{/if_eq}}
|
||||
{{/if_eq}}
|
||||
{{/if_eq}}
|
||||
|
||||
<br />
|
||||
</form>
|
||||
{{#if_eq available true}}
|
||||
<form method="POST" action="@url/issues/nonrequestissue/" id="report{{id}}">
|
||||
<input name="providerId" type="text" value="{{id}}" hidden="hidden" />
|
||||
<input name="type" type="text" value="{{type}}" hidden="hidden" />
|
||||
<div class="dropdown">
|
||||
<button id="{{id}}" class="btn btn-sm btn-danger-outline dropdown-toggle" type="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="true">
|
||||
<i class="fa fa-exclamation"></i> @UI.Search_ReportIssue
|
||||
<span class="caret"></span>
|
||||
</button>
|
||||
<ul class="dropdown-menu" aria-labelledby="dropdownMenu1">
|
||||
<li><a id="{{id}}" issue-select="0" class="dropdownIssue" href="#">@UI.Issues_WrongAudio</a></li>
|
||||
<li><a id="{{id}}" issue-select="1" class="dropdownIssue" href="#">@UI.Issues_NoSubs</a></li>
|
||||
<li><a id="{{id}}" issue-select="2" class="dropdownIssue" href="#">@UI.Issues_WrongContent</a></li>
|
||||
<li><a id="{{id}}" issue-select="3" class="dropdownIssue" href="#">@UI.Issues_Playback</a></li>
|
||||
<li><a id="{{id}}" issue-select="4" class="dropdownIssue" data-identifier="{{id}}" data-type="{{type}}" href="#" data-toggle="modal" data-target="#issuesModal">@UI.Issues_Other</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
</form>
|
||||
{{/if_eq}}
|
||||
</div>
|
||||
|
||||
</div>
|
||||
<hr />
|
||||
</script>
|
||||
|
||||
|
||||
<!-- Music Results template -->
|
||||
<script id="music-template" type="text/x-handlebars-template">
|
||||
<div class="row">
|
||||
<div id="{{id}}imageDiv" class="col-sm-2">
|
||||
{{#if coverArtUrl}}
|
||||
<img id="{{id}}cover" class="img-responsive" src="{{coverArtUrl}}" width="150" alt="poster">
|
||||
{{/if}}
|
||||
</div>
|
||||
<div class="col-sm-5 ">
|
||||
<div>
|
||||
<a href="https://musicbrainz.org/release/{{id}}" target="_blank">
|
||||
<h4>
|
||||
{{artist}} - {{title}}
|
||||
{{#if year}}
|
||||
({{year}})
|
||||
{{/if}}
|
||||
</h4>
|
||||
</a>
|
||||
|
||||
</div>
|
||||
<p>{{overview}}</p>
|
||||
</div>
|
||||
<div class="col-sm-2 col-sm-push-3">
|
||||
<form method="POST" action="@url/search/request/{{type}}" id="form{{id}}">
|
||||
<input name="{{type}}Id" type="text" value="{{id}}" hidden="hidden" />
|
||||
{{#if_eq available true}}
|
||||
<button style="text-align: right" class="btn btn-success-outline disabled" disabled><i class="fa fa-check"></i> @UI.Search_Available</button>
|
||||
{{else}}
|
||||
{{#if_eq requested true}}
|
||||
<button style="text-align: right" class="btn btn-success-outline disabled" disabled><i class="fa fa-check"></i> @UI.Search_Requested</button>
|
||||
{{else}}
|
||||
<button id="{{id}}" style="text-align: right" class="btn btn-primary-outline requestAlbum" type="submit"><i class="fa fa-plus"></i> @UI.Search_Request</button>
|
||||
{{/if_eq}}
|
||||
{{/if_eq}}
|
||||
<br />
|
||||
<small class="row">@UI.Search_TrackCount: {{trackCount}}</small>
|
||||
<small class="row">@UI.Search_Country: {{country}}</small>
|
||||
</form>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
<hr />
|
||||
|
||||
</script>
|
||||
|
||||
<div class="modal fade" id="seasonsModal">
|
||||
<div class="modal-dialog">
|
||||
<div class="modal-content">
|
||||
<div class="modal-header">
|
||||
<button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button>
|
||||
<h4 class="modal-title">@UI.Search_Modal_SeasonsTitle</h4>
|
||||
</div>
|
||||
<div class="modal-body" id="seasonsBody">
|
||||
|
||||
</div>
|
||||
|
||||
<div hidden="hidden" id="selectedSeasonsId"></div>
|
||||
<div class="modal-footer">
|
||||
<button type="button" class="btn btn-default" data-dismiss="modal">@UI.Common_Close</button>
|
||||
<button type="button" id="seasonsRequest" class="btn btn-primary">@UI.Search_Request</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
<div class="modal fade" id="issuesModal">
|
||||
<div class="modal-dialog">
|
||||
<div class="modal-content">
|
||||
<div class="modal-header">
|
||||
<button type="button" class="close" data-dismiss="modal" aria-hidden="true"><i class="fa fa-times"></i></button>
|
||||
<h4 class="modal-title">@UI.Issues_Modal_Title</h4>
|
||||
</div>
|
||||
<form method="POST" action="@url/issues/nonrequestissuecomment" id="commentForm">
|
||||
<div class="modal-body">
|
||||
<input id="providerIdModal" name="providerId" class="providerId" type="text" hidden="hidden" value="" />
|
||||
<input name="issue" class="issue" type="text" hidden="hidden" value="" />
|
||||
<input id="typeModal" name="type" class="type" type="text" hidden="hidden" value="" />
|
||||
<textarea class="form-control form-control-custom" rows="3" id="commentArea" name="commentArea"></textarea>
|
||||
</div>
|
||||
<div class="modal-footer">
|
||||
<button type="button" class="btn btn-danger-outline" data-dismiss="modal">@UI.Common_Close</button>
|
||||
<button type="button" class="btn btn-primary-outline theSaveButton" data-dismiss="modal">@UI.Issues_Modal_Save</button>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<script id="seasons-template" type="text/x-handlebars-template">
|
||||
<div class="form-group">
|
||||
<div class="checkbox">
|
||||
<input type="checkbox" class="selectedSeasons" id="{{id}}" name="{{id}}"><label for="{{id}}">@UI.Search_Season {{id}}</label>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</script>
|
||||
|
||||
@Html.LoadSearchAssets()
|
||||
|
@ -1,157 +1,191 @@
|
||||
@using Nancy.Security
|
||||
@using Nancy.Session
|
||||
@using PlexRequests.UI.Helpers
|
||||
@using PlexRequests.UI.Models
|
||||
@inherits Nancy.ViewEngines.Razor.NancyRazorViewBase
|
||||
@{
|
||||
var baseUrl = Html.GetBaseUrl();
|
||||
var url = string.Empty;
|
||||
if (!string.IsNullOrEmpty(baseUrl.ToHtmlString()))
|
||||
{
|
||||
url = "/" + baseUrl.ToHtmlString();
|
||||
}
|
||||
}
|
||||
<html>
|
||||
<div hidden="hidden" id="baseUrl">@baseUrl.ToHtmlString()</div>
|
||||
<head>
|
||||
<title>Plex Requests</title>
|
||||
<!-- Styles -->
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
@Html.LoadAnalytics()
|
||||
@Html.LoadAssets()
|
||||
</head>
|
||||
<body>
|
||||
|
||||
|
||||
<nav class="navbar navbar-default">
|
||||
<div class="container-fluid">
|
||||
<div class="navbar-header">
|
||||
<button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#bs-example-navbar-collapse-1">
|
||||
<span class="sr-only">Toggle navigation</span>
|
||||
<span class="icon-bar"></span>
|
||||
<span class="icon-bar"></span>
|
||||
<span class="icon-bar"></span>
|
||||
</button>
|
||||
<a class="navbar-brand" href="@url/search">Plex Requests</a>
|
||||
</div>
|
||||
|
||||
<div class="collapse navbar-collapse" id="bs-example-navbar-collapse-1">
|
||||
<ul class="nav navbar-nav">
|
||||
@Html.GetNavbarUrl(Context, "/search", "Search", "search")
|
||||
@Html.GetNavbarUrl(Context, "/requests", "Requests", "plus-circle")
|
||||
@Html.GetNavbarUrl(Context, "/issues", "Issues", "exclamation", "<span id=\"issueCount\"></span>")
|
||||
|
||||
</ul>
|
||||
<ul class="nav navbar-nav navbar-right">
|
||||
|
||||
|
||||
@if (!Context.CurrentUser.IsAuthenticated()) // TODO replace with IsAdmin
|
||||
{
|
||||
|
||||
<li><a href="@url/login?redirect=@Context.Request.Path"><i class="fa fa-user"></i> Admin</a></li>
|
||||
}
|
||||
else
|
||||
{
|
||||
<li class="dropdown">
|
||||
<a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-expanded="false"><i class="fa fa-user"></i> Admin <span class="caret"></span></a>
|
||||
<ul class="dropdown-menu" role="menu">
|
||||
<li><a href="@url/admin"><i class="fa fa-cog"></i> Settings</a></li>
|
||||
<li><a href="@url/changepassword"><i class="fa fa-key"></i> Change password</a></li>
|
||||
<li class="divider"></li>
|
||||
<li><a href="https://www.paypal.me/PlexRequestsNet" target="_blank"><i class="fa fa-heart" style="color:red"></i> Donate!</a></li>
|
||||
<li class="divider"></li>
|
||||
<li><a href="@url/logout"><i class="fa fa-sign-out"></i> Logout</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
}
|
||||
@if (Context.Request.Session[SessionKeys.UsernameKey] != null)
|
||||
{
|
||||
<li><a href="@url/userlogin/logout"><i class="fa fa-sign-out"></i> Logout</a></li>
|
||||
}
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
<div id="updateAvailable" hidden="hidden"></div>
|
||||
</nav>
|
||||
|
||||
<div class="container">
|
||||
@RenderBody()
|
||||
</div>
|
||||
<div class="scroll-top-wrapper ">
|
||||
<span class="scroll-top-inner">
|
||||
<i class="fa fa-2x fa-arrow-circle-up"></i>
|
||||
</span>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
<script>
|
||||
|
||||
$(function () {
|
||||
|
||||
var urlBase = '@Html.GetBaseUrl()';
|
||||
|
||||
// Check for update
|
||||
var url = createBaseUrl(urlBase, '/updatechecker');
|
||||
$.ajax({
|
||||
type: "GET",
|
||||
url: url,
|
||||
dataType: "json",
|
||||
success: function (response) {
|
||||
if (response.updateAvailable) {
|
||||
var status = createBaseUrl(urlBase, '/admin/status');
|
||||
$('#updateAvailable').html("<i class='fa fa-cloud-download' aria-hidden='true'></i> There is a new update available! Click <a style='color: white' href='" + status + "'>Here!</a>");
|
||||
$('#updateAvailable').removeAttr("hidden");
|
||||
$('body').addClass('update-available');
|
||||
}
|
||||
},
|
||||
error: function (e) {
|
||||
console.log(e);
|
||||
}
|
||||
});
|
||||
// End Check for update
|
||||
|
||||
|
||||
// Scroller
|
||||
$(document).on('scroll', function () {
|
||||
|
||||
if ($(window).scrollTop() > 100) {
|
||||
$('.scroll-top-wrapper').addClass('show');
|
||||
} else {
|
||||
$('.scroll-top-wrapper').removeClass('show');
|
||||
}
|
||||
});
|
||||
|
||||
$('.scroll-top-wrapper').on('click', scrollToTop);
|
||||
// End Scroller
|
||||
|
||||
|
||||
// Get Issue count
|
||||
var issueUrl = createBaseUrl(urlBase, '/issues/issuecount');
|
||||
$.ajax({
|
||||
type: "GET",
|
||||
url: issueUrl,
|
||||
dataType: "json",
|
||||
success: function (response) {
|
||||
if (response) {
|
||||
if(response > 0)
|
||||
$('#issueCount').addClass("badge");
|
||||
$('#issueCount').html(+response);
|
||||
}
|
||||
},
|
||||
error: function (e) {
|
||||
console.log(e);
|
||||
}
|
||||
});
|
||||
// End issue count
|
||||
|
||||
|
||||
});
|
||||
|
||||
function scrollToTop() {
|
||||
verticalOffset = typeof (verticalOffset) != 'undefined' ? verticalOffset : 0;
|
||||
element = $('body');
|
||||
offset = element.offset();
|
||||
offsetTop = offset.top;
|
||||
$('html, body').animate({ scrollTop: offsetTop }, 500, 'linear');
|
||||
}
|
||||
@using Nancy.Security
|
||||
@using Nancy.Session
|
||||
@using PlexRequests.UI.Helpers
|
||||
@using PlexRequests.UI.Models
|
||||
@using PlexRequests.UI.Resources
|
||||
@inherits Nancy.ViewEngines.Razor.NancyRazorViewBase
|
||||
@{
|
||||
var baseUrl = Html.GetBaseUrl();
|
||||
var url = string.Empty;
|
||||
if (!string.IsNullOrEmpty(baseUrl.ToHtmlString()))
|
||||
{
|
||||
url = "/" + baseUrl.ToHtmlString();
|
||||
}
|
||||
}
|
||||
<html>
|
||||
<div hidden="hidden" id="baseUrl">@baseUrl.ToHtmlString()</div>
|
||||
<head>
|
||||
<title>@UI.Layout_Title</title>
|
||||
<!-- Styles -->
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
@Html.LoadAnalytics()
|
||||
@Html.LoadAssets()
|
||||
</head>
|
||||
<body>
|
||||
|
||||
|
||||
<nav class="navbar navbar-default">
|
||||
<div class="container-fluid">
|
||||
<div class="navbar-header">
|
||||
<button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#bs-example-navbar-collapse-1">
|
||||
<span class="sr-only">Toggle navigation</span>
|
||||
<span class="icon-bar"></span>
|
||||
<span class="icon-bar"></span>
|
||||
<span class="icon-bar"></span>
|
||||
</button>
|
||||
<a class="navbar-brand" href="@url/search">@UI.Layout_Title</a>
|
||||
</div>
|
||||
|
||||
<div class="collapse navbar-collapse" id="bs-example-navbar-collapse-1">
|
||||
<ul class="nav navbar-nav">
|
||||
@Html.GetNavbarUrl(Context, "/search", UI.Layout_Search, "search")
|
||||
@Html.GetNavbarUrl(Context, "/requests", UI.Layout_Requests, "plus-circle")
|
||||
@Html.GetNavbarUrl(Context, "/issues", UI.Layout_Issues, "exclamation", "<span id=\"issueCount\"></span>")
|
||||
@if (Context.CurrentUser.IsAuthenticated()) // TODO replace with IsAdmin
|
||||
{
|
||||
<li><a id="donate" onclick="donateClick('https://www.paypal.me/PlexRequestsNet');"><i class="fa fa-heart" style="color: red"></i> @UI.Layout_Donate</a></li>
|
||||
}
|
||||
</ul>
|
||||
<ul class="nav navbar-nav navbar-right">
|
||||
|
||||
|
||||
@if (!Context.CurrentUser.IsAuthenticated() && Context.Request.Session[SessionKeys.UsernameKey] == null) // TODO replace with IsAdmin
|
||||
{
|
||||
|
||||
<li><a href="@url/login?redirect=@Context.Request.Path"><i class="fa fa-user"></i> @UI.Layout_Admin</a></li>
|
||||
}
|
||||
@if (Context.CurrentUser.IsAuthenticated()) // TODO replace with IsAdmin
|
||||
{
|
||||
<li><a>@UI.Layout_Welcome @Context.Request.Session[SessionKeys.UsernameKey]</a></li>
|
||||
<li class="dropdown">
|
||||
<a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-expanded="false"><i class="fa fa-user"></i> @UI.Layout_Admin <span class="caret"></span></a>
|
||||
<ul class="dropdown-menu" role="menu">
|
||||
<li><a href="@url/admin"><i class="fa fa-cog"></i> @UI.Layout_Settings</a></li>
|
||||
<li><a href="@url/changepassword"><i class="fa fa-key"></i> @UI.Layout_ChangePassword</a></li>
|
||||
|
||||
<li class="divider"></li>
|
||||
<li><a href="@url/logout"><i class="fa fa-sign-out"></i> @UI.Layout_Logout</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
}
|
||||
@if (Context.Request.Session[SessionKeys.UsernameKey] != null && !Context.CurrentUser.IsAuthenticated())
|
||||
{
|
||||
<li class="dropdown">
|
||||
<a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-expanded="false"><i class="fa fa-user"></i> @UI.Layout_Welcome @Context.Request.Session[SessionKeys.UsernameKey] <span class="caret"></span></a>
|
||||
<ul class="dropdown-menu" role="menu">
|
||||
<li><a href="@url/login?redirect=@Context.Request.Path"><i class="fa fa-user"></i> @UI.Layout_Admin</a></li>
|
||||
<li class="divider"></li>
|
||||
<li><a href="@url/userlogin/logout"><i class="fa fa-sign-out"></i> @UI.Layout_Logout</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
|
||||
}
|
||||
<li class="dropdown">
|
||||
|
||||
<a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-expanded="false"><i class="fa fa-language" aria-hidden="true"><span class="caret"></span></i></a>
|
||||
<ul class="dropdown-menu" role="menu">
|
||||
<li><a href="@url/culture?l=en&u=@Context.Request.Path">@UI.Layout_English</a></li>
|
||||
<li><a href="@url/culture?l=nl&u=@Context.Request.Path">@UI.Layout_Dutch</a></li>
|
||||
<li><a href="@url/culture?l=es&u=@Context.Request.Path">@UI.Layout_Spanish</a></li>
|
||||
<li><a href="@url/culture?l=de&u=@Context.Request.Path">@UI.Layout_German</a></li>
|
||||
<li><a href="@url/culture?l=da&u=@Context.Request.Path">@UI.Layout_Danish</a></li>
|
||||
<li><a href="@url/culture?l=pt&u=@Context.Request.Path">@UI.Layout_Portuguese</a></li>
|
||||
<li><a href="@url/culture?l=sv&u=@Context.Request.Path">@UI.Layout_Swedish</a></li>
|
||||
<li><a href="@url/culture?l=it&u=@Context.Request.Path">@UI.Layout_Italian</a></li>
|
||||
</ul>
|
||||
<li />
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
<div id="updateAvailable" hidden="hidden"></div>
|
||||
</nav>
|
||||
|
||||
<div class="container">
|
||||
@RenderBody()
|
||||
</div>
|
||||
<div class="scroll-top-wrapper ">
|
||||
<span class="scroll-top-inner">
|
||||
<i class="fa fa-2x fa-arrow-circle-up"></i>
|
||||
</span>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
<script>
|
||||
|
||||
function donateClick(url) {
|
||||
ga('send', 'event', 'Navbar', 'Donate', 'Donate Clicked');
|
||||
var redirectWindow = window.open(url, '_blank');
|
||||
redirectWindow.location;
|
||||
}
|
||||
|
||||
$(function () {
|
||||
|
||||
var urlBase = '@Html.GetBaseUrl()';
|
||||
|
||||
// Check for update
|
||||
var url = createBaseUrl(urlBase, '/updatechecker');
|
||||
$.ajax({
|
||||
type: "GET",
|
||||
url: url,
|
||||
dataType: "json",
|
||||
success: function (response) {
|
||||
if (response.updateAvailable) {
|
||||
var status = createBaseUrl(urlBase, '/admin/status');
|
||||
$('#updateAvailable').html("<i class='fa fa-cloud-download' aria-hidden='true'></i> @UI.Layout_UpdateAvailablePart1 <a style='color: white' href='" + status + "'>@UI.Layout_UpdateAvailablePart2</a>");
|
||||
$('#updateAvailable').removeAttr("hidden");
|
||||
$('body').addClass('update-available');
|
||||
}
|
||||
},
|
||||
error: function (e) {
|
||||
console.log(e);
|
||||
}
|
||||
});
|
||||
// End Check for update
|
||||
|
||||
|
||||
// Scroller
|
||||
$(document).on('scroll', function () {
|
||||
|
||||
if ($(window).scrollTop() > 100) {
|
||||
$('.scroll-top-wrapper').addClass('show');
|
||||
} else {
|
||||
$('.scroll-top-wrapper').removeClass('show');
|
||||
}
|
||||
});
|
||||
|
||||
$('.scroll-top-wrapper').on('click', scrollToTop);
|
||||
// End Scroller
|
||||
|
||||
|
||||
|
||||
|
||||
// Get Issue count
|
||||
var issueUrl = createBaseUrl(urlBase, '/issues/issuecount');
|
||||
$.ajax({
|
||||
type: "GET",
|
||||
url: issueUrl,
|
||||
dataType: "json",
|
||||
success: function (response) {
|
||||
if (response) {
|
||||
if (response > 0)
|
||||
$('#issueCount').addClass("badge");
|
||||
$('#issueCount').html(+response);
|
||||
}
|
||||
},
|
||||
error: function (e) {
|
||||
console.log(e);
|
||||
}
|
||||
});
|
||||
// End issue count
|
||||
|
||||
|
||||
});
|
||||
|
||||
function scrollToTop() {
|
||||
verticalOffset = typeof (verticalOffset) != 'undefined' ? verticalOffset : 0;
|
||||
element = $('body');
|
||||
offset = element.offset();
|
||||
offsetTop = offset.top;
|
||||
$('html, body').animate({ scrollTop: offsetTop }, 500, 'linear');
|
||||
}
|
||||
</script>
|
@ -1,70 +1,70 @@
|
||||
@using PlexRequests.UI.Helpers
|
||||
<div class="home">
|
||||
<h1>Login</h1>
|
||||
<div>
|
||||
<p>
|
||||
Want to watch a movie or tv show but it's not currently on Plex?
|
||||
Login below with your Plex.tv username and password! <span title="Your login details are only used to authenticate your Plex account."><i class="fa fa-question-circle"></i></span>
|
||||
</p>
|
||||
</div>
|
||||
<form method="POST" id="loginForm">
|
||||
<div>
|
||||
<div>
|
||||
<label>Plex.tv Username </label>
|
||||
</div>
|
||||
<div>
|
||||
<input class="form-control form-control-custom" type="text" name="Username" placeholder="Username" />
|
||||
</div>
|
||||
</div>
|
||||
<br />
|
||||
@if (Model.UsePassword)
|
||||
{
|
||||
<div>
|
||||
<div>
|
||||
<label> Password </label>
|
||||
</div>
|
||||
<div>
|
||||
<input class="form-control form-control-custom" name="Password" type="password" placeholder="Password"/>
|
||||
</div>
|
||||
</div>
|
||||
<br />
|
||||
}
|
||||
|
||||
<button id="loginBtn" class="btn btn-success-outline" type="submit"><i class="fa fa-user fa-fw"></i> Sign In</button>
|
||||
</form>
|
||||
</div>
|
||||
|
||||
<script>
|
||||
$(function () {
|
||||
var base = '@Html.GetBaseUrl()';
|
||||
$('#loginBtn').click(function (e) {
|
||||
e.preventDefault();
|
||||
var $form = $("#loginForm");
|
||||
var formData = $form.serialize();
|
||||
var dtOffset = new Date().getTimezoneOffset();
|
||||
formData += ('&DateTimeOffset=' + dtOffset);
|
||||
|
||||
var url = createBaseUrl(base, '/search');
|
||||
$.ajax({
|
||||
type: $form.prop("method"),
|
||||
url: $form.prop("action"),
|
||||
data: formData,
|
||||
dataType: "json",
|
||||
success: function (response) {
|
||||
console.log(response);
|
||||
if (response.result === true) {
|
||||
|
||||
location.replace(response.message);
|
||||
|
||||
} else {
|
||||
generateNotify(response.message, "warning");
|
||||
}
|
||||
},
|
||||
error: function (e) {
|
||||
console.log(e);
|
||||
generateNotify("Something went wrong!", "danger");
|
||||
}
|
||||
});
|
||||
});
|
||||
});
|
||||
@using PlexRequests.UI.Helpers
|
||||
@using PlexRequests.UI.Resources
|
||||
<div class="home">
|
||||
<h1>@UI.UserLogin_Title</h1>
|
||||
<div>
|
||||
<p>
|
||||
@UI.UserLogin_Paragraph <span title="@UI.UserLogin_Paragraph_SpanHover"><i class="fa fa-question-circle"></i></span>
|
||||
</p>
|
||||
</div>
|
||||
<form method="POST" id="loginForm">
|
||||
<div>
|
||||
<div>
|
||||
<label>@UI.UserLogin_Username</label>
|
||||
</div>
|
||||
<div>
|
||||
<input class="form-control form-control-custom" type="text" name="Username" placeholder="@UI.UserLogin_Username_Placeholder" />
|
||||
</div>
|
||||
</div>
|
||||
<br />
|
||||
@if (Model.UsePassword)
|
||||
{
|
||||
<div>
|
||||
<div>
|
||||
<label> @UI.UserLogin_Password </label>
|
||||
</div>
|
||||
<div>
|
||||
<input class="form-control form-control-custom" name="Password" type="password" placeholder="@UI.UserLogin_Password"/>
|
||||
</div>
|
||||
</div>
|
||||
<br />
|
||||
}
|
||||
|
||||
<button id="loginBtn" class="btn btn-success-outline" type="submit"><i class="fa fa-user fa-fw"></i> @UI.UserLogin_SignIn</button>
|
||||
</form>
|
||||
</div>
|
||||
|
||||
<script>
|
||||
$(function () {
|
||||
var base = '@Html.GetBaseUrl()';
|
||||
$('#loginBtn').click(function (e) {
|
||||
e.preventDefault();
|
||||
var $form = $("#loginForm");
|
||||
var formData = $form.serialize();
|
||||
var dtOffset = new Date().getTimezoneOffset();
|
||||
formData += ('&DateTimeOffset=' + dtOffset);
|
||||
|
||||
var url = createBaseUrl(base, '/search');
|
||||
$.ajax({
|
||||
type: $form.prop("method"),
|
||||
url: $form.prop("action"),
|
||||
data: formData,
|
||||
dataType: "json",
|
||||
success: function (response) {
|
||||
console.log(response);
|
||||
if (response.result === true) {
|
||||
|
||||
location.replace(response.message);
|
||||
|
||||
} else {
|
||||
generateNotify(response.message, "warning");
|
||||
}
|
||||
},
|
||||
error: function (e) {
|
||||
console.log(e);
|
||||
generateNotify("@UI.Javascript_SomethingWentWrong", "danger");
|
||||
}
|
||||
});
|
||||
});
|
||||
});
|
||||
</script>
|
@ -1,50 +1,50 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<configuration>
|
||||
<configSections>
|
||||
<sectionGroup name="system.web.webPages.razor" type="System.Web.WebPages.Razor.Configuration.RazorWebSectionGroup, System.Web.WebPages.Razor, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">
|
||||
<section name="pages" type="System.Web.WebPages.Razor.Configuration.RazorPagesSection, System.Web.WebPages.Razor, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" />
|
||||
</sectionGroup>
|
||||
</configSections>
|
||||
|
||||
<appSettings>
|
||||
|
||||
<add key="ClientSettingsProvider.ServiceUri" value="" />
|
||||
<add key="webPages:Enabled" value="false" /></appSettings>
|
||||
<connectionStrings>
|
||||
<add name="Sqlite" connectionString="Data Source=RequestPlex.sqlite" providerName="Mono.Data.Sqlite" />
|
||||
</connectionStrings>
|
||||
<system.web>
|
||||
<membership defaultProvider="ClientAuthenticationMembershipProvider">
|
||||
<providers>
|
||||
<add name="ClientAuthenticationMembershipProvider" type="System.Web.ClientServices.Providers.ClientFormsAuthenticationMembershipProvider, System.Web.Extensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" serviceUri="" />
|
||||
</providers>
|
||||
</membership>
|
||||
<roleManager defaultProvider="ClientRoleProvider" enabled="true">
|
||||
<providers>
|
||||
<add name="ClientRoleProvider" type="System.Web.ClientServices.Providers.ClientRoleProvider, System.Web.Extensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" serviceUri="" cacheTimeout="86400" />
|
||||
</providers>
|
||||
</roleManager>
|
||||
</system.web>
|
||||
<runtime>
|
||||
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" culture="neutral" />
|
||||
<bindingRedirect oldVersion="0.0.0.0-8.0.0.0" newVersion="8.0.0.0" />
|
||||
</dependentAssembly>
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity name="Microsoft.Owin" publicKeyToken="31bf3856ad364e35" culture="neutral" />
|
||||
<bindingRedirect oldVersion="0.0.0.0-3.0.1.0" newVersion="3.0.1.0" />
|
||||
</dependentAssembly>
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity name="System.Data.SQLite" publicKeyToken="db937bc2d44ff139" culture="neutral" />
|
||||
<bindingRedirect oldVersion="0.0.0.0-1.0.99.0" newVersion="1.0.99.0" />
|
||||
</dependentAssembly>
|
||||
</assemblyBinding>
|
||||
</runtime>
|
||||
<system.web.webPages.razor>
|
||||
<pages pageBaseType="Nancy.ViewEngines.Razor.NancyRazorViewBase">
|
||||
<namespaces>
|
||||
<add namespace="Nancy.ViewEngines.Razor" />
|
||||
</namespaces>
|
||||
</pages>
|
||||
</system.web.webPages.razor><startup><supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5.2" /></startup></configuration>
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<configuration>
|
||||
<configSections>
|
||||
<sectionGroup name="system.web.webPages.razor" type="System.Web.WebPages.Razor.Configuration.RazorWebSectionGroup, System.Web.WebPages.Razor, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">
|
||||
<section name="pages" type="System.Web.WebPages.Razor.Configuration.RazorPagesSection, System.Web.WebPages.Razor, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" />
|
||||
</sectionGroup>
|
||||
</configSections>
|
||||
|
||||
<appSettings>
|
||||
|
||||
<add key="ClientSettingsProvider.ServiceUri" value="" />
|
||||
<add key="webPages:Enabled" value="false" /></appSettings>
|
||||
<connectionStrings>
|
||||
<add name="Sqlite" connectionString="Data Source=RequestPlex.sqlite" providerName="Mono.Data.Sqlite" />
|
||||
</connectionStrings>
|
||||
<system.web>
|
||||
<membership defaultProvider="ClientAuthenticationMembershipProvider">
|
||||
<providers>
|
||||
<add name="ClientAuthenticationMembershipProvider" type="System.Web.ClientServices.Providers.ClientFormsAuthenticationMembershipProvider, System.Web.Extensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" serviceUri="" />
|
||||
</providers>
|
||||
</membership>
|
||||
<roleManager defaultProvider="ClientRoleProvider" enabled="true">
|
||||
<providers>
|
||||
<add name="ClientRoleProvider" type="System.Web.ClientServices.Providers.ClientRoleProvider, System.Web.Extensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" serviceUri="" cacheTimeout="86400" />
|
||||
</providers>
|
||||
</roleManager>
|
||||
</system.web>
|
||||
<runtime>
|
||||
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" culture="neutral" />
|
||||
<bindingRedirect oldVersion="0.0.0.0-8.0.0.0" newVersion="8.0.0.0" />
|
||||
</dependentAssembly>
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity name="Microsoft.Owin" publicKeyToken="31bf3856ad364e35" culture="neutral" />
|
||||
<bindingRedirect oldVersion="0.0.0.0-3.0.1.0" newVersion="3.0.1.0" />
|
||||
</dependentAssembly>
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity name="System.Data.SQLite" publicKeyToken="db937bc2d44ff139" culture="neutral" />
|
||||
<bindingRedirect oldVersion="0.0.0.0-1.0.99.0" newVersion="1.0.99.0" />
|
||||
</dependentAssembly>
|
||||
</assemblyBinding>
|
||||
</runtime>
|
||||
<system.web.webPages.razor>
|
||||
<pages pageBaseType="Nancy.ViewEngines.Razor.NancyRazorViewBase">
|
||||
<namespaces>
|
||||
<add namespace="Nancy.ViewEngines.Razor" />
|
||||
</namespaces>
|
||||
</pages>
|
||||
</system.web.webPages.razor><startup><supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5.2" /></startup></configuration>
|
||||
|
Loading…
Reference in new issue