add perfect match indicator to subtitle editor

This commit is contained in:
Luke Pulverenti 2017-06-30 15:58:53 -04:00
parent dcaf8356e6
commit 1f96841e04
6 changed files with 89 additions and 30 deletions

View File

@ -29,13 +29,15 @@ using MediaBrowser.Controller.Entities.Audio;
using MediaBrowser.Controller.Entities.Movies;
using MediaBrowser.Controller.Entities.TV;
using MediaBrowser.Controller.IO;
using MediaBrowser.Controller.Plugins;
using MediaBrowser.Model.Globalization;
using MediaBrowser.Model.Tasks;
namespace Emby.Server.Implementations.Channels
{
public class ChannelManager : IChannelManager
{
private IChannel[] _channels;
internal IChannel[] Channels { get; private set; }
private readonly IUserManager _userManager;
private readonly IUserDataManager _userDataManager;
@ -76,12 +78,12 @@ namespace Emby.Server.Implementations.Channels
public void AddParts(IEnumerable<IChannel> channels)
{
_channels = channels.ToArray();
Channels = channels.ToArray();
}
private IEnumerable<IChannel> GetAllChannels()
{
return _channels
return Channels
.OrderBy(i => i.Name);
}
@ -1559,4 +1561,76 @@ namespace Emby.Server.Implementations.Channels
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()
{
}
}
}

View File

@ -56,24 +56,9 @@ namespace Emby.Server.Implementations.Data
var rootChildren = _libraryManager.RootFolder.Children.ToList();
rootChildren = _libraryManager.GetUserRootFolder().Children.ToList();
var innerProgress = new ActionableProgress<double>();
innerProgress.RegisterAction(p =>
{
double newPercentCommplete = .45 * p;
progress.Report(newPercentCommplete);
});
await CleanDeadItems(cancellationToken, innerProgress).ConfigureAwait(false);
progress.Report(45);
await CleanDeadItems(cancellationToken, progress).ConfigureAwait(false);
innerProgress = new ActionableProgress<double>();
innerProgress.RegisterAction(p =>
{
double newPercentCommplete = 45 + .55 * p;
progress.Report(newPercentCommplete);
});
await _itemRepo.UpdateInheritedValues(cancellationToken).ConfigureAwait(false);
progress.Report(100);
//await _itemRepo.UpdateInheritedValues(cancellationToken).ConfigureAwait(false);
}
private async Task CleanDeadItems(CancellationToken cancellationToken, IProgress<double> progress)

View File

@ -46,6 +46,8 @@ namespace MediaBrowser.Api.Subtitles
[ApiMember(Name = "Language", Description = "Language", IsRequired = true, DataType = "string", ParameterType = "path", Verb = "GET")]
public string Language { get; set; }
public bool? IsPerfectMatch { get; set; }
}
[Route("/Items/{Id}/RemoteSearch/Subtitles/Providers", "GET")]
@ -247,11 +249,11 @@ namespace MediaBrowser.Api.Subtitles
CancellationToken.None);
}
public object Get(SearchRemoteSubtitles request)
public async Task<object> Get(SearchRemoteSubtitles request)
{
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);
}

View File

@ -28,12 +28,9 @@ namespace MediaBrowser.Controller.Subtitles
/// <summary>
/// Searches the subtitles.
/// </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,
string language,
bool? isPerfectMatch,
CancellationToken cancellationToken);
/// <summary>

View File

@ -52,6 +52,7 @@ namespace MediaBrowser.Model.LiveTv
public TunerHostInfo()
{
AllowHWTranscoding = true;
EnableTvgId = true;
}
}

View File

@ -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 ||
video.VideoType != VideoType.VideoFile)
@ -207,7 +207,8 @@ namespace MediaBrowser.Providers.Subtitles
ParentIndexNumber = video.ParentIndexNumber,
ProductionYear = video.ProductionYear,
ProviderIds = video.ProviderIds,
RuntimeTicks = video.RunTimeTicks
RuntimeTicks = video.RunTimeTicks,
IsPerfectMatch = isPerfectMatch ?? false
};
var episode = video as Episode;
@ -261,8 +262,7 @@ namespace MediaBrowser.Providers.Subtitles
_monitor.ReportFileSystemChangeComplete(path, false);
}
_libraryManager.GetItemById(itemId).ChangedExternally();
return Task.FromResult(true);
return _libraryManager.GetItemById(itemId).RefreshMetadata(CancellationToken.None);
}
public Task<SubtitleResponse> GetRemoteSubtitles(string id, CancellationToken cancellationToken)