mirror of
https://github.com/vector-im/hydrogen-web.git
synced 2024-11-20 03:25:52 +01:00
organize documention and remove obsolete documents
This commit is contained in:
parent
5a124809af
commit
8b0b813680
@ -1,8 +0,0 @@
|
||||
goal:
|
||||
|
||||
write client that works on lumia 950 phone, so I can use matrix on my phone.
|
||||
|
||||
try approach offline to indexeddb. go low-memory, and test the performance of storing every event individually in indexeddb.
|
||||
|
||||
try to use little bandwidth, mainly by being an offline application and storing all requested data in indexeddb.
|
||||
be as functional as possible while offline
|
77
doc/TODO.md
77
doc/TODO.md
@ -1,77 +0,0 @@
|
||||
# Minimal thing to get working
|
||||
|
||||
- DONE: finish summary store
|
||||
- DONE: move "sdk" bits over to "matrix" directory
|
||||
- DONE: add eventemitter
|
||||
- DONE: make sync work
|
||||
- DONE: store summaries
|
||||
- DONE: setup editorconfig
|
||||
- DONE: setup linting (also in editor)
|
||||
- DONE: store timeline
|
||||
- DONE: store state
|
||||
- DONE: make summary work better (name and joined/inviteCount doesn't seem to work well)
|
||||
- DONE: timeline doesn't seem to recover it's key well upon loading, the query in load seems to never yield an event in the persister
|
||||
- DONE: map DOMException to something better
|
||||
- it's pretty opaque now when something idb related fails. DOMException has these fields:
|
||||
code: 0
|
||||
message: "Key already exists in the object store."
|
||||
name: "ConstraintError"
|
||||
- DONE: emit events so we can start showing something on the screen maybe?
|
||||
- DONE: move session._rooms over to Map, so we can iterate over it, ...
|
||||
- DONE: build a very basic interface with
|
||||
- DONE: a start/stop sync button
|
||||
- DONE: a room list sorted alphabetically
|
||||
- DONE: do some preprocessing on sync response which can then be used by persister, summary, timeline
|
||||
- DONE: support timeline
|
||||
- DONE: clicking on a room list, you see messages (userId -> body)
|
||||
- DONE: style minimal UI
|
||||
- DONE: implement gap filling and fragments (see FRAGMENTS.md)
|
||||
- DONE: allow collection items (especially tiles) to self-update
|
||||
- improve fragmentidcomparer::add
|
||||
- DONE: better UI
|
||||
- fix MappedMap update mechanism
|
||||
- see if in BaseObservableMap we need to change ...params
|
||||
- DONE: put sync button and status label inside SessionView
|
||||
- fix some errors:
|
||||
- find out if `(this._emitCollectionUpdate)(this)` is different than `this._emitCollectionUpdate(this)`
|
||||
- got "database tried to mutate when not allowed" or something error as well
|
||||
- find out why when RoomPersister.(\_createGapEntry/\_createEventEntry) we remove .buffer the transaction fails (good), but upon fixing and refreshing is missing a message! syncToken should not be saved, so why isn't this again in the sync response and now the txn does succeed?
|
||||
- DONE: take access token out of IDB? this way it can be stored in a more secure thing for non-web clients, together wit encryption key for olm sessions ... ? like macos keychain, gnome keyring, ... maybe using https://www.npmjs.com/package/keytar
|
||||
- DONE: experiment with using just a normal array with 2 numbers for sortkeys, to work in Edge as well.
|
||||
- DONE: send messages
|
||||
- DONE: fill gaps with call to /messages
|
||||
|
||||
- DONE: build script
|
||||
- DONE: take dev index.html, run some dom modifications to change script tag with `parse5`.
|
||||
- DONE: create js bundle, rollup
|
||||
- DONE: create css bundle, postcss, probably just need postcss-import for now, but good to have more options
|
||||
- DONE: put all in /target
|
||||
- have option to run it locally to test
|
||||
|
||||
- deploy script
|
||||
- upload /target to github pages
|
||||
|
||||
- DONE: offline available
|
||||
- both offline mechanisms have (filelist, version) as input for their template:
|
||||
- create appcache manifest with (index.html, brawl.js, brawl.css) and print version number in it
|
||||
- create service worker wit file list to cache (at top const files = "%%FILES_ARRAY%%", version = "%%VERSION%%")
|
||||
- write web manifest
|
||||
- DONE: delete and clear sessions from picker
|
||||
- option to close current session and go back to picker
|
||||
|
||||
- accept invite
|
||||
- member list
|
||||
- e2e encryption
|
||||
- sync retry strategy
|
||||
- instead of stopping sync on fetch error, show spinner and status and have auto retry strategy
|
||||
|
||||
- create room
|
||||
- join room
|
||||
- leave room
|
||||
- unread rooms, badge count, sort rooms by activity
|
||||
|
||||
- DONE: create sync filter
|
||||
- DONE: lazy loading members
|
||||
- decide denormalized data in summary vs reading from multiple stores PER room on load
|
||||
- allow Room/Summary class to be subclassed and store additional data?
|
||||
- store account data, support read markers
|
90
doc/api.md
90
doc/api.md
@ -1,90 +0,0 @@
|
||||
Session
|
||||
properties:
|
||||
rooms -> Rooms
|
||||
|
||||
# storage
|
||||
Storage
|
||||
key...() -> KeyRange
|
||||
start...Txn() -> Transaction
|
||||
Transaction
|
||||
store(name) -> ObjectStore
|
||||
finish()
|
||||
rollback()
|
||||
ObjectStore : QueryTarget
|
||||
index(name)
|
||||
Index : QueryTarget
|
||||
|
||||
|
||||
Rooms: EventEmitter, Iterator<RoomSummary>
|
||||
get(id) -> RoomSummary ?
|
||||
InternalRoom: EventEmitter
|
||||
applySync(roomResponse, membership, txn)
|
||||
- this method updates the room summary
|
||||
- persists the room summary
|
||||
- persists room state & timeline with RoomPersister
|
||||
- updates the OpenRoom if present
|
||||
|
||||
|
||||
applyAndPersistSync(roomResponse, membership, txn) {
|
||||
this._summary.applySync(roomResponse, membership);
|
||||
this._summary.persist(txn);
|
||||
this._roomPersister.persist(roomResponse, membership, txn);
|
||||
if (this._openRoom) {
|
||||
this._openRoom.applySync(roomResponse);
|
||||
}
|
||||
}
|
||||
|
||||
RoomPersister
|
||||
RoomPersister (persists timeline and room state)
|
||||
RoomSummary (persists room summary)
|
||||
RoomSummary : EventEmitter
|
||||
methods:
|
||||
async open()
|
||||
id
|
||||
name
|
||||
lastMessage
|
||||
unreadCount
|
||||
mentionCount
|
||||
isEncrypted
|
||||
isDirectMessage
|
||||
membership
|
||||
|
||||
should this have a custom reducer for custom fields?
|
||||
|
||||
events
|
||||
propChange(fieldName)
|
||||
|
||||
OpenRoom : EventEmitter
|
||||
properties:
|
||||
timeline
|
||||
events:
|
||||
|
||||
|
||||
RoomState: EventEmitter
|
||||
[room_id, event_type, state_key] -> [sort_key, event]
|
||||
Timeline: EventEmitter
|
||||
// should have a cache of recently lookup sender members?
|
||||
// can we disambiguate members like this?
|
||||
methods:
|
||||
lastEvents(amount)
|
||||
firstEvents(amount)
|
||||
eventsAfter(sortKey, amount)
|
||||
eventsBefore(sortKey, amount)
|
||||
events:
|
||||
eventsApppended
|
||||
|
||||
RoomMembers : EventEmitter, Iterator
|
||||
// no order, but need to be able to get all members somehow, needs to map to a ReactiveMap or something
|
||||
events:
|
||||
added(ids, values)
|
||||
removed(ids, values)
|
||||
changed(id, fieldName)
|
||||
RoomMember: EventEmitter
|
||||
properties:
|
||||
id
|
||||
name
|
||||
powerLevel
|
||||
membership
|
||||
avatar
|
||||
events:
|
||||
propChange(fieldName)
|
Before Width: | Height: | Size: 7.8 KiB After Width: | Height: | Size: 7.8 KiB |
Before Width: | Height: | Size: 4.2 KiB After Width: | Height: | Size: 4.2 KiB |
Before Width: | Height: | Size: 19 KiB After Width: | Height: | Size: 19 KiB |
@ -1,21 +0,0 @@
|
||||
view hierarchy:
|
||||
```
|
||||
BrawlView
|
||||
SwitchView
|
||||
SessionView
|
||||
SyncStatusBar
|
||||
ListView(left-panel)
|
||||
RoomTile
|
||||
SwitchView
|
||||
RoomPlaceholderView
|
||||
RoomView
|
||||
MiddlePanel
|
||||
ListView(timeline)
|
||||
event tiles (see ui/session/room/timeline/)
|
||||
ComposerView
|
||||
RightPanel
|
||||
SessionPickView
|
||||
ListView
|
||||
SessionPickerItemView
|
||||
LoginView
|
||||
```
|
Loading…
Reference in New Issue
Block a user