value问题处理
Some checks failed
test / Run tests (push) Failing after 3s
build / Build (push) Failing after 6s
Some checks failed
test / Run tests (push) Failing after 3s
build / Build (push) Failing after 6s
This commit is contained in:
@ -3,6 +3,8 @@ import Logger from "@App/app/logger/logger";
|
||||
import { GetSender, Group, MessageConnect } from "@Packages/message/server";
|
||||
|
||||
export default class GMApi {
|
||||
logger: Logger = LoggerCore.logger().with({ service: "gmApi" });
|
||||
|
||||
constructor(private group: Group) {}
|
||||
|
||||
async dealXhrResponse(
|
||||
|
@ -282,7 +282,6 @@ export class Runtime {
|
||||
}
|
||||
|
||||
async runScript(script: ScriptRunResouce) {
|
||||
console.log("runScript", script);
|
||||
const exec = this.execScripts.get(script.uuid);
|
||||
// 如果正在运行,先释放
|
||||
if (exec) {
|
||||
|
@ -71,13 +71,15 @@ export default class GMApi {
|
||||
}
|
||||
|
||||
@PermissionVerify.API()
|
||||
async GM_setValue(request: Request) {
|
||||
console.log("setValue", request);
|
||||
async GM_setValue(request: Request, sender: GetSender) {
|
||||
if (!request.params || request.params.length !== 2) {
|
||||
return Promise.reject(new Error("param is failed"));
|
||||
}
|
||||
const [key, value] = request.params;
|
||||
await this.value.setValue(request.script.uuid, key, value);
|
||||
await this.value.setValue(request.script.uuid, key, value, {
|
||||
runFlag: request.runFlag,
|
||||
tabId: sender.getSender().tab?.id,
|
||||
});
|
||||
}
|
||||
|
||||
// 根据header生成dnr规则
|
||||
@ -183,7 +185,6 @@ export default class GMApi {
|
||||
|
||||
@PermissionVerify.API()
|
||||
GM_registerMenuCommand(request: Request, sender: GetSender) {
|
||||
console.log("registerMenuCommand", request.params, sender.getSender(), sender.getSender().tab!.id!);
|
||||
const [id, name, accessKey] = request.params;
|
||||
// 触发菜单注册, 在popup中处理
|
||||
this.mq.emit("registerMenuCommand", {
|
||||
|
@ -20,7 +20,7 @@ import {
|
||||
subscribeScriptMenuRegister,
|
||||
subscribeScriptRunStatus,
|
||||
} from "../queue";
|
||||
import { storageKey } from "@App/runtime/utils";
|
||||
import { getStorageName } from "@App/runtime/utils";
|
||||
|
||||
export type ScriptMenuItem = {
|
||||
id: number;
|
||||
@ -87,7 +87,6 @@ export class PopupService {
|
||||
// 移除之前所有的菜单
|
||||
chrome.contextMenus.removeAll();
|
||||
const [menu, backgroundMenu] = await Promise.all([this.getScriptMenu(tabId), this.getScriptMenu(-1)]);
|
||||
console.log(menu, backgroundMenu, tabId);
|
||||
if (!menu.length && !backgroundMenu.length) {
|
||||
return;
|
||||
}
|
||||
@ -140,7 +139,6 @@ export class PopupService {
|
||||
if (script) {
|
||||
script.menus = script.menus.filter((item) => item.id !== id);
|
||||
}
|
||||
console.log("unregister menu", data);
|
||||
this.updateScriptMenu();
|
||||
return data;
|
||||
});
|
||||
@ -149,7 +147,6 @@ export class PopupService {
|
||||
updateScriptMenu() {
|
||||
// 获取当前页面并更新菜单
|
||||
chrome.tabs.query({ active: true, currentWindow: true }, (tabs) => {
|
||||
console.log("query", tabs);
|
||||
if (!tabs.length) {
|
||||
return;
|
||||
}
|
||||
@ -163,7 +160,7 @@ export class PopupService {
|
||||
return {
|
||||
uuid: script.uuid,
|
||||
name: script.name,
|
||||
storageName: storageKey(script),
|
||||
storageName: getStorageName(script),
|
||||
enable: script.status === SCRIPT_STATUS_ENABLE,
|
||||
updatetime: script.updatetime || 0,
|
||||
hasUserConfig: !!script.config,
|
||||
|
@ -194,6 +194,8 @@ export class RuntimeService {
|
||||
})
|
||||
);
|
||||
|
||||
console.log("pageLoad", enableScript);
|
||||
|
||||
this.mq.emit("pageLoad", {
|
||||
tabId: chromeSender.tab?.id,
|
||||
frameId: chromeSender.frameId,
|
||||
|
@ -2,12 +2,13 @@ import LoggerCore from "@App/app/logger/core";
|
||||
import Logger from "@App/app/logger/logger";
|
||||
import { Script, SCRIPT_TYPE_NORMAL, ScriptDAO } from "@App/app/repo/scripts";
|
||||
import { ValueDAO } from "@App/app/repo/value";
|
||||
import { storageKey } from "@App/runtime/utils";
|
||||
import { getStorageName } from "@App/runtime/utils";
|
||||
import { Group, MessageSend } from "@Packages/message/server";
|
||||
import { RuntimeService } from "./runtime";
|
||||
import { PopupService } from "./popup";
|
||||
import { ValueUpdateData } from "@App/runtime/content/exec_script";
|
||||
import { ValueUpdateData, ValueUpdateSender } from "@App/runtime/content/exec_script";
|
||||
import { sendMessage } from "@Packages/message/client";
|
||||
import Cache from "@App/app/cache";
|
||||
|
||||
export class ValueService {
|
||||
logger: Logger;
|
||||
@ -24,46 +25,50 @@ export class ValueService {
|
||||
}
|
||||
|
||||
async getScriptValue(script: Script) {
|
||||
const ret = await this.valueDAO.get(storageKey(script));
|
||||
const ret = await this.valueDAO.get(getStorageName(script));
|
||||
if (!ret) {
|
||||
return {};
|
||||
}
|
||||
return ret.data;
|
||||
}
|
||||
|
||||
async setValue(uuid: string, key: string, value: any, sender?: any): Promise<boolean> {
|
||||
async setValue(uuid: string, key: string, value: any, sender: ValueUpdateSender): Promise<boolean> {
|
||||
// 查询出脚本
|
||||
const script = await this.scriptDAO.get(uuid);
|
||||
if (!script) {
|
||||
return Promise.reject(new Error("script not found"));
|
||||
}
|
||||
// 查询老的值
|
||||
const storageName = storageKey(script);
|
||||
const valueModel = await this.valueDAO.get(storageName);
|
||||
const storageName = getStorageName(script);
|
||||
let oldValue;
|
||||
if (!valueModel) {
|
||||
this.valueDAO.save(storageName, {
|
||||
uuid: script.uuid,
|
||||
storageName: storageName,
|
||||
data: { [key]: value },
|
||||
createtime: Date.now(),
|
||||
updatetime: Date.now(),
|
||||
});
|
||||
} else {
|
||||
oldValue = valueModel.data[key];
|
||||
valueModel.data[key] = value;
|
||||
this.valueDAO.save(storageName, valueModel);
|
||||
}
|
||||
// 使用事务来保证数据一致性
|
||||
await Cache.getInstance().tx("setValue:" + storageName, async () => {
|
||||
const valueModel = await this.valueDAO.get(storageName);
|
||||
if (!valueModel) {
|
||||
await this.valueDAO.save(storageName, {
|
||||
uuid: script.uuid,
|
||||
storageName: storageName,
|
||||
data: { [key]: value },
|
||||
createtime: Date.now(),
|
||||
updatetime: Date.now(),
|
||||
});
|
||||
} else {
|
||||
oldValue = valueModel.data[key];
|
||||
valueModel.data[key] = value;
|
||||
await this.valueDAO.save(storageName, valueModel);
|
||||
}
|
||||
console.log(valueModel);
|
||||
return true;
|
||||
});
|
||||
const sendData: ValueUpdateData = {
|
||||
oldValue,
|
||||
sender,
|
||||
value,
|
||||
key,
|
||||
uuid,
|
||||
storageKey: storageName,
|
||||
storageName: storageName,
|
||||
};
|
||||
// 判断是后台脚本还是前台脚本
|
||||
console.log("value update", script, sendData);
|
||||
if (script.type === SCRIPT_TYPE_NORMAL) {
|
||||
chrome.tabs.query({}, (tabs) => {
|
||||
// 推送到所有加载了本脚本的tab中
|
||||
|
Reference in New Issue
Block a user