diff options
| author | Luke Pulverenti <luke.pulverenti@gmail.com> | 2015-02-03 14:37:50 -0500 |
|---|---|---|
| committer | Luke Pulverenti <luke.pulverenti@gmail.com> | 2015-02-03 14:37:50 -0500 |
| commit | 256990ac7ba8cd9efa7f37896c7e1f20d325cda8 (patch) | |
| tree | 67332359c81816bde32f97a47e9b60ef4192fe3e | |
| parent | 0f88525d618f3f8c7fdc0bc515a2357dac8fee63 (diff) | |
update sync progress display
| -rw-r--r-- | MediaBrowser.Model/Sync/SyncJob.cs | 1 | ||||
| -rw-r--r-- | MediaBrowser.Server.Implementations/Sync/SyncJobProcessor.cs | 36 |
2 files changed, 35 insertions, 2 deletions
diff --git a/MediaBrowser.Model/Sync/SyncJob.cs b/MediaBrowser.Model/Sync/SyncJob.cs index 24680d172..5737ed3bb 100644 --- a/MediaBrowser.Model/Sync/SyncJob.cs +++ b/MediaBrowser.Model/Sync/SyncJob.cs @@ -93,6 +93,7 @@ namespace MediaBrowser.Model.Sync public SyncJob() { RequestedItemIds = new List<string>(); + Quality = SyncQuality.High; } } } diff --git a/MediaBrowser.Server.Implementations/Sync/SyncJobProcessor.cs b/MediaBrowser.Server.Implementations/Sync/SyncJobProcessor.cs index 572ddd3c8..3628bda2a 100644 --- a/MediaBrowser.Server.Implementations/Sync/SyncJobProcessor.cs +++ b/MediaBrowser.Server.Implementations/Sync/SyncJobProcessor.cs @@ -481,15 +481,30 @@ namespace MediaBrowser.Server.Implementations.Sync try { + var lastJobUpdate = DateTime.MinValue; + var innerProgress = new ActionableProgress<double>(); + innerProgress.RegisterAction(async pct => + { + progress.Report(pct); + + if ((DateTime.UtcNow - lastJobUpdate).TotalSeconds >= DatabaseProgressUpdateIntervalSeconds) + { + jobItem.Progress = pct / 2; + await _syncRepo.Update(jobItem).ConfigureAwait(false); + await UpdateJobStatus(job).ConfigureAwait(false); + } + }); + jobItem.OutputPath = await _mediaEncoder.EncodeVideo(new EncodingJobOptions(streamInfo, profile) { OutputDirectory = jobItem.TemporaryPath - }, progress, cancellationToken); + }, innerProgress, cancellationToken); } catch (OperationCanceledException) { jobItem.Status = SyncJobItemStatus.Queued; + jobItem.Progress = 0; } catch (Exception ex) { @@ -611,6 +626,8 @@ namespace MediaBrowser.Server.Implementations.Sync }; } + private const int DatabaseProgressUpdateIntervalSeconds = 2; + private async Task Sync(SyncJobItem jobItem, SyncJob job, Audio item, User user, DeviceProfile profile, bool enableConversion, IProgress<double> progress, CancellationToken cancellationToken) { var options = _syncManager.GetAudioOptions(jobItem); @@ -640,15 +657,30 @@ namespace MediaBrowser.Server.Implementations.Sync try { + var lastJobUpdate = DateTime.MinValue; + var innerProgress = new ActionableProgress<double>(); + innerProgress.RegisterAction(async pct => + { + progress.Report(pct); + + if ((DateTime.UtcNow - lastJobUpdate).TotalSeconds >= DatabaseProgressUpdateIntervalSeconds) + { + jobItem.Progress = pct / 2; + await _syncRepo.Update(jobItem).ConfigureAwait(false); + await UpdateJobStatus(job).ConfigureAwait(false); + } + }); + jobItem.OutputPath = await _mediaEncoder.EncodeAudio(new EncodingJobOptions(streamInfo, profile) { OutputDirectory = jobItem.TemporaryPath - }, progress, cancellationToken); + }, innerProgress, cancellationToken); } catch (OperationCanceledException) { jobItem.Status = SyncJobItemStatus.Queued; + jobItem.Progress = 0; } catch (Exception ex) { |
