Connected Trackers

{#if trackersError}
trackersError = null} role="button" tabindex="0" onkeydown={(e) => e.key === "Enter" && (trackersError = null)}>{trackersError}
{/if} {#if trackersLoading}

Loading trackers…

{:else} {#each trackers as tracker}
{tracker.name}
{tracker.isLoggedIn ? "Connected" : "Not connected"} {#if tracker.isLoggedIn && tracker.isTokenExpired} Token expired — reconnect {/if}
{#if tracker.isLoggedIn && tracker.isTokenExpired} {:else if tracker.isLoggedIn} {:else if oauthTrackerId !== tracker.id && credsTrackerId !== tracker.id} {/if}
{#if oauthTrackerId === tracker.id}
{#if oauthError}
oauthError = null} role="button" tabindex="0" onkeydown={(e) => e.key === "Enter" && (oauthError = null)}>{oauthError}
{/if}

Browser opened {tracker.name} login — authorise then paste the callback URL below.

{ if (e.key === "Enter") submitOAuth(); if (e.key === "Escape") cancelOAuth(); }} use:focusEl />
{/if} {#if credsTrackerId === tracker.id}
{#if credsError}
credsError = null} role="button" tabindex="0" onkeydown={(e) => e.key === "Enter" && (credsError = null)}>{credsError}
{/if} e.key === "Escape" && cancelCredentials()} use:focusEl /> { if (e.key === "Enter") submitCredentials(); if (e.key === "Escape") cancelCredentials(); }} />
{/if}
{/each} {/if}

Sync back from tracker

Enable sync back Mark chapters read locally based on tracker progress
{#if store.settings.trackerSyncBack} {#if store.settings.trackerSyncBackThreshold !== null}
ToleranceMax chapter number difference allowed (1–20)
{store.settings.trackerSyncBackThreshold}
{/if}
Respect scanlator filter Only mark chapters matching the series' active scanlator filter
Sync now Apply tracker progress to all linked manga in your library
{/if}