add perfect match indicator to subtitle editor
This commit is contained in:
parent
dcaf8356e6
commit
1f96841e04
|
@ -29,13 +29,15 @@ using MediaBrowser.Controller.Entities.Audio;
|
||||||
using MediaBrowser.Controller.Entities.Movies;
|
using MediaBrowser.Controller.Entities.Movies;
|
||||||
using MediaBrowser.Controller.Entities.TV;
|
using MediaBrowser.Controller.Entities.TV;
|
||||||
using MediaBrowser.Controller.IO;
|
using MediaBrowser.Controller.IO;
|
||||||
|
using MediaBrowser.Controller.Plugins;
|
||||||
using MediaBrowser.Model.Globalization;
|
using MediaBrowser.Model.Globalization;
|
||||||
|
using MediaBrowser.Model.Tasks;
|
||||||
|
|
||||||
namespace Emby.Server.Implementations.Channels
|
namespace Emby.Server.Implementations.Channels
|
||||||
{
|
{
|
||||||
public class ChannelManager : IChannelManager
|
public class ChannelManager : IChannelManager
|
||||||
{
|
{
|
||||||
private IChannel[] _channels;
|
internal IChannel[] Channels { get; private set; }
|
||||||
|
|
||||||
private readonly IUserManager _userManager;
|
private readonly IUserManager _userManager;
|
||||||
private readonly IUserDataManager _userDataManager;
|
private readonly IUserDataManager _userDataManager;
|
||||||
|
@ -76,12 +78,12 @@ namespace Emby.Server.Implementations.Channels
|
||||||
|
|
||||||
public void AddParts(IEnumerable<IChannel> channels)
|
public void AddParts(IEnumerable<IChannel> channels)
|
||||||
{
|
{
|
||||||
_channels = channels.ToArray();
|
Channels = channels.ToArray();
|
||||||
}
|
}
|
||||||
|
|
||||||
private IEnumerable<IChannel> GetAllChannels()
|
private IEnumerable<IChannel> GetAllChannels()
|
||||||
{
|
{
|
||||||
return _channels
|
return Channels
|
||||||
.OrderBy(i => i.Name);
|
.OrderBy(i => i.Name);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1559,4 +1561,76 @@ namespace Emby.Server.Implementations.Channels
|
||||||
return await _libraryManager.GetNamedView(name, "channels", "zz_" + name, cancellationToken).ConfigureAwait(false);
|
return await _libraryManager.GetNamedView(name, "channels", "zz_" + name, cancellationToken).ConfigureAwait(false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public class ChannelsEntryPoint : IServerEntryPoint
|
||||||
|
{
|
||||||
|
private readonly IServerConfigurationManager _config;
|
||||||
|
private readonly IChannelManager _channelManager;
|
||||||
|
private readonly ITaskManager _taskManager;
|
||||||
|
private readonly IFileSystem _fileSystem;
|
||||||
|
|
||||||
|
public ChannelsEntryPoint(IChannelManager channelManager, ITaskManager taskManager, IServerConfigurationManager config, IFileSystem fileSystem)
|
||||||
|
{
|
||||||
|
_channelManager = channelManager;
|
||||||
|
_taskManager = taskManager;
|
||||||
|
_config = config;
|
||||||
|
_fileSystem = fileSystem;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void Run()
|
||||||
|
{
|
||||||
|
var channels = ((ChannelManager)_channelManager).Channels
|
||||||
|
.Select(i => i.GetType().FullName.GetMD5().ToString("N"))
|
||||||
|
.ToArray();
|
||||||
|
|
||||||
|
var channelsString = string.Join(",", channels);
|
||||||
|
|
||||||
|
if (!string.Equals(channelsString, GetSavedLastChannels(), StringComparison.OrdinalIgnoreCase))
|
||||||
|
{
|
||||||
|
_taskManager.QueueIfNotRunning<RefreshChannelsScheduledTask>();
|
||||||
|
|
||||||
|
SetSavedLastChannels(channelsString);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private string DataPath
|
||||||
|
{
|
||||||
|
get { return Path.Combine(_config.ApplicationPaths.DataPath, "channels.txt"); }
|
||||||
|
}
|
||||||
|
|
||||||
|
private string GetSavedLastChannels()
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
return _fileSystem.ReadAllText(DataPath);
|
||||||
|
}
|
||||||
|
catch
|
||||||
|
{
|
||||||
|
return string.Empty;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void SetSavedLastChannels(string value)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
if (string.IsNullOrWhiteSpace(value))
|
||||||
|
{
|
||||||
|
_fileSystem.DeleteFile(DataPath);
|
||||||
|
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
_fileSystem.WriteAllText(DataPath, value);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch
|
||||||
|
{
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void Dispose()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
|
@ -56,24 +56,9 @@ namespace Emby.Server.Implementations.Data
|
||||||
var rootChildren = _libraryManager.RootFolder.Children.ToList();
|
var rootChildren = _libraryManager.RootFolder.Children.ToList();
|
||||||
rootChildren = _libraryManager.GetUserRootFolder().Children.ToList();
|
rootChildren = _libraryManager.GetUserRootFolder().Children.ToList();
|
||||||
|
|
||||||
var innerProgress = new ActionableProgress<double>();
|
await CleanDeadItems(cancellationToken, progress).ConfigureAwait(false);
|
||||||
innerProgress.RegisterAction(p =>
|
|
||||||
{
|
|
||||||
double newPercentCommplete = .45 * p;
|
|
||||||
progress.Report(newPercentCommplete);
|
|
||||||
});
|
|
||||||
await CleanDeadItems(cancellationToken, innerProgress).ConfigureAwait(false);
|
|
||||||
progress.Report(45);
|
|
||||||
|
|
||||||
innerProgress = new ActionableProgress<double>();
|
//await _itemRepo.UpdateInheritedValues(cancellationToken).ConfigureAwait(false);
|
||||||
innerProgress.RegisterAction(p =>
|
|
||||||
{
|
|
||||||
double newPercentCommplete = 45 + .55 * p;
|
|
||||||
progress.Report(newPercentCommplete);
|
|
||||||
});
|
|
||||||
|
|
||||||
await _itemRepo.UpdateInheritedValues(cancellationToken).ConfigureAwait(false);
|
|
||||||
progress.Report(100);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private async Task CleanDeadItems(CancellationToken cancellationToken, IProgress<double> progress)
|
private async Task CleanDeadItems(CancellationToken cancellationToken, IProgress<double> progress)
|
||||||
|
|
|
@ -46,6 +46,8 @@ namespace MediaBrowser.Api.Subtitles
|
||||||
|
|
||||||
[ApiMember(Name = "Language", Description = "Language", IsRequired = true, DataType = "string", ParameterType = "path", Verb = "GET")]
|
[ApiMember(Name = "Language", Description = "Language", IsRequired = true, DataType = "string", ParameterType = "path", Verb = "GET")]
|
||||||
public string Language { get; set; }
|
public string Language { get; set; }
|
||||||
|
|
||||||
|
public bool? IsPerfectMatch { get; set; }
|
||||||
}
|
}
|
||||||
|
|
||||||
[Route("/Items/{Id}/RemoteSearch/Subtitles/Providers", "GET")]
|
[Route("/Items/{Id}/RemoteSearch/Subtitles/Providers", "GET")]
|
||||||
|
@ -247,11 +249,11 @@ namespace MediaBrowser.Api.Subtitles
|
||||||
CancellationToken.None);
|
CancellationToken.None);
|
||||||
}
|
}
|
||||||
|
|
||||||
public object Get(SearchRemoteSubtitles request)
|
public async Task<object> Get(SearchRemoteSubtitles request)
|
||||||
{
|
{
|
||||||
var video = (Video)_libraryManager.GetItemById(request.Id);
|
var video = (Video)_libraryManager.GetItemById(request.Id);
|
||||||
|
|
||||||
var response = _subtitleManager.SearchSubtitles(video, request.Language, CancellationToken.None).Result;
|
var response = await _subtitleManager.SearchSubtitles(video, request.Language, request.IsPerfectMatch, CancellationToken.None).ConfigureAwait(false);
|
||||||
|
|
||||||
return ToOptimizedResult(response);
|
return ToOptimizedResult(response);
|
||||||
}
|
}
|
||||||
|
|
|
@ -28,12 +28,9 @@ namespace MediaBrowser.Controller.Subtitles
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Searches the subtitles.
|
/// Searches the subtitles.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="video">The video.</param>
|
|
||||||
/// <param name="language">The language.</param>
|
|
||||||
/// <param name="cancellationToken">The cancellation token.</param>
|
|
||||||
/// <returns>Task{IEnumerable{RemoteSubtitleInfo}}.</returns>
|
|
||||||
Task<IEnumerable<RemoteSubtitleInfo>> SearchSubtitles(Video video,
|
Task<IEnumerable<RemoteSubtitleInfo>> SearchSubtitles(Video video,
|
||||||
string language,
|
string language,
|
||||||
|
bool? isPerfectMatch,
|
||||||
CancellationToken cancellationToken);
|
CancellationToken cancellationToken);
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
|
|
@ -52,6 +52,7 @@ namespace MediaBrowser.Model.LiveTv
|
||||||
public TunerHostInfo()
|
public TunerHostInfo()
|
||||||
{
|
{
|
||||||
AllowHWTranscoding = true;
|
AllowHWTranscoding = true;
|
||||||
|
EnableTvgId = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -173,7 +173,7 @@ namespace MediaBrowser.Providers.Subtitles
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public Task<IEnumerable<RemoteSubtitleInfo>> SearchSubtitles(Video video, string language, CancellationToken cancellationToken)
|
public Task<IEnumerable<RemoteSubtitleInfo>> SearchSubtitles(Video video, string language, bool? isPerfectMatch, CancellationToken cancellationToken)
|
||||||
{
|
{
|
||||||
if (video.LocationType != LocationType.FileSystem ||
|
if (video.LocationType != LocationType.FileSystem ||
|
||||||
video.VideoType != VideoType.VideoFile)
|
video.VideoType != VideoType.VideoFile)
|
||||||
|
@ -207,7 +207,8 @@ namespace MediaBrowser.Providers.Subtitles
|
||||||
ParentIndexNumber = video.ParentIndexNumber,
|
ParentIndexNumber = video.ParentIndexNumber,
|
||||||
ProductionYear = video.ProductionYear,
|
ProductionYear = video.ProductionYear,
|
||||||
ProviderIds = video.ProviderIds,
|
ProviderIds = video.ProviderIds,
|
||||||
RuntimeTicks = video.RunTimeTicks
|
RuntimeTicks = video.RunTimeTicks,
|
||||||
|
IsPerfectMatch = isPerfectMatch ?? false
|
||||||
};
|
};
|
||||||
|
|
||||||
var episode = video as Episode;
|
var episode = video as Episode;
|
||||||
|
@ -261,8 +262,7 @@ namespace MediaBrowser.Providers.Subtitles
|
||||||
_monitor.ReportFileSystemChangeComplete(path, false);
|
_monitor.ReportFileSystemChangeComplete(path, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
_libraryManager.GetItemById(itemId).ChangedExternally();
|
return _libraryManager.GetItemById(itemId).RefreshMetadata(CancellationToken.None);
|
||||||
return Task.FromResult(true);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public Task<SubtitleResponse> GetRemoteSubtitles(string id, CancellationToken cancellationToken)
|
public Task<SubtitleResponse> GetRemoteSubtitles(string id, CancellationToken cancellationToken)
|
||||||
|
|
Loading…
Reference in New Issue
Block a user