From 574e7d017e63485d4bd864195d2224387c89e8e2 Mon Sep 17 00:00:00 2001 From: "David R. Myers" Date: Mon, 12 Aug 2024 19:30:28 -0400 Subject: [PATCH 1/2] Create `Main` database --- components/AssistantHistoryChat.vue | 2 +- components/AssistantHistoryChatMessage.vue | 2 +- composables/useChatMessages.ts | 2 +- composables/useChats.ts | 2 +- composables/useDatabase.ts | 2 +- composables/useSystemInstructions.ts | 2 +- .../database.ts => src/databases/assistant.ts | 8 +- src/databases/index.ts | 2 + src/databases/legacy.ts | 103 ++++++++++++++++++ src/databases/main.ts | 40 +++++++ src/databases/utils/toIndexes.ts | 3 + 11 files changed, 157 insertions(+), 11 deletions(-) rename helpers/database.ts => src/databases/assistant.ts (90%) create mode 100644 src/databases/index.ts create mode 100644 src/databases/legacy.ts create mode 100644 src/databases/main.ts create mode 100644 src/databases/utils/toIndexes.ts diff --git a/components/AssistantHistoryChat.vue b/components/AssistantHistoryChat.vue index 066b4253..76b5fba6 100644 --- a/components/AssistantHistoryChat.vue +++ b/components/AssistantHistoryChat.vue @@ -1,5 +1,5 @@ diff --git a/composables/useDocs.ts b/composables/useDocs.ts index 65191e7e..e5add869 100644 --- a/composables/useDocs.ts +++ b/composables/useDocs.ts @@ -1,5 +1,7 @@ import { useStore } from 'vuex' -import { type Doc } from '#root/src/models/doc' +import { getSettings } from '/src/databases/legacy' +import { main } from '/src/databases/main' +import { type Doc, unpack } from '/src/models/doc' const filterByDiscarded = (docs: MaybeRef) => { return toValue(docs).filter((doc) => { @@ -53,7 +55,22 @@ const sortByRecent = (docs: MaybeRef) => { export const useDocs = ({ filter }: { filter?: MaybeRef } = {}) => { const store = useStore() const router = useRouter() - const allDocs = computed(() => store.state.documents.all) + + const allDocs = ref([]) + + onMounted(async () => { + const docs = await main.docs.orderBy('updatedAt').reverse().toArray() + const settings = await getSettings() + const { privateKey } = settings?.crypto ?? {} + + for (const doc of docs) { + const unpacked = await unpack(doc, { privateKey }) + + allDocs.value.push(unpacked) + } + }) + + // const allDocs = computed(() => store.state.documents.all) const decryptedDocs = computed(() => allDocs.value.filter(doc => !doc.encrypted)) const sortedDocs = computed(() => sortByRecent(decryptedDocs)) const workspaceDocs = computed(() => filterByWorkspace(sortedDocs, store.state.context)) diff --git a/composables/useMarkdown.ts b/composables/useMarkdown.ts index b58ef09f..d69084e5 100644 --- a/composables/useMarkdown.ts +++ b/composables/useMarkdown.ts @@ -1,9 +1,18 @@ -import { type HtmlOptions, toHtml } from '#root/src/utils/markdown' - -export const useMarkdown = (options: HtmlOptions = {}) => { - return { - toHtml: (markdown: string, overrides: HtmlOptions = {}) => { - return toHtml(markdown, { ...options, ...overrides }) - }, - } -} +// import { type MaybeRef, nextTick, onMounted, ref, toValue } from 'vue' +// import { toHtml } from '/src/utils/markdown' + +// export const useMarkdown = ({ markdown }: { markdown: MaybeRef }) => { +// const html = ref('') + +// onMounted(() => { +// toHtml(toValue(markdown)).then(value => html.value = value) + +// // nextTick(() => { +// // // html.value = value +// // }) +// }) + +// return { +// html, +// } +// } diff --git a/composables/useRoot.ts b/composables/useRoot.ts index 5c106d8a..1a02013a 100644 --- a/composables/useRoot.ts +++ b/composables/useRoot.ts @@ -19,6 +19,7 @@ export const useRoot = () => { useAppearance() useToasts() + useWorkers() onMounted(() => { logEvent(appEventTypes.appMounted) diff --git a/composables/useWorkers.ts b/composables/useWorkers.ts new file mode 100644 index 00000000..52d86a76 --- /dev/null +++ b/composables/useWorkers.ts @@ -0,0 +1,54 @@ +import { nanoid } from 'nanoid' +import DocsWorker from '/src/workers/docs?worker' +import MarkdownWorker from '/src/workers/markdown?worker' + +export const workersKey = Symbol('toasts') as InjectionKey> + +const buildWorkers = () => { + const docsWorker = ref() + const markdownWorker = ref() + + const markdownToHtml = async (markdown: string) => { + const id = nanoid() + + return new Promise((resolve) => { + const handler = ({ data }: MessageEvent) => { + if (data.id === id) { + resolve(data.html) + + markdownWorker.value?.removeEventListener('message', handler) + } + } + + markdownWorker.value?.addEventListener('message', handler) + markdownWorker.value?.postMessage({ id, markdown }) + }) + } + + onMounted(() => { + docsWorker.value = new DocsWorker() + markdownWorker.value = new MarkdownWorker() + }) + + onUnmounted(() => { + docsWorker.value?.terminate() + markdownWorker.value?.terminate() + }) + + return { + markdownToHtml, + markdownWorker, + } +} + +export const useWorkers = () => { + const { + markdownToHtml, + markdownWorker, + } = injectOrProvide(workersKey, buildWorkers) + + return { + markdownToHtml, + markdownWorker, + } +} diff --git a/layouts/dashboard.vue b/layouts/dashboard.vue index 8e1d6183..77266bfc 100644 --- a/layouts/dashboard.vue +++ b/layouts/dashboard.vue @@ -48,7 +48,7 @@ onUnmounted(() => {