diff --git a/.vs/HandBrake/v17/.wsuo b/.vs/HandBrake/v17/.wsuo
new file mode 100644
index 000000000000..acf9266085f0
Binary files /dev/null and b/.vs/HandBrake/v17/.wsuo differ
diff --git a/.vs/VSWorkspaceState.json b/.vs/VSWorkspaceState.json
new file mode 100644
index 000000000000..ecd2c73aba03
--- /dev/null
+++ b/.vs/VSWorkspaceState.json
@@ -0,0 +1,7 @@
+{
+ "ExpandedNodes": [
+ ""
+ ],
+ "SelectedNode": "\\HandBrake.sln",
+ "PreviewInSolutionExplorer": false
+}
\ No newline at end of file
diff --git a/win/CS/HandBrakeWPF/Properties/Resources.Designer.cs b/win/CS/HandBrakeWPF/Properties/Resources.Designer.cs
index 26422fb1787b..ff4ca0653de5 100644
--- a/win/CS/HandBrakeWPF/Properties/Resources.Designer.cs
+++ b/win/CS/HandBrakeWPF/Properties/Resources.Designer.cs
@@ -6035,6 +6035,15 @@ public static string QueueView_SourceLength {
}
}
+ ///
+ /// Looks up a localized string similar to Stagger all jobs.
+ ///
+ public static string QueueView_StaggerJobs {
+ get {
+ return ResourceManager.GetString("QueueView_StaggerJobs", resourceCulture);
+ }
+ }
+
///
/// Looks up a localized string similar to Start Queue.
///
diff --git a/win/CS/HandBrakeWPF/Properties/Resources.nl.resx b/win/CS/HandBrakeWPF/Properties/Resources.nl.resx
index 967ed293dfa1..e124562896c0 100644
--- a/win/CS/HandBrakeWPF/Properties/Resources.nl.resx
+++ b/win/CS/HandBrakeWPF/Properties/Resources.nl.resx
@@ -1450,6 +1450,9 @@ VLC en MPC-HC worden ondersteund. Andere mediaspelers werken mogelijk ook, maar
Alle taken opnieuw uitvoeren
+
+ Alle taken spreiden
+
Herhaalde uitvoering mislukt
diff --git a/win/CS/HandBrakeWPF/Properties/Resources.resx b/win/CS/HandBrakeWPF/Properties/Resources.resx
index 80b3aafc5702..9536e6c1e8ab 100644
--- a/win/CS/HandBrakeWPF/Properties/Resources.resx
+++ b/win/CS/HandBrakeWPF/Properties/Resources.resx
@@ -2809,4 +2809,7 @@ To allow multiple simultaneous encodes, turn on "Process Isolation" in Tools Men
Audio Encoder Quality Mode
+
+ Stagger all jobs
+
\ No newline at end of file
diff --git a/win/CS/HandBrakeWPF/Services/Queue/Interfaces/IQueueService.cs b/win/CS/HandBrakeWPF/Services/Queue/Interfaces/IQueueService.cs
index 71c7c3ede81f..6b1b91ea918b 100644
--- a/win/CS/HandBrakeWPF/Services/Queue/Interfaces/IQueueService.cs
+++ b/win/CS/HandBrakeWPF/Services/Queue/Interfaces/IQueueService.cs
@@ -166,6 +166,11 @@ public interface IQueueService
///
void MoveToTop(IList moveItems);
+ ///
+ /// Stagger items in the queue list based on length and source
+ ///
+ void Stagger();
+
///
/// Remove a job from the Queue.
/// This method is Thread Safe
diff --git a/win/CS/HandBrakeWPF/Services/Queue/QueueService.cs b/win/CS/HandBrakeWPF/Services/Queue/QueueService.cs
index e1cfd2a85b72..383d76ff3948 100644
--- a/win/CS/HandBrakeWPF/Services/Queue/QueueService.cs
+++ b/win/CS/HandBrakeWPF/Services/Queue/QueueService.cs
@@ -424,6 +424,29 @@ public void MoveToTop(IList moveItems)
this.InvokeQueueChanged(EventArgs.Empty);
}
+ public void Stagger()
+ {
+ lock (QueueLock)
+ {
+ var total = this.queue.Count;
+ var grouped = this.queue.OrderByDescending(x => x.Task.ChapterNames.Count)
+ .GroupBy(x => x.ScannedSourcePath[0])
+ .Select(g => g.ToList())
+ .ToList();
+ this.queue.Clear();
+ for (int i = 0; this.queue.Count < total; i++)
+ {
+ var group = grouped[i % grouped.Count];
+ if (group.Any())
+ {
+ this.queue.Add(group.First());
+ group.RemoveAt(0);
+ }
+ }
+ }
+
+ this.InvokeQueueChanged(EventArgs.Empty);
+ }
public void Remove(QueueTask job)
{
diff --git a/win/CS/HandBrakeWPF/ViewModels/QueueViewModel.cs b/win/CS/HandBrakeWPF/ViewModels/QueueViewModel.cs
index 7ebe2ee1bdb7..72e24996371c 100644
--- a/win/CS/HandBrakeWPF/ViewModels/QueueViewModel.cs
+++ b/win/CS/HandBrakeWPF/ViewModels/QueueViewModel.cs
@@ -527,7 +527,12 @@ public void ResetAllJobs()
}
}
}
-
+
+ public void StaggerJobs()
+ {
+ this.queueProcessor.Stagger();
+ }
+
public void ResetFailed()
{
foreach (var task in this.QueueTasks)
diff --git a/win/CS/HandBrakeWPF/Views/QueueView.xaml b/win/CS/HandBrakeWPF/Views/QueueView.xaml
index bae66d91517f..238715c8c4e4 100644
--- a/win/CS/HandBrakeWPF/Views/QueueView.xaml
+++ b/win/CS/HandBrakeWPF/Views/QueueView.xaml
@@ -171,6 +171,7 @@
+