Skip to content

Commit 3645f64

Browse files
cyfung1031CodFrmCopilot
authored
✨ 接受 @Version 没有或空值 (#1216)
* [v1.3] 接受 @Version 没有或空值 * 删除console.log和老的注释代码 * Update src/app/service/service_worker/script.ts Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * unit test * 添加单元测试 --------- Co-authored-by: 王一之 <yz@ggnb.top> Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
1 parent d0061ab commit 3645f64

12 files changed

Lines changed: 308 additions & 98 deletions

File tree

src/app/service/content/gm_api/gm_info.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ export function evaluateGMInfo(envInfo: GMInfoEnv, script: TScriptInfo) {
3434
// TODO: 更多完整的信息(为了兼容Tampermonkey,后续待定)
3535
name: script.name,
3636
namespace: script.namespace,
37-
version: script.metadata.version?.[0],
37+
version: script.metadata.version?.[0] || "0.0",
3838
author: script.author,
3939
lastModified: script.updatetime,
4040
downloadURL: script.downloadUrl || null,

src/app/service/service_worker/script.ts

Lines changed: 7 additions & 55 deletions
Original file line numberDiff line numberDiff line change
@@ -384,7 +384,7 @@ export class ScriptService {
384384
const logger = this.logger.with({
385385
name: script.name,
386386
uuid: script.uuid,
387-
version: script.metadata.version![0],
387+
version: script.metadata.version?.[0] || "0.0",
388388
upsertBy,
389389
});
390390
let update = false;
@@ -803,15 +803,8 @@ export class ScriptService {
803803
logger.error("parse metadata failed");
804804
return false;
805805
}
806-
const newVersion = metadata.version && metadata.version[0];
807-
if (!newVersion) {
808-
logger.error("parse version failed", { version: metadata.version });
809-
return false;
810-
}
811-
let oldVersion = script.metadata.version && script.metadata.version[0];
812-
if (!oldVersion) {
813-
oldVersion = "0.0.0";
814-
}
806+
const newVersion = metadata.version?.[0] || "0.0";
807+
const oldVersion = script.metadata.version?.[0] || "0.0";
815808
// 对比版本大小
816809
if (ltever(newVersion, oldVersion)) {
817810
return false;
@@ -902,7 +895,8 @@ export class ScriptService {
902895
}
903896

904897
shouldIgnoreUpdate(script: Script, newMeta: Partial<Record<string, string[]>> | null) {
905-
return script.ignoreVersion === newMeta?.version?.[0];
898+
const newVersion = newMeta?.version?.[0];
899+
return typeof newVersion === "string" && script.ignoreVersion === newVersion;
906900
}
907901

908902
// 用于定时自动检查脚本更新
@@ -1139,7 +1133,6 @@ export class ScriptService {
11391133
}
11401134

11411135
requestCheckUpdate(uuid: string) {
1142-
// src/pages/options/routes/ScriptList.tsx
11431136
return this.checkUpdateAvailable(uuid).then((script) => {
11441137
if (script) {
11451138
// 如有更新则打开更新画面进行更新
@@ -1148,56 +1141,15 @@ export class ScriptService {
11481141
}
11491142
return false;
11501143
});
1151-
1152-
// 没有空值 case
1153-
/*
1154-
if (uuid) {
1155-
return this.checkUpdateAvailable(uuid).then((script) => {
1156-
if (script) {
1157-
// 如有更新则打开更新画面进行更新
1158-
this.openUpdatePage(script, "user");
1159-
return true;
1160-
}
1161-
return false;
1162-
});
1163-
} else {
1164-
// 批量检查更新
1165-
InfoNotification("检查更新", "正在检查所有的脚本更新");
1166-
this.scriptDAO
1167-
.all()
1168-
.then(async (scripts) => {
1169-
// 检查是否有更新
1170-
const results = await this.checkUpdatesAvailable(
1171-
scripts.map((script) => script.uuid),
1172-
{
1173-
MIN_DELAY: 300,
1174-
MAX_DELAY: 800,
1175-
}
1176-
);
1177-
return Promise.all(
1178-
scripts.map((script, i) => {
1179-
const result = results[i];
1180-
if (result) {
1181-
// 如有更新则打开更新画面进行更新
1182-
this.openUpdatePage(script, "user");
1183-
}
1184-
})
1185-
);
1186-
})
1187-
.then(() => {
1188-
InfoNotification("检查更新", "所有脚本检查完成");
1189-
});
1190-
return Promise.resolve(true); // 无视检查结果,立即回传true
1191-
}
1192-
*/
11931144
}
11941145

11951146
isInstalled({ name, namespace }: { name: string; namespace: string }): Promise<App.IsInstalledResponse> {
1147+
// 用於 window.external
11961148
return this.scriptDAO.findByNameAndNamespace(name, namespace).then((script) => {
11971149
if (script) {
11981150
return {
11991151
installed: true,
1200-
version: script.metadata.version && script.metadata.version[0],
1152+
version: script.metadata.version?.[0] || "0.0",
12011153
} as App.IsInstalledResponse;
12021154
}
12031155
return { installed: false } as App.IsInstalledResponse;

src/app/service/service_worker/script_update_check.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,8 @@ class ScriptUpdateCheck {
3232
if (!list) return [] as string[];
3333
const s = new Set<string>();
3434
for (const entry of list) {
35-
if (entry.script?.ignoreVersion === entry.newMeta?.version?.[0]) continue;
35+
const newVersion = entry.newMeta?.version?.[0];
36+
if (typeof newVersion === "string" && entry.script?.ignoreVersion === newVersion) continue;
3637
if (entry.script?.status !== 1) continue;
3738
if (!entry.script?.checkUpdate) continue;
3839
if (!entry.sites) continue;

src/app/service/service_worker/subscribe.ts

Lines changed: 2 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -190,15 +190,8 @@ export class SubscribeService {
190190
logger.error("parse metadata failed");
191191
return false;
192192
}
193-
const newVersion = metadata.version && metadata.version[0];
194-
if (!newVersion) {
195-
logger.error("parse version failed", { version: metadata.version });
196-
return false;
197-
}
198-
let oldVersion = subscribe.metadata.version && subscribe.metadata.version[0];
199-
if (!oldVersion) {
200-
oldVersion = "0.0.0";
201-
}
193+
const newVersion = metadata.version?.[0] || "0.0";
194+
const oldVersion = subscribe.metadata.version?.[0] || "0.0";
202195
// 对比版本大小
203196
if (ltever(newVersion, oldVersion)) {
204197
return false;

src/app/types.d.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ declare namespace App {
3434
export type IsInstalledResponse =
3535
| {
3636
installed: true;
37-
version: string | undefined;
37+
version: string;
3838
}
3939
| {
4040
installed: false;

src/pages/batchupdate/App.tsx

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -90,7 +90,8 @@ function App() {
9090
site.push(entry);
9191
continue;
9292
}
93-
const isIgnored = entry.script.ignoreVersion === entry.newMeta?.version?.[0];
93+
const newVersion = entry.newMeta?.version?.[0];
94+
const isIgnored = typeof newVersion === "string" && entry.script.ignoreVersion === newVersion;
9495
const mEntry = {
9596
...entry,
9697
};
@@ -267,12 +268,13 @@ function App() {
267268
<Link disabled={isDoingTask} onClick={() => onUpdateClick(item.uuid)}>
268269
{t("updatepage.update")}
269270
</Link>
270-
{item.script.ignoreVersion !== item.newMeta?.version?.[0] ? (
271+
{typeof item.newMeta?.version?.[0] === "string" &&
272+
item.script.ignoreVersion !== item.newMeta.version[0] ? (
271273
<>
272274
<Divider type="vertical" />
273275
<Link
274276
disabled={isDoingTask}
275-
onClick={() => onIgnoreClick(item.uuid, item.newMeta?.version?.[0])}
277+
onClick={() => onIgnoreClick(item.uuid, item.newMeta.version[0])}
276278
>
277279
{t("updatepage.ignore")}
278280
</Link>

src/pages/install/App.tsx

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -200,7 +200,9 @@ function App() {
200200
await scriptClient.install({ script: newScript, code });
201201
const metadata = newScript.metadata;
202202
setScriptInfo((prev) => (prev ? { ...prev, code, metadata } : prev));
203-
setOldScriptVersion(metadata!.version![0]);
203+
const scriptVersion = metadata.version?.[0];
204+
const oldScriptVersion = typeof scriptVersion === "string" ? scriptVersion : "N/A";
205+
setOldScriptVersion(oldScriptVersion);
204206
setUpsertScript(newScript);
205207
setDiffCode(code);
206208
};
@@ -289,15 +291,17 @@ function App() {
289291
prepare = await prepareSubscribeByCode(code, url);
290292
action = prepare.subscribe;
291293
if (prepare.oldSubscribe) {
292-
oldVersion = prepare.oldSubscribe!.metadata!.version![0] || "";
294+
const oldSubscribeVersion = prepare.oldSubscribe.metadata.version?.[0];
295+
oldVersion = typeof oldSubscribeVersion === "string" ? oldSubscribeVersion : "N/A";
293296
}
294297
diffCode = prepare.oldSubscribe?.code;
295298
} else {
296299
const knownUUID = isKnownUpdate ? info.uuid : undefined;
297300
prepare = await prepareScriptByCode(code, url, knownUUID, false, undefined, paramOptions);
298301
action = prepare.script;
299302
if (prepare.oldScript) {
300-
oldVersion = prepare.oldScript!.metadata!.version![0] || "";
303+
const oldScriptVersion = prepare.oldScript.metadata.version?.[0];
304+
oldVersion = typeof oldScriptVersion === "string" ? oldScriptVersion : "N/A";
301305
}
302306
diffCode = prepare.oldScriptCode;
303307
}
@@ -793,7 +797,7 @@ function App() {
793797
<Tag bordered>{oldScriptVersion}</Tag>
794798
</Tooltip>
795799
)}
796-
{metadataLive.version && metadataLive.version[0] !== oldScriptVersion && (
800+
{typeof metadataLive.version?.[0] === "string" && metadataLive.version[0] !== oldScriptVersion && (
797801
<Tooltip color="red" content={`${t("update_version")}: v${metadataLive.version[0]}`}>
798802
<Tag bordered color="red">
799803
{metadataLive.version[0]}

src/pages/options/routes/ScriptList/ScriptCard.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -231,7 +231,7 @@ export const ScriptCardItem = React.memo(
231231

232232
{/* 版本和更新时间 */}
233233
<div className="tw-flex tw-flex-row tw-gap-4 tw-text-sm tw-text-gray-500">
234-
{item.metadata.version && (
234+
{item.metadata.version?.[0] && (
235235
<div>
236236
<span className="tw-font-medium">
237237
{t("version")}

src/pages/options/routes/ScriptList/ScriptTable.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -396,7 +396,7 @@ const NameCell = React.memo(({ col, item }: { col: string; item: ListType }) =>
396396
NameCell.displayName = "NameCell";
397397

398398
const VersionCell = React.memo(({ item }: { item: ListType }) => {
399-
return item.metadata.version && item.metadata.version[0];
399+
return item.metadata.version?.[0] || "0.0";
400400
});
401401
VersionCell.displayName = "VersionCell";
402402

src/pages/options/routes/SubscribeList.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -158,7 +158,7 @@ function SubscribeList() {
158158
align: "center",
159159
key: "version",
160160
render(col, item: Subscribe) {
161-
return item.metadata.version && item.metadata.version[0];
161+
return item.metadata.version?.[0] || "0.0";
162162
},
163163
},
164164
{

0 commit comments

Comments
 (0)