Skip to content

Commit b419c91

Browse files
committed
✨ webdav云同步
1 parent 33041e4 commit b419c91

File tree

23 files changed

+801
-316
lines changed

23 files changed

+801
-316
lines changed

package.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "scriptcat",
3-
"version": "0.10.0-alpha",
3+
"version": "0.10.0-alpha.1",
44
"description": "脚本猫,一个可以执行用户脚本的浏览器扩展,万物皆可脚本化,让你的浏览器可以做更多的事情!",
55
"author": "CodFrm",
66
"license": "GPLv3",

pkg/filesystem/factory.ts

+10-8
Original file line numberDiff line numberDiff line change
@@ -14,21 +14,23 @@ export type FileSystemParams = {
1414

1515
export default class FileSystemFactory {
1616
static create(type: FileSystemType, params: any): Promise<FileSystem> {
17+
let fs: FileSystem;
1718
switch (type) {
1819
case "zip":
19-
return Promise.resolve(new ZipFileSystem(params));
20+
fs = new ZipFileSystem(params);
21+
break;
2022
case "webdav":
21-
return Promise.resolve(
22-
new WebDAVFileSystem(
23-
params.authType,
24-
params.url,
25-
params.username,
26-
params.password
27-
)
23+
fs = new WebDAVFileSystem(
24+
params.authType,
25+
params.url,
26+
params.username,
27+
params.password
2828
);
29+
break;
2930
default:
3031
throw new Error("not found filesystem");
3132
}
33+
return fs.verify().then(() => fs);
3234
}
3335

3436
static params(): { [key: string]: FileSystemParams } {

pkg/filesystem/filesystem.ts

+4
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@ export interface File {
55
path: string;
66
// 文件大小
77
size: number;
8+
// 文件摘要
9+
digest: string;
810
// 文件创建时间
911
createtime: number;
1012
// 文件修改时间
@@ -25,6 +27,8 @@ export type FileReadWriter = FileReader & FileWriter;
2527

2628
// 文件读取
2729
export default interface FileSystem {
30+
// 授权验证
31+
verify(): Promise<void>;
2832
// 打开文件
2933
open(path: string): Promise<FileReader>;
3034
// 创建文件

pkg/filesystem/webdav/webdav.ts

+7-1
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,11 @@ export default class WebDAVFileSystem implements FileSystem {
1818
});
1919
}
2020

21+
async verify(): Promise<void> {
22+
await this.client.getQuota();
23+
return Promise.resolve();
24+
}
25+
2126
open(path: string): Promise<FileReader> {
2227
return Promise.resolve(new WebDAVFileReader(this.client, path));
2328
}
@@ -36,7 +41,7 @@ export default class WebDAVFileSystem implements FileSystem {
3641
)) as FileStat[];
3742
const ret: File[] = [];
3843
dir.forEach((item: FileStat) => {
39-
if (item.type !== "file" || !item.basename.endsWith(".zip")) {
44+
if (item.type !== "file") {
4045
return;
4146
}
4247
ret.push({
@@ -45,6 +50,7 @@ export default class WebDAVFileSystem implements FileSystem {
4550
0,
4651
item.filename.length - item.basename.length
4752
),
53+
digest: item.etag || "",
4854
size: item.size,
4955
createtime: new Date(item.lastmod).getTime(),
5056
updatetime: new Date(item.lastmod).getTime(),

pkg/filesystem/zip/zip.ts

+5
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,10 @@ export default class ZipFileSystem implements FileSystem {
1414
this.zip = zip || new JSZip();
1515
}
1616

17+
verify(): Promise<void> {
18+
return Promise.resolve();
19+
}
20+
1721
open(path: string): Promise<FileReader> {
1822
const file = this.zip.file(path);
1923
if (file) {
@@ -41,6 +45,7 @@ export default class ZipFileSystem implements FileSystem {
4145
name: key,
4246
path: key,
4347
size: 0,
48+
digest: "",
4449
createtime: this.zip.files[key].date.getTime(),
4550
updatetime: this.zip.files[key].date.getTime(),
4651
});

src/app/logger/logger.ts

+3
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,9 @@ export default class Logger {
3636
this.core.writer.write(level, message, buildLabel(this.label, label));
3737
}
3838
if (this.core.debug) {
39+
if (typeof message === "object") {
40+
message = JSON.stringify(message);
41+
}
3942
const msg = `${dayjs(new Date()).format(
4043
"YYYY-MM-DD HH:mm:ss"
4144
)} [${level}] msg=${message} label=${JSON.stringify(

src/app/service/script/event.ts

+3
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import CacheKey from "@App/pkg/utils/cache_key";
44
import Cache from "../../cache";
55
import {
66
Script,
7+
SCRIPT_RUN_STATUS_COMPLETE,
78
SCRIPT_STATUS_DISABLE,
89
SCRIPT_STATUS_ENABLE,
910
ScriptDAO,
@@ -90,6 +91,7 @@ export default class ScriptEventListener {
9091
}
9192
if (script.status !== SCRIPT_STATUS_ENABLE) {
9293
script.status = SCRIPT_STATUS_ENABLE;
94+
script.updatetime = new Date().getTime();
9395
this.dao.save(script);
9496
logger.info("enable script");
9597
ScriptManager.hook.trigger("enable", script);
@@ -115,6 +117,7 @@ export default class ScriptEventListener {
115117
}
116118
if (script.status === SCRIPT_STATUS_ENABLE) {
117119
script.status = SCRIPT_STATUS_DISABLE;
120+
script.updatetime = new Date().getTime();
118121
this.dao.save(script);
119122
logger.info("disable script");
120123
ScriptManager.hook.trigger("disable", script);

0 commit comments

Comments
 (0)