Commit graph

452 commits

Author SHA1 Message Date
Bruno Windels 96f060c0a9 also retry decryption for backfilled entries
as their event ids won't be stored along the missing key (we only store
synced items so we don't fill up the missing event ids in the store
with undecryptable backfilled event ids)
2021-03-15 14:33:14 +01:00
Bruno Windels 4b62e0a2ce extract retry event ids for key before overwriting key on key backup 2021-03-15 13:38:27 +01:00
Bruno Windels cfb521ef10 fix ll events being duplicated in the timeline preventing name changes 2021-03-05 20:10:57 +01:00
Bruno Windels b37a586094 add clarification why this doesn't need to also check member changes 2021-03-05 17:04:18 +01:00
Bruno Windels f4a7782298 add MemberWriter, and only return MemberChange's if something changed 2021-03-05 17:03:45 +01:00
Bruno Windels 49fc971d67 cleanup 2021-03-05 17:02:57 +01:00
Bruno Windels f98f690b49 no need to "serialize" here every time, it just adds noise 2021-03-05 17:02:26 +01:00
Bruno Windels c1c8f11bf7 fix TypeError when syncing a new e2ee room with keys at the same time 2021-03-05 11:50:54 +01:00
Bruno Windels e0d14207ac make opening a txn async again
as we'll need to await a bogus request first thing after opening the txn

funny enough, we originally made it sync to accommodate the same bug
in safari, but that didn't prevent any microtask being awaited
before scheduling a request in the calling code closing the txn.

We'll await a bogus request within the transaction class now so it
doesn't depend on the calling code
2021-03-04 19:47:02 +01:00
Bruno Windels aa23672694 forgot await, this broke updating the timeline when fetching key backup 2021-03-03 17:50:38 +01:00
Bruno Windels b012b1dc99 Show correct profile for pending messages 2021-03-03 14:53:22 +01:00
Bruno Windels 6771303086 make a method to determine only the retry entries rather 2021-03-03 14:03:50 +01:00
Bruno Windels 404dbcd065 english 2021-03-03 14:03:50 +01:00
Bruno Windels e7598b9c76 only request key backup for events that are UTD 2021-03-03 14:03:50 +01:00
Bruno Windels 30481a5a9e add logging to key sharing and discarding in reaction to member changes 2021-03-03 14:03:50 +01:00
Bruno Windels f3c49e51f2 add, don't replace timeline retry entries
also, filter out any that have been decrypted already
2021-03-03 14:03:50 +01:00
Bruno Windels 43547e0901 don't add retried entries to the timeline if they are not already there 2021-03-03 14:03:50 +01:00
Bruno Windels 7f1cdf6841 also decrypt all matching timeline entries when new key 2021-03-03 14:03:50 +01:00
Bruno Windels 3671574547 comment about session backup 2021-03-03 14:03:50 +01:00
Bruno Windels 3bfe52b1dc filter encrypted events before deciding to decrypt or not 2021-03-03 14:03:50 +01:00
Bruno Windels 9702c4fd64 more logging in sync write 2021-03-03 14:03:50 +01:00
Bruno Windels 8d7cb2a39a remove unused imports 2021-03-03 14:03:50 +01:00
Bruno Windels e85844f482 don't redeclare retryEntries, or they won't get passed to writeSync 2021-03-03 14:03:50 +01:00
Bruno Windels 56db210763 attempt at fixing https://github.com/vector-im/hydrogen-web/issues/245 2021-03-03 14:03:50 +01:00
Bruno Windels c6db23bcfb WIP to store missing session event ids 2021-03-03 14:03:50 +01:00
Bruno Windels 3fa2d22015 remove isTimelineOpen flag and rather do the check to verify in Room
flags are ugly, let's avoid them where we can
2021-03-03 14:03:50 +01:00
Bruno Windels 265a9bd993 applyToEntries does not return anything 2021-03-02 19:39:04 +01:00
Bruno Windels 8d080163b3 reattempt decryption for timeline items 2021-03-02 19:39:04 +01:00
Bruno Windels 061e7abd50 don't break on empty room sync response 2021-03-02 19:39:04 +01:00
Bruno Windels fb446167f6 make new sync room keys available during decryption of same sync 2021-03-02 19:39:04 +01:00
Bruno Windels 8208464653 only log and clear when actually needed 2021-03-02 19:37:11 +01:00
Bruno Windels e1821b1753 prevent linking fragment to itself when filling a gap
this seems to happen when at the beginning of the timeline and
make the timeline reader go into an infinite loop
2021-03-02 19:31:00 +01:00
Bruno Windels 6f6346d5c3 detect when hitting beginning of timeline when loading timeline 2021-03-02 19:29:55 +01:00
Bruno Windels 1e209b8613 Prevent pending events being skipped when remote echo comes
This fixes #241
2021-02-24 14:14:04 +01:00
Bruno Windels b63ad629a7 can remove console logging here now 2021-02-24 11:25:26 +01:00
Bruno Windels 48c361531d log clearing unread state of a room 2021-02-24 11:22:19 +01:00
Bruno Windels 376e59820c more info when logging gap fills 2021-02-24 11:22:07 +01:00
Bruno Windels 1093895133 log opening timeline
also load the timeline when opening it in the room, so logging
starts in the room (and we don't need to pass the logger to Timeline)
and also API-wise it makes more sense to
not return uninitialized objects
2021-02-24 11:21:04 +01:00
Bruno Windels 41ecf1db8e missing semicolon 2021-02-24 10:38:19 +01:00
Bruno Windels 0cbf6008a2 log event id when sending and when receiving remote echo on sync 2021-02-23 19:58:01 +01:00
Bruno Windels dd38fc13d7 log sending messages 2021-02-23 19:22:59 +01:00
Bruno Windels 57bb75e864 log login & loading a session 2021-02-23 19:22:25 +01:00
Bruno Windels c6c96a611a fix iteration bug when disposing pending events at shutdown
discovered by logging
2021-02-23 19:04:25 +01:00
Bruno Windels f4a3b64da0 log in sync writer (at detail level) and log room ids at info level 2021-02-19 11:57:17 +01:00
Bruno Windels e590b573fb log remaining specific room entries as detailed 2021-02-18 12:44:19 +01:00
Bruno Windels f321968ac3 add more sync logging 2021-02-18 12:44:19 +01:00
Bruno Windels 704708bd6c add some logging to sync 2021-02-12 18:56:26 +01:00
Bruno Windels 764cddcdec can be cached 2020-11-20 11:45:38 +01:00
Bruno Windels 8b8d06cf3e show error for attachments still need upload but missing after refresh 2020-11-19 14:42:29 +01:00
Bruno Windels 0581066350 upload smallest attachments first
so you don't get a delay at the end of the upload
when starting a new request
2020-11-18 20:09:27 +01:00
Bruno Windels a23075a326 make safe to call when no attachments present 2020-11-18 20:09:07 +01:00
Bruno Windels fba5877b3b dispose attachment blobs when pending event is removed/closing session 2020-11-18 20:08:42 +01:00
Bruno Windels fd81111bfb merge state machine from AttachmentUpload into PendingEvent
to have less state machines, and we are mostly interested in the
aggregate status of all attachments of an event

this will also drive updates through the pending events collection
that already exists rather than an extra observablevalue, so less
housekeeping to update the UI.
2020-11-18 13:04:23 +01:00
Bruno Windels 83cbe78cd6 report attachment upload progress 2020-11-16 10:45:46 +01:00
Bruno Windels 1dd46b875b this is fine actually, as it will get encrypted.
just don't pass it to the upload
2020-11-13 19:22:06 +01:00
Bruno Windels 0292725076 better formatting 2020-11-13 19:10:18 +01:00
Bruno Windels 262cc8936e don't leak mimetype for encrypted attachments 2020-11-13 19:10:04 +01:00
Bruno Windels d2a4242e5b support multiple attachments per event 2020-11-13 17:19:19 +01:00
Bruno Windels 8b16d8bc99 handle upload failures better 2020-11-11 13:06:03 +01:00
Bruno Windels af4f3f902f wait for attachment to be uploaded in send queue
also expose attachment from PendingEvent(Entry)
2020-11-11 11:51:39 +01:00
Bruno Windels 48cd4ac95d track upload error 2020-11-11 11:51:11 +01:00
Bruno Windels 7088b2cdc8 support attachment upload and sending from room api 2020-11-11 10:47:55 +01:00
Bruno Windels 0c70a67ebb pass platform to room
as we'll need it to access crypto and creating blobs
2020-11-11 10:47:19 +01:00
Bruno Windels 32b7b1f064 draft of AttachmentUpload class 2020-11-11 10:46:20 +01:00
Bruno Windels 44a2febce9 hook it up 2020-11-06 23:43:02 +01:00
Bruno Windels 137264edcb implement subscribing to a single event 2020-10-30 15:19:51 +01:00
Bruno Windels 46fd769dda (re)move old (compile-time) platform code 2020-10-26 10:34:35 +01:00
Bruno Windels c8dd7b42e7 encountered this very unlikely race while testing, so prevent it 2020-10-13 13:10:35 +02:00
Bruno Windels 07eee8fac1 only create fragments when we will really write events to the timeline store 2020-10-01 17:01:33 +02:00
Bruno Windels 1117c77d05 note for future optimisation 2020-10-01 14:36:00 +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 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 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 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 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 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 ed913ca24b add dispose to room encryption 2020-09-18 13:08:18 +02:00
Bruno Windels 06ccd74680 this should be read-write, oops 2020-09-17 17:59:35 +02:00
Bruno Windels 9d622434fb integrate session backup with session class 2020-09-17 15:58:46 +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 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 8c4d68def9 show decryption errors in timeline 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 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 9f6822f362 remove needsRoomKey flag on member 2020-09-11 14:38:36 +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 78fecd003a cleanup 2020-09-10 18:57:29 +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 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 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 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 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 4cf3b3569d storage method takes EventKey actually 2020-09-08 10:51:28 +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 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 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 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 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 c5efa582b1 check algorithm 2020-09-03 17:51:00 +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 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 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 2e67b2b6b8 handle prev_content location ambiguity 2020-08-31 14:21:18 +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 6a9cbf7f33 store and sort by m.lowpriority tag 2020-08-27 20:52:51 +02:00
Bruno Windels 25f3dfbb75 fix failing test 2020-08-27 14:22:59 +02:00
Bruno Windels 3e8e1bab67 remove logging 2020-08-27 10:38:22 +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 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 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 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 1a61752ace process state events separately from timeline events 2020-08-21 14:35:23 +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 4969009b2b default should be false, so comparison in the sorter is stable 2020-08-21 14:10:53 +02:00
Bruno Windels 4fb3010676 only set unread for incremental syncs 2020-08-21 13:45: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 00718c582a render avatar img in room list 2020-08-20 17:32:55 +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 5d0ee21267 move mxcUrl functions to media repo class 2020-08-20 15:40:43 +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 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 6abdcd6b58 finish draft of member list loading method 2020-08-19 16:13:47 +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