Merge remote-tracking branch 'upstream/master' into development-https
This commit is contained in:
commit
0e57348cf4
|
@ -1,7 +1,6 @@
|
||||||
#pragma warning disable CS1591
|
#pragma warning disable CS1591
|
||||||
|
|
||||||
using System;
|
using System;
|
||||||
using MediaBrowser.Model.Extensions;
|
|
||||||
|
|
||||||
namespace Emby.Dlna.Didl
|
namespace Emby.Dlna.Didl
|
||||||
{
|
{
|
||||||
|
|
|
@ -262,7 +262,7 @@ namespace Emby.Dlna.Main
|
||||||
{
|
{
|
||||||
if (address.AddressFamily == AddressFamily.InterNetworkV6)
|
if (address.AddressFamily == AddressFamily.InterNetworkV6)
|
||||||
{
|
{
|
||||||
// Not support IPv6 right now
|
// Not supporting IPv6 right now
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -29,11 +29,7 @@ namespace Emby.Naming.AudioBook
|
||||||
// Filter out all extras, otherwise they could cause stacks to not be resolved
|
// Filter out all extras, otherwise they could cause stacks to not be resolved
|
||||||
// See the unit test TestStackedWithTrailer
|
// See the unit test TestStackedWithTrailer
|
||||||
var metadata = audiobookFileInfos
|
var metadata = audiobookFileInfos
|
||||||
.Select(i => new FileSystemMetadata
|
.Select(i => new FileSystemMetadata { FullName = i.Path, IsDirectory = i.IsDirectory });
|
||||||
{
|
|
||||||
FullName = i.Path,
|
|
||||||
IsDirectory = i.IsDirectory
|
|
||||||
});
|
|
||||||
|
|
||||||
var stackResult = new StackResolver(_options)
|
var stackResult = new StackResolver(_options)
|
||||||
.ResolveAudioBooks(metadata);
|
.ResolveAudioBooks(metadata);
|
||||||
|
@ -42,11 +38,7 @@ namespace Emby.Naming.AudioBook
|
||||||
{
|
{
|
||||||
var stackFiles = stack.Files.Select(i => audioBookResolver.Resolve(i, stack.IsDirectoryStack)).ToList();
|
var stackFiles = stack.Files.Select(i => audioBookResolver.Resolve(i, stack.IsDirectoryStack)).ToList();
|
||||||
stackFiles.Sort();
|
stackFiles.Sort();
|
||||||
var info = new AudioBookInfo
|
var info = new AudioBookInfo { Files = stackFiles, Name = stack.Name };
|
||||||
{
|
|
||||||
Files = stackFiles,
|
|
||||||
Name = stack.Name
|
|
||||||
};
|
|
||||||
|
|
||||||
yield return info;
|
yield return info;
|
||||||
}
|
}
|
||||||
|
|
|
@ -37,7 +37,8 @@ namespace Emby.Naming.Subtitles
|
||||||
IsForced = _options.SubtitleForcedFlags.Any(i => flags.Contains(i, StringComparer.OrdinalIgnoreCase))
|
IsForced = _options.SubtitleForcedFlags.Any(i => flags.Contains(i, StringComparer.OrdinalIgnoreCase))
|
||||||
};
|
};
|
||||||
|
|
||||||
var parts = flags.Where(i => !_options.SubtitleDefaultFlags.Contains(i, StringComparer.OrdinalIgnoreCase) && !_options.SubtitleForcedFlags.Contains(i, StringComparer.OrdinalIgnoreCase))
|
var parts = flags.Where(i => !_options.SubtitleDefaultFlags.Contains(i, StringComparer.OrdinalIgnoreCase)
|
||||||
|
&& !_options.SubtitleForcedFlags.Contains(i, StringComparer.OrdinalIgnoreCase))
|
||||||
.ToList();
|
.ToList();
|
||||||
|
|
||||||
// Should have a name, language and file extension
|
// Should have a name, language and file extension
|
||||||
|
|
|
@ -18,7 +18,13 @@ namespace Emby.Naming.TV
|
||||||
_options = options;
|
_options = options;
|
||||||
}
|
}
|
||||||
|
|
||||||
public EpisodePathParserResult Parse(string path, bool isDirectory, bool? isNamed = null, bool? isOptimistic = null, bool? supportsAbsoluteNumbers = null, bool fillExtendedInfo = true)
|
public EpisodePathParserResult Parse(
|
||||||
|
string path,
|
||||||
|
bool isDirectory,
|
||||||
|
bool? isNamed = null,
|
||||||
|
bool? isOptimistic = null,
|
||||||
|
bool? supportsAbsoluteNumbers = null,
|
||||||
|
bool fillExtendedInfo = true)
|
||||||
{
|
{
|
||||||
// Added to be able to use regex patterns which require a file extension.
|
// Added to be able to use regex patterns which require a file extension.
|
||||||
// There were no failed tests without this block, but to be safe, we can keep it until
|
// There were no failed tests without this block, but to be safe, we can keep it until
|
||||||
|
@ -64,7 +70,7 @@ namespace Emby.Naming.TV
|
||||||
{
|
{
|
||||||
result.SeriesName = result.SeriesName
|
result.SeriesName = result.SeriesName
|
||||||
.Trim()
|
.Trim()
|
||||||
.Trim(new[] { '_', '.', '-' })
|
.Trim('_', '.', '-')
|
||||||
.Trim();
|
.Trim();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -21,31 +21,24 @@ namespace Emby.Naming.Video
|
||||||
|
|
||||||
public IEnumerable<FileStack> ResolveDirectories(IEnumerable<string> files)
|
public IEnumerable<FileStack> ResolveDirectories(IEnumerable<string> files)
|
||||||
{
|
{
|
||||||
return Resolve(files.Select(i => new FileSystemMetadata
|
return Resolve(files.Select(i => new FileSystemMetadata { FullName = i, IsDirectory = true }));
|
||||||
{
|
|
||||||
FullName = i,
|
|
||||||
IsDirectory = true
|
|
||||||
}));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public IEnumerable<FileStack> ResolveFiles(IEnumerable<string> files)
|
public IEnumerable<FileStack> ResolveFiles(IEnumerable<string> files)
|
||||||
{
|
{
|
||||||
return Resolve(files.Select(i => new FileSystemMetadata
|
return Resolve(files.Select(i => new FileSystemMetadata { FullName = i, IsDirectory = false }));
|
||||||
{
|
|
||||||
FullName = i,
|
|
||||||
IsDirectory = false
|
|
||||||
}));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public IEnumerable<FileStack> ResolveAudioBooks(IEnumerable<FileSystemMetadata> files)
|
public IEnumerable<FileStack> ResolveAudioBooks(IEnumerable<FileSystemMetadata> files)
|
||||||
{
|
{
|
||||||
foreach (var directory in files.GroupBy(file => file.IsDirectory ? file.FullName : Path.GetDirectoryName(file.FullName)))
|
var groupedDirectoryFiles = files.GroupBy(file =>
|
||||||
|
file.IsDirectory
|
||||||
|
? file.FullName
|
||||||
|
: Path.GetDirectoryName(file.FullName));
|
||||||
|
|
||||||
|
foreach (var directory in groupedDirectoryFiles)
|
||||||
{
|
{
|
||||||
var stack = new FileStack()
|
var stack = new FileStack { Name = Path.GetFileName(directory.Key), IsDirectoryStack = false };
|
||||||
{
|
|
||||||
Name = Path.GetFileName(directory.Key),
|
|
||||||
IsDirectoryStack = false
|
|
||||||
};
|
|
||||||
foreach (var file in directory)
|
foreach (var file in directory)
|
||||||
{
|
{
|
||||||
if (file.IsDirectory)
|
if (file.IsDirectory)
|
||||||
|
|
|
@ -77,7 +77,9 @@ namespace Emby.Naming.Video
|
||||||
/// Gets the file name without extension.
|
/// Gets the file name without extension.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <value>The file name without extension.</value>
|
/// <value>The file name without extension.</value>
|
||||||
public string FileNameWithoutExtension => !IsDirectory ? System.IO.Path.GetFileNameWithoutExtension(Path) : System.IO.Path.GetFileName(Path);
|
public string FileNameWithoutExtension => !IsDirectory
|
||||||
|
? System.IO.Path.GetFileNameWithoutExtension(Path)
|
||||||
|
: System.IO.Path.GetFileName(Path);
|
||||||
|
|
||||||
/// <inheritdoc />
|
/// <inheritdoc />
|
||||||
public override string ToString()
|
public override string ToString()
|
||||||
|
|
|
@ -33,11 +33,7 @@ namespace Emby.Naming.Video
|
||||||
// See the unit test TestStackedWithTrailer
|
// See the unit test TestStackedWithTrailer
|
||||||
var nonExtras = videoInfos
|
var nonExtras = videoInfos
|
||||||
.Where(i => i.ExtraType == null)
|
.Where(i => i.ExtraType == null)
|
||||||
.Select(i => new FileSystemMetadata
|
.Select(i => new FileSystemMetadata { FullName = i.Path, IsDirectory = i.IsDirectory });
|
||||||
{
|
|
||||||
FullName = i.Path,
|
|
||||||
IsDirectory = i.IsDirectory
|
|
||||||
});
|
|
||||||
|
|
||||||
var stackResult = new StackResolver(_options)
|
var stackResult = new StackResolver(_options)
|
||||||
.Resolve(nonExtras).ToList();
|
.Resolve(nonExtras).ToList();
|
||||||
|
@ -57,11 +53,7 @@ namespace Emby.Naming.Video
|
||||||
|
|
||||||
info.Year = info.Files[0].Year;
|
info.Year = info.Files[0].Year;
|
||||||
|
|
||||||
var extraBaseNames = new List<string>
|
var extraBaseNames = new List<string> { stack.Name, Path.GetFileNameWithoutExtension(stack.Files[0]) };
|
||||||
{
|
|
||||||
stack.Name,
|
|
||||||
Path.GetFileNameWithoutExtension(stack.Files[0])
|
|
||||||
};
|
|
||||||
|
|
||||||
var extras = GetExtras(remainingFiles, extraBaseNames);
|
var extras = GetExtras(remainingFiles, extraBaseNames);
|
||||||
|
|
||||||
|
@ -83,10 +75,7 @@ namespace Emby.Naming.Video
|
||||||
|
|
||||||
foreach (var media in standaloneMedia)
|
foreach (var media in standaloneMedia)
|
||||||
{
|
{
|
||||||
var info = new VideoInfo(media.Name)
|
var info = new VideoInfo(media.Name) { Files = new List<VideoFileInfo> { media } };
|
||||||
{
|
|
||||||
Files = new List<VideoFileInfo> { media }
|
|
||||||
};
|
|
||||||
|
|
||||||
info.Year = info.Files[0].Year;
|
info.Year = info.Files[0].Year;
|
||||||
|
|
||||||
|
@ -239,7 +228,8 @@ namespace Emby.Naming.Video
|
||||||
|
|
||||||
return remainingFiles
|
return remainingFiles
|
||||||
.Where(i => i.ExtraType == null)
|
.Where(i => i.ExtraType == null)
|
||||||
.Where(i => baseNames.Any(b => i.FileNameWithoutExtension.StartsWith(b, StringComparison.OrdinalIgnoreCase)))
|
.Where(i => baseNames.Any(b =>
|
||||||
|
i.FileNameWithoutExtension.StartsWith(b, StringComparison.OrdinalIgnoreCase)))
|
||||||
.ToList();
|
.ToList();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,6 +1,5 @@
|
||||||
#pragma warning disable CS1591
|
#pragma warning disable CS1591
|
||||||
#pragma warning disable SA1402
|
#pragma warning disable SA1402
|
||||||
#pragma warning disable SA1600
|
|
||||||
#pragma warning disable SA1649
|
#pragma warning disable SA1649
|
||||||
|
|
||||||
using System;
|
using System;
|
||||||
|
|
|
@ -1,5 +1,4 @@
|
||||||
#pragma warning disable CS1591
|
#pragma warning disable CS1591
|
||||||
#pragma warning disable SA1600
|
|
||||||
|
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
|
|
|
@ -1,5 +1,4 @@
|
||||||
#pragma warning disable CS1591
|
#pragma warning disable CS1591
|
||||||
#pragma warning disable SA1600
|
|
||||||
|
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using MediaBrowser.Common.Configuration;
|
using MediaBrowser.Common.Configuration;
|
||||||
|
|
|
@ -8,7 +8,6 @@ using System.Text;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
using MediaBrowser.Common.Plugins;
|
using MediaBrowser.Common.Plugins;
|
||||||
using MediaBrowser.Common.Updates;
|
using MediaBrowser.Common.Updates;
|
||||||
using MediaBrowser.Controller;
|
|
||||||
using MediaBrowser.Controller.Authentication;
|
using MediaBrowser.Controller.Authentication;
|
||||||
using MediaBrowser.Controller.Devices;
|
using MediaBrowser.Controller.Devices;
|
||||||
using MediaBrowser.Controller.Entities;
|
using MediaBrowser.Controller.Entities;
|
||||||
|
|
|
@ -5,7 +5,7 @@ using MediaBrowser.Common.Configuration;
|
||||||
namespace Emby.Server.Implementations.AppBase
|
namespace Emby.Server.Implementations.AppBase
|
||||||
{
|
{
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Provides a base class to hold common application paths used by both the Ui and Server.
|
/// Provides a base class to hold common application paths used by both the UI and Server.
|
||||||
/// This can be subclassed to add application-specific paths.
|
/// This can be subclassed to add application-specific paths.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public abstract class BaseApplicationPaths : IApplicationPaths
|
public abstract class BaseApplicationPaths : IApplicationPaths
|
||||||
|
@ -37,10 +37,7 @@ namespace Emby.Server.Implementations.AppBase
|
||||||
/// <value>The program data path.</value>
|
/// <value>The program data path.</value>
|
||||||
public string ProgramDataPath { get; }
|
public string ProgramDataPath { get; }
|
||||||
|
|
||||||
/// <summary>
|
/// <inheritdoc/>
|
||||||
/// Gets the path to the web UI resources folder.
|
|
||||||
/// </summary>
|
|
||||||
/// <value>The web UI resources path.</value>
|
|
||||||
public string WebPath { get; }
|
public string WebPath { get; }
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
|
|
@ -240,11 +240,6 @@ namespace Emby.Server.Implementations
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public int HttpsPort { get; private set; }
|
public int HttpsPort { get; private set; }
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Gets the content root for the webhost.
|
|
||||||
/// </summary>
|
|
||||||
public string ContentRoot { get; private set; }
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Gets the server configuration manager.
|
/// Gets the server configuration manager.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
@ -617,13 +612,7 @@ namespace Emby.Server.Implementations
|
||||||
|
|
||||||
DiscoverTypes();
|
DiscoverTypes();
|
||||||
|
|
||||||
await RegisterResources(serviceCollection, startupConfig).ConfigureAwait(false);
|
await RegisterServices(serviceCollection, startupConfig).ConfigureAwait(false);
|
||||||
|
|
||||||
ContentRoot = ServerConfigurationManager.Configuration.DashboardSourcePath;
|
|
||||||
if (string.IsNullOrEmpty(ContentRoot))
|
|
||||||
{
|
|
||||||
ContentRoot = ServerConfigurationManager.ApplicationPaths.WebPath;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public async Task ExecuteWebsocketHandlerAsync(HttpContext context, Func<Task> next)
|
public async Task ExecuteWebsocketHandlerAsync(HttpContext context, Func<Task> next)
|
||||||
|
@ -654,9 +643,9 @@ namespace Emby.Server.Implementations
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Registers resources that classes will depend on
|
/// Registers services/resources with the service collection that will be available via DI.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
protected async Task RegisterResources(IServiceCollection serviceCollection, IConfiguration startupConfig)
|
protected async Task RegisterServices(IServiceCollection serviceCollection, IConfiguration startupConfig)
|
||||||
{
|
{
|
||||||
serviceCollection.AddMemoryCache();
|
serviceCollection.AddMemoryCache();
|
||||||
|
|
||||||
|
@ -774,20 +763,8 @@ namespace Emby.Server.Implementations
|
||||||
CertificateInfo = GetCertificateInfo(true);
|
CertificateInfo = GetCertificateInfo(true);
|
||||||
Certificate = GetCertificate(CertificateInfo);
|
Certificate = GetCertificate(CertificateInfo);
|
||||||
|
|
||||||
HttpServer = new HttpListenerHost(
|
serviceCollection.AddSingleton<IHttpListener, WebSocketSharpListener>();
|
||||||
this,
|
serviceCollection.AddSingleton<IHttpServer, HttpListenerHost>();
|
||||||
LoggerFactory.CreateLogger<HttpListenerHost>(),
|
|
||||||
ServerConfigurationManager,
|
|
||||||
startupConfig,
|
|
||||||
NetworkManager,
|
|
||||||
JsonSerializer,
|
|
||||||
XmlSerializer,
|
|
||||||
CreateHttpListener())
|
|
||||||
{
|
|
||||||
GlobalResponse = LocalizationManager.GetLocalizedString("StartupEmbyServerIsLoading")
|
|
||||||
};
|
|
||||||
|
|
||||||
serviceCollection.AddSingleton(HttpServer);
|
|
||||||
|
|
||||||
ImageProcessor = new ImageProcessor(LoggerFactory.CreateLogger<ImageProcessor>(), ServerConfigurationManager.ApplicationPaths, FileSystemManager, ImageEncoder, () => LibraryManager, () => MediaEncoder);
|
ImageProcessor = new ImageProcessor(LoggerFactory.CreateLogger<ImageProcessor>(), ServerConfigurationManager.ApplicationPaths, FileSystemManager, ImageEncoder, () => LibraryManager, () => MediaEncoder);
|
||||||
serviceCollection.AddSingleton(ImageProcessor);
|
serviceCollection.AddSingleton(ImageProcessor);
|
||||||
|
@ -849,10 +826,15 @@ namespace Emby.Server.Implementations
|
||||||
|
|
||||||
serviceCollection.AddSingleton<IDeviceDiscovery>(new DeviceDiscovery(ServerConfigurationManager));
|
serviceCollection.AddSingleton<IDeviceDiscovery>(new DeviceDiscovery(ServerConfigurationManager));
|
||||||
|
|
||||||
ChapterManager = new ChapterManager(LibraryManager, LoggerFactory, ServerConfigurationManager, ItemRepository);
|
ChapterManager = new ChapterManager(ItemRepository);
|
||||||
serviceCollection.AddSingleton(ChapterManager);
|
serviceCollection.AddSingleton(ChapterManager);
|
||||||
|
|
||||||
EncodingManager = new MediaEncoder.EncodingManager(FileSystemManager, LoggerFactory, MediaEncoder, ChapterManager, LibraryManager);
|
EncodingManager = new MediaEncoder.EncodingManager(
|
||||||
|
LoggerFactory.CreateLogger<MediaEncoder.EncodingManager>(),
|
||||||
|
FileSystemManager,
|
||||||
|
MediaEncoder,
|
||||||
|
ChapterManager,
|
||||||
|
LibraryManager);
|
||||||
serviceCollection.AddSingleton(EncodingManager);
|
serviceCollection.AddSingleton(EncodingManager);
|
||||||
|
|
||||||
var activityLogRepo = GetActivityLogRepository();
|
var activityLogRepo = GetActivityLogRepository();
|
||||||
|
@ -895,6 +877,14 @@ namespace Emby.Server.Implementations
|
||||||
((LibraryManager)LibraryManager).ItemRepository = ItemRepository;
|
((LibraryManager)LibraryManager).ItemRepository = ItemRepository;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Create services registered with the service container that need to be initialized at application startup.
|
||||||
|
/// </summary>
|
||||||
|
public void InitializeServices()
|
||||||
|
{
|
||||||
|
HttpServer = Resolve<IHttpServer>();
|
||||||
|
}
|
||||||
|
|
||||||
public static void LogEnvironmentInfo(ILogger logger, IApplicationPaths appPaths)
|
public static void LogEnvironmentInfo(ILogger logger, IApplicationPaths appPaths)
|
||||||
{
|
{
|
||||||
// Distinct these to prevent users from reporting problems that aren't actually problems
|
// Distinct these to prevent users from reporting problems that aren't actually problems
|
||||||
|
@ -1172,7 +1162,7 @@ namespace Emby.Server.Implementations
|
||||||
{
|
{
|
||||||
exportedTypes = ass.GetExportedTypes();
|
exportedTypes = ass.GetExportedTypes();
|
||||||
}
|
}
|
||||||
catch (TypeLoadException ex)
|
catch (FileNotFoundException ex)
|
||||||
{
|
{
|
||||||
Logger.LogError(ex, "Error getting exported types from {Assembly}", ass.FullName);
|
Logger.LogError(ex, "Error getting exported types from {Assembly}", ass.FullName);
|
||||||
continue;
|
continue;
|
||||||
|
@ -1212,8 +1202,6 @@ namespace Emby.Server.Implementations
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
protected IHttpListener CreateHttpListener() => new WebSocketSharpListener(LoggerFactory.CreateLogger<WebSocketSharpListener>());
|
|
||||||
|
|
||||||
private CertificateInfo GetCertificateInfo(bool generateCertificate)
|
private CertificateInfo GetCertificateInfo(bool generateCertificate)
|
||||||
{
|
{
|
||||||
// Custom cert
|
// Custom cert
|
||||||
|
@ -1808,7 +1796,7 @@ namespace Emby.Server.Implementations
|
||||||
}
|
}
|
||||||
|
|
||||||
_userRepository?.Dispose();
|
_userRepository?.Dispose();
|
||||||
_displayPreferencesRepository.Dispose();
|
_displayPreferencesRepository?.Dispose();
|
||||||
}
|
}
|
||||||
|
|
||||||
_userRepository = null;
|
_userRepository = null;
|
||||||
|
|
|
@ -1,51 +1,48 @@
|
||||||
using System;
|
using System;
|
||||||
using MediaBrowser.Controller;
|
using MediaBrowser.Controller;
|
||||||
|
using Microsoft.Extensions.Logging;
|
||||||
|
|
||||||
namespace Emby.Server.Implementations.Browser
|
namespace Emby.Server.Implementations.Browser
|
||||||
{
|
{
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Class BrowserLauncher.
|
/// Assists in opening application URLs in an external browser.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public static class BrowserLauncher
|
public static class BrowserLauncher
|
||||||
{
|
{
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Opens the dashboard page.
|
/// Opens the home page of the web client.
|
||||||
/// </summary>
|
|
||||||
/// <param name="page">The page.</param>
|
|
||||||
/// <param name="appHost">The app host.</param>
|
|
||||||
private static void OpenDashboardPage(string page, IServerApplicationHost appHost)
|
|
||||||
{
|
|
||||||
var url = appHost.GetLocalApiUrl("localhost") + "/web/" + page;
|
|
||||||
|
|
||||||
OpenUrl(appHost, url);
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Opens the web client.
|
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="appHost">The app host.</param>
|
/// <param name="appHost">The app host.</param>
|
||||||
public static void OpenWebApp(IServerApplicationHost appHost)
|
public static void OpenWebApp(IServerApplicationHost appHost)
|
||||||
{
|
{
|
||||||
OpenDashboardPage("index.html", appHost);
|
TryOpenUrl(appHost, "/web/index.html");
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Opens the URL.
|
/// Opens the swagger API page.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="appHost">The application host instance.</param>
|
/// <param name="appHost">The app host.</param>
|
||||||
|
public static void OpenSwaggerPage(IServerApplicationHost appHost)
|
||||||
|
{
|
||||||
|
TryOpenUrl(appHost, "/swagger/index.html");
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Opens the specified URL in an external browser window. Any exceptions will be logged, but ignored.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="appHost">The application host.</param>
|
||||||
/// <param name="url">The URL.</param>
|
/// <param name="url">The URL.</param>
|
||||||
private static void OpenUrl(IServerApplicationHost appHost, string url)
|
private static void TryOpenUrl(IServerApplicationHost appHost, string url)
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
appHost.LaunchUrl(url);
|
string baseUrl = appHost.GetLocalApiUrl("localhost");
|
||||||
|
appHost.LaunchUrl(baseUrl + url);
|
||||||
}
|
}
|
||||||
catch (NotSupportedException)
|
catch (Exception ex)
|
||||||
{
|
|
||||||
|
|
||||||
}
|
|
||||||
catch (Exception)
|
|
||||||
{
|
{
|
||||||
|
var logger = appHost.Resolve<ILogger>();
|
||||||
|
logger?.LogError(ex, "Failed to open browser window with URL {URL}", url);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -9,6 +9,7 @@ using MediaBrowser.Controller.Channels;
|
||||||
using MediaBrowser.Controller.Library;
|
using MediaBrowser.Controller.Library;
|
||||||
using MediaBrowser.Model.Tasks;
|
using MediaBrowser.Model.Tasks;
|
||||||
using Microsoft.Extensions.Logging;
|
using Microsoft.Extensions.Logging;
|
||||||
|
using MediaBrowser.Model.Globalization;
|
||||||
|
|
||||||
namespace Emby.Server.Implementations.Channels
|
namespace Emby.Server.Implementations.Channels
|
||||||
{
|
{
|
||||||
|
@ -18,27 +19,30 @@ namespace Emby.Server.Implementations.Channels
|
||||||
private readonly IUserManager _userManager;
|
private readonly IUserManager _userManager;
|
||||||
private readonly ILogger _logger;
|
private readonly ILogger _logger;
|
||||||
private readonly ILibraryManager _libraryManager;
|
private readonly ILibraryManager _libraryManager;
|
||||||
|
private readonly ILocalizationManager _localization;
|
||||||
|
|
||||||
public RefreshChannelsScheduledTask(
|
public RefreshChannelsScheduledTask(
|
||||||
IChannelManager channelManager,
|
IChannelManager channelManager,
|
||||||
IUserManager userManager,
|
IUserManager userManager,
|
||||||
ILogger<RefreshChannelsScheduledTask> logger,
|
ILogger<RefreshChannelsScheduledTask> logger,
|
||||||
ILibraryManager libraryManager)
|
ILibraryManager libraryManager,
|
||||||
|
ILocalizationManager localization)
|
||||||
{
|
{
|
||||||
_channelManager = channelManager;
|
_channelManager = channelManager;
|
||||||
_userManager = userManager;
|
_userManager = userManager;
|
||||||
_logger = logger;
|
_logger = logger;
|
||||||
_libraryManager = libraryManager;
|
_libraryManager = libraryManager;
|
||||||
|
_localization = localization;
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <inheritdoc />
|
/// <inheritdoc />
|
||||||
public string Name => "Refresh Channels";
|
public string Name => _localization.GetLocalizedString("TasksRefreshChannels");
|
||||||
|
|
||||||
/// <inheritdoc />
|
/// <inheritdoc />
|
||||||
public string Description => "Refreshes internet channel information.";
|
public string Description => _localization.GetLocalizedString("TasksRefreshChannelsDescription");
|
||||||
|
|
||||||
/// <inheritdoc />
|
/// <inheritdoc />
|
||||||
public string Category => "Internet Channels";
|
public string Category => _localization.GetLocalizedString("TasksChannelsCategory");
|
||||||
|
|
||||||
/// <inheritdoc />
|
/// <inheritdoc />
|
||||||
public bool IsHidden => ((ChannelManager)_channelManager).Channels.Length == 0;
|
public bool IsHidden => ((ChannelManager)_channelManager).Channels.Length == 0;
|
||||||
|
|
|
@ -1,13 +1,22 @@
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
|
using Emby.Server.Implementations.HttpServer;
|
||||||
|
using MediaBrowser.Providers.Music;
|
||||||
using static MediaBrowser.Controller.Extensions.ConfigurationExtensions;
|
using static MediaBrowser.Controller.Extensions.ConfigurationExtensions;
|
||||||
|
|
||||||
namespace Emby.Server.Implementations
|
namespace Emby.Server.Implementations
|
||||||
{
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Static class containing the default configuration options for the web server.
|
||||||
|
/// </summary>
|
||||||
public static class ConfigurationOptions
|
public static class ConfigurationOptions
|
||||||
{
|
{
|
||||||
public static Dictionary<string, string> Configuration => new Dictionary<string, string>
|
/// <summary>
|
||||||
|
/// Gets a new copy of the default configuration options.
|
||||||
|
/// </summary>
|
||||||
|
public static Dictionary<string, string> DefaultConfiguration => new Dictionary<string, string>
|
||||||
{
|
{
|
||||||
{ "HttpListenerHost:DefaultRedirectPath", "web/index.html" },
|
{ HostWebClientKey, bool.TrueString },
|
||||||
|
{ HttpListenerHost.DefaultRedirectKey, "web/index.html" },
|
||||||
{ FfmpegProbeSizeKey, "1G" },
|
{ FfmpegProbeSizeKey, "1G" },
|
||||||
{ FfmpegAnalyzeDurationKey, "200M" },
|
{ FfmpegAnalyzeDurationKey, "200M" },
|
||||||
{ PlaylistsAllowDuplicatesKey, bool.TrueString }
|
{ PlaylistsAllowDuplicatesKey, bool.TrueString }
|
||||||
|
|
|
@ -2006,7 +2006,7 @@ namespace Emby.Server.Implementations.Data
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Saves the chapters.
|
/// Saves the chapters.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public void SaveChapters(Guid id, List<ChapterInfo> chapters)
|
public void SaveChapters(Guid id, IReadOnlyList<ChapterInfo> chapters)
|
||||||
{
|
{
|
||||||
CheckDisposed();
|
CheckDisposed();
|
||||||
|
|
||||||
|
@ -2035,22 +2035,24 @@ namespace Emby.Server.Implementations.Data
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void InsertChapters(byte[] idBlob, List<ChapterInfo> chapters, IDatabaseConnection db)
|
private void InsertChapters(byte[] idBlob, IReadOnlyList<ChapterInfo> chapters, IDatabaseConnection db)
|
||||||
{
|
{
|
||||||
var startIndex = 0;
|
var startIndex = 0;
|
||||||
var limit = 100;
|
var limit = 100;
|
||||||
var chapterIndex = 0;
|
var chapterIndex = 0;
|
||||||
|
|
||||||
|
const string StartInsertText = "insert into " + ChaptersTableName + " (ItemId, ChapterIndex, StartPositionTicks, Name, ImagePath, ImageDateModified) values ";
|
||||||
|
var insertText = new StringBuilder(StartInsertText, 256);
|
||||||
|
|
||||||
while (startIndex < chapters.Count)
|
while (startIndex < chapters.Count)
|
||||||
{
|
{
|
||||||
var insertText = new StringBuilder("insert into " + ChaptersTableName + " (ItemId, ChapterIndex, StartPositionTicks, Name, ImagePath, ImageDateModified) values ");
|
|
||||||
|
|
||||||
var endIndex = Math.Min(chapters.Count, startIndex + limit);
|
var endIndex = Math.Min(chapters.Count, startIndex + limit);
|
||||||
|
|
||||||
for (var i = startIndex; i < endIndex; i++)
|
for (var i = startIndex; i < endIndex; i++)
|
||||||
{
|
{
|
||||||
insertText.AppendFormat("(@ItemId, @ChapterIndex{0}, @StartPositionTicks{0}, @Name{0}, @ImagePath{0}, @ImageDateModified{0}),", i.ToString(CultureInfo.InvariantCulture));
|
insertText.AppendFormat("(@ItemId, @ChapterIndex{0}, @StartPositionTicks{0}, @Name{0}, @ImagePath{0}, @ImageDateModified{0}),", i.ToString(CultureInfo.InvariantCulture));
|
||||||
}
|
}
|
||||||
|
|
||||||
insertText.Length -= 1; // Remove last ,
|
insertText.Length -= 1; // Remove last ,
|
||||||
|
|
||||||
using (var statement = PrepareStatement(db, insertText.ToString()))
|
using (var statement = PrepareStatement(db, insertText.ToString()))
|
||||||
|
@ -2077,6 +2079,7 @@ namespace Emby.Server.Implementations.Data
|
||||||
}
|
}
|
||||||
|
|
||||||
startIndex += limit;
|
startIndex += limit;
|
||||||
|
insertText.Length = StartInsertText.Length;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2914,29 +2917,30 @@ namespace Emby.Server.Implementations.Data
|
||||||
private string GetOrderByText(InternalItemsQuery query)
|
private string GetOrderByText(InternalItemsQuery query)
|
||||||
{
|
{
|
||||||
var orderBy = query.OrderBy;
|
var orderBy = query.OrderBy;
|
||||||
if (string.IsNullOrEmpty(query.SearchTerm))
|
bool hasSimilar = query.SimilarTo != null;
|
||||||
|
bool hasSearch = !string.IsNullOrEmpty(query.SearchTerm);
|
||||||
|
|
||||||
|
if (hasSimilar || hasSearch)
|
||||||
{
|
{
|
||||||
int oldLen = orderBy.Count;
|
List<(string, SortOrder)> prepend = new List<(string, SortOrder)>(4);
|
||||||
if (oldLen == 0 && query.SimilarTo != null)
|
if (hasSearch)
|
||||||
{
|
{
|
||||||
var arr = new (string, SortOrder)[oldLen + 2];
|
prepend.Add(("SearchScore", SortOrder.Descending));
|
||||||
orderBy.CopyTo(arr, 0);
|
prepend.Add((ItemSortBy.SortName, SortOrder.Ascending));
|
||||||
arr[oldLen] = ("SimilarityScore", SortOrder.Descending);
|
|
||||||
arr[oldLen + 1] = (ItemSortBy.Random, SortOrder.Ascending);
|
|
||||||
query.OrderBy = arr;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
query.OrderBy = new[]
|
|
||||||
{
|
|
||||||
("SearchScore", SortOrder.Descending),
|
|
||||||
(ItemSortBy.SortName, SortOrder.Ascending)
|
|
||||||
};
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (hasSimilar)
|
||||||
|
{
|
||||||
|
prepend.Add(("SimilarityScore", SortOrder.Descending));
|
||||||
|
prepend.Add((ItemSortBy.Random, SortOrder.Ascending));
|
||||||
|
}
|
||||||
|
|
||||||
if (orderBy.Count == 0)
|
var arr = new (string, SortOrder)[prepend.Count + orderBy.Count];
|
||||||
|
prepend.CopyTo(arr, 0);
|
||||||
|
orderBy.CopyTo(arr, prepend.Count);
|
||||||
|
orderBy = query.OrderBy = arr;
|
||||||
|
}
|
||||||
|
else if (orderBy.Count == 0)
|
||||||
{
|
{
|
||||||
return string.Empty;
|
return string.Empty;
|
||||||
}
|
}
|
||||||
|
@ -6158,7 +6162,8 @@ where AncestorIdText not null and ItemValues.Value not null and ItemValues.Type
|
||||||
item.ColorTransfer = reader[34].ToString();
|
item.ColorTransfer = reader[34].ToString();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (item.Type == MediaStreamType.Subtitle){
|
if (item.Type == MediaStreamType.Subtitle)
|
||||||
|
{
|
||||||
item.localizedUndefined = _localization.GetLocalizedString("Undefined");
|
item.localizedUndefined = _localization.GetLocalizedString("Undefined");
|
||||||
item.localizedDefault = _localization.GetLocalizedString("Default");
|
item.localizedDefault = _localization.GetLocalizedString("Default");
|
||||||
item.localizedForced = _localization.GetLocalizedString("Forced");
|
item.localizedForced = _localization.GetLocalizedString("Forced");
|
||||||
|
@ -6287,8 +6292,8 @@ where AncestorIdText not null and ItemValues.Value not null and ItemValues.Type
|
||||||
statement.TryBind("@Codec" + index, attachment.Codec);
|
statement.TryBind("@Codec" + index, attachment.Codec);
|
||||||
statement.TryBind("@CodecTag" + index, attachment.CodecTag);
|
statement.TryBind("@CodecTag" + index, attachment.CodecTag);
|
||||||
statement.TryBind("@Comment" + index, attachment.Comment);
|
statement.TryBind("@Comment" + index, attachment.Comment);
|
||||||
statement.TryBind("@FileName" + index, attachment.FileName);
|
statement.TryBind("@Filename" + index, attachment.FileName);
|
||||||
statement.TryBind("@MimeType" + index, attachment.MimeType);
|
statement.TryBind("@MIMEType" + index, attachment.MimeType);
|
||||||
}
|
}
|
||||||
|
|
||||||
statement.Reset();
|
statement.Reset();
|
||||||
|
|
|
@ -25,7 +25,7 @@ namespace Emby.Server.Implementations.Data
|
||||||
IServerApplicationPaths appPaths)
|
IServerApplicationPaths appPaths)
|
||||||
: base(logger)
|
: base(logger)
|
||||||
{
|
{
|
||||||
_jsonOptions = JsonDefaults.GetOptions();;
|
_jsonOptions = JsonDefaults.GetOptions();
|
||||||
|
|
||||||
DbFilePath = Path.Combine(appPaths.DataPath, "users.db");
|
DbFilePath = Path.Combine(appPaths.DataPath, "users.db");
|
||||||
}
|
}
|
||||||
|
|
|
@ -29,9 +29,9 @@
|
||||||
<PackageReference Include="Microsoft.AspNetCore.ResponseCompression" Version="2.2.0" />
|
<PackageReference Include="Microsoft.AspNetCore.ResponseCompression" Version="2.2.0" />
|
||||||
<PackageReference Include="Microsoft.AspNetCore.Server.Kestrel" Version="2.2.0" />
|
<PackageReference Include="Microsoft.AspNetCore.Server.Kestrel" Version="2.2.0" />
|
||||||
<PackageReference Include="Microsoft.AspNetCore.WebSockets" Version="2.2.1" />
|
<PackageReference Include="Microsoft.AspNetCore.WebSockets" Version="2.2.1" />
|
||||||
<PackageReference Include="Microsoft.Extensions.DependencyInjection" Version="3.1.1" />
|
<PackageReference Include="Microsoft.Extensions.DependencyInjection" Version="3.1.3" />
|
||||||
<PackageReference Include="Microsoft.Extensions.Caching.Memory" Version="3.1.1" />
|
<PackageReference Include="Microsoft.Extensions.Caching.Memory" Version="3.1.3" />
|
||||||
<PackageReference Include="Microsoft.Extensions.Configuration.Abstractions" Version="3.1.1" />
|
<PackageReference Include="Microsoft.Extensions.Configuration.Abstractions" Version="3.1.3" />
|
||||||
<PackageReference Include="Mono.Nat" Version="2.0.0" />
|
<PackageReference Include="Mono.Nat" Version="2.0.0" />
|
||||||
<PackageReference Include="ServiceStack.Text.Core" Version="5.8.0" />
|
<PackageReference Include="ServiceStack.Text.Core" Version="5.8.0" />
|
||||||
<PackageReference Include="sharpcompress" Version="0.24.0" />
|
<PackageReference Include="sharpcompress" Version="0.24.0" />
|
||||||
|
|
|
@ -2,7 +2,9 @@ using System.Threading.Tasks;
|
||||||
using Emby.Server.Implementations.Browser;
|
using Emby.Server.Implementations.Browser;
|
||||||
using MediaBrowser.Controller;
|
using MediaBrowser.Controller;
|
||||||
using MediaBrowser.Controller.Configuration;
|
using MediaBrowser.Controller.Configuration;
|
||||||
|
using MediaBrowser.Controller.Extensions;
|
||||||
using MediaBrowser.Controller.Plugins;
|
using MediaBrowser.Controller.Plugins;
|
||||||
|
using Microsoft.Extensions.Configuration;
|
||||||
|
|
||||||
namespace Emby.Server.Implementations.EntryPoints
|
namespace Emby.Server.Implementations.EntryPoints
|
||||||
{
|
{
|
||||||
|
@ -11,10 +13,8 @@ namespace Emby.Server.Implementations.EntryPoints
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public sealed class StartupWizard : IServerEntryPoint
|
public sealed class StartupWizard : IServerEntryPoint
|
||||||
{
|
{
|
||||||
/// <summary>
|
|
||||||
/// The app host.
|
|
||||||
/// </summary>
|
|
||||||
private readonly IServerApplicationHost _appHost;
|
private readonly IServerApplicationHost _appHost;
|
||||||
|
private readonly IConfiguration _appConfig;
|
||||||
private readonly IServerConfigurationManager _config;
|
private readonly IServerConfigurationManager _config;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
@ -22,9 +22,10 @@ namespace Emby.Server.Implementations.EntryPoints
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="appHost">The application host.</param>
|
/// <param name="appHost">The application host.</param>
|
||||||
/// <param name="config">The configuration manager.</param>
|
/// <param name="config">The configuration manager.</param>
|
||||||
public StartupWizard(IServerApplicationHost appHost, IServerConfigurationManager config)
|
public StartupWizard(IServerApplicationHost appHost, IConfiguration appConfig, IServerConfigurationManager config)
|
||||||
{
|
{
|
||||||
_appHost = appHost;
|
_appHost = appHost;
|
||||||
|
_appConfig = appConfig;
|
||||||
_config = config;
|
_config = config;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -36,7 +37,11 @@ namespace Emby.Server.Implementations.EntryPoints
|
||||||
return Task.CompletedTask;
|
return Task.CompletedTask;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!_config.Configuration.IsStartupWizardCompleted)
|
if (!_appConfig.HostWebClient())
|
||||||
|
{
|
||||||
|
BrowserLauncher.OpenSwaggerPage(_appHost);
|
||||||
|
}
|
||||||
|
else if (!_config.Configuration.IsStartupWizardCompleted)
|
||||||
{
|
{
|
||||||
BrowserLauncher.OpenWebApp(_appHost);
|
BrowserLauncher.OpenWebApp(_appHost);
|
||||||
}
|
}
|
||||||
|
|
|
@ -11,8 +11,8 @@ using System.Threading;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
using MediaBrowser.Model.IO;
|
using MediaBrowser.Model.IO;
|
||||||
using MediaBrowser.Model.Services;
|
using MediaBrowser.Model.Services;
|
||||||
using Microsoft.Extensions.Logging;
|
|
||||||
using Microsoft.AspNetCore.Http;
|
using Microsoft.AspNetCore.Http;
|
||||||
|
using Microsoft.Extensions.Logging;
|
||||||
using Microsoft.Net.Http.Headers;
|
using Microsoft.Net.Http.Headers;
|
||||||
|
|
||||||
namespace Emby.Server.Implementations.HttpServer
|
namespace Emby.Server.Implementations.HttpServer
|
||||||
|
|
|
@ -17,6 +17,7 @@ using MediaBrowser.Controller;
|
||||||
using MediaBrowser.Controller.Configuration;
|
using MediaBrowser.Controller.Configuration;
|
||||||
using MediaBrowser.Controller.Net;
|
using MediaBrowser.Controller.Net;
|
||||||
using MediaBrowser.Model.Events;
|
using MediaBrowser.Model.Events;
|
||||||
|
using MediaBrowser.Model.Globalization;
|
||||||
using MediaBrowser.Model.Serialization;
|
using MediaBrowser.Model.Serialization;
|
||||||
using MediaBrowser.Model.Services;
|
using MediaBrowser.Model.Services;
|
||||||
using Microsoft.AspNetCore.Http;
|
using Microsoft.AspNetCore.Http;
|
||||||
|
@ -29,6 +30,12 @@ namespace Emby.Server.Implementations.HttpServer
|
||||||
{
|
{
|
||||||
public class HttpListenerHost : IHttpServer, IDisposable
|
public class HttpListenerHost : IHttpServer, IDisposable
|
||||||
{
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// The key for a setting that specifies the default redirect path
|
||||||
|
/// to use for requests where the URL base prefix is invalid or missing.
|
||||||
|
/// </summary>
|
||||||
|
public const string DefaultRedirectKey = "HttpListenerHost:DefaultRedirectPath";
|
||||||
|
|
||||||
private readonly ILogger _logger;
|
private readonly ILogger _logger;
|
||||||
private readonly IServerConfigurationManager _config;
|
private readonly IServerConfigurationManager _config;
|
||||||
private readonly INetworkManager _networkManager;
|
private readonly INetworkManager _networkManager;
|
||||||
|
@ -52,12 +59,13 @@ namespace Emby.Server.Implementations.HttpServer
|
||||||
INetworkManager networkManager,
|
INetworkManager networkManager,
|
||||||
IJsonSerializer jsonSerializer,
|
IJsonSerializer jsonSerializer,
|
||||||
IXmlSerializer xmlSerializer,
|
IXmlSerializer xmlSerializer,
|
||||||
IHttpListener socketListener)
|
IHttpListener socketListener,
|
||||||
|
ILocalizationManager localizationManager)
|
||||||
{
|
{
|
||||||
_appHost = applicationHost;
|
_appHost = applicationHost;
|
||||||
_logger = logger;
|
_logger = logger;
|
||||||
_config = config;
|
_config = config;
|
||||||
_defaultRedirectPath = configuration["HttpListenerHost:DefaultRedirectPath"];
|
_defaultRedirectPath = configuration[DefaultRedirectKey];
|
||||||
_baseUrlPrefix = _config.Configuration.BaseUrl;
|
_baseUrlPrefix = _config.Configuration.BaseUrl;
|
||||||
_networkManager = networkManager;
|
_networkManager = networkManager;
|
||||||
_jsonSerializer = jsonSerializer;
|
_jsonSerializer = jsonSerializer;
|
||||||
|
@ -69,6 +77,7 @@ namespace Emby.Server.Implementations.HttpServer
|
||||||
|
|
||||||
Instance = this;
|
Instance = this;
|
||||||
ResponseFilters = Array.Empty<Action<IRequest, HttpResponse, object>>();
|
ResponseFilters = Array.Empty<Action<IRequest, HttpResponse, object>>();
|
||||||
|
GlobalResponse = localizationManager.GetLocalizedString("StartupEmbyServerIsLoading");
|
||||||
}
|
}
|
||||||
|
|
||||||
public event EventHandler<GenericEventArgs<IWebSocketConnection>> WebSocketConnected;
|
public event EventHandler<GenericEventArgs<IWebSocketConnection>> WebSocketConnected;
|
||||||
|
|
|
@ -8,7 +8,6 @@ using MediaBrowser.Controller.Entities.TV;
|
||||||
using MediaBrowser.Controller.Library;
|
using MediaBrowser.Controller.Library;
|
||||||
using MediaBrowser.Controller.Providers;
|
using MediaBrowser.Controller.Providers;
|
||||||
using MediaBrowser.Controller.Resolvers;
|
using MediaBrowser.Controller.Resolvers;
|
||||||
using MediaBrowser.Model.Configuration;
|
|
||||||
using MediaBrowser.Model.Entities;
|
using MediaBrowser.Model.Entities;
|
||||||
using MediaBrowser.Model.IO;
|
using MediaBrowser.Model.IO;
|
||||||
using Microsoft.Extensions.Logging;
|
using Microsoft.Extensions.Logging;
|
||||||
|
|
|
@ -1,5 +1,4 @@
|
||||||
#pragma warning disable CS1591
|
#pragma warning disable CS1591
|
||||||
#pragma warning disable SA1600
|
|
||||||
|
|
||||||
using System;
|
using System;
|
||||||
using System.IO;
|
using System.IO;
|
||||||
|
|
|
@ -1,5 +1,4 @@
|
||||||
#pragma warning disable CS1591
|
#pragma warning disable CS1591
|
||||||
#pragma warning disable SA1600
|
|
||||||
|
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
|
|
|
@ -1,5 +1,4 @@
|
||||||
#pragma warning disable CS1591
|
#pragma warning disable CS1591
|
||||||
#pragma warning disable SA1600
|
|
||||||
|
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
using MediaBrowser.Controller.Plugins;
|
using MediaBrowser.Controller.Plugins;
|
||||||
|
|
|
@ -1,5 +1,4 @@
|
||||||
#pragma warning disable CS1591
|
#pragma warning disable CS1591
|
||||||
#pragma warning disable SA1600
|
|
||||||
|
|
||||||
using System;
|
using System;
|
||||||
using System.Threading;
|
using System.Threading;
|
||||||
|
|
|
@ -1,5 +1,4 @@
|
||||||
#pragma warning disable CS1591
|
#pragma warning disable CS1591
|
||||||
#pragma warning disable SA1600
|
|
||||||
|
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
|
|
|
@ -1,5 +1,4 @@
|
||||||
#pragma warning disable CS1591
|
#pragma warning disable CS1591
|
||||||
#pragma warning disable SA1600
|
|
||||||
|
|
||||||
using System;
|
using System;
|
||||||
using System.Globalization;
|
using System.Globalization;
|
||||||
|
|
|
@ -1,5 +1,4 @@
|
||||||
#pragma warning disable CS1591
|
#pragma warning disable CS1591
|
||||||
#pragma warning disable SA1600
|
|
||||||
|
|
||||||
using System;
|
using System;
|
||||||
using MediaBrowser.Controller.LiveTv;
|
using MediaBrowser.Controller.LiveTv;
|
||||||
|
|
|
@ -1,5 +1,4 @@
|
||||||
#pragma warning disable CS1591
|
#pragma warning disable CS1591
|
||||||
#pragma warning disable SA1600
|
|
||||||
|
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Concurrent;
|
using System.Collections.Concurrent;
|
||||||
|
|
|
@ -1,5 +1,4 @@
|
||||||
#pragma warning disable CS1591
|
#pragma warning disable CS1591
|
||||||
#pragma warning disable SA1600
|
|
||||||
|
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Concurrent;
|
using System.Collections.Concurrent;
|
||||||
|
|
|
@ -1,5 +1,4 @@
|
||||||
#pragma warning disable CS1591
|
#pragma warning disable CS1591
|
||||||
#pragma warning disable SA1600
|
|
||||||
|
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
|
|
|
@ -1,5 +1,4 @@
|
||||||
#pragma warning disable CS1591
|
#pragma warning disable CS1591
|
||||||
#pragma warning disable SA1600
|
|
||||||
|
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using MediaBrowser.Common.Configuration;
|
using MediaBrowser.Common.Configuration;
|
||||||
|
|
|
@ -1,5 +1,4 @@
|
||||||
#pragma warning disable CS1591
|
#pragma warning disable CS1591
|
||||||
#pragma warning disable SA1600
|
|
||||||
|
|
||||||
using System;
|
using System;
|
||||||
using System.Globalization;
|
using System.Globalization;
|
||||||
|
|
|
@ -1,5 +1,4 @@
|
||||||
#pragma warning disable CS1591
|
#pragma warning disable CS1591
|
||||||
#pragma warning disable SA1600
|
|
||||||
|
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
|
|
|
@ -1,5 +1,4 @@
|
||||||
#pragma warning disable CS1591
|
#pragma warning disable CS1591
|
||||||
#pragma warning disable SA1600
|
|
||||||
|
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
|
|
|
@ -1,5 +1,4 @@
|
||||||
#pragma warning disable CS1591
|
#pragma warning disable CS1591
|
||||||
#pragma warning disable SA1600
|
|
||||||
|
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Concurrent;
|
using System.Collections.Concurrent;
|
||||||
|
|
|
@ -1,5 +1,4 @@
|
||||||
#pragma warning disable CS1591
|
#pragma warning disable CS1591
|
||||||
#pragma warning disable SA1600
|
|
||||||
|
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
|
|
|
@ -1,5 +1,4 @@
|
||||||
#pragma warning disable CS1591
|
#pragma warning disable CS1591
|
||||||
#pragma warning disable SA1600
|
|
||||||
|
|
||||||
using System;
|
using System;
|
||||||
using System.Buffers;
|
using System.Buffers;
|
||||||
|
|
|
@ -1,5 +1,4 @@
|
||||||
#pragma warning disable CS1591
|
#pragma warning disable CS1591
|
||||||
#pragma warning disable SA1600
|
|
||||||
|
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
|
@ -8,8 +7,8 @@ using System.Net;
|
||||||
using System.Net.Sockets;
|
using System.Net.Sockets;
|
||||||
using System.Threading;
|
using System.Threading;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
using MediaBrowser.Common.Net;
|
|
||||||
using MediaBrowser.Common.Configuration;
|
using MediaBrowser.Common.Configuration;
|
||||||
|
using MediaBrowser.Common.Net;
|
||||||
using MediaBrowser.Controller;
|
using MediaBrowser.Controller;
|
||||||
using MediaBrowser.Controller.Library;
|
using MediaBrowser.Controller.Library;
|
||||||
using MediaBrowser.Model.Dto;
|
using MediaBrowser.Model.Dto;
|
||||||
|
|
|
@ -1,5 +1,4 @@
|
||||||
#pragma warning disable CS1591
|
#pragma warning disable CS1591
|
||||||
#pragma warning disable SA1600
|
|
||||||
|
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
|
@ -8,8 +7,8 @@ using System.IO;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Threading;
|
using System.Threading;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
using MediaBrowser.Controller.Library;
|
|
||||||
using MediaBrowser.Common.Configuration;
|
using MediaBrowser.Common.Configuration;
|
||||||
|
using MediaBrowser.Controller.Library;
|
||||||
using MediaBrowser.Model.Dto;
|
using MediaBrowser.Model.Dto;
|
||||||
using MediaBrowser.Model.IO;
|
using MediaBrowser.Model.IO;
|
||||||
using MediaBrowser.Model.LiveTv;
|
using MediaBrowser.Model.LiveTv;
|
||||||
|
|
|
@ -1,5 +1,4 @@
|
||||||
#pragma warning disable CS1591
|
#pragma warning disable CS1591
|
||||||
#pragma warning disable SA1600
|
|
||||||
|
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
|
|
|
@ -1,5 +1,4 @@
|
||||||
#pragma warning disable CS1591
|
#pragma warning disable CS1591
|
||||||
#pragma warning disable SA1600
|
|
||||||
|
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
|
|
|
@ -1,5 +1,4 @@
|
||||||
#pragma warning disable CS1591
|
#pragma warning disable CS1591
|
||||||
#pragma warning disable SA1600
|
|
||||||
|
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
|
|
|
@ -41,7 +41,6 @@
|
||||||
"User": "Gebruiker",
|
"User": "Gebruiker",
|
||||||
"TvShows": "TV Programme",
|
"TvShows": "TV Programme",
|
||||||
"System": "Stelsel",
|
"System": "Stelsel",
|
||||||
"SubtitlesDownloadedForItem": "Ondertitels afgelaai vir {0}",
|
|
||||||
"SubtitleDownloadFailureFromForItem": "Ondertitels het misluk om af te laai van {0} vir {1}",
|
"SubtitleDownloadFailureFromForItem": "Ondertitels het misluk om af te laai van {0} vir {1}",
|
||||||
"StartupEmbyServerIsLoading": "Jellyfin Bediener is besig om te laai. Probeer weer in 'n kort tyd.",
|
"StartupEmbyServerIsLoading": "Jellyfin Bediener is besig om te laai. Probeer weer in 'n kort tyd.",
|
||||||
"ServerNameNeedsToBeRestarted": "{0} moet herbegin word",
|
"ServerNameNeedsToBeRestarted": "{0} moet herbegin word",
|
||||||
|
|
|
@ -4,10 +4,10 @@
|
||||||
"Application": "تطبيق",
|
"Application": "تطبيق",
|
||||||
"Artists": "الفنانين",
|
"Artists": "الفنانين",
|
||||||
"AuthenticationSucceededWithUserName": "{0} سجل الدخول بنجاح",
|
"AuthenticationSucceededWithUserName": "{0} سجل الدخول بنجاح",
|
||||||
"Books": "كتب",
|
"Books": "الكتب",
|
||||||
"CameraImageUploadedFrom": "صورة كاميرا جديدة تم رفعها من {0}",
|
"CameraImageUploadedFrom": "صورة كاميرا جديدة تم رفعها من {0}",
|
||||||
"Channels": "القنوات",
|
"Channels": "القنوات",
|
||||||
"ChapterNameValue": "فصل {0}",
|
"ChapterNameValue": "الفصل {0}",
|
||||||
"Collections": "مجموعات",
|
"Collections": "مجموعات",
|
||||||
"DeviceOfflineWithName": "قُطِع الاتصال بـ{0}",
|
"DeviceOfflineWithName": "قُطِع الاتصال بـ{0}",
|
||||||
"DeviceOnlineWithName": "{0} متصل",
|
"DeviceOnlineWithName": "{0} متصل",
|
||||||
|
@ -51,8 +51,8 @@
|
||||||
"NotificationOptionAudioPlaybackStopped": "تم إيقاف تشغيل المقطع الصوتي",
|
"NotificationOptionAudioPlaybackStopped": "تم إيقاف تشغيل المقطع الصوتي",
|
||||||
"NotificationOptionCameraImageUploaded": "تم رفع صورة الكاميرا",
|
"NotificationOptionCameraImageUploaded": "تم رفع صورة الكاميرا",
|
||||||
"NotificationOptionInstallationFailed": "فشل في التثبيت",
|
"NotificationOptionInstallationFailed": "فشل في التثبيت",
|
||||||
"NotificationOptionNewLibraryContent": "أُضِيفَ محتوى جديد",
|
"NotificationOptionNewLibraryContent": "تم إضافة محتوى جديد",
|
||||||
"NotificationOptionPluginError": "فشل في الـPlugin",
|
"NotificationOptionPluginError": "فشل في البرنامج المضاف",
|
||||||
"NotificationOptionPluginInstalled": "تم تثبيت الملحق",
|
"NotificationOptionPluginInstalled": "تم تثبيت الملحق",
|
||||||
"NotificationOptionPluginUninstalled": "تمت إزالة الملحق",
|
"NotificationOptionPluginUninstalled": "تمت إزالة الملحق",
|
||||||
"NotificationOptionPluginUpdateInstalled": "تم تثبيت تحديثات الملحق",
|
"NotificationOptionPluginUpdateInstalled": "تم تثبيت تحديثات الملحق",
|
||||||
|
@ -76,7 +76,6 @@
|
||||||
"StartupEmbyServerIsLoading": "سيرفر Jellyfin قيد التشغيل . الرجاء المحاولة بعد قليل.",
|
"StartupEmbyServerIsLoading": "سيرفر Jellyfin قيد التشغيل . الرجاء المحاولة بعد قليل.",
|
||||||
"SubtitleDownloadFailureForItem": "عملية إنزال الترجمة فشلت لـ{0}",
|
"SubtitleDownloadFailureForItem": "عملية إنزال الترجمة فشلت لـ{0}",
|
||||||
"SubtitleDownloadFailureFromForItem": "الترجمات فشلت في التحميل من {0} الى {1}",
|
"SubtitleDownloadFailureFromForItem": "الترجمات فشلت في التحميل من {0} الى {1}",
|
||||||
"SubtitlesDownloadedForItem": "تم تحميل الترجمات الى {0}",
|
|
||||||
"Sync": "مزامنة",
|
"Sync": "مزامنة",
|
||||||
"System": "النظام",
|
"System": "النظام",
|
||||||
"TvShows": "البرامج التلفزيونية",
|
"TvShows": "البرامج التلفزيونية",
|
||||||
|
|
|
@ -1,8 +1,8 @@
|
||||||
{
|
{
|
||||||
"Albums": "Албуми",
|
"Albums": "Албуми",
|
||||||
"AppDeviceValues": "Програма: {0}, устройство: {1}",
|
"AppDeviceValues": "Програма: {0}, Устройство: {1}",
|
||||||
"Application": "Програма",
|
"Application": "Програма",
|
||||||
"Artists": "Изпълнители",
|
"Artists": "Артисти",
|
||||||
"AuthenticationSucceededWithUserName": "{0} се удостовери успешно",
|
"AuthenticationSucceededWithUserName": "{0} се удостовери успешно",
|
||||||
"Books": "Книги",
|
"Books": "Книги",
|
||||||
"CameraImageUploadedFrom": "Нова снимка от камера беше качена от {0}",
|
"CameraImageUploadedFrom": "Нова снимка от камера беше качена от {0}",
|
||||||
|
@ -76,7 +76,6 @@
|
||||||
"StartupEmbyServerIsLoading": "Сървърът зарежда. Моля, опитайте отново след малко.",
|
"StartupEmbyServerIsLoading": "Сървърът зарежда. Моля, опитайте отново след малко.",
|
||||||
"SubtitleDownloadFailureForItem": "Неуспешно изтегляне на субтитри за {0}",
|
"SubtitleDownloadFailureForItem": "Неуспешно изтегляне на субтитри за {0}",
|
||||||
"SubtitleDownloadFailureFromForItem": "Поднадписите за {1} от {0} не можаха да се изтеглят",
|
"SubtitleDownloadFailureFromForItem": "Поднадписите за {1} от {0} не можаха да се изтеглят",
|
||||||
"SubtitlesDownloadedForItem": "Изтеглени са субтитри за {0}",
|
|
||||||
"Sync": "Синхронизиране",
|
"Sync": "Синхронизиране",
|
||||||
"System": "Система",
|
"System": "Система",
|
||||||
"TvShows": "Телевизионни сериали",
|
"TvShows": "Телевизионни сериали",
|
||||||
|
@ -93,5 +92,27 @@
|
||||||
"UserStoppedPlayingItemWithValues": "{0} спря {1}",
|
"UserStoppedPlayingItemWithValues": "{0} спря {1}",
|
||||||
"ValueHasBeenAddedToLibrary": "{0} беше добавен във Вашата библиотека",
|
"ValueHasBeenAddedToLibrary": "{0} беше добавен във Вашата библиотека",
|
||||||
"ValueSpecialEpisodeName": "Специални - {0}",
|
"ValueSpecialEpisodeName": "Специални - {0}",
|
||||||
"VersionNumber": "Версия {0}"
|
"VersionNumber": "Версия {0}",
|
||||||
|
"TaskDownloadMissingSubtitlesDescription": "Търси Интернет за липсващи поднадписи, на база конфигурацията за мета-данни.",
|
||||||
|
"TaskDownloadMissingSubtitles": "Изтегляне на липсващи поднадписи",
|
||||||
|
"TaskRefreshChannelsDescription": "Обновява информацията за интернет канала.",
|
||||||
|
"TaskRefreshChannels": "Обновяване на Канали",
|
||||||
|
"TaskCleanTranscodeDescription": "Изтрива прекодирани файлове по-стари от един ден.",
|
||||||
|
"TaskCleanTranscode": "Изчиства директорията за прекодиране",
|
||||||
|
"TaskUpdatePluginsDescription": "Изтегля и инсталира актуализации за добавките, които са настроени за автоматична актуализация.",
|
||||||
|
"TaskUpdatePlugins": "Актуализира добавките",
|
||||||
|
"TaskRefreshPeopleDescription": "Актуализира мета-данните за артистите и режисьорите за Вашата медийна библиотека.",
|
||||||
|
"TaskRefreshPeople": "Обновяване на участниците",
|
||||||
|
"TaskCleanLogsDescription": "Изтрива лог файлове по-стари от {0} дни.",
|
||||||
|
"TaskCleanLogs": "Изчисти директорията с логове",
|
||||||
|
"TaskRefreshLibraryDescription": "Сканира Вашата библиотека с медия за нови файлове и обновява мета-данните.",
|
||||||
|
"TaskRefreshLibrary": "Сканиране на библиотеката с медия",
|
||||||
|
"TaskRefreshChapterImagesDescription": "Създава иконки за видеа, които имат епизоди.",
|
||||||
|
"TaskRefreshChapterImages": "Извличане на изображения за епизода",
|
||||||
|
"TaskCleanCacheDescription": "Изтриване на ненужните от системата файлове.",
|
||||||
|
"TaskCleanCache": "Изчистване на Кеш-директорията",
|
||||||
|
"TasksChannelsCategory": "Интернет Канали",
|
||||||
|
"TasksApplicationCategory": "Приложение",
|
||||||
|
"TasksLibraryCategory": "Библиотека",
|
||||||
|
"TasksMaintenanceCategory": "Поддръжка"
|
||||||
}
|
}
|
||||||
|
|
|
@ -38,7 +38,6 @@
|
||||||
"TvShows": "টিভি শোগুলো",
|
"TvShows": "টিভি শোগুলো",
|
||||||
"System": "সিস্টেম",
|
"System": "সিস্টেম",
|
||||||
"Sync": "সিংক",
|
"Sync": "সিংক",
|
||||||
"SubtitlesDownloadedForItem": "{0} এর জন্য সাবটাইটেল ডাউনলোড করা হয়েছে",
|
|
||||||
"SubtitleDownloadFailureFromForItem": "{2} থেকে {1} এর জন্য সাবটাইটেল ডাউনলোড ব্যর্থ",
|
"SubtitleDownloadFailureFromForItem": "{2} থেকে {1} এর জন্য সাবটাইটেল ডাউনলোড ব্যর্থ",
|
||||||
"StartupEmbyServerIsLoading": "জেলিফিন সার্ভার লোড হচ্ছে। দয়া করে একটু পরে আবার চেষ্টা করুন।",
|
"StartupEmbyServerIsLoading": "জেলিফিন সার্ভার লোড হচ্ছে। দয়া করে একটু পরে আবার চেষ্টা করুন।",
|
||||||
"Songs": "গানগুলো",
|
"Songs": "গানগুলো",
|
||||||
|
|
|
@ -76,7 +76,6 @@
|
||||||
"StartupEmbyServerIsLoading": "El Servidor d'Jellyfin està carregant. Si et plau, prova de nou en breus.",
|
"StartupEmbyServerIsLoading": "El Servidor d'Jellyfin està carregant. Si et plau, prova de nou en breus.",
|
||||||
"SubtitleDownloadFailureForItem": "Subtitles failed to download for {0}",
|
"SubtitleDownloadFailureForItem": "Subtitles failed to download for {0}",
|
||||||
"SubtitleDownloadFailureFromForItem": "Els subtítols no s'han pogut baixar de {0} per {1}",
|
"SubtitleDownloadFailureFromForItem": "Els subtítols no s'han pogut baixar de {0} per {1}",
|
||||||
"SubtitlesDownloadedForItem": "Subtítols descarregats per a {0}",
|
|
||||||
"Sync": "Sincronitzar",
|
"Sync": "Sincronitzar",
|
||||||
"System": "System",
|
"System": "System",
|
||||||
"TvShows": "Espectacles de TV",
|
"TvShows": "Espectacles de TV",
|
||||||
|
|
|
@ -76,7 +76,6 @@
|
||||||
"StartupEmbyServerIsLoading": "Jellyfin Server je spouštěn. Zkuste to prosím v brzké době znovu.",
|
"StartupEmbyServerIsLoading": "Jellyfin Server je spouštěn. Zkuste to prosím v brzké době znovu.",
|
||||||
"SubtitleDownloadFailureForItem": "Stahování titulků selhalo pro {0}",
|
"SubtitleDownloadFailureForItem": "Stahování titulků selhalo pro {0}",
|
||||||
"SubtitleDownloadFailureFromForItem": "Stažení titulků pro {1} z {0} selhalo",
|
"SubtitleDownloadFailureFromForItem": "Stažení titulků pro {1} z {0} selhalo",
|
||||||
"SubtitlesDownloadedForItem": "Staženy titulky pro {0}",
|
|
||||||
"Sync": "Synchronizace",
|
"Sync": "Synchronizace",
|
||||||
"System": "Systém",
|
"System": "Systém",
|
||||||
"TvShows": "TV seriály",
|
"TvShows": "TV seriály",
|
||||||
|
|
|
@ -76,7 +76,6 @@
|
||||||
"StartupEmbyServerIsLoading": "Jellyfin Server er i gang med at starte op. Prøv venligst igen om lidt.",
|
"StartupEmbyServerIsLoading": "Jellyfin Server er i gang med at starte op. Prøv venligst igen om lidt.",
|
||||||
"SubtitleDownloadFailureForItem": "Fejlet i download af undertekster for {0}",
|
"SubtitleDownloadFailureForItem": "Fejlet i download af undertekster for {0}",
|
||||||
"SubtitleDownloadFailureFromForItem": "Undertekster kunne ikke downloades fra {0} til {1}",
|
"SubtitleDownloadFailureFromForItem": "Undertekster kunne ikke downloades fra {0} til {1}",
|
||||||
"SubtitlesDownloadedForItem": "Undertekster downloadet for {0}",
|
|
||||||
"Sync": "Synk",
|
"Sync": "Synk",
|
||||||
"System": "System",
|
"System": "System",
|
||||||
"TvShows": "TV serier",
|
"TvShows": "TV serier",
|
||||||
|
|
|
@ -1,9 +1,9 @@
|
||||||
{
|
{
|
||||||
"Albums": "Alben",
|
"Albums": "Alben",
|
||||||
"AppDeviceValues": "Anw: {0}, Gerät: {1}",
|
"AppDeviceValues": "App: {0}, Gerät: {1}",
|
||||||
"Application": "Anwendung",
|
"Application": "Anwendung",
|
||||||
"Artists": "Interpreten",
|
"Artists": "Interpreten",
|
||||||
"AuthenticationSucceededWithUserName": "{0} erfolgreich angemeldet",
|
"AuthenticationSucceededWithUserName": "{0} hat sich erfolgreich authentifziert",
|
||||||
"Books": "Bücher",
|
"Books": "Bücher",
|
||||||
"CameraImageUploadedFrom": "Ein neues Foto wurde von {0} hochgeladen",
|
"CameraImageUploadedFrom": "Ein neues Foto wurde von {0} hochgeladen",
|
||||||
"Channels": "Kanäle",
|
"Channels": "Kanäle",
|
||||||
|
@ -50,7 +50,7 @@
|
||||||
"NotificationOptionAudioPlayback": "Audiowiedergabe gestartet",
|
"NotificationOptionAudioPlayback": "Audiowiedergabe gestartet",
|
||||||
"NotificationOptionAudioPlaybackStopped": "Audiowiedergabe gestoppt",
|
"NotificationOptionAudioPlaybackStopped": "Audiowiedergabe gestoppt",
|
||||||
"NotificationOptionCameraImageUploaded": "Foto hochgeladen",
|
"NotificationOptionCameraImageUploaded": "Foto hochgeladen",
|
||||||
"NotificationOptionInstallationFailed": "Fehler bei der Installation",
|
"NotificationOptionInstallationFailed": "Installation fehlgeschlagen",
|
||||||
"NotificationOptionNewLibraryContent": "Neuer Inhalt hinzugefügt",
|
"NotificationOptionNewLibraryContent": "Neuer Inhalt hinzugefügt",
|
||||||
"NotificationOptionPluginError": "Plugin-Fehler",
|
"NotificationOptionPluginError": "Plugin-Fehler",
|
||||||
"NotificationOptionPluginInstalled": "Plugin installiert",
|
"NotificationOptionPluginInstalled": "Plugin installiert",
|
||||||
|
@ -76,7 +76,6 @@
|
||||||
"StartupEmbyServerIsLoading": "Jellyfin-Server startet, bitte versuche es gleich noch einmal.",
|
"StartupEmbyServerIsLoading": "Jellyfin-Server startet, bitte versuche es gleich noch einmal.",
|
||||||
"SubtitleDownloadFailureForItem": "Download der Untertitel fehlgeschlagen für {0}",
|
"SubtitleDownloadFailureForItem": "Download der Untertitel fehlgeschlagen für {0}",
|
||||||
"SubtitleDownloadFailureFromForItem": "Untertitel von {0} für {1} konnten nicht heruntergeladen werden",
|
"SubtitleDownloadFailureFromForItem": "Untertitel von {0} für {1} konnten nicht heruntergeladen werden",
|
||||||
"SubtitlesDownloadedForItem": "Untertitel heruntergeladen für {0}",
|
|
||||||
"Sync": "Synchronisation",
|
"Sync": "Synchronisation",
|
||||||
"System": "System",
|
"System": "System",
|
||||||
"TvShows": "TV-Sendungen",
|
"TvShows": "TV-Sendungen",
|
||||||
|
@ -93,5 +92,27 @@
|
||||||
"UserStoppedPlayingItemWithValues": "{0} hat die Wiedergabe von {1} auf {2} beendet",
|
"UserStoppedPlayingItemWithValues": "{0} hat die Wiedergabe von {1} auf {2} beendet",
|
||||||
"ValueHasBeenAddedToLibrary": "{0} wurde deiner Bibliothek hinzugefügt",
|
"ValueHasBeenAddedToLibrary": "{0} wurde deiner Bibliothek hinzugefügt",
|
||||||
"ValueSpecialEpisodeName": "Extra - {0}",
|
"ValueSpecialEpisodeName": "Extra - {0}",
|
||||||
"VersionNumber": "Version {0}"
|
"VersionNumber": "Version {0}",
|
||||||
|
"TaskDownloadMissingSubtitlesDescription": "Durchsucht das Internet nach fehlenden Untertiteln, basierend auf den Meta Einstellungen.",
|
||||||
|
"TaskDownloadMissingSubtitles": "Lade fehlende Untertitel herunter",
|
||||||
|
"TaskRefreshChannelsDescription": "Erneuere Internet Kanal Informationen.",
|
||||||
|
"TaskRefreshChannels": "Erneuere Kanäle",
|
||||||
|
"TaskCleanTranscodeDescription": "Löscht Transkodierdateien welche älter als ein Tag sind.",
|
||||||
|
"TaskCleanTranscode": "Lösche Transkodier Pfad",
|
||||||
|
"TaskUpdatePluginsDescription": "Läd Updates für Plugins herunter, welche dazu eingestellt sind automatisch zu updaten und installiert sie.",
|
||||||
|
"TaskUpdatePlugins": "Update Plugins",
|
||||||
|
"TaskRefreshPeopleDescription": "Erneuert Metadaten für Schausteller und Regisseure in deinen Bibliotheken.",
|
||||||
|
"TaskRefreshPeople": "Erneuere Schausteller",
|
||||||
|
"TaskCleanLogsDescription": "Lösche Log Datein die älter als {0} Tage sind.",
|
||||||
|
"TaskCleanLogs": "Lösche Log Pfad",
|
||||||
|
"TaskRefreshLibraryDescription": "Scanne alle Bibliotheken für hinzugefügte Datein und erneuere Metadaten.",
|
||||||
|
"TaskRefreshLibrary": "Scanne alle Bibliotheken",
|
||||||
|
"TaskRefreshChapterImagesDescription": "Kreiert Vorschaubilder für Videos welche Kapitel haben.",
|
||||||
|
"TaskRefreshChapterImages": "Extrahiert Kapitel-Bilder",
|
||||||
|
"TaskCleanCacheDescription": "Löscht Zwischenspeicherdatein die nicht länger von System gebraucht werden.",
|
||||||
|
"TaskCleanCache": "Leere Cache Pfad",
|
||||||
|
"TasksChannelsCategory": "Internet Kanäle",
|
||||||
|
"TasksApplicationCategory": "Anwendung",
|
||||||
|
"TasksLibraryCategory": "Bibliothek",
|
||||||
|
"TasksMaintenanceCategory": "Wartung"
|
||||||
}
|
}
|
||||||
|
|
|
@ -76,7 +76,6 @@
|
||||||
"StartupEmbyServerIsLoading": "Ο Jellyfin Server φορτώνει. Παρακαλώ δοκιμάστε σε λίγο.",
|
"StartupEmbyServerIsLoading": "Ο Jellyfin Server φορτώνει. Παρακαλώ δοκιμάστε σε λίγο.",
|
||||||
"SubtitleDownloadFailureForItem": "Οι υπότιτλοι απέτυχαν να κατέβουν για {0}",
|
"SubtitleDownloadFailureForItem": "Οι υπότιτλοι απέτυχαν να κατέβουν για {0}",
|
||||||
"SubtitleDownloadFailureFromForItem": "Αποτυχίες μεταφόρτωσης υποτίτλων από {0} για {1}",
|
"SubtitleDownloadFailureFromForItem": "Αποτυχίες μεταφόρτωσης υποτίτλων από {0} για {1}",
|
||||||
"SubtitlesDownloadedForItem": "Οι υπότιτλοι κατέβηκαν για {0}",
|
|
||||||
"Sync": "Συγχρονισμός",
|
"Sync": "Συγχρονισμός",
|
||||||
"System": "Σύστημα",
|
"System": "Σύστημα",
|
||||||
"TvShows": "Τηλεοπτικές Σειρές",
|
"TvShows": "Τηλεοπτικές Σειρές",
|
||||||
|
|
|
@ -76,7 +76,6 @@
|
||||||
"StartupEmbyServerIsLoading": "Jellyfin Server is loading. Please try again shortly.",
|
"StartupEmbyServerIsLoading": "Jellyfin Server is loading. Please try again shortly.",
|
||||||
"SubtitleDownloadFailureForItem": "Subtitles failed to download for {0}",
|
"SubtitleDownloadFailureForItem": "Subtitles failed to download for {0}",
|
||||||
"SubtitleDownloadFailureFromForItem": "Subtitles failed to download from {0} for {1}",
|
"SubtitleDownloadFailureFromForItem": "Subtitles failed to download from {0} for {1}",
|
||||||
"SubtitlesDownloadedForItem": "Subtitles downloaded for {0}",
|
|
||||||
"Sync": "Sync",
|
"Sync": "Sync",
|
||||||
"System": "System",
|
"System": "System",
|
||||||
"TvShows": "TV Shows",
|
"TvShows": "TV Shows",
|
||||||
|
|
|
@ -75,7 +75,6 @@
|
||||||
"Songs": "Songs",
|
"Songs": "Songs",
|
||||||
"StartupEmbyServerIsLoading": "Jellyfin Server is loading. Please try again shortly.",
|
"StartupEmbyServerIsLoading": "Jellyfin Server is loading. Please try again shortly.",
|
||||||
"SubtitleDownloadFailureFromForItem": "Subtitles failed to download from {0} for {1}",
|
"SubtitleDownloadFailureFromForItem": "Subtitles failed to download from {0} for {1}",
|
||||||
"SubtitlesDownloadedForItem": "Subtitles downloaded for {0}",
|
|
||||||
"Sync": "Sync",
|
"Sync": "Sync",
|
||||||
"System": "System",
|
"System": "System",
|
||||||
"TvShows": "TV Shows",
|
"TvShows": "TV Shows",
|
||||||
|
@ -92,5 +91,27 @@
|
||||||
"UserStoppedPlayingItemWithValues": "{0} has finished playing {1} on {2}",
|
"UserStoppedPlayingItemWithValues": "{0} has finished playing {1} on {2}",
|
||||||
"ValueHasBeenAddedToLibrary": "{0} has been added to your media library",
|
"ValueHasBeenAddedToLibrary": "{0} has been added to your media library",
|
||||||
"ValueSpecialEpisodeName": "Special - {0}",
|
"ValueSpecialEpisodeName": "Special - {0}",
|
||||||
"VersionNumber": "Version {0}"
|
"VersionNumber": "Version {0}",
|
||||||
|
"TasksMaintenanceCategory": "Maintenance",
|
||||||
|
"TasksLibraryCategory": "Library",
|
||||||
|
"TasksApplicationCategory": "Application",
|
||||||
|
"TasksChannelsCategory": "Internet Channels",
|
||||||
|
"TaskCleanCache": "Clean Cache Directory",
|
||||||
|
"TaskCleanCacheDescription": "Deletes cache files no longer needed by the system.",
|
||||||
|
"TaskRefreshChapterImages": "Extract Chapter Images",
|
||||||
|
"TaskRefreshChapterImagesDescription": "Creates thumbnails for videos that have chapters.",
|
||||||
|
"TaskRefreshLibrary": "Scan Media Library",
|
||||||
|
"TaskRefreshLibraryDescription": "Scans your media library for new files and refreshes metadata.",
|
||||||
|
"TaskCleanLogs": "Clean Log Directory",
|
||||||
|
"TaskCleanLogsDescription": "Deletes log files that are more than {0} days old.",
|
||||||
|
"TaskRefreshPeople": "Refresh People",
|
||||||
|
"TaskRefreshPeopleDescription": "Updates metadata for actors and directors in your media library.",
|
||||||
|
"TaskUpdatePlugins": "Update Plugins",
|
||||||
|
"TaskUpdatePluginsDescription": "Downloads and installs updates for plugins that are configured to update automatically.",
|
||||||
|
"TaskCleanTranscode": "Clean Transcode Directory",
|
||||||
|
"TaskCleanTranscodeDescription": "Deletes transcode files more than one day old.",
|
||||||
|
"TaskRefreshChannels": "Refresh Channels",
|
||||||
|
"TaskRefreshChannelsDescription": "Refreshes internet channel information.",
|
||||||
|
"TaskDownloadMissingSubtitles": "Download missing subtitles",
|
||||||
|
"TaskDownloadMissingSubtitlesDescription": "Searches the internet for missing subtitles based on metadata configuration."
|
||||||
}
|
}
|
||||||
|
|
|
@ -76,7 +76,6 @@
|
||||||
"StartupEmbyServerIsLoading": "Jellyfin Server se está cargando. Vuelve a intentarlo en breve.",
|
"StartupEmbyServerIsLoading": "Jellyfin Server se está cargando. Vuelve a intentarlo en breve.",
|
||||||
"SubtitleDownloadFailureForItem": "Subtitles failed to download for {0}",
|
"SubtitleDownloadFailureForItem": "Subtitles failed to download for {0}",
|
||||||
"SubtitleDownloadFailureFromForItem": "Fallo de descarga de subtítulos desde {0} para {1}",
|
"SubtitleDownloadFailureFromForItem": "Fallo de descarga de subtítulos desde {0} para {1}",
|
||||||
"SubtitlesDownloadedForItem": "Descargar subtítulos para {0}",
|
|
||||||
"Sync": "Sincronizar",
|
"Sync": "Sincronizar",
|
||||||
"System": "Sistema",
|
"System": "Sistema",
|
||||||
"TvShows": "Series de TV",
|
"TvShows": "Series de TV",
|
||||||
|
|
|
@ -76,7 +76,6 @@
|
||||||
"StartupEmbyServerIsLoading": "El servidor Jellyfin esta cargando. Por favor intente de nuevo dentro de poco.",
|
"StartupEmbyServerIsLoading": "El servidor Jellyfin esta cargando. Por favor intente de nuevo dentro de poco.",
|
||||||
"SubtitleDownloadFailureForItem": "Falló la descarga de subtítulos para {0}",
|
"SubtitleDownloadFailureForItem": "Falló la descarga de subtítulos para {0}",
|
||||||
"SubtitleDownloadFailureFromForItem": "Falló la descarga de subtitulos desde {0} para {1}",
|
"SubtitleDownloadFailureFromForItem": "Falló la descarga de subtitulos desde {0} para {1}",
|
||||||
"SubtitlesDownloadedForItem": "Subtítulos descargados para {0}",
|
|
||||||
"Sync": "Sincronizar",
|
"Sync": "Sincronizar",
|
||||||
"System": "Sistema",
|
"System": "Sistema",
|
||||||
"TvShows": "Programas de TV",
|
"TvShows": "Programas de TV",
|
||||||
|
|
|
@ -76,7 +76,6 @@
|
||||||
"StartupEmbyServerIsLoading": "Jellyfin Server se está cargando. Vuelve a intentarlo en breve.",
|
"StartupEmbyServerIsLoading": "Jellyfin Server se está cargando. Vuelve a intentarlo en breve.",
|
||||||
"SubtitleDownloadFailureForItem": "Error al descargar subtítulos para {0}",
|
"SubtitleDownloadFailureForItem": "Error al descargar subtítulos para {0}",
|
||||||
"SubtitleDownloadFailureFromForItem": "Fallo de descarga de subtítulos desde {0} para {1}",
|
"SubtitleDownloadFailureFromForItem": "Fallo de descarga de subtítulos desde {0} para {1}",
|
||||||
"SubtitlesDownloadedForItem": "Descargar subtítulos para {0}",
|
|
||||||
"Sync": "Sincronizar",
|
"Sync": "Sincronizar",
|
||||||
"System": "Sistema",
|
"System": "Sistema",
|
||||||
"TvShows": "Programas de televisión",
|
"TvShows": "Programas de televisión",
|
||||||
|
@ -93,5 +92,27 @@
|
||||||
"UserStoppedPlayingItemWithValues": "{0} ha terminado de reproducir {1} en {2}",
|
"UserStoppedPlayingItemWithValues": "{0} ha terminado de reproducir {1} en {2}",
|
||||||
"ValueHasBeenAddedToLibrary": "{0} ha sido añadido a tu biblioteca multimedia",
|
"ValueHasBeenAddedToLibrary": "{0} ha sido añadido a tu biblioteca multimedia",
|
||||||
"ValueSpecialEpisodeName": "Especial - {0}",
|
"ValueSpecialEpisodeName": "Especial - {0}",
|
||||||
"VersionNumber": "Versión {0}"
|
"VersionNumber": "Versión {0}",
|
||||||
|
"TasksMaintenanceCategory": "Mantenimiento",
|
||||||
|
"TasksLibraryCategory": "Librería",
|
||||||
|
"TasksApplicationCategory": "Aplicación",
|
||||||
|
"TasksChannelsCategory": "Canales de internet",
|
||||||
|
"TaskCleanCache": "Eliminar archivos temporales",
|
||||||
|
"TaskCleanCacheDescription": "Elimina los archivos temporales que ya no son necesarios para el servidor.",
|
||||||
|
"TaskRefreshChapterImages": "Extraer imágenes de los capítulos",
|
||||||
|
"TaskRefreshChapterImagesDescription": "Crea las miniaturas de los vídeos que tengan capítulos.",
|
||||||
|
"TaskRefreshLibrary": "Escanear la biblioteca",
|
||||||
|
"TaskRefreshLibraryDescription": "Añade los archivos que se hayan añadido a la biblioteca y actualiza las etiquetas de los ya presentes.",
|
||||||
|
"TaskCleanLogs": "Limpiar registros",
|
||||||
|
"TaskCleanLogsDescription": "Elimina los archivos de registro que tengan más de {0} días.",
|
||||||
|
"TaskRefreshPeople": "Actualizar personas",
|
||||||
|
"TaskRefreshPeopleDescription": "Actualiza las etiquetas de los intérpretes y directores presentes en tus bibliotecas.",
|
||||||
|
"TaskUpdatePlugins": "Actualizar extensiones",
|
||||||
|
"TaskUpdatePluginsDescription": "Actualiza las extensiones que están configuradas para actualizarse automáticamente.",
|
||||||
|
"TaskCleanTranscode": "Limpiar las transcodificaciones",
|
||||||
|
"TaskCleanTranscodeDescription": "Elimina los archivos temporales de transcodificación anteriores a un día de antigüedad.",
|
||||||
|
"TaskRefreshChannels": "Actualizar canales",
|
||||||
|
"TaskRefreshChannelsDescription": "Actualiza la información de los canales de internet.",
|
||||||
|
"TaskDownloadMissingSubtitles": "Descargar los subtítulos que faltan",
|
||||||
|
"TaskDownloadMissingSubtitlesDescription": "Busca en internet los subtítulos que falten en el contenido de tus bibliotecas, basándose en la configuración de los metadatos."
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,56 +1,56 @@
|
||||||
{
|
{
|
||||||
"Albums": "آلبوم ها",
|
"Albums": "آلبومها",
|
||||||
"AppDeviceValues": "برنامه: {0} ، دستگاه: {1}",
|
"AppDeviceValues": "برنامه: {0} ، دستگاه: {1}",
|
||||||
"Application": "برنامه",
|
"Application": "برنامه",
|
||||||
"Artists": "هنرمندان",
|
"Artists": "هنرمندان",
|
||||||
"AuthenticationSucceededWithUserName": "{0} با موفقیت تایید اعتبار شد",
|
"AuthenticationSucceededWithUserName": "{0} با موفقیت تایید اعتبار شد",
|
||||||
"Books": "کتاب ها",
|
"Books": "کتابها",
|
||||||
"CameraImageUploadedFrom": "یک عکس جدید از دوربین ارسال شده {0}",
|
"CameraImageUploadedFrom": "یک عکس جدید از دوربین ارسال شده است {0}",
|
||||||
"Channels": "کانال ها",
|
"Channels": "کانالها",
|
||||||
"ChapterNameValue": "فصل {0}",
|
"ChapterNameValue": "قسمت {0}",
|
||||||
"Collections": "کلکسیون ها",
|
"Collections": "مجموعهها",
|
||||||
"DeviceOfflineWithName": "ارتباط {0} قطع شد",
|
"DeviceOfflineWithName": "ارتباط {0} قطع شد",
|
||||||
"DeviceOnlineWithName": "{0} متصل شده",
|
"DeviceOnlineWithName": "{0} متصل شد",
|
||||||
"FailedLoginAttemptWithUserName": "تلاش برای ورود از {0} ناموفق بود",
|
"FailedLoginAttemptWithUserName": "تلاش برای ورود از {0} ناموفق بود",
|
||||||
"Favorites": "مورد علاقه ها",
|
"Favorites": "مورد علاقهها",
|
||||||
"Folders": "پوشه ها",
|
"Folders": "پوشهها",
|
||||||
"Genres": "ژانرها",
|
"Genres": "ژانرها",
|
||||||
"HeaderAlbumArtists": "هنرمندان آلبوم",
|
"HeaderAlbumArtists": "هنرمندان آلبوم",
|
||||||
"HeaderCameraUploads": "آپلودهای دوربین",
|
"HeaderCameraUploads": "آپلودهای دوربین",
|
||||||
"HeaderContinueWatching": "ادامه تماشا",
|
"HeaderContinueWatching": "ادامه تماشا",
|
||||||
"HeaderFavoriteAlbums": "آلبوم های مورد علاقه",
|
"HeaderFavoriteAlbums": "آلبومهای مورد علاقه",
|
||||||
"HeaderFavoriteArtists": "هنرمندان مورد علاقه",
|
"HeaderFavoriteArtists": "هنرمندان مورد علاقه",
|
||||||
"HeaderFavoriteEpisodes": "قسمت های مورد علاقه",
|
"HeaderFavoriteEpisodes": "قسمتهای مورد علاقه",
|
||||||
"HeaderFavoriteShows": "سریال های مورد علاقه",
|
"HeaderFavoriteShows": "سریالهای مورد علاقه",
|
||||||
"HeaderFavoriteSongs": "آهنگ های مورد علاقه",
|
"HeaderFavoriteSongs": "آهنگهای مورد علاقه",
|
||||||
"HeaderLiveTV": "پخش زنده تلویزیون",
|
"HeaderLiveTV": "پخش زنده تلویزیون",
|
||||||
"HeaderNextUp": "بعدی چیه",
|
"HeaderNextUp": "قسمت بعدی",
|
||||||
"HeaderRecordingGroups": "گروه های ضبط",
|
"HeaderRecordingGroups": "گروههای ضبط",
|
||||||
"HomeVideos": "ویدیوهای خانگی",
|
"HomeVideos": "ویدیوهای خانگی",
|
||||||
"Inherit": "به ارث برده",
|
"Inherit": "به ارث برده",
|
||||||
"ItemAddedWithName": "{0} به کتابخانه افزوده شد",
|
"ItemAddedWithName": "{0} به کتابخانه افزوده شد",
|
||||||
"ItemRemovedWithName": "{0} از کتابخانه حذف شد",
|
"ItemRemovedWithName": "{0} از کتابخانه حذف شد",
|
||||||
"LabelIpAddressValue": "آدرس آی پی: {0}",
|
"LabelIpAddressValue": "آدرس آی پی: {0}",
|
||||||
"LabelRunningTimeValue": "زمان اجرا: {0}",
|
"LabelRunningTimeValue": "زمان اجرا: {0}",
|
||||||
"Latest": "آخرین",
|
"Latest": "جدیدترینها",
|
||||||
"MessageApplicationUpdated": "سرور Jellyfin بروزرسانی شد",
|
"MessageApplicationUpdated": "سرور Jellyfin بروزرسانی شد",
|
||||||
"MessageApplicationUpdatedTo": "سرور جلیفین آپدیت شده به نسخه {0}",
|
"MessageApplicationUpdatedTo": "سرور Jellyfin به نسخه {0} بروزرسانی شد",
|
||||||
"MessageNamedServerConfigurationUpdatedWithValue": "پکربندی بخش {0} سرور بروزرسانی شد",
|
"MessageNamedServerConfigurationUpdatedWithValue": "پکربندی بخش {0} سرور بروزرسانی شد",
|
||||||
"MessageServerConfigurationUpdated": "پیکربندی سرور بروزرسانی شد",
|
"MessageServerConfigurationUpdated": "پیکربندی سرور بروزرسانی شد",
|
||||||
"MixedContent": "محتوای درهم",
|
"MixedContent": "محتوای مخلوط",
|
||||||
"Movies": "فیلم های سینمایی",
|
"Movies": "فیلمها",
|
||||||
"Music": "موسیقی",
|
"Music": "موسیقی",
|
||||||
"MusicVideos": "موزیک ویدیوها",
|
"MusicVideos": "موزیک ویدیوها",
|
||||||
"NameInstallFailed": "{0} نصب با مشکل مواجه شده",
|
"NameInstallFailed": "{0} نصب با مشکل مواجه شد",
|
||||||
"NameSeasonNumber": "فصل {0}",
|
"NameSeasonNumber": "فصل {0}",
|
||||||
"NameSeasonUnknown": "فصل های ناشناخته",
|
"NameSeasonUnknown": "فصل ناشناخته",
|
||||||
"NewVersionIsAvailable": "یک نسخه جدید جلیفین برای بروزرسانی آماده میباشد.",
|
"NewVersionIsAvailable": "یک نسخه جدید Jellyfin برای بروزرسانی آماده میباشد.",
|
||||||
"NotificationOptionApplicationUpdateAvailable": "بروزرسانی برنامه موجود است",
|
"NotificationOptionApplicationUpdateAvailable": "بروزرسانی برنامه موجود است",
|
||||||
"NotificationOptionApplicationUpdateInstalled": "بروزرسانی برنامه نصب شد",
|
"NotificationOptionApplicationUpdateInstalled": "بروزرسانی برنامه نصب شد",
|
||||||
"NotificationOptionAudioPlayback": "پخش صدا آغاز شد",
|
"NotificationOptionAudioPlayback": "پخش صدا آغاز شد",
|
||||||
"NotificationOptionAudioPlaybackStopped": "پخش صدا متوقف شد",
|
"NotificationOptionAudioPlaybackStopped": "پخش صدا متوقف شد",
|
||||||
"NotificationOptionCameraImageUploaded": "تصاویر دوربین آپلود شد",
|
"NotificationOptionCameraImageUploaded": "تصاویر دوربین آپلود شد",
|
||||||
"NotificationOptionInstallationFailed": "شکست نصب",
|
"NotificationOptionInstallationFailed": "نصب شکست خورد",
|
||||||
"NotificationOptionNewLibraryContent": "محتوای جدید افزوده شد",
|
"NotificationOptionNewLibraryContent": "محتوای جدید افزوده شد",
|
||||||
"NotificationOptionPluginError": "خرابی افزونه",
|
"NotificationOptionPluginError": "خرابی افزونه",
|
||||||
"NotificationOptionPluginInstalled": "افزونه نصب شد",
|
"NotificationOptionPluginInstalled": "افزونه نصب شد",
|
||||||
|
@ -58,40 +58,39 @@
|
||||||
"NotificationOptionPluginUpdateInstalled": "بروزرسانی افزونه نصب شد",
|
"NotificationOptionPluginUpdateInstalled": "بروزرسانی افزونه نصب شد",
|
||||||
"NotificationOptionServerRestartRequired": "شروع مجدد سرور نیاز است",
|
"NotificationOptionServerRestartRequired": "شروع مجدد سرور نیاز است",
|
||||||
"NotificationOptionTaskFailed": "شکست وظیفه برنامه ریزی شده",
|
"NotificationOptionTaskFailed": "شکست وظیفه برنامه ریزی شده",
|
||||||
"NotificationOptionUserLockedOut": "کاربر از سیستم خارج شد",
|
"NotificationOptionUserLockedOut": "کاربر قفل شد",
|
||||||
"NotificationOptionVideoPlayback": "پخش ویدیو آغاز شد",
|
"NotificationOptionVideoPlayback": "پخش ویدیو آغاز شد",
|
||||||
"NotificationOptionVideoPlaybackStopped": "پخش ویدیو متوقف شد",
|
"NotificationOptionVideoPlaybackStopped": "پخش ویدیو متوقف شد",
|
||||||
"Photos": "عکس ها",
|
"Photos": "عکسها",
|
||||||
"Playlists": "لیست های پخش",
|
"Playlists": "لیستهای پخش",
|
||||||
"Plugin": "افزونه",
|
"Plugin": "افزونه",
|
||||||
"PluginInstalledWithName": "{0} نصب شد",
|
"PluginInstalledWithName": "{0} نصب شد",
|
||||||
"PluginUninstalledWithName": "{0} حذف شد",
|
"PluginUninstalledWithName": "{0} حذف شد",
|
||||||
"PluginUpdatedWithName": "{0} آپدیت شد",
|
"PluginUpdatedWithName": "{0} آپدیت شد",
|
||||||
"ProviderValue": "ارائه دهنده: {0}",
|
"ProviderValue": "ارائه دهنده: {0}",
|
||||||
"ScheduledTaskFailedWithName": "{0} ناموفق بود",
|
"ScheduledTaskFailedWithName": "{0} شکست خورد",
|
||||||
"ScheduledTaskStartedWithName": "{0} شروع شد",
|
"ScheduledTaskStartedWithName": "{0} شروع شد",
|
||||||
"ServerNameNeedsToBeRestarted": "{0} احتیاج به راه اندازی مجدد",
|
"ServerNameNeedsToBeRestarted": "{0} نیاز به راه اندازی مجدد دارد",
|
||||||
"Shows": "سریال ها",
|
"Shows": "سریالها",
|
||||||
"Songs": "آهنگ ها",
|
"Songs": "موسیقیها",
|
||||||
"StartupEmbyServerIsLoading": "سرور Jellyfin در حال بارگیری است. لطفا کمی بعد دوباره تلاش کنید.",
|
"StartupEmbyServerIsLoading": "سرور Jellyfin در حال بارگیری است. لطفا کمی بعد دوباره تلاش کنید.",
|
||||||
"SubtitleDownloadFailureForItem": "دانلود زیرنویس برای {0} ناموفق بود",
|
"SubtitleDownloadFailureForItem": "دانلود زیرنویس برای {0} ناموفق بود",
|
||||||
"SubtitleDownloadFailureFromForItem": "زیرنویس برای دانلود با مشکل مواجه شده از {0} برای {1}",
|
"SubtitleDownloadFailureFromForItem": "بارگیری زیرنویس برای {1} از {0} شکست خورد",
|
||||||
"SubtitlesDownloadedForItem": "زیرنویس {0} دانلود شد",
|
"Sync": "همگامسازی",
|
||||||
"Sync": "همگامسازی",
|
|
||||||
"System": "سیستم",
|
"System": "سیستم",
|
||||||
"TvShows": "سریال های تلویزیونی",
|
"TvShows": "سریالهای تلویزیونی",
|
||||||
"User": "کاربر",
|
"User": "کاربر",
|
||||||
"UserCreatedWithName": "کاربر {0} ایجاد شد",
|
"UserCreatedWithName": "کاربر {0} ایجاد شد",
|
||||||
"UserDeletedWithName": "کاربر {0} حذف شد",
|
"UserDeletedWithName": "کاربر {0} حذف شد",
|
||||||
"UserDownloadingItemWithValues": "{0} در حال دانلود است {1}",
|
"UserDownloadingItemWithValues": "{0} در حال بارگیری {1} میباشد",
|
||||||
"UserLockedOutWithName": "کاربر {0} از سیستم خارج شد",
|
"UserLockedOutWithName": "کاربر {0} قفل شده است",
|
||||||
"UserOfflineFromDevice": "ارتباط {0} از {1} قطع شد",
|
"UserOfflineFromDevice": "ارتباط {0} از {1} قطع شد",
|
||||||
"UserOnlineFromDevice": "{0}از {1} آنلاین میباشد",
|
"UserOnlineFromDevice": "{0} از {1} آنلاین میباشد",
|
||||||
"UserPasswordChangedWithName": "رمز برای کاربر {0} تغییر یافت",
|
"UserPasswordChangedWithName": "گذرواژه برای کاربر {0} تغییر کرد",
|
||||||
"UserPolicyUpdatedWithName": "سیاست کاربری برای {0} بروزرسانی شد",
|
"UserPolicyUpdatedWithName": "سیاست کاربری برای {0} بروزرسانی شد",
|
||||||
"UserStartedPlayingItemWithValues": "{0} شروع به پخش {1} کرد",
|
"UserStartedPlayingItemWithValues": "{0} در حال پخش {1} بر روی {2} است",
|
||||||
"UserStoppedPlayingItemWithValues": "{0} پخش {1} را متوقف کرد",
|
"UserStoppedPlayingItemWithValues": "{0} پخش {1} را بر روی {2} به پایان رساند",
|
||||||
"ValueHasBeenAddedToLibrary": "{0} اضافه شده به کتابخانه رسانه شما",
|
"ValueHasBeenAddedToLibrary": "{0} به کتابخانهی رسانهی شما افزوده شد",
|
||||||
"ValueSpecialEpisodeName": "ویژه - {0}",
|
"ValueSpecialEpisodeName": "ویژه - {0}",
|
||||||
"VersionNumber": "نسخه {0}"
|
"VersionNumber": "نسخه {0}"
|
||||||
}
|
}
|
||||||
|
|
|
@ -69,7 +69,6 @@
|
||||||
"UserCreatedWithName": "Luotiin käyttäjä {0}",
|
"UserCreatedWithName": "Luotiin käyttäjä {0}",
|
||||||
"TvShows": "TV-Ohjelmat",
|
"TvShows": "TV-Ohjelmat",
|
||||||
"Sync": "Synkronoi",
|
"Sync": "Synkronoi",
|
||||||
"SubtitlesDownloadedForItem": "Tekstitys ladattu {0}",
|
|
||||||
"SubtitleDownloadFailureFromForItem": "Tekstityksen lataaminen epäonnistui {0} - {1}",
|
"SubtitleDownloadFailureFromForItem": "Tekstityksen lataaminen epäonnistui {0} - {1}",
|
||||||
"StartupEmbyServerIsLoading": "Jellyfin palvelin latautuu. Kokeile hetken kuluttua uudelleen.",
|
"StartupEmbyServerIsLoading": "Jellyfin palvelin latautuu. Kokeile hetken kuluttua uudelleen.",
|
||||||
"Songs": "Kappaleet",
|
"Songs": "Kappaleet",
|
||||||
|
|
|
@ -16,7 +16,6 @@
|
||||||
"TvShows": "Pelikula",
|
"TvShows": "Pelikula",
|
||||||
"System": "Sistema",
|
"System": "Sistema",
|
||||||
"Sync": "Pag-sync",
|
"Sync": "Pag-sync",
|
||||||
"SubtitlesDownloadedForItem": "Naidownload na ang subtitles {0}",
|
|
||||||
"SubtitleDownloadFailureFromForItem": "Hindi naidownload ang subtitles {0} para sa {1}",
|
"SubtitleDownloadFailureFromForItem": "Hindi naidownload ang subtitles {0} para sa {1}",
|
||||||
"StartupEmbyServerIsLoading": "Nagloload ang Jellyfin Server. Sandaling maghintay.",
|
"StartupEmbyServerIsLoading": "Nagloload ang Jellyfin Server. Sandaling maghintay.",
|
||||||
"Songs": "Kanta",
|
"Songs": "Kanta",
|
||||||
|
|
|
@ -76,7 +76,6 @@
|
||||||
"StartupEmbyServerIsLoading": "Le serveur Jellyfin est en cours de chargement. Veuillez réessayer dans quelques instants.",
|
"StartupEmbyServerIsLoading": "Le serveur Jellyfin est en cours de chargement. Veuillez réessayer dans quelques instants.",
|
||||||
"SubtitleDownloadFailureForItem": "Subtitles failed to download for {0}",
|
"SubtitleDownloadFailureForItem": "Subtitles failed to download for {0}",
|
||||||
"SubtitleDownloadFailureFromForItem": "Échec du téléchargement des sous-titres depuis {0} pour {1}",
|
"SubtitleDownloadFailureFromForItem": "Échec du téléchargement des sous-titres depuis {0} pour {1}",
|
||||||
"SubtitlesDownloadedForItem": "Les sous-titres de {0} ont été téléchargés",
|
|
||||||
"Sync": "Synchroniser",
|
"Sync": "Synchroniser",
|
||||||
"System": "Système",
|
"System": "Système",
|
||||||
"TvShows": "Séries Télé",
|
"TvShows": "Séries Télé",
|
||||||
|
|
|
@ -76,7 +76,6 @@
|
||||||
"StartupEmbyServerIsLoading": "Le serveur Jellyfin est en cours de chargement. Veuillez réessayer dans quelques instants.",
|
"StartupEmbyServerIsLoading": "Le serveur Jellyfin est en cours de chargement. Veuillez réessayer dans quelques instants.",
|
||||||
"SubtitleDownloadFailureForItem": "Le téléchargement des sous-titres pour {0} a échoué.",
|
"SubtitleDownloadFailureForItem": "Le téléchargement des sous-titres pour {0} a échoué.",
|
||||||
"SubtitleDownloadFailureFromForItem": "Échec du téléchargement des sous-titres depuis {0} pour {1}",
|
"SubtitleDownloadFailureFromForItem": "Échec du téléchargement des sous-titres depuis {0} pour {1}",
|
||||||
"SubtitlesDownloadedForItem": "Les sous-titres de {0} ont été téléchargés",
|
|
||||||
"Sync": "Synchroniser",
|
"Sync": "Synchroniser",
|
||||||
"System": "Système",
|
"System": "Système",
|
||||||
"TvShows": "Séries Télé",
|
"TvShows": "Séries Télé",
|
||||||
|
@ -93,5 +92,27 @@
|
||||||
"UserStoppedPlayingItemWithValues": "{0} vient d'arrêter la lecture de {1} sur {2}",
|
"UserStoppedPlayingItemWithValues": "{0} vient d'arrêter la lecture de {1} sur {2}",
|
||||||
"ValueHasBeenAddedToLibrary": "{0} a été ajouté à votre médiathèque",
|
"ValueHasBeenAddedToLibrary": "{0} a été ajouté à votre médiathèque",
|
||||||
"ValueSpecialEpisodeName": "Spécial - {0}",
|
"ValueSpecialEpisodeName": "Spécial - {0}",
|
||||||
"VersionNumber": "Version {0}"
|
"VersionNumber": "Version {0}",
|
||||||
|
"TasksChannelsCategory": "Chaines en ligne",
|
||||||
|
"TaskDownloadMissingSubtitlesDescription": "Cherche les sous-titres manquant sur internet en se basant sur la configuration des métadonnées.",
|
||||||
|
"TaskDownloadMissingSubtitles": "Télécharge les sous-titres manquant",
|
||||||
|
"TaskRefreshChannelsDescription": "Rafraîchit les informations des chaines en ligne.",
|
||||||
|
"TaskRefreshChannels": "Rafraîchit les chaines",
|
||||||
|
"TaskCleanTranscodeDescription": "Supprime les fichiers transcodés de plus d'un jour.",
|
||||||
|
"TaskCleanTranscode": "Nettoie les dossier des transcodages",
|
||||||
|
"TaskUpdatePluginsDescription": "Télécharge et installe les mises à jours des plugins configurés pour être mis à jour automatiquement.",
|
||||||
|
"TaskUpdatePlugins": "Mettre à jour les plugins",
|
||||||
|
"TaskRefreshPeopleDescription": "Met à jour les métadonnées pour les acteurs et directeurs dans votre bibliothèque.",
|
||||||
|
"TaskRefreshPeople": "Rafraîchit les acteurs",
|
||||||
|
"TaskCleanLogsDescription": "Supprime les journaux de plus de {0} jours.",
|
||||||
|
"TaskCleanLogs": "Nettoie le répertoire des journaux",
|
||||||
|
"TaskRefreshLibraryDescription": "Scanne toute les bibliothèques pour trouver les nouveaux fichiers et rafraîchit les métadonnées.",
|
||||||
|
"TaskRefreshLibrary": "Scanne toute les Bibliothèques",
|
||||||
|
"TaskRefreshChapterImagesDescription": "Crée des images de miniature pour les vidéos ayant des chapitres.",
|
||||||
|
"TaskRefreshChapterImages": "Extrait les images de chapitre",
|
||||||
|
"TaskCleanCacheDescription": "Supprime les fichiers de cache dont le système n'a plus besoin.",
|
||||||
|
"TaskCleanCache": "Vider le répertoire cache",
|
||||||
|
"TasksApplicationCategory": "Application",
|
||||||
|
"TasksLibraryCategory": "Bibliothèque",
|
||||||
|
"TasksMaintenanceCategory": "Maintenance"
|
||||||
}
|
}
|
||||||
|
|
|
@ -76,7 +76,6 @@
|
||||||
"StartupEmbyServerIsLoading": "Jellyfin Server ladt. Bitte grad noeinisch probiere.",
|
"StartupEmbyServerIsLoading": "Jellyfin Server ladt. Bitte grad noeinisch probiere.",
|
||||||
"SubtitleDownloadFailureForItem": "Subtitles failed to download for {0}",
|
"SubtitleDownloadFailureForItem": "Subtitles failed to download for {0}",
|
||||||
"SubtitleDownloadFailureFromForItem": "Ondertetle vo {0} för {1} hend ned chönne abeglade wärde",
|
"SubtitleDownloadFailureFromForItem": "Ondertetle vo {0} för {1} hend ned chönne abeglade wärde",
|
||||||
"SubtitlesDownloadedForItem": "Ondertetle abeglade för {0}",
|
|
||||||
"Sync": "Synchronisation",
|
"Sync": "Synchronisation",
|
||||||
"System": "System",
|
"System": "System",
|
||||||
"TvShows": "Färnsehserie",
|
"TvShows": "Färnsehserie",
|
||||||
|
|
|
@ -76,7 +76,6 @@
|
||||||
"StartupEmbyServerIsLoading": "שרת Jellyfin בהליכי טעינה. אנא נסה שנית בעוד זמן קצר.",
|
"StartupEmbyServerIsLoading": "שרת Jellyfin בהליכי טעינה. אנא נסה שנית בעוד זמן קצר.",
|
||||||
"SubtitleDownloadFailureForItem": "Subtitles failed to download for {0}",
|
"SubtitleDownloadFailureForItem": "Subtitles failed to download for {0}",
|
||||||
"SubtitleDownloadFailureFromForItem": "Subtitles failed to download from {0} for {1}",
|
"SubtitleDownloadFailureFromForItem": "Subtitles failed to download from {0} for {1}",
|
||||||
"SubtitlesDownloadedForItem": "Subtitles downloaded for {0}",
|
|
||||||
"Sync": "סנכרן",
|
"Sync": "סנכרן",
|
||||||
"System": "System",
|
"System": "System",
|
||||||
"TvShows": "סדרות טלוויזיה",
|
"TvShows": "סדרות טלוויזיה",
|
||||||
|
|
|
@ -76,7 +76,6 @@
|
||||||
"StartupEmbyServerIsLoading": "Jellyfin Server se učitava. Pokušajte ponovo kasnije.",
|
"StartupEmbyServerIsLoading": "Jellyfin Server se učitava. Pokušajte ponovo kasnije.",
|
||||||
"SubtitleDownloadFailureForItem": "Titlovi prijevoda nisu preuzeti za {0}",
|
"SubtitleDownloadFailureForItem": "Titlovi prijevoda nisu preuzeti za {0}",
|
||||||
"SubtitleDownloadFailureFromForItem": "Subtitles failed to download from {0} for {1}",
|
"SubtitleDownloadFailureFromForItem": "Subtitles failed to download from {0} for {1}",
|
||||||
"SubtitlesDownloadedForItem": "Titlovi prijevoda preuzeti za {0}",
|
|
||||||
"Sync": "Sink.",
|
"Sync": "Sink.",
|
||||||
"System": "Sistem",
|
"System": "Sistem",
|
||||||
"TvShows": "TV Shows",
|
"TvShows": "TV Shows",
|
||||||
|
|
|
@ -76,7 +76,6 @@
|
||||||
"StartupEmbyServerIsLoading": "A Jellyfin Szerver betöltődik. Kérlek, próbáld újra hamarosan.",
|
"StartupEmbyServerIsLoading": "A Jellyfin Szerver betöltődik. Kérlek, próbáld újra hamarosan.",
|
||||||
"SubtitleDownloadFailureForItem": "Subtitles failed to download for {0}",
|
"SubtitleDownloadFailureForItem": "Subtitles failed to download for {0}",
|
||||||
"SubtitleDownloadFailureFromForItem": "Nem sikerült a felirat letöltése innen: {0} ehhez: {1}",
|
"SubtitleDownloadFailureFromForItem": "Nem sikerült a felirat letöltése innen: {0} ehhez: {1}",
|
||||||
"SubtitlesDownloadedForItem": "Letöltött feliratok a következőhöz: {0}",
|
|
||||||
"Sync": "Szinkronizál",
|
"Sync": "Szinkronizál",
|
||||||
"System": "Rendszer",
|
"System": "Rendszer",
|
||||||
"TvShows": "TV műsorok",
|
"TvShows": "TV műsorok",
|
||||||
|
|
|
@ -54,7 +54,6 @@
|
||||||
"User": "Pengguna",
|
"User": "Pengguna",
|
||||||
"System": "Sistem",
|
"System": "Sistem",
|
||||||
"Sync": "Sinkron",
|
"Sync": "Sinkron",
|
||||||
"SubtitlesDownloadedForItem": "Talop telah diunduh untuk {0}",
|
|
||||||
"Shows": "Tayangan",
|
"Shows": "Tayangan",
|
||||||
"ServerNameNeedsToBeRestarted": "{0} perlu dimuat ulang",
|
"ServerNameNeedsToBeRestarted": "{0} perlu dimuat ulang",
|
||||||
"ScheduledTaskStartedWithName": "{0} dimulai",
|
"ScheduledTaskStartedWithName": "{0} dimulai",
|
||||||
|
|
|
@ -86,7 +86,6 @@
|
||||||
"UserOfflineFromDevice": "{0} hefur aftengst frá {1}",
|
"UserOfflineFromDevice": "{0} hefur aftengst frá {1}",
|
||||||
"UserLockedOutWithName": "Notanda {0} hefur verið hindraður aðgangur",
|
"UserLockedOutWithName": "Notanda {0} hefur verið hindraður aðgangur",
|
||||||
"UserDownloadingItemWithValues": "{0} Hleður niður {1}",
|
"UserDownloadingItemWithValues": "{0} Hleður niður {1}",
|
||||||
"SubtitlesDownloadedForItem": "Skjátextum halað niður fyrir {0}",
|
|
||||||
"SubtitleDownloadFailureFromForItem": "Tókst ekki að hala niður skjátextum frá {0} til {1}",
|
"SubtitleDownloadFailureFromForItem": "Tókst ekki að hala niður skjátextum frá {0} til {1}",
|
||||||
"ProviderValue": "Veitandi: {0}",
|
"ProviderValue": "Veitandi: {0}",
|
||||||
"MessageNamedServerConfigurationUpdatedWithValue": "Stilling {0} hefur verið uppfærð á netþjón",
|
"MessageNamedServerConfigurationUpdatedWithValue": "Stilling {0} hefur verið uppfærð á netþjón",
|
||||||
|
|
|
@ -5,7 +5,7 @@
|
||||||
"Artists": "Artisti",
|
"Artists": "Artisti",
|
||||||
"AuthenticationSucceededWithUserName": "{0} autenticato con successo",
|
"AuthenticationSucceededWithUserName": "{0} autenticato con successo",
|
||||||
"Books": "Libri",
|
"Books": "Libri",
|
||||||
"CameraImageUploadedFrom": "È stata caricata una nuova immagine della fotocamera da {0}",
|
"CameraImageUploadedFrom": "È stata caricata una nuova immagine della fotocamera dal device {0}",
|
||||||
"Channels": "Canali",
|
"Channels": "Canali",
|
||||||
"ChapterNameValue": "Capitolo {0}",
|
"ChapterNameValue": "Capitolo {0}",
|
||||||
"Collections": "Collezioni",
|
"Collections": "Collezioni",
|
||||||
|
@ -15,7 +15,7 @@
|
||||||
"Favorites": "Preferiti",
|
"Favorites": "Preferiti",
|
||||||
"Folders": "Cartelle",
|
"Folders": "Cartelle",
|
||||||
"Genres": "Generi",
|
"Genres": "Generi",
|
||||||
"HeaderAlbumArtists": "Artisti dell' Album",
|
"HeaderAlbumArtists": "Artisti degli Album",
|
||||||
"HeaderCameraUploads": "Caricamenti Fotocamera",
|
"HeaderCameraUploads": "Caricamenti Fotocamera",
|
||||||
"HeaderContinueWatching": "Continua a guardare",
|
"HeaderContinueWatching": "Continua a guardare",
|
||||||
"HeaderFavoriteAlbums": "Album Preferiti",
|
"HeaderFavoriteAlbums": "Album Preferiti",
|
||||||
|
@ -76,7 +76,6 @@
|
||||||
"StartupEmbyServerIsLoading": "Jellyfin server si sta avviando. Per favore riprova più tardi.",
|
"StartupEmbyServerIsLoading": "Jellyfin server si sta avviando. Per favore riprova più tardi.",
|
||||||
"SubtitleDownloadFailureForItem": "Impossibile scaricare i sottotitoli per {0}",
|
"SubtitleDownloadFailureForItem": "Impossibile scaricare i sottotitoli per {0}",
|
||||||
"SubtitleDownloadFailureFromForItem": "Impossibile scaricare i sottotitoli da {0} per {1}",
|
"SubtitleDownloadFailureFromForItem": "Impossibile scaricare i sottotitoli da {0} per {1}",
|
||||||
"SubtitlesDownloadedForItem": "Sottotitoli scaricati per {0}",
|
|
||||||
"Sync": "Sincronizza",
|
"Sync": "Sincronizza",
|
||||||
"System": "Sistema",
|
"System": "Sistema",
|
||||||
"TvShows": "Serie TV",
|
"TvShows": "Serie TV",
|
||||||
|
@ -93,5 +92,27 @@
|
||||||
"UserStoppedPlayingItemWithValues": "{0} ha interrotto la riproduzione di {1} su {2}",
|
"UserStoppedPlayingItemWithValues": "{0} ha interrotto la riproduzione di {1} su {2}",
|
||||||
"ValueHasBeenAddedToLibrary": "{0} è stato aggiunto alla tua libreria multimediale",
|
"ValueHasBeenAddedToLibrary": "{0} è stato aggiunto alla tua libreria multimediale",
|
||||||
"ValueSpecialEpisodeName": "Speciale - {0}",
|
"ValueSpecialEpisodeName": "Speciale - {0}",
|
||||||
"VersionNumber": "Versione {0}"
|
"VersionNumber": "Versione {0}",
|
||||||
|
"TaskRefreshChannelsDescription": "Aggiorna le informazioni dei canali Internet.",
|
||||||
|
"TaskDownloadMissingSubtitlesDescription": "Cerca su internet i sottotitoli mancanti basandosi sulle configurazioni dei metadati.",
|
||||||
|
"TaskDownloadMissingSubtitles": "Scarica i sottotitoli mancanti",
|
||||||
|
"TaskRefreshChannels": "Aggiorna i canali",
|
||||||
|
"TaskCleanTranscodeDescription": "Cancella i file di transcode più vecchi di un giorno.",
|
||||||
|
"TaskCleanTranscode": "Svuota la cartella del transcoding",
|
||||||
|
"TaskUpdatePluginsDescription": "Scarica e installa gli aggiornamenti per i plugin che sono stati configurati per essere aggiornati contemporaneamente.",
|
||||||
|
"TaskUpdatePlugins": "Aggiorna i Plugin",
|
||||||
|
"TaskRefreshPeopleDescription": "Aggiorna i metadati per gli attori e registi nella tua libreria multimediale.",
|
||||||
|
"TaskRefreshPeople": "Aggiorna persone",
|
||||||
|
"TaskCleanLogsDescription": "Rimuovi i file di log più vecchi di {0} giorni.",
|
||||||
|
"TaskCleanLogs": "Pulisci la cartella dei log",
|
||||||
|
"TaskRefreshLibraryDescription": "Analizza la tua libreria multimediale per nuovi file e rinnova i metadati.",
|
||||||
|
"TaskRefreshLibrary": "Analizza la libreria dei contenuti multimediali",
|
||||||
|
"TaskRefreshChapterImagesDescription": "Crea le thumbnail per i video che hanno capitoli.",
|
||||||
|
"TaskRefreshChapterImages": "Estrai immagini capitolo",
|
||||||
|
"TaskCleanCacheDescription": "Cancella i file di cache non più necessari al sistema.",
|
||||||
|
"TaskCleanCache": "Pulisci la directory della cache",
|
||||||
|
"TasksChannelsCategory": "Canali su Internet",
|
||||||
|
"TasksApplicationCategory": "Applicazione",
|
||||||
|
"TasksLibraryCategory": "Libreria",
|
||||||
|
"TasksMaintenanceCategory": "Manutenzione"
|
||||||
}
|
}
|
||||||
|
|
|
@ -75,7 +75,6 @@
|
||||||
"Songs": "曲",
|
"Songs": "曲",
|
||||||
"StartupEmbyServerIsLoading": "Jellyfin Server は現在読み込み中です。しばらくしてからもう一度お試しください。",
|
"StartupEmbyServerIsLoading": "Jellyfin Server は現在読み込み中です。しばらくしてからもう一度お試しください。",
|
||||||
"SubtitleDownloadFailureFromForItem": "{0} から {1}の字幕のダウンロードに失敗しました",
|
"SubtitleDownloadFailureFromForItem": "{0} から {1}の字幕のダウンロードに失敗しました",
|
||||||
"SubtitlesDownloadedForItem": "{0} の字幕がダウンロードされました",
|
|
||||||
"Sync": "同期",
|
"Sync": "同期",
|
||||||
"System": "システム",
|
"System": "システム",
|
||||||
"TvShows": "テレビ番組",
|
"TvShows": "テレビ番組",
|
||||||
|
|
|
@ -76,7 +76,6 @@
|
||||||
"StartupEmbyServerIsLoading": "Jellyfin Server júktelýde. Áreketti kóp uzamaı qaıtalańyz.",
|
"StartupEmbyServerIsLoading": "Jellyfin Server júktelýde. Áreketti kóp uzamaı qaıtalańyz.",
|
||||||
"SubtitleDownloadFailureForItem": "Субтитрлер {0} үшін жүктеліп алынуы сәтсіз",
|
"SubtitleDownloadFailureForItem": "Субтитрлер {0} үшін жүктеліп алынуы сәтсіз",
|
||||||
"SubtitleDownloadFailureFromForItem": "{1} úshin sýbtıtrlerdi {0} kózinen júktep alý sátsiz",
|
"SubtitleDownloadFailureFromForItem": "{1} úshin sýbtıtrlerdi {0} kózinen júktep alý sátsiz",
|
||||||
"SubtitlesDownloadedForItem": "{0} úshin sýbtıtrler júktelip alyndy",
|
|
||||||
"Sync": "Úndestirý",
|
"Sync": "Úndestirý",
|
||||||
"System": "Júıe",
|
"System": "Júıe",
|
||||||
"TvShows": "TD-kórsetimder",
|
"TvShows": "TD-kórsetimder",
|
||||||
|
|
|
@ -76,7 +76,6 @@
|
||||||
"StartupEmbyServerIsLoading": "Jellyfin 서버를 불러오고 있습니다. 잠시 후에 다시 시도하십시오.",
|
"StartupEmbyServerIsLoading": "Jellyfin 서버를 불러오고 있습니다. 잠시 후에 다시 시도하십시오.",
|
||||||
"SubtitleDownloadFailureForItem": "Subtitles failed to download for {0}",
|
"SubtitleDownloadFailureForItem": "Subtitles failed to download for {0}",
|
||||||
"SubtitleDownloadFailureFromForItem": "{0}에서 {1} 자막 다운로드에 실패했습니다",
|
"SubtitleDownloadFailureFromForItem": "{0}에서 {1} 자막 다운로드에 실패했습니다",
|
||||||
"SubtitlesDownloadedForItem": "{0} 자막 다운로드 완료",
|
|
||||||
"Sync": "동기화",
|
"Sync": "동기화",
|
||||||
"System": "시스템",
|
"System": "시스템",
|
||||||
"TvShows": "TV 쇼",
|
"TvShows": "TV 쇼",
|
||||||
|
|
|
@ -76,7 +76,6 @@
|
||||||
"StartupEmbyServerIsLoading": "Jellyfin Server kraunasi. Netrukus pabandykite dar kartą.",
|
"StartupEmbyServerIsLoading": "Jellyfin Server kraunasi. Netrukus pabandykite dar kartą.",
|
||||||
"SubtitleDownloadFailureForItem": "Subtitles failed to download for {0}",
|
"SubtitleDownloadFailureForItem": "Subtitles failed to download for {0}",
|
||||||
"SubtitleDownloadFailureFromForItem": "{1} subtitrai buvo nesėkmingai parsiųsti iš {0}",
|
"SubtitleDownloadFailureFromForItem": "{1} subtitrai buvo nesėkmingai parsiųsti iš {0}",
|
||||||
"SubtitlesDownloadedForItem": "{0} subtitrai parsiųsti",
|
|
||||||
"Sync": "Sinchronizuoti",
|
"Sync": "Sinchronizuoti",
|
||||||
"System": "System",
|
"System": "System",
|
||||||
"TvShows": "TV Serialai",
|
"TvShows": "TV Serialai",
|
||||||
|
|
|
@ -31,7 +31,6 @@
|
||||||
"TvShows": "TV Raidījumi",
|
"TvShows": "TV Raidījumi",
|
||||||
"Sync": "Sinhronizācija",
|
"Sync": "Sinhronizācija",
|
||||||
"System": "Sistēma",
|
"System": "Sistēma",
|
||||||
"SubtitlesDownloadedForItem": "Subtitri lejupielādēti priekš {0}",
|
|
||||||
"StartupEmbyServerIsLoading": "Jellyfin Serveris lādējas. Lūdzu mēģiniet vēlreiz pēc brīža.",
|
"StartupEmbyServerIsLoading": "Jellyfin Serveris lādējas. Lūdzu mēģiniet vēlreiz pēc brīža.",
|
||||||
"Songs": "Dziesmas",
|
"Songs": "Dziesmas",
|
||||||
"Shows": "Raidījumi",
|
"Shows": "Raidījumi",
|
||||||
|
|
|
@ -86,7 +86,6 @@
|
||||||
"TvShows": "ТВ Серии",
|
"TvShows": "ТВ Серии",
|
||||||
"System": "Систем",
|
"System": "Систем",
|
||||||
"Sync": "Синхронизација",
|
"Sync": "Синхронизација",
|
||||||
"SubtitlesDownloadedForItem": "Спуштање превод за {0}",
|
|
||||||
"SubtitleDownloadFailureFromForItem": "Преводот неуспешно се спушти од {0} за {1}",
|
"SubtitleDownloadFailureFromForItem": "Преводот неуспешно се спушти од {0} за {1}",
|
||||||
"StartupEmbyServerIsLoading": "Jellyfin Server се пушта. Ве молиме причекајте.",
|
"StartupEmbyServerIsLoading": "Jellyfin Server се пушта. Ве молиме причекајте.",
|
||||||
"Songs": "Песни",
|
"Songs": "Песни",
|
||||||
|
|
|
@ -76,7 +76,6 @@
|
||||||
"StartupEmbyServerIsLoading": "Jellyfin Server is loading. Please try again shortly.",
|
"StartupEmbyServerIsLoading": "Jellyfin Server is loading. Please try again shortly.",
|
||||||
"SubtitleDownloadFailureForItem": "Subtitles failed to download for {0}",
|
"SubtitleDownloadFailureForItem": "Subtitles failed to download for {0}",
|
||||||
"SubtitleDownloadFailureFromForItem": "Subtitles failed to download from {0} for {1}",
|
"SubtitleDownloadFailureFromForItem": "Subtitles failed to download from {0} for {1}",
|
||||||
"SubtitlesDownloadedForItem": "Subtitles downloaded for {0}",
|
|
||||||
"Sync": "Sync",
|
"Sync": "Sync",
|
||||||
"System": "Sistem",
|
"System": "Sistem",
|
||||||
"TvShows": "TV Shows",
|
"TvShows": "TV Shows",
|
||||||
|
|
|
@ -76,7 +76,6 @@
|
||||||
"StartupEmbyServerIsLoading": "Jellyfin Server laster. Prøv igjen snart.",
|
"StartupEmbyServerIsLoading": "Jellyfin Server laster. Prøv igjen snart.",
|
||||||
"SubtitleDownloadFailureForItem": "En feil oppstå under nedlasting av undertekster for {0}",
|
"SubtitleDownloadFailureForItem": "En feil oppstå under nedlasting av undertekster for {0}",
|
||||||
"SubtitleDownloadFailureFromForItem": "Kunne ikke laste ned undertekster fra {0} for {1}",
|
"SubtitleDownloadFailureFromForItem": "Kunne ikke laste ned undertekster fra {0} for {1}",
|
||||||
"SubtitlesDownloadedForItem": "Undertekster lastet ned for {0}",
|
|
||||||
"Sync": "Synkroniser",
|
"Sync": "Synkroniser",
|
||||||
"System": "System",
|
"System": "System",
|
||||||
"TvShows": "TV-serier",
|
"TvShows": "TV-serier",
|
||||||
|
|
|
@ -76,7 +76,6 @@
|
||||||
"StartupEmbyServerIsLoading": "Jellyfin Server is aan het laden, probeer het later opnieuw.",
|
"StartupEmbyServerIsLoading": "Jellyfin Server is aan het laden, probeer het later opnieuw.",
|
||||||
"SubtitleDownloadFailureForItem": "Downloaden van ondertiteling voor {0} is mislukt",
|
"SubtitleDownloadFailureForItem": "Downloaden van ondertiteling voor {0} is mislukt",
|
||||||
"SubtitleDownloadFailureFromForItem": "Ondertitels konden niet gedownload worden van {0} voor {1}",
|
"SubtitleDownloadFailureFromForItem": "Ondertitels konden niet gedownload worden van {0} voor {1}",
|
||||||
"SubtitlesDownloadedForItem": "Ondertiteling voor {0} is gedownload",
|
|
||||||
"Sync": "Synchronisatie",
|
"Sync": "Synchronisatie",
|
||||||
"System": "Systeem",
|
"System": "Systeem",
|
||||||
"TvShows": "TV-series",
|
"TvShows": "TV-series",
|
||||||
|
|
|
@ -36,5 +36,25 @@
|
||||||
"Artists": "Artistar",
|
"Artists": "Artistar",
|
||||||
"Application": "Program",
|
"Application": "Program",
|
||||||
"AppDeviceValues": "App: {0}, Einheit: {1}",
|
"AppDeviceValues": "App: {0}, Einheit: {1}",
|
||||||
"Albums": "Album"
|
"Albums": "Album",
|
||||||
|
"NotificationOptionServerRestartRequired": "Tenaren krev omstart",
|
||||||
|
"NotificationOptionPluginUpdateInstalled": "Tilleggsprogram-oppdatering vart installert",
|
||||||
|
"NotificationOptionPluginUninstalled": "Tilleggsprogram avinstallert",
|
||||||
|
"NotificationOptionPluginInstalled": "Tilleggsprogram installert",
|
||||||
|
"NotificationOptionPluginError": "Tilleggsprogram feila",
|
||||||
|
"NotificationOptionNewLibraryContent": "Nytt innhald er lagt til",
|
||||||
|
"NotificationOptionInstallationFailed": "Installasjonen feila",
|
||||||
|
"NotificationOptionCameraImageUploaded": "Kamerabilde vart lasta opp",
|
||||||
|
"NotificationOptionAudioPlaybackStopped": "Lydavspilling stoppa",
|
||||||
|
"NotificationOptionAudioPlayback": "Lydavspilling påbyrja",
|
||||||
|
"NotificationOptionApplicationUpdateInstalled": "Applikasjonsoppdatering er installert",
|
||||||
|
"NotificationOptionApplicationUpdateAvailable": "Applikasjonsoppdatering er tilgjengeleg",
|
||||||
|
"NewVersionIsAvailable": "Ein ny versjon av Jellyfin serveren er tilgjengeleg for nedlasting.",
|
||||||
|
"NameSeasonUnknown": "Ukjend sesong",
|
||||||
|
"NameSeasonNumber": "Sesong {0}",
|
||||||
|
"NameInstallFailed": "{0} Installasjonen feila",
|
||||||
|
"MusicVideos": "Musikkvideoar",
|
||||||
|
"Music": "Musikk",
|
||||||
|
"Movies": "Filmar",
|
||||||
|
"MixedContent": "Blanda innhald"
|
||||||
}
|
}
|
||||||
|
|
|
@ -76,7 +76,6 @@
|
||||||
"StartupEmbyServerIsLoading": "Trwa wczytywanie serwera Jellyfin. Spróbuj ponownie za chwilę.",
|
"StartupEmbyServerIsLoading": "Trwa wczytywanie serwera Jellyfin. Spróbuj ponownie za chwilę.",
|
||||||
"SubtitleDownloadFailureForItem": "Pobieranie napisów dla {0} zakończone niepowodzeniem",
|
"SubtitleDownloadFailureForItem": "Pobieranie napisów dla {0} zakończone niepowodzeniem",
|
||||||
"SubtitleDownloadFailureFromForItem": "Nieudane pobieranie napisów z {0} dla {1}",
|
"SubtitleDownloadFailureFromForItem": "Nieudane pobieranie napisów z {0} dla {1}",
|
||||||
"SubtitlesDownloadedForItem": "Pobrano napisy dla {0}",
|
|
||||||
"Sync": "Synchronizacja",
|
"Sync": "Synchronizacja",
|
||||||
"System": "System",
|
"System": "System",
|
||||||
"TvShows": "Seriale",
|
"TvShows": "Seriale",
|
||||||
|
|
|
@ -76,7 +76,6 @@
|
||||||
"StartupEmbyServerIsLoading": "O Servidor Jellyfin está carregando. Por favor, tente novamente mais tarde.",
|
"StartupEmbyServerIsLoading": "O Servidor Jellyfin está carregando. Por favor, tente novamente mais tarde.",
|
||||||
"SubtitleDownloadFailureForItem": "Download de legendas falhou para {0}",
|
"SubtitleDownloadFailureForItem": "Download de legendas falhou para {0}",
|
||||||
"SubtitleDownloadFailureFromForItem": "Houve um problema ao baixar as legendas de {0} para {1}",
|
"SubtitleDownloadFailureFromForItem": "Houve um problema ao baixar as legendas de {0} para {1}",
|
||||||
"SubtitlesDownloadedForItem": "Legendas baixadas para {0}",
|
|
||||||
"Sync": "Sincronizar",
|
"Sync": "Sincronizar",
|
||||||
"System": "Sistema",
|
"System": "Sistema",
|
||||||
"TvShows": "Séries",
|
"TvShows": "Séries",
|
||||||
|
@ -93,5 +92,27 @@
|
||||||
"UserStoppedPlayingItemWithValues": "{0} parou de reproduzir {1} em {2}",
|
"UserStoppedPlayingItemWithValues": "{0} parou de reproduzir {1} em {2}",
|
||||||
"ValueHasBeenAddedToLibrary": "{0} foi adicionado à sua biblioteca de mídia",
|
"ValueHasBeenAddedToLibrary": "{0} foi adicionado à sua biblioteca de mídia",
|
||||||
"ValueSpecialEpisodeName": "Especial - {0}",
|
"ValueSpecialEpisodeName": "Especial - {0}",
|
||||||
"VersionNumber": "Versão {0}"
|
"VersionNumber": "Versão {0}",
|
||||||
|
"TaskDownloadMissingSubtitlesDescription": "Procurar na internet por legendas faltando baseado na configuração de metadados.",
|
||||||
|
"TaskDownloadMissingSubtitles": "Baixar legendas que estão faltando",
|
||||||
|
"TaskRefreshChannelsDescription": "Atualizar informação de canais da internet .",
|
||||||
|
"TaskRefreshChannels": "Atualizar Canais",
|
||||||
|
"TaskCleanTranscodeDescription": "Deletar arquivos de transcodificação com mais de um dia de criação.",
|
||||||
|
"TaskCleanTranscode": "Limpar pasta de transcodificação",
|
||||||
|
"TaskUpdatePluginsDescription": "Baixa e instala atualizações para plugins que estão configurados para atualizar automaticamente.",
|
||||||
|
"TaskUpdatePlugins": "Atualizar Plugins",
|
||||||
|
"TaskRefreshPeopleDescription": "Atualiza metadados para atores e diretores na sua biblioteca de mídia.",
|
||||||
|
"TaskRefreshPeople": "Atualizar pessoas",
|
||||||
|
"TaskCleanLogsDescription": "Deletar arquivos temporários com mais de {0} dias.",
|
||||||
|
"TaskCleanLogs": "Limpar pasta de logs",
|
||||||
|
"TaskRefreshLibraryDescription": "Escaneie a sua biblioteca de mídia para arquivos novos e atualize os metadados.",
|
||||||
|
"TaskRefreshLibrary": "Escanear a Biblioteca de Mídia",
|
||||||
|
"TaskRefreshChapterImagesDescription": "Criar miniaturas para vídeos que tem capítulos.",
|
||||||
|
"TaskRefreshChapterImages": "Extrair imagens dos capítulos",
|
||||||
|
"TaskCleanCacheDescription": "Deletar arquivos temporários que não são mais necessários para o sistema.",
|
||||||
|
"TaskCleanCache": "Limpar Arquivos Temporários",
|
||||||
|
"TasksChannelsCategory": "Canais da Internet",
|
||||||
|
"TasksApplicationCategory": "Aplicativo",
|
||||||
|
"TasksLibraryCategory": "Biblioteca",
|
||||||
|
"TasksMaintenanceCategory": "Manutenção"
|
||||||
}
|
}
|
||||||
|
|
|
@ -76,7 +76,6 @@
|
||||||
"StartupEmbyServerIsLoading": "O servidor Jellyfin está a iniciar. Tente novamente mais tarde.",
|
"StartupEmbyServerIsLoading": "O servidor Jellyfin está a iniciar. Tente novamente mais tarde.",
|
||||||
"SubtitleDownloadFailureForItem": "Subtitles failed to download for {0}",
|
"SubtitleDownloadFailureForItem": "Subtitles failed to download for {0}",
|
||||||
"SubtitleDownloadFailureFromForItem": "Falha na transferência de legendas a partir de {0} para {1}",
|
"SubtitleDownloadFailureFromForItem": "Falha na transferência de legendas a partir de {0} para {1}",
|
||||||
"SubtitlesDownloadedForItem": "Transferidas legendas para {0}",
|
|
||||||
"Sync": "Sincronização",
|
"Sync": "Sincronização",
|
||||||
"System": "Sistema",
|
"System": "Sistema",
|
||||||
"TvShows": "Programas TV",
|
"TvShows": "Programas TV",
|
||||||
|
|
|
@ -31,7 +31,6 @@
|
||||||
"User": "Utilizador",
|
"User": "Utilizador",
|
||||||
"TvShows": "Séries",
|
"TvShows": "Séries",
|
||||||
"System": "Sistema",
|
"System": "Sistema",
|
||||||
"SubtitlesDownloadedForItem": "Legendas transferidas para {0}",
|
|
||||||
"SubtitleDownloadFailureFromForItem": "Falha na transferência de legendas de {0} para {1}",
|
"SubtitleDownloadFailureFromForItem": "Falha na transferência de legendas de {0} para {1}",
|
||||||
"StartupEmbyServerIsLoading": "O servidor Jellyfin está a iniciar. Tente novamente dentro de momentos.",
|
"StartupEmbyServerIsLoading": "O servidor Jellyfin está a iniciar. Tente novamente dentro de momentos.",
|
||||||
"ServerNameNeedsToBeRestarted": "{0} necessita ser reiniciado",
|
"ServerNameNeedsToBeRestarted": "{0} necessita ser reiniciado",
|
||||||
|
|
|
@ -17,7 +17,6 @@
|
||||||
"TvShows": "Spectacole TV",
|
"TvShows": "Spectacole TV",
|
||||||
"System": "Sistem",
|
"System": "Sistem",
|
||||||
"Sync": "Sincronizare",
|
"Sync": "Sincronizare",
|
||||||
"SubtitlesDownloadedForItem": "Subtitrari descarcate pentru {0}",
|
|
||||||
"SubtitleDownloadFailureFromForItem": "Subtitrările nu au putut fi descărcate de la {0} pentru {1}",
|
"SubtitleDownloadFailureFromForItem": "Subtitrările nu au putut fi descărcate de la {0} pentru {1}",
|
||||||
"StartupEmbyServerIsLoading": "Se încarcă serverul Jellyfin. Încercați din nou în scurt timp.",
|
"StartupEmbyServerIsLoading": "Se încarcă serverul Jellyfin. Încercați din nou în scurt timp.",
|
||||||
"Songs": "Melodii",
|
"Songs": "Melodii",
|
||||||
|
|
|
@ -76,7 +76,6 @@
|
||||||
"StartupEmbyServerIsLoading": "Jellyfin Server загружается. Повторите попытку в ближайшее время.",
|
"StartupEmbyServerIsLoading": "Jellyfin Server загружается. Повторите попытку в ближайшее время.",
|
||||||
"SubtitleDownloadFailureForItem": "Субтитры к {0} не удалось загрузить",
|
"SubtitleDownloadFailureForItem": "Субтитры к {0} не удалось загрузить",
|
||||||
"SubtitleDownloadFailureFromForItem": "Субтитры к {1} не удалось загрузить с {0}",
|
"SubtitleDownloadFailureFromForItem": "Субтитры к {1} не удалось загрузить с {0}",
|
||||||
"SubtitlesDownloadedForItem": "Субтитры к {0} загружены",
|
|
||||||
"Sync": "Синхро",
|
"Sync": "Синхро",
|
||||||
"System": "Система",
|
"System": "Система",
|
||||||
"TvShows": "ТВ",
|
"TvShows": "ТВ",
|
||||||
|
|
|
@ -76,7 +76,6 @@
|
||||||
"StartupEmbyServerIsLoading": "Jellyfin Server sa spúšťa. Prosím, skúste to o chvíľu znova.",
|
"StartupEmbyServerIsLoading": "Jellyfin Server sa spúšťa. Prosím, skúste to o chvíľu znova.",
|
||||||
"SubtitleDownloadFailureForItem": "Sťahovanie titulkov pre {0} zlyhalo",
|
"SubtitleDownloadFailureForItem": "Sťahovanie titulkov pre {0} zlyhalo",
|
||||||
"SubtitleDownloadFailureFromForItem": "Sťahovanie titulkov z {0} pre {1} zlyhalo",
|
"SubtitleDownloadFailureFromForItem": "Sťahovanie titulkov z {0} pre {1} zlyhalo",
|
||||||
"SubtitlesDownloadedForItem": "Titulky pre {0} stiahnuté",
|
|
||||||
"Sync": "Synchronizácia",
|
"Sync": "Synchronizácia",
|
||||||
"System": "Systém",
|
"System": "Systém",
|
||||||
"TvShows": "TV seriály",
|
"TvShows": "TV seriály",
|
||||||
|
@ -93,5 +92,27 @@
|
||||||
"UserStoppedPlayingItemWithValues": "{0} ukončil prehrávanie {1} na {2}",
|
"UserStoppedPlayingItemWithValues": "{0} ukončil prehrávanie {1} na {2}",
|
||||||
"ValueHasBeenAddedToLibrary": "{0} bol pridané do vašej knižnice médií",
|
"ValueHasBeenAddedToLibrary": "{0} bol pridané do vašej knižnice médií",
|
||||||
"ValueSpecialEpisodeName": "Špeciál - {0}",
|
"ValueSpecialEpisodeName": "Špeciál - {0}",
|
||||||
"VersionNumber": "Verzia {0}"
|
"VersionNumber": "Verzia {0}",
|
||||||
|
"TaskDownloadMissingSubtitlesDescription": "Vyhľadá na internete chýbajúce titulky podľa toho, ako sú nakonfigurované metadáta.",
|
||||||
|
"TaskDownloadMissingSubtitles": "Stiahnuť chýbajúce titulky",
|
||||||
|
"TaskRefreshChannelsDescription": "Obnoví informácie o internetových kanáloch.",
|
||||||
|
"TaskRefreshChannels": "Obnoviť kanály",
|
||||||
|
"TaskCleanTranscodeDescription": "Vymaže súbory transkódovania, ktoré sú staršie ako jeden deň.",
|
||||||
|
"TaskCleanTranscode": "Vyčistiť priečinok pre transkódovanie",
|
||||||
|
"TaskUpdatePluginsDescription": "Stiahne a nainštaluje aktualizácie pre zásuvné moduly, ktoré sú nastavené tak, aby sa aktualizovali automaticky.",
|
||||||
|
"TaskUpdatePlugins": "Aktualizovať zásuvné moduly",
|
||||||
|
"TaskRefreshPeopleDescription": "Aktualizuje metadáta pre hercov a režisérov vo vašej mediálnej knižnici.",
|
||||||
|
"TaskRefreshPeople": "Obnoviť osoby",
|
||||||
|
"TaskCleanLogsDescription": "Vymaže log súbory, ktoré su staršie ako {0} deň/dni/dní.",
|
||||||
|
"TaskCleanLogs": "Vyčistiť priečinok s logmi",
|
||||||
|
"TaskRefreshLibraryDescription": "Hľadá vo vašej mediálnej knižnici nové súbory a obnovuje metadáta.",
|
||||||
|
"TaskRefreshLibrary": "Prehľadávať knižnicu medií",
|
||||||
|
"TaskRefreshChapterImagesDescription": "Vytvorí náhľady pre videá, ktoré majú kapitoly.",
|
||||||
|
"TaskRefreshChapterImages": "Extrahovať obrázky kapitol",
|
||||||
|
"TaskCleanCacheDescription": "Vymaže cache súbory, ktoré nie sú už potrebné pre systém.",
|
||||||
|
"TaskCleanCache": "Vyčistiť Cache priečinok",
|
||||||
|
"TasksChannelsCategory": "Internetové kanály",
|
||||||
|
"TasksApplicationCategory": "Aplikácia",
|
||||||
|
"TasksLibraryCategory": "Knižnica",
|
||||||
|
"TasksMaintenanceCategory": "Údržba"
|
||||||
}
|
}
|
||||||
|
|
|
@ -76,7 +76,6 @@
|
||||||
"StartupEmbyServerIsLoading": "Jellyfin Server se nalaga. Poskusi ponovno kasneje.",
|
"StartupEmbyServerIsLoading": "Jellyfin Server se nalaga. Poskusi ponovno kasneje.",
|
||||||
"SubtitleDownloadFailureForItem": "Subtitles failed to download for {0}",
|
"SubtitleDownloadFailureForItem": "Subtitles failed to download for {0}",
|
||||||
"SubtitleDownloadFailureFromForItem": "Neuspešen prenos podnapisov iz {0} za {1}",
|
"SubtitleDownloadFailureFromForItem": "Neuspešen prenos podnapisov iz {0} za {1}",
|
||||||
"SubtitlesDownloadedForItem": "Podnapisi preneseni za {0}",
|
|
||||||
"Sync": "Sinhroniziraj",
|
"Sync": "Sinhroniziraj",
|
||||||
"System": "System",
|
"System": "System",
|
||||||
"TvShows": "TV serije",
|
"TvShows": "TV serije",
|
||||||
|
|
|
@ -17,7 +17,6 @@
|
||||||
"TvShows": "ТВ серије",
|
"TvShows": "ТВ серије",
|
||||||
"System": "Систем",
|
"System": "Систем",
|
||||||
"Sync": "Усклади",
|
"Sync": "Усклади",
|
||||||
"SubtitlesDownloadedForItem": "Титлови преузети за {0}",
|
|
||||||
"SubtitleDownloadFailureFromForItem": "Неуспело преузимање титлова за {1} са {0}",
|
"SubtitleDownloadFailureFromForItem": "Неуспело преузимање титлова за {1} са {0}",
|
||||||
"StartupEmbyServerIsLoading": "Џелифин сервер се подиже. Покушајте поново убрзо.",
|
"StartupEmbyServerIsLoading": "Џелифин сервер се подиже. Покушајте поново убрзо.",
|
||||||
"Songs": "Песме",
|
"Songs": "Песме",
|
||||||
|
|
|
@ -76,7 +76,6 @@
|
||||||
"StartupEmbyServerIsLoading": "Jellyfin Server arbetar. Pröva igen snart.",
|
"StartupEmbyServerIsLoading": "Jellyfin Server arbetar. Pröva igen snart.",
|
||||||
"SubtitleDownloadFailureForItem": "Nerladdning av undertexter för {0} misslyckades",
|
"SubtitleDownloadFailureForItem": "Nerladdning av undertexter för {0} misslyckades",
|
||||||
"SubtitleDownloadFailureFromForItem": "Undertexter kunde inte laddas ner från {0} för {1}",
|
"SubtitleDownloadFailureFromForItem": "Undertexter kunde inte laddas ner från {0} för {1}",
|
||||||
"SubtitlesDownloadedForItem": "Undertexter har laddats ner till {0}",
|
|
||||||
"Sync": "Synk",
|
"Sync": "Synk",
|
||||||
"System": "System",
|
"System": "System",
|
||||||
"TvShows": "TV-serier",
|
"TvShows": "TV-serier",
|
||||||
|
|
|
@ -76,7 +76,6 @@
|
||||||
"StartupEmbyServerIsLoading": "Jellyfin Sunucusu yükleniyor. Lütfen kısa süre sonra tekrar deneyin.",
|
"StartupEmbyServerIsLoading": "Jellyfin Sunucusu yükleniyor. Lütfen kısa süre sonra tekrar deneyin.",
|
||||||
"SubtitleDownloadFailureForItem": "Subtitles failed to download for {0}",
|
"SubtitleDownloadFailureForItem": "Subtitles failed to download for {0}",
|
||||||
"SubtitleDownloadFailureFromForItem": "{1} için alt yazılar {0} 'dan indirilemedi",
|
"SubtitleDownloadFailureFromForItem": "{1} için alt yazılar {0} 'dan indirilemedi",
|
||||||
"SubtitlesDownloadedForItem": "{0} için altyazılar indirildi",
|
|
||||||
"Sync": "Eşitle",
|
"Sync": "Eşitle",
|
||||||
"System": "Sistem",
|
"System": "Sistem",
|
||||||
"TvShows": "Diziler",
|
"TvShows": "Diziler",
|
||||||
|
|
|
@ -3,11 +3,11 @@
|
||||||
"AppDeviceValues": "应用: {0}, 设备: {1}",
|
"AppDeviceValues": "应用: {0}, 设备: {1}",
|
||||||
"Application": "应用程序",
|
"Application": "应用程序",
|
||||||
"Artists": "艺术家",
|
"Artists": "艺术家",
|
||||||
"AuthenticationSucceededWithUserName": "{0} 验证成功",
|
"AuthenticationSucceededWithUserName": "成功验证{0} ",
|
||||||
"Books": "书籍",
|
"Books": "书籍",
|
||||||
"CameraImageUploadedFrom": "新的相机图像已从 {0} 上传",
|
"CameraImageUploadedFrom": "新的相机图像已从 {0} 上传",
|
||||||
"Channels": "频道",
|
"Channels": "频道",
|
||||||
"ChapterNameValue": "第 {0} 章",
|
"ChapterNameValue": "第 {0} 集",
|
||||||
"Collections": "合集",
|
"Collections": "合集",
|
||||||
"DeviceOfflineWithName": "{0} 已断开",
|
"DeviceOfflineWithName": "{0} 已断开",
|
||||||
"DeviceOnlineWithName": "{0} 已连接",
|
"DeviceOnlineWithName": "{0} 已连接",
|
||||||
|
@ -76,7 +76,6 @@
|
||||||
"StartupEmbyServerIsLoading": "Jellyfin 服务器加载中。请稍后再试。",
|
"StartupEmbyServerIsLoading": "Jellyfin 服务器加载中。请稍后再试。",
|
||||||
"SubtitleDownloadFailureForItem": "为 {0} 下载字幕失败",
|
"SubtitleDownloadFailureForItem": "为 {0} 下载字幕失败",
|
||||||
"SubtitleDownloadFailureFromForItem": "无法从 {0} 下载 {1} 的字幕",
|
"SubtitleDownloadFailureFromForItem": "无法从 {0} 下载 {1} 的字幕",
|
||||||
"SubtitlesDownloadedForItem": "已为 {0} 下载了字幕",
|
|
||||||
"Sync": "同步",
|
"Sync": "同步",
|
||||||
"System": "系统",
|
"System": "系统",
|
||||||
"TvShows": "电视剧",
|
"TvShows": "电视剧",
|
||||||
|
@ -93,5 +92,27 @@
|
||||||
"UserStoppedPlayingItemWithValues": "{0} 已在 {2} 上停止播放 {1}",
|
"UserStoppedPlayingItemWithValues": "{0} 已在 {2} 上停止播放 {1}",
|
||||||
"ValueHasBeenAddedToLibrary": "{0} 已添加至您的媒体库中",
|
"ValueHasBeenAddedToLibrary": "{0} 已添加至您的媒体库中",
|
||||||
"ValueSpecialEpisodeName": "特典 - {0}",
|
"ValueSpecialEpisodeName": "特典 - {0}",
|
||||||
"VersionNumber": "版本 {0}"
|
"VersionNumber": "版本 {0}",
|
||||||
|
"TaskUpdatePluginsDescription": "为已设置为自动更新的插件下载和安装更新。",
|
||||||
|
"TaskRefreshPeople": "刷新人员",
|
||||||
|
"TasksChannelsCategory": "互联网频道",
|
||||||
|
"TasksLibraryCategory": "媒体库",
|
||||||
|
"TaskDownloadMissingSubtitlesDescription": "根据元数据设置在互联网上搜索缺少的字幕。",
|
||||||
|
"TaskDownloadMissingSubtitles": "下载缺少的字幕",
|
||||||
|
"TaskRefreshChannelsDescription": "刷新互联网频道信息。",
|
||||||
|
"TaskRefreshChannels": "刷新频道",
|
||||||
|
"TaskCleanTranscodeDescription": "删除存在超过 1 天的转码文件。",
|
||||||
|
"TaskCleanTranscode": "清理转码目录",
|
||||||
|
"TaskUpdatePlugins": "更新插件",
|
||||||
|
"TaskRefreshPeopleDescription": "更新媒体库中演员和导演的元数据。",
|
||||||
|
"TaskCleanLogsDescription": "删除存在超过 {0} 天的的日志文件。",
|
||||||
|
"TaskCleanLogs": "清理日志目录",
|
||||||
|
"TaskRefreshLibraryDescription": "扫描你的媒体库以获取新文件并刷新元数据。",
|
||||||
|
"TaskRefreshLibrary": "扫描媒体库",
|
||||||
|
"TaskRefreshChapterImagesDescription": "为包含剧集的视频提取缩略图。",
|
||||||
|
"TaskRefreshChapterImages": "提取剧集图片",
|
||||||
|
"TaskCleanCacheDescription": "删除系统不再需要的缓存文件。",
|
||||||
|
"TaskCleanCache": "清理缓存目录",
|
||||||
|
"TasksApplicationCategory": "应用程序",
|
||||||
|
"TasksMaintenanceCategory": "维护"
|
||||||
}
|
}
|
||||||
|
|
|
@ -76,7 +76,6 @@
|
||||||
"StartupEmbyServerIsLoading": "Jellyfin 伺服器載入中,請稍後再試。",
|
"StartupEmbyServerIsLoading": "Jellyfin 伺服器載入中,請稍後再試。",
|
||||||
"SubtitleDownloadFailureForItem": "Subtitles failed to download for {0}",
|
"SubtitleDownloadFailureForItem": "Subtitles failed to download for {0}",
|
||||||
"SubtitleDownloadFailureFromForItem": "無法從 {0} 下載 {1} 的字幕",
|
"SubtitleDownloadFailureFromForItem": "無法從 {0} 下載 {1} 的字幕",
|
||||||
"SubtitlesDownloadedForItem": "已為 {0} 下載了字幕",
|
|
||||||
"Sync": "同步",
|
"Sync": "同步",
|
||||||
"System": "System",
|
"System": "System",
|
||||||
"TvShows": "電視節目",
|
"TvShows": "電視節目",
|
||||||
|
|
|
@ -72,7 +72,6 @@
|
||||||
"Shows": "節目",
|
"Shows": "節目",
|
||||||
"Songs": "歌曲",
|
"Songs": "歌曲",
|
||||||
"StartupEmbyServerIsLoading": "Jellyfin Server正在啟動,請稍後再試一次。",
|
"StartupEmbyServerIsLoading": "Jellyfin Server正在啟動,請稍後再試一次。",
|
||||||
"SubtitlesDownloadedForItem": "已為 {0} 下載字幕",
|
|
||||||
"Sync": "同步",
|
"Sync": "同步",
|
||||||
"System": "系統",
|
"System": "系統",
|
||||||
"TvShows": "電視節目",
|
"TvShows": "電視節目",
|
||||||
|
|
|
@ -26,14 +26,20 @@ namespace Emby.Server.Implementations.MediaEncoder
|
||||||
private readonly IChapterManager _chapterManager;
|
private readonly IChapterManager _chapterManager;
|
||||||
private readonly ILibraryManager _libraryManager;
|
private readonly ILibraryManager _libraryManager;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// The first chapter ticks.
|
||||||
|
/// </summary>
|
||||||
|
private static readonly long _firstChapterTicks = TimeSpan.FromSeconds(15).Ticks;
|
||||||
|
|
||||||
public EncodingManager(
|
public EncodingManager(
|
||||||
|
ILogger<EncodingManager> logger,
|
||||||
IFileSystem fileSystem,
|
IFileSystem fileSystem,
|
||||||
ILoggerFactory loggerFactory,
|
|
||||||
IMediaEncoder encoder,
|
IMediaEncoder encoder,
|
||||||
IChapterManager chapterManager, ILibraryManager libraryManager)
|
IChapterManager chapterManager,
|
||||||
|
ILibraryManager libraryManager)
|
||||||
{
|
{
|
||||||
|
_logger = logger;
|
||||||
_fileSystem = fileSystem;
|
_fileSystem = fileSystem;
|
||||||
_logger = loggerFactory.CreateLogger(nameof(EncodingManager));
|
|
||||||
_encoder = encoder;
|
_encoder = encoder;
|
||||||
_chapterManager = chapterManager;
|
_chapterManager = chapterManager;
|
||||||
_libraryManager = libraryManager;
|
_libraryManager = libraryManager;
|
||||||
|
@ -97,12 +103,7 @@ namespace Emby.Server.Implementations.MediaEncoder
|
||||||
return video.DefaultVideoStreamIndex.HasValue;
|
return video.DefaultVideoStreamIndex.HasValue;
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
public async Task<bool> RefreshChapterImages(Video video, IDirectoryService directoryService, IReadOnlyList<ChapterInfo> chapters, bool extractImages, bool saveChapters, CancellationToken cancellationToken)
|
||||||
/// The first chapter ticks
|
|
||||||
/// </summary>
|
|
||||||
private static readonly long FirstChapterTicks = TimeSpan.FromSeconds(15).Ticks;
|
|
||||||
|
|
||||||
public async Task<bool> RefreshChapterImages(Video video, IDirectoryService directoryService, List<ChapterInfo> chapters, bool extractImages, bool saveChapters, CancellationToken cancellationToken)
|
|
||||||
{
|
{
|
||||||
if (!IsEligibleForChapterImageExtraction(video))
|
if (!IsEligibleForChapterImageExtraction(video))
|
||||||
{
|
{
|
||||||
|
@ -135,7 +136,7 @@ namespace Emby.Server.Implementations.MediaEncoder
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
// Add some time for the first chapter to make sure we don't end up with a black image
|
// Add some time for the first chapter to make sure we don't end up with a black image
|
||||||
var time = chapter.StartPositionTicks == 0 ? TimeSpan.FromTicks(Math.Min(FirstChapterTicks, video.RunTimeTicks ?? 0)) : TimeSpan.FromTicks(chapter.StartPositionTicks);
|
var time = chapter.StartPositionTicks == 0 ? TimeSpan.FromTicks(Math.Min(_firstChapterTicks, video.RunTimeTicks ?? 0)) : TimeSpan.FromTicks(chapter.StartPositionTicks);
|
||||||
|
|
||||||
var protocol = MediaProtocol.File;
|
var protocol = MediaProtocol.File;
|
||||||
|
|
||||||
|
@ -152,9 +153,9 @@ namespace Emby.Server.Implementations.MediaEncoder
|
||||||
{
|
{
|
||||||
_fileSystem.DeleteFile(tempFile);
|
_fileSystem.DeleteFile(tempFile);
|
||||||
}
|
}
|
||||||
catch
|
catch (IOException ex)
|
||||||
{
|
{
|
||||||
|
_logger.LogError(ex, "Error deleting temporary chapter image encoding file {Path}", tempFile);
|
||||||
}
|
}
|
||||||
|
|
||||||
chapter.ImagePath = path;
|
chapter.ImagePath = path;
|
||||||
|
@ -184,7 +185,7 @@ namespace Emby.Server.Implementations.MediaEncoder
|
||||||
|
|
||||||
if (saveChapters && changesMade)
|
if (saveChapters && changesMade)
|
||||||
{
|
{
|
||||||
_chapterManager.SaveChapters(video.Id.ToString(), chapters);
|
_chapterManager.SaveChapters(video.Id, chapters);
|
||||||
}
|
}
|
||||||
|
|
||||||
DeleteDeadImages(currentImages, chapters);
|
DeleteDeadImages(currentImages, chapters);
|
||||||
|
@ -199,22 +200,21 @@ namespace Emby.Server.Implementations.MediaEncoder
|
||||||
return Path.Combine(GetChapterImagesPath(video), filename);
|
return Path.Combine(GetChapterImagesPath(video), filename);
|
||||||
}
|
}
|
||||||
|
|
||||||
private static List<string> GetSavedChapterImages(Video video, IDirectoryService directoryService)
|
private static IReadOnlyList<string> GetSavedChapterImages(Video video, IDirectoryService directoryService)
|
||||||
{
|
{
|
||||||
var path = GetChapterImagesPath(video);
|
var path = GetChapterImagesPath(video);
|
||||||
if (!Directory.Exists(path))
|
if (!Directory.Exists(path))
|
||||||
{
|
{
|
||||||
return new List<string>();
|
return Array.Empty<string>();
|
||||||
}
|
}
|
||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
return directoryService.GetFilePaths(path)
|
return directoryService.GetFilePaths(path);
|
||||||
.ToList();
|
|
||||||
}
|
}
|
||||||
catch (IOException)
|
catch (IOException)
|
||||||
{
|
{
|
||||||
return new List<string>();
|
return Array.Empty<string>();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -227,7 +227,7 @@ namespace Emby.Server.Implementations.MediaEncoder
|
||||||
|
|
||||||
foreach (var image in deadImages)
|
foreach (var image in deadImages)
|
||||||
{
|
{
|
||||||
_logger.LogDebug("Deleting dead chapter image {path}", image);
|
_logger.LogDebug("Deleting dead chapter image {Path}", image);
|
||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
|
@ -235,7 +235,7 @@ namespace Emby.Server.Implementations.MediaEncoder
|
||||||
}
|
}
|
||||||
catch (IOException ex)
|
catch (IOException ex)
|
||||||
{
|
{
|
||||||
_logger.LogError(ex, "Error deleting {path}.", image);
|
_logger.LogError(ex, "Error deleting {Path}.", image);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -15,6 +15,7 @@ using MediaBrowser.Model.Entities;
|
||||||
using MediaBrowser.Model.IO;
|
using MediaBrowser.Model.IO;
|
||||||
using MediaBrowser.Model.Tasks;
|
using MediaBrowser.Model.Tasks;
|
||||||
using Microsoft.Extensions.Logging;
|
using Microsoft.Extensions.Logging;
|
||||||
|
using MediaBrowser.Model.Globalization;
|
||||||
|
|
||||||
namespace Emby.Server.Implementations.ScheduledTasks
|
namespace Emby.Server.Implementations.ScheduledTasks
|
||||||
{
|
{
|
||||||
|
@ -39,11 +40,19 @@ namespace Emby.Server.Implementations.ScheduledTasks
|
||||||
|
|
||||||
private readonly IEncodingManager _encodingManager;
|
private readonly IEncodingManager _encodingManager;
|
||||||
private readonly IFileSystem _fileSystem;
|
private readonly IFileSystem _fileSystem;
|
||||||
|
private readonly ILocalizationManager _localization;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Initializes a new instance of the <see cref="ChapterImagesTask" /> class.
|
/// Initializes a new instance of the <see cref="ChapterImagesTask" /> class.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public ChapterImagesTask(ILoggerFactory loggerFactory, ILibraryManager libraryManager, IItemRepository itemRepo, IApplicationPaths appPaths, IEncodingManager encodingManager, IFileSystem fileSystem)
|
public ChapterImagesTask(
|
||||||
|
ILoggerFactory loggerFactory,
|
||||||
|
ILibraryManager libraryManager,
|
||||||
|
IItemRepository itemRepo,
|
||||||
|
IApplicationPaths appPaths,
|
||||||
|
IEncodingManager encodingManager,
|
||||||
|
IFileSystem fileSystem,
|
||||||
|
ILocalizationManager localization)
|
||||||
{
|
{
|
||||||
_logger = loggerFactory.CreateLogger(GetType().Name);
|
_logger = loggerFactory.CreateLogger(GetType().Name);
|
||||||
_libraryManager = libraryManager;
|
_libraryManager = libraryManager;
|
||||||
|
@ -51,6 +60,7 @@ namespace Emby.Server.Implementations.ScheduledTasks
|
||||||
_appPaths = appPaths;
|
_appPaths = appPaths;
|
||||||
_encodingManager = encodingManager;
|
_encodingManager = encodingManager;
|
||||||
_fileSystem = fileSystem;
|
_fileSystem = fileSystem;
|
||||||
|
_localization = localization;
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
@ -159,11 +169,11 @@ namespace Emby.Server.Implementations.ScheduledTasks
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public string Name => "Extract Chapter Images";
|
public string Name => _localization.GetLocalizedString("TaskRefreshChapterImages");
|
||||||
|
|
||||||
public string Description => "Creates thumbnails for videos that have chapters.";
|
public string Description => _localization.GetLocalizedString("TaskRefreshChapterImagesDescription");
|
||||||
|
|
||||||
public string Category => "Library";
|
public string Category => _localization.GetLocalizedString("TasksLibraryCategory");
|
||||||
|
|
||||||
public string Key => "RefreshChapterImages";
|
public string Key => "RefreshChapterImages";
|
||||||
|
|
||||||
|
|
|
@ -8,6 +8,7 @@ using MediaBrowser.Common.Configuration;
|
||||||
using MediaBrowser.Model.IO;
|
using MediaBrowser.Model.IO;
|
||||||
using MediaBrowser.Model.Tasks;
|
using MediaBrowser.Model.Tasks;
|
||||||
using Microsoft.Extensions.Logging;
|
using Microsoft.Extensions.Logging;
|
||||||
|
using MediaBrowser.Model.Globalization;
|
||||||
|
|
||||||
namespace Emby.Server.Implementations.ScheduledTasks.Tasks
|
namespace Emby.Server.Implementations.ScheduledTasks.Tasks
|
||||||
{
|
{
|
||||||
|
@ -25,6 +26,7 @@ namespace Emby.Server.Implementations.ScheduledTasks.Tasks
|
||||||
private readonly ILogger _logger;
|
private readonly ILogger _logger;
|
||||||
|
|
||||||
private readonly IFileSystem _fileSystem;
|
private readonly IFileSystem _fileSystem;
|
||||||
|
private readonly ILocalizationManager _localization;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Initializes a new instance of the <see cref="DeleteCacheFileTask" /> class.
|
/// Initializes a new instance of the <see cref="DeleteCacheFileTask" /> class.
|
||||||
|
@ -32,11 +34,13 @@ namespace Emby.Server.Implementations.ScheduledTasks.Tasks
|
||||||
public DeleteCacheFileTask(
|
public DeleteCacheFileTask(
|
||||||
IApplicationPaths appPaths,
|
IApplicationPaths appPaths,
|
||||||
ILogger<DeleteCacheFileTask> logger,
|
ILogger<DeleteCacheFileTask> logger,
|
||||||
IFileSystem fileSystem)
|
IFileSystem fileSystem,
|
||||||
|
ILocalizationManager localization)
|
||||||
{
|
{
|
||||||
ApplicationPaths = appPaths;
|
ApplicationPaths = appPaths;
|
||||||
_logger = logger;
|
_logger = logger;
|
||||||
_fileSystem = fileSystem;
|
_fileSystem = fileSystem;
|
||||||
|
_localization = localization;
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
@ -161,11 +165,11 @@ namespace Emby.Server.Implementations.ScheduledTasks.Tasks
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public string Name => "Clean Cache Directory";
|
public string Name => _localization.GetLocalizedString("TaskCleanCache");
|
||||||
|
|
||||||
public string Description => "Deletes cache files no longer needed by the system.";
|
public string Description => _localization.GetLocalizedString("TaskCleanCacheDescription");
|
||||||
|
|
||||||
public string Category => "Maintenance";
|
public string Category => _localization.GetLocalizedString("TasksMaintenanceCategory");
|
||||||
|
|
||||||
public string Key => "DeleteCacheFiles";
|
public string Key => "DeleteCacheFiles";
|
||||||
|
|
||||||
|
|
|
@ -6,6 +6,7 @@ using System.Threading.Tasks;
|
||||||
using MediaBrowser.Common.Configuration;
|
using MediaBrowser.Common.Configuration;
|
||||||
using MediaBrowser.Model.IO;
|
using MediaBrowser.Model.IO;
|
||||||
using MediaBrowser.Model.Tasks;
|
using MediaBrowser.Model.Tasks;
|
||||||
|
using MediaBrowser.Model.Globalization;
|
||||||
|
|
||||||
namespace Emby.Server.Implementations.ScheduledTasks.Tasks
|
namespace Emby.Server.Implementations.ScheduledTasks.Tasks
|
||||||
{
|
{
|
||||||
|
@ -21,15 +22,17 @@ namespace Emby.Server.Implementations.ScheduledTasks.Tasks
|
||||||
private IConfigurationManager ConfigurationManager { get; set; }
|
private IConfigurationManager ConfigurationManager { get; set; }
|
||||||
|
|
||||||
private readonly IFileSystem _fileSystem;
|
private readonly IFileSystem _fileSystem;
|
||||||
|
private readonly ILocalizationManager _localization;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Initializes a new instance of the <see cref="DeleteLogFileTask" /> class.
|
/// Initializes a new instance of the <see cref="DeleteLogFileTask" /> class.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="configurationManager">The configuration manager.</param>
|
/// <param name="configurationManager">The configuration manager.</param>
|
||||||
public DeleteLogFileTask(IConfigurationManager configurationManager, IFileSystem fileSystem)
|
public DeleteLogFileTask(IConfigurationManager configurationManager, IFileSystem fileSystem, ILocalizationManager localization)
|
||||||
{
|
{
|
||||||
ConfigurationManager = configurationManager;
|
ConfigurationManager = configurationManager;
|
||||||
_fileSystem = fileSystem;
|
_fileSystem = fileSystem;
|
||||||
|
_localization = localization;
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
@ -79,11 +82,11 @@ namespace Emby.Server.Implementations.ScheduledTasks.Tasks
|
||||||
return Task.CompletedTask;
|
return Task.CompletedTask;
|
||||||
}
|
}
|
||||||
|
|
||||||
public string Name => "Clean Log Directory";
|
public string Name => _localization.GetLocalizedString("TaskCleanLogs");
|
||||||
|
|
||||||
public string Description => string.Format("Deletes log files that are more than {0} days old.", ConfigurationManager.CommonConfiguration.LogFileRetentionDays);
|
public string Description => string.Format(_localization.GetLocalizedString("TaskCleanLogsDescription"), ConfigurationManager.CommonConfiguration.LogFileRetentionDays);
|
||||||
|
|
||||||
public string Category => "Maintenance";
|
public string Category => _localization.GetLocalizedString("TasksMaintenanceCategory");
|
||||||
|
|
||||||
public string Key => "CleanLogFiles";
|
public string Key => "CleanLogFiles";
|
||||||
|
|
||||||
|
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user