Enabled back-end running of functions, moved indexing to server.
This commit is contained in:
@@ -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
@@ -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);
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user