Bruno Windels
300529b7c5
write sync token first
...
in case we get a TransactionInactiveError,
we have at least written the sync token
and won't repeat the same sync request
2020-10-01 14:38:54 +02:00
Bruno Windels
1117c77d05
note for future optimisation
2020-10-01 14:36:00 +02:00
Bruno Windels
d5a6a4d350
todo comment
2020-10-01 14:35:46 +02:00
Bruno Windels
3c7125bb88
add (optional) logging for idb requests
2020-10-01 14:35:33 +02:00
Bruno Windels
93a7f9959e
Safari doesn't like the prepare txn still open when opening the sync txn
...
Waiting for it to close magically solves the TransactionInactiveError
we were seeing on some incremental sync request when
reading from roomMembers.
Still unsure what this is about, and if we should wait for all read txns
to close or not.
2020-10-01 14:31:38 +02:00
Bruno Windels
ddb14f48bf
we actually don't need to track write requests
...
as errors will bubble up to the txn
2020-10-01 14:31:08 +02:00
Bruno Windels
d5a52c32d6
these don't return a promise anymore
2020-09-29 11:51:14 +02:00
Bruno Windels
37690cffe3
track storage write requests internally, as we never await their promise
2020-09-29 11:50:37 +02:00
Bruno Windels
482b5f4d22
allow passing message to IDBRequestError
2020-09-29 11:50:10 +02:00
Bruno Windels
43d430fc98
remove unused storage modification functions
2020-09-29 11:47:49 +02:00
Bruno Windels
f993048a2b
Merge branch 'master' into bwindels/idb-promises-txn
2020-09-29 11:33:58 +02:00
Bruno Windels
e5b1cbbcd3
prevent endless loop when restoring messages that were already sent
2020-09-29 11:32:49 +02:00
Bruno Windels
7627a2bda2
add comment
2020-09-29 10:53:02 +02:00
Bruno Windels
163ca12854
ignore abort error
2020-09-29 10:52:52 +02:00
Bruno Windels
919357b474
more broken imports after refactor
2020-09-29 09:57:48 +02:00
Bruno Windels
c529df179b
also import this
2020-09-29 09:56:46 +02:00
Bruno Windels
c1ecaffbae
fix refactor typo
2020-09-29 09:54:51 +02:00
Bruno Windels
07fcf7e75b
also do this in try catch
2020-09-29 09:43:25 +02:00
Bruno Windels
4d23529b68
set promise polyfill before others
...
just in case
2020-09-29 09:42:43 +02:00
Bruno Windels
b1f9cfd972
cleanup storage errors a bit
2020-09-29 09:17:03 +02:00
Bruno Windels
ee4c132fb4
add todo
2020-09-28 16:06:41 +02:00
Bruno Windels
76381fbca1
open storage transactions synchronously
...
this (almost) makes it work in some browsers that otherwise
have throw a TransactionInactiveError on the first operation
you try to do on a store.
2020-09-28 16:06:41 +02:00
Bruno Windels
d759e1429f
set error before changing state to stopped
2020-09-28 16:06:19 +02:00
Bruno Windels
3440823981
Merge pull request #117 from vector-im/bwindels/idb-promises
...
Prevent transaction from closing on IE11/Win7
2020-09-28 13:37:34 +00:00
Bruno Windels
47dbc87e95
load promise first
2020-09-28 15:34:10 +02:00
Bruno Windels
bb58fa9b6c
dont need this anymore
2020-09-28 15:32:40 +02:00
Bruno Windels
18cc34c082
remove extra newlines
2020-09-28 15:31:04 +02:00
Bruno Windels
dd30f51ffe
add copyright
2020-09-28 15:28:51 +02:00
Bruno Windels
9cf24d910a
properly install polyfill and remove logging
2020-09-28 15:28:38 +02:00
Bruno Windels
6d003f9565
don't include corejs promise polyfill anymore
2020-09-28 15:28:22 +02:00
Bruno Windels
e3581c8260
use our fork of es6-promise with flush exposed as the promise polyfill
2020-09-28 15:27:38 +02:00
Bruno Windels
8366b44d8c
dont assume global is window
2020-09-28 14:52:12 +02:00
Bruno Windels
98a6d82820
detect when sync promise hack is needed
2020-09-28 14:51:41 +02:00
Bruno Windels
706ec97296
change method name
2020-09-28 13:25:44 +02:00
Bruno Windels
64290d5ae6
flush promises manually in idb event handler
2020-09-25 16:53:19 +02:00
Bruno Windels
becdf656a4
nicer error messages when decrypting with a worker
2020-09-25 16:52:26 +02:00
Bruno Windels
27a8ef4604
add comment how timeouts interact with the reconnector
2020-09-25 10:45:41 +02:00
Bruno Windels
e175e9ac8b
cleanup
2020-09-25 10:45:34 +02:00
Bruno Windels
134b04c782
make flushing room key shares reentrant
...
as it can be called from Room.start while still running.
2020-09-25 10:45:00 +02:00
Bruno Windels
bcca23bac9
retry sync on timeout, even for incremental sync
2020-09-25 10:44:36 +02:00
Bruno Windels
7f0d36cf79
remove double negation
2020-09-25 10:44:19 +02:00
Bruno Windels
86df4993e1
prevent room summary from being updated every time it is in /sync resp
2020-09-24 16:45:28 +02:00
Bruno Windels
46abafdccc
ensure cloned is always set to false for this._data
...
by making all assignments of this._data go through applyChanges
2020-09-24 16:40:51 +02:00
Bruno Windels
4a0173e90f
only run decryptPending if needed
2020-09-24 10:53:51 +02:00
Bruno Windels
4d616ce281
add todo for future optimisation
2020-09-24 10:35:09 +02:00
Bruno Windels
ece4840653
don't mark rooms as unread after retrying decryption for now
...
this will not mark e2ee rooms as unread if their room key is delayed
though. We should really only do this for back-filled events but that
is hard to do right now, as we don't know the original source here.
2020-09-23 19:11:11 +02:00
Bruno Windels
eb4237f6f4
tell caller if an update was done from summery.writeAndApplyData
...
so room actually emits an update
2020-09-23 19:10:25 +02:00
Bruno Windels
17f84ab314
fix "this" still being used in readRawTimelineEntries ...
2020-09-23 19:09:44 +02:00
Bruno Windels
086bdafe9a
no need for async
2020-09-23 18:28:21 +02:00
Bruno Windels
7cad3b2bdb
some tabs in here
2020-09-23 18:22:51 +02:00
Bruno Windels
64f657e5a2
fix test
2020-09-23 18:20:29 +02:00
Bruno Windels
6e77ebb160
undo obsolete changes
2020-09-23 18:06:16 +02:00
Bruno Windels
d53b5eefb3
fill in the blanks
2020-09-23 17:59:42 +02:00
Bruno Windels
9d41e122a0
draft of falling back to reading entries since last decrypted event key
...
this change notifyRoomKey(s) to only take one room key at a time
to simplify things
2020-09-23 17:34:25 +02:00
Bruno Windels
a8392dc684
also decrypt messages in the sync response that enabled encryption
...
like initial sync
2020-09-23 14:26:14 +02:00
Bruno Windels
241176d6fb
WIP
2020-09-22 18:22:37 +02:00
Bruno Windels
137f55b44d
manage request scheduler in session container
...
so we can start it before sync does its first request,
which otherwise gets aborted because the scheduler hasn't started yet
2020-09-22 16:39:41 +02:00
Bruno Windels
150f06b9bf
also move to Stopped for aborts
2020-09-22 16:39:04 +02:00
Bruno Windels
85b451ffa1
can't rename named params like this
2020-09-22 15:49:43 +02:00
Bruno Windels
5660e0f4f0
rename send scheduler to request scheduler
2020-09-22 15:49:35 +02:00
Bruno Windels
0a00d4c865
use hsApi wrapper that handles rate-limiting instead of send scheduler
2020-09-22 13:43:18 +02:00
Bruno Windels
d7c25e3106
move MediaRepository out of HomeServerApi
...
so HomeServerApi becomes easier to wrap, only having methods
that return a RequestResult.
2020-09-22 13:40:38 +02:00
Bruno Windels
6cd227b82d
only prompt after waiting 10s for sync UTD
2020-09-22 09:30:25 +02:00
Bruno Windels
0a83bf1176
more notes for legacy css marker
2020-09-22 09:30:13 +02:00
Bruno Windels
3359d49161
off both passphrase and security key options
2020-09-21 19:19:55 +02:00
Bruno Windels
e6a46874c4
wrap olm error for creating session in DecryptionError
...
so we can relate it back to the event that caused it
2020-09-21 17:58:13 +02:00
Bruno Windels
c9ee5a5db2
stay in catchup mode as long as there are device messages
...
this implements https://github.com/vector-im/element-web/issues/2782
it also implements 0 timeout for catchup, getting rid of the
catching up with your convo banner for 30s upon reconnection.
2020-09-21 17:57:01 +02:00
Bruno Windels
015c6b1c70
interpret unreported signed_curve25519 as 0 OTKs
2020-09-21 17:56:23 +02:00
Bruno Windels
4dfbd3f3cd
don't run afterSyncCompleted and next sync request in parallel
...
as the otk count the next sync request reports will be outdated
if afterSyncCompleted uploaded OTKs, and the next afterSyncCompleted
, having the wrong server OTK count, will again upload OTKs.
This will overwrite existing OTK keys which will
throw BAD_MESSAGE_KEY_ID when creating new sessions with those OTKs
2020-09-21 17:53:29 +02:00
Bruno Windels
c7370d7b01
Use continue in for loop rather than return
...
this was running in a Promise.all(array.map)) closure before
2020-09-21 14:11:28 +02:00
Bruno Windels
2c6a3a7ce7
fix afterSyncCompleted not being run after a sync error occurs
...
the error was not cleared when calling start again.
Also we should better look at the sync status to decide whether to run
afterSyncCompleted.
This prevented the room keys from being applied once you
had a connection error or other error at some point
since you started the app.
2020-09-21 13:55:35 +02:00
Bruno Windels
8cf29e344b
don't send access token on /versions
...
as it's not a good idea, and some CORS configs might not be happy with
an Authorization header on that path
2020-09-18 18:13:20 +02:00
Bruno Windels
1d33ab20a5
fix decrypted tiles not corresponding to a tile
2020-09-18 13:36:16 +02:00
Bruno Windels
4d604f7357
log all sync errors
2020-09-18 13:11:18 +02:00
Bruno Windels
3704de1a26
more dispose
2020-09-18 13:11:10 +02:00
Bruno Windels
da780d0aa2
delay backup 10s if missing session event came from sync
2020-09-18 13:11:02 +02:00
Bruno Windels
3aead4eae2
createEnum does not take an array
2020-09-18 13:08:35 +02:00
Bruno Windels
ed913ca24b
add dispose to room encryption
2020-09-18 13:08:18 +02:00
Bruno Windels
6c46cc98de
be more specific in error message
2020-09-18 12:12:52 +02:00
Bruno Windels
2de406afa0
log secret storage error as well
2020-09-18 12:12:19 +02:00
Bruno Windels
cb32f4201e
note for future cleanup
2020-09-18 12:12:12 +02:00
Bruno Windels
9fd39ab57f
aes-js doesn't work with ArrayBuffers
2020-09-18 12:04:48 +02:00
Bruno Windels
36b56132b0
add TextEncoder/Decoder polyfill to legacy bundle
2020-09-18 12:04:22 +02:00
Bruno Windels
6375574a56
show error
2020-09-17 18:59:40 +02:00
Bruno Windels
f58a3ee975
use olm from param
2020-09-17 18:56:02 +02:00
Bruno Windels
7d6fcfafa8
pass olm, better naming, don't reuse var
2020-09-17 18:55:39 +02:00
Bruno Windels
5b45c00322
switch to security key
2020-09-17 18:55:28 +02:00
Bruno Windels
ceac6008bc
fix import
2020-09-17 18:55:09 +02:00
Bruno Windels
fe5b732c97
cleanup, better copy text
2020-09-17 18:54:55 +02:00
Bruno Windels
494c5cbcf0
notify UI when we need session backup
2020-09-17 18:00:00 +02:00
Bruno Windels
06ccd74680
this should be read-write, oops
2020-09-17 17:59:35 +02:00
Bruno Windels
1b8e481559
keys from backup need to be imported with import_session, not create
2020-09-17 17:59:02 +02:00
Bruno Windels
915925d6ee
don't throw when trying to restore session from backup, check sender key
2020-09-17 17:57:52 +02:00
Bruno Windels
a205ae8841
fixes
2020-09-17 17:57:12 +02:00
Bruno Windels
5752cca69c
go back to bs58 and use other base64 decoder
...
as base-x isn't meant for base64
2020-09-17 17:56:05 +02:00
Bruno Windels
9d622434fb
integrate session backup with session class
2020-09-17 15:58:46 +02:00
Bruno Windels
3cebd17cbe
adjust paths
2020-09-17 15:17:46 +02:00
Bruno Windels
c9d8d40242
move ssss out of e2ee dir as not really e2ee related
2020-09-17 15:17:00 +02:00
Bruno Windels
33aa475e18
add function to create key from either passphrase or recovery key
2020-09-17 15:16:01 +02:00
Bruno Windels
7f97c540fb
obsolete comment, this is already the case
2020-09-17 14:20:42 +02:00
Bruno Windels
092547bfc8
renaming
2020-09-17 14:20:36 +02:00
Bruno Windels
17fc249fa8
integrate session backup with room encryption and megolm decryption
2020-09-17 14:20:15 +02:00
Bruno Windels
3941af93d2
more impl of SessionBackup
2020-09-17 14:19:57 +02:00
Bruno Windels
fff8308259
first draft of SessionBackup
2020-09-17 12:34:39 +02:00
Bruno Windels
1a105d391b
cleanup: rename session name to hydrogen as well
...
as we'll need people to resync because of account data as well
2020-09-17 12:34:10 +02:00
Bruno Windels
b7401a148c
some ssss cleanup
2020-09-17 12:33:57 +02:00
Bruno Windels
8204e942d9
first draft of reading a ssss secret
2020-09-17 11:39:40 +02:00
Bruno Windels
c44ab3e55e
derive ssss key from recovery key
2020-09-17 11:39:25 +02:00
Bruno Windels
7c4c266fe0
derive ssss key from passphrase
2020-09-17 11:39:07 +02:00
Bruno Windels
45c62eb0e5
common types and storage for ssss
2020-09-17 11:38:53 +02:00
Bruno Windels
7412b3aae8
forgot to commit account data store
2020-09-17 11:38:44 +02:00
Bruno Windels
4ec0e67384
use base-x to support both base64 and base58
2020-09-17 11:36:54 +02:00
Bruno Windels
abfde76e24
store account data in storage
...
needs a resync, need to think how to handle this
2020-09-17 10:39:51 +02:00
Bruno Windels
00eade1c16
add crypto driver with primitives needed for 4S & session backup
2020-09-17 10:19:09 +02:00
Bruno Windels
ab01c903a6
turns out that rollup-plugin-cleanup doesn't like line 259 in aes-js
...
so don't remove comments for now in the legacy build
2020-09-17 09:36:37 +02:00
Bruno Windels
77a21c08eb
add legacy extras, so deps only needed for legacy are not in main bundle
2020-09-16 18:31:17 +02:00
Bruno Windels
b63aaa6dcb
add typed array polyfills to worker bundle
2020-09-16 14:42:13 +02:00
Bruno Windels
12262f2824
actually use correct method to get all device ids for a user
2020-09-14 18:31:54 +02:00
Bruno Windels
75bff228ec
fix data not being passed on, caused crash on initial sync
2020-09-14 17:45:13 +02:00
Bruno Windels
a11b612640
await this
2020-09-14 17:45:02 +02:00
Bruno Windels
b2e6e8687e
dispose tiles
...
also add more defence against emitting event when disposed
2020-09-14 17:44:37 +02:00
Bruno Windels
9ea961ae53
don't crash when we don't have a subscription anymore
2020-09-14 17:43:06 +02:00
Bruno Windels
49f330279b
also pass timeline entries to summary after initial decryption failed
2020-09-14 16:34:07 +02:00
Bruno Windels
f3f07a0672
centralize update emitting in room
2020-09-14 16:33:43 +02:00
Bruno Windels
bce46daa9c
this is shorter
2020-09-14 16:33:30 +02:00
Bruno Windels
3325f12092
remove devices not present in /keys/query response
2020-09-14 15:47:00 +02:00
Bruno Windels
504371eaf3
this is outdated (and not really needed)
2020-09-14 15:47:00 +02:00
Bruno Windels
8555fd5f18
a little extra caution
2020-09-14 15:47:00 +02:00
Bruno Windels
aa5d55bbf2
show when e2ee is enabled in timeline
2020-09-14 15:47:00 +02:00
Bruno Windels
8c4d68def9
show decryption errors in timeline
2020-09-14 15:47:00 +02:00
Bruno Windels
a2f8731a23
Keep room key with earliest index
2020-09-14 15:47:00 +02:00
Bruno Windels
9fad5b3b29
only load olm once
2020-09-14 15:47:00 +02:00
Bruno Windels
0c3ea90ab4
also update room list when encrypted events come in
2020-09-14 15:46:58 +02:00
Bruno Windels
fb69688d47
also update room list when encrypted events come in
2020-09-14 14:01:47 +02:00
Bruno Windels
4875095ea3
fix event tiles not updating when event is decrypted when room keys come
2020-09-11 17:47:35 +02:00
Bruno Windels
2855166239
migrate encryption flag so old sessions dont send unencrypted events
2020-09-11 16:48:04 +02:00
Bruno Windels
e763771cc2
cleanup
2020-09-11 14:45:38 +02:00
Bruno Windels
96119b4e58
load all pending operations when starting the session, pass to room
2020-09-11 14:41:40 +02:00
Bruno Windels
ab1fe711ad
implement room key sharing with operations store
2020-09-11 14:41:12 +02:00
Bruno Windels
b00865510f
add operation store
2020-09-11 14:40:05 +02:00
Bruno Windels
9f6822f362
remove needsRoomKey flag on member
2020-09-11 14:38:36 +02:00
Bruno Windels
bba53b3477
dont store duplicated key values for replay detection
2020-09-11 12:08:06 +02:00
Bruno Windels
0dece5b04f
make continuation logic work well with pending events
...
- don't use display name to compare but user id
(pending doesn't have display name yet)
- use current time as timestamp
2020-09-11 11:43:40 +02:00
Bruno Windels
2c186554a1
this works better in ie11 for some reason
2020-09-11 11:36:08 +02:00
Bruno Windels
843e3e6b1c
show encrypted status of room
2020-09-11 11:35:53 +02:00
Bruno Windels
0e3084cce3
provide alternative spinner for ie11
2020-09-11 11:28:59 +02:00
Bruno Windels
95c6fd5a5b
reenable only using worker when wasm is not supported
2020-09-11 10:53:15 +02:00
Bruno Windels
e0d9d703b7
offload olm account creation in worker
2020-09-11 10:43:17 +02:00
Bruno Windels
0b26e6f53a
compress new e2ee stores into one new idb version
2020-09-11 08:40:43 +02:00
Bruno Windels
78fecd003a
cleanup
2020-09-10 18:57:29 +02:00
Bruno Windels
af36c71a59
load worker in main and pass paths so it works both on compiled and non-compiled
2020-09-10 18:41:23 +02:00
Bruno Windels
de1cc0d739
abort decrypt requests when changing room
2020-09-10 17:43:01 +02:00
Bruno Windels
0bf1723d99
Worker WIP
2020-09-10 15:40:30 +01:00
Bruno Windels
fdbc5f3c1d
WIP worker work
2020-09-10 13:00:11 +02:00
Bruno Windels
17412bbb2f
more validation
2020-09-10 12:12:39 +02:00
Bruno Windels
94b0cfbd72
add prepareSync and afterPrepareSync steps to sync, run decryption in it
2020-09-10 12:11:43 +02:00
Bruno Windels
1c77c3b876
expose multi-step decryption from RoomEncryption, adjust room timeline
...
sync code hasn't been adjusted yet
2020-09-10 12:11:25 +02:00
Bruno Windels
7c1f9dbed0
split up megolm decryption so it can happen in multiple steps,see README
2020-09-10 12:05:53 +02:00
Bruno Windels
a4c8e56ab0
fix getKey not working on IE11
2020-09-09 11:42:26 +01:00
Bruno Windels
f8e3a75471
fix typo
2020-09-09 10:22:29 +02:00
Bruno Windels
a18d2c0e78
update comment
2020-09-09 09:51:48 +02:00
Bruno Windels
212efe823c
fix memberlist not containing all members
...
we were using the prev_batch of the last sync to pass to
/members, but this points at the timeline *before* the last
sync, so wouldn't contain all members. Use the sync token instead.
2020-09-09 09:50:03 +02:00
Bruno Windels
1f9d6191c2
this happens often when room is not tracked yet, so don't log
2020-09-08 18:32:51 +02:00
Bruno Windels
0ed2d14887
log OTK claim failures
2020-09-08 18:32:12 +02:00
Bruno Windels
da4b710e49
don't return promise here, not used
2020-09-08 18:30:45 +02:00
Bruno Windels
4ca5ff9b9f
only load 50 olm sessions at once
2020-09-08 18:30:06 +02:00
Bruno Windels
10b5614fd9
m.dummy events don't have content
2020-09-08 18:27:49 +02:00
Bruno Windels
9a7abb1899
make logic more explicit
2020-09-08 18:27:35 +02:00
Bruno Windels
4a2faed198
don't assume roomKeys is an array
2020-09-08 18:27:12 +02:00
Bruno Windels
4c1aaaf416
show "setting up encryption keys..." step during login
2020-09-08 17:16:34 +02:00
Bruno Windels
36a8ec0110
dont attempt to decrypt redacted events
...
this will show them as undecryptable for now though
2020-09-08 17:16:01 +02:00
Bruno Windels
773cb3420f
ignore duplicate curve25519 keys in /keys/query response
2020-09-08 17:14:23 +02:00
Bruno Windels
b653022a5a
do store our own device, otherwise need special case verifying own msgs
2020-09-08 15:25:36 +02:00
Bruno Windels
65660a1e3b
remove double jsdoc
2020-09-08 15:06:44 +02:00
Bruno Windels
650df6fea8
forgot await
2020-09-08 15:00:29 +02:00
Bruno Windels
5a8aac57ac
there might not be a member yet
2020-09-08 15:00:20 +02:00
Bruno Windels
7bba83aa9e
add outbound session store to sync txn
2020-09-08 15:00:00 +02:00
Bruno Windels
5e65eb10ef
docs
2020-09-08 14:39:33 +02:00
Bruno Windels
1aa044667c
try sending out pending room keys after first sync
2020-09-08 14:39:07 +02:00
Bruno Windels
31d4b6f75d
send room keys to newly joined members in afterSyncCompleted stage
2020-09-08 14:38:27 +02:00
Bruno Windels
c158e3da77
support running afterSyncCompleted step on rooms as well
...
and make it in parallel with next sync request
2020-09-08 14:37:24 +02:00
Bruno Windels
52c3c7c03d
support sending out room key in room encryption for newly joined members
2020-09-08 14:36:50 +02:00
Bruno Windels
7b35a3c46c
memberChanges is a map, not array
2020-09-08 14:23:38 +02:00
Bruno Windels
bbaf3a5605
write needsRoomKey flag when new members joins to tracked e2ee room
2020-09-08 14:22:11 +02:00
Bruno Windels
d184be2d22
rotate outbound megolm session when somebody leaves the room
2020-09-08 11:09:09 +02:00
Bruno Windels
cd172f6df2
log new room keys for debugging
2020-09-08 10:55:38 +02:00
Bruno Windels
dea9fd90b4
name devices at login "Hydrogen"
...
so you can somewhat identify them in a device list
2020-09-08 10:53:15 +02:00
Bruno Windels
2c5c3ac8e2
formatting
2020-09-08 10:53:02 +02:00
Bruno Windels
2b59c8bb7c
store ed25519 key from olm event rather than one in m.room_key payload
...
that's the docs/js-sdk do it, even though it probably
doesn't matter much as we verify the key anyway
2020-09-08 10:52:02 +02:00
Bruno Windels
40ed66dc5e
document return type
2020-09-08 10:51:45 +02:00
Bruno Windels
4cf3b3569d
storage method takes EventKey actually
2020-09-08 10:51:28 +02:00
Bruno Windels
3e100ff5ec
ensure /keys/query devices have the keys we need
2020-09-08 10:51:01 +02:00
Bruno Windels
c32ac2c764
use decryption result to show message verification status in timeline
2020-09-08 10:50:39 +02:00
Bruno Windels
9137d5dcbb
make decryption algorithms return DecryptionResult
...
which contains curve25519 key and claimed ed25519 key as well as payload
2020-09-08 10:48:11 +02:00
Bruno Windels
fbb534fa16
add todo
2020-09-04 16:46:13 +02:00
Bruno Windels
a817a9aaf9
return decrypted type and content
2020-09-04 16:41:03 +02:00
Bruno Windels
7bfcfc9eed
correct store name
2020-09-04 16:40:51 +02:00
Bruno Windels
f31efe3e87
encode key with proper names
2020-09-04 16:40:39 +02:00
Bruno Windels
8e5d5db32b
add event prop on entry
2020-09-04 16:40:15 +02:00
Bruno Windels
e06cb1eb5f
fix param order
2020-09-04 16:29:20 +02:00
Bruno Windels
1af118a443
don't assume we have a timeline
2020-09-04 16:27:39 +02:00
Bruno Windels
9b771120e4
actually accept megolm decryption dep
2020-09-04 16:27:14 +02:00
Bruno Windels
dc0576f2db
cleanup
2020-09-04 15:31:45 +02:00
Bruno Windels
baad4bd37f
hookup megolm decryption in session
2020-09-04 15:31:27 +02:00
Bruno Windels
32a399afec
implement storage changes for megolm decryption
2020-09-04 15:31:00 +02:00
Bruno Windels
5a731903da
implement decrypting when loading timeline
2020-09-04 15:30:06 +02:00
Bruno Windels
62bcb27784
implement decryption retrying and decrypting of gap/load entries
...
turns out we do have to always check for replay attacks because
failing to decrypt doesn't prevent an item from being stored,
so if you reload and then load you might be decrypting it
for the first time
2020-09-04 15:29:58 +02:00
Bruno Windels
565fdb0f8c
use proper error codes
2020-09-04 12:10:36 +02:00
Bruno Windels
28b46a1e5b
add some comments
2020-09-04 12:10:28 +02:00
Bruno Windels
fe9245dd04
first draft of retrying decryption when receiving room keys
2020-09-04 12:10:12 +02:00
Bruno Windels
502ba5deea
first draft of decryption in Room and RoomEncryption
2020-09-04 12:09:19 +02:00
Bruno Windels
fab58e8724
first draft of megolm decryption
2020-09-04 12:06:26 +02:00
Bruno Windels
80ede4f411
session will always be true here, we want to check sessionEntry
2020-09-04 12:05:58 +02:00
Bruno Windels
8ac80314c2
cleanup
2020-09-03 17:51:20 +02:00
Bruno Windels
c5efa582b1
check algorithm
2020-09-03 17:51:00 +02:00
Bruno Windels
c5c9505ce2
hookup megolm encryption in session
2020-09-03 17:50:28 +02:00
Bruno Windels
be4d887178
add outbound group session storage
2020-09-03 17:49:20 +02:00
Bruno Windels
6bc30bb824
implement megolm encryption
2020-09-03 17:48:59 +02:00
Bruno Windels
b1226d9220
add infrastructure to encrypt while sending
2020-09-03 15:36:48 +02:00
Bruno Windels
5cafef96f5
add RoomEncryption to room
2020-09-03 15:36:17 +02:00
Bruno Windels
2a40c89a24
implement hsapi /keys/claim endpoint
2020-09-03 15:33:23 +02:00
Bruno Windels
dde8c66196
implement store changes for olm encryption
2020-09-03 15:33:03 +02:00
Bruno Windels
792f0cf9a0
log our identity keys after load
2020-09-03 15:32:33 +02:00
Bruno Windels
1d4a5cd6d4
instantiate olm encryption in session
2020-09-03 15:32:08 +02:00
Bruno Windels
4401012312
no need to call decrypt when there are no events
2020-09-03 15:30:54 +02:00
Bruno Windels
408ff3322d
content already exists here
2020-09-03 15:30:42 +02:00
Bruno Windels
620fc0d210
JSON stringify payload, olm_encrypt does not do objects
2020-09-03 15:30:18 +02:00
Bruno Windels
8676909a26
don't swallow errors!
2020-09-03 15:30:09 +02:00
Bruno Windels
a943467e71
await txns
2020-09-03 15:30:01 +02:00
Bruno Windels
71ba2dd714
name userId -> ownUserId as elsewhere
2020-09-03 15:29:35 +02:00
Bruno Windels
8d0d4570dd
fix import path
2020-09-03 15:29:09 +02:00
Bruno Windels
b2fffee037
give better error when olm plaintext is not json
2020-09-03 15:28:49 +02:00
Bruno Windels
1f8005cdfd
forgot to pass account
2020-09-03 15:28:38 +02:00
Bruno Windels
e22131bf57
don't store or return our own device
2020-09-03 15:28:20 +02:00
Bruno Windels
eda15e1141
forgot to remove this after extracting function
2020-09-03 15:27:40 +02:00
Bruno Windels
8d64fa54fe
using wrong method here
2020-09-03 15:27:00 +02:00
Bruno Windels
af423b1c7f
ensure second promise has run in test
2020-09-03 12:17:01 +02:00
Bruno Windels
4f4808b94c
lock on senderKey while enc/decrypting olm sessions
2020-09-03 12:12:33 +02:00
Bruno Windels
4ecd853348
Merge branch 'bwindels/e2ee' into bwindels/olm-encrypt
2020-09-03 11:44:36 +02:00
Bruno Windels
279b55e8e6
fix test
2020-09-03 11:31:00 +02:00
Bruno Windels
1492b6b6f8
cleanup of olm encryption
2020-09-03 09:53:16 +02:00
Bruno Windels
e3daef5ca9
first draft of olm encryption
2020-09-02 17:58:01 +02:00
Bruno Windels
3cb46b38ff
extract olm/Session into own file
2020-09-02 17:38:46 +02:00
Bruno Windels
f1b78a5778
extract groupBy function from olm decryption into util
2020-09-02 17:38:25 +02:00
Bruno Windels
0545c1f0c5
extract verifying a signed object from the device tracker
2020-09-02 17:37:48 +02:00
Bruno Windels
bd64aaf029
create outbound olm session from account
...
also better error handling
2020-09-02 17:37:13 +02:00
Bruno Windels
6c60381d54
Merge pull request #79 from vector-im/bwindels/hookuk-olm-to-device
...
Hookup to_device message handling and store megolm sessions when receiving m.room_key
2020-09-02 13:01:52 +00:00
Bruno Windels
1dbabf6240
cleanup ctor
2020-09-02 14:59:17 +02:00
Bruno Windels
b4d2be6b12
Merge branch 'master' into bwindels/e2ee
2020-09-02 14:55:38 +02:00
Bruno Windels
5a12904cc3
log errors during session load
2020-09-02 14:54:57 +02:00
Bruno Windels
1ab356cd9c
wrong store name
2020-09-02 14:53:50 +02:00
Bruno Windels
95fcbe1598
typo
2020-09-02 14:52:33 +02:00
Bruno Windels
14cba7ec6e
need to pass in olm
2020-09-02 14:52:19 +02:00
Bruno Windels
1f66868566
forgot to await
2020-09-02 14:52:02 +02:00
Bruno Windels
e09fbf566d
TODO
2020-09-02 14:30:49 +02:00
Bruno Windels
7d517eb700
wire up the olm decryption,megolm room key handler and to_device handler
2020-09-02 14:30:18 +02:00
Bruno Windels
0219932f50
typo
2020-09-02 14:29:18 +02:00
Bruno Windels
6d3aa219fa
implement storing room keys
2020-09-02 14:24:38 +02:00
Bruno Windels
f5c7b1b3ec
remove obsolete comment
2020-09-02 13:35:25 +02:00
Bruno Windels
6aad751611
fix wrong idb method used in session store
2020-09-02 13:35:08 +02:00
Bruno Windels
44e9f91d4c
to_device handler for encrypted messages
...
changes the api of the olm decryption to decrypt in batch
so we can isolate side-effects until we have a write-txn open
and we can parallelize the decryption of different sender keys.
2020-09-02 13:33:27 +02:00
Bruno Windels
6788a612fc
implement olm session storage
2020-09-01 17:59:59 +02:00
Bruno Windels
5fee7fedc3
implement olm decryption algorithm
2020-09-01 17:59:39 +02:00
Bruno Windels
81a1573e3b
make a shared olm util for the whole session
2020-09-01 17:57:59 +02:00
Bruno Windels
9870483121
remove room list sorting logging, works well now
2020-08-31 16:22:03 +02:00
Bruno Windels
cfa011a317
remove room list sorting logging, works well now
2020-08-31 16:21:12 +02:00
Bruno Windels
007333628a
add todo for /sync <-> /members race
2020-08-31 16:10:18 +02:00
Bruno Windels
15ae35bbbc
add future todo
2020-08-31 16:09:38 +02:00
Bruno Windels
6580219b09
add userIdentities to sync txn
2020-08-31 16:09:24 +02:00
Bruno Windels
4077f57afb
fix typos in stores
2020-08-31 16:09:13 +02:00
Bruno Windels
aeb2f5402a
process own membership changes before device lists
2020-08-31 16:08:47 +02:00
Bruno Windels
703c89e276
make membership available on member
2020-08-31 16:07:29 +02:00
Bruno Windels
374dce638d
these are assumed to be getters
2020-08-31 16:07:18 +02:00
Bruno Windels
4fd3e2ab20
response is a method
2020-08-31 16:07:04 +02:00
Bruno Windels
d43cdfd889
don't crash when tracked user is not there
2020-08-31 16:06:40 +02:00
Bruno Windels
fef6586e5b
actually pass the room id
2020-08-31 16:06:31 +02:00
Bruno Windels
78c3157a5f
fix not taking into account Object.entries yields arrays for the pairs
2020-08-31 16:05:57 +02:00
Bruno Windels
561df45641
olm.Utility should be instanciated
2020-08-31 16:05:21 +02:00
Bruno Windels
0399562340
fix typo
2020-08-31 16:05:04 +02:00
Bruno Windels
8b7fdb2c61
create user & device identity stores
2020-08-31 14:38:03 +02:00
Bruno Windels
4ef5d4b3b8
implement hsapi /keys/query method
2020-08-31 14:24:09 +02:00
Bruno Windels
2e67b2b6b8
handle prev_content location ambiguity
2020-08-31 14:21:18 +02:00
Bruno Windels
09cb39b553
don't run afterSyncCompleted when there was an error
2020-08-31 14:13:36 +02:00
Bruno Windels
afb9ae4391
hook up device tracker with sync
2020-08-31 14:13:21 +02:00
Bruno Windels
8b358379e8
first draft of device tracker
...
mainly missing race protection with /sync and actually running the code
2020-08-31 14:12:12 +02:00
Bruno Windels
8482bc95ec
pass memberchanges around instead of members
...
so we can easily tell how their membership changes, (e.g. join -> left)
which we'll need for device tracking.
Not adding this to RoomMember because RoomMember also needs to be
able to represent a member loaded from storage which doesn't contain
this error. A MemberChange exists only within a sync.
2020-08-31 09:50:57 +02:00
Bruno Windels
164384f312
forgot memberlist member
2020-08-31 08:54:27 +02:00
Bruno Windels
8da00f9a03
add isTrackingMembers flag to know if EncryptionUsers have been written
...
for this room
2020-08-31 08:53:47 +02:00
Bruno Windels
d813e6d932
store encryption event content rather than just flag in room summary
2020-08-31 08:53:10 +02:00
Bruno Windels
693682f360
move e2ee constants to common file
2020-08-28 14:35:47 +02:00
Bruno Windels
e751333bbd
don't assume setting up a session went all the way through when stopping
2020-08-28 13:58:42 +02:00
Bruno Windels
a1ba5d7dba
between syncs, generate more otks if needed, and upload them
2020-08-28 13:58:17 +02:00
Bruno Windels
681dfdf62b
sync otk count to e2ee account
2020-08-28 13:56:44 +02:00
Bruno Windels
d64db185bd
await callback in case we need to read, then write from it
2020-08-28 13:54:42 +02:00
Bruno Windels
3ab5a72221
give e2ee account values a prefix so we can prevent from clearing them
2020-08-28 13:52:27 +02:00
Bruno Windels
d24be7ee55
extract constants out
2020-08-28 13:51:58 +02:00
Bruno Windels
d7d1d8c45a
Merge branch 'master' into bwindels/e2ee
2020-08-28 12:11:33 +02:00
Bruno Windels
6a9cbf7f33
store and sort by m.lowpriority tag
2020-08-27 20:52:51 +02:00
Bruno Windels
4c290f0394
upload identity and one-time keys
2020-08-27 19:13:24 +02:00
Bruno Windels
f98b3dd5fa
create/load olm account before first sync
2020-08-27 19:13:09 +02:00
Bruno Windels
3b24ea34f3
Merge branch 'master' into bwindels/e2ee
2020-08-27 14:40:57 +02:00
Bruno Windels
09a018ade1
store sync token and filter id under the same key in session
...
as they are updated together
2020-08-27 14:36:50 +02:00
Bruno Windels
14b27f81fe
store session values as individual values in store
...
so we don't have to write the whole object every time something changes
we'll use this to store the olm account
2020-08-27 14:28:40 +02:00
Bruno Windels
25f3dfbb75
fix failing test
2020-08-27 14:22:59 +02:00
Bruno Windels
87aabb3057
make crypto.getRandomValues available on IE11 without a prefix
...
olm needs this to work on IE11
2020-08-27 13:32:13 +02:00
Bruno Windels
fe0257bca1
load olm and pass it to session
2020-08-27 13:24:55 +02:00
Bruno Windels
05821b0fdf
use same check for timestamp validity as timestamp can be undefined sometimes
2020-08-27 12:42:38 +02:00
Bruno Windels
1a6931129b
log as info
2020-08-27 10:50:30 +02:00
Bruno Windels
9e891c3442
log actual timestamps as well
...
so we can see if they are anything but null or a number
2020-08-27 10:48:12 +02:00
Bruno Windels
4b682ad930
use the same check when seeing if either does not have a timestamp
2020-08-27 10:45:20 +02:00
Bruno Windels
41a7448c74
add logging for room list sorting
2020-08-27 10:40:49 +02:00
Bruno Windels
3e8e1bab67
remove logging
2020-08-27 10:38:22 +02:00
Bruno Windels
59443e6602
close the room tile view model as well when closing a room so it does not stay selected
2020-08-27 10:07:47 +02:00
Bruno Windels
1fe496eeea
fix crash when state is not set (erroneously?) on gap response
...
this seems to happen when the only event in the room is
a m.room.create
2020-08-27 09:52:30 +02:00
Bruno Windels
34ec96c1b8
look for displayname/avatar in prev content as well
...
as synapse doesn't set them on content for leave memberships
this caused these props to be removed in storage
2020-08-27 09:51:44 +02:00
Bruno Windels
bd9cb5aae5
add RoomMember.name which falls back to userId
...
this will prevent the crash when left members
have their displayname removed (another issue)
2020-08-27 09:51:00 +02:00
Bruno Windels
b814335b99
this was missing! and causing an error with empty lists
2020-08-21 19:21:53 +02:00
Bruno Windels
5d21ae3fb7
fix error on conduit with state field that is missing when empty
2020-08-21 19:10:28 +02:00
Bruno Windels
a64d49a8a2
prevent an empty array being passed to Heroes
2020-08-21 19:03:21 +02:00
Bruno Windels
3d5b69f60a
remove obsolete comment
2020-08-21 18:14:57 +02:00
Bruno Windels
b39c15d88d
Room.name can actually return null now
...
so protect against this, and fall back to "Empty Room"
2020-08-21 18:14:32 +02:00
Bruno Windels
e4758d0651
we need to read from members now during load, for the heroes
...
and were actually not reading from room state
2020-08-21 18:14:07 +02:00
Bruno Windels
70e89a3dd6
expose name/avatar on member
2020-08-21 18:13:53 +02:00
Bruno Windels
2c14373b13
allow falling back to heroes name if we don't have one
2020-08-21 18:12:11 +02:00
Bruno Windels
acec7c8f33
remove alt_aliases, as we should not use it for the room name
2020-08-21 18:11:53 +02:00
Bruno Windels
d5d0154873
join and invited count were mixed up... oops
2020-08-21 18:11:26 +02:00
Bruno Windels
e5cdf061cb
create, update and remove heroes as they come from sync
2020-08-21 18:11:07 +02:00
Bruno Windels
ddfdbf9777
implement heroes logic to calculate the room name
2020-08-21 17:59:24 +02:00
Bruno Windels
f551010968
render badge on room
2020-08-21 15:50:47 +02:00
Bruno Windels
831f4188f7
also expose highlight count
2020-08-21 15:50:32 +02:00
Bruno Windels
0d8ff34c55
don't fail to clear unread state when offline
...
also update UI before network request
2020-08-21 15:23:25 +02:00
Bruno Windels
2bfbb41ee7
send receipt to server when clearing unread state so notif count clears
2020-08-21 15:16:57 +02:00
Bruno Windels
9b16119e7b
don't show time on continued messages
2020-08-21 14:37:57 +02:00
Bruno Windels
1a61752ace
process state events separately from timeline events
2020-08-21 14:35:23 +02:00
Bruno Windels
5837aed346
remove obsolete comment
2020-08-21 14:27:16 +02:00
Bruno Windels
d3ea8c747a
ignore own messages for unread state, and don't set unread while open
2020-08-21 14:26:51 +02:00
Bruno Windels
879c4ff951
default for all flags should be false
2020-08-21 14:11:53 +02:00
Bruno Windels
2742162c8e
only clear unread if needed
2020-08-21 14:11:42 +02:00
Bruno Windels
00e20d2088
take null timestamps into account
2020-08-21 14:11:26 +02:00
Bruno Windels
4969009b2b
default should be false, so comparison in the sorter is stable
2020-08-21 14:10:53 +02:00
Bruno Windels
5d1bc61f61
don't open a room when already open
2020-08-21 13:45:55 +02:00
Bruno Windels
4fb3010676
only set unread for incremental syncs
2020-08-21 13:45:38 +02:00
Bruno Windels
eae5bc4230
sort unread rooms first, then on last message timestamp, then alphabet.
2020-08-21 11:58:05 +02:00
Bruno Windels
dbf5e59d87
clear unread state 2s after opening the room
2020-08-21 11:57:49 +02:00
Bruno Windels
89392434ad
render unread rooms as bold
2020-08-21 11:57:38 +02:00
Bruno Windels
7458465ef6
expose props on Room
2020-08-21 11:56:45 +02:00
Bruno Windels
739d74bf9c
add method to clear unread state
2020-08-21 11:56:36 +02:00
Bruno Windels
4419b3366e
store isUnread and lastMessageTimestamp
2020-08-21 11:55:47 +02:00
Bruno Windels
53720f56df
some cleanup
2020-08-21 11:55:25 +02:00
Bruno Windels
f0d0dbb30f
fix member event reporting
2020-08-20 17:43:51 +02:00
Bruno Windels
4fefe94302
render avatar in room header
2020-08-20 17:33:08 +02:00
Bruno Windels
00718c582a
render avatar img in room list
2020-08-20 17:32:55 +02:00
Bruno Windels
cff39019cb
extract renderAvatar
...
and use avatarTitle instead of sender for img title
2020-08-20 17:32:18 +02:00
Bruno Windels
7992607442
also store notif counts while at it
2020-08-20 17:07:02 +02:00
Bruno Windels
da947fa0d0
store room avatar url in summary
2020-08-20 17:02:51 +02:00
Bruno Windels
f5acee02be
add comment why we do things in this order
2020-08-20 16:20:35 +02:00
Bruno Windels
59bdd2b015
render avatar on message tiles
2020-08-20 16:03:52 +02:00
Bruno Windels
225d46fad6
prepare styles to have other images (like avatar) in timeline
2020-08-20 16:03:26 +02:00
Bruno Windels
5d0ee21267
move mxcUrl functions to media repo class
2020-08-20 15:40:43 +02:00
Bruno Windels
843f4fa0f7
fix flood issue when back-filling isn't available
2020-08-20 15:28:22 +02:00
Bruno Windels
9e8d1ed290
better naming
2020-08-20 15:24:39 +02:00
Bruno Windels
036b305c96
use display name for room name change tiles
2020-08-20 15:24:16 +02:00
Bruno Windels
fafdf669db
use prev_content from later events before state
2020-08-20 15:23:56 +02:00
Bruno Windels
830c300102
fix typo that broke the txn
2020-08-20 15:23:29 +02:00
Bruno Windels
514d1d9579
first draft of adding profile info while filling gap
2020-08-20 14:39:03 +02:00
Bruno Windels
229502ca43
remove logging
2020-08-20 10:48:59 +02:00
Bruno Windels
4b275529f7
fixup: writing member info during sync
2020-08-20 10:47:14 +02:00
Bruno Windels
d31a1b5fff
render display name in timeline
2020-08-20 10:26:28 +02:00
Bruno Windels
41c00ce44a
write display name and avatar on event during sync
2020-08-20 10:26:08 +02:00
Bruno Windels
ba3a4ab8b2
process state events in the timeline together with other timeline events
...
so member info gets overwritten after all the previous events
have already been written
2020-08-20 09:39:19 +02:00
Bruno Windels
fe7cc08287
add _selectWhile with proper "while" semantics
...
the existing _selectWhile method was more like _selectUntil,
which is what we want for _selectLimit but not for selectWhile(Reverse)
The changes we had made before also broke _selectLimit as it would
look at the results length before the value got added so you
always got 1 value more than requested, breaking sync.
2020-08-19 18:25:49 +02:00
Bruno Windels
79363ed1d7
use optional chaining
2020-08-19 18:25:38 +02:00
Bruno Windels
a90cebcabb
document access levels
2020-08-19 16:58:28 +02:00
Bruno Windels
113c9e13b3
fix typo
2020-08-19 16:58:19 +02:00
Bruno Windels
faaabd1837
fix changed member scenario (no need to fetch from storage) and errors
2020-08-19 16:51:16 +02:00
Bruno Windels
4144b0b281
move memberlist load code out of Room
2020-08-19 16:44:09 +02:00
Bruno Windels
f7314990e4
add copyright header
2020-08-19 16:30:05 +02:00
Bruno Windels
463b9b745e
base impl of member list
2020-08-19 16:29:54 +02:00
Bruno Windels
f84c9d51b4
store last pagination token
2020-08-19 16:29:08 +02:00
Bruno Windels
d08297d1e0
move RoomMembers to own dir
2020-08-19 16:28:09 +02:00
Bruno Windels
cc1f35a074
fix c/p error
2020-08-19 16:14:10 +02:00
Bruno Windels
6abdcd6b58
finish draft of member list loading method
2020-08-19 16:13:47 +02:00
Bruno Windels
9edd1bb0bb
implement loading all members
2020-08-19 16:13:30 +02:00
Bruno Windels
bfc5eb3ee5
return changed members from sync writer
...
we will use it to handle race between /sync and /members
and to update the member list if it loaded
2020-08-19 16:12:49 +02:00
Bruno Windels
a5595570f9
members hs api call
2020-08-19 16:11:33 +02:00
Bruno Windels
2ad9b17ad7
no need to update members, as all the info is in the member event
...
as we won't store deviceTrackingStatus in the member
2020-08-19 16:10:07 +02:00
Bruno Windels
5ad7b74b2b
keep string key since we have to support IE11
2020-08-19 16:08:42 +02:00
Bruno Windels
9ff4f3839c
Merge branch 'master' into bwindels/memberlist
2020-08-19 12:13:38 +02:00
Bruno Windels
5898177f0b
continuation can change, so bind to it
2020-08-19 12:07:10 +02:00
Bruno Windels
2526198251
replace usage of readPath with ?.
2020-08-19 11:36:43 +02:00
Bruno Windels
82762823e3
use normal sized avatar for room header
2020-08-19 11:02:47 +02:00
Bruno Windels
b2a01ba860
timeline spacing and font-size tweaking
2020-08-19 11:02:27 +02:00
Bruno Windels
fcf7052217
forgot to add header here before
2020-08-19 10:28:39 +02:00
Bruno Windels
614a00b741
don't continue messages from more than 5min ago
2020-08-19 10:28:09 +02:00
Bruno Windels
fad728069a
don't show date & time on pending events
2020-08-19 10:27:27 +02:00
Bruno Windels
9d260c692b
tweak font-sizes to what element web has
2020-08-19 10:26:52 +02:00
Bruno Windels
cc4c9d7893
Improve IDB error reporting
...
Hope this can help with
https://github.com/vector-im/hydrogen-web/issues/50
2020-08-18 17:27:40 +02:00
Bruno Windels
7291cac834
yield for browser to render before checking content height
2020-08-17 17:58:39 +02:00
Bruno Windels
4044ac56c5
actually check the promise
2020-08-17 17:58:30 +02:00
Bruno Windels
df8d884d91
append all list items at once for initial render
2020-08-17 17:58:04 +02:00
Bruno Windels
1c779cf95c
render encrypted tiles as such so we don't fetch the whole history
2020-08-17 17:41:57 +02:00
Bruno Windels
0b1d9bf25e
unused now
2020-08-17 17:41:49 +02:00
Bruno Windels
37597e2acb
mark fragment in storage when start of timeline is reached
...
so we don't keep looping to fetch more messages
when scrolled all the way up
2020-08-17 17:41:10 +02:00
Bruno Windels
b6cbb03edd
keep filling gaps while viewport not filled or new content < 100px
2020-08-17 16:34:58 +02:00
Bruno Windels
08de7c3569
loading screen while loading timeline
...
so we can set timelineVM directly to TimelineList
2020-08-17 16:34:25 +02:00
Bruno Windels
5ae4a1aae3
increase offset to start back-filling
2020-08-17 15:22:55 +02:00
Bruno Windels
2cfd38379f
change looks of gap tile as it's auto-loaded now
2020-08-17 15:22:39 +02:00
Bruno Windels
56efd7eee0
don't load timeline past gaps
2020-08-17 15:22:25 +02:00
Bruno Windels
1e4f331989
fill top gap instead of loading more events from storage
2020-08-17 15:13:12 +02:00
Bruno Windels
cf0af775e3
make SimpleTile inherit from ViewModel
...
to use same update mechanism and have viewmodel infra available for tile
2020-08-17 15:11:39 +02:00
Bruno Windels
9745c58144
use readPath in ImageTile
2020-08-17 14:20:54 +02:00
Bruno Windels
0d3ab21044
Merge pull request #19 from vector-im/bwindels/small-bits
...
Various small bits
2020-08-17 12:15:28 +00:00
Bruno Windels
bbd5217fdf
Merge pull request #18 from vector-im/bwindels/ignore-empty-timelines
...
ignore rooms with empty timelines during initial sync
2020-08-17 12:14:46 +00:00
Bruno Windels
59588dc8b5
ignore rooms with empty timelines during initial sync
2020-08-17 14:13:23 +02:00
Bruno Windels
306309c4f8
wrap error and expose room id
...
this makes it easier to track down a (storage) error to a room
2020-08-17 10:48:00 +02:00
Bruno Windels
b5e7131050
only use 1 letter for avatar initial
2020-08-17 10:47:47 +02:00
Bruno Windels
404e6f8b87
make alphabetical sort order stable
2020-08-17 10:47:27 +02:00
Bruno Windels
70e6515b5c
dont crash on m.image without url
2020-08-17 10:29:29 +02:00
Bruno Windels
bab1178790
style login page
2020-08-14 14:49:22 +02:00
Bruno Windels
c12ecd6cc1
style session picker
2020-08-14 14:49:15 +02:00
Bruno Windels
19e5d310e0
move avatar one level lower because we'll need it in the session picker
2020-08-14 14:33:13 +02:00
Bruno Windels
61801ee2cd
add send button to composer
2020-08-13 18:10:45 +02:00
Bruno Windels
bf35cfc9fd
make spinner look slightly better in IE
2020-08-13 17:59:49 +02:00
Bruno Windels
84d4584302
switch view gallery to element theme
2020-08-13 17:59:36 +02:00
Bruno Windels
d386343d5c
adjust spacing, etc in timeline
2020-08-13 17:58:56 +02:00
Bruno Windels
44cc691c79
add avatar and sender user colors
2020-08-13 12:41:00 +02:00
Bruno Windels
d33e7b2a8b
basic element theme colors
2020-08-13 12:40:30 +02:00
Bruno Windels
68574715dc
style active room
2020-08-12 17:49:39 +02:00
Bruno Windels
5aacf85166
mark room tile as active when clicked
2020-08-12 17:40:41 +02:00
Bruno Windels
7f50e3d137
allow overriding the "emit change" mechanism in ViewModel
...
so view models that should send updates through their collection
can still use the same "emitChange" method on ViewModel
2020-08-12 17:39:11 +02:00
Bruno Windels
fbf72b8825
bind key for spontaneous updates in MappedMap
...
so we just have to pass in the params
2020-08-12 17:38:40 +02:00
Bruno Windels
cb10d40c3a
Revert "use intrinsic aspect-ratio supported by chrome and firefox (although not safari)"
...
This reverts commit 0e5ad9805a
.
It does not seem to work anymore in FF & chrome (the tile grows after the image is loaded)
and this won't work in IE11 anyways
2020-08-12 16:47:57 +02:00
Bruno Windels
d7657b519a
add element theme (only some color changes + Inter font for now)
2020-08-12 16:41:03 +02:00
Bruno Windels
c6f38a4614
missing rename
2020-08-12 16:40:47 +02:00
Bruno Windels
e1a5c362dc
add theme assets to offline definition
2020-08-12 16:40:28 +02:00
Bruno Windels
211abd9269
move emoji font collection to own font definition
2020-08-12 16:32:49 +02:00
Bruno Windels
695bcb2da3
move speech bubble alignment to theme
2020-08-12 16:31:58 +02:00
Bruno Windels
d7c1dc8a38
make fields disabled in loading state in gallery
2020-08-12 11:52:18 +02:00
Bruno Windels
be9e476874
extract theme from current styling
2020-08-12 11:52:03 +02:00
Bruno Windels
23d96b554a
make theme directory
...
+ readme of ~what should go in a theme
2020-08-12 11:51:21 +02:00
Bruno Windels
5546460510
more brawl -> hydrogen renaming
2020-08-12 11:42:42 +02:00
Bruno Windels
eb92b9a086
Disable rubberband scrolling for IE11
2020-08-07 18:15:17 +01:00
Bruno Windels
e054dfb623
Merge branch 'master' into bwindels/legacy-css
2020-08-07 17:03:45 +01:00
Bruno Windels
fdc7f60f4d
Build legacy bundle from same entry point as normal build
...
as the plan is to only use different CSS for IE11, but the same view code
2020-08-07 15:50:18 +01:00
Bruno Windels
a0c8d147c3
Use parentNode, parentElement is not supported on IE11
2020-08-07 15:07:44 +01:00
Bruno Windels
b1dd3933e2
WIP
2020-08-07 11:16:46 +01:00
Bruno Windels
a7acb0278d
Element.remove polyfill
2020-08-07 11:14:07 +01:00
Bruno Windels
73c0a92377
Add .closest polyfill
2020-08-06 10:38:38 +01:00
Bruno Windels
1699600ffc
fix test
2020-08-05 19:06:54 +02:00
Bruno Windels
3154b047a6
Merge branch 'bwindels/ie11' of github.com:vector-im/hydrogen-web into bwindels/ie11
2020-08-05 19:02:42 +02:00
Bruno Windels
d0ba894e2d
apply new license headers in new code
2020-08-05 18:59:16 +02:00
Bruno Windels
45bd49861b
Add build for IE 11
2020-08-05 18:56:06 +02:00
Bruno Windels
5ddc02ebc8
XHR request support for legacy browsers
2020-08-05 18:56:06 +02:00
Bruno Windels
e8e9740521
Move timeout to fetch, as XHR has native timeout support
2020-08-05 18:56:06 +02:00
Bruno Windels
5c50a48eb5
Add build for IE 11
2020-08-05 16:47:48 +00:00
Bruno Windels
00a85697ab
add license header in all source files
2020-08-05 18:38:55 +02:00
Bruno Windels
69142909d9
XHR request support for legacy browsers
2020-08-05 15:37:37 +00:00
Bruno Windels
b26bc69042
Move timeout to fetch, as XHR has native timeout support
2020-08-05 15:36:44 +00:00
Bruno Windels
f5d3092031
WIP
2020-06-26 23:26:24 +02:00
Bruno Windels
e2c8b5e595
pass vm field to emitChange
2020-06-24 22:43:29 +02:00
Bruno Windels
9712b397ce
add TODO comment
2020-05-26 10:31:23 +02:00
Bruno Windels
0e5ad9805a
use intrinsic aspect-ratio supported by chrome and firefox (although not safari)
2020-05-13 10:20:28 +02:00
Bruno Windels
1ec2543467
fix image aspect ratio when scaling, again
...
also when image hasn't loaded yet to prevent scroll position jumps
2020-05-10 11:56:05 +02:00
Bruno Windels
174b0b7d52
disable pull to refresh on android
2020-05-10 10:00:13 +02:00
Bruno Windels
d79e34e450
fix image height scaling when full width doesn't fit on screen
2020-05-10 09:59:51 +02:00
Bruno Windels
df08ac216d
prevent images from growing larger than container
2020-05-09 21:22:30 +02:00
Bruno Windels
d6882f075a
don't let long status messages create overflow
2020-05-09 21:22:09 +02:00
Bruno Windels
2b17d0f691
spell height correctly
2020-05-09 21:21:55 +02:00
Bruno Windels
7f221cda65
show images intimeline
2020-05-09 20:02:08 +02:00
Bruno Windels
426dd726e7
default to true
2020-05-08 09:31:41 +02:00
Bruno Windels
5aee3df7fe
fix SessionPickerItemView not updating
2020-05-08 09:12:33 +02:00
Bruno Windels
c55a197303
pass options to parent in LoginViewModel
2020-05-07 19:17:15 +02:00
Bruno Windels
f56b96b0ff
add some ideas for relations
2020-05-07 19:14:53 +02:00
Bruno Windels
f9c0b4b53e
add logging in case #45 would happen again
2020-05-07 19:14:30 +02:00
Bruno Windels
6b453c1ec4
we need to start when online actually, so invert
2020-05-07 18:46:45 +02:00
Bruno Windels
24cb9e3f5c
only increment sent counter after successful send
...
otherwise the message doesn't get sent after coming back online
2020-05-07 18:46:16 +02:00
Bruno Windels
b65da9b8a9
display sync errors in status bar
2020-05-07 00:05:21 +02:00
Bruno Windels
52e2d3203e
also make filter request interruptable
2020-05-07 00:04:41 +02:00
Bruno Windels
cc19063c79
set timeout on /sync request
...
as long running requests run higher risk of getting wedged
2020-05-06 23:50:12 +02:00
Bruno Windels
06fc3101e8
make login view enabled again if load view is not busy anymore
2020-05-06 23:44:52 +02:00
Bruno Windels
e17fc57d9c
fix c/p error in disposables
2020-05-06 23:31:36 +02:00
Bruno Windels
abc99c2f0b
fix svg error in spinner
2020-05-06 23:31:22 +02:00
Bruno Windels
2010704f14
fix only reconnecting the first time
2020-05-06 20:58:48 +02:00
Bruno Windels
f8f13f54be
fix timeouts not working
...
and also not being handled in the Reconnector
2020-05-06 19:38:33 +02:00
Bruno Windels
54502c906f
make disposeTracked suitable to reassign member
2020-05-05 23:19:02 +02:00
Bruno Windels
d0f09c5334
add status bar to view gallery for design
2020-05-05 23:18:44 +02:00
Bruno Windels
22821af346
css changes for status bar
2020-05-05 23:18:31 +02:00
Bruno Windels
0623c1c665
subViews is in TemplateView
2020-05-05 23:17:48 +02:00
Bruno Windels
c4b17e4be6
cleanup SessionViewModel, use ViewModel dispose infrastructure
2020-05-05 23:17:27 +02:00
Bruno Windels
3adc609e07
implement session status bar, with feedback on connection status
2020-05-05 23:16:51 +02:00
Bruno Windels
b0e59c30dd
correctly pass options to ViewModel ctor
2020-05-05 23:14:58 +02:00
Bruno Windels
0eefc88fe3
waitForRetry doesn't reject when aborted
2020-05-05 23:13:41 +02:00
Bruno Windels
8e9c76c26b
options is the 5th arg
2020-05-05 23:13:05 +02:00
Bruno Windels
4de29779c7
also abort timeout timer when response is rejected
2020-05-05 23:12:46 +02:00
Bruno Windels
4ffaa82435
add interval to clock
2020-05-05 23:12:14 +02:00
Bruno Windels
f90b435362
No need for Offline state if we're always in Waiting really
2020-05-04 23:42:34 +02:00
Bruno Windels
d70a57a7c9
remove support for observablevalues from templateview
...
it's not used, and so params haven't been standardized
trying to unify it, it messes up overriding update in RoomView
that extends it to set the timelineViewModel upon update.
2020-05-04 22:24:49 +02:00
Bruno Windels
d6645cbba9
null guard if list was never set
2020-05-04 22:24:10 +02:00
Bruno Windels
d7a8b1616a
use t.view for room sub views
...
also move composer to own vm
2020-05-04 22:23:43 +02:00
Bruno Windels
28bed56b5a
prevent closing more than once
2020-05-04 22:21:56 +02:00
Bruno Windels
1fa14a99e9
correctly wait for catchup sync
2020-05-04 19:38:23 +02:00
Bruno Windels
225fe873be
show session load view when picking a session
2020-05-04 19:38:03 +02:00
Bruno Windels
3dde23fc4b
dispose viewmodels from TemplateView
2020-05-04 19:24:27 +02:00
Bruno Windels
1ef564bdb0
cleanup
2020-05-04 19:24:20 +02:00
Bruno Windels
cc87e35f23
use ViewModel super class for all view models that need binding
2020-05-04 19:23:11 +02:00
Bruno Windels
d91ab5355c
support svg namespace, fix spinner
2020-05-03 01:08:53 +02:00
Bruno Windels
d69987b426
make view gallery of views in different states
2020-04-30 18:28:21 +02:00
Bruno Windels
d3f7fb5089
prototype how i18n would look like
2020-04-30 18:27:59 +02:00
Bruno Windels
ceec8937ef
apply template view api changes
2020-04-30 18:27:21 +02:00
Bruno Windels
cdf051f19b
api changes
2020-04-29 19:16:52 +02:00
Bruno Windels
2c8c1eb767
move el with the publics
2020-04-29 19:12:48 +02:00
Bruno Windels
6a9315e70a
do what we said in the comment
2020-04-29 19:12:12 +02:00
Bruno Windels
f4bb609ab6
notes
2020-04-29 10:10:33 +02:00
Bruno Windels
8bde627cdb
more WIP
2020-04-29 10:10:20 +02:00
Bruno Windels
37c602f7d2
rename Template to TemplateView, as it is a view now.
2020-04-29 10:04:40 +02:00
Bruno Windels
2008cf74f1
Template becomes a view
2020-04-29 10:01:08 +02:00
Bruno Windels
657ec9aa62
move loading view state to own view model, so we're more free how to show it, and we can better reuse it
2020-04-23 09:06:04 +02:00
Bruno Windels
acc511e69f
extract loading into a sub viewmodel
...
to show the loading in a separate view
2020-04-22 21:53:55 +02:00
Bruno Windels
b2954fd774
extract loadLabel logic to reuse in SessionPickerViewModel
2020-04-22 21:53:37 +02:00
Bruno Windels
0424ffe231
disable this for now as sync is not an EventEmitter anymore
2020-04-22 20:53:57 +02:00
Bruno Windels
e080bf28a7
expose root view model as global variable for console inspecting
2020-04-22 20:53:38 +02:00
Bruno Windels
e0799181d9
show error when mount() fails in SwitchView
2020-04-22 20:53:18 +02:00
Bruno Windels
449262e3c1
adjust ctor of SessionViewModel to accept sessionContainer now
2020-04-22 20:52:56 +02:00
Bruno Windels
e37101210c
adjust LoginView(Model) further to showing loading status in place
2020-04-22 20:52:28 +02:00
Bruno Windels
96aa4f83b9
remove loading section in BrawlView
2020-04-22 20:49:49 +02:00
Bruno Windels
a19e541e1e
less http specific
2020-04-22 20:49:21 +02:00
Bruno Windels
3359c6950f
typo (this made the loadStatus undefined :/)
2020-04-22 20:49:03 +02:00
Bruno Windels
08b1c02af7
remove start value, can be hardcoded for now
...
also fix params in wrong order this way
2020-04-22 20:48:49 +02:00
Bruno Windels
f826258c75
null doesn't set queryParams to {} here, so revert explicitly
2020-04-22 20:47:53 +02:00
Bruno Windels
174fd3ea4a
don't assume options
2020-04-22 20:47:46 +02:00
Bruno Windels
3f840d9d33
simple unit test for hsApi
2020-04-22 20:47:31 +02:00
Bruno Windels
277c8af628
Headers is a DOM specific class, use Map instead in HomeServerApi
2020-04-22 20:46:47 +02:00
Bruno Windels
c95981a35d
remove unused code
2020-04-20 23:10:33 +02:00
Bruno Windels
b32f5711bf
port BrawlViewModel to SessionContainer
2020-04-20 23:10:13 +02:00
Bruno Windels
f4983b5ba6
port SessionPickerViewModel to SessionContainer
2020-04-20 22:49:14 +02:00
Bruno Windels
a5965ad378
port LoginViewModel over to SessionContainer
2020-04-20 22:48:56 +02:00
Bruno Windels
bb7fca0592
support deleting the session from the container
2020-04-20 22:29:25 +02:00
Bruno Windels
de7dcf6a40
adjust main.js to use SessionContainer
2020-04-20 21:56:10 +02:00
Bruno Windels
a097929dbd
rename lowercase filenames of classes to camelcase like class
2020-04-20 21:41:10 +02:00
Bruno Windels
31f3886eba
move EventEmitter to utils
2020-04-20 21:35:53 +02:00
Bruno Windels
c379caf4c0
remove obsolete ifdef comments
2020-04-20 21:31:27 +02:00
Bruno Windels
0f29fdb24e
some notes
2020-04-20 21:27:07 +02:00
Bruno Windels
001dbefbcf
stop using default exports
...
because it becomes hard to remember where you used them and where not
2020-04-20 21:26:39 +02:00
Bruno Windels
0de5e899ea
remove dead code
2020-04-20 21:25:17 +02:00
Bruno Windels
164d9d594f
finish implemenation of SessionContainer
2020-04-20 19:48:21 +02:00
Bruno Windels
87b23d062c
fix imports after reshuffleling
2020-04-20 19:47:45 +02:00
Bruno Windels
72b0eefccb
replace isSyncing and emit with an Observable SyncStatus
2020-04-19 19:52:26 +02:00
Bruno Windels
80f7caadbe
rename SessionsStore to SessionInfoStorage
2020-04-19 19:13:38 +02:00
Bruno Windels
8c56ac3e4f
rename NetworkError to ConnectionError
2020-04-19 19:05:12 +02:00
Bruno Windels
8c5411cb7d
moar WIP
2020-04-19 19:02:10 +02:00
Bruno Windels
1f15ca6498
more WIP
2020-04-18 19:16:16 +02:00
Bruno Windels
378b75c98a
more WIP and breakage
2020-04-09 23:19:49 +02:00
Bruno Windels
ef267ca331
WIP2
2020-04-05 15:11:15 +02:00
Bruno Windels
c980f682c6
create DOMClock, abstraction of clock functionalities for DOM
2020-04-04 17:34:46 +02:00
Bruno Windels
bc69e49cfb
WIP2
2020-03-31 10:13:25 +02:00
Bruno Windels
b6a5a02a33
WIP
2020-03-30 23:56:03 +02:00
Bruno Windels
e4563135bf
look at prev_content when handling member events
2020-03-30 21:59:44 +02:00
Bruno Windels
c830f50325
catch errors while persisting a new message
2020-03-30 21:33:04 +02:00
Bruno Windels
234c260339
dont modify fragments in comparer until txn succeeds
2020-03-30 20:46:52 +02:00
Bruno Windels
73ea09f668
Handle sync ordering vs back-fill ordering (see synapse #7164 ) resulting in dupe events
...
Also extra robustness while filling a gap
ignore duplicate events from synapse instead considering them an
overlapping event with the adjacent fragment
2020-03-30 20:37:36 +02:00
Bruno Windels
dc65274b8b
Merge pull request #38 from bwindels/bwindels/remote-echo-for-gaps
...
Look for remote echos in gap responses as well as sync responses
2020-03-23 22:00:45 +00:00
Bruno Windels
8354c58c07
also look for remote echos based on event_id
2020-03-23 23:00:33 +01:00
Bruno Windels
eda4022692
show version before login and link to release
2020-03-23 22:46:31 +01:00
Bruno Windels
f02641c808
look for transaction_id in /messages response to delete pending events
2020-03-22 00:07:37 +01:00
Bruno Windels
6d68ec1bac
move fillGap to room
2020-03-21 23:40:40 +01:00
Bruno Windels
f729108226
pass emit update fn through setter so we control when tile can update
2020-03-21 14:28:09 +01:00
Bruno Windels
a3714f49cc
group public methods for a tile together
2020-03-21 14:26:56 +01:00
Bruno Windels
4176af56ea
add failing test for problem
2020-03-21 14:22:16 +01:00
Bruno Windels
44760a9f82
Revert "add logging related to fragments"
...
This reverts commit 2f355cabef
.
2020-03-21 10:47:35 +01:00
Bruno Windels
c4a5de20c0
update previous fragment in comparer when appending a new line fragment
2020-03-21 10:45:09 +01:00
Bruno Windels
2f355cabef
add logging related to fragments
...
both when rebuilding and when sorting will be used
2020-03-20 20:23:07 +01:00
Bruno Windels
7e8cc7ae00
need to return the response here, not the request wrapper
...
we were reading back a remote id of undefined because of this,
so when for some reason we never receive the message down from sync,
the pending message keeps sending on every load. The server ignores
the send though, because the transaction id is already used, and it returns
the remote id of the event that was already sent the previous time, but
as we were not storing this remote id, we'd just try again and again.
not receiving it through sync could have happened when we were sending a bunch of events
and then receiving (this is how we encountered this bug, while trying to repro another) the
response, but not yet the sync for the message that got wedged. Then we typed stuff on another client
so we would get a limited response for that room, and boom, we would not get the remote echo of the
event that was already sent (but because of this bug we didn't store the remote id) but no echo received yet (when we remove the pending event),
so it gets wedged!
2020-03-17 00:11:50 +01:00
Bruno Windels
b69efc3425
fix errors when replaying
2020-03-17 00:07:54 +01:00
Bruno Windels
06e43d9ee3
fix all tests
2020-03-14 21:38:37 +01:00
Bruno Windels
56c87b3966
better naming
2020-03-14 20:49:15 +01:00
Bruno Windels
ac4a7f971b
only apply sync changes in room summary once txn is committed
...
- also remove m.room.aliases support as they were wrongly implemented
and now obsolete
- don't count invited and joined members according to m.room.member
events anymore as it was also wrongly implemented
(only when prev!==new membership, but on initial sync we only get
last member event, which might have been a nick change
2020-03-14 20:46:49 +01:00
Bruno Windels
fc741272ba
only apply sync changes in session once txn is committed
2020-03-14 20:45:36 +01:00
Bruno Windels
224d56698a
only set new live key when creating a fragment after the txn succeeds
...
when doing a limited sync, and a new fragment is created,
this._lastLiveKey is updated immediately. If the transaction
would then fail, the fragmentId in this._lastLiveKey was incremented
but the fragment wasn't written to the store, so if sync is resumed
and would subsequently succeed, fragmentIds would be assigned to events
that don't have a corresponding fragment in the timelineFragment store.
This would throw errors when trying to load the timeline,
breaking the whole app.
This changes SyncWriter to only update this._lastLiveKey in
the emit phase, when the transactions has been committed already.
2020-01-04 20:06:49 +01:00
Bruno Windels
bdc2c3d9ad
cleanup: storage is not used in SyncWriter
...
as the transaction is now always passed as an argument, it never
creates one on its own.
2020-01-04 20:04:57 +01:00
Bruno Windels
29b531ae80
add (commented out) instructions how to use record/replay
2019-12-23 14:29:19 +01:00
Bruno Windels
1d9a5c490a
add record/replay network layer
2019-12-23 14:28:42 +01:00
Bruno Windels
aa86748cdd
pull fetch code out of homeserverapi
2019-12-23 14:28:27 +01:00
Bruno Windels
35c090dcb4
add proper import/export functionality
2019-12-14 18:29:35 +01:00
Bruno Windels
9c42710f9b
add github link to home screens
2019-11-22 09:46:19 +01:00
Bruno Windels
8a55778c32
make sure aliases and heroes aren't empty when picking name
2019-11-22 09:29:18 +01:00
Bruno Windels
325077bcb0
try more domexception fixes
2019-11-21 18:28:18 +01:00
Bruno Windels
5ecf0a6717
fix error path on transaction abort error
2019-11-21 18:23:48 +01:00
Bruno Windels
d073f2825b
show json in one line when clearing cache
...
also make naming consistent
2019-10-24 10:54:20 +02:00
Bruno Windels
d34a0c73b5
show json in list instead of alert so we can copy it
2019-10-13 08:29:23 +02:00
Bruno Windels
6f73d3983f
add export/import of session data
2019-10-13 08:16:08 +02:00
Bruno Windels
e2b9e9dfdc
add clear cache button for session
2019-10-13 07:48:49 +02:00
Bruno Windels
ad7a150aaa
use aliases and heroes to fall back room name to
2019-10-13 07:48:33 +02:00
Bruno Windels
b16f21867c
preserve value for storage errors on add and put
2019-10-12 22:19:16 +02:00
Bruno Windels
201b70ee4f
fix failing to sync new rooms
2019-10-12 22:18:36 +02:00
Bruno Windels
ac53b9099b
only log error in sync loop
2019-10-12 22:18:19 +02:00
Bruno Windels
3ba20dece1
fixup for delete button changes
2019-10-12 22:18:08 +02:00
Bruno Windels
2fa5fa7890
add delete button in session picker
2019-10-12 21:16:48 +02:00
Bruno Windels
d367037332
very basic support for lazy loading
2019-10-12 20:24:09 +02:00
Bruno Windels
076582edc3
css fixes
...
- don't pronounce avatar initials
- prevent room header growing wider than screen
- ensure messages wrap their text
2019-09-28 09:46:09 +02:00
Bruno Windels
e3719b2527
allow http (no sssl) homeservers
2019-09-28 09:44:39 +02:00
Bruno Windels
d8696bea1d
add offline availability with service worker and appcache
2019-09-15 14:32:12 +02:00
Bruno Windels
8616d79aad
make fetch errors more informative by including method and url
2019-09-15 14:31:50 +02:00
Bruno Windels
2b2b4232e9
moar send logging
2019-09-15 12:25:14 +02:00
Bruno Windels
6f527fd2e0
use openCursor where openKeyCursor is not supported
2019-09-15 12:24:46 +02:00
Bruno Windels
bbf6943455
use .get fallback where .getKey is not supported (Edge 15)
2019-09-15 12:24:27 +02:00
Bruno Windels
8e590fe53b
rename and use StorageError to deal with idb DOMerror
2019-09-15 12:23:54 +02:00
Bruno Windels
f7f9129b8b
show send errors in UI
2019-09-15 12:23:26 +02:00
Bruno Windels
5a90b4673b
fix CORS requests failing
2019-09-15 12:23:08 +02:00
Bruno Windels
ed67689fdf
some minimal styling for login and session picker
2019-09-08 10:40:05 +02:00
Bruno Windels
09b9eff7c1
fix remaining errors to make login work
2019-09-08 10:19:16 +02:00
Bruno Windels
a7194e0c7a
implement missing views
2019-09-08 10:18:59 +02:00
Bruno Windels
1082233de4
start of session picker view
2019-07-31 00:07:12 +02:00
Bruno Windels
c27172fc4e
adjust main to new view
2019-07-31 00:07:04 +02:00
Bruno Windels
49a577991b
login and session picker view models, sessions store
2019-07-31 00:06:53 +02:00
Bruno Windels
378eea8ceb
Merge pull request #5 from bwindels/bwindels/sending
...
Send text messages
2019-07-29 18:28:29 +00:00
Bruno Windels
5b4d984645
height of app should always fill screen (not more or less)
2019-07-29 20:11:15 +02:00
Bruno Windels
de35df10d8
fix test + bug in ConcatList update
2019-07-29 20:03:22 +02:00
Bruno Windels
b723ab4cef
add failing test for ConcatList update
2019-07-29 20:03:06 +02:00
Bruno Windels
3b7ab8f1c8
fix MappedList test after passing params as well to updater
2019-07-29 20:02:42 +02:00
Bruno Windels
45cd85ead1
fixup: check for event entry with eventType, event isn't exposed anymore
2019-07-29 19:58:35 +02:00
Bruno Windels
7218595c17
only send message if it's non-empty
2019-07-29 19:54:21 +02:00
Bruno Windels
8665bcb897
concat synced events in timeline with pending events for local echo
2019-07-29 19:53:58 +02:00
Bruno Windels
88a7d64091
fixup: delay not awaited, but not needed for now
2019-07-29 19:53:30 +02:00
Bruno Windels
e23abe209f
fixup: leftover from removing access to events
2019-07-29 19:53:07 +02:00
Bruno Windels
bfdff353b0
pass params in map operator update fn
2019-07-29 19:52:28 +02:00
Bruno Windels
7a6e91de84
concat operator for observable lists
2019-07-29 19:18:11 +02:00
Bruno Windels
6f650d19b1
map operator for observable lists
2019-07-29 19:17:55 +02:00
Bruno Windels
0b5c2f9273
better naming
2019-07-29 10:59:49 +02:00
Bruno Windels
b53b60e142
use correct handler and make test succeed
2019-07-29 10:59:07 +02:00
Bruno Windels
0cf7cb36c4
add failing test for unsubscribe using wrong handler
2019-07-29 10:58:27 +02:00
Bruno Windels
9b94c4bb61
don't expose raw event object from entry, pending event doesn't have it
...
it only has content and *some* of the meta fields,
but we want to threat pendingevententry and evententry as one
and the same in the rest of the application, so don't give access
to entire event object.
2019-07-29 10:27:12 +02:00
Bruno Windels
56cee450d1
return syncing user id from PendingEventEntry.sender
...
add User class where we later can track display name, avatar, ...
2019-07-29 10:24:34 +02:00
Bruno Windels
b26f7df689
pending events are not certain to be sorted here
2019-07-29 09:54:34 +02:00
Bruno Windels
3ed72df620
put everything together to make it roughly work
...
no local echo yet, and send errors are being swallowed
2019-07-27 10:51:51 +02:00
Bruno Windels
851100b88a
send unsent messages after first sync
2019-07-26 22:40:39 +02:00
Bruno Windels
707988f806
better handle remote echos and hookup in session and room
2019-07-26 22:33:33 +02:00
Bruno Windels
ccb722d766
more WIP
2019-07-26 22:03:57 +02:00
Bruno Windels
f3d1128f28
WIP
2019-07-01 10:00:29 +02:00
Bruno Windels
c5b2d0c8b2
WIP
2019-06-28 00:52:54 +02:00
Bruno Windels
e09d2963df
fix timeline scrolling
2019-06-28 00:44:49 +02:00
Bruno Windels
fc873fbfa5
more css fixes, and make back button work for compact layout
2019-06-26 23:14:39 +02:00
Bruno Windels
38a8132397
fix narrow layout
2019-06-26 22:43:59 +02:00
Bruno Windels
cd9f25ea80
convert tabs to spaces where needed
2019-06-26 22:31:36 +02:00
Bruno Windels
90a38078e0
unused import
2019-06-26 22:19:40 +02:00
Bruno Windels
59a303daa0
make user config available from phone on local wlan
2019-06-26 22:19:40 +02:00
Bruno Windels
72c193cce5
page to debug app on mobile phones without remote access to tools
2019-06-26 22:19:40 +02:00
Bruno Windels
b882e0ef8a
respect argument count of idb calls
...
lumia doesn't like undefined arguments if they
are being left out, so call the idb calls with
the exact amount of arguments
2019-06-26 22:02:00 +02:00
Bruno Windels
bbb5e35bcb
wrap everything that can throw a idb DOMException in StorageError
...
as lumia gives very cryptic errors without a stacktrace.
2019-06-26 22:00:50 +02:00
Bruno Windels
0fd52be710
encode idb array keys as sortable strings
...
that's why numeric parts of the keys have to be encoded
as a fixed length, "big-endian" ordered strings, so
string sorting will also sort the numeric keys correctly.
this also assumes room ids don't contain the "|" character,
we should probably escape the separator at some point.
2019-06-26 21:55:33 +02:00
Bruno Windels
106146660c
define storage keys to be 32bit for idb / web platform
...
as a preparation to serialize the eventIndex and fragmentId
as a 8 character string, part of a concatenated string PK,
as lumia doesn't support array keys.
2019-06-26 21:52:41 +02:00
Bruno Windels
ca4361248f
fallback for platforms missing AbortController
2019-06-26 19:49:49 +02:00
Bruno Windels
9cd5257959
load more events when scrolled to top
2019-06-16 17:29:33 +02:00
Bruno Windels
c12300bfa5
make loadList not private when we're going to override it
2019-06-16 17:28:51 +02:00
Bruno Windels
d34a26f0da
store new gap entry on update so we can paginate again
2019-06-16 16:47:56 +02:00
Bruno Windels
2131329442
scroll to bottom when loading timeline
2019-06-16 16:39:20 +02:00
Bruno Windels
a1c23f715a
always show date for now (but omit year to make it less annoying)
2019-06-16 16:19:26 +02:00
Bruno Windels
d7bc92c391
center placeholder text in both directions
2019-06-16 16:19:00 +02:00
Bruno Windels
b47898e025
show full stack on sync error
2019-06-16 15:49:00 +02:00
Bruno Windels
a09c3e7bed
hide sender name if previous message was by same sender
2019-06-16 15:48:54 +02:00
Bruno Windels
4a657b279d
apply css from prototype, other small changes, keep scroll at bottom
2019-06-16 15:21:20 +02:00
Bruno Windels
d72a7102b2
only bind className when the obj has at least 1 fn, also support it html
2019-06-16 15:12:54 +02:00
Bruno Windels
590ed56d68
leftover things that got moved during directory org
2019-06-16 10:54:37 +02:00
Bruno Windels
1917a528c7
replace ad hoc buttons and label with SyncStatusBar
2019-06-16 10:54:16 +02:00
Bruno Windels
a4bc2dd2b0
support isOwn on messages
2019-06-16 10:53:23 +02:00
Bruno Windels
a5a333b71a
organize view code in directory like viewmodels
2019-06-16 10:53:01 +02:00
Bruno Windels
95e1d55b97
extract argument detection for el and use it in both html and Template
2019-06-15 17:50:54 +02:00
Bruno Windels
03df472c53
show placeholder in middle panel when no room is selected
2019-06-15 17:50:15 +02:00
Bruno Windels
16fed27a8a
SwitchView, to alternate between different views
2019-06-15 17:49:45 +02:00
Bruno Windels
db376d3ac6
rename morpheus to brawl
2019-06-14 23:58:39 +02:00
Bruno Windels
ad92356b40
css class same name as prop
2019-06-14 23:46:47 +02:00
Bruno Windels
bec7720c42
cleanup template code
2019-06-14 23:46:31 +02:00
Bruno Windels
468af4755b
cleanup html utils
2019-06-14 23:46:18 +02:00
Bruno Windels
5feca5e0f4
gap has its own view now
2019-06-14 23:44:31 +02:00
Bruno Windels
0a6c50b3bb
support bindings for className object
2019-06-14 23:08:41 +02:00
Bruno Windels
f9038e2af9
dedicated template view for gaps
2019-06-14 22:55:07 +02:00
Bruno Windels
69be5012e8
templateview exposes viewModel prop
2019-06-14 22:54:51 +02:00
Bruno Windels
eba92399e3
update TemplateView with changes
2019-06-14 22:45:13 +02:00
Bruno Windels
0503b48c98
support conditional subtemplate & optimizations
2019-06-14 22:43:31 +02:00
Bruno Windels
773b4ed941
remove support for refs
...
not really needed, as render functions work with DOM nodes
that can be easily stored as a side-effect of the render fn
2019-06-14 22:41:50 +02:00
Bruno Windels
553bda2837
support bool values for attribute
2019-06-14 22:40:18 +02:00
Bruno Windels
eb2eb291d3
more work on databinding and templating
2019-06-13 00:41:45 +02:00
Bruno Windels
c7163a0554
wip of template/databinding
2019-06-12 22:01:50 +02:00
Bruno Windels
64f126ba68
support updates originating from tile, and removing tile on update
2019-06-12 21:57:13 +02:00
Bruno Windels
0524f06722
remove logging
2019-06-03 00:31:21 +02:00
Bruno Windels
6bdf44d114
adjust comment
2019-06-03 00:30:37 +02:00
Bruno Windels
45528580ed
fix comparator/comparer mismatch
2019-06-03 00:30:16 +02:00
Bruno Windels
3dbf5e727d
process in incoming order (reverse-chronological order if backward)
...
makes code simpler, don't need fix to undo reverse ordering of
nonOverlappingEvents. reverse looking is very likely premature
optimization as well.
2019-06-03 00:18:52 +02:00
Bruno Windels
0407829b26
fix filling gaps with overlapping events
...
although event order remains wrong, as events are reversed.
step before removing premature optimization, so it's in the git
commit log
2019-06-03 00:11:29 +02:00
Bruno Windels
c9aaa18151
return only eventId from findFirstOrLastOccurringEventId
2019-06-03 00:11:12 +02:00
Bruno Windels
7852f31f7e
clear token on pagination when events start overlapping
2019-06-02 19:28:24 +02:00
Bruno Windels
0b637f656a
timeline store requests should always be scoped to 1 fragmentId
...
as fragmentIds should not be sorted, they are a linked list
and that is what determines their order.
2019-06-02 19:27:40 +02:00
Bruno Windels
bb5f139355
fix fragmentId:0 being evaluated as falsy
2019-06-02 19:27:23 +02:00
Bruno Windels
4b5b90e199
fix another direction mismatch
2019-06-02 19:26:45 +02:00
Bruno Windels
c63d94947f
fix persisting a gappy sync
2019-06-02 18:28:38 +02:00
Bruno Windels
ef5d2cfa08
chunk is in reverse-chronological order for backward pagination
2019-06-02 18:15:40 +02:00
Bruno Windels
e3b4f898d0
show eventkey in ui for debugging purposes
2019-06-02 18:15:24 +02:00
Bruno Windels
a59014475b
also swap logic of setter
2019-06-02 18:15:08 +02:00
Bruno Windels
a269f612b6
space
2019-06-02 15:46:44 +02:00
Bruno Windels
bdad0ad86b
fix some gap fill errors
2019-06-02 15:46:24 +02:00
Bruno Windels
d022608a1a
it's entry.entryIndex, not eventIndex, but use helper method instead.
2019-06-02 15:24:27 +02:00
Bruno Windels
674007d892
don't fail when insert first or appending a tile
2019-06-02 15:15:14 +02:00
Bruno Windels
1ed3babfec
fragment boundary is a gap if backwards(started) & previousToken
2019-06-02 15:01:14 +02:00
Bruno Windels
e339cb7321
more fixes, timeline is showing again
2019-06-02 14:59:30 +02:00
Bruno Windels
a1e527ccbc
first round of fixes after running the app again in the browser!
2019-06-02 00:49:47 +02:00
Bruno Windels
210a00d541
first attempt at making UI work again, with tiles and gaps
2019-06-02 00:03:55 +02:00
Bruno Windels
3de86cdf33
obsolete comment
2019-06-01 18:32:32 +02:00
Bruno Windels
b10aa269d2
very quick emote support
2019-06-01 18:32:17 +02:00
Bruno Windels
1b228b0200
export timelineviewmodel from roomviewmodel
2019-06-01 18:29:23 +02:00
Bruno Windels
039bbe038c
adjust tiles(collection) to entry changes
2019-06-01 18:29:02 +02:00
Bruno Windels
35d90a8535
ctor takes a bool, not Direction. But use helper fn instead.
2019-06-01 18:20:29 +02:00
Bruno Windels
2a128ed32c
use SortedArray in Timeline, adjust loadAtTop to use TimelineReader
2019-06-01 17:39:23 +02:00
Bruno Windels
843c94b750
finished observable SortedArray to something useable
...
although not as performant as it could be
2019-06-01 17:38:23 +02:00
Bruno Windels
f8fbfbff9a
implement reading n events from end of live fragment
2019-06-01 17:04:05 +02:00
Bruno Windels
3137f025c7
remove draft commented code
2019-06-01 16:44:58 +02:00
Bruno Windels
447b0aa03c
allow adding fragments to comparer, instead of reloading from db.
...
This is a suboptimal implementation now,
but is the API we want to end up with. Readers and Writers
in persistence add fragments to the comparer when they become
aware of, create, or link up fragments.
2019-06-01 16:42:57 +02:00
Bruno Windels
fa4efe0132
rename Gap/SyncPersistence to Writer, in line with TimelineReader
2019-06-01 15:40:21 +02:00
Bruno Windels
784588440c
WIP for fragment support
2019-05-19 20:49:46 +02:00
Bruno Windels
3324fd3afd
split up persistFragmentFill method into smaller ones
2019-05-12 20:44:20 +02:00
Bruno Windels
10457611f9
whitespace
2019-05-12 20:26:46 +02:00
Bruno Windels
e3328f0fef
add fragments store name
2019-05-12 20:26:32 +02:00
Bruno Windels
da5e8794ab
lint
2019-05-12 20:26:20 +02:00
Bruno Windels
75100c1c60
adjust Timeline to changes, gap persister
2019-05-12 20:26:03 +02:00
Bruno Windels
a6b17cf25a
first draft of persistFragmentFill
2019-05-12 20:25:41 +02:00
Bruno Windels
89bc0e1696
split up RoomPersister to SyncPersister
...
also rename stores to timelineEvents and timelineFragments
2019-05-12 20:24:06 +02:00
Bruno Windels
bf835ac01d
create Entry classes and return fragment boundaries as entries as well
...
they can then be used for gap tiles.
2019-05-11 18:19:53 +02:00
Bruno Windels
2b510b24d9
adjust persister to fragments (untested)
2019-05-11 15:41:46 +02:00
Bruno Windels
152397a292
first impl of idb fragment store
2019-05-11 15:41:09 +02:00
Bruno Windels
41f2224454
get live fragment in persister
2019-05-11 13:21:58 +02:00
Bruno Windels
783f39c378
add fragmentId to methods that need it in timeline store
2019-05-11 13:21:21 +02:00
Bruno Windels
53cdabb459
store method to find events to connect with when filling gaps
...
as fragments can be unaware of their chronological relationship,
we need to check whether the events received from /messages or /context
already exists, so we can later hook up the fragments.
2019-05-11 13:10:31 +02:00
Bruno Windels
d6ae313bbd
make compare rely less on fragment index
...
also indenting
2019-05-11 09:51:27 +02:00
Bruno Windels
99c8816bf9
better naming
...
FragmentIndex -> FragmentIdIndex (index of fragment ids,
not an index number in a fragment collection)
EventKey -> EventIndex (implies being ordered)
FragmentKey -> FragmentId
(implies not being ordered, hence FragmentIdIndex)
2019-05-01 15:36:32 +02:00
Bruno Windels
d90411a6dd
adjust SortKey to have fragmentKey instead of gapKey
...
with FragmentIndex to compare fragment keys
2019-05-01 14:47:39 +02:00
Bruno Windels
06d2d2e198
draft of idb store for fragments
2019-04-18 20:19:43 +02:00
Bruno Windels
749bdadf74
disable failing tests for now and include fragment index so it's tests are found
2019-04-18 20:19:09 +02:00
Bruno Windels
6ba37e90a3
work on memory store
2019-04-04 09:27:31 +02:00
Bruno Windels
3f2f656db7
work on gap filling + tests (doesn't work yet)
2019-03-29 23:01:27 +01:00
Bruno Windels
aaff9eea6c
update store api with requirements for gap filling
2019-03-29 23:01:22 +01:00
Bruno Windels
7d91b2dde3
first go at a timeline memory store
...
first to use in unit tests for persister
later also to use in production when idb is not available
2019-03-29 23:00:22 +01:00
Bruno Windels
b1e382d7c9
thinko with direction
2019-03-21 21:36:02 +01:00
Bruno Windels
8f7e5a799c
work on filling gaps + test (draft only)
2019-03-21 21:35:33 +01:00
Bruno Windels
61804073e2
comment how updates should work
2019-03-15 20:29:17 +01:00
Bruno Windels
2cd9c2344e
expose timeline loading error in viewmodel
2019-03-09 00:43:43 +01:00
Bruno Windels
8e8e22fe16
work on filling gaps
2019-03-09 00:41:06 +01:00
Bruno Windels
c8749a1a06
rought impl of tiles collection
2019-03-09 00:40:17 +01:00
Bruno Windels
153d54a285
work on tile view models
2019-03-09 00:40:03 +01:00
Bruno Windels
1f5d488105
draft of timeline tiles support
2019-03-08 20:04:56 +01:00
Bruno Windels
6940e14b18
move sortedIndex out of observable as other code will want to use it too
2019-03-08 20:04:28 +01:00
Bruno Windels
95bef00054
some comments
2019-03-08 20:03:47 +01:00
Bruno Windels
ec925d7c49
draft of how to implement filling a timeline gap
2019-03-08 20:03:18 +01:00