Skip to content

Commit 4832a80

Browse files
committed
🐛 修复反复储存oldScript对象问题
1 parent 40bc8da commit 4832a80

File tree

8 files changed

+49
-41
lines changed

8 files changed

+49
-41
lines changed

src/app/service/script/manager.ts

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -197,19 +197,19 @@ export class ScriptManager extends Manager {
197197
// 是否静默更新
198198
if (this.systemConfig.silenceUpdateScript) {
199199
try {
200-
const newScript = await prepareScriptByCode(
200+
const prepareScript = await prepareScriptByCode(
201201
info.code,
202202
script.downloadUrl || script.checkUpdateUrl!,
203203
script.uuid
204204
);
205205
if (
206206
checkSilenceUpdate(
207-
newScript.oldScript!.metadata,
208-
newScript.metadata
207+
prepareScript.oldScript!.metadata,
208+
prepareScript.script.metadata
209209
)
210210
) {
211211
logger.info("silence update script");
212-
this.event.upsertHandler(newScript);
212+
this.event.upsertHandler(prepareScript.script);
213213
return;
214214
}
215215
} catch (e) {
@@ -233,10 +233,10 @@ export class ScriptManager extends Manager {
233233
subscribeUrl?: string
234234
) {
235235
const info = await fetchScriptInfo(url, "system", false, uuidv4());
236-
const script = await prepareScriptByCode(info.code, url, info.uuid);
237-
script.subscribeUrl = subscribeUrl;
238-
await this.event.upsertHandler(script, "system");
239-
return Promise.resolve(script);
236+
const prepareScript = await prepareScriptByCode(info.code, url, info.uuid);
237+
prepareScript.script.subscribeUrl = subscribeUrl;
238+
await this.event.upsertHandler(prepareScript.script, "system");
239+
return Promise.resolve(prepareScript.script);
240240
}
241241
}
242242

src/app/service/synchronize/manager.ts

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -368,13 +368,14 @@ export default class SynchronizeManager extends Manager {
368368
const meta = await fs.open(file.meta);
369369
const metaJson = (await meta.read("string")) as string;
370370
const metaObj = JSON.parse(metaJson) as SyncMeta;
371-
const newScript = await prepareScriptByCode(
371+
const prepareScript = await prepareScriptByCode(
372372
code,
373373
script?.downloadUrl || metaObj.downloadUrl || "",
374374
script?.uuid || metaObj.uuid
375375
);
376-
newScript.origin = newScript.origin || metaObj.origin;
377-
this.scriptManager.event.upsertHandler(newScript, "sync");
376+
prepareScript.script.origin =
377+
prepareScript.script.origin || metaObj.origin;
378+
this.scriptManager.event.upsertHandler(prepareScript.script, "sync");
378379
logger.info("pull script success");
379380
} catch (e) {
380381
logger.error("pull script error", Logger.E(e));

src/app/service/system/manager.ts

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -151,12 +151,15 @@ export class SystemManager extends Manager {
151151
switch (data.action) {
152152
case "onchange": {
153153
const code = data.data.script;
154-
const script = await prepareScriptByCode(
154+
const prepareScript = await prepareScriptByCode(
155155
code,
156156
"",
157157
uuidv5(data.data.uri, uuidv5.URL)
158158
);
159-
this.scriptManager.event.upsertHandler(script, "vscode");
159+
this.scriptManager.event.upsertHandler(
160+
prepareScript.script,
161+
"vscode"
162+
);
160163
break;
161164
}
162165
default:

src/pages/import/App.tsx

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -66,11 +66,12 @@ function App() {
6666
const result = await Promise.all(
6767
backDataScript.map(async (item) => {
6868
try {
69-
item.script = await prepareScriptByCode(
69+
const prepareScript = await prepareScriptByCode(
7070
item.code,
7171
item.options?.meta.file_url || "",
7272
item.options?.meta.sc_uuid || undefined
7373
);
74+
item.script = prepareScript.script;
7475
} catch (e: any) {
7576
item.error = e.toString();
7677
return Promise.resolve(item);

src/pages/install/description.tsx

Lines changed: 18 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -131,28 +131,31 @@ export default function Description() {
131131
if (!resp) {
132132
return;
133133
}
134-
let script:
135-
| (Script & { oldScript?: Script })
136-
| (Subscribe & { oldSubscribe?: Subscribe });
134+
let prepare:
135+
| { script: Script; oldScript?: Script }
136+
| { subscribe: Subscribe; oldSubscribe?: Subscribe };
137+
let action: Script | Subscribe;
137138
if (resp.isSubscribe) {
138139
setIsSub(true);
139-
script = await prepareSubscribeByCode(resp.code, resp.url);
140-
setOldScript(script.oldSubscribe);
141-
delete script.oldSubscribe;
140+
prepare = await prepareSubscribeByCode(resp.code, resp.url);
141+
action = prepare.subscribe;
142+
setOldScript(prepare.oldSubscribe);
143+
delete prepare.oldSubscribe;
142144
} else {
143145
if (resp.isUpdate) {
144-
script = await prepareScriptByCode(resp.code, resp.url, resp.uuid);
146+
prepare = await prepareScriptByCode(resp.code, resp.url, resp.uuid);
145147
} else {
146-
script = await prepareScriptByCode(resp.code, resp.url);
148+
prepare = await prepareScriptByCode(resp.code, resp.url);
147149
}
148-
setOldScript(script.oldScript);
149-
delete script.oldScript;
150+
action = prepare.script;
151+
setOldScript(prepare.oldScript);
152+
delete prepare.oldScript;
150153
}
151-
setEnable(script.status === SUBSCRIBE_STATUS_ENABLE);
154+
setEnable(action.status === SUBSCRIBE_STATUS_ENABLE);
152155
if (resp.source === "system") {
153156
setCountdown(60);
154157
}
155-
const meta = script.metadata;
158+
const meta = action.metadata;
156159
if (!meta) {
157160
return;
158161
}
@@ -177,8 +180,8 @@ export default function Description() {
177180
if (meta.require) {
178181
perm.push({ label: t("script_requires"), value: meta.require });
179182
}
180-
setUpsertScript(script);
181-
if (script.id !== 0) {
183+
setUpsertScript(action);
184+
if (action.id !== 0) {
182185
setIsUpdate(true);
183186
}
184187
setPermission(perm);
@@ -224,7 +227,7 @@ export default function Description() {
224227
}
225228
// 修改网页显示title
226229
document.title = `${
227-
script.id === 0 ? t("install_script") : t("update_script")
230+
action.id === 0 ? t("install_script") : t("update_script")
228231
} - ${meta.name} - ScriptCat`;
229232
});
230233
}, []);

src/pages/options/routes/script/ScriptEditor.tsx

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -135,7 +135,8 @@ const emptyScript = async (template: string, hotKeys: any, target?: string) => {
135135
}
136136
break;
137137
}
138-
const script = await prepareScriptByCode(code, "", uuidv4());
138+
const prepareScript = await prepareScriptByCode(code, "", uuidv4());
139+
const { script } = prepareScript;
139140

140141
return Promise.resolve({
141142
script,
@@ -191,7 +192,8 @@ function ScriptEditor() {
191192
// 解析code生成新的script并更新
192193
return new Promise((resolve) => {
193194
prepareScriptByCode(e.getValue(), script.origin || "", script.uuid)
194-
.then((newScript) => {
195+
.then((prepareScript) => {
196+
const newScript = prepareScript.script;
195197
scriptCtrl.upsert(newScript).then(
196198
() => {
197199
if (!newScript.name) {

src/pkg/utils/script.ts

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -220,7 +220,7 @@ export function prepareScriptByCode(
220220
code: string,
221221
url: string,
222222
uuid?: string
223-
): Promise<Script & { oldScript?: Script }> {
223+
): Promise<{ script: Script; oldScript?: Script }> {
224224
const dao = new ScriptDAO();
225225
return new Promise((resolve, reject) => {
226226
const metadata = parseMetadata(code);
@@ -269,7 +269,7 @@ export function prepareScriptByCode(
269269
} else {
270270
newUUID = uuidv4();
271271
}
272-
let script: Script & { oldScript?: Script } = {
272+
let script: Script = {
273273
id: 0,
274274
uuid: newUUID,
275275
name: metadata.name[0],
@@ -314,7 +314,6 @@ export function prepareScriptByCode(
314314
reject(new Error("脚本类型不匹配,普通脚本与后台脚本不能互相转变"));
315315
return;
316316
}
317-
script.oldScript = old;
318317
script = copyScript(script, old);
319318
} else {
320319
// 前台脚本默认开启
@@ -323,7 +322,7 @@ export function prepareScriptByCode(
323322
}
324323
script.checktime = new Date().getTime();
325324
}
326-
resolve(script);
325+
resolve({ script, oldScript: old });
327326
};
328327
handler();
329328
});
@@ -332,7 +331,7 @@ export function prepareScriptByCode(
332331
export async function prepareSubscribeByCode(
333332
code: string,
334333
url: string
335-
): Promise<Subscribe & { oldSubscribe?: Subscribe }> {
334+
): Promise<{ subscribe: Subscribe; oldSubscribe?: Subscribe }> {
336335
const dao = new SubscribeDAO();
337336
const metadata = parseMetadata(code);
338337
if (metadata == null) {
@@ -341,7 +340,7 @@ export async function prepareSubscribeByCode(
341340
if (metadata.name === undefined) {
342341
throw new Error("订阅名不能为空");
343342
}
344-
let subscribe: Subscribe & { oldSubscribe?: Subscribe } = {
343+
let subscribe: Subscribe = {
345344
id: 0,
346345
url,
347346
name: metadata.name[0],
@@ -356,8 +355,7 @@ export async function prepareSubscribeByCode(
356355
};
357356
const old = await dao.findByUrl(url);
358357
if (old) {
359-
subscribe.oldSubscribe = old;
360358
subscribe = copySubscribe(subscribe, old);
361359
}
362-
return Promise.resolve(subscribe);
360+
return Promise.resolve({ subscribe, oldSubscribe: old });
363361
}

src/types/scriptcat.d.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -190,8 +190,8 @@ declare function CAT_click(x: number, y: number): void;
190190
declare function CAT_userConfig(): void;
191191

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

0 commit comments

Comments
 (0)