Files
kiss-translator/src/background.js

187 lines
4.1 KiB
JavaScript
Raw Normal View History

2023-08-05 18:15:01 +08:00
import browser from "webextension-polyfill";
2023-07-20 13:45:41 +08:00
import {
MSG_FETCH,
2023-08-10 11:55:40 +08:00
MSG_FETCH_LIMIT,
2023-08-11 16:48:09 +08:00
MSG_FETCH_CLEAR,
2023-08-21 14:03:39 +08:00
MSG_TRANS_TOGGLE,
2023-09-23 19:16:51 +08:00
MSG_OPEN_OPTIONS,
MSG_SAVE_RULE,
2023-08-21 16:06:21 +08:00
MSG_TRANS_TOGGLE_STYLE,
2023-11-22 11:02:48 +08:00
MSG_OPEN_TRANBOX,
2023-12-11 11:25:02 +08:00
MSG_CONTEXT_MENUS,
2023-08-21 14:03:39 +08:00
CMD_TOGGLE_TRANSLATE,
2023-08-21 16:06:21 +08:00
CMD_TOGGLE_STYLE,
2023-09-10 13:56:11 +08:00
CMD_OPEN_OPTIONS,
2023-11-22 11:02:48 +08:00
CMD_OPEN_TRANBOX,
2023-07-20 13:45:41 +08:00
} from "./config";
2023-08-30 18:05:37 +08:00
import { getSettingWithDefault, tryInitDefaultData } from "./libs/storage";
2023-08-31 13:38:06 +08:00
import { trySyncSettingAndRules } from "./libs/sync";
2023-08-10 11:55:40 +08:00
import { fetchData, fetchPool } from "./libs/fetch";
2023-08-21 14:03:39 +08:00
import { sendTabMsg } from "./libs/msg";
2023-08-30 18:05:37 +08:00
import { trySyncAllSubRules } from "./libs/subRules";
import { tryClearCaches } from "./libs";
2023-09-23 19:16:51 +08:00
import { saveRule } from "./libs/rules";
2023-07-20 13:45:41 +08:00
2023-09-20 16:02:17 +08:00
globalThis.ContextType = "BACKGROUND";
2023-07-20 13:45:41 +08:00
/**
2023-12-11 11:25:02 +08:00
* 添加右键菜单
2023-07-20 13:45:41 +08:00
*/
2023-12-11 11:25:02 +08:00
function addContextMenus() {
2023-11-21 11:20:05 +08:00
browser.contextMenus.create({
id: CMD_TOGGLE_TRANSLATE,
title: browser.i18n.getMessage("toggle_translate"),
contexts: ["all"],
});
browser.contextMenus.create({
id: CMD_TOGGLE_STYLE,
title: browser.i18n.getMessage("toggle_style"),
contexts: ["all"],
});
2023-11-21 11:36:46 +08:00
browser.contextMenus.create({
id: CMD_OPEN_TRANBOX,
title: browser.i18n.getMessage("open_tranbox"),
2023-11-21 11:36:46 +08:00
contexts: ["all"],
});
2023-11-22 11:02:48 +08:00
browser.contextMenus.create({
id: "options_separator",
type: "separator",
2023-11-22 11:02:48 +08:00
contexts: ["all"],
});
2023-11-21 11:20:05 +08:00
browser.contextMenus.create({
id: CMD_OPEN_OPTIONS,
title: browser.i18n.getMessage("open_options"),
contexts: ["all"],
});
2023-12-11 11:25:02 +08:00
}
/**
* 清除右键菜单
*/
function removeContextMenus() {
2023-12-11 17:26:49 +08:00
browser.contextMenus.removeAll();
2023-12-11 11:25:02 +08:00
}
/**
* 插件安装
*/
browser.runtime.onInstalled.addListener(() => {
tryInitDefaultData();
2023-12-11 17:26:49 +08:00
// 右键菜单
addContextMenus();
2023-07-20 13:45:41 +08:00
});
/**
* 浏览器启动
*/
browser.runtime.onStartup.addListener(async () => {
2023-07-31 03:10:09 +08:00
// 同步数据
2023-09-20 17:47:23 +08:00
await trySyncSettingAndRules();
2023-07-31 03:10:09 +08:00
2023-12-11 11:25:02 +08:00
const {
clearCache,
contextMenus = true,
subrulesList,
} = await getSettingWithDefault();
2023-07-31 03:10:09 +08:00
// 清除缓存
2023-12-11 11:25:02 +08:00
if (clearCache) {
2023-08-30 18:05:37 +08:00
tryClearCaches();
2023-07-20 13:45:41 +08:00
}
2023-12-11 11:25:02 +08:00
// 右键菜单
2023-12-11 17:26:49 +08:00
if (!contextMenus) {
2023-12-11 11:25:02 +08:00
removeContextMenus();
}
// 同步订阅规则
2023-12-11 11:25:02 +08:00
trySyncAllSubRules({ subrulesList });
2023-07-20 13:45:41 +08:00
});
/**
* 监听消息
*/
browser.runtime.onMessage.addListener(
({ action, args }, sender, sendResponse) => {
switch (action) {
case MSG_FETCH:
const { input, opts } = args;
fetchData(input, opts)
2023-07-20 13:45:41 +08:00
.then((data) => {
sendResponse({ data });
})
.catch((error) => {
2023-11-02 23:35:36 +08:00
sendResponse({ error: error.message, cause: error.cause });
2023-07-20 13:45:41 +08:00
});
break;
2023-08-10 11:55:40 +08:00
case MSG_FETCH_LIMIT:
const { interval, limit } = args;
fetchPool.update(interval, limit);
sendResponse({ data: "ok" });
break;
2023-08-11 16:48:09 +08:00
case MSG_FETCH_CLEAR:
fetchPool.clear();
sendResponse({ data: "ok" });
break;
2023-09-23 19:16:51 +08:00
case MSG_OPEN_OPTIONS:
browser.runtime.openOptionsPage();
break;
case MSG_SAVE_RULE:
saveRule(args);
break;
2023-12-11 11:25:02 +08:00
case MSG_CONTEXT_MENUS:
const { contextMenus } = args;
if (contextMenus) {
addContextMenus();
} else {
removeContextMenus();
}
break;
2023-07-20 13:45:41 +08:00
default:
sendResponse({ error: `message action is unavailable: ${action}` });
}
return true;
}
);
2023-08-21 14:03:39 +08:00
/**
* 监听快捷键
*/
browser.commands.onCommand.addListener((command) => {
// console.log(`Command: ${command}`);
switch (command) {
case CMD_TOGGLE_TRANSLATE:
sendTabMsg(MSG_TRANS_TOGGLE);
break;
2023-08-21 16:06:21 +08:00
case CMD_TOGGLE_STYLE:
sendTabMsg(MSG_TRANS_TOGGLE_STYLE);
break;
2023-09-10 13:56:11 +08:00
case CMD_OPEN_OPTIONS:
browser.runtime.openOptionsPage();
break;
2023-08-21 14:03:39 +08:00
default:
}
});
2023-11-21 11:20:05 +08:00
2023-12-11 11:25:02 +08:00
/**
* 监听右键菜单
*/
2023-11-21 11:20:05 +08:00
browser.contextMenus.onClicked.addListener(({ menuItemId }) => {
switch (menuItemId) {
case CMD_TOGGLE_TRANSLATE:
sendTabMsg(MSG_TRANS_TOGGLE);
break;
case CMD_TOGGLE_STYLE:
sendTabMsg(MSG_TRANS_TOGGLE_STYLE);
break;
2023-11-22 11:02:48 +08:00
case CMD_OPEN_TRANBOX:
sendTabMsg(MSG_OPEN_TRANBOX);
break;
2023-11-21 11:20:05 +08:00
case CMD_OPEN_OPTIONS:
browser.runtime.openOptionsPage();
break;
default:
}
});