fix
This commit is contained in:
parent
db347a728b
commit
2270c7c071
|
|
@ -10,6 +10,7 @@ export const yjs_diff_local: SAction["yjs"]["diff_local"] = async function (
|
||||||
bin
|
bin
|
||||||
) {
|
) {
|
||||||
if (!docs[mode][id]) {
|
if (!docs[mode][id]) {
|
||||||
|
console.log(`diff_local not found`, mode, id);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
const doc = docs[mode][id].doc as Y.Doc;
|
const doc = docs[mode][id].doc as Y.Doc;
|
||||||
|
|
|
||||||
|
|
@ -10,6 +10,7 @@ export const yjs_sv_local: SAction["yjs"]["sv_local"] = async function (
|
||||||
bin
|
bin
|
||||||
) {
|
) {
|
||||||
if (!docs[mode][id]) {
|
if (!docs[mode][id]) {
|
||||||
|
console.log(`sv_local not found`, mode, id);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
const doc = docs[mode][id].doc as Y.Doc;
|
const doc = docs[mode][id].doc as Y.Doc;
|
||||||
|
|
|
||||||
|
|
@ -11,6 +11,7 @@ export const yjs_sv_remote: SAction["yjs"]["sv_remote"] = async function (
|
||||||
diff
|
diff
|
||||||
) {
|
) {
|
||||||
if (!docs[mode][id]) {
|
if (!docs[mode][id]) {
|
||||||
|
console.log(`sv_remote not found`, mode, id);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
const doc = docs[mode][id].doc;
|
const doc = docs[mode][id].doc;
|
||||||
|
|
|
||||||
|
|
@ -87,6 +87,7 @@ export const EDGlobal = {
|
||||||
group: {} as Record<string, Awaited<ReturnType<SAction["comp"]["group"]>>>,
|
group: {} as Record<string, Awaited<ReturnType<SAction["comp"]["group"]>>>,
|
||||||
},
|
},
|
||||||
ui: {
|
ui: {
|
||||||
|
syncing: false,
|
||||||
tree: {
|
tree: {
|
||||||
item_loading: [] as string[],
|
item_loading: [] as string[],
|
||||||
search: "",
|
search: "",
|
||||||
|
|
|
||||||
|
|
@ -31,8 +31,9 @@ export const edRoute = async (p: PG) => {
|
||||||
const doc = new Y.Doc();
|
const doc = new Y.Doc();
|
||||||
Y.applyUpdate(doc, decompress(page.snapshot));
|
Y.applyUpdate(doc, decompress(page.snapshot));
|
||||||
doc.on("update", async (bin: Uint8Array, origin: any) => {
|
doc.on("update", async (bin: Uint8Array, origin: any) => {
|
||||||
if (origin === "sv_remote") return;
|
if (origin === "sv_remote" || origin === "local") return;
|
||||||
|
|
||||||
|
console.log(origin);
|
||||||
const res = await p.sync.yjs.sv_local(
|
const res = await p.sync.yjs.sv_local(
|
||||||
"page",
|
"page",
|
||||||
p.page.cur.id,
|
p.page.cur.id,
|
||||||
|
|
@ -45,11 +46,15 @@ export const edRoute = async (p: PG) => {
|
||||||
decompress(res.sv)
|
decompress(res.sv)
|
||||||
);
|
);
|
||||||
Y.applyUpdate(doc as any, decompress(res.diff), "local");
|
Y.applyUpdate(doc as any, decompress(res.diff), "local");
|
||||||
|
await treeRebuild(p);
|
||||||
|
|
||||||
await p.sync.yjs.diff_local(
|
await p.sync.yjs.diff_local(
|
||||||
"page",
|
"page",
|
||||||
p.page.cur.id,
|
p.page.cur.id,
|
||||||
Buffer.from(compress(diff_local))
|
Buffer.from(compress(diff_local))
|
||||||
);
|
);
|
||||||
|
p.ui.syncing = false;
|
||||||
|
p.render();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -21,12 +21,16 @@ export const edInitSync = (p: PG) => {
|
||||||
site_id: params.site_id,
|
site_id: params.site_id,
|
||||||
page_id: params.page_id,
|
page_id: params.page_id,
|
||||||
events: {
|
events: {
|
||||||
connected() {
|
async connected() {
|
||||||
if (w.offline) {
|
if (w.offline) {
|
||||||
console.log("reconnected, syncing...");
|
console.log("reconnected, syncing...");
|
||||||
|
w.offline = false;
|
||||||
|
p.ui.syncing = true;
|
||||||
|
p.render();
|
||||||
|
} else {
|
||||||
|
w.offline = false;
|
||||||
|
p.render();
|
||||||
}
|
}
|
||||||
w.offline = false;
|
|
||||||
p.render();
|
|
||||||
},
|
},
|
||||||
disconnected() {
|
disconnected() {
|
||||||
console.log("offline, reconnecting...");
|
console.log("offline, reconnecting...");
|
||||||
|
|
@ -36,7 +40,16 @@ export const edInitSync = (p: PG) => {
|
||||||
reconnect: true,
|
reconnect: true,
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
editor_start(e) {
|
async editor_start(e) {
|
||||||
|
if (p.ui.syncing) {
|
||||||
|
await p.sync.page.load(params.page_id);
|
||||||
|
if (p.page.doc) {
|
||||||
|
p.page.doc.transact(() => {
|
||||||
|
p.page.doc?.getMap("map").set("ts", Date.now());
|
||||||
|
}, `sync`);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (params.site_id !== e.site_id || params.page_id !== e.page_id) {
|
if (params.site_id !== e.site_id || params.page_id !== e.page_id) {
|
||||||
p.site.id = e.site_id;
|
p.site.id = e.site_id;
|
||||||
p.page.cur.id = e.page_id;
|
p.page.cur.id = e.page_id;
|
||||||
|
|
|
||||||
|
|
@ -15,7 +15,9 @@ import { w } from "../types/general";
|
||||||
import { initIDB } from "./idb";
|
import { initIDB } from "./idb";
|
||||||
const packr = new Packr({ structuredClone: true });
|
const packr = new Packr({ structuredClone: true });
|
||||||
|
|
||||||
const WS_DEBUG = true;
|
/** CONSTANT */
|
||||||
|
const WS_DEBUG = false;
|
||||||
|
const RECONNECT_TIMEOUT = 1000;
|
||||||
|
|
||||||
const conf = {
|
const conf = {
|
||||||
ws: null as null | WebSocket,
|
ws: null as null | WebSocket,
|
||||||
|
|
@ -134,7 +136,7 @@ const connect = (
|
||||||
setTimeout(async () => {
|
setTimeout(async () => {
|
||||||
reconnect++;
|
reconnect++;
|
||||||
retry();
|
retry();
|
||||||
}, reconnect * 5000);
|
}, reconnect * RECONNECT_TIMEOUT);
|
||||||
} else {
|
} else {
|
||||||
reject();
|
reject();
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -14,5 +14,9 @@ export type MRoot = TypedMap<{
|
||||||
childs: TypedArray<ISection>;
|
childs: TypedArray<ISection>;
|
||||||
}>;
|
}>;
|
||||||
|
|
||||||
export type DPage = TypedDoc<{ map: TypedMap<{ id: string; root: MRoot }> }>;
|
export type DPage = TypedDoc<{
|
||||||
export type DComp = TypedDoc<{ map: TypedMap<{ id: string; root: MItem }> }>;
|
map: TypedMap<{ id: string; root: MRoot; ts?: number }>;
|
||||||
|
}>;
|
||||||
|
export type DComp = TypedDoc<{
|
||||||
|
map: TypedMap<{ id: string; root: MItem; ts?: number }>;
|
||||||
|
}>;
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue