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.cs69
1 files changed, 51 insertions, 18 deletions
diff --git a/MediaBrowser.Providers/Subtitles/SubtitleManager.cs b/MediaBrowser.Providers/Subtitles/SubtitleManager.cs
index 34656f05b..179ab425b 100644
--- a/MediaBrowser.Providers/Subtitles/SubtitleManager.cs
+++ b/MediaBrowser.Providers/Subtitles/SubtitleManager.cs
@@ -1,4 +1,5 @@
-using MediaBrowser.Common.Extensions;
+using MediaBrowser.Common.Events;
+using MediaBrowser.Common.Extensions;
using MediaBrowser.Common.IO;
using MediaBrowser.Controller.Entities;
using MediaBrowser.Controller.Entities.Movies;
@@ -28,6 +29,9 @@ namespace MediaBrowser.Providers.Subtitles
private readonly ILibraryManager _libraryManager;
private readonly IItemRepository _itemRepo;
+ public event EventHandler<SubtitleDownloadEventArgs> SubtitlesDownloaded;
+ public event EventHandler<SubtitleDownloadFailureEventArgs> SubtitleDownloadFailure;
+
public SubtitleManager(ILogger logger, IFileSystem fileSystem, ILibraryMonitor monitor, ILibraryManager libraryManager, IItemRepository itemRepo)
{
_logger = logger;
@@ -100,35 +104,63 @@ namespace MediaBrowser.Providers.Subtitles
string subtitleId,
CancellationToken cancellationToken)
{
- var response = await GetRemoteSubtitles(subtitleId, cancellationToken).ConfigureAwait(false);
+ var parts = subtitleId.Split(new[] { '_' }, 2);
+ var provider = GetProvider(parts.First());
- using (var stream = response.Stream)
+ try
{
- var savePath = Path.Combine(Path.GetDirectoryName(video.Path),
- _fileSystem.GetFileNameWithoutExtension(video.Path) + "." + response.Language.ToLower());
+ var response = await GetRemoteSubtitles(subtitleId, cancellationToken).ConfigureAwait(false);
- if (response.IsForced)
+ using (var stream = response.Stream)
{
- savePath += ".forced";
- }
+ var savePath = Path.Combine(Path.GetDirectoryName(video.Path),
+ _fileSystem.GetFileNameWithoutExtension(video.Path) + "." + response.Language.ToLower());
- savePath += "." + response.Format.ToLower();
+ if (response.IsForced)
+ {
+ savePath += ".forced";
+ }
- _logger.Info("Saving subtitles to {0}", savePath);
+ savePath += "." + response.Format.ToLower();
- _monitor.ReportFileSystemChangeBeginning(savePath);
+ _logger.Info("Saving subtitles to {0}", savePath);
- try
- {
- using (var fs = _fileSystem.GetFileStream(savePath, FileMode.Create, FileAccess.Write, FileShare.Read, true))
+ _monitor.ReportFileSystemChangeBeginning(savePath);
+
+ try
+ {
+ using (var fs = _fileSystem.GetFileStream(savePath, FileMode.Create, FileAccess.Write, FileShare.Read, true))
+ {
+ await stream.CopyToAsync(fs).ConfigureAwait(false);
+ }
+
+ EventHelper.FireEventIfNotNull(SubtitlesDownloaded, this, new SubtitleDownloadEventArgs
+ {
+ Item = video,
+ Format = response.Format,
+ Language = response.Language,
+ IsForced = response.IsForced,
+ Provider = provider.Name
+
+ }, _logger);
+ }
+ finally
{
- await stream.CopyToAsync(fs).ConfigureAwait(false);
+ _monitor.ReportFileSystemChangeComplete(savePath, false);
}
}
- finally
+ }
+ catch (Exception ex)
+ {
+ EventHelper.FireEventIfNotNull(SubtitleDownloadFailure, this, new SubtitleDownloadFailureEventArgs
{
- _monitor.ReportFileSystemChangeComplete(savePath, false);
- }
+ Item = video,
+ Exception = ex,
+ Provider = provider.Name
+
+ }, _logger);
+
+ throw;
}
}
@@ -267,5 +299,6 @@ namespace MediaBrowser.Providers.Subtitles
Id = GetProviderId(i.Name)
});
}
+
}
}