diff --git a/apps/main/src/tipc/reader.ts b/apps/main/src/tipc/reader.ts index 57d83d531..29f640653 100644 --- a/apps/main/src/tipc/reader.ts +++ b/apps/main/src/tipc/reader.ts @@ -2,7 +2,8 @@ import fs from "node:fs" import { createRequire } from "node:module" import path from "node:path" -import { app } from "electron" +import { callGlobalContextMethod } from "@follow/shared/bridge" +import { app, BrowserWindow } from "electron" import { MsEdgeTTS, OUTPUT_FORMAT } from "msedge-tts" import { readability } from "../lib/readability" @@ -49,8 +50,20 @@ export const readerRoute = { return voices }), - setVoice: t.procedure.input().action(async ({ input }) => { - await tts.setMetadata(input, OUTPUT_FORMAT.WEBM_24KHZ_16BIT_MONO_OPUS) + setVoice: t.procedure.input().action(async ({ input, context: { sender } }) => { + const window = BrowserWindow.fromWebContents(sender) + if (!window) { + return + } + + await tts.setMetadata(input, OUTPUT_FORMAT.WEBM_24KHZ_16BIT_MONO_OPUS).catch((error) => { + callGlobalContextMethod(window, "toast.error", [ + error.message, + { + duration: 1000, + }, + ]) + }) }), detectCodeStringLanguage: t.procedure diff --git a/apps/renderer/src/configs.ts b/apps/renderer/src/configs.ts index 81cf6e853..d6282546b 100644 --- a/apps/renderer/src/configs.ts +++ b/apps/renderer/src/configs.ts @@ -14,6 +14,8 @@ const ERROR_PATTERNS = [ "Unable to open cursor", "Document is not focused.", "HTTP Client Error", + // Biz errors + "Chain aborted", ] export const SentryConfig: BrowserOptions = { diff --git a/apps/renderer/src/modules/settings/tabs/general.tsx b/apps/renderer/src/modules/settings/tabs/general.tsx index 5c96836c5..f0506e48b 100644 --- a/apps/renderer/src/modules/settings/tabs/general.tsx +++ b/apps/renderer/src/modules/settings/tabs/general.tsx @@ -192,7 +192,7 @@ export const VoiceSelector = () => { - + {data?.map((item) => ( {item.FriendlyName}