Fix watchlist refresh progress fill

This commit is contained in:
Dymas
2026-08-18 19:56:38 +02:00
parent ba8e55bd97
commit 3e95252eb4
5 changed files with 18 additions and 8 deletions
+4
View File
@@ -1,5 +1,9 @@
# 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
- Replaced duplicated Watchlist refresh-all progress text with a single progress bar and current-anime label.
+1 -1
View File
@@ -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 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.
- 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.
- Hand completed libraries to Jellyfin TV or movie folders.
- Export/import watchlist backups.
+1 -1
View File
@@ -1 +1 @@
0.52.15
0.52.16
+3 -1
View File
@@ -4304,8 +4304,10 @@ class TemplateHelperTests(unittest.TestCase):
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-fill" id="refreshJobFill"', APP.WATCHLIST_HTML)
self.assertIn('role="progressbar"', 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.assertEqual(APP.WATCHLIST_HTML.count('id="refreshJobStatus"'), 1)
self.assertNotIn("refreshed${job.current_title", APP.WATCHLIST_HTML)
+9 -5
View File
@@ -283,8 +283,10 @@ WATCHLIST_HTML = r"""<!doctype html>
background: linear-gradient(90deg, var(--accent), var(--accent-2));
border-radius: inherit;
height: 100%;
transition: width 0.2s ease;
width: 0%;
transform: scaleX(0);
transform-origin: left center;
transition: transform 0.2s ease;
width: 100%;
}
.refresh-progress-current {
color: #ddd0ff;
@@ -759,7 +761,7 @@ WATCHLIST_HTML = r"""<!doctype html>
<span>Refresh progress</span>
<span id="refreshJobCount">0 / 0</span>
</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>
<div class="refresh-progress-current" id="refreshJobCurrent"></div>
@@ -926,7 +928,8 @@ WATCHLIST_HTML = r"""<!doctype html>
if (!el) return;
if (!job) {
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";
$("refreshJobCurrent").textContent = "";
return;
@@ -935,7 +938,8 @@ WATCHLIST_HTML = r"""<!doctype html>
const total = Number(job.total || 0);
const percent = refreshJobPercent(job);
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}`;
if (job.status === "pending") {
$("refreshJobCurrent").textContent = job.message || "Waiting to start refresh.";