Skip to content

Commit 00e4622

Browse files
committed
feat: 通过链接安装
1 parent 2c1fd8a commit 00e4622

4 files changed

Lines changed: 45 additions & 33 deletions

File tree

src/apps/msg-center/event.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ export const PermissionConfirm: string = "permission-confirm";
33

44
export const ScriptExec: string = "script-exec";
55
export const ScriptStop: string = "script-stop";
6+
export const ScriptInstallByURL: string = "script-install-by-url";
67
export const ScriptInstall: string = "script-install";
78
export const ScriptReinstall: string = "script-reinstall";
89
export const ScriptUninstall: string = "script-uninstall";

src/apps/script/manager.ts

Lines changed: 24 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import axios from "axios";
2-
import { MessageCallback, MsgCenter } from "@App/apps/msg-center/msg-center";
3-
import { AppEvent, ScriptExec, ScriptRunStatusChange, ScriptStatusChange, ScriptStop, ScriptUninstall, ScriptReinstall, ScriptValueChange, TabRemove, RequestTabRunScript, ScriptInstall, RequestInstallInfo, ScriptCheckUpdate, RequestConfirmInfo, ListenGmLog, SubscribeUpdate, Unsubscribe, SubscribeCheckUpdate, ImportFile, OpenImportFileWindow, RequestImportFile } from "@App/apps/msg-center/event";
4-
import { dealScript, get, Page, randomString } from "@App/pkg/utils";
2+
import { MsgCenter } from "@App/apps/msg-center/msg-center";
3+
import { AppEvent, ScriptExec, ScriptRunStatusChange, ScriptStatusChange, ScriptStop, ScriptUninstall, ScriptReinstall, ScriptValueChange, TabRemove, RequestTabRunScript, ScriptInstall, RequestInstallInfo, ScriptCheckUpdate, RequestConfirmInfo, ListenGmLog, SubscribeUpdate, Unsubscribe, SubscribeCheckUpdate, ImportFile, OpenImportFileWindow, RequestImportFile, ScriptInstallByURL } from "@App/apps/msg-center/event";
4+
import { dealScript, get, randomString } from "@App/pkg/utils";
55
import { App } from "../app";
66
import { UrlMatch } from "@App/pkg/match";
77
import { ValueModel } from "@App/model/value";
@@ -21,9 +21,10 @@ import { SyncModel } from "@App/model/sync";
2121
import { SyncAction, SyncData } from "@App/model/do/sync";
2222
import { File } from "@App/model/do/back";
2323
import { v4 as uuidv4 } from "uuid";
24+
import { Manager } from "@App/pkg/apps/manager";
2425

2526
// 脚本管理器,收到控制器消息进行实际的操作
26-
export class ScriptManager {
27+
export class ScriptManager extends Manager {
2728

2829
protected scriptModel = new ScriptModel();
2930
protected subscribeModel = new SubscribeModel();
@@ -86,6 +87,7 @@ export class ScriptManager {
8687
public listen() {
8788

8889
// 消息监听处理
90+
this.listenerMessage(ScriptInstallByURL, this.installScriptByURL);
8991
this.listenerMessage(ScriptInstall, this.scriptInstall)
9092
this.listenerMessage(ScriptReinstall, this.scriptReinstall)
9193
this.listenerMessage(ScriptUninstall, (body) => { return this.scriptUninstall(body, false) })
@@ -124,7 +126,11 @@ export class ScriptManager {
124126
if (hash.indexOf("bypass=true") != -1) {
125127
return;
126128
}
127-
this.installScript(req.tabId, req.url);
129+
this.installScriptByURL(req.url).catch(() => {
130+
chrome.tabs.update(req.tabId, {
131+
url: req.url + "#bypass=true",
132+
});
133+
});
128134
return { redirectUrl: "javascript:void 0" };
129135
},
130136
{
@@ -138,18 +144,19 @@ export class ScriptManager {
138144
);
139145
}
140146

141-
public async installScript(tabid: number, url: string) {
142-
let info = await loadScriptByUrl(url);
143-
if (info) {
144-
App.Cache.set("install:info:" + info.uuid, info);
145-
chrome.tabs.create({
146-
url: "install.html?uuid=" + info.uuid,
147-
});
148-
} else {
149-
chrome.tabs.update(tabid, {
150-
url: url + "#bypass=true",
151-
});
152-
}
147+
public async installScriptByURL(url: string) {
148+
return new Promise(async (resolve, reject) => {
149+
let info = await loadScriptByUrl(url);
150+
if (info) {
151+
App.Cache.set("install:info:" + info.uuid, info);
152+
chrome.tabs.create({
153+
url: "install.html?uuid=" + info.uuid,
154+
});
155+
resolve(true);
156+
} else {
157+
reject(false);
158+
}
159+
});
153160
}
154161

155162
// 监听来自AppEvent的事件和连接来自其它地方的长链接,转发AppEvent的事件
@@ -176,16 +183,6 @@ export class ScriptManager {
176183
})
177184
}
178185

179-
public listenerMessage(topic: string, callback: MessageCallback) {
180-
MsgCenter.listenerMessage(topic, async (body, send, sender) => {
181-
let ret = <any>callback.call(this, body, send, sender)
182-
if (ret instanceof Promise) {
183-
ret = await ret;
184-
}
185-
send(ret);
186-
});
187-
}
188-
189186
public requestConfirmInfo(uuid: string): Promise<ConfirmParam> {
190187
return new Promise(resolve => {
191188
let info = App.Cache.get("confirm:info:" + uuid);

src/pkg/apps/manager.ts

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,14 @@ export class Manager {
66
MsgCenter.listenerMessage(topic, async (body, send, sender) => {
77
let ret = <any>callback.call(this, body, send, sender)
88
if (ret instanceof Promise) {
9-
ret = await ret;
9+
ret.then((ret) => {
10+
send(ret);
11+
}).catch(ret => {
12+
send(ret);
13+
})
14+
} else {
15+
send(ret);
1016
}
11-
send(ret);
1217
});
1318
}
1419

src/views/pages/Option/tabs/ScriptList.vue

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -562,7 +562,7 @@
562562
<span>定时脚本</span>
563563
</v-tooltip>
564564

565-
<!-- <v-tooltip left>
565+
<v-tooltip left>
566566
<template v-slot:activator="{ on, attrs }">
567567
<v-btn
568568
v-bind="attrs"
@@ -571,13 +571,13 @@
571571
dark
572572
small
573573
color="#1296db"
574-
@click="newScript('background')"
574+
@click="linkInstall()"
575575
>
576-
<v-icon>mdi-open-in-new</v-icon>
576+
<v-icon>mdi-link</v-icon>
577577
</v-btn>
578578
</template>
579579
<span>链接导入</span>
580-
</v-tooltip> -->
580+
</v-tooltip>
581581
</v-speed-dial>
582582
</div>
583583
</template>
@@ -595,6 +595,7 @@ import {
595595
import { MsgCenter } from "@App/apps/msg-center/msg-center";
596596
import {
597597
ListenGmLog,
598+
ScriptInstallByURL,
598599
ScriptRunStatusChange,
599600
SyncTaskEvent,
600601
} from "@App/apps/msg-center/event";
@@ -974,6 +975,14 @@ export default class ScriptList extends Vue {
974975
document.execCommand("copy", false, <any>null);
975976
scriptModule.showSnackbar("复制成功");
976977
}
978+
979+
linkInstall() {
980+
let url = prompt("请填写脚本url", "");
981+
if (!url) {
982+
return;
983+
}
984+
MsgCenter.sendMessage(ScriptInstallByURL, url);
985+
}
977986
}
978987
</script>
979988

0 commit comments

Comments
 (0)