Skip to content

Commit

Permalink
🐛 修复反复储存oldScript对象问题
Browse files Browse the repository at this point in the history
  • Loading branch information
CodFrm committed Jun 25, 2023
1 parent 40bc8da commit 4832a80
Show file tree
Hide file tree
Showing 8 changed files with 49 additions and 41 deletions.
16 changes: 8 additions & 8 deletions src/app/service/script/manager.ts
Expand Up @@ -197,19 +197,19 @@ export class ScriptManager extends Manager {
// 是否静默更新
if (this.systemConfig.silenceUpdateScript) {
try {
const newScript = await prepareScriptByCode(
const prepareScript = await prepareScriptByCode(
info.code,
script.downloadUrl || script.checkUpdateUrl!,
script.uuid
);
if (
checkSilenceUpdate(
newScript.oldScript!.metadata,
newScript.metadata
prepareScript.oldScript!.metadata,
prepareScript.script.metadata
)
) {
logger.info("silence update script");
this.event.upsertHandler(newScript);
this.event.upsertHandler(prepareScript.script);
return;
}
} catch (e) {
Expand All @@ -233,10 +233,10 @@ export class ScriptManager extends Manager {
subscribeUrl?: string
) {
const info = await fetchScriptInfo(url, "system", false, uuidv4());
const script = await prepareScriptByCode(info.code, url, info.uuid);
script.subscribeUrl = subscribeUrl;
await this.event.upsertHandler(script, "system");
return Promise.resolve(script);
const prepareScript = await prepareScriptByCode(info.code, url, info.uuid);
prepareScript.script.subscribeUrl = subscribeUrl;
await this.event.upsertHandler(prepareScript.script, "system");
return Promise.resolve(prepareScript.script);
}
}

Expand Down
7 changes: 4 additions & 3 deletions src/app/service/synchronize/manager.ts
Expand Up @@ -368,13 +368,14 @@ export default class SynchronizeManager extends Manager {
const meta = await fs.open(file.meta);
const metaJson = (await meta.read("string")) as string;
const metaObj = JSON.parse(metaJson) as SyncMeta;
const newScript = await prepareScriptByCode(
const prepareScript = await prepareScriptByCode(
code,
script?.downloadUrl || metaObj.downloadUrl || "",
script?.uuid || metaObj.uuid
);
newScript.origin = newScript.origin || metaObj.origin;
this.scriptManager.event.upsertHandler(newScript, "sync");
prepareScript.script.origin =
prepareScript.script.origin || metaObj.origin;
this.scriptManager.event.upsertHandler(prepareScript.script, "sync");
logger.info("pull script success");
} catch (e) {
logger.error("pull script error", Logger.E(e));
Expand Down
7 changes: 5 additions & 2 deletions src/app/service/system/manager.ts
Expand Up @@ -151,12 +151,15 @@ export class SystemManager extends Manager {
switch (data.action) {
case "onchange": {
const code = data.data.script;
const script = await prepareScriptByCode(
const prepareScript = await prepareScriptByCode(
code,
"",
uuidv5(data.data.uri, uuidv5.URL)
);
this.scriptManager.event.upsertHandler(script, "vscode");
this.scriptManager.event.upsertHandler(
prepareScript.script,
"vscode"
);
break;
}
default:
Expand Down
3 changes: 2 additions & 1 deletion src/pages/import/App.tsx
Expand Up @@ -66,11 +66,12 @@ function App() {
const result = await Promise.all(
backDataScript.map(async (item) => {
try {
item.script = await prepareScriptByCode(
const prepareScript = await prepareScriptByCode(
item.code,
item.options?.meta.file_url || "",
item.options?.meta.sc_uuid || undefined
);
item.script = prepareScript.script;
} catch (e: any) {
item.error = e.toString();
return Promise.resolve(item);
Expand Down
33 changes: 18 additions & 15 deletions src/pages/install/description.tsx
Expand Up @@ -131,28 +131,31 @@ export default function Description() {
if (!resp) {
return;
}
let script:
| (Script & { oldScript?: Script })
| (Subscribe & { oldSubscribe?: Subscribe });
let prepare:
| { script: Script; oldScript?: Script }
| { subscribe: Subscribe; oldSubscribe?: Subscribe };
let action: Script | Subscribe;
if (resp.isSubscribe) {
setIsSub(true);
script = await prepareSubscribeByCode(resp.code, resp.url);
setOldScript(script.oldSubscribe);
delete script.oldSubscribe;
prepare = await prepareSubscribeByCode(resp.code, resp.url);
action = prepare.subscribe;
setOldScript(prepare.oldSubscribe);
delete prepare.oldSubscribe;
} else {
if (resp.isUpdate) {
script = await prepareScriptByCode(resp.code, resp.url, resp.uuid);
prepare = await prepareScriptByCode(resp.code, resp.url, resp.uuid);
} else {
script = await prepareScriptByCode(resp.code, resp.url);
prepare = await prepareScriptByCode(resp.code, resp.url);
}
setOldScript(script.oldScript);
delete script.oldScript;
action = prepare.script;
setOldScript(prepare.oldScript);
delete prepare.oldScript;
}
setEnable(script.status === SUBSCRIBE_STATUS_ENABLE);
setEnable(action.status === SUBSCRIBE_STATUS_ENABLE);
if (resp.source === "system") {
setCountdown(60);
}
const meta = script.metadata;
const meta = action.metadata;
if (!meta) {
return;
}
Expand All @@ -177,8 +180,8 @@ export default function Description() {
if (meta.require) {
perm.push({ label: t("script_requires"), value: meta.require });
}
setUpsertScript(script);
if (script.id !== 0) {
setUpsertScript(action);
if (action.id !== 0) {
setIsUpdate(true);
}
setPermission(perm);
Expand Down Expand Up @@ -224,7 +227,7 @@ export default function Description() {
}
// 修改网页显示title
document.title = `${
script.id === 0 ? t("install_script") : t("update_script")
action.id === 0 ? t("install_script") : t("update_script")
} - ${meta.name} - ScriptCat`;
});
}, []);
Expand Down
6 changes: 4 additions & 2 deletions src/pages/options/routes/script/ScriptEditor.tsx
Expand Up @@ -135,7 +135,8 @@ const emptyScript = async (template: string, hotKeys: any, target?: string) => {
}
break;
}
const script = await prepareScriptByCode(code, "", uuidv4());
const prepareScript = await prepareScriptByCode(code, "", uuidv4());
const { script } = prepareScript;

return Promise.resolve({
script,
Expand Down Expand Up @@ -191,7 +192,8 @@ function ScriptEditor() {
// 解析code生成新的script并更新
return new Promise((resolve) => {
prepareScriptByCode(e.getValue(), script.origin || "", script.uuid)
.then((newScript) => {
.then((prepareScript) => {
const newScript = prepareScript.script;
scriptCtrl.upsert(newScript).then(
() => {
if (!newScript.name) {
Expand Down
14 changes: 6 additions & 8 deletions src/pkg/utils/script.ts
Expand Up @@ -220,7 +220,7 @@ export function prepareScriptByCode(
code: string,
url: string,
uuid?: string
): Promise<Script & { oldScript?: Script }> {
): Promise<{ script: Script; oldScript?: Script }> {
const dao = new ScriptDAO();
return new Promise((resolve, reject) => {
const metadata = parseMetadata(code);
Expand Down Expand Up @@ -269,7 +269,7 @@ export function prepareScriptByCode(
} else {
newUUID = uuidv4();
}
let script: Script & { oldScript?: Script } = {
let script: Script = {
id: 0,
uuid: newUUID,
name: metadata.name[0],
Expand Down Expand Up @@ -314,7 +314,6 @@ export function prepareScriptByCode(
reject(new Error("脚本类型不匹配,普通脚本与后台脚本不能互相转变"));
return;
}
script.oldScript = old;
script = copyScript(script, old);
} else {
// 前台脚本默认开启
Expand All @@ -323,7 +322,7 @@ export function prepareScriptByCode(
}
script.checktime = new Date().getTime();
}
resolve(script);
resolve({ script, oldScript: old });
};
handler();
});
Expand All @@ -332,7 +331,7 @@ export function prepareScriptByCode(
export async function prepareSubscribeByCode(
code: string,
url: string
): Promise<Subscribe & { oldSubscribe?: Subscribe }> {
): Promise<{ subscribe: Subscribe; oldSubscribe?: Subscribe }> {
const dao = new SubscribeDAO();
const metadata = parseMetadata(code);
if (metadata == null) {
Expand All @@ -341,7 +340,7 @@ export async function prepareSubscribeByCode(
if (metadata.name === undefined) {
throw new Error("订阅名不能为空");
}
let subscribe: Subscribe & { oldSubscribe?: Subscribe } = {
let subscribe: Subscribe = {
id: 0,
url,
name: metadata.name[0],
Expand All @@ -356,8 +355,7 @@ export async function prepareSubscribeByCode(
};
const old = await dao.findByUrl(url);
if (old) {
subscribe.oldSubscribe = old;
subscribe = copySubscribe(subscribe, old);
}
return Promise.resolve(subscribe);
return Promise.resolve({ subscribe, oldSubscribe: old });
}
4 changes: 2 additions & 2 deletions src/types/scriptcat.d.ts
Expand Up @@ -190,8 +190,8 @@ declare function CAT_click(x: number, y: number): void;
declare function CAT_userConfig(): void;

/**
* 操控脚本同步配置的文件储存源,将会在同步目录下创建一个app/uuid目录供此 API 使用
* 上传时默认覆盖同名文件, 请注意这是一个试验性质的 API, 后续可能会改变
* 操控管理器设置的储存系统,将会在目录下创建一个app/uuid目录供此 API 使用,如果指定了baseDir参数,则会使用baseDir作为基础目录
* 上传时默认覆盖同名文件
* @param action 操作类型 list 列出指定目录所有文件, upload 上传文件, download 下载文件, delete 删除文件, config 打开配置页, 暂时不提供move/mkdir等操作
* @param details
*/
Expand Down

0 comments on commit 4832a80

Please sign in to comment.