* Introduce a `TimelineItemThreadSummary` object to hold details about threads starting from that particular item
This patch introduces a thread summary object that will be available on main timeline messages that are the root for a given thread.
It currently provides the latest message content and sender for that thread but it will grow to provide info on the number of replies, unreads etc.
It also add a new UI component called `TimelineThreadSummaryView` that makes use of this data and is in turn used by the bubbled styler to render it in the timeline.
The rest of the PR is about refactoring on the `RoomTimelineItemFactory` so that replies and thread summaries use similar paths and builders.
* Add a feature flag for threads
* Address PR comments
* Converge on single implementation for message previews
* Bump the RustSDK to v25.04.09
* Adopt new MsgLike based timeline item structure.
* Move the `replyDetails` and `isThreaded` to the `RoomTimelineItemProperties`
* Restructure the TimelineItemFactory
* Fix line length warning
* Rename `msgLikeContent` to `messageLikeContent` wherever possible.
* Move the `EventTimelineItem` mocks to the SDK mocks folder.
* Use the new TimelineMediaPreview modifier on the room and pinned timeline screens.
* Use the same presentation logic for all timeline media previews.
* Fix a bug with the detection of the timeline end.
* Send pagination requests from the media preview screen.
* Add SwiftLint to the Danger workflow (it is no longer installed on the runner).
* Put SwiftLint back on all of the GitHub runners too.
* Set the function_parameter_count lint rule to 10.
* Make sure to clean-up any previews when the coordinator is done.
* Handle the viewInRoomTimeline action more appropriately.
* WIP RequestToJoin struct
* implemented the logic to display the cells
* knock request banner accept flow
* mark all knocks as seen implemented
* details logic
* implemented accept, decline and ban in the list
* added a loader and modified the stacked view
of the banner
* pr suggestions
* updated naming and loading strings
* added the initial loading state
improved code and the tests
* updated a string that has changed
* code improvement
* tests for the room screen view model
* room details tests
and improved the knock requests tests for the room screen
* knock requests list tests
* added error state alerts with retry
* struct has been renamed on the sdk
so I renamed it also on the app side
* update SDK
* Move the voice message views to where they belong
* Add separate struct for each media events timeline view
* Add support for all the different media gallery message types and get the files section working
* Fix the order of the items in the media grid.
* Add media gallery timeline separators.
* Change the `SeparatorRoomTimelineItem` to have it expose a Date timestamp instead of a text string.
* Introduce a `MediaEventsTimelineFlowCoordinator`
* Update SDK API and architecture
* Add a feature flag, add translations
* Move the media events timeline presentation under the room flow coordinator state machine
* Rename `TimelineViewState.timelineViewState` of type `TimelineState` to `timelineState`
* Enabled SwiftLint's `trailing_closure` rule and fix the warnings.
* Use a Date for the timestamp in all timeline items.
* UI test snapshots.
* Update snapshots
---------
Co-authored-by: Stefan Ceriu <stefanc@matrix.org>
* Add timeline item action for copying a media caption.
* Fix the action colours when long pressing a timeline item.
Nice side effect: Reasonable sized buttons when button shapes are enabled.
* Re-arrange the Timeline Item Menu.
* Add timeline item menu snapshots for media items.
* Update the File/Audio captions layout to match Figma.
* Fix caption sizing issues.
The send info label was being added incorrectly.
* Update icon size and regenerate snapshots.
* Fix a regression in the location timeline item layout.
* Enable local echoes for media uploads on development builds.
* Use media sizes when loading timeline items so they can take advantage of the cached local echo data.
* Adopt new reaction toggling API introduced in matrix-org/matrix-rust-sdk/pull/4127
* Adopt the changes introduced in matrix-org/matrix-rust-sdk/pull/4111: use the new `TimelineUniqueId` type instead of `String` for unique timeline identifiers.
* Bump the RustSDK to v1.0.58.
* Fix unit tests
* Update the SDK.
* Fix API breaks on send failures and propagate the new type.
* Handle new SDK ShieldState.
* Set up the ClientBuilder's `cachePath` option.
* Delete the cacheDirectory during logout/clearCache.
* Add unit tests for RestorationToken decoding and SessionDirectories generation.
* Reorder some properties.
No code changes.
* Refactor TimelineItemSendInfo out of the styler.
* Add (unused) examples of encryption shields.
* Rename file.
* Refactor the timeline item menu action provider.
- Move it into its own struct.
- Use an item, not an ID so it doesn't randomly change.
- Move permissions into the room screen view model.
* Use the stable ID when redacting/editing/forwarding a message.
Just like we do when fetching the item in the actions menu.