mirror of
https://github.com/jellyfin/jellyfin.git
synced 2024-09-06 03:26:07 +02:00
Merge branch 'master' of https://github.com/MediaBrowser/Emby
This commit is contained in:
commit
4c1834c087
36 changed files with 292 additions and 177 deletions
|
@ -63,8 +63,8 @@
|
||||||
<EmbeddedResource Include="fonts\robotoregular.ttf" />
|
<EmbeddedResource Include="fonts\robotoregular.ttf" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<Reference Include="SkiaSharp, Version=1.58.0.0, Culture=neutral, PublicKeyToken=0738eb9f132ed756, processorArchitecture=MSIL">
|
<Reference Include="SkiaSharp, Version=1.59.0.0, Culture=neutral, PublicKeyToken=0738eb9f132ed756, processorArchitecture=MSIL">
|
||||||
<HintPath>..\packages\SkiaSharp.1.58.1\lib\portable-net45+win8+wpa81+wp8\SkiaSharp.dll</HintPath>
|
<HintPath>..\packages\SkiaSharp.1.59.2\lib\portable-net45+win8+wpa81+wp8\SkiaSharp.dll</HintPath>
|
||||||
</Reference>
|
</Reference>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
|
|
|
@ -10,22 +10,27 @@ using System.IO;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Reflection;
|
using System.Reflection;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
|
using MediaBrowser.Controller.Extensions;
|
||||||
|
using System.Globalization;
|
||||||
|
using MediaBrowser.Model.Globalization;
|
||||||
|
|
||||||
namespace Emby.Drawing.Skia
|
namespace Emby.Drawing.Skia
|
||||||
{
|
{
|
||||||
public class SkiaEncoder : IImageEncoder
|
public class SkiaEncoder : IImageEncoder
|
||||||
{
|
{
|
||||||
private readonly ILogger _logger;
|
private readonly ILogger _logger;
|
||||||
private readonly IApplicationPaths _appPaths;
|
private static IApplicationPaths _appPaths;
|
||||||
private readonly Func<IHttpClient> _httpClientFactory;
|
private readonly Func<IHttpClient> _httpClientFactory;
|
||||||
private readonly IFileSystem _fileSystem;
|
private readonly IFileSystem _fileSystem;
|
||||||
|
private static ILocalizationManager _localizationManager;
|
||||||
|
|
||||||
public SkiaEncoder(ILogger logger, IApplicationPaths appPaths, Func<IHttpClient> httpClientFactory, IFileSystem fileSystem)
|
public SkiaEncoder(ILogger logger, IApplicationPaths appPaths, Func<IHttpClient> httpClientFactory, IFileSystem fileSystem, ILocalizationManager localizationManager)
|
||||||
{
|
{
|
||||||
_logger = logger;
|
_logger = logger;
|
||||||
_appPaths = appPaths;
|
_appPaths = appPaths;
|
||||||
_httpClientFactory = httpClientFactory;
|
_httpClientFactory = httpClientFactory;
|
||||||
_fileSystem = fileSystem;
|
_fileSystem = fileSystem;
|
||||||
|
_localizationManager = localizationManager;
|
||||||
|
|
||||||
LogVersion();
|
LogVersion();
|
||||||
}
|
}
|
||||||
|
@ -190,14 +195,53 @@ namespace Emby.Drawing.Skia
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private static string[] TransparentImageTypes = new string[] { ".png", ".gif", ".webp" };
|
private static bool HasDiacritics(string text)
|
||||||
internal static SKBitmap Decode(string path, bool forceCleanBitmap, out SKCodecOrigin origin)
|
|
||||||
{
|
{
|
||||||
|
return !String.Equals(text, text.RemoveDiacritics(), StringComparison.Ordinal);
|
||||||
|
}
|
||||||
|
|
||||||
|
private static bool RequiresSpecialCharacterHack(string path)
|
||||||
|
{
|
||||||
|
if (_localizationManager.HasUnicodeCategory(path, UnicodeCategory.OtherLetter))
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (HasDiacritics(path))
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
private static string NormalizePath(string path, IFileSystem fileSystem)
|
||||||
|
{
|
||||||
|
if (!RequiresSpecialCharacterHack(path))
|
||||||
|
{
|
||||||
|
return path;
|
||||||
|
}
|
||||||
|
|
||||||
|
var tempPath = Path.Combine(_appPaths.TempDirectory, Guid.NewGuid() + Path.GetExtension(path) ?? string.Empty);
|
||||||
|
|
||||||
|
fileSystem.CopyFile(path, tempPath, true);
|
||||||
|
|
||||||
|
return tempPath;
|
||||||
|
}
|
||||||
|
|
||||||
|
private static string[] TransparentImageTypes = new string[] { ".png", ".gif", ".webp" };
|
||||||
|
internal static SKBitmap Decode(string path, bool forceCleanBitmap, IFileSystem fileSystem, out SKCodecOrigin origin)
|
||||||
|
{
|
||||||
|
if (!fileSystem.FileExists(path))
|
||||||
|
{
|
||||||
|
throw new FileNotFoundException("File not found", path);
|
||||||
|
}
|
||||||
|
|
||||||
var requiresTransparencyHack = TransparentImageTypes.Contains(Path.GetExtension(path) ?? string.Empty);
|
var requiresTransparencyHack = TransparentImageTypes.Contains(Path.GetExtension(path) ?? string.Empty);
|
||||||
|
|
||||||
if (requiresTransparencyHack || forceCleanBitmap)
|
if (requiresTransparencyHack || forceCleanBitmap)
|
||||||
{
|
{
|
||||||
using (var stream = new SKFileStream(path))
|
using (var stream = new SKFileStream(NormalizePath(path, fileSystem)))
|
||||||
{
|
{
|
||||||
using (var codec = SKCodec.Create(stream))
|
using (var codec = SKCodec.Create(stream))
|
||||||
{
|
{
|
||||||
|
@ -227,11 +271,11 @@ namespace Emby.Drawing.Skia
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
var resultBitmap = SKBitmap.Decode(path);
|
var resultBitmap = SKBitmap.Decode(NormalizePath(path, fileSystem));
|
||||||
|
|
||||||
if (resultBitmap == null)
|
if (resultBitmap == null)
|
||||||
{
|
{
|
||||||
return Decode(path, true, out origin);
|
return Decode(path, true, fileSystem, out origin);
|
||||||
}
|
}
|
||||||
|
|
||||||
// If we have to resize these they often end up distorted
|
// If we have to resize these they often end up distorted
|
||||||
|
@ -239,7 +283,7 @@ namespace Emby.Drawing.Skia
|
||||||
{
|
{
|
||||||
using (resultBitmap)
|
using (resultBitmap)
|
||||||
{
|
{
|
||||||
return Decode(path, true, out origin);
|
return Decode(path, true, fileSystem, out origin);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -251,13 +295,13 @@ namespace Emby.Drawing.Skia
|
||||||
{
|
{
|
||||||
if (cropWhitespace)
|
if (cropWhitespace)
|
||||||
{
|
{
|
||||||
using (var bitmap = Decode(path, forceAnalyzeBitmap, out origin))
|
using (var bitmap = Decode(path, forceAnalyzeBitmap, _fileSystem, out origin))
|
||||||
{
|
{
|
||||||
return CropWhiteSpace(bitmap);
|
return CropWhiteSpace(bitmap);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return Decode(path, forceAnalyzeBitmap, out origin);
|
return Decode(path, forceAnalyzeBitmap, _fileSystem, out origin);
|
||||||
}
|
}
|
||||||
|
|
||||||
private SKBitmap GetBitmap(string path, bool cropWhitespace, bool autoOrient)
|
private SKBitmap GetBitmap(string path, bool cropWhitespace, bool autoOrient)
|
||||||
|
|
|
@ -83,7 +83,7 @@ namespace Emby.Drawing.Skia
|
||||||
for (int i = 0; i < 4; i++)
|
for (int i = 0; i < 4; i++)
|
||||||
{
|
{
|
||||||
SKCodecOrigin origin;
|
SKCodecOrigin origin;
|
||||||
using (var currentBitmap = SkiaEncoder.Decode(paths[imageIndex], false, out origin))
|
using (var currentBitmap = SkiaEncoder.Decode(paths[imageIndex], false, _fileSystem, out origin))
|
||||||
{
|
{
|
||||||
// resize to the same aspect as the original
|
// resize to the same aspect as the original
|
||||||
int iWidth = (int)Math.Abs(iHeight * currentBitmap.Width / currentBitmap.Height);
|
int iWidth = (int)Math.Abs(iHeight * currentBitmap.Width / currentBitmap.Height);
|
||||||
|
@ -165,7 +165,7 @@ namespace Emby.Drawing.Skia
|
||||||
for (var y = 0; y < 2; y++)
|
for (var y = 0; y < 2; y++)
|
||||||
{
|
{
|
||||||
SKCodecOrigin origin;
|
SKCodecOrigin origin;
|
||||||
using (var currentBitmap = SkiaEncoder.Decode(paths[imageIndex], false, out origin))
|
using (var currentBitmap = SkiaEncoder.Decode(paths[imageIndex], false, _fileSystem, out origin))
|
||||||
{
|
{
|
||||||
using (var resizedBitmap = new SKBitmap(cellWidth, cellHeight, currentBitmap.ColorType, currentBitmap.AlphaType))
|
using (var resizedBitmap = new SKBitmap(cellWidth, cellHeight, currentBitmap.ColorType, currentBitmap.AlphaType))
|
||||||
{
|
{
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<packages>
|
<packages>
|
||||||
<package id="SkiaSharp" version="1.58.1" targetFramework="portable45-net45+win8" />
|
<package id="SkiaSharp" version="1.59.2" targetFramework="portable45-net45+win8" />
|
||||||
</packages>
|
</packages>
|
|
@ -195,52 +195,49 @@ namespace Emby.Server.Implementations.Configuration
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void DisableMetadataService(string service)
|
public bool SetOptimalValues()
|
||||||
{
|
{
|
||||||
DisableMetadataService(typeof(Movie), Configuration, service);
|
var config = Configuration;
|
||||||
DisableMetadataService(typeof(Episode), Configuration, service);
|
|
||||||
DisableMetadataService(typeof(Series), Configuration, service);
|
|
||||||
DisableMetadataService(typeof(Season), Configuration, service);
|
|
||||||
DisableMetadataService(typeof(MusicArtist), Configuration, service);
|
|
||||||
DisableMetadataService(typeof(MusicAlbum), Configuration, service);
|
|
||||||
DisableMetadataService(typeof(MusicVideo), Configuration, service);
|
|
||||||
DisableMetadataService(typeof(Video), Configuration, service);
|
|
||||||
}
|
|
||||||
|
|
||||||
private void DisableMetadataService(Type type, ServerConfiguration config, string service)
|
var changed = false;
|
||||||
{
|
|
||||||
var options = GetMetadataOptions(type, config);
|
|
||||||
|
|
||||||
if (!options.DisabledMetadataSavers.Contains(service, StringComparer.OrdinalIgnoreCase))
|
if (!config.EnableCaseSensitiveItemIds)
|
||||||
{
|
{
|
||||||
var list = options.DisabledMetadataSavers.ToList();
|
config.EnableCaseSensitiveItemIds = true;
|
||||||
|
changed = true;
|
||||||
list.Add(service);
|
|
||||||
|
|
||||||
options.DisabledMetadataSavers = list.ToArray(list.Count);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private MetadataOptions GetMetadataOptions(Type type, ServerConfiguration config)
|
|
||||||
{
|
|
||||||
var options = config.MetadataOptions
|
|
||||||
.FirstOrDefault(i => string.Equals(i.ItemType, type.Name, StringComparison.OrdinalIgnoreCase));
|
|
||||||
|
|
||||||
if (options == null)
|
|
||||||
{
|
|
||||||
var list = config.MetadataOptions.ToList();
|
|
||||||
|
|
||||||
options = new MetadataOptions
|
|
||||||
{
|
|
||||||
ItemType = type.Name
|
|
||||||
};
|
|
||||||
|
|
||||||
list.Add(options);
|
|
||||||
|
|
||||||
config.MetadataOptions = list.ToArray(list.Count);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return options;
|
if (!config.SkipDeserializationForBasicTypes)
|
||||||
|
{
|
||||||
|
config.SkipDeserializationForBasicTypes = true;
|
||||||
|
changed = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!config.EnableSimpleArtistDetection)
|
||||||
|
{
|
||||||
|
config.EnableSimpleArtistDetection = true;
|
||||||
|
changed = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!config.EnableNormalizedItemByNameIds)
|
||||||
|
{
|
||||||
|
config.EnableNormalizedItemByNameIds = true;
|
||||||
|
changed = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!config.DisableLiveTvChannelUserDataName)
|
||||||
|
{
|
||||||
|
config.DisableLiveTvChannelUserDataName = true;
|
||||||
|
changed = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!config.EnableNewOmdbSupport)
|
||||||
|
{
|
||||||
|
config.EnableNewOmdbSupport = true;
|
||||||
|
changed = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
return changed;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -5298,7 +5298,8 @@ where AncestorIdText not null and ItemValues.Value not null and ItemValues.Type
|
||||||
OfficialRatings = query.OfficialRatings,
|
OfficialRatings = query.OfficialRatings,
|
||||||
GenreIds = query.GenreIds,
|
GenreIds = query.GenreIds,
|
||||||
Genres = query.Genres,
|
Genres = query.Genres,
|
||||||
Years = query.Years
|
Years = query.Years,
|
||||||
|
NameContains = query.NameContains
|
||||||
};
|
};
|
||||||
|
|
||||||
var outerWhereClauses = GetWhereClauses(outerQuery, null);
|
var outerWhereClauses = GetWhereClauses(outerQuery, null);
|
||||||
|
|
|
@ -651,8 +651,8 @@
|
||||||
<Reference Include="SharpCompress, Version=0.18.2.0, Culture=neutral, PublicKeyToken=afb0a02973931d96, processorArchitecture=MSIL">
|
<Reference Include="SharpCompress, Version=0.18.2.0, Culture=neutral, PublicKeyToken=afb0a02973931d96, processorArchitecture=MSIL">
|
||||||
<HintPath>..\packages\SharpCompress.0.18.2\lib\net45\SharpCompress.dll</HintPath>
|
<HintPath>..\packages\SharpCompress.0.18.2\lib\net45\SharpCompress.dll</HintPath>
|
||||||
</Reference>
|
</Reference>
|
||||||
<Reference Include="SimpleInjector, Version=4.0.8.0, Culture=neutral, PublicKeyToken=984cb50dea722e99, processorArchitecture=MSIL">
|
<Reference Include="SimpleInjector, Version=4.0.12.0, Culture=neutral, PublicKeyToken=984cb50dea722e99, processorArchitecture=MSIL">
|
||||||
<HintPath>..\packages\SimpleInjector.4.0.8\lib\net45\SimpleInjector.dll</HintPath>
|
<HintPath>..\packages\SimpleInjector.4.0.12\lib\net45\SimpleInjector.dll</HintPath>
|
||||||
</Reference>
|
</Reference>
|
||||||
<Reference Include="SQLitePCL.pretty, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL">
|
<Reference Include="SQLitePCL.pretty, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL">
|
||||||
<HintPath>..\packages\SQLitePCL.pretty.1.1.0\lib\portable-net45+netcore45+wpa81+wp8\SQLitePCL.pretty.dll</HintPath>
|
<HintPath>..\packages\SQLitePCL.pretty.1.1.0\lib\portable-net45+netcore45+wpa81+wp8\SQLitePCL.pretty.dll</HintPath>
|
||||||
|
|
|
@ -160,7 +160,7 @@ namespace Emby.Server.Implementations.Library.Resolvers.Movies
|
||||||
ProductionYear = video.Year,
|
ProductionYear = video.Year,
|
||||||
Name = parseName ?
|
Name = parseName ?
|
||||||
video.Name :
|
video.Name :
|
||||||
Path.GetFileName(video.Files[0].Path),
|
Path.GetFileNameWithoutExtension(video.Files[0].Path),
|
||||||
AdditionalParts = video.Files.Skip(1).Select(i => i.Path).ToArray(),
|
AdditionalParts = video.Files.Skip(1).Select(i => i.Path).ToArray(),
|
||||||
LocalAlternateVersions = video.AlternateVersions.Select(i => i.Path).ToArray()
|
LocalAlternateVersions = video.AlternateVersions.Select(i => i.Path).ToArray()
|
||||||
};
|
};
|
||||||
|
|
|
@ -99,8 +99,6 @@ namespace Emby.Server.Implementations.Library
|
||||||
|
|
||||||
var terms = GetWords(searchTerm);
|
var terms = GetWords(searchTerm);
|
||||||
|
|
||||||
var hints = new List<Tuple<BaseItem, string, int>>();
|
|
||||||
|
|
||||||
var excludeItemTypes = query.ExcludeItemTypes.ToList();
|
var excludeItemTypes = query.ExcludeItemTypes.ToList();
|
||||||
var includeItemTypes = (query.IncludeItemTypes ?? new string[] { }).ToList();
|
var includeItemTypes = (query.IncludeItemTypes ?? new string[] { }).ToList();
|
||||||
|
|
||||||
|
@ -161,8 +159,15 @@ namespace Emby.Server.Implementations.Library
|
||||||
|
|
||||||
AddIfMissing(excludeItemTypes, typeof(CollectionFolder).Name);
|
AddIfMissing(excludeItemTypes, typeof(CollectionFolder).Name);
|
||||||
AddIfMissing(excludeItemTypes, typeof(Folder).Name);
|
AddIfMissing(excludeItemTypes, typeof(Folder).Name);
|
||||||
|
var mediaTypes = query.MediaTypes.ToList();
|
||||||
|
|
||||||
var mediaItems = _libraryManager.GetItemList(new InternalItemsQuery(user)
|
if (includeItemTypes.Count > 0)
|
||||||
|
{
|
||||||
|
excludeItemTypes.Clear();
|
||||||
|
mediaTypes.Clear();
|
||||||
|
}
|
||||||
|
|
||||||
|
var searchQuery = new InternalItemsQuery(user)
|
||||||
{
|
{
|
||||||
NameContains = searchTerm,
|
NameContains = searchTerm,
|
||||||
ExcludeItemTypes = excludeItemTypes.ToArray(excludeItemTypes.Count),
|
ExcludeItemTypes = excludeItemTypes.ToArray(excludeItemTypes.Count),
|
||||||
|
@ -178,7 +183,7 @@ namespace Emby.Server.Implementations.Library
|
||||||
IsNews = query.IsNews,
|
IsNews = query.IsNews,
|
||||||
IsSeries = query.IsSeries,
|
IsSeries = query.IsSeries,
|
||||||
IsSports = query.IsSports,
|
IsSports = query.IsSports,
|
||||||
MediaTypes = query.MediaTypes,
|
MediaTypes = mediaTypes.ToArray(),
|
||||||
|
|
||||||
DtoOptions = new DtoOptions
|
DtoOptions = new DtoOptions
|
||||||
{
|
{
|
||||||
|
@ -189,17 +194,33 @@ namespace Emby.Server.Implementations.Library
|
||||||
ItemFields.ChannelInfo
|
ItemFields.ChannelInfo
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
};
|
||||||
|
|
||||||
// Add search hints based on item name
|
List<BaseItem> mediaItems;
|
||||||
hints.AddRange(mediaItems.Select(item =>
|
|
||||||
|
if (searchQuery.IncludeItemTypes.Length == 1 && string.Equals(searchQuery.IncludeItemTypes[0], "MusicArtist", StringComparison.OrdinalIgnoreCase))
|
||||||
|
{
|
||||||
|
if (searchQuery.ParentId.HasValue)
|
||||||
|
{
|
||||||
|
searchQuery.AncestorIds = new string[] { searchQuery.ParentId.Value.ToString("N") };
|
||||||
|
}
|
||||||
|
searchQuery.ParentId = null;
|
||||||
|
searchQuery.IncludeItemsByName = true;
|
||||||
|
searchQuery.IncludeItemTypes = new string[] { };
|
||||||
|
mediaItems = _libraryManager.GetArtists(searchQuery).Items.Select(i => i.Item1).ToList();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
mediaItems = _libraryManager.GetItemList(searchQuery);
|
||||||
|
}
|
||||||
|
|
||||||
|
var returnValue = mediaItems.Select(item =>
|
||||||
{
|
{
|
||||||
var index = GetIndex(item.Name, searchTerm, terms);
|
var index = GetIndex(item.Name, searchTerm, terms);
|
||||||
|
|
||||||
return new Tuple<BaseItem, string, int>(item, index.Item1, index.Item2);
|
return new Tuple<BaseItem, string, int>(item, index.Item1, index.Item2);
|
||||||
}));
|
|
||||||
|
|
||||||
var returnValue = hints.Where(i => i.Item3 >= 0).OrderBy(i => i.Item3).ThenBy(i => i.Item1.SortName).Select(i => new SearchHintInfo
|
}).OrderBy(i => i.Item3).ThenBy(i => i.Item1.SortName).Select(i => new SearchHintInfo
|
||||||
{
|
{
|
||||||
Item = i.Item1,
|
Item = i.Item1,
|
||||||
MatchedTerm = i.Item2
|
MatchedTerm = i.Item2
|
||||||
|
|
|
@ -44,7 +44,7 @@ namespace Emby.Server.Implementations.LiveTv.TunerHosts
|
||||||
EnableStreamSharing = true;
|
EnableStreamSharing = true;
|
||||||
SharedStreamIds = new List<string>();
|
SharedStreamIds = new List<string>();
|
||||||
UniqueId = Guid.NewGuid().ToString("N");
|
UniqueId = Guid.NewGuid().ToString("N");
|
||||||
TempFilePath = Path.Combine(appPaths.TranscodingTempPath, UniqueId + ".ts");
|
TempFilePath = Path.Combine(appPaths.GetTranscodingTempPath(), UniqueId + ".ts");
|
||||||
}
|
}
|
||||||
|
|
||||||
public virtual Task Open(CancellationToken openCancellationToken)
|
public virtual Task Open(CancellationToken openCancellationToken)
|
||||||
|
|
|
@ -87,10 +87,5 @@
|
||||||
"User": "User",
|
"User": "User",
|
||||||
"System": "System",
|
"System": "System",
|
||||||
"Application": "Application",
|
"Application": "Application",
|
||||||
"Plugin": "Plugin",
|
"Plugin": "Plugin"
|
||||||
"LabelExit": "Exit",
|
|
||||||
"LabelVisitCommunity": "Visit Community",
|
|
||||||
"LabelBrowseLibrary": "Browse Library",
|
|
||||||
"LabelConfigureServer": "Configure Emby",
|
|
||||||
"LabelRestartServer": "Restart Server"
|
|
||||||
}
|
}
|
|
@ -2,31 +2,31 @@
|
||||||
"Latest": "Leg\u00fajabb",
|
"Latest": "Leg\u00fajabb",
|
||||||
"ValueSpecialEpisodeName": "Special - {0}",
|
"ValueSpecialEpisodeName": "Special - {0}",
|
||||||
"Inherit": "Inherit",
|
"Inherit": "Inherit",
|
||||||
"Books": "Books",
|
"Books": "K\u00f6nyvek",
|
||||||
"Music": "Music",
|
"Music": "Zene",
|
||||||
"Games": "Games",
|
"Games": "J\u00e1t\u00e9kok",
|
||||||
"Photos": "Photos",
|
"Photos": "F\u00e9nyk\u00e9pek",
|
||||||
"MixedContent": "Mixed content",
|
"MixedContent": "Vegyes tartalom",
|
||||||
"MusicVideos": "Music videos",
|
"MusicVideos": "Zenei Vide\u00f3k",
|
||||||
"HomeVideos": "Home videos",
|
"HomeVideos": "H\u00e1zi vide\u00f3k",
|
||||||
"Playlists": "Playlists",
|
"Playlists": "Lej\u00e1tsz\u00e1si list\u00e1k",
|
||||||
"HeaderRecordingGroups": "Recording Groups",
|
"HeaderRecordingGroups": "Recording Groups",
|
||||||
"HeaderContinueWatching": "Vet\u00edt\u00e9s(ek) folytat\u00e1sa",
|
"HeaderContinueWatching": "Vet\u00edt\u00e9s(ek) folytat\u00e1sa",
|
||||||
"HeaderFavoriteArtists": "Favorite Artists",
|
"HeaderFavoriteArtists": "Kedvenc M\u0171v\u00e9szek",
|
||||||
"HeaderFavoriteSongs": "Favorite Songs",
|
"HeaderFavoriteSongs": "Kedvenc Dalok",
|
||||||
"HeaderAlbumArtists": "Album Artists",
|
"HeaderAlbumArtists": "Album El\u0151ad\u00f3k",
|
||||||
"HeaderFavoriteAlbums": "Favorite Albums",
|
"HeaderFavoriteAlbums": "Kedvenc Albumok",
|
||||||
"HeaderFavoriteEpisodes": "Kedvenc Epiz\u00f3dok",
|
"HeaderFavoriteEpisodes": "Kedvenc Epiz\u00f3dok",
|
||||||
"HeaderFavoriteShows": "Kedvenc M\u0171sorok",
|
"HeaderFavoriteShows": "Kedvenc M\u0171sorok",
|
||||||
"HeaderNextUp": "K\u00f6vetkezik",
|
"HeaderNextUp": "K\u00f6vetkezik",
|
||||||
"Favorites": "Favorites",
|
"Favorites": "Kedvencek",
|
||||||
"Collections": "Gy\u0171jtem\u00e9nyek",
|
"Collections": "Gy\u0171jtem\u00e9nyek",
|
||||||
"Channels": "Csatorn\u00e1k",
|
"Channels": "Csatorn\u00e1k",
|
||||||
"Movies": "Movies",
|
"Movies": "Filmek",
|
||||||
"Albums": "Albums",
|
"Albums": "Albumok",
|
||||||
"Artists": "Artists",
|
"Artists": "El\u0151ad\u00f3k",
|
||||||
"Folders": "Folders",
|
"Folders": "K\u00f6nyvt\u00e1rak",
|
||||||
"Songs": "Songs",
|
"Songs": "Dalok",
|
||||||
"TvShows": "TV Shows",
|
"TvShows": "TV Shows",
|
||||||
"Shows": "Shows",
|
"Shows": "Shows",
|
||||||
"Genres": "M\u0171fajok",
|
"Genres": "M\u0171fajok",
|
||||||
|
@ -38,15 +38,15 @@
|
||||||
"ScheduledTaskFailedWithName": "{0} failed",
|
"ScheduledTaskFailedWithName": "{0} failed",
|
||||||
"LabelRunningTimeValue": "Running time: {0}",
|
"LabelRunningTimeValue": "Running time: {0}",
|
||||||
"ScheduledTaskStartedWithName": "{0} started",
|
"ScheduledTaskStartedWithName": "{0} started",
|
||||||
"VersionNumber": "Version {0}",
|
"VersionNumber": "Verzi\u00f3 {0}",
|
||||||
"PluginInstalledWithName": "{0} telep\u00edtve",
|
"PluginInstalledWithName": "{0} telep\u00edtve",
|
||||||
"StartupEmbyServerIsLoading": "Emby Szerver bet\u00f6lt\u0151dik. K\u00e9rj\u00fck, pr\u00f3b\u00e1ld meg \u00fajra k\u00e9s\u0151bb.",
|
"StartupEmbyServerIsLoading": "Emby Szerver bet\u00f6lt\u0151dik. K\u00e9rj\u00fck, pr\u00f3b\u00e1ld meg \u00fajra k\u00e9s\u0151bb.",
|
||||||
"PluginUpdatedWithName": "{0} was updated",
|
"PluginUpdatedWithName": "{0} friss\u00edtve",
|
||||||
"PluginUninstalledWithName": "{0} elt\u00e1vol\u00edtva",
|
"PluginUninstalledWithName": "{0} elt\u00e1vol\u00edtva",
|
||||||
"ItemAddedWithName": "{0} was added to the library",
|
"ItemAddedWithName": "{0} was added to the library",
|
||||||
"ItemRemovedWithName": "{0} was removed from the library",
|
"ItemRemovedWithName": "{0} was removed from the library",
|
||||||
"LabelIpAddressValue": "Ip address: {0}",
|
"LabelIpAddressValue": "Ip c\u00edm: {0}",
|
||||||
"DeviceOnlineWithName": "{0} is connected",
|
"DeviceOnlineWithName": "{0} bel\u00e9pett",
|
||||||
"UserOnlineFromDevice": "{0} is online from {1}",
|
"UserOnlineFromDevice": "{0} is online from {1}",
|
||||||
"ProviderValue": "Provider: {0}",
|
"ProviderValue": "Provider: {0}",
|
||||||
"SubtitlesDownloadedForItem": "Subtitles downloaded for {0}",
|
"SubtitlesDownloadedForItem": "Subtitles downloaded for {0}",
|
||||||
|
|
|
@ -308,6 +308,19 @@ namespace Emby.Server.Implementations.Localization
|
||||||
return value == null ? (int?)null : value.Value;
|
return value == null ? (int?)null : value.Value;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public bool HasUnicodeCategory(string value, UnicodeCategory category)
|
||||||
|
{
|
||||||
|
foreach (var chr in value)
|
||||||
|
{
|
||||||
|
if (char.GetUnicodeCategory(chr) == category)
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
public string GetLocalizedString(string phrase)
|
public string GetLocalizedString(string phrase)
|
||||||
{
|
{
|
||||||
return GetLocalizedString(phrase, _configurationManager.Configuration.UICulture);
|
return GetLocalizedString(phrase, _configurationManager.Configuration.UICulture);
|
||||||
|
|
|
@ -206,6 +206,23 @@ namespace Emby.Server.Implementations
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public string GetTranscodingTempPath()
|
||||||
|
{
|
||||||
|
var path = TranscodingTempPath;
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
Directory.CreateDirectory(path);
|
||||||
|
return path;
|
||||||
|
}
|
||||||
|
catch
|
||||||
|
{
|
||||||
|
path = Path.Combine(ProgramDataPath, "transcoding-temp");
|
||||||
|
Directory.CreateDirectory(path);
|
||||||
|
return path;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Gets the game genre path.
|
/// Gets the game genre path.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
<package id="Emby.XmlTv" version="1.0.10" targetFramework="net46" />
|
<package id="Emby.XmlTv" version="1.0.10" targetFramework="net46" />
|
||||||
<package id="ServiceStack.Text" version="4.5.8" targetFramework="net46" />
|
<package id="ServiceStack.Text" version="4.5.8" targetFramework="net46" />
|
||||||
<package id="SharpCompress" version="0.18.2" targetFramework="net46" />
|
<package id="SharpCompress" version="0.18.2" targetFramework="net46" />
|
||||||
<package id="SimpleInjector" version="4.0.8" targetFramework="net46" />
|
<package id="SimpleInjector" version="4.0.12" targetFramework="net46" />
|
||||||
<package id="SQLitePCL.pretty" version="1.1.0" targetFramework="portable45-net45+win8" />
|
<package id="SQLitePCL.pretty" version="1.1.0" targetFramework="portable45-net45+win8" />
|
||||||
<package id="SQLitePCLRaw.core" version="1.1.8" targetFramework="net46" />
|
<package id="SQLitePCLRaw.core" version="1.1.8" targetFramework="net46" />
|
||||||
</packages>
|
</packages>
|
|
@ -134,8 +134,6 @@ namespace MediaBrowser.Api
|
||||||
|
|
||||||
public void Post(AutoSetMetadataOptions request)
|
public void Post(AutoSetMetadataOptions request)
|
||||||
{
|
{
|
||||||
_configurationManager.DisableMetadataService("Emby Xml");
|
|
||||||
_configurationManager.SaveConfiguration();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
|
|
@ -63,7 +63,7 @@ namespace MediaBrowser.Api
|
||||||
public void Post(ReportStartupWizardComplete request)
|
public void Post(ReportStartupWizardComplete request)
|
||||||
{
|
{
|
||||||
_config.Configuration.IsStartupWizardCompleted = true;
|
_config.Configuration.IsStartupWizardCompleted = true;
|
||||||
SetWizardFinishValues(_config.Configuration);
|
_config.SetOptimalValues();
|
||||||
_config.SaveConfiguration();
|
_config.SaveConfiguration();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -87,16 +87,6 @@ namespace MediaBrowser.Api
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void SetWizardFinishValues(ServerConfiguration config)
|
|
||||||
{
|
|
||||||
config.EnableCaseSensitiveItemIds = true;
|
|
||||||
config.SkipDeserializationForBasicTypes = true;
|
|
||||||
config.EnableSimpleArtistDetection = true;
|
|
||||||
config.EnableNormalizedItemByNameIds = true;
|
|
||||||
config.DisableLiveTvChannelUserDataName = true;
|
|
||||||
config.EnableNewOmdbSupport = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void Post(UpdateStartupConfiguration request)
|
public void Post(UpdateStartupConfiguration request)
|
||||||
{
|
{
|
||||||
_config.Configuration.UICulture = request.UICulture;
|
_config.Configuration.UICulture = request.UICulture;
|
||||||
|
|
|
@ -20,10 +20,6 @@ namespace MediaBrowser.Controller.Configuration
|
||||||
/// <value>The configuration.</value>
|
/// <value>The configuration.</value>
|
||||||
ServerConfiguration Configuration { get; }
|
ServerConfiguration Configuration { get; }
|
||||||
|
|
||||||
/// <summary>
|
bool SetOptimalValues();
|
||||||
/// Sets the preferred metadata service.
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="service">The service.</param>
|
|
||||||
void DisableMetadataService(string service);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1987,6 +1987,10 @@ namespace MediaBrowser.Controller.Entities
|
||||||
|
|
||||||
image.Path = file.FullName;
|
image.Path = file.FullName;
|
||||||
image.DateModified = imageInfo.DateModified;
|
image.DateModified = imageInfo.DateModified;
|
||||||
|
|
||||||
|
// reset these values
|
||||||
|
image.Width = 0;
|
||||||
|
image.Height = 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2137,6 +2141,7 @@ namespace MediaBrowser.Controller.Entities
|
||||||
|
|
||||||
var newImageList = new List<FileSystemMetadata>();
|
var newImageList = new List<FileSystemMetadata>();
|
||||||
var imageAdded = false;
|
var imageAdded = false;
|
||||||
|
var imageUpdated = false;
|
||||||
|
|
||||||
foreach (var newImage in images)
|
foreach (var newImage in images)
|
||||||
{
|
{
|
||||||
|
@ -2157,7 +2162,17 @@ namespace MediaBrowser.Controller.Entities
|
||||||
{
|
{
|
||||||
if (existing.IsLocalFile)
|
if (existing.IsLocalFile)
|
||||||
{
|
{
|
||||||
existing.DateModified = FileSystem.GetLastWriteTimeUtc(newImage);
|
var newDateModified = FileSystem.GetLastWriteTimeUtc(newImage);
|
||||||
|
|
||||||
|
// If date changed then we need to reset saved image dimensions
|
||||||
|
if (existing.DateModified != newDateModified && (existing.Width > 0 || existing.Height > 0))
|
||||||
|
{
|
||||||
|
existing.Width = 0;
|
||||||
|
existing.Height = 0;
|
||||||
|
imageUpdated = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
existing.DateModified = newDateModified;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -2190,7 +2205,7 @@ namespace MediaBrowser.Controller.Entities
|
||||||
ImageInfos = newList;
|
ImageInfos = newList;
|
||||||
}
|
}
|
||||||
|
|
||||||
return newImageList.Count > 0;
|
return imageUpdated || newImageList.Count > 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
private ItemImageInfo GetImageInfo(FileSystemMetadata file, ImageType type)
|
private ItemImageInfo GetImageInfo(FileSystemMetadata file, ImageType type)
|
||||||
|
|
|
@ -108,5 +108,7 @@ namespace MediaBrowser.Controller
|
||||||
string InternalMetadataPath { get; }
|
string InternalMetadataPath { get; }
|
||||||
|
|
||||||
string ArtistsPath { get; }
|
string ArtistsPath { get; }
|
||||||
|
|
||||||
|
string GetTranscodingTempPath();
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -1,9 +0,0 @@
|
||||||
using System;
|
|
||||||
|
|
||||||
namespace MediaBrowser.Model.Dlna
|
|
||||||
{
|
|
||||||
public class PlaybackException : Exception
|
|
||||||
{
|
|
||||||
public PlaybackErrorCode ErrorCode { get; set;}
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -965,15 +965,6 @@ namespace MediaBrowser.Model.Dlna
|
||||||
return new Tuple<PlayMethod?, List<TranscodeReason>>(PlayMethod.DirectStream, new List<TranscodeReason>());
|
return new Tuple<PlayMethod?, List<TranscodeReason>>(PlayMethod.DirectStream, new List<TranscodeReason>());
|
||||||
}
|
}
|
||||||
|
|
||||||
if (videoStream == null)
|
|
||||||
{
|
|
||||||
_logger.Info("Profile: {0}, Cannot direct stream with no known video stream. Path: {1}",
|
|
||||||
profile.Name ?? "Unknown Profile",
|
|
||||||
mediaSource.Path ?? "Unknown path");
|
|
||||||
|
|
||||||
return new Tuple<PlayMethod?, List<TranscodeReason>>(null, new List<TranscodeReason> { TranscodeReason.UnknownVideoStreamInfo });
|
|
||||||
}
|
|
||||||
|
|
||||||
// See if it can be direct played
|
// See if it can be direct played
|
||||||
DirectPlayProfile directPlay = null;
|
DirectPlayProfile directPlay = null;
|
||||||
foreach (DirectPlayProfile i in profile.DirectPlayProfiles)
|
foreach (DirectPlayProfile i in profile.DirectPlayProfiles)
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using MediaBrowser.Model.Entities;
|
using MediaBrowser.Model.Entities;
|
||||||
|
using System.Globalization;
|
||||||
|
|
||||||
namespace MediaBrowser.Model.Globalization
|
namespace MediaBrowser.Model.Globalization
|
||||||
{
|
{
|
||||||
|
@ -54,5 +55,7 @@ namespace MediaBrowser.Model.Globalization
|
||||||
string RemoveDiacritics(string text);
|
string RemoveDiacritics(string text);
|
||||||
|
|
||||||
string NormalizeFormKD(string text);
|
string NormalizeFormKD(string text);
|
||||||
|
|
||||||
|
bool HasUnicodeCategory(string value, UnicodeCategory category);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -98,7 +98,6 @@
|
||||||
<Compile Include="Dlna\ResponseProfile.cs" />
|
<Compile Include="Dlna\ResponseProfile.cs" />
|
||||||
<Compile Include="Dlna\StreamInfoSorter.cs" />
|
<Compile Include="Dlna\StreamInfoSorter.cs" />
|
||||||
<Compile Include="Dlna\PlaybackErrorCode.cs" />
|
<Compile Include="Dlna\PlaybackErrorCode.cs" />
|
||||||
<Compile Include="Dlna\PlaybackException.cs" />
|
|
||||||
<Compile Include="Dlna\ResolutionConfiguration.cs" />
|
<Compile Include="Dlna\ResolutionConfiguration.cs" />
|
||||||
<Compile Include="Dlna\ResolutionNormalizer.cs" />
|
<Compile Include="Dlna\ResolutionNormalizer.cs" />
|
||||||
<Compile Include="Dlna\ResolutionOptions.cs" />
|
<Compile Include="Dlna\ResolutionOptions.cs" />
|
||||||
|
|
|
@ -412,7 +412,18 @@ namespace MediaBrowser.Providers.Manager
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
currentImage.DateModified = _fileSystem.GetLastWriteTimeUtc(image.FileInfo);
|
|
||||||
|
var newDateModified = _fileSystem.GetLastWriteTimeUtc(image.FileInfo);
|
||||||
|
|
||||||
|
// If date changed then we need to reset saved image dimensions
|
||||||
|
if (currentImage.DateModified != newDateModified && (currentImage.Width > 0 || currentImage.Height > 0))
|
||||||
|
{
|
||||||
|
currentImage.Width = 0;
|
||||||
|
currentImage.Height = 0;
|
||||||
|
changed = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
currentImage.DateModified = newDateModified;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
|
|
@ -92,24 +92,34 @@ namespace MediaBrowser.Providers.MediaInfo
|
||||||
|
|
||||||
private string GetAudioImagePath(Audio item)
|
private string GetAudioImagePath(Audio item)
|
||||||
{
|
{
|
||||||
var filename = item.Album ?? string.Empty;
|
string filename;
|
||||||
filename += string.Join(",", item.Artists);
|
|
||||||
|
|
||||||
if (!string.IsNullOrWhiteSpace(item.Album))
|
if (item.GetType() == typeof(Audio))
|
||||||
{
|
{
|
||||||
filename += "_" + item.Album;
|
filename = item.Album ?? string.Empty;
|
||||||
}
|
filename += string.Join(",", item.Artists);
|
||||||
else if (!string.IsNullOrWhiteSpace(item.Name))
|
|
||||||
{
|
if (!string.IsNullOrWhiteSpace(item.Album))
|
||||||
filename += "_" + item.Name;
|
{
|
||||||
|
filename += "_" + item.Album;
|
||||||
|
}
|
||||||
|
else if (!string.IsNullOrWhiteSpace(item.Name))
|
||||||
|
{
|
||||||
|
filename += "_" + item.Name;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
filename += "_" + item.Id.ToString("N");
|
||||||
|
}
|
||||||
|
|
||||||
|
filename = filename.GetMD5() + ".jpg";
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
filename += "_" + item.Id.ToString("N");
|
// If it's an audio book or audio podcast, allow unique image per item
|
||||||
|
filename = item.Id.ToString("N") + ".jpg";
|
||||||
}
|
}
|
||||||
|
|
||||||
filename = filename.GetMD5() + ".jpg";
|
|
||||||
|
|
||||||
var prefix = filename.Substring(0, 1);
|
var prefix = filename.Substring(0, 1);
|
||||||
|
|
||||||
return Path.Combine(AudioImagesPath, prefix, filename);
|
return Path.Combine(AudioImagesPath, prefix, filename);
|
||||||
|
|
|
@ -163,7 +163,11 @@ namespace MediaBrowser.Providers.MediaInfo
|
||||||
|
|
||||||
private void FetchShortcutInfo(Video video)
|
private void FetchShortcutInfo(Video video)
|
||||||
{
|
{
|
||||||
video.ShortcutPath = _fileSystem.ReadAllText(video.Path);
|
video.ShortcutPath = _fileSystem.ReadAllText(video.Path)
|
||||||
|
.Replace("\t", string.Empty)
|
||||||
|
.Replace("\r", string.Empty)
|
||||||
|
.Replace("\n", string.Empty)
|
||||||
|
.Trim();
|
||||||
}
|
}
|
||||||
|
|
||||||
public Task<ItemUpdateType> FetchAudioInfo<T>(T item, CancellationToken cancellationToken)
|
public Task<ItemUpdateType> FetchAudioInfo<T>(T item, CancellationToken cancellationToken)
|
||||||
|
|
|
@ -9,6 +9,7 @@ using MediaBrowser.Model.IO;
|
||||||
using MediaBrowser.Model.Logging;
|
using MediaBrowser.Model.Logging;
|
||||||
using Emby.Drawing.Skia;
|
using Emby.Drawing.Skia;
|
||||||
using MediaBrowser.Model.System;
|
using MediaBrowser.Model.System;
|
||||||
|
using MediaBrowser.Model.Globalization;
|
||||||
|
|
||||||
namespace MediaBrowser.Server.Startup.Common
|
namespace MediaBrowser.Server.Startup.Common
|
||||||
{
|
{
|
||||||
|
@ -20,13 +21,14 @@ namespace MediaBrowser.Server.Startup.Common
|
||||||
StartupOptions startupOptions,
|
StartupOptions startupOptions,
|
||||||
Func<IHttpClient> httpClient,
|
Func<IHttpClient> httpClient,
|
||||||
IApplicationPaths appPaths,
|
IApplicationPaths appPaths,
|
||||||
IEnvironmentInfo environment)
|
IEnvironmentInfo environment,
|
||||||
|
ILocalizationManager localizationManager)
|
||||||
{
|
{
|
||||||
if (!startupOptions.ContainsOption("-enablegdi"))
|
if (!startupOptions.ContainsOption("-enablegdi"))
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
return new SkiaEncoder(logManager.GetLogger("Skia"), appPaths, httpClient, fileSystem);
|
return new SkiaEncoder(logManager.GetLogger("Skia"), appPaths, httpClient, fileSystem, localizationManager);
|
||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
{
|
{
|
||||||
|
|
|
@ -58,11 +58,11 @@
|
||||||
<Reference Include="SharpCompress, Version=0.18.2.0, Culture=neutral, PublicKeyToken=afb0a02973931d96, processorArchitecture=MSIL">
|
<Reference Include="SharpCompress, Version=0.18.2.0, Culture=neutral, PublicKeyToken=afb0a02973931d96, processorArchitecture=MSIL">
|
||||||
<HintPath>..\packages\SharpCompress.0.18.2\lib\net45\SharpCompress.dll</HintPath>
|
<HintPath>..\packages\SharpCompress.0.18.2\lib\net45\SharpCompress.dll</HintPath>
|
||||||
</Reference>
|
</Reference>
|
||||||
<Reference Include="SimpleInjector, Version=4.0.8.0, Culture=neutral, PublicKeyToken=984cb50dea722e99, processorArchitecture=MSIL">
|
<Reference Include="SimpleInjector, Version=4.0.12.0, Culture=neutral, PublicKeyToken=984cb50dea722e99, processorArchitecture=MSIL">
|
||||||
<HintPath>..\packages\SimpleInjector.4.0.8\lib\net45\SimpleInjector.dll</HintPath>
|
<HintPath>..\packages\SimpleInjector.4.0.12\lib\net45\SimpleInjector.dll</HintPath>
|
||||||
</Reference>
|
</Reference>
|
||||||
<Reference Include="SkiaSharp, Version=1.58.0.0, Culture=neutral, PublicKeyToken=0738eb9f132ed756, processorArchitecture=MSIL">
|
<Reference Include="SkiaSharp, Version=1.59.0.0, Culture=neutral, PublicKeyToken=0738eb9f132ed756, processorArchitecture=MSIL">
|
||||||
<HintPath>..\packages\SkiaSharp.1.58.1\lib\net45\SkiaSharp.dll</HintPath>
|
<HintPath>..\packages\SkiaSharp.1.59.2\lib\net45\SkiaSharp.dll</HintPath>
|
||||||
</Reference>
|
</Reference>
|
||||||
<Reference Include="SQLitePCLRaw.core, Version=1.0.0.0, Culture=neutral, PublicKeyToken=1488e028ca7ab535, processorArchitecture=MSIL">
|
<Reference Include="SQLitePCLRaw.core, Version=1.0.0.0, Culture=neutral, PublicKeyToken=1488e028ca7ab535, processorArchitecture=MSIL">
|
||||||
<HintPath>..\packages\SQLitePCLRaw.core.1.1.8\lib\net45\SQLitePCLRaw.core.dll</HintPath>
|
<HintPath>..\packages\SQLitePCLRaw.core.1.1.8\lib\net45\SQLitePCLRaw.core.dll</HintPath>
|
||||||
|
|
|
@ -127,7 +127,7 @@ namespace MediaBrowser.Server.Mono
|
||||||
|
|
||||||
Task.WaitAll(task);
|
Task.WaitAll(task);
|
||||||
|
|
||||||
appHost.ImageProcessor.ImageEncoder = ImageEncoderHelper.GetImageEncoder(_logger, logManager, fileSystem, options, () => appHost.HttpClient, appPaths, environmentInfo);
|
appHost.ImageProcessor.ImageEncoder = ImageEncoderHelper.GetImageEncoder(_logger, logManager, fileSystem, options, () => appHost.HttpClient, appPaths, environmentInfo, appHost.LocalizationManager);
|
||||||
|
|
||||||
Console.WriteLine("Running startup tasks");
|
Console.WriteLine("Running startup tasks");
|
||||||
|
|
||||||
|
|
|
@ -3,8 +3,8 @@
|
||||||
<package id="Mono.Posix" version="4.0.0.0" targetFramework="net45" />
|
<package id="Mono.Posix" version="4.0.0.0" targetFramework="net45" />
|
||||||
<package id="ServiceStack.Text" version="4.5.8" targetFramework="net46" />
|
<package id="ServiceStack.Text" version="4.5.8" targetFramework="net46" />
|
||||||
<package id="SharpCompress" version="0.18.2" targetFramework="net46" />
|
<package id="SharpCompress" version="0.18.2" targetFramework="net46" />
|
||||||
<package id="SimpleInjector" version="4.0.8" targetFramework="net46" />
|
<package id="SimpleInjector" version="4.0.12" targetFramework="net46" />
|
||||||
<package id="SkiaSharp" version="1.58.1" targetFramework="net46" />
|
<package id="SkiaSharp" version="1.59.2" targetFramework="net46" />
|
||||||
<package id="SQLitePCLRaw.core" version="1.1.8" targetFramework="net46" />
|
<package id="SQLitePCLRaw.core" version="1.1.8" targetFramework="net46" />
|
||||||
<package id="SQLitePCLRaw.provider.sqlite3.net45" version="1.1.8" targetFramework="net46" />
|
<package id="SQLitePCLRaw.provider.sqlite3.net45" version="1.1.8" targetFramework="net46" />
|
||||||
</packages>
|
</packages>
|
|
@ -7,6 +7,7 @@ using MediaBrowser.Common.Net;
|
||||||
using MediaBrowser.Controller.Drawing;
|
using MediaBrowser.Controller.Drawing;
|
||||||
using MediaBrowser.Model.IO;
|
using MediaBrowser.Model.IO;
|
||||||
using MediaBrowser.Model.Logging;
|
using MediaBrowser.Model.Logging;
|
||||||
|
using MediaBrowser.Model.Globalization;
|
||||||
|
|
||||||
namespace MediaBrowser.Server.Startup.Common
|
namespace MediaBrowser.Server.Startup.Common
|
||||||
{
|
{
|
||||||
|
@ -17,11 +18,12 @@ namespace MediaBrowser.Server.Startup.Common
|
||||||
IFileSystem fileSystem,
|
IFileSystem fileSystem,
|
||||||
StartupOptions startupOptions,
|
StartupOptions startupOptions,
|
||||||
Func<IHttpClient> httpClient,
|
Func<IHttpClient> httpClient,
|
||||||
IApplicationPaths appPaths)
|
IApplicationPaths appPaths,
|
||||||
|
ILocalizationManager localizationManager)
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
return new SkiaEncoder(logManager.GetLogger("Skia"), appPaths, httpClient, fileSystem);
|
return new SkiaEncoder(logManager.GetLogger("Skia"), appPaths, httpClient, fileSystem, localizationManager);
|
||||||
}
|
}
|
||||||
catch
|
catch
|
||||||
{
|
{
|
||||||
|
|
|
@ -304,6 +304,19 @@ namespace MediaBrowser.ServerApplication
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static string UpdatePackageFileName
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
if (Environment.Is64BitOperatingSystem)
|
||||||
|
{
|
||||||
|
return "embyserver-win-x64-{version}.zip";
|
||||||
|
}
|
||||||
|
|
||||||
|
return "embyserver-win-x86-{version}.zip";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Runs the application.
|
/// Runs the application.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
@ -324,7 +337,7 @@ namespace MediaBrowser.ServerApplication
|
||||||
options,
|
options,
|
||||||
fileSystem,
|
fileSystem,
|
||||||
new PowerManagement(),
|
new PowerManagement(),
|
||||||
"emby.windows.zip",
|
UpdatePackageFileName,
|
||||||
environmentInfo,
|
environmentInfo,
|
||||||
new NullImageEncoder(),
|
new NullImageEncoder(),
|
||||||
new SystemEvents(logManager.GetLogger("SystemEvents")),
|
new SystemEvents(logManager.GetLogger("SystemEvents")),
|
||||||
|
@ -355,7 +368,7 @@ namespace MediaBrowser.ServerApplication
|
||||||
}
|
}
|
||||||
|
|
||||||
// set image encoder here
|
// set image encoder here
|
||||||
appHost.ImageProcessor.ImageEncoder = ImageEncoderHelper.GetImageEncoder(_logger, logManager, fileSystem, options, () => appHost.HttpClient, appPaths);
|
appHost.ImageProcessor.ImageEncoder = ImageEncoderHelper.GetImageEncoder(_logger, logManager, fileSystem, options, () => appHost.HttpClient, appPaths, appHost.LocalizationManager);
|
||||||
|
|
||||||
task = task.ContinueWith(new Action<Task>(a => appHost.RunStartupTasks()), TaskContinuationOptions.OnlyOnRanToCompletion | TaskContinuationOptions.AttachedToParent);
|
task = task.ContinueWith(new Action<Task>(a => appHost.RunStartupTasks()), TaskContinuationOptions.OnlyOnRanToCompletion | TaskContinuationOptions.AttachedToParent);
|
||||||
|
|
||||||
|
|
|
@ -80,11 +80,11 @@
|
||||||
<Reference Include="SharpCompress, Version=0.18.2.0, Culture=neutral, PublicKeyToken=afb0a02973931d96, processorArchitecture=MSIL">
|
<Reference Include="SharpCompress, Version=0.18.2.0, Culture=neutral, PublicKeyToken=afb0a02973931d96, processorArchitecture=MSIL">
|
||||||
<HintPath>..\packages\SharpCompress.0.18.2\lib\net45\SharpCompress.dll</HintPath>
|
<HintPath>..\packages\SharpCompress.0.18.2\lib\net45\SharpCompress.dll</HintPath>
|
||||||
</Reference>
|
</Reference>
|
||||||
<Reference Include="SimpleInjector, Version=4.0.8.0, Culture=neutral, PublicKeyToken=984cb50dea722e99, processorArchitecture=MSIL">
|
<Reference Include="SimpleInjector, Version=4.0.12.0, Culture=neutral, PublicKeyToken=984cb50dea722e99, processorArchitecture=MSIL">
|
||||||
<HintPath>..\packages\SimpleInjector.4.0.8\lib\net45\SimpleInjector.dll</HintPath>
|
<HintPath>..\packages\SimpleInjector.4.0.12\lib\net45\SimpleInjector.dll</HintPath>
|
||||||
</Reference>
|
</Reference>
|
||||||
<Reference Include="SkiaSharp, Version=1.58.0.0, Culture=neutral, PublicKeyToken=0738eb9f132ed756, processorArchitecture=MSIL">
|
<Reference Include="SkiaSharp, Version=1.59.0.0, Culture=neutral, PublicKeyToken=0738eb9f132ed756, processorArchitecture=MSIL">
|
||||||
<HintPath>..\packages\SkiaSharp.1.58.1\lib\net45\SkiaSharp.dll</HintPath>
|
<HintPath>..\packages\SkiaSharp.1.59.2\lib\net45\SkiaSharp.dll</HintPath>
|
||||||
</Reference>
|
</Reference>
|
||||||
<Reference Include="SQLitePCLRaw.core, Version=1.0.0.0, Culture=neutral, PublicKeyToken=1488e028ca7ab535, processorArchitecture=MSIL">
|
<Reference Include="SQLitePCLRaw.core, Version=1.0.0.0, Culture=neutral, PublicKeyToken=1488e028ca7ab535, processorArchitecture=MSIL">
|
||||||
<HintPath>..\packages\SQLitePCLRaw.core.1.1.8\lib\net45\SQLitePCLRaw.core.dll</HintPath>
|
<HintPath>..\packages\SQLitePCLRaw.core.1.1.8\lib\net45\SQLitePCLRaw.core.dll</HintPath>
|
||||||
|
@ -161,11 +161,11 @@
|
||||||
</EmbeddedResource>
|
</EmbeddedResource>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<Content Include="..\packages\SkiaSharp.1.58.1\runtimes\win7-x64\native\libSkiaSharp.dll">
|
<Content Include="..\packages\SkiaSharp.1.59.2\runtimes\win7-x64\native\libSkiaSharp.dll">
|
||||||
<Link>x64\libSkiaSharp.dll</Link>
|
<Link>x64\libSkiaSharp.dll</Link>
|
||||||
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
||||||
</Content>
|
</Content>
|
||||||
<Content Include="..\packages\SkiaSharp.1.58.1\runtimes\win7-x86\native\libSkiaSharp.dll">
|
<Content Include="..\packages\SkiaSharp.1.59.2\runtimes\win7-x86\native\libSkiaSharp.dll">
|
||||||
<Link>x86\libSkiaSharp.dll</Link>
|
<Link>x86\libSkiaSharp.dll</Link>
|
||||||
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
||||||
</Content>
|
</Content>
|
||||||
|
|
|
@ -144,12 +144,12 @@ namespace MediaBrowser.ServerApplication
|
||||||
{
|
{
|
||||||
_uiCulture = _configurationManager.Configuration.UICulture;
|
_uiCulture = _configurationManager.Configuration.UICulture;
|
||||||
|
|
||||||
cmdExit.Text = _localization.GetLocalizedString("LabelExit");
|
cmdExit.Text = "Exit";
|
||||||
cmdCommunity.Text = _localization.GetLocalizedString("LabelVisitCommunity");
|
cmdCommunity.Text = "Visit Emby Community";
|
||||||
cmdPremiere.Text = _localization.GetLocalizedString("Emby Premiere");
|
cmdPremiere.Text = "Emby Premiere";
|
||||||
cmdBrowse.Text = _localization.GetLocalizedString("LabelBrowseLibrary");
|
cmdBrowse.Text = "Browse Library";
|
||||||
cmdConfigure.Text = _localization.GetLocalizedString("LabelConfigureServer");
|
cmdConfigure.Text = "Configure Emby Server";
|
||||||
cmdRestart.Text = _localization.GetLocalizedString("LabelRestartServer");
|
cmdRestart.Text = "Restart Emby Server";
|
||||||
}
|
}
|
||||||
|
|
||||||
private string _uiCulture;
|
private string _uiCulture;
|
||||||
|
|
|
@ -2,8 +2,8 @@
|
||||||
<packages>
|
<packages>
|
||||||
<package id="ServiceStack.Text" version="4.5.8" targetFramework="net462" />
|
<package id="ServiceStack.Text" version="4.5.8" targetFramework="net462" />
|
||||||
<package id="SharpCompress" version="0.18.2" targetFramework="net462" />
|
<package id="SharpCompress" version="0.18.2" targetFramework="net462" />
|
||||||
<package id="SimpleInjector" version="4.0.8" targetFramework="net462" />
|
<package id="SimpleInjector" version="4.0.12" targetFramework="net462" />
|
||||||
<package id="SkiaSharp" version="1.58.1" targetFramework="net462" />
|
<package id="SkiaSharp" version="1.59.2" targetFramework="net462" />
|
||||||
<package id="SQLitePCLRaw.core" version="1.1.8" targetFramework="net462" />
|
<package id="SQLitePCLRaw.core" version="1.1.8" targetFramework="net462" />
|
||||||
<package id="SQLitePCLRaw.provider.sqlite3.net45" version="1.1.8" targetFramework="net462" />
|
<package id="SQLitePCLRaw.provider.sqlite3.net45" version="1.1.8" targetFramework="net462" />
|
||||||
</packages>
|
</packages>
|
Loading…
Reference in a new issue