feat(web): add spaces, grouped channels and file chat

This commit is contained in:
justme committed 2026-10-13 01:39:23 +08:00
1 parent c7d8ef15bc
commit f6cfb12716
111 files changed
+4371 -506

No files matched your search

+9 -2
View File
@@ -32,8 +32,10 @@ export async function connectShare(id: string): Promise<void> {
publishShare(id, { t: 'share', share });
if (raw.state === 'draft' && resource.mine) {
const resumed = await flushOutbox(resource, session);
if (resumed) resource.draftItems = resource.draftItems?.map((item) => item.state.kind === 'incomplete' ? { ...item, state: { kind: 'complete' } } : item);
await flushOutbox(resource, session);
const current = await readShareInfo(session, resource);
resource.draftItems = resource.draftItems?.map((item) => item.kind === 'file'
? { ...item, state: { kind: current.items.some((row) => row.item_id === item.id && row.complete) ? 'complete' : 'incomplete' } } : item);
await saveResource(resource);
if (controller.signal.aborted) return;
for (const item of resource.draftItems ?? []) publishShare(id, { t: 'item', item });
@@ -93,6 +95,11 @@ export async function getShareBlob(id: string, itemId: string): Promise<Blob> {
blobs.set(`${id}:${itemId}`, draftFile);
return draftFile;
}
const entry = resource.manifestEntries?.find((row) => row.t === 'file' && row.id === itemId);
if (!entry || entry.t !== 'file') throw fail(404, 'not_found');
const result = await downloadDecrypted(session, resource, itemId, entry.size);
blobs.set(`${id}:${itemId}`, result.blob);
return result.blob;
}
const raw = await readJson<ShareWire>(`/shares/${id}`, session.authHeaders('read'));
const manifest = await fetchManifest(session, id, raw);