fix roku thumbnails
This commit is contained in:
parent
9189b551ec
commit
064b5e82e4
|
@ -1894,12 +1894,12 @@ namespace MediaBrowser.Controller.Entities
|
||||||
return video.RefreshMetadata(newOptions, cancellationToken);
|
return video.RefreshMetadata(newOptions, cancellationToken);
|
||||||
}
|
}
|
||||||
|
|
||||||
public string GetEtag()
|
public string GetEtag(User user)
|
||||||
{
|
{
|
||||||
return string.Join("|", GetEtagValues().ToArray()).GetMD5().ToString("N");
|
return string.Join("|", GetEtagValues(user).ToArray()).GetMD5().ToString("N");
|
||||||
}
|
}
|
||||||
|
|
||||||
protected virtual List<string> GetEtagValues()
|
protected virtual List<string> GetEtagValues(User user)
|
||||||
{
|
{
|
||||||
return new List<string>
|
return new List<string>
|
||||||
{
|
{
|
||||||
|
|
|
@ -2,40 +2,78 @@
|
||||||
using MoreLinq;
|
using MoreLinq;
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
|
using System.Globalization;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
|
|
||||||
namespace MediaBrowser.Controller.Library
|
namespace MediaBrowser.Controller.Library
|
||||||
{
|
{
|
||||||
public static class NameExtensions
|
public static class NameExtensions
|
||||||
{
|
{
|
||||||
public static bool AreEqual(string name1, string name2)
|
public static bool AreEqual(string x, string y)
|
||||||
{
|
{
|
||||||
name1 = NormalizeForComparison(name1);
|
if (string.IsNullOrWhiteSpace(x) && string.IsNullOrWhiteSpace(y))
|
||||||
name2 = NormalizeForComparison(name2);
|
{
|
||||||
|
return true;
|
||||||
return string.Equals(name1, name2, StringComparison.OrdinalIgnoreCase);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static bool EqualsAny(IEnumerable<string> names, string name)
|
return string.Compare(x, y, CultureInfo.InvariantCulture, CompareOptions.IgnoreCase | CompareOptions.IgnoreNonSpace) == 0;
|
||||||
{
|
}
|
||||||
name = NormalizeForComparison(name);
|
|
||||||
|
|
||||||
return names.Any(i => string.Equals(NormalizeForComparison(i), name, StringComparison.OrdinalIgnoreCase));
|
public static bool EqualsAny(IEnumerable<string> names, string x)
|
||||||
|
{
|
||||||
|
x = NormalizeForComparison(x);
|
||||||
|
|
||||||
|
return names.Any(y => string.Compare(x, y, CultureInfo.InvariantCulture, CompareOptions.IgnoreCase | CompareOptions.IgnoreNonSpace) == 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
private static string NormalizeForComparison(string name)
|
private static string NormalizeForComparison(string name)
|
||||||
{
|
{
|
||||||
if (string.IsNullOrWhiteSpace(name))
|
if (name == null)
|
||||||
{
|
{
|
||||||
return string.Empty;
|
return string.Empty;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return name;
|
||||||
|
//return name.RemoveDiacritics();
|
||||||
|
}
|
||||||
|
|
||||||
|
private static string RemoveDiacritics(string name)
|
||||||
|
{
|
||||||
|
if (name == null)
|
||||||
|
{
|
||||||
|
return string.Empty;
|
||||||
|
}
|
||||||
|
|
||||||
|
//return name;
|
||||||
return name.RemoveDiacritics();
|
return name.RemoveDiacritics();
|
||||||
}
|
}
|
||||||
|
|
||||||
public static IEnumerable<string> DistinctNames(this IEnumerable<string> names)
|
public static IEnumerable<string> DistinctNames(this IEnumerable<string> names)
|
||||||
{
|
{
|
||||||
return names.DistinctBy(NormalizeForComparison, StringComparer.OrdinalIgnoreCase);
|
return names.DistinctBy(RemoveDiacritics, StringComparer.OrdinalIgnoreCase);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
class TextComparer : IComparer<string>, IEqualityComparer<string>
|
||||||
|
{
|
||||||
|
public int Compare(string x, string y)
|
||||||
|
{
|
||||||
|
if (string.IsNullOrWhiteSpace(x) && string.IsNullOrWhiteSpace(y))
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
return string.Compare(x, y, CultureInfo.InvariantCulture, CompareOptions.IgnoreCase | CompareOptions.IgnoreNonSpace);
|
||||||
|
}
|
||||||
|
|
||||||
|
public bool Equals(string x, string y)
|
||||||
|
{
|
||||||
|
return Compare(x, y) == 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int GetHashCode(string obj)
|
||||||
|
{
|
||||||
|
return (obj ?? string.Empty).GetHashCode();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -513,8 +513,6 @@ namespace MediaBrowser.MediaEncoding.Encoder
|
||||||
|
|
||||||
var exitCode = ranToCompletion ? processWrapper.ExitCode ?? 0 : -1;
|
var exitCode = ranToCompletion ? processWrapper.ExitCode ?? 0 : -1;
|
||||||
|
|
||||||
process.Dispose();
|
|
||||||
|
|
||||||
if (exitCode == -1 || memoryStream.Length == 0)
|
if (exitCode == -1 || memoryStream.Length == 0)
|
||||||
{
|
{
|
||||||
memoryStream.Dispose();
|
memoryStream.Dispose();
|
||||||
|
@ -594,7 +592,7 @@ namespace MediaBrowser.MediaEncoding.Encoder
|
||||||
|
|
||||||
await resourcePool.WaitAsync(cancellationToken).ConfigureAwait(false);
|
await resourcePool.WaitAsync(cancellationToken).ConfigureAwait(false);
|
||||||
|
|
||||||
bool ranToCompletion;
|
bool ranToCompletion = false;
|
||||||
|
|
||||||
var processWrapper = new ProcessWrapper(process, this);
|
var processWrapper = new ProcessWrapper(process, this);
|
||||||
|
|
||||||
|
@ -609,19 +607,23 @@ namespace MediaBrowser.MediaEncoding.Encoder
|
||||||
bool isResponsive = true;
|
bool isResponsive = true;
|
||||||
int lastCount = 0;
|
int lastCount = 0;
|
||||||
|
|
||||||
while (isResponsive && !process.WaitForExit(30000))
|
while (isResponsive)
|
||||||
{
|
{
|
||||||
|
if (process.WaitForExit(30000))
|
||||||
|
{
|
||||||
|
ranToCompletion = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
cancellationToken.ThrowIfCancellationRequested();
|
cancellationToken.ThrowIfCancellationRequested();
|
||||||
|
|
||||||
int jpegCount = Directory.GetFiles(targetDirectory)
|
var jpegCount = Directory.GetFiles(targetDirectory)
|
||||||
.Count(i => string.Equals(Path.GetExtension(i), ".jpg", StringComparison.OrdinalIgnoreCase));
|
.Count(i => string.Equals(Path.GetExtension(i), ".jpg", StringComparison.OrdinalIgnoreCase));
|
||||||
|
|
||||||
isResponsive = (jpegCount > lastCount);
|
isResponsive = (jpegCount > lastCount);
|
||||||
lastCount = jpegCount;
|
lastCount = jpegCount;
|
||||||
}
|
}
|
||||||
|
|
||||||
ranToCompletion = process.HasExited;
|
|
||||||
|
|
||||||
if (!ranToCompletion)
|
if (!ranToCompletion)
|
||||||
{
|
{
|
||||||
StopProcess(processWrapper, 1000, false);
|
StopProcess(processWrapper, 1000, false);
|
||||||
|
@ -634,8 +636,6 @@ namespace MediaBrowser.MediaEncoding.Encoder
|
||||||
|
|
||||||
var exitCode = ranToCompletion ? processWrapper.ExitCode ?? 0 : -1;
|
var exitCode = ranToCompletion ? processWrapper.ExitCode ?? 0 : -1;
|
||||||
|
|
||||||
process.Dispose();
|
|
||||||
|
|
||||||
if (exitCode == -1)
|
if (exitCode == -1)
|
||||||
{
|
{
|
||||||
var msg = string.Format("ffmpeg image extraction failed for {0}", inputArgument);
|
var msg = string.Format("ffmpeg image extraction failed for {0}", inputArgument);
|
||||||
|
|
|
@ -357,7 +357,10 @@ namespace MediaBrowser.Server.Implementations.Dto
|
||||||
: item.CanDownload(user);
|
: item.CanDownload(user);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (fields.Contains(ItemFields.Etag))
|
||||||
|
{
|
||||||
|
dto.Etag = item.GetEtag(user);
|
||||||
|
}
|
||||||
|
|
||||||
return dto;
|
return dto;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue
Block a user