aboutsummaryrefslogtreecommitdiff
path: root/MediaBrowser.Providers/Subtitles/SubtitleManager.cs
diff options
context:
space:
mode:
Diffstat (limited to 'MediaBrowser.Providers/Subtitles/SubtitleManager.cs')
-rw-r--r--MediaBrowser.Providers/Subtitles/SubtitleManager.cs57
1 files changed, 45 insertions, 12 deletions
diff --git a/MediaBrowser.Providers/Subtitles/SubtitleManager.cs b/MediaBrowser.Providers/Subtitles/SubtitleManager.cs
index 6a9b7136c..071687c0f 100644
--- a/MediaBrowser.Providers/Subtitles/SubtitleManager.cs
+++ b/MediaBrowser.Providers/Subtitles/SubtitleManager.cs
@@ -19,6 +19,8 @@ using System.Threading.Tasks;
using MediaBrowser.Common.Configuration;
using MediaBrowser.Controller.Configuration;
using MediaBrowser.Model.IO;
+using MediaBrowser.Model.Globalization;
+using MediaBrowser.Model.Configuration;
namespace MediaBrowser.Providers.Subtitles
{
@@ -28,33 +30,56 @@ namespace MediaBrowser.Providers.Subtitles
private readonly ILogger _logger;
private readonly IFileSystem _fileSystem;
private readonly ILibraryMonitor _monitor;
- private readonly ILibraryManager _libraryManager;
private readonly IMediaSourceManager _mediaSourceManager;
private readonly IServerConfigurationManager _config;
public event EventHandler<SubtitleDownloadEventArgs> SubtitlesDownloaded;
public event EventHandler<SubtitleDownloadFailureEventArgs> SubtitleDownloadFailure;
- public SubtitleManager(ILogger logger, IFileSystem fileSystem, ILibraryMonitor monitor, ILibraryManager libraryManager, IMediaSourceManager mediaSourceManager, IServerConfigurationManager config)
+ private ILocalizationManager _localization;
+
+ public SubtitleManager(ILogger logger, IFileSystem fileSystem, ILibraryMonitor monitor, IMediaSourceManager mediaSourceManager, IServerConfigurationManager config, ILocalizationManager localizationManager)
{
_logger = logger;
_fileSystem = fileSystem;
_monitor = monitor;
- _libraryManager = libraryManager;
_mediaSourceManager = mediaSourceManager;
_config = config;
+ _localization = localizationManager;
}
public void AddParts(IEnumerable<ISubtitleProvider> subtitleProviders)
{
- _subtitleProviders = subtitleProviders.ToArray();
+ _subtitleProviders = subtitleProviders
+ .OrderBy(i =>
+ {
+ var hasOrder = i as IHasOrder;
+ return hasOrder == null ? 0 : hasOrder.Order;
+ })
+ .ToArray();
}
public async Task<RemoteSubtitleInfo[]> SearchSubtitles(SubtitleSearchRequest request, CancellationToken cancellationToken)
{
+ if (request.Language != null)
+ {
+ var culture = _localization.FindLanguageInfo(request.Language);
+
+ if (culture != null)
+ {
+ request.TwoLetterISOLanguageName = culture.TwoLetterISOLanguageName;
+ }
+ }
+
var contentType = request.ContentType;
var providers = _subtitleProviders
.Where(i => i.SupportedMediaTypes.Contains(contentType))
+ .Where(i => !request.DisabledSubtitleFetchers.Contains(i.Name, StringComparer.OrdinalIgnoreCase))
+ .OrderBy(i =>
+ {
+ var index = request.SubtitleFetcherOrder.ToList().IndexOf(i.Name);
+ return index == -1 ? int.MaxValue : index;
+ })
.ToArray();
// If not searching all, search one at a time until something is found
@@ -109,14 +134,22 @@ namespace MediaBrowser.Providers.Subtitles
return _config.GetConfiguration<SubtitleOptions>("subtitles");
}
+ public Task DownloadSubtitles(Video video, string subtitleId, CancellationToken cancellationToken)
+ {
+ var libraryOptions = BaseItem.LibraryManager.GetLibraryOptions(video);
+
+ return DownloadSubtitles(video, libraryOptions, subtitleId, cancellationToken);
+ }
+
public async Task DownloadSubtitles(Video video,
+ LibraryOptions libraryOptions,
string subtitleId,
CancellationToken cancellationToken)
{
var parts = subtitleId.Split(new[] { '_' }, 2);
var provider = GetProvider(parts.First());
- var saveInMediaFolder = video.IsSaveLocalMetadataEnabled();
+ var saveInMediaFolder = libraryOptions.SaveSubtitlesWithMedia;
try
{
@@ -180,6 +213,8 @@ namespace MediaBrowser.Providers.Subtitles
try
{
+ _fileSystem.CreateDirectory(_fileSystem.GetDirectoryName(savePath));
+
using (var fs = _fileSystem.GetFileStream(savePath, FileOpenMode.Create, FileAccessMode.Write, FileShareMode.Read, true))
{
await stream.CopyToAsync(fs).ConfigureAwait(false);
@@ -210,8 +245,7 @@ namespace MediaBrowser.Providers.Subtitles
public Task<RemoteSubtitleInfo[]> SearchSubtitles(Video video, string language, bool? isPerfectMatch, CancellationToken cancellationToken)
{
- if (video.LocationType != LocationType.FileSystem ||
- video.VideoType != VideoType.VideoFile)
+ if (video.VideoType != VideoType.VideoFile)
{
return Task.FromResult<RemoteSubtitleInfo[]>(new RemoteSubtitleInfo[] { });
}
@@ -275,12 +309,12 @@ namespace MediaBrowser.Providers.Subtitles
return _subtitleProviders.First(i => string.Equals(id, GetProviderId(i.Name)));
}
- public Task DeleteSubtitles(string itemId, int index)
+ public Task DeleteSubtitles(BaseItem item, int index)
{
var stream = _mediaSourceManager.GetMediaStreams(new MediaStreamQuery
{
Index = index,
- ItemId = new Guid(itemId),
+ ItemId = item.Id,
Type = MediaStreamType.Subtitle
}).First();
@@ -297,7 +331,7 @@ namespace MediaBrowser.Providers.Subtitles
_monitor.ReportFileSystemChangeComplete(path, false);
}
- return _libraryManager.GetItemById(itemId).RefreshMetadata(CancellationToken.None);
+ return item.RefreshMetadata(CancellationToken.None);
}
public Task<SubtitleResponse> GetRemoteSubtitles(string id, CancellationToken cancellationToken)
@@ -310,9 +344,8 @@ namespace MediaBrowser.Providers.Subtitles
return provider.GetSubtitles(id, cancellationToken);
}
- public SubtitleProviderInfo[] GetProviders(string itemId)
+ public SubtitleProviderInfo[] GetSupportedProviders(BaseItem video)
{
- var video = _libraryManager.GetItemById(itemId) as Video;
VideoContentType mediaType;
if (video is Episode)