diff options
| -rw-r--r-- | ext/bg/js/api.js | 60 | ||||
| -rw-r--r-- | ext/bg/js/backend.js | 62 | 
2 files changed, 62 insertions, 60 deletions
| diff --git a/ext/bg/js/api.js b/ext/bg/js/api.js index 3be6ac56..2ce90b5c 100644 --- a/ext/bg/js/api.js +++ b/ext/bg/js/api.js @@ -49,28 +49,8 @@ function apiKanjiFind(text, optionsContext) {      return utilBackend()._onApiKanjiFind({text, optionsContext});  } -async function apiDefinitionAdd(definition, mode, context, optionsContext) { -    const options = await apiOptionsGet(optionsContext); - -    if (mode !== 'kanji') { -        await audioInject( -            definition, -            options.anki.terms.fields, -            options.audio.sources, -            optionsContext -        ); -    } - -    if (context && context.screenshot) { -        await _apiInjectScreenshot( -            definition, -            options.anki.terms.fields, -            context.screenshot -        ); -    } - -    const note = await dictNoteFormat(definition, mode, options); -    return utilBackend().anki.addNote(note); +function apiDefinitionAdd(definition, mode, context, optionsContext) { +    return utilBackend()._onApiDefinitionAdd({definition, mode, context, optionsContext});  }  async function apiDefinitionsAddable(definitions, modes, optionsContext) { @@ -189,42 +169,6 @@ async function apiAudioGetUrl(definition, source, optionsContext) {      return audioGetUrl(definition, source, optionsContext);  } -async function _apiInjectScreenshot(definition, fields, screenshot) { -    let usesScreenshot = false; -    for (const name in fields) { -        if (fields[name].includes('{screenshot}')) { -            usesScreenshot = true; -            break; -        } -    } - -    if (!usesScreenshot) { -        return; -    } - -    const dateToString = (date) => { -        const year = date.getUTCFullYear(); -        const month = date.getUTCMonth().toString().padStart(2, '0'); -        const day = date.getUTCDate().toString().padStart(2, '0'); -        const hours = date.getUTCHours().toString().padStart(2, '0'); -        const minutes = date.getUTCMinutes().toString().padStart(2, '0'); -        const seconds = date.getUTCSeconds().toString().padStart(2, '0'); -        return `${year}-${month}-${day}-${hours}-${minutes}-${seconds}`; -    }; - -    const now = new Date(Date.now()); -    const filename = `yomichan_browser_screenshot_${definition.reading}_${dateToString(now)}.${screenshot.format}`; -    const data = screenshot.dataUrl.replace(/^data:[\w\W]*?,/, ''); - -    try { -        await utilBackend().anki.storeMediaFile(filename, data); -    } catch (e) { -        return; -    } - -    definition.screenshotFileName = filename; -} -  function apiScreenshotGet(options, sender) {      if (!(sender && sender.tab)) {          return Promise.resolve(); diff --git a/ext/bg/js/backend.js b/ext/bg/js/backend.js index 67197cf7..726a1714 100644 --- a/ext/bg/js/backend.js +++ b/ext/bg/js/backend.js @@ -315,8 +315,28 @@ class Backend {          return results;      } -    _onApiDefinitionAdd({definition, mode, context, optionsContext}) { -        return apiDefinitionAdd(definition, mode, context, optionsContext); +    async _onApiDefinitionAdd({definition, mode, context, optionsContext}) { +        const options = await this.getOptions(optionsContext); + +        if (mode !== 'kanji') { +            await audioInject( +                definition, +                options.anki.terms.fields, +                options.audio.sources, +                optionsContext +            ); +        } + +        if (context && context.screenshot) { +            await this._injectScreenshot( +                definition, +                options.anki.terms.fields, +                context.screenshot +            ); +        } + +        const note = await dictNoteFormat(definition, mode, options); +        return this.anki.addNote(note);      }      _onApiDefinitionsAddable({definitions, modes, optionsContext}) { @@ -362,6 +382,44 @@ class Backend {      _onApiClipboardGet() {          return apiClipboardGet();      } + +    // Utilities + +    async _injectScreenshot(definition, fields, screenshot) { +        let usesScreenshot = false; +        for (const name in fields) { +            if (fields[name].includes('{screenshot}')) { +                usesScreenshot = true; +                break; +            } +        } + +        if (!usesScreenshot) { +            return; +        } + +        const dateToString = (date) => { +            const year = date.getUTCFullYear(); +            const month = date.getUTCMonth().toString().padStart(2, '0'); +            const day = date.getUTCDate().toString().padStart(2, '0'); +            const hours = date.getUTCHours().toString().padStart(2, '0'); +            const minutes = date.getUTCMinutes().toString().padStart(2, '0'); +            const seconds = date.getUTCSeconds().toString().padStart(2, '0'); +            return `${year}-${month}-${day}-${hours}-${minutes}-${seconds}`; +        }; + +        const now = new Date(Date.now()); +        const filename = `yomichan_browser_screenshot_${definition.reading}_${dateToString(now)}.${screenshot.format}`; +        const data = screenshot.dataUrl.replace(/^data:[\w\W]*?,/, ''); + +        try { +            await this.anki.storeMediaFile(filename, data); +        } catch (e) { +            return; +        } + +        definition.screenshotFileName = filename; +    }  }  Backend._messageHandlers = new Map([ |