Fix watchlist refresh progress fill
This commit is contained in:
@@ -1,5 +1,9 @@
|
|||||||
# Changelog
|
# Changelog
|
||||||
|
|
||||||
|
## 0.52.16 - 2026-08-18
|
||||||
|
|
||||||
|
- Fixed the Watchlist refresh-all progress bar fill so it visibly advances as refresh progress updates arrive.
|
||||||
|
|
||||||
## 0.52.15 - 2026-08-18
|
## 0.52.15 - 2026-08-18
|
||||||
|
|
||||||
- Replaced duplicated Watchlist refresh-all progress text with a single progress bar and current-anime label.
|
- Replaced duplicated Watchlist refresh-all progress text with a single progress bar and current-anime label.
|
||||||
|
|||||||
@@ -15,7 +15,7 @@ Kaizoku is a local web app for searching, tracking, and downloading anime from A
|
|||||||
- Save files with Jellyfin-friendly layout: `TV/Series Name/Season 01/Series Name - S01E01.mp4`.
|
- Save files with Jellyfin-friendly layout: `TV/Series Name/Season 01/Series Name - S01E01.mp4`.
|
||||||
- Save English external subtitles when the provider exposes usable subtitle tracks.
|
- Save English external subtitles when the provider exposes usable subtitle tracks.
|
||||||
- Manage focused watchlists for `Watching`, `Planned`, `Finished`, and `Dropped`, with provider source tags and title links back to the original provider page.
|
- Manage focused watchlists for `Watching`, `Planned`, `Finished`, and `Dropped`, with provider source tags and title links back to the original provider page.
|
||||||
- Periodically refresh selected watchlists with a single progress bar and auto-download newly available episodes.
|
- Periodically refresh selected watchlists with a single advancing progress bar and auto-download newly available episodes.
|
||||||
- Sync watchlist download flags from the filesystem.
|
- Sync watchlist download flags from the filesystem.
|
||||||
- Hand completed libraries to Jellyfin TV or movie folders.
|
- Hand completed libraries to Jellyfin TV or movie folders.
|
||||||
- Export/import watchlist backups.
|
- Export/import watchlist backups.
|
||||||
|
|||||||
+3
-1
@@ -4304,8 +4304,10 @@ class TemplateHelperTests(unittest.TestCase):
|
|||||||
def test_watchlist_page_renders_single_refresh_progress_bar(self):
|
def test_watchlist_page_renders_single_refresh_progress_bar(self):
|
||||||
self.assertIn('class="refresh-progress" id="refreshJobStatus"', APP.WATCHLIST_HTML)
|
self.assertIn('class="refresh-progress" id="refreshJobStatus"', APP.WATCHLIST_HTML)
|
||||||
self.assertIn('class="refresh-progress-fill" id="refreshJobFill"', APP.WATCHLIST_HTML)
|
self.assertIn('class="refresh-progress-fill" id="refreshJobFill"', APP.WATCHLIST_HTML)
|
||||||
|
self.assertIn('role="progressbar"', APP.WATCHLIST_HTML)
|
||||||
self.assertIn("function refreshJobPercent(job)", APP.WATCHLIST_HTML)
|
self.assertIn("function refreshJobPercent(job)", APP.WATCHLIST_HTML)
|
||||||
self.assertIn('$("refreshJobFill").style.width = `${percent}%`;', APP.WATCHLIST_HTML)
|
self.assertIn('$("refreshJobFill").style.transform = `scaleX(${percent / 100})`;', APP.WATCHLIST_HTML)
|
||||||
|
self.assertIn('setAttribute("aria-valuenow", String(percent))', APP.WATCHLIST_HTML)
|
||||||
self.assertIn('`Refreshing ${job.current_title}`', APP.WATCHLIST_HTML)
|
self.assertIn('`Refreshing ${job.current_title}`', APP.WATCHLIST_HTML)
|
||||||
self.assertEqual(APP.WATCHLIST_HTML.count('id="refreshJobStatus"'), 1)
|
self.assertEqual(APP.WATCHLIST_HTML.count('id="refreshJobStatus"'), 1)
|
||||||
self.assertNotIn("refreshed${job.current_title", APP.WATCHLIST_HTML)
|
self.assertNotIn("refreshed${job.current_title", APP.WATCHLIST_HTML)
|
||||||
|
|||||||
+9
-5
@@ -283,8 +283,10 @@ WATCHLIST_HTML = r"""<!doctype html>
|
|||||||
background: linear-gradient(90deg, var(--accent), var(--accent-2));
|
background: linear-gradient(90deg, var(--accent), var(--accent-2));
|
||||||
border-radius: inherit;
|
border-radius: inherit;
|
||||||
height: 100%;
|
height: 100%;
|
||||||
transition: width 0.2s ease;
|
transform: scaleX(0);
|
||||||
width: 0%;
|
transform-origin: left center;
|
||||||
|
transition: transform 0.2s ease;
|
||||||
|
width: 100%;
|
||||||
}
|
}
|
||||||
.refresh-progress-current {
|
.refresh-progress-current {
|
||||||
color: #ddd0ff;
|
color: #ddd0ff;
|
||||||
@@ -759,7 +761,7 @@ WATCHLIST_HTML = r"""<!doctype html>
|
|||||||
<span>Refresh progress</span>
|
<span>Refresh progress</span>
|
||||||
<span id="refreshJobCount">0 / 0</span>
|
<span id="refreshJobCount">0 / 0</span>
|
||||||
</div>
|
</div>
|
||||||
<div class="refresh-progress-track" aria-hidden="true">
|
<div class="refresh-progress-track" aria-valuemax="100" aria-valuemin="0" aria-valuenow="0" role="progressbar">
|
||||||
<div class="refresh-progress-fill" id="refreshJobFill"></div>
|
<div class="refresh-progress-fill" id="refreshJobFill"></div>
|
||||||
</div>
|
</div>
|
||||||
<div class="refresh-progress-current" id="refreshJobCurrent"></div>
|
<div class="refresh-progress-current" id="refreshJobCurrent"></div>
|
||||||
@@ -926,7 +928,8 @@ WATCHLIST_HTML = r"""<!doctype html>
|
|||||||
if (!el) return;
|
if (!el) return;
|
||||||
if (!job) {
|
if (!job) {
|
||||||
el.classList.remove("visible");
|
el.classList.remove("visible");
|
||||||
$("refreshJobFill").style.width = "0%";
|
$("refreshJobFill").style.transform = "scaleX(0)";
|
||||||
|
el.querySelector(".refresh-progress-track").setAttribute("aria-valuenow", "0");
|
||||||
$("refreshJobCount").textContent = "0 / 0";
|
$("refreshJobCount").textContent = "0 / 0";
|
||||||
$("refreshJobCurrent").textContent = "";
|
$("refreshJobCurrent").textContent = "";
|
||||||
return;
|
return;
|
||||||
@@ -935,7 +938,8 @@ WATCHLIST_HTML = r"""<!doctype html>
|
|||||||
const total = Number(job.total || 0);
|
const total = Number(job.total || 0);
|
||||||
const percent = refreshJobPercent(job);
|
const percent = refreshJobPercent(job);
|
||||||
el.classList.toggle("visible", job.status === "running" || job.status === "pending");
|
el.classList.toggle("visible", job.status === "running" || job.status === "pending");
|
||||||
$("refreshJobFill").style.width = `${percent}%`;
|
$("refreshJobFill").style.transform = `scaleX(${percent / 100})`;
|
||||||
|
el.querySelector(".refresh-progress-track").setAttribute("aria-valuenow", String(percent));
|
||||||
$("refreshJobCount").textContent = `${completed} / ${total}`;
|
$("refreshJobCount").textContent = `${completed} / ${total}`;
|
||||||
if (job.status === "pending") {
|
if (job.status === "pending") {
|
||||||
$("refreshJobCurrent").textContent = job.message || "Waiting to start refresh.";
|
$("refreshJobCurrent").textContent = job.message || "Waiting to start refresh.";
|
||||||
|
|||||||
Reference in New Issue
Block a user