Enabled back-end running of functions, moved indexing to server.

This commit is contained in:
Zef Hemel
2022-03-18 16:27:40 +01:00
parent 8bff6d98e1
commit d5528fef2a
6 changed files with 41 additions and 122 deletions
+2 -1
View File
@@ -70,7 +70,8 @@ export class SocketServer {
this.connectedSockets.delete(socket);
});
socket.on("closePage", (pageName: string) => {
socket.on("page.closePage", (pageName: string) => {
console.log("Client closed page", pageName);
disconnectPageSocket(pageName);
clientConn.openPages.delete(pageName);
});
+14 -11
View File
@@ -197,18 +197,21 @@ export class PageApi implements ApiProvider {
);
if (textChanged) {
if (page.saveTimer) {
clearTimeout(page.saveTimer);
}
// Throttle
if (!page.saveTimer) {
page.saveTimer = setTimeout(() => {
if (page) {
console.log("Indexing", pageName);
page.saveTimer = setTimeout(() => {
console.log("This is the time to index a page");
this.system.dispatchEvent("page:index", {
name: pageName,
text: page!.text.sliceString(0),
});
this.flushPageToDisk(pageName, page!);
}, 1000);
this.system.dispatchEvent("page:index", {
name: pageName,
text: page.text.sliceString(0),
});
this.flushPageToDisk(pageName, page);
page.saveTimer = undefined;
}
}, 1000);
}
}
while (page.pending.length) {
page.pending.pop()!(transformedUpdates);
+16 -15
View File
@@ -1,4 +1,5 @@
import { Knex } from "knex";
type IndexItem = {
page: string;
key: string;
@@ -11,26 +12,25 @@ export type KV = {
};
export default function (db: Knex) {
const setter = async (page: string, key: string, value: any) => {
let changed = await db<IndexItem>("page_index")
.where({ page, key })
.update("value", JSON.stringify(value));
if (changed === 0) {
await db<IndexItem>("page_index").insert({
page,
key,
value: JSON.stringify(value),
});
}
};
return {
const apiObj = {
"indexer.clearPageIndexForPage": async (page: string) => {
await db<IndexItem>("page_index").where({ page }).del();
},
"indexer.set": setter,
"indexer.set": async (page: string, key: string, value: any) => {
let changed = await db<IndexItem>("page_index")
.where({ page, key })
.update("value", JSON.stringify(value));
if (changed === 0) {
await db<IndexItem>("page_index").insert({
page,
key,
value: JSON.stringify(value),
});
}
},
"indexer.batchSet": async (page: string, kvs: KV[]) => {
for (let { key, value } of kvs) {
await setter(page, key, value);
await apiObj["indexer.set"](page, key, value);
}
},
"indexer.get": async (page: string, key: string) => {
@@ -79,4 +79,5 @@ export default function (db: Knex) {
return db<IndexItem>("page_index").del();
},
};
return apiObj;
}