Commit graph

441 commits

Author SHA1 Message Date
Denis Kasak
390a1aa12c Clarify member_display_name docstring. 2020-07-10 15:11:03 +02:00
Denis Kasak
b16724841d Correct state tracking of room members.
- use `state_key` instead of `user_id` to determine which member is
  affected by the event
- assign state directly from the event in `add_member` instead of using
  `membership_change`
- expand/fix docstrings
- add some logging
2020-07-10 15:11:03 +02:00
Denis Kasak
ec81a5e539 Implement Room::member_is_tracked. 2020-07-10 15:11:03 +02:00
Denis Kasak
949305da72 Clarify comment. 2020-07-10 15:11:03 +02:00
Denis Kasak
559306a33c Rewrite disambiguation algorithm to handle profile changes.
The new algorithm is simpler. Instead of tracking a list of
disambiguated display names in `Room`, we instead track the display name
ambiguity status in `RoomMember`. This allows a client to generate the
correct name for a member using solely the information available in
`RoomMember`.

The disambiguation algorithm itself now only calculates the set of members
whose ambiguity status had changed instead of producing disambiguated
display names for everyone affected. This is called on each room entry
(join or invite), room entry and profile change, and the updates are
propagated to the affected `RoomMember`s.
2020-07-10 15:11:01 +02:00
Denis Kasak
24d2aa8078 Style (cargo fmt, reordering import). 2020-07-10 15:07:21 +02:00
Denis Kasak
e70929317a Revert "add_member provably always returns true."
This reverts commit 7943baee49.
2020-07-10 15:07:17 +02:00
Devin R
62eeb3707f Fix wasm test failure gate unknown import 2020-07-10 08:59:02 -04:00
Devin R
3fa06eeb99 matrix-sdk-base: Add test for MessageQueue/JsonStore interaction
Ruma can't currently handle an event with the wrong event content type.
When replacing the MessageEventStub's content it automatically
serializes as "m.room.redaction".
2020-07-10 08:59:02 -04:00
Devin R
c0e6279837 matrix-sdk: Update request_builder to use new constructors
The create_room::Request and get_message_events::Request now have
constructors that we use in our builder structs.
2020-07-10 08:59:02 -04:00
Devin R
e7c70854ab sdk_base: message events in message queue have content redacted
The MessageQueue holds MessageEventStub<AnyMessageEventContent> so when
a redaction event is encountered the redacted event's content can be
replaced. The Unsigned field redacted_because is also populated with the
redaction event itself with the addition of a room_id Stub -> full
event.
2020-07-10 08:59:02 -04:00
Devin R
dcc3d6e755 sdk_base: Remove room_id as argument from all Room methods
Remove room_id paramater from some client methods. Make CreationContent
two methods of RoomBuilder. Add docs for MessageWrapper.
2020-07-10 08:59:02 -04:00
Devin R
2338d3e8fd matrix-sdk-base: clean up recv/iter joined post rebase
The types for account data in a sync response have changed, no longer
Option. Re word comment in hoist prev_content test.
2020-07-10 08:59:02 -04:00
Devin R
b83b9dc59d matrix-sdk-base: Use new accessor methods for models/message.rs
ruma now has field access methods for all of the Any*Event enums use
them for MessageWrapper's AnyMessageEventStub contents.
2020-07-10 08:59:02 -04:00
Devin R
68822861d5 Rebase upstream/master into ruma-mono branch 2020-07-10 08:59:02 -04:00
Devin R
b1e7bc77a4 Use ruma/ruma master, address review issues 2020-07-10 08:59:02 -04:00
Devin R
eb5949dbc2 Move matrix-sdk to ruma monorepo 2020-07-10 08:59:00 -04:00
Denis Kasak
7943baee49 add_member provably always returns true. 2020-07-10 11:08:40 +02:00
Denis Kasak
7abdeed449 fix: Don't issue a disambiguation in case of a unique display name. 2020-07-10 11:08:40 +02:00
Denis Kasak
eeebb43e32 Move mutating methods from RoomMember to Room.
The `update_profile` method cannot live in `RoomMember` since that
operation needs information which only exists in `Room` (for instance,
it needs other members in order to perform display name disambiguation).

Leaving other mutating methods on `RoomMember` (like `update_power` and
`update_presence`) then seemed illogical so they were all moved into
`Room`.

In addition, a small refactoring was done to remove
`did_update_presence` and `update_presence` since their existence
doesn't make much sense anymore and it saves us from repeating work.
Their function is now done in `receive_presence_event`.

Also, several docstrings were corrected and reworded.
2020-07-10 11:08:38 +02:00
Denis Kasak
5f49dab1fa Correct docstring. 2020-07-10 11:05:51 +02:00
Denis Kasak
6cacf83661 Add (failing) test for displayname disambiguation on profile updates. 2020-07-10 11:05:51 +02:00
Denis Kasak
599c1ba98f Add test to ensure member is only treated as joined or invited, not both. 2020-07-10 11:05:51 +02:00
Denis Kasak
c2ec69cf44 Style fixes (comment grammar and correctness, whitespace). 2020-07-10 11:05:51 +02:00
Denis Kasak
32bdcede0c Small refactoring to simplify member_disambiguations. 2020-07-10 11:05:51 +02:00
Denis Kasak
9af48920f6 Add some TODOs and FIXMEs. 2020-07-10 11:05:51 +02:00
Damir Jelić
283cf0d782 matrix-sdk: Bump all our deps. 2020-07-07 15:52:08 +02:00
Damir Jelić
98d36d0ef0 base: Only update the tracked users when we're done with the state and timeline. 2020-07-07 15:48:28 +02:00
Damir Jelić
11aa306de2 base: Swap around the store creation.
The state store creates directory structure but the crypto store does
not.

This can lead to confusing errors where we require a directory to be
created by the library user but it gets created by the library.
2020-07-06 10:54:01 +02:00
Denis Kasak
ff5f638b60 Remove member from invited_members when he joins. 2020-07-03 15:35:54 +02:00
Denis Kasak
2a0c6c6474 Add test and example event to ensure display name changes work correctly. 2020-07-03 15:35:54 +02:00
Denis Kasak
c57f076375 Remove unused import. 2020-07-03 15:35:54 +02:00
Denis Kasak
4561b94f33 Remove outdated TODO. 2020-07-03 15:35:54 +02:00
Denis Kasak
9bd8699e18 Get rid of match on membership change in RoomMember::update_profile.
The calling method already did this when it determined that
update_profile should be called so we don't need to repeat it.
2020-07-03 15:35:54 +02:00
Denis Kasak
5ef9a7b924 tests: Rename get_room_id to test_room_id.
To make it more obvious it's a special room ID value used in tests.
2020-07-03 15:35:54 +02:00
Damir Jelić
bd56c52b37 base: Don't double borrow the response in one iter rooms method. 2020-07-03 12:30:57 +02:00
Denis Kasak
1f25c4cf4b Fix and test hoisting of prev_content for timeline events.
The previous test only tested using the `EventEmitter`, which missed the
fact that the client was receiving unhoisted events. The test now also
tests the client state to detect this.
2020-07-03 11:54:08 +02:00
Denis Kasak
3f1a40a7d1 Add a bunch of FIXMEs to have receive_* methods do the emitting. 2020-07-03 10:31:47 +02:00
Damir Jelić
b092ed0a82 base: Put the decrypted event replacing in the correct place. 2020-07-02 23:16:56 +02:00
Damir Jelić
676d547161 matrix-sdk: Disable the tarpaulin skip lines since it fails to run with them. 2020-06-24 11:25:31 +02:00
Damir Jelić
6a670163d3 Merge branch 'feature/display-name' 2020-06-24 10:42:58 +02:00
Damir Jelić
b8c4d1d5fa matrix-sdk: Remove the last test_data folder and fix the remaining tests. 2020-06-24 10:07:03 +02:00
Devin R
8e8ac8c5ac matrix_sdk_base: Use test_json values for tests in base 2020-06-21 14:22:28 -04:00
Devin R
4a7b3a103c matrix_sdk_test: Use static JSON values instead of reading files 2020-06-21 14:13:26 -04:00
Denis Kasak
c0c02baffc Run cargo fmt and apply clippy lints. 2020-06-20 13:05:16 +02:00
Denis Kasak
1174ccfc89
Merge branch 'master' into feature/display-name 2020-06-20 12:54:46 +02:00
Denis Kasak
733689870e Fix compilation error and remaining test.
Ref. for compilation error:
https://github.com/rust-lang/rust/issues/64552
2020-06-20 12:51:02 +02:00
Marcel
d4087a1aae Fix cargo fmt issues that the local version didn't auto fix 2020-06-17 19:16:04 +02:00
Marcel
8b77b4171a Do wasm sepcific changes:
- Only use send+sync when not using wasm
- Use wasm capabale async_trait wrapper macro
- Make room and room_member specific structs always clonable
2020-06-17 18:57:39 +02:00
Denis Kasak
5bd3c49afc Correctly handle disambiguation for exiting members, refactor and test. 2020-06-15 17:29:38 +02:00
Denis Kasak
765487dd9f Fix comment style. 2020-06-15 17:29:38 +02:00
Denis Kasak
03e53e991b Hoist prev_content to top-level in both timeline and state events.
Also refactor and document why this hoisting is needed.

This change makes the user_presence test fail because the hoisting
exposes an error encoded into the test's expected result.

Previously, the test expected 2 members in the room at the end. This is
incorrect since one of the members in the test data leaves the room.
However, since the prev_content of state events was previously not
hoisted to the top level, the `membership_change` method would not
notice it and thus not realize the member had left the room. The test
was corrected to expect only a single member in the room.

Another test change was made due to a limitation of EventBuilder: due to
the fact that it makes the test data go through a de/ser cycle, it
cannot easily hoist prev_content to the top level. Because of this, the
tests were change to put prev_content into the top level from the
outset.
2020-06-15 17:21:26 +02:00
Damir Jelić
311e41ee0d matrix-sdk: Fix the author field in the cargo files. 2020-06-15 09:47:13 +02:00
Denis Kasak
97b1bb6004 Must not take our user into account when calculating room name. 2020-06-10 22:53:31 +02:00
Denis Kasak
331cb02266 Split joined/invited users and handle removing users. 2020-06-10 18:12:27 +02:00
Denis Kasak
7751605e37 Nix RoomMember::update_member and tracking membership.
After discussing with poljar, we concluded we don't actually need to
tracking membership state, since we won't be tracking users that
left (banned, kicked, disinvited).

The only thing we need to keep track of is the difference between joined
and invited users which will be dealt with in a separate commit.
2020-06-10 16:36:51 +02:00
Denis Kasak
a0eaa9c364 Implement RoomMember::unique_name.
This gives us a name that is as ergonomic as possible while guaranteeing
it is unique.
2020-06-10 14:44:41 +02:00
Denis Kasak
241d456a81 Add RoomMember::name.
Returns the most ergonomic name for the member (either the display name
(if set) or the MXID).
2020-06-10 14:39:12 +02:00
Denis Kasak
3e5b6bb460 Style fixes. 2020-06-10 12:04:58 +02:00
Denis Kasak
5868c72662 Small refactor so we don't duplicate user_id creation. 2020-06-10 12:01:01 +02:00
Denis Kasak
4c184a30a2 Add doc comment to RoomName::calculate_name. 2020-06-10 00:28:56 +02:00
Denis Kasak
e4977d1d2a Refactor member_display_name.
Make it more readable, add comments.
2020-06-09 23:02:01 +02:00
Denis Kasak
ac069152b9 Retrieve user id from RoomMember instead of reconstructing. 2020-06-09 22:19:51 +02:00
Denis Kasak
82827542b7 fixup: explicit type annotations 2020-06-09 19:31:01 +02:00
Denis Kasak
20a8e8e49b Fix comment styling. 2020-06-09 19:24:00 +02:00
Denis Kasak
098cc1f9f8 Add explicit type annotation. 2020-06-09 19:08:14 +02:00
Denis Kasak
a3c46c6144 Run cargo fmt. 2020-06-09 16:41:26 +02:00
Denis Kasak
b93eb0e318 Make Room::member_display_name return MXID as fallback.
If there is no display name set. This means the method can now always
return something so there is no need to wrap in an `Option`.
2020-06-09 16:16:21 +02:00
Denis Kasak
e6b67e5fa7 Add short explanation to Room::member_display_name. 2020-06-09 15:35:43 +02:00
Denis Kasak
22ba253103 Use "disambiguated" instead of "resolved" display name in the doc comment.
To match how the C2S spec calls it.
2020-06-09 15:29:37 +02:00
Denis Kasak
a9fd63fd4b Fix display name disambiguation so it passes the test. 2020-06-09 15:20:21 +02:00
Denis Kasak
60a43439e5 Properly test for display name disambiguation. 2020-06-09 15:20:21 +02:00
Denis Kasak
e3cb3566bf Rename display_names -> disambiguated_display_names. 2020-06-09 15:20:21 +02:00
Valentin Brandl
9f34615869 Add first test for display names 2020-06-09 12:33:24 +02:00
Valentin Brandl
05503b28b7 Only add name duplicates to the display name map 2020-06-09 12:33:24 +02:00
Valentin Brandl
49e913865d Fix failing test 2020-06-09 12:33:06 +02:00
Valentin Brandl
4675a72e6b Rename accessor for display name 2020-06-09 12:30:12 +02:00
Valentin Brandl
d5f66631c1 Implement display name resolving 2020-06-09 12:30:12 +02:00
Devin R
81baca2f92 base_client: emit typing events and test using EventEmitter 2020-06-06 17:00:29 -04:00
Damir Jelić
9f34b371be Merge branch 'unify-ee-methods' 2020-06-02 10:30:20 +02:00
Devin R
db38bf1276 event_emitter: use enum to represent custom events and raw json 2020-06-01 17:02:12 -04:00
Devin R
8f017e7b27 event-emitter: rename on_account_data_* -> on_non_room_* 2020-06-01 07:13:57 -04:00
Devin R
9cb86596d8 add support for custom events and unrecognized by ruma events, test new code 2020-05-29 17:36:58 -04:00
Damir Jelić
5637cdd133 matrix-sdk: Add a bunch of readmes to the crates. 2020-05-26 19:33:13 +02:00
Damir Jelić
6c3863f096 base: Don't unwrap when creating the olm machine. 2020-05-25 14:58:06 +02:00
Damir Jelić
3b5c9d3c75 Merge branch 'prev-content' 2020-05-25 14:31:19 +02:00
Damir Jelić
8869da0a38 Merge branch 'msg-tests' 2020-05-25 14:22:15 +02:00
Damir Jelić
ba66ee214f matrix-sdk: Move most of the configuration to the base client. 2020-05-25 14:21:04 +02:00
Devin R
b24b4b7423 messages: enable this feature by default 2020-05-25 07:37:49 -04:00
Devin R
1ba2f584cb add the messages feature to dev-deps so the tests are run 2020-05-23 08:14:29 -04:00
Devin R
ac4698f0d6 base_client: only swap prev_content if outer is None 2020-05-22 21:29:51 -04:00
Devin R
86a01a0ca6 Merge branch 'master' into prev-content 2020-05-22 17:20:06 -04:00
Devin R
2f6bebdd1a base_client: replace event if prev_content deserialized from unsigned 2020-05-22 17:12:58 -04:00
Damir Jelić
ea5f7f1d19 matrix-sdk: Don't require the the session at client creation time.
The client objects in the sdk accepted an optional session argument at
creation time. If provided this would restore the client into a logged
in state.

Since we need to restore the client state and encryption state at some
point it makes sense to do it when the client transitions into a logged
in state. At the same time we would like to avoid the client creation to
be async.

This introduces a restore_login() method which can be called instead of
the login() method to restore a session.
2020-05-22 15:23:58 +02:00
Damir Jelić
cffa2990b6 Merge branch 'swap-roomstate' 2020-05-22 10:09:47 +02:00
Damir Jelić
6e83f7ffa1 base: Rename the method to remove room state. 2020-05-22 09:56:11 +02:00
Devin R
5c7ea17eef state_store: only remove room state file don't bother moving the file 2020-05-21 18:38:25 -04:00
Devin R
20de6f6aea base_client: prev_content deserialization TODO for if/when to mutate the event 2020-05-21 16:52:05 -04:00
Devin R
eedf4e72d1 base_client: if unsigned field contains prev_content pull out and add to MemberEvent 2020-05-21 10:16:04 -04:00
Damir Jelić
6ecf46abf7 crypto: Mark tracked users as changed if a sync tells us so. 2020-05-21 14:30:42 +02:00
Devin R
8489be590a state_store: clippy TODO question 2020-05-18 16:37:28 -04:00
Devin R
0f6caec93d state_store: move room file when room state changes, test room_state_change method, doc edits 2020-05-18 16:26:27 -04:00
Damir Jelić
e51e89d9d5 matrix-sdk: Re-enable joins by id or alias. 2020-05-15 12:32:36 +02:00
Damir Jelić
8c6c34e01a matrix-sdk: Don't require coverage for some debug implementations. 2020-05-14 15:26:22 +02:00
Damir Jelić
77973f15ba base: Disable a test that requires SystemTime under wasm. 2020-05-14 15:12:14 +02:00
Damir Jelić
4972104f72 base: Make an unreadable numeric literal readable. 2020-05-14 14:52:32 +02:00
Damir Jelić
e3c16a3aa0 base: Don't use random event ids, they don't work under wasm. 2020-05-14 14:50:20 +02:00
Damir Jelić
9884c0bb7a base: The session sharing test only works if encryption is enabled. 2020-05-14 14:01:16 +02:00
Damir Jelić
96cf90e47c base: Store the whole encryption info for the room. 2020-05-14 13:58:09 +02:00
Damir Jelić
c0ff782ea3 base: Remove an aditional looping through the joined state events. 2020-05-14 13:01:41 +02:00
Damir Jelić
c9d38cdedb base: Expire group sessions if the member list changes. 2020-05-14 13:01:41 +02:00
Damir Jelić
ecbd801c70 crypto: Invalidate group sessions if they fail to be shared. 2020-05-14 11:55:12 +02:00
Damir Jelić
77a8f1b1bc base: Test the invited room creation. 2020-05-14 10:57:21 +02:00
Damir Jelić
fff3abf985 bae: More room creation tests. 2020-05-13 16:25:42 +02:00
Damir Jelić
e32af74be5 base: Add some initial test for room creation. 2020-05-13 15:57:09 +02:00
Damir Jelić
51f0a487ce base: Remove the stale rooms from the hashmaps. 2020-05-13 13:23:16 +02:00
Damir Jelić
dc56063c67 base: Move the user tracking logic to the correct place. 2020-05-13 13:10:21 +02:00
Damir Jelić
a8f94e2329 base: Add some missing debug implementations and add more strict lints. 2020-05-13 12:34:46 +02:00
Damir Jelić
8a401d23e2 base: Always store the new sync token, even if nothing changed in the rooms. 2020-05-13 12:27:16 +02:00
Damir Jelić
993dc8264a base: Return early if we get a duplicate sync response. 2020-05-13 12:26:07 +02:00
Damir Jelić
676633eec1 base: Rename the state store file since it's a specific implementation of it. 2020-05-13 10:58:30 +02:00
Damir Jelić
e9b48b73d4 base: Move the AllRooms out of the state_store file. 2020-05-13 10:50:58 +02:00
Damir Jelić
f1d12ff1f3 matrix-sdk: Remove all mentions of the AsyncClient. 2020-05-13 10:06:08 +02:00
Damir Jelić
66620ab99a base: Use the locks from our common crate. 2020-05-13 10:03:41 +02:00
Devin R
21bf631f47 Merge branch 'master' into store-room 2020-05-12 18:08:51 -04:00
Damir Jelić
e84a3e417c matrix-sdk: Add missing newlines at the end of some files. 2020-05-12 15:48:17 +02:00
stoically
ef6104bc53 matrix-sdk: Support compiling to wasm32-unknown-unknown 2020-05-12 15:48:09 +02:00
Devin R
2c45513b97 remove tarpaulin skip attr 2020-05-11 17:38:18 -04:00
Devin R
21712d0930 state_store: load/store each room type (invite, join, left), add type for returning 3 room maps 2020-05-11 15:54:11 -04:00
Devin R
22c4a1f2e7 Merge branch 'master' of https://github.com/matrix-org/matrix-rust-sdk into store-room 2020-05-11 14:17:31 -04:00
Devin R
0d0d8fca2d client: add store_room_state method 2020-05-11 07:04:47 -04:00
Damir Jelić
b6c0d4e3bb base: Rename the Client to BaseClient. 2020-05-11 10:43:21 +02:00
Damir Jelić
4e0bef064f matrix-sdk: More cleanup in the deps. 2020-05-08 13:54:46 +02:00
Damir Jelić
8a7aefac3b matrix-sdk: Split out the error types in our base and matrix-sdk crates. 2020-05-08 12:39:36 +02:00
Damir Jelić
9461f08906 base: Rename the base client file. 2020-05-08 11:49:25 +02:00
Damir Jelić
ef6458c9cd matrix-sdk: Fix the feature flags for real this time. 2020-05-08 11:07:08 +02:00
Damir Jelić
207fac2b49 matrix-sdk: Move the EventBuilder into a separate crate so it can be reused. 2020-05-08 09:49:55 +02:00
Devin R
d32172f74e base_client: todo about room hashmaps 2020-05-07 15:24:55 -04:00
Devin R
4f96ac96e2 async_client: add tests for all current endpoints, event emitter typeing/receipt events, set unread notifications 2020-05-07 15:21:06 -04:00
Damir Jelić
14580bc383 matrix_sdk: Fix most of the tests now that we have the big split. 2020-05-07 16:22:18 +02:00
Damir Jelić
30f8ccd2de matrix-sdk: Move the bulk of the sdk into a separate base crate. 2020-05-07 14:58:38 +02:00