From 79e2013fbd80f7a611d6ee4050165c125fe75285 Mon Sep 17 00:00:00 2001 From: n4ze3m Date: Sun, 12 May 2024 11:38:01 +0530 Subject: [PATCH] few bug fixes --- src/db/index.ts | 37 ++------ src/db/knowledge.ts | 115 +++++++++++------------- src/db/vector.ts | 178 +++++++++++++++----------------------- src/entries/background.ts | 39 ++++----- src/libs/get-html.ts | 37 +++++--- src/parser/google-docs.ts | 37 +++++--- src/utils/action.ts | 25 ++++++ 7 files changed, 225 insertions(+), 243 deletions(-) create mode 100644 src/utils/action.ts diff --git a/src/db/index.ts b/src/db/index.ts index 9f6e5b9..f709905 100644 --- a/src/db/index.ts +++ b/src/db/index.ts @@ -2,7 +2,6 @@ import { type ChatHistory as ChatHistoryType, type Message as MessageType } from "~/store/option" -import { Storage, browser } from "wxt/browser" type HistoryInfo = { id: string @@ -58,18 +57,15 @@ type ChatHistory = HistoryInfo[] type Prompts = Prompt[] export class PageAssitDatabase { - db: Storage.LocalStorageArea + db: chrome.storage.StorageArea constructor() { - this.db = browser.storage.local + this.db = chrome.storage.local } async getChatHistory(id: string): Promise { return new Promise((resolve, reject) => { - // this.db.get(id, (result) => { - // resolve(result[id] || []) - // }) - this.db.get(id).then((result) => { + this.db.get(id, (result) => { resolve(result[id] || []) }) }) @@ -77,10 +73,7 @@ export class PageAssitDatabase { async getChatHistories(): Promise { return new Promise((resolve, reject) => { - // this.db.get("chatHistories", (result) => { - // resolve(result.chatHistories || []) - // }) - this.db.get("chatHistories").then((result) => { + this.db.get("chatHistories", (result) => { resolve(result.chatHistories || []) }) }) @@ -133,10 +126,7 @@ export class PageAssitDatabase { async getAllPrompts(): Promise { return new Promise((resolve, reject) => { - // this.db.get("prompts", (result) => { - // resolve(result.prompts || []) - // }) - this.db.get("prompts").then((result) => { + this.db.get("prompts", (result) => { resolve(result.prompts || []) }) }) @@ -179,10 +169,7 @@ export class PageAssitDatabase { async getWebshare(id: string) { return new Promise((resolve, reject) => { - // this.db.get(id, (result) => { - // resolve(result[id] || []) - // }) - this.db.get(id).then((result) => { + this.db.get(id, (result) => { resolve(result[id] || []) }) }) @@ -190,10 +177,7 @@ export class PageAssitDatabase { async getAllWebshares(): Promise { return new Promise((resolve, reject) => { - // this.db.get("webshares", (result) => { - // resolve(result.webshares || []) - // }) - this.db.get("webshares").then((result) => { + this.db.get("webshares", (result) => { resolve(result.webshares || []) }) }) @@ -213,10 +197,7 @@ export class PageAssitDatabase { async getUserID() { return new Promise((resolve, reject) => { - // this.db.get("user_id", (result) => { - // resolve(result.user_id || "") - // }) - this.db.get("user_id").then((result) => { + this.db.get("user_id", (result) => { resolve(result.user_id || "") }) }) @@ -474,4 +455,4 @@ export const importPrompts = async (prompts: Prompts) => { for (const prompt of prompts) { await db.addPrompt(prompt) } -} +} \ No newline at end of file diff --git a/src/db/knowledge.ts b/src/db/knowledge.ts index a46c68f..3f90880 100644 --- a/src/db/knowledge.ts +++ b/src/db/knowledge.ts @@ -1,4 +1,3 @@ -import { Storage, browser } from "wxt/browser" import { deleteVector, deleteVectorByFileId } from "./vector" export type Source = { @@ -25,105 +24,89 @@ export const generateID = () => { }) } export class PageAssistKnowledge { - db: Storage.LocalStorageArea + db: chrome.storage.StorageArea constructor() { - this.db = browser.storage.local + this.db = chrome.storage.local } getAll = async (): Promise => { return new Promise((resolve, reject) => { - // this.db.get(null, (result) => { - // if (chrome.runtime.lastError) { - // reject(chrome.runtime.lastError) - // } else { - // const data = Object.keys(result).map((key) => result[key]) - // resolve(data) - // } - // }) - this.db.get(null).then((result) => { - const data = Object.keys(result).map((key) => result[key]) - resolve(data) + this.db.get(null, (result) => { + if (chrome.runtime.lastError) { + reject(chrome.runtime.lastError) + } else { + const data = Object.keys(result).map((key) => result[key]) + resolve(data) + } }) }) } getById = async (id: string): Promise => { return new Promise((resolve, reject) => { - this.db.get(id).then((result) => { - resolve(result[id]) + this.db.get(id, (result) => { + if (chrome.runtime.lastError) { + reject(chrome.runtime.lastError) + } else { + resolve(result[id]) + } }) }) - } + create = async (knowledge: Knowledge): Promise => { return new Promise((resolve, reject) => { - // this.db.set({ [knowledge.id]: knowledge }, () => { - // if (chrome.runtime.lastError) { - // reject(chrome.runtime.lastError) - // } else { - // resolve() - // } - // }) - this.db.set({ [knowledge.id]: knowledge }).then(() => { - resolve() + this.db.set({ [knowledge.id]: knowledge }, () => { + if (chrome.runtime.lastError) { + reject(chrome.runtime.lastError) + } else { + resolve() + } }) }) } update = async (knowledge: Knowledge): Promise => { return new Promise((resolve, reject) => { - // this.db.set({ [knowledge.id]: knowledge }, () => { - // if (chrome.runtime.lastError) { - // reject(chrome.runtime.lastError) - // } else { - // resolve() - // } - // }) - this.db.set({ [knowledge.id]: knowledge }).then(() => { - resolve() + this.db.set({ [knowledge.id]: knowledge }, () => { + if (chrome.runtime.lastError) { + reject(chrome.runtime.lastError) + } else { + resolve() + } }) }) } delete = async (id: string): Promise => { return new Promise((resolve, reject) => { - // this.db.remove(id, () => { - // if (chrome.runtime.lastError) { - // reject(chrome.runtime.lastError) - // } else { - // resolve() - // } - // }) - this.db.remove(id).then(() => { - resolve() + this.db.remove(id, () => { + if (chrome.runtime.lastError) { + reject(chrome.runtime.lastError) + } else { + resolve() + } }) }) } deleteSource = async (id: string, source_id: string): Promise => { return new Promise((resolve, reject) => { - // this.db.get(id, (result) => { - // if (chrome.runtime.lastError) { - // reject(chrome.runtime.lastError) - // } else { - // const data = result[id] as Knowledge - // data.source = data.source.filter((s) => s.source_id !== source_id) - // this.db.set({ [id]: data }, () => { - // if (chrome.runtime.lastError) { - // reject(chrome.runtime.lastError) - // } else { - // resolve() - // } - // }) - // } - // }) - this.db.get(id).then((result) => { - const data = result[id] as Knowledge - data.source = data.source.filter((s) => s.source_id !== source_id) - this.db.set({ [id]: data }).then(() => { - resolve() - }) + this.db.get(id, (result) => { + if (chrome.runtime.lastError) { + reject(chrome.runtime.lastError) + } else { + const data = result[id] as Knowledge + data.source = data.source.filter((s) => s.source_id !== source_id) + this.db.set({ [id]: data }, () => { + if (chrome.runtime.lastError) { + reject(chrome.runtime.lastError) + } else { + resolve() + } + }) + } }) }) } @@ -219,4 +202,4 @@ export const importKnowledge = async (data: Knowledge[]) => { for (const d of data) { await db.create(d) } -} +} \ No newline at end of file diff --git a/src/db/vector.ts b/src/db/vector.ts index 761f1a1..f5dd141 100644 --- a/src/db/vector.ts +++ b/src/db/vector.ts @@ -1,5 +1,3 @@ -import { Storage, browser } from "wxt/browser" - interface PageAssistVector { file_id: string content: string @@ -13,10 +11,10 @@ export type VectorData = { } export class PageAssistVectorDb { - db: Storage.LocalStorageArea + db: chrome.storage.StorageArea constructor() { - this.db = browser.storage.local + this.db = chrome.storage.local } insertVector = async ( @@ -24,55 +22,36 @@ export class PageAssistVectorDb { vector: PageAssistVector[] ): Promise => { return new Promise((resolve, reject) => { - // this.db.get(id, (result) => { - // if (chrome.runtime.lastError) { - // reject(chrome.runtime.lastError) - // } else { - // const data = result[id] as VectorData - // if (!data) { - // this.db.set({ [id]: { id, vectors: vector } }, () => { - // if (chrome.runtime.lastError) { - // reject(chrome.runtime.lastError) - // } else { - // resolve() - // } - // }) - // } else { - // this.db.set( - // { - // [id]: { - // ...data, - // vectors: data.vectors.concat(vector) - // } - // }, - // () => { - // if (chrome.runtime.lastError) { - // reject(chrome.runtime.lastError) - // } else { - // resolve() - // } - // } - // ) - // } - // } - // }) - this.db.get(id).then((result) => { - const data = result[id] as VectorData - if (!data) { - this.db.set({ [id]: { id, vectors: vector } }).then(() => { - resolve() - }) + this.db.get(id, (result) => { + if (chrome.runtime.lastError) { + reject(chrome.runtime.lastError) } else { - this.db - .set({ - [id]: { - ...data, - vectors: data.vectors.concat(vector) + const data = result[id] as VectorData + if (!data) { + this.db.set({ [id]: { id, vectors: vector } }, () => { + if (chrome.runtime.lastError) { + reject(chrome.runtime.lastError) + } else { + resolve() } }) - .then(() => { - resolve() - }) + } else { + this.db.set( + { + [id]: { + ...data, + vectors: data.vectors.concat(vector) + } + }, + () => { + if (chrome.runtime.lastError) { + reject(chrome.runtime.lastError) + } else { + resolve() + } + } + ) + } } }) }) @@ -80,72 +59,56 @@ export class PageAssistVectorDb { deleteVector = async (id: string): Promise => { return new Promise((resolve, reject) => { - // this.db.remove(id, () => { - // if (chrome.runtime.lastError) { - // reject(chrome.runtime.lastError) - // } else { - // resolve() - // } - // }) - this.db.remove(id).then(() => { - resolve() + this.db.remove(id, () => { + if (chrome.runtime.lastError) { + reject(chrome.runtime.lastError) + } else { + resolve() + } }) }) } deleteVectorByFileId = async (id: string, file_id: string): Promise => { return new Promise((resolve, reject) => { - // this.db.get(id, (result) => { - // if (chrome.runtime.lastError) { - // reject(chrome.runtime.lastError) - // } else { - // const data = result[id] as VectorData - // data.vectors = data.vectors.filter((v) => v.file_id !== file_id) - // this.db.set({ [id]: data }, () => { - // if (chrome.runtime.lastError) { - // reject(chrome.runtime.lastError) - // } else { - // resolve() - // } - // }) - // } - // }) - this.db.get(id).then((result) => { - const data = result[id] as VectorData - data.vectors = data.vectors.filter((v) => v.file_id !== file_id) - this.db.set({ [id]: data }).then(() => { - resolve() - }) + this.db.get(id, (result) => { + if (chrome.runtime.lastError) { + reject(chrome.runtime.lastError) + } else { + const data = result[id] as VectorData + data.vectors = data.vectors.filter((v) => v.file_id !== file_id) + this.db.set({ [id]: data }, () => { + if (chrome.runtime.lastError) { + reject(chrome.runtime.lastError) + } else { + resolve() + } + }) + } }) }) } getVector = async (id: string): Promise => { return new Promise((resolve, reject) => { - // this.db.get(id, (result) => { - // if (chrome.runtime.lastError) { - // reject(chrome.runtime.lastError) - // } else { - // resolve(result[id] as VectorData) - // } - // }) - this.db.get(id).then((result) => { - resolve(result[id] as VectorData) + this.db.get(id, (result) => { + if (chrome.runtime.lastError) { + reject(chrome.runtime.lastError) + } else { + resolve(result[id] as VectorData) + } }) }) } getAll = async (): Promise => { return new Promise((resolve, reject) => { - // this.db.get(null, (result) => { - // if (chrome.runtime.lastError) { - // reject(chrome.runtime.lastError) - // } else { - // resolve(Object.values(result)) - // } - // }) - this.db.get(null).then((result) => { - resolve(Object.values(result)) + this.db.get(null, (result) => { + if (chrome.runtime.lastError) { + reject(chrome.runtime.lastError) + } else { + resolve(Object.values(result)) + } }) }) } @@ -156,15 +119,12 @@ export class PageAssistVectorDb { data.forEach((d) => { obj[d.id] = d }) - // this.db.set(obj, () => { - // if (chrome.runtime.lastError) { - // reject(chrome.runtime.lastError) - // } else { - // resolve() - // } - // }) - this.db.set(obj).then(() => { - resolve() + this.db.set(obj, () => { + if (chrome.runtime.lastError) { + reject(chrome.runtime.lastError) + } else { + resolve() + } }) }) } @@ -204,5 +164,5 @@ export const exportVectors = async () => { export const importVectors = async (data: VectorData[]) => { const db = new PageAssistVectorDb() - return db.saveImportedData(data) -} + return db.saveImportedData(data) +} \ No newline at end of file diff --git a/src/entries/background.ts b/src/entries/background.ts index 61e7328..91c71a7 100644 --- a/src/entries/background.ts +++ b/src/entries/background.ts @@ -1,13 +1,13 @@ import { getOllamaURL, isOllamaRunning } from "../services/ollama" import { browser } from "wxt/browser" - +import { setBadgeBackgroundColor, setBadgeText, setTitle } from "@/utils/action" const progressHuman = (completed: number, total: number) => { return ((completed / total) * 100).toFixed(0) + "%" } const clearBadge = () => { - browser.action.setBadgeText({ text: "" }) - browser.action.setTitle({ title: "" }) + setBadgeText({ text: "" }) + setTitle({ title: "" }) } const streamDownload = async (url: string, model: string) => { url += "/api/pull" @@ -42,16 +42,16 @@ const streamDownload = async (url: string, model: string) => { completed?: number } if (json.total && json.completed) { - browser.action.setBadgeText({ + setBadgeText({ text: progressHuman(json.completed, json.total) }) - browser.action.setBadgeBackgroundColor({ color: "#0000FF" }) + setBadgeBackgroundColor({ color: "#0000FF" }) } else { - browser.action.setBadgeText({ text: "🏋️‍♂️" }) - browser.action.setBadgeBackgroundColor({ color: "#FFFFFF" }) + setBadgeText({ text: "🏋️‍♂️" }) + setBadgeBackgroundColor({ color: "#FFFFFF" }) } - browser.action.setTitle({ title: json.status }) + setTitle({ title: json.status }) if (json.status === "success") { isSuccess = true @@ -62,13 +62,13 @@ const streamDownload = async (url: string, model: string) => { } if (isSuccess) { - browser.action.setBadgeText({ text: "✅" }) - browser.action.setBadgeBackgroundColor({ color: "#00FF00" }) - browser.action.setTitle({ title: "Model pulled successfully" }) + setBadgeText({ text: "✅" }) + setBadgeBackgroundColor({ color: "#00FF00" }) + setTitle({ title: "Model pulled successfully" }) } else { - browser.action.setBadgeText({ text: "❌" }) - browser.action.setBadgeBackgroundColor({ color: "#FF0000" }) - browser.action.setTitle({ title: "Model pull failed" }) + setBadgeText({ text: "❌" }) + setBadgeBackgroundColor({ color: "#FF0000" }) + setTitle({ title: "Model pull failed" }) } setTimeout(() => { @@ -86,9 +86,9 @@ export default defineBackground({ const isRunning = await isOllamaRunning() if (!isRunning) { - browser.action.setBadgeText({ text: "E" }) - browser.action.setBadgeBackgroundColor({ color: "#FF0000" }) - browser.action.setTitle({ title: "Ollama is not running" }) + setBadgeText({ text: "E" }) + setBadgeBackgroundColor({ color: "#FF0000" }) + setTitle({ title: "Ollama is not running" }) setTimeout(() => { clearBadge() }, 5000) @@ -98,9 +98,8 @@ export default defineBackground({ } }) - if (browser?.action) { - browser.action.onClicked.addListener((tab) => { - console.log("browser.action.onClicked.addListener") + if (import.meta.env.BROWSER === "chrome") { + chrome.action.onClicked.addListener((tab) => { browser.tabs.create({ url: browser.runtime.getURL("/options.html") }) }) } else { diff --git a/src/libs/get-html.ts b/src/libs/get-html.ts index 40499d4..ddb2ad7 100644 --- a/src/libs/get-html.ts +++ b/src/libs/get-html.ts @@ -4,7 +4,7 @@ import { isTweet, isTwitterTimeline, parseTweet, - parseTwitterTimeline, + parseTwitterTimeline } from "@/parser/twitter" import { isGoogleDocs, parseGoogleDocs } from "@/parser/google-docs" import { cleanUnwantedUnicode } from "@/utils/clean" @@ -24,18 +24,35 @@ const _getHtml = () => { export const getDataFromCurrentTab = async () => { const result = new Promise((resolve) => { - chrome.tabs.query({ active: true, currentWindow: true }, async (tabs) => { - const tab = tabs[0] + if (import.meta.env.BROWSER === "chrome") { + chrome.tabs.query({ active: true, currentWindow: true }, async (tabs) => { + const tab = tabs[0] - const data = await chrome.scripting.executeScript({ - target: { tabId: tab.id }, - func: _getHtml + const data = await chrome.scripting.executeScript({ + target: { tabId: tab.id }, + func: _getHtml + }) + + if (data.length > 0) { + resolve(data[0].result) + } }) + } else { + browser.tabs + .query({ active: true, currentWindow: true }) + .then(async (tabs) => { + const tab = tabs[0] - if (data.length > 0) { - resolve(data[0].result) - } - }) + const data = await browser.scripting.executeScript({ + target: { tabId: tab.id }, + func: _getHtml + }) + + if (data.length > 0) { + resolve(data[0].result) + } + }) + } }) as Promise<{ url: string content: string diff --git a/src/parser/google-docs.ts b/src/parser/google-docs.ts index e63a913..0781396 100644 --- a/src/parser/google-docs.ts +++ b/src/parser/google-docs.ts @@ -95,19 +95,36 @@ const getGoogleDocs = () => { export const parseGoogleDocs = async () => { const result = new Promise((resolve) => { - chrome.tabs.query({ active: true, currentWindow: true }, async (tabs) => { - const tab = tabs[0] + if (import.meta.env.BROWSER === "chrome") { + chrome.tabs.query({ active: true, currentWindow: true }, async (tabs) => { + const tab = tabs[0] - const data = await chrome.scripting.executeScript({ - target: { tabId: tab.id }, - world: "MAIN", - func: getGoogleDocs + const data = await chrome.scripting.executeScript({ + target: { tabId: tab.id }, + world: "MAIN", + func: getGoogleDocs + }) + + if (data.length > 0) { + resolve(data[0].result) + } }) + } else { + browser.tabs + .query({ active: true, currentWindow: true }) + .then(async (tabs) => { + const tab = tabs[0] - if (data.length > 0) { - resolve(data[0].result) - } - }) + const data = await browser.scripting.executeScript({ + target: { tabId: tab.id }, + func: getGoogleDocs + }) + + if (data.length > 0) { + resolve(data[0].result) + } + }) + } }) as Promise<{ content?: string }> diff --git a/src/utils/action.ts b/src/utils/action.ts new file mode 100644 index 0000000..5881aa4 --- /dev/null +++ b/src/utils/action.ts @@ -0,0 +1,25 @@ +import { browser } from "wxt/browser" + +export const setTitle = ({ title }: { title: string }) => { + if (import.meta.env.BROWSER === "chrome") { + chrome.action.setTitle({ title }) + } else { + browser.browserAction.setTitle({ title }) + } +} + +export const setBadgeBackgroundColor = ({ color }: { color: string }) => { + if (import.meta.env.BROWSER === "chrome") { + chrome.action.setBadgeBackgroundColor({ color }) + } else { + browser.browserAction.setBadgeBackgroundColor({ color }) + } +} + +export const setBadgeText = ({ text }: { text: string }) => { + if (import.meta.env.BROWSER === "chrome") { + chrome.action.setBadgeText({ text }) + } else { + browser.browserAction.setBadgeText({ text }) + } +}