From b939d1849a70622c6f7aee0433e00246a600abb4 Mon Sep 17 00:00:00 2001 From: Gabe Yuan Date: Fri, 22 Dec 2023 11:35:46 +0800 Subject: [PATCH] feat: multi key calling support --- src/config/i18n.js | 4 ++++ src/libs/req.js | 30 ++++++++++++++++++++++++++++++ src/views/Options/Apis.js | 13 +++++++++++++ 3 files changed, 47 insertions(+) diff --git a/src/config/i18n.js b/src/config/i18n.js index 0cbed87..e8d736a 100644 --- a/src/config/i18n.js +++ b/src/config/i18n.js @@ -707,4 +707,8 @@ export const I18N = { zh: `添加右键菜单`, en: `Add Context Menus`, }, + mulkeys_help: { + zh: `支持英文逗号隔开多个KEY轮寻调用。`, + en: `Supports multiple KEY round calling calls separated by English commas.`, + }, }; diff --git a/src/libs/req.js b/src/libs/req.js index 4fd0057..ceefe43 100644 --- a/src/libs/req.js +++ b/src/libs/req.js @@ -21,6 +21,25 @@ import { msAuth } from "./auth"; import { genDeeplFree } from "../apis/deepl"; import { genBaidu } from "../apis/baidu"; +const keyMap = new Map(); + +// 轮寻key +const keyPick = (translator, key = "") => { + const keys = key + .split(",") + .map((item) => item.trim()) + .filter(Boolean); + + if (keys.length === 0) { + return ""; + } + + let index = keyMap.get(translator) ?? -1; + keyMap.set(translator, ++index); + + return keys[index % keys.length]; +}; + /** * 构造缓存 request * @param {*} request @@ -257,6 +276,17 @@ const genCustom = ({ text, from, to, url, key }) => { */ export const newTransReq = ({ translator, text, from, to }, apiSetting) => { const args = { text, from, to, ...apiSetting }; + + switch (translator) { + case OPT_TRANS_DEEPL: + case OPT_TRANS_OPENAI: + case OPT_TRANS_GEMINI: + case OPT_TRANS_CLOUDFLAREAI: + args.key = keyPick(translator, args.key); + break; + default: + } + switch (translator) { case OPT_TRANS_GOOGLE: return genGoogle(args); diff --git a/src/views/Options/Apis.js b/src/views/Options/Apis.js index 52d982f..660834c 100644 --- a/src/views/Options/Apis.js +++ b/src/views/Options/Apis.js @@ -5,11 +5,13 @@ import CircularProgress from "@mui/material/CircularProgress"; import { OPT_TRANS_ALL, OPT_TRANS_MICROSOFT, + OPT_TRANS_DEEPL, OPT_TRANS_DEEPLFREE, OPT_TRANS_BAIDU, OPT_TRANS_TENCENT, OPT_TRANS_OPENAI, OPT_TRANS_GEMINI, + OPT_TRANS_CLOUDFLAREAI, OPT_TRANS_CUSTOMIZE, URL_KISS_PROXY, } from "../../config"; @@ -96,6 +98,13 @@ function ApiFields({ translator }) { OPT_TRANS_TENCENT, ]; + const mulkeysTranslators = [ + OPT_TRANS_DEEPL, + OPT_TRANS_OPENAI, + OPT_TRANS_GEMINI, + OPT_TRANS_CLOUDFLAREAI, + ]; + return ( {!buildinTranslators.includes(translator) && ( @@ -113,6 +122,10 @@ function ApiFields({ translator }) { name="key" value={key} onChange={handleChange} + multiline={mulkeysTranslators.includes(translator)} + helperText={ + mulkeysTranslators.includes(translator) ? i18n("mulkeys_help") : "" + } /> )}