aboutsummaryrefslogtreecommitdiffstats
path: root/extension
diff options
context:
space:
mode:
authorOmar Rizwan <omar@omar.website>2020-12-11 20:01:11 -0800
committerOmar Rizwan <omar@omar.website>2020-12-11 20:01:11 -0800
commitdc71428fbdddbe4b7d8c161114b3866f770ac28f (patch)
tree21ea2fead4f8ae9163d525676257b26e2240130b /extension
parent1dd02874a363f031a738d395e15cd0fc1423db64 (diff)
refactor to create fromStringMaker. text, title, url seem to work
with this, I think I can drastically simplify the synthetic file definition code
Diffstat (limited to 'extension')
-rw-r--r--extension/background.js38
1 files changed, 16 insertions, 22 deletions
diff --git a/extension/background.js b/extension/background.js
index d4841f7..c44d46f 100644
--- a/extension/background.js
+++ b/extension/background.js
@@ -153,36 +153,30 @@ router["/tabs/by-id"] = {
}
};
(function() {
- const withTab = handler => ({
+ const fromStringMaker = stringMaker => ({
async getattr({path}) {
- const tab = await browser.tabs.get(parseInt(pathComponent(path, -2)));
return {
st_mode: unix.S_IFREG | 0444,
st_nlink: 1,
- st_size: stringSize(handler(tab))
+ st_size: stringSize(stringMaker(path))
};
},
- async open({path}) { return { fh: 0 }; },
+ async open({path}) { return { fh: Cache.storeObject(await stringMaker(path)) }; },
async read({path, fh, size, offset}) {
- const tab = await browser.tabs.get(parseInt(pathComponent(path, -2)));
- return { buf: utf8(handler(tab), offset, size) };
- }
- });
- const fromScript = code => ({
- async getattr({path}) {
- const tabId = parseInt(pathComponent(path, -2));
- return {
- st_mode: unix.S_IFREG | 0444,
- st_nlink: 1,
- st_size: stringSize((await browser.tabs.executeScript(tabId, {code}))[0])
- };
+ return { buf: utf8(Cache.getObjectForHandle(fh), offset, size) }
},
- async open({path}) { return { fh: 0 }; },
- async read({path, fh, size, offset}) {
- const tabId = parseInt(pathComponent(path, -2));
- return { buf: utf8((await browser.tabs.executeScript(tabId, {code}))[0], offset, size) }
- }
+ async release({fh}) { Cache.removeObjectForHandle(fh); return {}; }
+ });
+ const withTab = handler => fromStringMaker(async path => {
+ const tabId = parseInt(pathComponent(path, -2));
+ const tab = await browser.tabs.get(tabId);
+ return handler(tab);
});
+ const fromScript = code => fromStringMaker(async path => {
+ const tabId = parseInt(pathComponent(path, -2));
+ return (await browser.tabs.executeScript(tabId, {code}))[0];
+ });
+
router["/tabs/by-id/*/url"] = withTab(tab => tab.url + "\n");
router["/tabs/by-id/*/title"] = withTab(tab => tab.title + "\n");
router["/tabs/by-id/*/text"] = fromScript(`document.body.innerText`);
@@ -199,7 +193,7 @@ router["/tabs/by-id/*/screenshot.png"] = {
const slice = Cache.getObjectForHandle(fh).slice(offset, offset + size);
return { buf: String.fromCharCode(...slice) };
},
- async close({fh}) { Cache.removeObjectForHandle(fh); }
+ async release({fh}) { Cache.removeObjectForHandle(fh); }
};
router["/tabs/by-id/*/resources"] = {
async opendir({path}) {