From 9653189bff025682d7dec40b371d19ff327282c1 Mon Sep 17 00:00:00 2001
From: Brock H Caldwell
Date: Tue, 16 Sep 2025 21:48:23 -0500
Subject: [PATCH] feat: lazy loads torrentio results on episodes, adds loading
indicator for episodes and movies
---
assets/controllers/movie_results_controller.js | 2 --
assets/controllers/result_filter_controller.js | 7 +------
assets/controllers/tv_results_controller.js | 2 --
templates/components/Filter.html.twig | 1 -
templates/components/TvEpisodeList.html.twig | 9 +++++----
templates/search/result.html.twig | 5 +++--
6 files changed, 9 insertions(+), 17 deletions(-)
diff --git a/assets/controllers/movie_results_controller.js b/assets/controllers/movie_results_controller.js
index 7e3712f..18ca4e8 100644
--- a/assets/controllers/movie_results_controller.js
+++ b/assets/controllers/movie_results_controller.js
@@ -13,7 +13,6 @@ export default class extends Controller {
};
static targets = ['list']
- static outlets = ['loading-icon']
options = []
optionsLoaded = false
@@ -28,7 +27,6 @@ export default class extends Controller {
this.options = this.element.querySelectorAll('tbody tr');
this.options.forEach((option) => option.querySelector('.download-btn').dataset['title'] = this.titleValue);
this.resultCountEl.innerText = this.options.length;
- this.loadingIconOutlet.toggleIcon();
document.dispatchEvent(new CustomEvent('optionsLoaded', {detail: {options: this.options}}));
}
}
diff --git a/assets/controllers/result_filter_controller.js b/assets/controllers/result_filter_controller.js
index 2ff35c8..2dd522c 100644
--- a/assets/controllers/result_filter_controller.js
+++ b/assets/controllers/result_filter_controller.js
@@ -22,7 +22,7 @@ export default class extends Controller {
defaultOptions = '';
static outlets = ['tv-episode-list']
- static targets = ['resolution', 'codec', 'language', 'provider', 'season', 'quality', 'loadingIcon', 'selectAll', 'downloadSelected']
+ static targets = ['resolution', 'codec', 'language', 'provider', 'season', 'quality', 'selectAll', 'downloadSelected']
static values = {
'imdbId': String,
'media-type': String,
@@ -32,7 +32,6 @@ export default class extends Controller {
async connect() {
await this.setInitialFilter();
- this.setTimerToStopLoadingIcon();
this.element.filterResults = this.filter.bind(this);
document.addEventListener('optionsLoaded', this.loadOptions.bind(this));
}
@@ -48,10 +47,6 @@ export default class extends Controller {
}
}
- setTimerToStopLoadingIcon() {
- setTimeout(() => this.loadingIconTarget.hideIcon(), 10000);
- }
-
// Event is fired from movies/tvshows controllers to populate this data
async loadOptions({detail: { options }}) {
await options.forEach((option) => {
diff --git a/assets/controllers/tv_results_controller.js b/assets/controllers/tv_results_controller.js
index ce1d821..f5c4071 100644
--- a/assets/controllers/tv_results_controller.js
+++ b/assets/controllers/tv_results_controller.js
@@ -19,7 +19,6 @@ export default class extends Controller {
};
static targets = ['list', 'count', 'episodeSelector',]
- static outlets = ['loading-icon']
options = []
@@ -35,6 +34,5 @@ export default class extends Controller {
this.countTarget.innerText = 0;
this.episodeSelectorTarget.disabled = true;
}
- this.loadingIconOutlet.increaseCount();
}
}
diff --git a/templates/components/Filter.html.twig b/templates/components/Filter.html.twig
index 3d68230..e0cba34 100644
--- a/templates/components/Filter.html.twig
+++ b/templates/components/Filter.html.twig
@@ -44,7 +44,6 @@
{{ stimulus_target('result-filter', 'loadingIcon') }}
{{ stimulus_controller('loading_icon', {total: (results.media.mediaType == "tvshows") ? results.media.episodes[1]|length : 1, count: 0}) }}
class="loading-icon">
-
{% if results.media.mediaType == "tvshows" %}
diff --git a/templates/components/TvEpisodeList.html.twig b/templates/components/TvEpisodeList.html.twig
index 0fcb12a..b085d26 100644
--- a/templates/components/TvEpisodeList.html.twig
+++ b/templates/components/TvEpisodeList.html.twig
@@ -5,7 +5,6 @@
{% for episode in this.getEpisodes().items %}
{{ episode.description|truncate }}
@@ -72,14 +71,16 @@
-
+ }) }}">
+
+
diff --git a/templates/search/result.html.twig b/templates/search/result.html.twig
index d6d496b..d82e504 100644
--- a/templates/search/result.html.twig
+++ b/templates/search/result.html.twig
@@ -125,14 +125,15 @@
{% if "movies" == results.media.mediaType %}
+ }) }}">
+
+
{% elseif "tvshows" == results.media.mediaType %}