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.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()
{
}
}
} }

View File

@ -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)

View File

@ -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);
} }

View File

@ -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>

View File

@ -52,6 +52,7 @@ namespace MediaBrowser.Model.LiveTv
public TunerHostInfo() public TunerHostInfo()
{ {
AllowHWTranscoding = true; 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 || 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)