Bruno Windels
a817a9aaf9
return decrypted type and content
2020-09-04 16:41:03 +02:00
Bruno Windels
8e5d5db32b
add event prop on entry
2020-09-04 16:40:15 +02:00
Bruno Windels
dc0576f2db
cleanup
2020-09-04 15:31:45 +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
502ba5deea
first draft of decryption in Room and RoomEncryption
2020-09-04 12:09:19 +02:00
Bruno Windels
2e67b2b6b8
handle prev_content location ambiguity
2020-08-31 14:21:18 +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
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
5d21ae3fb7
fix error on conduit with state field that is missing when empty
2020-08-21 19:10:28 +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
f5acee02be
add comment why we do things in this order
2020-08-20 16:20:35 +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
d08297d1e0
move RoomMembers to own dir
2020-08-19 16:28:09 +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
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
9ff4f3839c
Merge branch 'master' into bwindels/memberlist
2020-08-19 12:13:38 +02:00
Bruno Windels
2526198251
replace usage of readPath with ?.
2020-08-19 11:36:43 +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
56efd7eee0
don't load timeline past gaps
2020-08-17 15:22:25 +02:00
Bruno Windels
00a85697ab
add license header in all source files
2020-08-05 18:38:55 +02:00
Bruno Windels
f5d3092031
WIP
2020-06-26 23:26:24 +02:00
Bruno Windels
f56b96b0ff
add some ideas for relations
2020-05-07 19:14:53 +02:00
Bruno Windels
28bed56b5a
prevent closing more than once
2020-05-04 22:21:56 +02:00
Bruno Windels
c379caf4c0
remove obsolete ifdef comments
2020-04-20 21:31:27 +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
e4563135bf
look at prev_content when handling member events
2020-03-30 21:59:44 +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
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
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
56c87b3966
better naming
2020-03-14 20:49:15 +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
201b70ee4f
fix failing to sync new rooms
2019-10-12 22:18:36 +02:00
Bruno Windels
d367037332
very basic support for lazy loading
2019-10-12 20:24:09 +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
8665bcb897
concat synced events in timeline with pending events for local echo
2019-07-29 19:53:58 +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
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
ccb722d766
more WIP
2019-07-26 22:03:57 +02:00
Bruno Windels
90a38078e0
unused import
2019-06-26 22:19:40 +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
9cd5257959
load more events when scrolled to top
2019-06-16 17:29:33 +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
7852f31f7e
clear token on pagination when events start overlapping
2019-06-02 19:28:24 +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
a59014475b
also swap logic of setter
2019-06-02 18:15:08 +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
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
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
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
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
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
749bdadf74
disable failing tests for now and include fragment index so it's tests are found
2019-04-18 20:19:09 +02:00