Fix: Attempt to fix Reader Page-Misfiring Bug & Optimize Loading (Auth Only)

This commit is contained in:
Youwes09
2026-04-14 20:54:16 -05:00
parent 5ddbfdbd6d
commit 10f5936dbd
3 changed files with 36 additions and 14 deletions
+7
View File
@@ -31,7 +31,14 @@ In-Progress:
- Enable Cloudflare Bypass (Suwayomi Config) (Requires Patching) - Enable Cloudflare Bypass (Suwayomi Config) (Requires Patching)
- Working on 3D Display Cards - Working on 3D Display Cards
- Chapter refresh Notification Looks bad (Series Detail)
- Fix Discover Workout
- Fix CSS on Saved State for Search
- Fix State & Cache names (Mapped to Discover hence needs Renaming)
- Completely Remove Discover
- Add Small QOL Animations where Appropriate
+7 -5
View File
@@ -642,8 +642,8 @@
if (style === "double" && pageGroups.length) { advanceGroup(true); return; } if (style === "double" && pageGroups.length) { advanceGroup(true); return; }
if (!store.pageUrls.length) return; if (!store.pageUrls.length) return;
if (store.pageNumber < lastPage) { if (store.pageNumber < lastPage) {
if (style === "fade") { animateFade(() => { store.pageNumber++; }); } if (style === "fade") { animateFade(() => { store.pageNumber = Math.min(lastPage, store.pageNumber + pageStep); }); }
else { store.pageNumber++; } else { store.pageNumber = Math.min(lastPage, store.pageNumber + pageStep); }
} else if (adjacent.next) { } else if (adjacent.next) {
maybeMarkCurrentRead(); maybeMarkCurrentRead();
store.pageNumber = 1; store.pageNumber = 1;
@@ -660,11 +660,13 @@
if (style === "double" && pageGroups.length) { advanceGroup(false); return; } if (style === "double" && pageGroups.length) { advanceGroup(false); return; }
if (!store.pageUrls.length) return; if (!store.pageUrls.length) return;
if (store.pageNumber > 1) { if (store.pageNumber > 1) {
if (style === "fade") { animateFade(() => { store.pageNumber--; }); } if (style === "fade") { animateFade(() => { store.pageNumber = Math.max(1, store.pageNumber - pageStep); }); }
else { store.pageNumber--; } else { store.pageNumber = Math.max(1, store.pageNumber - pageStep); }
} else if (adjacent.prev) { startAtLastPage = true; openReader(adjacent.prev, store.activeChapterList); } } else if (adjacent.prev) { startAtLastPage = true; openReader(adjacent.prev, store.activeChapterList); }
} }
const pageStep = $derived(style === "double" ? 2 : 1);
const goNext = $derived(rtl ? goBack : goForward); const goNext = $derived(rtl ? goBack : goForward);
const goPrev = $derived(rtl ? goForward : goBack); const goPrev = $derived(rtl ? goForward : goBack);
@@ -1019,12 +1021,12 @@
<button class="mode-btn" class:active={autoNext} onclick={() => updateSettings({ autoNextChapter: !autoNext })}> <button class="mode-btn" class:active={autoNext} onclick={() => updateSettings({ autoNextChapter: !autoNext })}>
<span class="mode-label">Auto</span> <span class="mode-label">Auto</span>
</button> </button>
{/if}
{#if !autoNext} {#if !autoNext}
<button class="mode-btn" class:active={markOnNext} onclick={() => updateSettings({ markReadOnNext: !markOnNext })}> <button class="mode-btn" class:active={markOnNext} onclick={() => updateSettings({ markReadOnNext: !markOnNext })}>
<span class="mode-label">Mk.Read</span> <span class="mode-label">Mk.Read</span>
</button> </button>
{/if} {/if}
{/if}
</div> </div>
<button class="mode-btn" onclick={() => dlOpen = true}> <button class="mode-btn" onclick={() => dlOpen = true}>
+18 -5
View File
@@ -4,7 +4,7 @@ import { store } from "../store/state.svelte";
const cache = new Map<string, string>(); const cache = new Map<string, string>();
const inflight = new Map<string, Promise<string>>(); const inflight = new Map<string, Promise<string>>();
const MAX_CONCURRENT = 14; const MAX_CONCURRENT = 6;
let active = 0; let active = 0;
interface QueueEntry { interface QueueEntry {
@@ -30,9 +30,18 @@ async function doFetch(url: string): Promise<string> {
return blobUrl; return blobUrl;
} }
function insertSorted(entry: QueueEntry) {
let lo = 0, hi = queue.length;
while (lo < hi) {
const mid = (lo + hi) >>> 1;
if (queue[mid].priority > entry.priority) lo = mid + 1;
else hi = mid;
}
queue.splice(lo, 0, entry);
}
function drain() { function drain() {
while (active < MAX_CONCURRENT && queue.length > 0) { while (active < MAX_CONCURRENT && queue.length > 0) {
queue.sort((a, b) => b.priority - a.priority);
const entry = queue.shift()!; const entry = queue.shift()!;
active++; active++;
doFetch(entry.url) doFetch(entry.url)
@@ -47,7 +56,7 @@ function drain() {
function enqueue(url: string, priority: number): Promise<string> { function enqueue(url: string, priority: number): Promise<string> {
const promise = new Promise<string>((resolve, reject) => { const promise = new Promise<string>((resolve, reject) => {
queue.push({ url, priority, resolve, reject }); insertSorted({ url, priority, resolve, reject });
}); });
inflight.set(url, promise); inflight.set(url, promise);
drain(); drain();
@@ -62,8 +71,12 @@ export function getBlobUrl(url: string, priority = 0): Promise<string> {
const existing = inflight.get(url); const existing = inflight.get(url);
if (existing) { if (existing) {
const entry = queue.find(e => e.url === url); const idx = queue.findIndex(e => e.url === url);
if (entry && priority > entry.priority) entry.priority = priority; if (idx !== -1 && priority > queue[idx].priority) {
const [entry] = queue.splice(idx, 1);
entry.priority = priority;
insertSorted(entry);
}
return existing; return existing;
} }