From 6a8e0cff55a5e808992adaaee90ed155ef0351af Mon Sep 17 00:00:00 2001 From: HMFons <6265638+HMFons@users.noreply.github.com> Date: Wed, 27 Dec 2023 12:33:31 +0100 Subject: [PATCH] Stagger items in the queue list based on length and source --- .vs/HandBrake/v17/.wsuo | Bin 0 -> 11264 bytes .vs/VSWorkspaceState.json | 7 ++++++ .../Properties/Resources.Designer.cs | 9 +++++++ .../HandBrakeWPF/Properties/Resources.nl.resx | 3 +++ win/CS/HandBrakeWPF/Properties/Resources.resx | 3 +++ .../Queue/Interfaces/IQueueService.cs | 5 ++++ .../Services/Queue/QueueService.cs | 23 ++++++++++++++++++ .../HandBrakeWPF/ViewModels/QueueViewModel.cs | 7 +++++- win/CS/HandBrakeWPF/Views/QueueView.xaml | 1 + 9 files changed, 57 insertions(+), 1 deletion(-) create mode 100644 .vs/HandBrake/v17/.wsuo create mode 100644 .vs/VSWorkspaceState.json diff --git a/.vs/HandBrake/v17/.wsuo b/.vs/HandBrake/v17/.wsuo new file mode 100644 index 0000000000000000000000000000000000000000..acf9266085f06f88f24a55f246513e34d1c3b7fb GIT binary patch literal 11264 zcmeHNO>Y}T7=E2nO8IOl1Sma3C@MMN$WBaR2N8v)Ur03xb<$KK9PG6d2RpW9JCv$` z#82VKfddjJPW*#%<^=zO9%y);*&Tbl>)ou^Nl6sH)_Oj6W}cb%W9FUL{^Rk*zkdAX z^55d3ML8o+_s`4oMt#i4%LS2FQD)uK{r!EuVjkHMogfa}l{!9cnUEV&L)w&w6lG`{ zm$Mz2pFN=0>aF_J&*?v7FR|S@yYVUz>++R+3iK`HZpb$WjMDphT*f;1WP9)1{-t+O z4fR!|@rm1zDrV4>5}q7*k;hYV+W94uG8Qw%?bpt%e+`9-Q?Vj@K&i?O*3W0#K)#Ne zrrEJip7_t9ehg38^}mI-+O9d5f6WCT|GG04tI4Mqobt;^U%~SR9@;$R&GbCdi+I?c zp#5G#p0-W9W|{WSRNMcH zD5K~hZt0%NQN^+50Oi{6p)B3?l)qU=8#2rKTrlg*{IO=lDV_-1x-lT2c_e9Ips81 zQ{1n}9dN$|spqhA`rvJ`lvWZ^3a8wm`7Fd zUVA1b%%ttB6$=sg-z)#RTInt@sr4JcuSpR+cp$6zZlT=9L)+}fiv-rMee$sU=lTAv zTD^!{|G0kQb6=qSTbNf6T?Ib%N&EjnZS_0yUhAJf{zK?w0kf#;ZhceWAFBOjvEE&v z@*Zr;q95-$A?$wxVkqpS~UM zj3jf7Sy%wAz}|_bq4RsnChOqHE#Oik8uA%hP+M(|ECT->j6<6ai_iUnz62>O{uOJN|2F#R{bvw-o>Oh?*gTbMm~|QBEJeVlyqxP7)>*=6wDYpkG9uhX9qpcL{2VeT zM|d{2I=eIma3~FY#t^usu>3dozaaUq0=0%u30%LaR^8P*jSu}FnE%v$E&m|=duruv z*lHd-kv^f=qX^EFl@@~kF~*a)c9Nb~P|EX4?|(t~8^E9xR-o}r$p<&hL|8w4AASGT z<8A!(!~5Sal)V7Dfls=dZ?#L!C%;AQ|LfJtqs4!s_xG9Bs5&GEXb0SnqtdYbsfWYh z(~j7`J4Ry(#n3eD{6hl;G}Lzyv&k@Z<~T>4j~Segf~EbCD1F(7a=(LTSr%kd*0Cq^ zv}z%LTb+{3nZE3%I^7yL%e!rg&Y4<4-%SoW0P!6CLcScJM{m=v-uBjqE%DxK@8zZ@ zucMYD-%jA7ZGPgNQgF`f!~BsE?+sb_7`A7Z!?{Xtq^&$neFGEu7{5mH)cnXZ58h+A z2Taadsp3{*E+5BJil=50`FK8+OvW?w>9mzBW(u?OmST#!u5z56C6=$nb88C;d>&a= z>BCH_Fc(i)vzd4*m70kc@-yjpGGWc7^45GQo!R=1T;@zP-G598M5js54ZI~2h((a; zN%*1s4x(Z8$BfUJ`J;&car_Y-FAj|2Kc_qXlf`+sjvdDx2c9q@VL|&(l=utp>fA>U zi%g3;tT6`}=Op91<4+Odf9iig|6}}5#lNmVV3b1`xtZ|?_xev;{Lj69Mwb{7svzc2 zSMis&5&QE-K@opY{O5m4!t$T-YV9?J!S|wer91_E`oD~)g~jLZMfaT{-1z)GfU&Oz zd{F + /// 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 @@ +