From 857d943a48c3323e56a2f440a32caf5f22f7c50a Mon Sep 17 00:00:00 2001 From: Nicholas Jorgenson Date: Wed, 23 Apr 2025 14:54:53 -0400 Subject: [PATCH 1/4] Fix genre tab from sorting shows randomly --- src/controllers/shows/tvgenres.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/controllers/shows/tvgenres.js b/src/controllers/shows/tvgenres.js index c1c360a8319..caa7d81cd76 100644 --- a/src/controllers/shows/tvgenres.js +++ b/src/controllers/shows/tvgenres.js @@ -64,7 +64,7 @@ export default function (view, params, tabContent) { const enableImageTypes = viewStyle == 'Thumb' || viewStyle == 'ThumbCard' ? 'Primary,Backdrop,Thumb' : 'Primary'; const query = { - SortBy: 'Random', + SortBy: 'SortName', SortOrder: 'Ascending', IncludeItemTypes: 'Series', Recursive: true, From 80f01dbf78a990c2fed012a9f8b8c772a92acb51 Mon Sep 17 00:00:00 2001 From: Nicholas Jorgenson Date: Fri, 25 Apr 2025 18:47:12 -0400 Subject: [PATCH 2/4] Fix loading elements that have already been loaded --- .../lazyLoader/lazyLoaderIntersectionObserver.js | 11 +++++++---- src/controllers/shows/tvgenres.js | 2 +- 2 files changed, 8 insertions(+), 5 deletions(-) diff --git a/src/components/lazyLoader/lazyLoaderIntersectionObserver.js b/src/components/lazyLoader/lazyLoaderIntersectionObserver.js index 81378710ff2..b6734aaf4d3 100644 --- a/src/components/lazyLoader/lazyLoaderIntersectionObserver.js +++ b/src/components/lazyLoader/lazyLoaderIntersectionObserver.js @@ -7,10 +7,13 @@ export class LazyLoader { createObserver() { const callback = this.options.callback; - const observer = new IntersectionObserver( - (entries) => { + const newObserver = new IntersectionObserver( + (entries, observer) => { entries.forEach(entry => { - callback(entry); + if (entry.isIntersecting) { + callback(entry); + observer.unobserve(entry.target); + } }); }, { @@ -18,7 +21,7 @@ export class LazyLoader { threshold: 0 }); - this.observer = observer; + this.observer = newObserver; } addElements(elements) { diff --git a/src/controllers/shows/tvgenres.js b/src/controllers/shows/tvgenres.js index caa7d81cd76..c1c360a8319 100644 --- a/src/controllers/shows/tvgenres.js +++ b/src/controllers/shows/tvgenres.js @@ -64,7 +64,7 @@ export default function (view, params, tabContent) { const enableImageTypes = viewStyle == 'Thumb' || viewStyle == 'ThumbCard' ? 'Primary,Backdrop,Thumb' : 'Primary'; const query = { - SortBy: 'SortName', + SortBy: 'Random', SortOrder: 'Ascending', IncludeItemTypes: 'Series', Recursive: true, From b5863f2e0656ee286f5ff808461695a00af426d7 Mon Sep 17 00:00:00 2001 From: Nicholas Jorgenson Date: Sat, 26 Apr 2025 08:17:10 -0400 Subject: [PATCH 3/4] Fix lazyLoader for show and movie genre tabs --- .../lazyLoader/lazyLoaderIntersectionObserver.js | 5 +---- src/controllers/movies/moviegenres.js | 8 +++++++- src/controllers/shows/tvgenres.js | 8 +++++++- 3 files changed, 15 insertions(+), 6 deletions(-) diff --git a/src/components/lazyLoader/lazyLoaderIntersectionObserver.js b/src/components/lazyLoader/lazyLoaderIntersectionObserver.js index b6734aaf4d3..8a3835d8902 100644 --- a/src/components/lazyLoader/lazyLoaderIntersectionObserver.js +++ b/src/components/lazyLoader/lazyLoaderIntersectionObserver.js @@ -10,10 +10,7 @@ export class LazyLoader { const newObserver = new IntersectionObserver( (entries, observer) => { entries.forEach(entry => { - if (entry.isIntersecting) { - callback(entry); - observer.unobserve(entry.target); - } + callback(entry, observer); }); }, { diff --git a/src/controllers/movies/moviegenres.js b/src/controllers/movies/moviegenres.js index 9a45f59e06f..e1b4ac24e92 100644 --- a/src/controllers/movies/moviegenres.js +++ b/src/controllers/movies/moviegenres.js @@ -52,7 +52,11 @@ export default function (view, params, tabContent) { return !layoutManager.desktop; } - const fillItemsContainer = (entry) => { + const fillItemsContainer = (entry, observer) => { + if (!entry.isIntersecting) { + return; + } + const elem = entry.target; const id = elem.getAttribute('data-id'); const viewStyle = this.getCurrentViewStyle(); @@ -124,6 +128,8 @@ export default function (view, params, tabContent) { if (result.Items.length >= query.Limit) { tabContent.querySelector('.btnMoreFromGenre' + id + ' .material-icons').classList.remove('hide'); } + }).then(() => { + observer.unobserve(elem); }); }; diff --git a/src/controllers/shows/tvgenres.js b/src/controllers/shows/tvgenres.js index c1c360a8319..77086db3b0d 100644 --- a/src/controllers/shows/tvgenres.js +++ b/src/controllers/shows/tvgenres.js @@ -52,7 +52,11 @@ export default function (view, params, tabContent) { return !layoutManager.desktop; } - function fillItemsContainer(entry) { + function fillItemsContainer(entry, observer) { + if (!entry.isIntersecting) { + return; + } + const elem = entry.target; const id = elem.getAttribute('data-id'); const viewStyle = self.getCurrentViewStyle(); @@ -124,6 +128,8 @@ export default function (view, params, tabContent) { if (result.Items.length >= query.Limit) { tabContent.querySelector('.btnMoreFromGenre' + id + ' .material-icons').classList.remove('hide'); } + }).then(() => { + observer.unobserve(elem); }); } From b3df9f89f1f541116b4e45f7fcd8c6eb961238ee Mon Sep 17 00:00:00 2001 From: Nicholas Jorgenson Date: Mon, 28 Apr 2025 13:51:51 -0400 Subject: [PATCH 4/4] Reduce time window in which callback may be executed again --- src/controllers/movies/moviegenres.js | 4 ++-- src/controllers/shows/tvgenres.js | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/controllers/movies/moviegenres.js b/src/controllers/movies/moviegenres.js index e1b4ac24e92..b9fa8bc5003 100644 --- a/src/controllers/movies/moviegenres.js +++ b/src/controllers/movies/moviegenres.js @@ -58,6 +58,8 @@ export default function (view, params, tabContent) { } const elem = entry.target; + observer.unobserve(elem); + const id = elem.getAttribute('data-id'); const viewStyle = this.getCurrentViewStyle(); let limit = viewStyle == 'Thumb' || viewStyle == 'ThumbCard' ? 5 : 9; @@ -128,8 +130,6 @@ export default function (view, params, tabContent) { if (result.Items.length >= query.Limit) { tabContent.querySelector('.btnMoreFromGenre' + id + ' .material-icons').classList.remove('hide'); } - }).then(() => { - observer.unobserve(elem); }); }; diff --git a/src/controllers/shows/tvgenres.js b/src/controllers/shows/tvgenres.js index 77086db3b0d..6c598262704 100644 --- a/src/controllers/shows/tvgenres.js +++ b/src/controllers/shows/tvgenres.js @@ -58,6 +58,8 @@ export default function (view, params, tabContent) { } const elem = entry.target; + observer.unobserve(elem); + const id = elem.getAttribute('data-id'); const viewStyle = self.getCurrentViewStyle(); let limit = viewStyle == 'Thumb' || viewStyle == 'ThumbCard' ? 5 : 9; @@ -128,8 +130,6 @@ export default function (view, params, tabContent) { if (result.Items.length >= query.Limit) { tabContent.querySelector('.btnMoreFromGenre' + id + ' .material-icons').classList.remove('hide'); } - }).then(() => { - observer.unobserve(elem); }); }