mirror of
https://github.com/GopeedLab/gopeed.git
synced 2026-11-08 09:30:27 +00:00
feat: add gblob scheme support for extension (#1358)
This commit is contained in:
18 files changed
+2664
-147
No files matched your search
+62
@@ -0,0 +1,62 @@
|
||||
gopeed.events.onResolve(async function (ctx) {
|
||||
if (ctx.req.url.endsWith("/blob")) {
|
||||
const blob = new Blob(["hello world"], {type: "text/plain"});
|
||||
const url = URL.createObjectURL(blob);
|
||||
ctx.res = {
|
||||
name: "gblob-blob",
|
||||
files: [
|
||||
{
|
||||
name: "hello.txt",
|
||||
size: 11,
|
||||
req: {
|
||||
url,
|
||||
}
|
||||
}
|
||||
]
|
||||
};
|
||||
return;
|
||||
}
|
||||
|
||||
const transform = new TransformStream();
|
||||
const writer = transform.writable.getWriter();
|
||||
const url = URL.createObjectURL(transform.writable);
|
||||
|
||||
if (ctx.req.url.endsWith("/stream-unknown")) {
|
||||
(async () => {
|
||||
await writer.write(new TextEncoder().encode("line 1\n"));
|
||||
await new Promise((resolve) => setTimeout(resolve, 120));
|
||||
await writer.write(new TextEncoder().encode("line 2\n"));
|
||||
await writer.close();
|
||||
})();
|
||||
|
||||
ctx.res = {
|
||||
name: "gblob-stream-unknown",
|
||||
files: [
|
||||
{
|
||||
name: "stream-unknown.txt",
|
||||
req: {
|
||||
url,
|
||||
}
|
||||
}
|
||||
]
|
||||
};
|
||||
return;
|
||||
}
|
||||
|
||||
await writer.write(new TextEncoder().encode("line 1\n"));
|
||||
await writer.write(new TextEncoder().encode("line 2\n"));
|
||||
await writer.close();
|
||||
|
||||
ctx.res = {
|
||||
name: "gblob-stream",
|
||||
files: [
|
||||
{
|
||||
name: "stream.txt",
|
||||
size: 14,
|
||||
req: {
|
||||
url,
|
||||
}
|
||||
}
|
||||
]
|
||||
};
|
||||
});
|
||||
@@ -0,0 +1,16 @@
|
||||
{
|
||||
"name": "gblob",
|
||||
"title": "gopeed extension gblob test",
|
||||
"version": "0.0.1",
|
||||
"scripts": [
|
||||
{
|
||||
"event": "onResolve",
|
||||
"match": {
|
||||
"urls": [
|
||||
"*://example.com/*"
|
||||
]
|
||||
},
|
||||
"entry": "index.js"
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,42 @@
|
||||
gopeed.events.onResolve(async function (ctx) {
|
||||
if (!ctx.req.url.endsWith("/recover")) {
|
||||
return;
|
||||
}
|
||||
|
||||
const transform = new TransformStream();
|
||||
const writer = transform.writable.getWriter();
|
||||
const url = URL.createObjectURL(transform.writable);
|
||||
|
||||
(async () => {
|
||||
await writer.write(new TextEncoder().encode("stale\n"));
|
||||
await new Promise((resolve) => setTimeout(resolve, 50));
|
||||
await writer.abort("expired");
|
||||
})();
|
||||
|
||||
ctx.res = {
|
||||
name: "gblob-recover",
|
||||
files: [
|
||||
{
|
||||
name: "recover.txt",
|
||||
req: {
|
||||
url,
|
||||
}
|
||||
}
|
||||
]
|
||||
};
|
||||
});
|
||||
|
||||
gopeed.events.onError(async function (ctx) {
|
||||
const req = ctx.task.meta.req;
|
||||
if (!req.rawUrl || !req.rawUrl.endsWith("/recover")) {
|
||||
return;
|
||||
}
|
||||
req.labels = req.labels || {};
|
||||
if (req.labels.recovered === "true") {
|
||||
return;
|
||||
}
|
||||
|
||||
req.labels.recovered = "true";
|
||||
req.url = URL.createObjectURL(new Blob(["recovered\n"], { type: "text/plain" }));
|
||||
ctx.task.continue();
|
||||
});
|
||||
@@ -0,0 +1,25 @@
|
||||
{
|
||||
"name": "gblob-recover",
|
||||
"title": "gopeed extension gblob recover test",
|
||||
"version": "0.0.1",
|
||||
"scripts": [
|
||||
{
|
||||
"event": "onResolve",
|
||||
"match": {
|
||||
"urls": [
|
||||
"*://example.com/*"
|
||||
]
|
||||
},
|
||||
"entry": "index.js"
|
||||
},
|
||||
{
|
||||
"event": "onError",
|
||||
"match": {
|
||||
"urls": [
|
||||
"*://example.com/*"
|
||||
]
|
||||
},
|
||||
"entry": "index.js"
|
||||
}
|
||||
]
|
||||
}
|
||||
Reference in new issue
Block a user