111 lines
2.5 KiB
JavaScript
111 lines
2.5 KiB
JavaScript
import browser from "webextension-polyfill";
|
|
import {
|
|
MSG_FETCH,
|
|
MSG_FETCH_LIMIT,
|
|
MSG_FETCH_CLEAR,
|
|
MSG_TRANS_TOGGLE,
|
|
MSG_TRANS_TOGGLE_STYLE,
|
|
CMD_TOGGLE_TRANSLATE,
|
|
CMD_TOGGLE_STYLE,
|
|
DEFAULT_SETTING,
|
|
DEFAULT_RULES,
|
|
DEFAULT_SYNC,
|
|
STOKEY_SETTING,
|
|
STOKEY_RULES,
|
|
STOKEY_SYNC,
|
|
CACHE_NAME,
|
|
STOKEY_RULESCACHE_PREFIX,
|
|
BUILTIN_RULES,
|
|
} from "./config";
|
|
import storage from "./libs/storage";
|
|
import { getSetting } from "./libs";
|
|
import { trySyncAll } from "./libs/sync";
|
|
import { fetchData, fetchPool } from "./libs/fetch";
|
|
import { sendTabMsg } from "./libs/msg";
|
|
import { trySyncAllSubRules } from "./libs/rules";
|
|
|
|
/**
|
|
* 插件安装
|
|
*/
|
|
browser.runtime.onInstalled.addListener(() => {
|
|
console.log("KISS Translator onInstalled");
|
|
storage.trySetObj(STOKEY_SETTING, DEFAULT_SETTING);
|
|
storage.trySetObj(STOKEY_RULES, DEFAULT_RULES);
|
|
storage.trySetObj(STOKEY_SYNC, DEFAULT_SYNC);
|
|
storage.trySetObj(
|
|
`${STOKEY_RULESCACHE_PREFIX}${process.env.REACT_APP_RULESURL}`,
|
|
BUILTIN_RULES
|
|
);
|
|
});
|
|
|
|
/**
|
|
* 浏览器启动
|
|
*/
|
|
browser.runtime.onStartup.addListener(async () => {
|
|
console.log("browser onStartup");
|
|
|
|
// 同步数据
|
|
await trySyncAll(true);
|
|
|
|
// 清除缓存
|
|
const setting = await getSetting();
|
|
if (setting.clearCache) {
|
|
try {
|
|
caches.delete(CACHE_NAME);
|
|
} catch (err) {
|
|
console.log("[clean caches]", err);
|
|
}
|
|
}
|
|
|
|
// 同步订阅规则
|
|
trySyncAllSubRules(setting, true);
|
|
});
|
|
|
|
/**
|
|
* 监听消息
|
|
*/
|
|
browser.runtime.onMessage.addListener(
|
|
({ action, args }, sender, sendResponse) => {
|
|
switch (action) {
|
|
case MSG_FETCH:
|
|
const { input, opts } = args;
|
|
fetchData(input, opts)
|
|
.then((data) => {
|
|
sendResponse({ data });
|
|
})
|
|
.catch((error) => {
|
|
sendResponse({ error: error.message });
|
|
});
|
|
break;
|
|
case MSG_FETCH_LIMIT:
|
|
const { interval, limit } = args;
|
|
fetchPool.update(interval, limit);
|
|
sendResponse({ data: "ok" });
|
|
break;
|
|
case MSG_FETCH_CLEAR:
|
|
fetchPool.clear();
|
|
sendResponse({ data: "ok" });
|
|
break;
|
|
default:
|
|
sendResponse({ error: `message action is unavailable: ${action}` });
|
|
}
|
|
return true;
|
|
}
|
|
);
|
|
|
|
/**
|
|
* 监听快捷键
|
|
*/
|
|
browser.commands.onCommand.addListener((command) => {
|
|
// console.log(`Command: ${command}`);
|
|
switch (command) {
|
|
case CMD_TOGGLE_TRANSLATE:
|
|
sendTabMsg(MSG_TRANS_TOGGLE);
|
|
break;
|
|
case CMD_TOGGLE_STYLE:
|
|
sendTabMsg(MSG_TRANS_TOGGLE_STYLE);
|
|
break;
|
|
default:
|
|
}
|
|
});
|