Skip to content

Commit 51f3d0c

Browse files
authored
⚡️ 基於MV3版修正小量共通功能代码 (#614)
1 parent 3348f26 commit 51f3d0c

12 files changed

Lines changed: 202 additions & 211 deletions

File tree

src/app/repo/scripts.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ export const SCRIPT_RUN_STATUS_ERROR: SCRIPT_RUN_STATUS = "error";
2424
// 弃用
2525
export const SCRIPT_RUN_STATUS_RETRY: SCRIPT_RUN_STATUS = "retry";
2626

27-
export type Metadata = { [key: string]: string[] };
27+
export type SCMetadata = Partial<Record<string, string[]>>;
2828

2929
export type ConfigType =
3030
| "text"
@@ -63,8 +63,8 @@ export interface Script {
6363
origin?: string; // 脚本来源
6464
checkUpdateUrl?: string; // 检查更新URL
6565
downloadUrl?: string; // 脚本下载URL
66-
metadata: Metadata; // 脚本的元数据
67-
selfMetadata?: Metadata; // 自定义脚本元数据
66+
metadata: SCMetadata; // 脚本的元数据
67+
selfMetadata?: SCMetadata; // 自定义脚本元数据
6868
subscribeUrl?: string; // 如果是通过订阅脚本安装的话,会有订阅地址
6969
config?: UserConfig; // 通过UserConfig定义的用户配置
7070
type: SCRIPT_TYPE; // 脚本类型 1:普通脚本 2:定时脚本 3:后台脚本

src/app/repo/subscribe.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import { DAO, db } from "./dao";
22

3-
export type Metadata = { [key: string]: string[] };
3+
export type SCMetadata = Partial<Record<string, string[]>>;
44

55
export type SUBSCRIBE_STATUS = 1 | 2 | 3 | 4;
66
export const SUBSCRIBE_STATUS_ENABLE: SUBSCRIBE_STATUS = 1;
@@ -18,7 +18,7 @@ export interface Subscribe {
1818
code: string;
1919
author: string;
2020
scripts: { [key: string]: SubscribeScript };
21-
metadata: Metadata;
21+
metadata: SCMetadata;
2222
status: SUBSCRIBE_STATUS;
2323
createtime: number;
2424
updatetime?: number;

src/app/service/script/manager.ts

Lines changed: 17 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import { v4 as uuidv4 } from "uuid";
2-
import { fetchScriptInfo, prepareScriptByCode } from "@App/pkg/utils/script";
2+
import { fetchScriptBody, fetchScriptInfo, parseMetadata, prepareScriptByCode } from "@App/pkg/utils/script";
33
import Cache from "@App/app/cache";
44
import CacheKey from "@App/pkg/utils/cache_key";
55
import { MessageHander } from "@App/app/message/message";
@@ -132,48 +132,43 @@ export class ScriptManager extends Manager {
132132
// 检查更新
133133
const script = await this.scriptDAO.findById(id);
134134
if (!script) {
135-
return Promise.resolve(false);
135+
return false;
136136
}
137137
this.scriptDAO.update(id, { checktime: new Date().getTime() });
138138
if (!script.checkUpdateUrl) {
139-
return Promise.resolve(false);
139+
return false;
140140
}
141141
const logger = LoggerCore.getLogger({
142142
scriptId: id,
143143
name: script.name,
144144
});
145145
try {
146-
const info = await fetchScriptInfo(
147-
script.checkUpdateUrl,
148-
source,
149-
false,
150-
script.uuid
151-
);
152-
const { metadata } = info;
146+
const code = await fetchScriptBody(script.checkUpdateUrl);
147+
const metadata = parseMetadata(code);
153148
if (!metadata) {
154149
logger.error("parse metadata failed");
155-
return Promise.resolve(false);
150+
return false;
156151
}
157152
const newVersion = metadata.version && metadata.version[0];
158153
if (!newVersion) {
159-
logger.error("parse version failed", { version: metadata.version[0] });
160-
return Promise.resolve(false);
154+
logger.error("parse version failed", { version: metadata.version });
155+
return false;
161156
}
162157
let oldVersion = script.metadata.version && script.metadata.version[0];
163158
if (!oldVersion) {
164159
oldVersion = "0.0.0";
165160
}
166161
// 对比版本大小
167162
if (ltever(newVersion, oldVersion, logger)) {
168-
return Promise.resolve(false);
163+
return false;
169164
}
170165
// 进行更新
171166
this.openUpdatePage(script, source);
172167
} catch (e) {
173168
logger.error("check update failed", Logger.E(e));
174-
return Promise.resolve(false);
169+
return false;
175170
}
176-
return Promise.resolve(true);
171+
return true;
177172
}
178173

179174
// 打开更新窗口
@@ -229,11 +224,12 @@ export class ScriptManager extends Manager {
229224
source: InstallSource,
230225
subscribeUrl?: string
231226
) {
232-
const info = await fetchScriptInfo(url, source, false, uuidv4());
233-
const prepareScript = await prepareScriptByCode(info.code, url, info.uuid);
234-
prepareScript.script.subscribeUrl = subscribeUrl;
235-
await this.event.upsertHandler(prepareScript.script, source);
236-
return Promise.resolve(prepareScript.script);
227+
const uuid = uuidv4();
228+
const code = await fetchScriptBody(url);
229+
const { script } = await prepareScriptByCode(code, url, uuid);
230+
script.subscribeUrl = subscribeUrl;
231+
await this.event.upsertHandler(script, source);
232+
return Promise.resolve(script);
237233
}
238234
}
239235

src/app/service/subscribe/manager.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -134,7 +134,7 @@ export default class SubscribeManager extends Manager {
134134
subscribe.url,
135135
source,
136136
false,
137-
subscribe.url
137+
subscribe.url // 应为 uuid
138138
);
139139
const { metadata } = info;
140140
if (!metadata) {
@@ -143,7 +143,7 @@ export default class SubscribeManager extends Manager {
143143
}
144144
const newVersion = metadata.version && metadata.version[0];
145145
if (!newVersion) {
146-
logger.error("parse version failed", { version: metadata.version[0] });
146+
logger.error("parse version failed", { version: metadata.version });
147147
return Promise.resolve(false);
148148
}
149149
let oldVersion =

src/locales/locales.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ import i18n from "i18next";
22
import { initReactI18next } from "react-i18next";
33
import dayjs from "dayjs";
44
import relativeTime from "dayjs/plugin/relativeTime";
5-
import { Metadata } from "@App/app/repo/scripts";
5+
import { SCMetadata } from "@App/app/repo/scripts";
66
import enUS from "./en-US/translation.json";
77
import viVN from "./vi-VN/translation.json";
88
import zhCN from "./zh-CN/translation.json";
@@ -51,13 +51,13 @@ if (!localStorage.language) {
5151
}
5252
dayjs.extend(relativeTime);
5353

54-
export function i18nName(script: { name: string; metadata: Metadata }) {
54+
export function i18nName(script: { name: string; metadata: SCMetadata }) {
5555
return script.metadata[`name:${i18n.language.toLowerCase()}`]
5656
? script.metadata[`name:${i18n.language.toLowerCase()}`][0]
5757
: script.name;
5858
}
5959

60-
export function i18nDescription(script: { metadata: Metadata }) {
60+
export function i18nDescription(script: { metadata: SCMetadata }) {
6161
return script.metadata[`description:${i18n.language.toLowerCase()}`]
6262
? script.metadata[`description:${i18n.language.toLowerCase()}`][0]
6363
: script.metadata.description;

src/pages/install/description.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ import {
1717
type ScriptInfo,
1818
} from "@App/pkg/utils/script";
1919
import {
20-
Metadata,
20+
SCMetadata,
2121
Script,
2222
SCRIPT_STATUS_DISABLE,
2323
SCRIPT_STATUS_ENABLE,
@@ -38,7 +38,7 @@ const closeWindow = () => {
3838

3939
export default function Description() {
4040
const [permission, setPermission] = useState<Permission>([]);
41-
const [metadata, setMetadata] = useState<Metadata>({});
41+
const [metadata, setMetadata] = useState<SCMetadata>({});
4242
// 脚本信息包括脚本代码、下载url,但是不包括解析代码后得到的metadata,通过background的缓存获取
4343
const [info, setInfo] = useState<ScriptInfo>();
4444
// 对脚本详细的描述

src/pages/options/routes/utils.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
/* eslint-disable import/prefer-default-export */
22
import React from "react";
33
import IoC from "@App/app/ioc";
4-
import { Metadata, Script, ScriptDAO } from "@App/app/repo/scripts";
4+
import { SCMetadata, Script, ScriptDAO } from "@App/app/repo/scripts";
55
import ValueManager from "@App/app/service/value/manager";
66
import { Avatar, Button, Space, Tooltip } from "@arco-design/web-react";
77
import {
@@ -192,7 +192,7 @@ export function getValues(script: Script) {
192192
}
193193

194194
export type ScriptIconsProps = {
195-
script: { name: string; metadata: Metadata };
195+
script: { name: string; metadata: SCMetadata };
196196
size?: number;
197197
style?: React.CSSProperties;
198198
};

src/pages/popup/App.tsx

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ import { RiMessage2Line } from "react-icons/ri";
2828
import semver from "semver";
2929
import { useTranslation } from "react-i18next";
3030
import ScriptMenuList from "../components/ScriptMenuList";
31+
import { getCurrentTab } from "@App/pkg/utils/utils";
3132

3233
const CollapseItem = Collapse.Item;
3334

@@ -69,13 +70,13 @@ function App() {
6970
systemManage.getVersion().then((res) => {
7071
res && setVersion(res);
7172
});
72-
chrome.tabs.query({ active: true, currentWindow: true }, (tabs) => {
73-
if (!tabs.length) {
73+
getCurrentTab().then((tab) => {
74+
if (!tab) {
7475
return;
7576
}
76-
setCurrentUrl(tabs[0].url || "");
77+
setCurrentUrl(tab.url || "");
7778
message
78-
.syncSend("queryPageScript", { url: tabs[0].url, tabId: tabs[0].id })
79+
.syncSend("queryPageScript", { url: tab.url, tabId: tab.id })
7980
.then(
8081
(resp: {
8182
scriptList: ScriptMenu[];

0 commit comments

Comments
 (0)