mirror of
https://github.com/vector-im/hydrogen-web.git
synced 2024-11-20 03:25:52 +01:00
some thoughts on how different room types could be implemented
This commit is contained in:
parent
f4a2e5b63e
commit
12e378eb62
55
doc/impl-thoughts/room-types.ts
Normal file
55
doc/impl-thoughts/room-types.ts
Normal file
@ -0,0 +1,55 @@
|
||||
/*
|
||||
different room types create different kind of "sync listeners", who implement the sync lifecycle handlers
|
||||
|
||||
they would each have a factory,
|
||||
*/
|
||||
|
||||
interface IRoomSyncHandler {
|
||||
prepareSync()
|
||||
afterPrepareSync()
|
||||
writeSync()
|
||||
afterSync()
|
||||
afterSyncCompleted()
|
||||
}
|
||||
|
||||
interface IRoom extends IRoomSyncHandler {
|
||||
start(): void;
|
||||
load(): void;
|
||||
get id(): string;
|
||||
}
|
||||
|
||||
interface IRoomFactory<T extends IRoom> {
|
||||
createRoom(type, roomId, syncResponse): T
|
||||
createSchema(db, txn, oldVersion, version, log)
|
||||
get storesForSync(): string[];
|
||||
get rooms(): ObservableMap<string, T>
|
||||
}
|
||||
|
||||
class InstantMessageRoom implements IRoom {
|
||||
}
|
||||
|
||||
class InstantMessageRoomFactory implements IRoomFactory<InstantMessageRoom>{
|
||||
loadLastMessages(): Promise<void>
|
||||
/*
|
||||
get all room ids and sort them according to idb sorting order
|
||||
open cursor 'f' on `timelineFragments`
|
||||
open a cursor 'e' on `timelineEvents`
|
||||
for each room:
|
||||
with cursor 'f', go to last fragment id and go up from there to find live fragment
|
||||
with cursor 'e', go to last event index for fragment id and room id and go up until we have acceptable event type
|
||||
for encrypted rooms:
|
||||
decrypt message if needed (m.room.encrypted is likely something we want to display)
|
||||
*/
|
||||
}
|
||||
|
||||
class SpaceRoom implements IRoom {}
|
||||
|
||||
class SpaceRoomFactory implements IRoomFactory<SpaceRoom> {
|
||||
createRoom(type, roomId, syncResponse): IRoomSyncHandler
|
||||
}
|
||||
|
||||
class Session {
|
||||
constructor(roomFactoriesByType: Map<string, IRoomFactory>) {
|
||||
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user