From a0650f05485706bc879a5c922d0fba9e0c67f07f Mon Sep 17 00:00:00 2001 From: ZXY101 Date: Fri, 22 Sep 2023 16:51:50 +0200 Subject: [PATCH 1/8] Cleanup settings --- src/lib/components/NavBar.svelte | 2 +- src/lib/components/Settings.svelte | 113 ------------------ .../Settings/AnkiConnectSettings.svelte | 65 ++++++++++ .../components/Settings/ReaderSelects.svelte | 62 ++++++++++ .../components/Settings/ReaderSettings.svelte | 15 +++ .../components/Settings/ReaderToggles.svelte | 19 +++ src/lib/components/Settings/Settings.svelte | 52 ++++++++ src/lib/settings/index.ts | 37 +++++- 8 files changed, 249 insertions(+), 116 deletions(-) delete mode 100644 src/lib/components/Settings.svelte create mode 100644 src/lib/components/Settings/AnkiConnectSettings.svelte create mode 100644 src/lib/components/Settings/ReaderSelects.svelte create mode 100644 src/lib/components/Settings/ReaderSettings.svelte create mode 100644 src/lib/components/Settings/ReaderToggles.svelte create mode 100644 src/lib/components/Settings/Settings.svelte diff --git a/src/lib/components/NavBar.svelte b/src/lib/components/NavBar.svelte index b3bfd56..609f792 100644 --- a/src/lib/components/NavBar.svelte +++ b/src/lib/components/NavBar.svelte @@ -3,7 +3,7 @@ import { UserSettingsSolid, UploadSolid } from 'flowbite-svelte-icons'; import { afterNavigate } from '$app/navigation'; import { page } from '$app/stores'; - import Settings from './Settings.svelte'; + import Settings from './Settings/Settings.svelte'; import UploadModal from './UploadModal.svelte'; import { settings } from '$lib/settings'; diff --git a/src/lib/components/Settings.svelte b/src/lib/components/Settings.svelte deleted file mode 100644 index 2cf84d1..0000000 --- a/src/lib/components/Settings.svelte +++ /dev/null @@ -1,113 +0,0 @@ - - - -
-
- Settings -
- (hidden = true)} class="mb-4 dark:text-white" /> -
-
-
- - onSelectChange(e, 'fontSize')} - /> -
-
- - -
- -
-
diff --git a/src/lib/components/Settings/AnkiConnectSettings.svelte b/src/lib/components/Settings/AnkiConnectSettings.svelte new file mode 100644 index 0000000..fa04b22 --- /dev/null +++ b/src/lib/components/Settings/AnkiConnectSettings.svelte @@ -0,0 +1,65 @@ + + + + Anki Connect +
+
+ updateAnkiSetting('enabled', enabled)} + >AnkiConnect Integration Enabled +
+
+ + updateAnkiSetting('pictureField', pictureField)} + /> +
+
+ + updateAnkiSetting('sentenceField', sentenceField)} + /> +
+
+ updateAnkiSetting('cropImage', cropImage)}>Crop image +
+
+ updateAnkiSetting('overwriteImage', overwriteImage)} + >Overwrite image +
+
+ updateAnkiSetting('grabSentence', grabSentence)}>Grab sentence +
+
+
diff --git a/src/lib/components/Settings/ReaderSelects.svelte b/src/lib/components/Settings/ReaderSelects.svelte new file mode 100644 index 0000000..5d3f8cb --- /dev/null +++ b/src/lib/components/Settings/ReaderSelects.svelte @@ -0,0 +1,62 @@ + + +
+ + onSelectChange(e, 'fontSize')} + /> +
+
+ + +
diff --git a/src/lib/components/Settings/ReaderSettings.svelte b/src/lib/components/Settings/ReaderSettings.svelte new file mode 100644 index 0000000..4c8a365 --- /dev/null +++ b/src/lib/components/Settings/ReaderSettings.svelte @@ -0,0 +1,15 @@ + + + + Reader +
+ +
+ +
+
diff --git a/src/lib/components/Settings/ReaderToggles.svelte b/src/lib/components/Settings/ReaderToggles.svelte new file mode 100644 index 0000000..df2d22a --- /dev/null +++ b/src/lib/components/Settings/ReaderToggles.svelte @@ -0,0 +1,19 @@ + + +{#each toggles as { key, text, value }} + updateSetting(key, !value)}>{text} +{/each} diff --git a/src/lib/components/Settings/Settings.svelte b/src/lib/components/Settings/Settings.svelte new file mode 100644 index 0000000..985ae3f --- /dev/null +++ b/src/lib/components/Settings/Settings.svelte @@ -0,0 +1,52 @@ + + + +
+
+ Settings +
+ +
+
+ + + + +
+ + +
+
+
diff --git a/src/lib/settings/index.ts b/src/lib/settings/index.ts index 6d06725..d1d21bf 100644 --- a/src/lib/settings/index.ts +++ b/src/lib/settings/index.ts @@ -37,13 +37,26 @@ export type Settings = { backgroundColor: string; fontSize: FontSize; zoomDefault: ZoomModes; + ankiConnectSettings: AnkiConnectSettings; }; export type SettingsKey = keyof Settings; +export type AnkiConnectSettings = { + enabled: boolean; + pictureField: string; + sentenceField: string; + cropImage: boolean; + overwriteImage: boolean; + grabSentence: boolean; +} + +export type AnkiSettingsKey = keyof AnkiConnectSettings; + + const defaultSettings: Settings = { rightToLeft: true, - singlePageView: true, + singlePageView: false, hasCover: false, displayOCR: true, textEditable: false, @@ -52,7 +65,15 @@ const defaultSettings: Settings = { pageNum: true, backgroundColor: '#0d0d0f', fontSize: 'auto', - zoomDefault: 'zoomFitToScreen' + zoomDefault: 'zoomFitToScreen', + ankiConnectSettings: { + enabled: false, + cropImage: false, + grabSentence: false, + overwriteImage: true, + pictureField: 'Picture', + sentenceField: 'Sentence' + } }; const stored = browser ? window.localStorage.getItem('settings') : undefined; @@ -72,6 +93,18 @@ export function updateSetting(key: SettingsKey, value: any) { zoomDefault(); } +export function updateAnkiSetting(key: AnkiSettingsKey, value: any) { + settings.update((settings) => { + return { + ...settings, + ankiConnectSettings: { + ...settings.ankiConnectSettings, + [key]: value + } + }; + }); +} + export function resetSettings() { settings.set(defaultSettings); } From 6c09370a4578791055f59381a79cf9386a3af0d6 Mon Sep 17 00:00:00 2001 From: ZXY101 Date: Fri, 22 Sep 2023 16:52:11 +0200 Subject: [PATCH 2/8] Begin adding anki connect integration --- src/lib/anki-connect/index.ts | 47 +++++++++++++++++++++++++++++++++++ 1 file changed, 47 insertions(+) create mode 100644 src/lib/anki-connect/index.ts diff --git a/src/lib/anki-connect/index.ts b/src/lib/anki-connect/index.ts new file mode 100644 index 0000000..32a26b6 --- /dev/null +++ b/src/lib/anki-connect/index.ts @@ -0,0 +1,47 @@ +import { showSnackbar } from "$lib/util" + +export async function ankiConnect(action: string, params: Record) { + + + try { + const res = await fetch('http://127.0.0.1:8765', { + method: 'POST', + body: JSON.stringify({ action, params, version: 6 }) + }) + const json = await res.json() + + if (json.error) { + throw new Error(json.error) + } + + return json.result; + } catch (e: any) { + showSnackbar(`Error: ${e?.message ?? e}`) + } +} + +export async function getCardInfo(id: string) { + const [noteInfo] = await ankiConnect('notesInfo', { notes: [id] }); + return noteInfo; +} + +export async function getLastCardId() { + const notesToday = await ankiConnect('findNotes', { query: 'added:1' }); + const id = notesToday.sort().at(-1); + return id +} + +export async function getLastCardInfo() { + const id = await getLastCardId() + return await getCardInfo(id); +} + +export function getCardAgeInMin(id: number) { + return Math.floor((Date.now() - id) / 60000); +} + +export async function updateLastCard() { + const id = await getLastCardId() + + return Math.floor((Date.now() - id) / 60000); +} \ No newline at end of file From 70dd6882c1fb637b8f6f7414351cf9bb5ec16fed Mon Sep 17 00:00:00 2001 From: ZXY101 Date: Fri, 22 Sep 2023 17:12:26 +0200 Subject: [PATCH 3/8] Anki connect integration testing --- src/lib/components/Reader/TextBoxes.svelte | 19 ++++++++++++++++++- src/lib/components/Snackbar.svelte | 2 +- 2 files changed, 19 insertions(+), 2 deletions(-) diff --git a/src/lib/components/Reader/TextBoxes.svelte b/src/lib/components/Reader/TextBoxes.svelte index 9dc1664..e8fb87e 100644 --- a/src/lib/components/Reader/TextBoxes.svelte +++ b/src/lib/components/Reader/TextBoxes.svelte @@ -1,7 +1,9 @@ {#each textBoxes as { fontSize, height, left, lines, top, width, writingMode }, index (`text-box-${index}`)} @@ -52,6 +60,11 @@ style:border {contenteditable} > + {#if $settings.ankiConnectSettings.enabled} + + {/if} {#each lines as line}

{line}

{/each} @@ -87,6 +100,10 @@ font-weight: var(--bold); } + .text-box:hover button { + opacity: 100; + } + .text-box:focus p, .text-box:hover p { display: table; diff --git a/src/lib/components/Snackbar.svelte b/src/lib/components/Snackbar.svelte index 008c633..28e5bfa 100644 --- a/src/lib/components/Snackbar.svelte +++ b/src/lib/components/Snackbar.svelte @@ -4,5 +4,5 @@ {#if $snackbarStore?.message && $snackbarStore?.visible} - {$snackbarStore?.message} + {$snackbarStore?.message} {/if} From c3c94a604cb05f1b176014fb8e8e2f1d4ab65932 Mon Sep 17 00:00:00 2001 From: ZXY101 Date: Sat, 23 Sep 2023 06:46:21 +0200 Subject: [PATCH 4/8] Profiles mock --- src/lib/components/Settings/Profiles.svelte | 19 +++++++++++++++++++ .../components/Settings/ReaderSettings.svelte | 2 +- src/lib/components/Settings/Settings.svelte | 2 ++ src/lib/upload/index.ts | 2 +- 4 files changed, 23 insertions(+), 2 deletions(-) create mode 100644 src/lib/components/Settings/Profiles.svelte diff --git a/src/lib/components/Settings/Profiles.svelte b/src/lib/components/Settings/Profiles.svelte new file mode 100644 index 0000000..c5820ae --- /dev/null +++ b/src/lib/components/Settings/Profiles.svelte @@ -0,0 +1,19 @@ + + + + Profile +
+