Before:
Client('Name', onMigration: () {
print('Migrating now....');
});
After:
Client('Name', onInitStateChanged: (state) {
if (state == InitState.migratingDatabase) {
print('Migrating now....');
}
});
- chore: Make parse version error less sound (Krille)
- feat: (BREAKING) Replace onMigration with advanced callback onInitStateChanged (Krille)
- feat: Add deleteFile() endpoint to database (Krille)
- feat: support filtering events when requesting events history or future (Johannes Nevels)
- fix: BREAKING! missed initial updates for stream listener callbacks in P2P & mesh calls (Karthikeyan S)
- fix: clear legacy db on logout properly (Karthikeyan S)
- fix: don't reset wellknown cache on initialization (Konrad Pozniak)
- fix: rejecting a call doesn't send m.call.reject event (Karthikeyan S)
- fix: throw error on failed reaction send (Mohammad Reza Moradi)
- refactor: BREAKING Store room states as triple keys (Krille)
- refactor: Clarify Room.join() behavior and make sure DM link is purged if room not found (Krille)
- refactor: Do not set default timeout for initialSync (Krille)
- refactor: Do not set the deprecated dont_notify action in push rules (Krille)
- refactor: Fix new lints from flutter 3.27 (Krille)
- refactor: Remove unnecessary roomId parameter from decryptRoomEvent method (Krille)
Fixes a minor performance leak where the app re-requests the member list of all encrypted rooms.
For this the parameter cache
in Room.requestParticipants()
is now also
responsible to store the member data in the database. Also it is not true
by default anymore for
unencrypted rooms.
- feat: Add additional properties for LoginFlow type (Krille)
- feat: Optional authentication for profile requests (Krille)
- fix: BREAKING! Cache members for encrypted rooms in database (Krille)
- chore: add require trailing comma lint (Mohammad Reza Moradi)
- feat: add equality and hashCode overrides for autogenerated models (BREAKING CHANGE) (td)
- feat: v1.12 spec endpoints support (BREAKING CHANGE) (td)
- fix: (BREAKING) Change power level without changing memory (Krille)
- fix: AsyncCache is not invalidating on error (Krille)
- fix: by default don't uplaod new keys in our tests (Nicolas Werner)
- fix: Deduplicate key OTK uploads (Nicolas Werner)
- fix: Don't wait for 5 milliseconds on every sync in our tests (Nicolas Werner)
- fix: edge cases when calculating (un)localized body (Nicolas Werner)
- fix: enable some event tests without libolm (Nicolas Werner)
- fix: prevent body (and plaintextBody) from return html by accident (Nicolas Werner)
- fix: properly remove reply fallback from (un)localized body (Nicolas Werner)
- fix: Race conditions in tests now that they are running faster (Nicolas Werner)
- refactor: Migrate to m.marked_unread from Matrix v1.12 (Krille)
- refactor: Use Object.hash instead of hashCode ^ (Krille)
- chore: Add more (un)localized body tests (Nicolas Werner)
- chore: bump dart version to fix tests not exiting sometimes (Nicolas Werner)
- chore: Lower loglevel for call event with unexpected sender (Krille)
- chore: Make more clear that Client.uploadContent() does not end to end encrypt the file (Krille)
- chore: Switch to cheaper github runner (Nicolas Werner)
- chore: tear down clients in event tests properly (Nicolas Werner)
- chore: update Emote-only expressions (The one with the braid)
- chore: Upgrade dependencies (Nicolas Werner)
- feat: BREAKING CHANGE v1.11 matrix-spec endpoints (td)
- fix: also lazy load members for archive (Nicolas Werner)
- fix: don't convert archived rooms to joined rooms by accident (Nicolas Werner)
- fix: wait for pending transactions before db close (Nicolas Werner)
- fix: actually make sure clientBox has a account (td)
- feat: cache .well-known data (The one with the braid)
- fix: dedup /versions calls (td)
- fix: race condition between getState and requestUser updates (td)
- fix: SQLCipher dylib location on macOS builds (The one with the braid)
- refactor: Also use authenticated media if unstable features claim support (Krille)
- feat: support for authenticated media (td)
- chore: add info about tests to readme (td)
- chore: increase log level to verbose in tests (td)
- fix: App freezes because of recursive loop with getLocalizedDisplayname() call (Krille)
- fix: Call logout on soft logout fail (Krille)
- fix: don't restart github action service after apt install (Nicolas Werner)
- fix: leave->invite in the same sync would hide the invite (Nicolas Werner)
- (BREAKING) fix: update last event properly on cancel send (td)
- ci: create release job fix (Karthikeyan S)
- feat: Add support for isFederate option for rooms (Krille)
- fix: add main thread receipts to event.receipts getter (td)
- fix: also delete db on logout (td)
- fix: bump database version to v9 (td)
- fix: Synapse CI job failing because invite state not completely synced (Krille)
- refactor: Better avatar and names for invites (Krille)
- refactor: Cache profiles in database and refactor API (Krille)
- feat: Automatically cancel typing indicators after 30 seconds (Krille)
- feat: move e2e test dind structure to use executor (td)
- fix: Correctly store lastEvent in database after decryption (Krille)
- fix: Do not update lastEvent with state events (Krille)
- fix: lastEvent after edit and redact (td)
- fix: Type error when uploading room keys (Krille)
- refactor: Remove Matrix Connection Exception (Krille)
- chore: allow clients to set their own voip key delays (td)
- chore: use not cancelled in actions instead of always (td)
- fix: Return empty uri instead of original uri if uri is not mxc (Krille)
- fix: Request user causing state update loops for apps (Nicolas Werner)
- chore: make ignored call mem logging verbose (td)
- fix: dont override passed powerlevels with groupcall powerlevels (td)
- fix: ignore call events from own user even if todevice (td)
- chore: do not create participant object on every key (td)
- revert: "feat: retry call encryption key request logic" (td)
- fix: Do not return invalid state events from database (HuangRed)
- chore: bump make and use key delays to have more buffer (td)
- chore: Upgrade lints to 4.0.0 (Nicolas Werner)
- feat: expose matrixRTCEventStream (td)
- feat: retry call encryption key request logic (td)
- fix: do not fire missedCall on answeredElseWhere (td)
- fix: Do not return invalid state events from database (Krille)
- fix: state updates being also applied when fetching history (Nicolas Werner)
- docs: Update example with matrixsdkdatabase (Krille)
- fix: canRequestHistory doesn't reflect reality (Nicolas Werner)
- fix: Requst profiles for left users (Krille)
- refactor: Deprecate Streams in favor of client.onSync (krille-chan)
- refactor: requestUser logic (Krille)
- refactor: Use enhanced enums for room enums (Krille)
- fix: make sure room is postLoaded before starting calls (td)
- fix: nonLocal join/left values (td)
- fix: Do not set messages as state events anymore (Krille)
- feat: preShareKey using fetchOrCreateGroupCall (td)
- feat: hide _makeNewSenderKey and expose a new preShareKey function (td)
- feat: make voip key generator public (td)
- fix: Hotfix create missing objectbox (Krille)
- chore: add MatrixSDKVoipException and some more logging (td)
- chore: throw exception if you cannot send famedly call member event (td)
- fix: allow famedly calls for everyone before choosing an existing one (td)
- fix: minor perm issue typo while setting famedly call member event (td)
- fix: update event status to error on EventTooLarge (Karthikeyan S)
- perf: check event size in bytes without encoding twice (Karthikeyan S)
- refactor: Combine sendMessageTimeoutSeconds and sendTimelineEventTimeout (krille-chan)
- refactor: Make client members read only (Krille)
- refactor: Make network request timeout configurable (Krille)
- refactor: Store not uploaded group sessions in its own database queue (krille-chan)
- feat: Implement unpublished MSC custom refresh token lifetime (Krille)
- feat: support for JWT authentication (Ray Wang)
- fix: ensureNotSoftLoggedOut must be called before network reqeust in syncFilter check (Krille)
- fix: ice restart mechanism (td)
- refactor: Cache direct chat matrix ID (krille-chan)
- refactor: make sure ensureNotSoftLoggedOut does not run multiple times (Krille)
- chore: Revert check message size before fake sync (Krille)
Refactoring release which fixes a flickering of sent file events in the timeline. The
State events in a room are no longer instances of Event
but StrippedStateEvent
by
default, which is a base class of Event
. Usually in join rooms the state events are
actually Event
and can be used as those after a type check if needed.
Example:
// Before:
final event = room.getState(EventTypes.RoomCreate);
// After:
final strippedStateEvent = room.getState(EventTypes.RoomCreate);
final event = strippedStateEvent is Event ? strippedStateEvent : null;
Also be aware that Event.remove()
has been renamed to Event.cancelSend()
to make
more clear that this is only to delete events from database and cache which have not
been synced yet. They no longer appear in the Client.onEventUpdate
stream but on the new
Client.onCancelSendEvent
stream.
- chore: more gh_release fixes (td)
- chore: reduce isValidMemEvent log level (td)
- ci: Add tests for database on web (Krille)
- refactor: delete not sent events without eventupdate stream workaround (Krille)
- refactor: Removes the behavior of deleting an event if the file is no longer cached (Krille)
- refactor: Use strippedstatevent as base for room state and user class (Krille)
- chore: expose fake matrix api (td)
- chore: update voip readme (td)
- fix: allow mesh group call invite (td)
- fix: checkout repo for gh_release job (td)
- fix: conduit container (td)
- fix: Don't fail sync if a presence event has an empty presence field (morguldir)
- fix: Fetch invite state after restart app (krille-chan)
- refactor: Remove unused variable (Krille)
This release introduces the new famedly calls, it brings 1:1, mesh and livekit calls support to the matrix dart sdk, read more at: voip docs
- feat: famedly calls (td)
- chore: create_gh_release job (td)
- feat: lcov and tag olm tests (td)
- fix: Make room.setPower more type safe and avoid change powerlevel in RAM before sending request to server (krille-chan)
- refactor: Use prevBatch from server for pagination in event search (krille-chan)
- fix: canChangePowerLevel should return true for own user (krille-chan)
- chore: add api lite readme
- chore: downgrade sqflite_common_ffi to support dart sdk v3.2.0
- chore: check message size before fake sync
- chore: emit handleCallEnded on ice fail
- chore: merge api_lite and dart sdk
- chore: Pass reason parameter when invite user to a room
- chore: Sort archive by last activity
- chore: update local v3 gh actions to v4
- docs: Add documentation
- feat: add sendAudioEvent and isVoiceMessage method to msc extensions
- feat: add Web build test
- fix: dart:io import in matrix_sdk_database
- fix: Do not use invitor avatar_url for room
- fix: Make database deleteable without the need to init the boxcollection
- fix: Typo in upload key json object creates invalid objects
- fix: userMediaConstraints
- refactor: BREAKING Migrate database to new lastEvent storage method
- refactor: Make via fields not nullable
- refactor: Move file storage to mixin to not import dart:io
- refactor: Store lastEvent in room object instead of room state
- refactor: Switch to MatrixSdkDatabase as suggested database and deprecate other ones
- refactor: Use dart records for checkHomeserver method
- chore: add noice/echo cancelling flags to getUserMedia (td)
- feat: Add commands /ignore and /unignore (Krille)
- feat: Offers client.ensureNotSoftLoggedOut() to fix using client with stopped sync loop (Krille)
- fix: throw EventTooLarge on exceeding max fed PDU (td)
This release adds a new state to the LoginState
named softLoggedOut
. Learn more about it here:
https://spec.matrix.org/v1.9/client-server-api/#soft-logout
When a client is in a soft logout state, it is not yet cleared, but sync has stopped and it expects to perform a token refresh or a new login while providing the old device ID.
- refactor: BREAKING Allow calling init when in soft logout state and fix some bugs (Krille)
- chore: Add regression test for invite->join state handling (Nicolas Werner)
- feat: add fromLocalStoreOnly to Event.downloadAndDecryptAttachment (Romain GUILLOT)
- fix: archived room state store logic (Nicolas Werner)
- fix: Do not assume a missing timestamp means "now" (Nicolas Werner)
- fix: Do not compare timestamps when setting roomstate (Nicolas Werner)
- fix: properly fetch participants when transitioning from invite to join (Nicolas Werner)
- fix: properly overwrite loaded state for partial loaded rooms (Nicolas Werner)
- fix: some tests fail with the "fixed" membership fetch logic (Nicolas Werner)
- chore: pass refreshToken to uiaLogin (Krille)
- fix: removed prev_sender for empty chats (Patrick Hettich)
- fix: updated membership-leave for archived direct chats (Patrick Hettich)
- fix: Use name of other participant on archived rooms (Patrick Hettich)
- refactor: Deprecations after dart upgrade (Krille)
- feat: Implement handling soft logout (Krille)
- feat: Store accesstokenExpiresIn and call softlogout 5 minutes before (Krille)
- fix: convert boxNames to List in clear function when creating transaction (Gabby Gurdin)
- chore: remove state events both in imp and preview events list (td)
- feat: specify history_visibility when creating group chat (Karthikeyan S)
- fix: group calls terminator having sync glares (td)
- fix: ignore expired calls rather than killing them (td)
- chore: Use some call events as last events (Krille)
- fix: nested void function in encryption helper (The one with the braid)
- feat: add SQfLite encryption helper (The one with the braid)
- fix: Skip invalid keys which got corrupted in database (Krille)
- feat: Add missing localizations for key verification messages (Krille)
- fix: Correctly null cache in transactions for indexeddb (Krille)
- fix: Transactions on web by doing them in the same way as on io (krille-chan)
- refactor: Improve getTimeline senders (krille-chan)
- refactor: Use maxnumberofotk from olm instead hardcode 100 (Krille)
- fix: Another type error when combining lists (Krille)
- fix: Type error when combining dynamic lists (Krille)
- refactor: Throw client init exception on client init fail (krille-chan)
- fix: Delete in transaction on new store does not clear cache correctly (Krille)
- fix: Add missing copy map in matrix sdk database (Krille)
- ci: Test that database can write and read at least 5mb of data (Krille)
- feat: Make possible to fetch presence from database only (krille-chan)
- fix: clearCache does not clear room account data (Krille)
- fix: typerror in removeEvent method from new database (Krille)
- feat: add tests for calls (td)
- feat: cache getConfig request (Karthikeyan S)
- fix: canSendDefaultMessage ignores overwritten events (Krille)
- fix: check negotiate party and call ids (td)
- fix: ignore calls with age older than lifetime (td)
- fix: Increase timeout for initial sync from 10 seconds to 2 minutes (Krille)
- fix: validate account_data values instead of checking them in syncUpdates (td)
- refactor: Add delete database method (Krille)
- refactor: Add loadHeroUsers method (Krille)
- refactor: Connect timeline to event updates earlier (Krille)
- refactor: Make possible to wait for first sync and await first sync before create megolm session (Krille)
- ci: Test all databases in unit tests (Krille)
Small hotfix for the new database.
- refactor: Remove duplicated copyMap method and fix type error (Krille)
- docs: Add issue tracker to pub.dev (Krille)
- fix: Copy all maps got from database (Krille)
This release brings a new experimental database based on SQFlite and IndexedDB as a Drop-In-Replacement for Hive and HiveCollections. You can already test it out (on your own risk) by using it as the new databaseBuilder and migrate your current users by using the legacyDatabaseBuilder with your current Database:
final client = Client('Client Name',
databaseBuilder: (client) => MatrixSdkDatabase(
'Database Name',
database: await databaseFactory.openDatabase(':memory:'),
),
legacyDatabaseBuilder: yourPreviousDatabase,
);
- feat: Implement new Matrix Dart SDK Database (Christian Pauly)
- fix: Do not hide matrix exceptions in sync (Krille)
- fix: set cid before initWithInvite to handle getUserMedia exception correctly (Karthikeyan S)
This release deprecates client.presences
in favor of client.fetchCurrentPresence(userId)
as part of our journey to a more database centric memory management. However, client.presences
is still functional and tested at least until the next major release.
Breaking change for users of dehydrated devices feature. This feature now implements the latest version of the MSC. It has been adapted to the current recent Synapse version and will from now on be incompatible with previous versions.
- chore: add null check for remotePartyId before ignoring reject/hangup (Karthikeyan S)
- feat: Update dehydrated devices implementation to current MSC (Nicolas Werner)
- fix: Delayed encrypted event in timeline not added to aggregated events (Krille)
- fix: don't delete the dehydrated device before we are sure the keys got saved (Nicolas Werner)
- fix: ignore reject/hangup events for a live call from a different device (Karthikeyan S)
- refactor: Store fetched presence in db and deprecate own cache (Krille)
This release includes a small breaking change. Starting a verification request now always returns a future. Specifically this changes the DeviceKeys startVerification method to also return a future.
Additionally this release fixes a severe regression in the online key backup (keys only got uploaded once after startup or before logout), excessive linebreaks in markdown messages and a few edge cases around when presence is sent.
- feat: Add sendRaw command (Krille)
- feat: Store presences in database (Krille)
- fix: Do only convert linebreaks to br tags in p blocks (Krille)
- fix: Set presence when loading archive (Krille)
- fix: key uploads only running once (Nicolas Werner)
- fix: catch correct exception type for connection problems (krille-chan)
- fix: database tests group can't be async (Nicolas Werner)
- fix: in memory database is not actually in memory (Nicolas Werner)
- chore: don't manually enable default rules (Nicolas Werner)
- chore: enable avoid_bool_literals_in_conditional_expressions (Nicolas Werner)
- chore: enable discarded_futures lint (Nicolas Werner)
- chore: enable remaining easy lints (Nicolas Werner)
- docs: Document and group our linter rules (Nicolas Werner)
- refactor: Add SyncConnectionException to syncloop (Krille)
- chore: incrementally add left rooms to archive (The one with the braid)
- chore: remove archived room on forget (#2) (Clemens-Toegel)
- chore: store states to archived rooms (#1) (Clemens-Toegel)
- chore: upgrade lints (Nicolas Werner)
- chore: use our custom reusable workflow to avoid manually configuring each publish job (td)
- fix: Code style (The one with the braid)
- fix: call hangup on timeout race condition (Karthikeyan S)
- fix: clear local database on logout even if server timesout (td)
- fix: hangup on call crash (Mohammad Reza Moradi)
- fix: stale call checker leaks memory (Nicolas Werner)
- fix: Do not convert linebreaks in pre blocks on markdown parsing (Krille)
- refactor: Wait for room in sync until sync process and trigger cleanup call not before actually start clean up. (Krille)
- build(deps): bump http from 0.13.6 to 1.1.0 (dependabot[bot])
- feat: Add methods to load all room keys from online key backup (Krille)
- fix: Convert linebreaks into br tags on markdown parsing (Krille)
- fix: fixed hardcoded historyCount (Ray)
- refactor: Trigger upload keys on sync and not in background job and upload them before logout (Krille)
- refactor: Update markdown (Krille)
- feat: Implement member change type (Krille)
- fix: apply state event before decryption on leaved room (Mohammad Reza Moradi)
- fix: startDirectChat might return an unjoined room (Nicolas Werner)
- fix: storing the end of history pagination (Nicolas Werner)
- fix: userOwnsEncryptionKeys returns true for empty device lists (Nicolas Werner)
- fix: wait for online key backup key to be cached on reset (Nicolas Werner)
- refactor: Remove deprecated dart code metrics (Krille)
- chore: remove redundant log message (Nicolas Werner)
- ci: don't fail fast on dendrite failure (Nicolas Werner)
- feat: Add option to not cache users in memory when requesting all of a room (krille-chan)
- fix: Has new messages is never true (Krille)
- fix: direct message room name computation (The one with the braid)
- refactor: simplify UIA stage selection logic (Nicolas Werner)
- feat: Upload keys on OKB reset (Nicolas Werner)
- fix: fix upload of old session after reset (Nicolas Werner)
- refactor: Simplify room sorting logic to make invite sorting more obvious (Nicolas Werner)
- chore: add pub release job (td)
- chore: add dependabot (Niklas Zender)
- feat: Use github actions (Nicolas Werner)
- fix: do not proceed call if getUserMedia fails (td)
- chore: pass event to redactedAnEvent and removedBy (td)
- chore: cleanup some eventTypes and unused variables (td)
- chore: fix unexpected null when device is not known (td)
- fix: Assign correct type to signedOneTimeKeys (Malin Errenst)
- feat: qr key verification (td)
- refactor: Use tryGet for type casts whenever possible (Malin Errenst)
- chore: Update matrix_api_lite to 1.7.0 (Malin Errenst)
- refactor: Added type casts to match refactored matrix_api_lite (Malin Errenst)
- refactor: Added type casts for refactored dart_openapi_codegen (Malin Errenst)
- builds: Pin matrix api lite (Krille)
- fix: Do not display prevContent displayname and avatar for joined users (Krille)
- builds: Update dart and flutter ci containers (Krille)
- fix: canRequestHistory should return false if prev_batch is null (Krille)
- chore: fix edited last events breaking db (td)
- fix: Do not store global profiles in room states as members (Krille)
- feat: Display performance warning when requesting more than 100 participants (Krille)
- fix: Also update last event on redaction in store (Krille)
- refactor: Let bootstrap throw custom Exception InvalidPassphraseException so it is easier to catch (Krille)
- builds: Update to flutter container 3.7.12 (Krille)
- chore: add missing awaits to to_device call events listener (td)
- chore: add missing awaits to to_device call events listener (td)
- chore: calculate unlocalized body (Reza)
- fix: mark DMs as DMs properly when joining (Nicolas Werner)
- fix: remove deprecated sender_key occurrences (Malin Errenst)
- refactor: Check correct if null (Krille)
- refactor: Remove unused parameters (Krille)
- fix: cast issues in getEventList (td)
- refactor: Make parameters more clear and remove unused methods (Krille)
- fix: Only request users which are valid mxid (Krille)
- fix: Always wait for account data to load before returning SSSS status (Nicolas Werner)
- fix: Reactions are sent encrypted (Krille)
- chore: oneShotSync before staleCallChecker (td)
- fix: updateMuteStatus after kConnected (td)
- refactor: Make optional eventId a named parameter (Krille)
- fix: Check the max server file size after shrinking not before (Krille)
- fix: casting of a List to List in getEventList and getEventIdList (td)
- fix: Skip rules with unknown conditions (Nicolas Werner)
- fix: allow passing a WrappedMediaStream to GroupCallSession.enter() to use as the local user media stream (td)
This includes some breaking changes to read receipts. You won't be able to
access the m.receipt
account data pseudo event anymore. This has been replaces
with a per room receiptsState
, that also supports private and threaded
receipts. Additionally you can now toggle if receipts are sent as public or
private receipts on the client level.
- chore: Update image dependency to 4.0.15 (Kristian Grønås)
- feat: Support private read receipts (Nicolas Werner)
- chore: bump api_lite to 16.1 (td)
- feat: allow sending messages inside threads (Dmitriy Bragin)
- chore: Upgrade to matrix_api_lite 1.6 (Nicolas Werner)
- ci: Allow overriding the template in a manual or triggered pipeline (Nicolas Werner)
- chore: stopMediaStream on all streams and make sure dispose runs everytime (td)
- fix: test if setting track enabled on participants changed helps with the media not working randomly issue (td)
- chore: Update to flutter image 3.7.8 (Krille)
- chore: Workaround for broken test dependency (Krille)
- chore: ignore stale call checking for archived rooms (td)
- feat: Implement onMigration callback to Client.init() method (Krille)
- fix: Clear HiveCollection boxes inside of transaction in order (Krille)
- refactor: Rename one-character-variables in device_keys_list.dart (Malin Errenst)
- feat: Allow accessing cached archive rooms as well as request keys for them (Philipp Grieshofer)
- feat: Make possible to overwrite boxcollection opener in Hive Collections Database (Krille)
- fix: Use MatrixLocalizations to calculate fallback user displayname (Philipp Grieshofer)
- chore: remove checker from local list (td)
- chore: stop stale group call checker on room leave (td)
- chore: update. (cloudwebrtc)
- feat: Implement pagination for searchEvent endpoint (Christian Pauly)
- fix: archive takes 2 minutes to update (Nicolas Werner)
- fix: http api call replaced with httpClient (m_kushal)
- fix: BREAKING CHANGE make group call stuff async, let clients await what they need (voip callbacks like handleNewCall, handleCallEnded need to be Future now) (td)
- fix: skip invalid candidate. (cloudwebrtc)
- chore: add missing awaits in group call enter and leave funcs (td)
- chore: add useServerCache option to fetchOwnProfileFromServer and fix missing awaits (td)
- fix: ability to upgrade audio calls to video calls (td)
- chore: add a fetchOwnProfileFromServer method which tries to get ownProfile from server first, disk then (td)
- fix: clean expired member state events in group calls (td)
- fix: hasActiveGroup call now checks all group calls (td)
- fix: Check if argument is valid mxid in /maskasdm command (Christian Pauly)
- fix: Fake User object (Christian Pauly)
- fix: Request key in searchEvent method crashes because of wrong preconditions (Christian Pauly)
- refactor: Check config at file sending after placing fake event and add error handling (Krille)
- chore: bump dart to 2.18 (Nicolas Werner)
- fix: setMicrophoneMuted is now async to match setVideoMuted (td)
- fix: implement activeGroupCallEvents to get all active group call state events in a room (td)
- refactor: (BREAKING CHANGE) move staleCallChecker and expires_Ts stuff to an extension on Room, instead of Voip because it makes much more sense per room rather than on voip, also makes testing easier (td)
- fix: populate local groupCalls list on instantiating VOIP() (td)
- fix: starting stale call checker is now handled by the sdk itself because clients can forget to do so (td)
- chore: bump flutter and dart images (td)
- fix: move expires_ts according to spec (breaks group call compatibility with older sdks) (td)
- fix: reject call on own device if you get a call reject (td)
- feat: active speaker in group calls (td)
- fix: missed incomingCallRoomId case in removing glare stuff during group calls (td)
- fix: fix glare side effects for group calls. (Duan Weiwei)
- chore: bump version (td)
- chore: deprecate isBackground (td)
- fix: try to stop ringtone on call termination (td)
- fix: Fix can't correctly remove/cleanup call in group call. (Duan Weiwei)
- fix: send all servers for getIceServers (td)
- fix: only send call reject event when needed (td)
- fix: use tagged dart images in ci (td)
- fix: glare (td)
- fix: update groupCalls state stream (td)
- fix: tweak some stuff in group calls code for group calls onboarding feat (td)
- feat: add method to generate the matrix.to link (td)
- fix: follow-up OLM matcher (The one with the braid)
- refactor: migrate integration tests to more stable setup (TheOneWithTheBraid)
This deprecates room.displayname
is favor of room.getLocalizedDisplayname()
.
For migration you can just replace it everywhere. It will use the
MatrixDefaultLocalizations if you don't set one.
- Fix the timing error when the candidate arrives before the answer sdp. (Duan Weiwei)
- chore: use proper matchers in integration tests (Nicolas Werner)
- fix: Last message set incorrectly on all session key received (Krille)
- fix: play ringtone for incoming calls before trying to getUserMedia (td)
- fix: propogate filter to getParticipants in requestParticipants (td)
- refactor: room displayname calculation (Krille)
- fix: Fix the called party not sending screensharing correctly. (cloudwebrtc)
- test: Add test for dendrites invalid pushrules (Nicolas Werner)
- test: Add tests for account data store and retrieve (Nicolas Werner)
- fix: make some Room getters null safe (TheOneWithTheBraid)
- fix: Store decrypted last event in store (Krille Fear)
- refactor: Key manager megolm handling to make key generation more efficient
- fix: leaved direct chat name (Reza)
- chore: Add voip connection tester (td)
- fix: await requestKey() in event search (Philipp Grieshofer)
- fix: Request session key for bad encrypted events before the text search is carried out (Philipp Grieshofer)
- feat: migrate e2ee test to DinD (TheOneWithTheBraid)
- chore: Update readme with new database (Christian Pauly)
- feat: Check if a key is verified by any master key (Reza)
- fix: follow account kind in registration (TheOneWithTheBraid)
- feat: support MSC 3935: cute events (TheOneWithTheBraid)
- fix: PowerLevel calculation regarding to spec (Krille Fear)
- fix: handleMissedCalls on remote hangups before answer (td)
- fix: recover from very unlikely key upload errors (Nicolas Werner)
- chore: Follow up fix for request users in invite rooms (Christian Pauly)
- chore: Put all hard-coded timeout parameters into the Timeouts class. (cloudwebrtc)
- chore: upgrade webrtc_interface, remove WebRTCDelegate.cloneStream. (cloudwebrtc)
- fix: Do not request users in not joined rooms (Christian Pauly)
- fix: sdp negotiation issue on iOS, close #335. (cloudwebrtc)
- refactor: Add argument for custom CreateRoomPreset to startDirectChat method (Grieshofer Philipp)
- refactor: Get rid of unnecessary type cast (Christian Pauly)
- refactor: Improve error handling for no olm session found exception (Christian Pauly)
- chore: reduce error logging level of groupCall is null (td)
- fix: filter list for adding p2p call events (td)
- refactor: Remove deprecated fluffybox (Christian Pauly)
- chore: Lower logs level of native implementation noSuchMethod (Christian Pauly)
- fix: Redact originalSource on redaction (Christian Pauly)
- fix: Do not try to decrypt redacted events (Christian Pauly)
- fix: Do not wait for first sync after migration init
- fix: Do not assume that push rules are never malformed in account data
- chore: change codeowners
- refactor: Remove unused imports
- Improve ice connection speed. (Duan Weiwei)
- chore: fix exception test after api_lite update (Nicolas Werner)
- feat: Add getter for own unverified devices (Christian Pauly)
- feat: Support evaluating pushrules (Nicolas Werner)
- feat: implement expire_ts in group calls and provide methods to terminate stale calls (td)
- fix: files get needlessly lowercased (Nicolas Werner)
- refactor: Use DateTime method instead of comparing milliseconds (Christian Pauly)
- chore: Fire events by default during hangup. (cloudwebrtc)
- chore: Properly close usermedia/screen stream for 1v1/group calls. (cloudwebrtc)
- chore: fix analyzer error. (cloudwebrtc)
- chore: update. (cloudwebrtc)
- chore: update. (cloudwebrtc)
- feat: Add onSecretStored StreamController to SSSS (Christian Pauly)
- feat: Store original event (Christian Pauly)
- fix: Ensures that p2p/group calls are in progress to reject new call invitations, and emits a call reject events. (cloudwebrtc)
- fix: Fix remote hangup call causing local screenstream to be released. (cloudwebrtc)
- fix: don't assume redacts attribute from content to be valid (henri2h)
- refactor: Clean up deprecated website data (Christian Pauly)
- chore: fix video muted updates for local stream (td)
- fix: Check ahead of download if a file exceeds the maximum file size (Nicolas Werner)
- fix: Get push rules crashes if malformed (Christian Pauly)
- fix: The initial sync waiting for a long time in some cases (Nicolas Werner)
- fix: properly handle events not already in the db (Nicolas Werner)
- fix: release renderer to fix crashes on android. (cloudwebrtc)
- fix: timeout when sending large files (Nicolas Werner)
- refactor: Avoid using private types in public api (Christian Pauly)
- refactor: Remove databaseDestroyer (Christian Pauly)
- feat: Allow auto request keys via key sharing requests (Christian Pauly)
- feat: support dehydrated devices (Nicolas Werner)
- fix: Decrypt of last event might make an old message as last event (Christian Pauly)
- fix: Fixed issue with group calls for web and flutter. (cloudwebrtc)
- chore: Upgrade Hive to 2.2.3 which as a breaking change with BoxCollections (might need migration!!)
- chore: Correctly release the cloned stream. (cloudwebrtc)
- fix: setRemoteDescription before adding local stream to prevent early feedsChanged and negotiation (td)
- chore: simplify getTimeline condition a bit (Nicolas Werner)
- chore: support MIME in file factory (Lanna Michalke)
- fix: follow up for native implementations web (Lanna Michalke)
- feat: Add markasdm and markasgroup commands (Christian Pauly)
- refactor: Add reference to itself in bootstrap onUpdate callback (Christian Pauly)
- chore: Use onRoomState to monitor group call creation and member join and leave. (cloudwebrtc)
- chore: expose option to retry computations (Lanna Michalke)
- chore: fix group call id mismatch. (cloudwebrtc)
- feat: add coverage to MRs (Nicolas Werner)
- fix: Fix currentCID is null when handleNewCall is triggered, which will cause family-app. (cloudwebrtc)
- chore: introduce native implementations (Lanna Michalke)
- fix: check for m.call permissions in groupCallEnabled (td)
- fix: make Hive Collection path nullable (Lanna Michalke)
- fix: missing null check (Lanna Michalke)
- feat: Add powerLevelContentOverride to startDirectChat and createGroupChat (Isabella Hundstorfer)
- chore: add tests for group calls (td)
- chore: cleanup unused imports and analyzer warnings (td)
- feat: allow enabling group calls in already created rooms (td)
- feat: (breaking) keep timeline history for archive rooms in memory (Henri Carnot)
- fix: (potentially) a race in the archive test (Nicolas Werner)
- fix: Await unawaited stuff in voip code (Nicolas Werner)
- fix: race conditions in the SDK and its tests (Nicolas Werner)
- fix: set fixed time for ringer (td)
- refactor: Use import sorter and ci templates (Christian Pauly)
- fix: Cache user profile even with cache=false when there is a cache
- refactor: Better fetch own profile (Christian Pauly)
- feat: Calc encryption health state and allow key sharing with unknown devices (Christian Pauly)
- fix: Add WebRTCDelegate.cloneStream to adapt to platform differences. (cloudwebrtc)
- fix: Database did not get cleared correctly (Christian Pauly)
- fix: fixed camera is still active after leaving the group call. (cloudwebrtc)
- fix: request history (Henri Carnot)
- refactor: Handle Ephemerals method (Christian Pauly)
- feat: Implement CachedStreamController (Christian Pauly)
- fix: Only trigger onCall streams by latest call event for a call_id (Christian Pauly)
- fix: Support for OpenSSL 3.0 (Nicolas Werner)
- fix: implement sending queue (Reza)
- refactor: Call handleEphemerals with BasicRoomEvent instead of dynamic (Christian Pauly)
- refactor: Let _handleRoomEvents use BasicEvent (Christian Pauly)
- refactor: Pass BasicEvent to handleEvent instead of JSON (Christian Pauly)
- refactor: Use handleRoomEvents method instead of handleEvent (Christian Pauly)
- refactor: Use tryGet in handleRoomEvents (Christian Pauly)
- fix: ringtone not stopping when rejecting a call
- fix: missing turn servers in group calls
- fix: BoxCollection not re-assignable (Lanna Michalke)
- feat: Support group calls (experimental) (cloudwebrtc)
- refactor: add calcLocalizedBodyFallback method (Christian Pauly)
- chore: Update Matrix API Lite for spaces fixes
- refactor: Rename methods and get rid of all Future getter
- fix: Do not show seen events in push notification
- feat: Allow overriding supportedVersions (Christian Pauly)
- fix: Added deprecation mention for getUserByMXIDSync.
- feat: Add search for events in timeline (Krille Fear)
- feat: Add waitForSync helper (Henri Carnot)
- feat: Allow setting image size when generating a thumbnail (Henri Carnot)
- refactr: Make event.sender async (Henri Carnot)
- ci: use flutter images to install less (Nicolas Werner)
- feat: implement session export (Lanna Michalke)
- feat: support HiveCollections as Database provider (Lanna Michalke)
- fix: buggy e2e test (Lanna Michalke)
- fix: delete reaction (Reza)
- refactor: Migrate to Matrix Api Lite 1.0.0 (Krille Fear)
- fix: Ignore invalid entries in
io.element.recent_emoji
- fix: Fix deep copy issue in the fragmented timeline feature and restored it
- fix: Revert fragmented timeline feature temporarily to fix SENDING timeline
- fix: Missing null check in get single room method
- chore: Make path configurable in uiaLogin
- feat: Store timestamp in the presence events
- chore: Move auth object passing to external msc implementations
- refactor: Get rid of dynamic input in checkHomeserver (Christian Pauly)
- feat: Make image size editable (Henri Carnot)
- refactor: Remove old deprecations (Christian Pauly)
- feat: Get fully read marker (Henri Carnot)
- feat: Get the recent emoji according to
io.element.recent_emoji
(TheOneWithTheBraid) - feat: Load fragmented timeline in memory (Henri Carnot)
- fix: Wait for keys in push helper
- feat: Get event from push notification
- feat: Add more localization strings and add default matrix localizations
- fix: Ignore no permission errors on requesting users
- feat: check thumbnail size
- feat: fallback to thumbnail preview
- fix: Retry sending a file event
- chore: Allow custom image resizer to be an async method
- fix: Missing type check in power level calculation
- fix: Post load all users on room opening
- fix: Better fallback message for member events without any change
- fix: Store sending files in database and fix retrying to send them
- feat: Pass through a custom image resize function to the client
- feat: Display dummy event in timeline for sending files
- chore: Move the call methods in room to the voip class.
- fix: properly create the directory for the pub credentials
- feat: added doc (Henri Carnot)
- feat: add some more tests (Henri Carnot)
- feat: allow removing markdown formating (Henri Carnot)
- feat: Get event in a room faster by searching in database (Christian Pauly)
- feat: implement mofifying widgets (TheOneWithTheBraid)
- feat: Set loglevel in client constructor (Christian Pauly)
- fix: example (Henri Carnot)
- fix: remove pending outbound group session creation on completed or errored (Henri Carnot)
- fix: room members loading States were used before being fetched from the database. Thus, room membership states weren't set, and so, user display names weren't be fetched from the database. (Henri Carnot)
- refactor: Simplify relates to and make it more type safe (Christian Pauly)
- fix: send oldusername in displayname changed event
- fix: Dont encrypt reactions
- refactor: Make MatrixFile final and move all image calculation into isolate
- fix: own profile containing mxid
- chore: Update fluffybox
- fix: Rooms sort order after login
- fix: Change password using email authentication
- fix: Change password using email authentication
- chore: Increase default thumbnail size to 800
- fix: sortRooms should be triggered right before onSync is called
- fix: UIA request stucks forever on unexpected matrixExceptions
- feat: Return homeserver summary on checkHomeserver
- fix: hasNewMessage true when last event is sent
- fix: Correctly end the call.
- fix: Has new messages compares ts
- fix: handle dynamic content for pinned events
- fix: Show reactions as last events and refactor hasNewMessage
- feat: Add hasNewMessages flag to room
- fix: Sort rooms after updating the UI on web
- fix: exception on removed widgets
- fix: Fix black screen when end screensharing with system buttons.
- fix: Call onChange correctly on redacted aggregation events
- fix: Remove onHistoryReceived which was broken anyway
- fix: Remove aggregation event doesnt trigger onChange
- fix: Add redaction events to timeline
- fix: Resize image with compute by using const class arguments
- refactor: Implement on history received in timeline
- fix: null-safety issues with widgets
- fix: Trigger onChange for index on aggregation event update
- feat: implement to get a room's widgets
- BREAKING CHANGE: high-level hadling of image sizes
- feat: expose Timeline.onChange to Room.getTimeline
- fix: Use where and map instead of a loop and a removeWhere
- fix: Remove sorts that shouldnt be required.
- fix: Fix turn credentials format issue for safari.
- fix: update fluffybox version to correctly clear rooms after logout.
- fix: Allow unpadded base64 decoding
- feat: Let sendDefaultMessage return false on encryption failure (Krille Fear)
- fix: Room Member updates should always be cached (Krille Fear)
- fix: Requested users are not stored (Christian Pauly)
- fix: Localize reactions (Krille Fear)
- refactor: Remove unnecessary type checks and imports (Krille Fear)
- fix: fallback in body for replies to replies (Nicolas Werner)
- fix: ignore 4xx errors when re-sending the to_device queue The to_device queue was introduced to ensure integrity if e.g. the server temporarily failed when attempting to send a to_device message. If, for whatever reason, the server responds with a 4xx error, though, then we want to ignore that to_device message from the queue and move on, as that means that something different was fundamentally wrong. This helps to fix the to_device queue clogging up, making clients incapable of sending to_device events anymore, should such clogging happen. (Sorunome)
- fix: Database corruptions by updating FluffyBox (Krille Fear)
- fix: Store the call state, fix the invite cannot be sent. (cloudwebrtc)
- fix: Allow consecutive edits for state events in-memory The lastEvent was incorrect when trying to process an edit of an edit. This fixes that by allowing consecutive edits for the last event. (Sorunome)
- fix: Only save state events from sync processing in-memory if needed If we dump all state events from sync into memory then we needlessly clog up our memory, potentially running out of ram. This is useless as when opening the timeline we post-load the unimportant state events anyways. So, this PR makes sure that only the state events of post-loaded rooms and important state events land in-memory when processing a sync request. (Sorunome)
- fix(ssss): Strip all whitespace characters from recovery keys upon decode Previously we stripped all spaces off of the recovery when decoding it, so that we could format the recovery key nicely. It turns out, however, that some element flavours also format with linebreaks, leading to the user having to manually remove them. We fix this by just stripping all whitespace off of the recovery key. (Sorunome)
- feat: Support for webRTC
- fix: Add missing calcDisplayname global rules to client constructor
- feat: Migrate olm sessions on database migration
- chore: Enable E2EE recovery by default
- fix: Limited timeline clean up on web
- fix: Remove account avatar
- chore: Update FluffyBox
- feat: Add commands to create chats
- feat: Add clear cache command
- feat: Implement new FluffyBox database API implementation
- fix: Workaround for a null exception for a non nullable boolean while user device key updating
- fix: Limited timeline clears too many events
- fix: Ability to remove avatar from room and account
- fix: Request history in archived rooms
- fix: Decrypt last event of a room
- refactor: Remove Sembast database implementation
- feat: Implement sembast store
- fix: HtmlToText crashes with an empty code block
- fix: use originServerTs to check if state event is old
- fix: Dont enable e2ee in new direct chats without encryption support
- fix: Change eventstatus of edits in prevEvent
- chore: Trim formatted username fallback
- fix: Edits as lastEvent do not update
- fix: JSON parsing in decryptRoomEvent method
- fix: Wrong null check in hive database
- fix: crash on invalid displaynames
- chore: Update matrix_api_lite
- feat: More advanced create chat methods (encryption is now enabled by default)
- feat: Make waiting on init db optional
- feat: Add more benchmarks for sync, timeline, init
- feat: Add onInsert, onRemove and onUpdate cb to timeline
- refactor: Move setreadmarker functionality to timeline
- fix: Null error in get own profile
- refactor: Make room in Event class not nullable
- refactor: download method should not return null
Prerelease of the null safety version of the SDK.
- feat: choose memberships returned by requestParticipants()
- refactor: Make SDK null safe
- fix: add room invite update to roomStateBox, so invites don't show empty room when app is restarted
- fix: Do not upload keys after logout
- fix: obay explicitly set ports in mxc URLs
- fix: Unnecessary null check
- fix: Auto update room states
- fix: Missing null check in a nested json map
- feat: Calc benchmarks for hive operations on init
- refactor: Change event status to enum
- refactor: Migrate more files to null safety
- fix: Type error when using CryptoKey in dart web
- fix: events with unknown users having invalid mxids This caused issues down the line where the sender id was assumed to be a valid matrix identifier
- fix: Sent events are sorted in SENDING timeline
- fix: use explicit type in fold instead of cast
- fix: apply review feedback
- fix: missing range check When requesting history the
start
parameter could become larger than the loaded events from the database were, resulting in an error when attempting to request history. - fix: New verification requests on requesting history
- refactor: remove unused clientId
- fix: Add type checkings for User.displayName
fix: Autodetect mime type on file upload
- feat: Add waitForFirstSync parameter to init method
- feat: Add /discardsession command
- fix: Auto-reply key requests
- fix: Room previews not showing replies
- fix: missing content-type when changing avatar
- fix: only/number emotes in a reply
- fix: Delete box if it can not be cleared when calling database.clear() -> This should fix some box corruption problems
- fix: Do not set old events as state events -> This should fix the room list sort ordering bug
- fix: Room.notificationCount set to null sometimes
- hotfix: Key sharing security vulnerability! -> Please upgrade as soon as possible to this version
- feat: MSC2746: Improved Signalling for 1:1 VoIP
- fix: Get direct chat from user ID method crashes on more than one DM rooms with one account
- fix: compilation against newer matrix_api_lite
- refactor: Remove onRoomUpdate stream
- fix: Do not handle sending event updates which are already synced
- revert: Make bytes in EncryptedFile nullable
- fix: Make bytes in EncryptedFile nullable
- fix: Check if database got disposed in keyManager
- fix: Implement dummy transactions for hive
- fix: room account data key/type returned encoded
- fix: Missing null check
- fix: uiaRequests send broken auth object at first try
- fix: Requesting history being funky
- fix: Don't lag when sending messages in big rooms
- feat: Do not load all timeline events from store at once
- feat: Pin invited rooms
- refactor: Replace all logic regarding sortOrder
- refactor: Workarounds for missing mHeroes in rooms
- hotfix: uiaRequests send broken auth object at first try
- hotfix: Send unencrypted thumbnails
- fix: String.parseIdentifierIntoParts not working with unicode matrix.to links Some clients do not uri-encode the identifier for matrix.to links, so we must handle if we can't uri-decode them
- fix: missing null check in hideEdit condition
- fix: missing null check
It seems
device_keys
in the reply of/keys/query
is not required. While synapse always sent it, conduit did not, which resulted in an error.
- fix: room.lastEvent order now respects edits
- feat: use m.new_content in lastEvent (so no more * fallback)
- feat: cache archived rooms to access them with
getRoomById
- fix: requestHistory() for archived rooms
- refactor: Change name of archive getter to function
- hotfix: Opt-out null safety for crypto files because of an error in web
- remove: deprecated moor database (breaking change)
- feat(events): add plain-text body representation from HTML
- feat: get new_content in getLocalizedBody
- feat: Add a way to get a verification request by its transaction id A client might find the need to get the verification request object by its transaction id, to be able to e.g. display for in-room verification an "accept verification request" button easily.
- fix: Correctly parse the reason of a spoiler Previously only the first child node of a spoiler was considered to determine if there should be a spoiler reason. This was, unfortunately, incorrect, as soon as e.g. the reason had more than one space. This is fixed by properly iterating all child nodes to search for the reason.
- fix: Add space states to important events We need the space state events in the important events to be able to differentiate rooms and spaces in the room list.
- feat: Allow specifying extraContent for Room.sendFileEvent, in case clients want to specify some custom stuff
- fix: toDouble was called on null when you had a pinned room
- fix: Typo in key backup requests This may lead to messages not decrypting after interactive verification, which would make the user manually press the request keys button.
- refactor: rename LoginState.logged to loggedIn
- fix: accidental OTK uploads on fakeSync calls
- Breaking API changes duo to use of code generated matrix API
- fix: Missing null checks in syncUpdate handling
- fix: Upload OTKs if the otk_count field is missing
Please note: This removes the isolate code from the SDK to make it compatible with dart web. If
you still want the SDK to execute code in the background to not block the UI on key generation
for example, pass the compute
method from Flutter to your client:
// ...
final client = Client('name...',
// ...
compute: compute,
);
- fix: Add missing null check which made bootstrap fail for newest Synapse release
- fix: Provide a reasonable well-known fallback
- fix: Add locking to sending encrypted to_device messages to prevent potential race conditions
- fix: preserve homeserver port when creating thumbnail URIs
- feat: Add support for nicer mentions
- feat: Add general image pack handling as per MSC2545
- change: Hive database schema (will trigger a database migration)
- fix: Dont migrate database from version null
- fix: Adjust emoji ranges to have less false positives
- fix: Sending of the to_device key
- feat: Make it possible to get the current loginState
- fix: Broken nested accountData content maps
- fix: Mark unsent events as failed
- fix: Pin moor to 4.3.2 to fix the CI errors
- fix: Don't run syncs while the client is being initialized
- change: Replace onSyncError Stream with onSyncStatus
- feat: Implement migration for hive schema versions
- fix: Hive breaks if room IDs contain emojis (yes there are users with hacked synapses out there who needs this)
- feat: Also migrate inbound group sessions
- refactor: Move pedantic to dev_dependencies
- chore: Update readme
- fix: Migrate missing device keys
First stable version