diff --git a/MediaBrowser.Api/Sync/SyncService.cs b/MediaBrowser.Api/Sync/SyncService.cs index 5863e05e3..593c3a108 100644 --- a/MediaBrowser.Api/Sync/SyncService.cs +++ b/MediaBrowser.Api/Sync/SyncService.cs @@ -244,7 +244,15 @@ namespace MediaBrowser.Api.Sync var task = _syncManager.ReportSyncJobItemTransferBeginning(request.Id); Task.WaitAll(task); - return ToStaticFileResult(jobItem.OutputPath); + return ResultFactory.GetStaticFileResult(Request, new StaticFileResultOptions + { + Path = jobItem.OutputPath, + OnError = () => + { + var failedTask = _syncManager.ReportSyncJobItemTransferFailed(request.Id); + Task.WaitAll(failedTask); + } + }); } public object Get(GetSyncDialogOptions request) diff --git a/MediaBrowser.Controller/Net/StaticResultOptions.cs b/MediaBrowser.Controller/Net/StaticResultOptions.cs index 6a104554a..b5efc1b8f 100644 --- a/MediaBrowser.Controller/Net/StaticResultOptions.cs +++ b/MediaBrowser.Controller/Net/StaticResultOptions.cs @@ -19,6 +19,7 @@ namespace MediaBrowser.Controller.Net public IDictionary ResponseHeaders { get; set; } public Action OnComplete { get; set; } + public Action OnError { get; set; } public StaticResultOptions() { diff --git a/MediaBrowser.Server.Implementations/HttpServer/HttpResultFactory.cs b/MediaBrowser.Server.Implementations/HttpServer/HttpResultFactory.cs index 961d58eb6..9dc8d94e2 100644 --- a/MediaBrowser.Server.Implementations/HttpServer/HttpResultFactory.cs +++ b/MediaBrowser.Server.Implementations/HttpServer/HttpResultFactory.cs @@ -476,7 +476,8 @@ namespace MediaBrowser.Server.Implementations.HttpServer return new StreamWriter(stream, contentType, _logger) { - OnComplete = options.OnComplete + OnComplete = options.OnComplete, + OnError = options.OnError }; } diff --git a/MediaBrowser.Server.Implementations/HttpServer/StreamWriter.cs b/MediaBrowser.Server.Implementations/HttpServer/StreamWriter.cs index daa5b86d9..a756f4aa8 100644 --- a/MediaBrowser.Server.Implementations/HttpServer/StreamWriter.cs +++ b/MediaBrowser.Server.Implementations/HttpServer/StreamWriter.cs @@ -36,6 +36,7 @@ namespace MediaBrowser.Server.Implementations.HttpServer } public Action OnComplete { get; set; } + public Action OnError { get; set; } /// /// Initializes a new instance of the class. @@ -102,6 +103,11 @@ namespace MediaBrowser.Server.Implementations.HttpServer { Logger.ErrorException("Error streaming data", ex); + if (OnError != null) + { + OnError(); + } + throw; } finally