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 @@ +