diff --git a/extension/background/entityTypes.js b/extension/background/entityTypes.js index b7269ae2f..0a5d8c9ff 100644 --- a/extension/background/entityTypes.js +++ b/extension/background/entityTypes.js @@ -1,6 +1,6 @@ import { languageNames } from "./languages.js"; import { metadata } from "../services/metadata.js"; -import { convertEntities } from "../language/compiler.js"; +import { convertEntities, makeWordMatcher } from "../language/compiler.js"; import English from "../language/langs/english.js"; export const allServiceNames = []; @@ -21,9 +21,16 @@ for (const id in metadata.music) { } } +export const pageName = []; + +export function addPageName(name) { + entityTypes.pageName.alternatives.push(makeWordMatcher(name)); +} + export const entityTypes = convertEntities({ serviceName: allServiceNames, musicServiceName: musicServiceNames, + pageName, lang: languageNames(), smallNumber: English.numberNames, }); diff --git a/extension/background/intentRunner.js b/extension/background/intentRunner.js index 6399e98d1..ef6fee12d 100644 --- a/extension/background/intentRunner.js +++ b/extension/background/intentRunner.js @@ -6,7 +6,7 @@ import { metadata } from "../intents/metadata.js"; import { compile, splitPhraseLines } from "../language/compiler.js"; import { PhraseSet } from "../language/findMatch.js"; import * as settings from "../settings.js"; -import { entityTypes } from "./entityTypes.js"; +import { entityTypes, addPageName } from "./entityTypes.js"; import * as intentParser from "./intentParser.js"; import * as telemetry from "./telemetry.js"; import { registerHandler, sendMessage } from "../communicate.js"; @@ -548,33 +548,27 @@ export function getRegisteredRoutines() { registerHandler("getRegisteredRoutines", getRegisteredRoutines); -let pageNames = {}; +export async function getRegisteredPageName() { + const result = await browser.storage.sync.get("pageNames"); + const pageNames = result.pageNames; + + return pageNames; +} export async function registerPageName(name, { url }) { name = name.toLowerCase(); const creationDate = Date.now(); - const result = await browser.storage.sync.get("pageNames"); - pageNames = result.pageNames || {}; + const pageNames = (await getRegisteredPageName()) || {}; pageNames[name] = url; - log.info("Added routine for page", name, "->", url, creationDate); + addPageName(name); await browser.storage.sync.set({ pageNames }); -} - -export async function getRegisteredPageName(name) { - const result = await browser.storage.sync.get("pageNames"); - pageNames = result.pageNames; - - if (!pageNames[name] || !name) { - const exc = new Error("No page name to remove"); - exc.displayMessage = `The page name "${name}" not found`; - throw exc; - } - return pageNames; + log.info("Added routine for page", name, "->", url, creationDate); } export async function unregisterPageName(name) { + const pageNames = await getRegisteredPageName(); delete pageNames[name]; log.info("Removed routine for page", name); await browser.storage.sync.set({ pageNames }); diff --git a/extension/intents/navigation/navigation.js b/extension/intents/navigation/navigation.js index 8733acec5..a83516f58 100644 --- a/extension/intents/navigation/navigation.js +++ b/extension/intents/navigation/navigation.js @@ -35,15 +35,14 @@ intentRunner.registerIntent({ name: "navigation.navigate", async run(context) { const query = context.slots.query.toLowerCase(); - const result = await browser.storage.sync.get("pageNames"); - const pageNames = result.pageNames; + const pageNames = await intentRunner.getRegisteredPageName(); let tab = null; if (pageNames && pageNames[query]) { const savedUrl = pageNames[query]; tab = await browserUtil.openOrFocusTab(savedUrl); } else { const where = context.slots.where; - const cached = queryDatabase.get(query.toLowerCase()); + const cached = queryDatabase.get(query); if (where === "window") { if (cached) { const window = await browser.windows.create({ url: cached.url }); diff --git a/extension/intents/routines/routines.js b/extension/intents/routines/routines.js index 5d6ef4121..cf058e6c3 100644 --- a/extension/intents/routines/routines.js +++ b/extension/intents/routines/routines.js @@ -3,8 +3,8 @@ import * as intentRunner from "../../background/intentRunner.js"; import * as pageMetadata from "../../background/pageMetadata.js"; import * as browserUtil from "../../browserUtil.js"; -import { RoutineExecutor, pausedRoutineExecutor } from "./routineExecutor.js"; import English from "../../language/langs/english.js"; +import { pausedRoutineExecutor, RoutineExecutor } from "./routineExecutor.js"; intentRunner.registerIntent({ name: "routines.name", @@ -98,7 +98,13 @@ intentRunner.registerIntent({ name: "routines.removePageName", async run(context) { const name = context.slots.name; - await intentRunner.getRegisteredPageName(name); + const pageNames = await intentRunner.getRegisteredPageName(); + if (!pageNames[name] || !name) { + const exc = new Error(`No page name with name ${name}`); + exc.displayMessage = `The page name "${name}" not found`; + throw exc; + } + intentRunner.unregisterPageName(name); }, }); diff --git a/extension/language/compiler.js b/extension/language/compiler.js index 5e2bcece7..76eb988aa 100644 --- a/extension/language/compiler.js +++ b/extension/language/compiler.js @@ -46,7 +46,7 @@ export function convertEntities(entityMapping) { return result; } -function makeWordMatcher(string) { +export function makeWordMatcher(string) { const list = makeWordList(string); if (list.length === 1) { return list[0];