From d8ebb596e516d5774c0bb20aeb44b3f2c78bf1d7 Mon Sep 17 00:00:00 2001 From: ThaUnknown <6506529+ThaUnknown@users.noreply.github.com> Date: Thu, 17 Jul 2025 13:08:17 +0200 Subject: [PATCH] fix: rating scale on kitsu, local and MAL fix: initial focus element when using keyboard navigation --- src/lib/components/ui/sidebar/sidebarlist.svelte | 2 +- src/lib/modules/auth/kitsu-types.d.ts | 2 +- src/lib/modules/auth/kitsu.ts | 3 ++- src/lib/modules/auth/local.ts | 7 +++++-- src/lib/modules/auth/mal.ts | 2 +- src/lib/modules/navigate.ts | 5 ++++- 6 files changed, 14 insertions(+), 7 deletions(-) diff --git a/src/lib/components/ui/sidebar/sidebarlist.svelte b/src/lib/components/ui/sidebar/sidebarlist.svelte index 138976a..b18ccd2 100644 --- a/src/lib/components/ui/sidebar/sidebarlist.svelte +++ b/src/lib/components/ui/sidebar/sidebarlist.svelte @@ -3,7 +3,7 @@ import Heart from 'lucide-svelte/icons/heart' import House from 'lucide-svelte/icons/house' import LogIn from 'lucide-svelte/icons/log-in' - import MessagesSquare from 'lucide-svelte/icons/messages-square' + // import MessagesSquare from 'lucide-svelte/icons/messages-square' import Play from 'lucide-svelte/icons/play' import Search from 'lucide-svelte/icons/search' import Settings from 'lucide-svelte/icons/settings' diff --git a/src/lib/modules/auth/kitsu-types.d.ts b/src/lib/modules/auth/kitsu-types.d.ts index 0b64af0..026c3aa 100644 --- a/src/lib/modules/auth/kitsu-types.d.ts +++ b/src/lib/modules/auth/kitsu-types.d.ts @@ -79,7 +79,7 @@ export interface KEntry { startedAt?: string // Date finishedAt?: string rating?: string - ratingTwenty?: null + ratingTwenty?: string } export interface Fav { diff --git a/src/lib/modules/auth/kitsu.ts b/src/lib/modules/auth/kitsu.ts index 77c9018..48d3e95 100644 --- a/src/lib/modules/auth/kitsu.ts +++ b/src/lib/modules/auth/kitsu.ts @@ -455,7 +455,8 @@ export default new class KitsuSync { } if (variables.progress) kitsuEntryVariables.progress = variables.progress - if (variables.score) kitsuEntryVariables.rating = (variables.score < 2 ? undefined : variables.score.toString()) + // kitsu's rating is 2-20... aka 2 = 10, 20 = 100, insane, normalize this + if (variables.score) kitsuEntryVariables.ratingTwenty = variables.score < 10 ? undefined : (variables.score / 5).toString() if (variables.repeat) kitsuEntryVariables.reconsumeCount = variables.repeat if (kitsuEntry) { diff --git a/src/lib/modules/auth/local.ts b/src/lib/modules/auth/local.ts index 81fe476..9ff5553 100644 --- a/src/lib/modules/auth/local.ts +++ b/src/lib/modules/auth/local.ts @@ -123,10 +123,13 @@ export default new class LocalSync { status: null } - const keys = ['status', 'score', 'repeat', 'progress'] as const + const keys = ['status', 'score', 'repeat', 'progress'] as Array for (const key of keys) { + let value = variables[key] // @ts-expect-error idk how to fix this tbf - entry.mediaListEntry[key] = variables[key] ?? entry.mediaListEntry[key] ?? null + if (key === 'score' && value != null) value /= 10 + // @ts-expect-error idk how to fix this tbf + entry.mediaListEntry[key] = value ?? entry.mediaListEntry[key] ?? null } return { ...entries, [variables.id]: entry } }) diff --git a/src/lib/modules/auth/mal.ts b/src/lib/modules/auth/mal.ts index 071d2af..97d78ad 100644 --- a/src/lib/modules/auth/mal.ts +++ b/src/lib/modules/auth/mal.ts @@ -440,7 +440,7 @@ export default new class MALSync { } if (variables.progress) body.num_watched_episodes = variables.progress - if (variables.score) body.score = variables.score + if (variables.score) body.score = variables.score / 10 if (variables.repeat) body.num_times_rewatched = variables.repeat const res = await this._patch(`${ENDPOINTS.API_ANIME}/${malId}/my_list_status`, body) diff --git a/src/lib/modules/navigate.ts b/src/lib/modules/navigate.ts index 4d89e65..af125a0 100644 --- a/src/lib/modules/navigate.ts +++ b/src/lib/modules/navigate.ts @@ -218,7 +218,10 @@ function getElementsInDesiredDirection (keyboardFocusable: ElementPosition[], cu */ function navigateDPad (direction = 'up') { const keyboardFocusable = getFocusableElementPositions() - const currentElement = !document.activeElement || document.activeElement === document.body ? keyboardFocusable[0]! : getElementPosition(document.activeElement as HTMLElement) + const nofocus = !document.activeElement || document.activeElement === document.body + const currentElement = nofocus ? keyboardFocusable[0]! : getElementPosition(document.activeElement as HTMLElement) + + if (nofocus) return focusElement(currentElement.element) // allow overrides via data attributes ex:
but order them, as querySelectorAll returns them in order of appearance rather than order of selectors for (const selector of currentElement.element.dataset[direction]?.split(',') ?? []) {