aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLuke Pulverenti <luke.pulverenti@gmail.com>2015-02-03 14:37:50 -0500
committerLuke Pulverenti <luke.pulverenti@gmail.com>2015-02-03 14:37:50 -0500
commit256990ac7ba8cd9efa7f37896c7e1f20d325cda8 (patch)
tree67332359c81816bde32f97a47e9b60ef4192fe3e
parent0f88525d618f3f8c7fdc0bc515a2357dac8fee63 (diff)
update sync progress display
-rw-r--r--MediaBrowser.Model/Sync/SyncJob.cs1
-rw-r--r--MediaBrowser.Server.Implementations/Sync/SyncJobProcessor.cs36
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)
{