* Allow the AppIconBanner tool to be called with purely the build number.
And use that for the Element Pro Nightly.
* Use a build setting to determine Nightly builds.
* implement a MediaView to delegate at the view level the usage of the content scanner service, to determine how to render the media.
* fix for a small design mismatch
* fix for greedy error state
* updated naming
* just making some screenshot that have been affected by a string change on Localazy
* pr suggestions + updated strings
* implemented content scanning in the timeline reply view
* pr suggestions
* implement a MediaView to delegate at the view level the usage of the content scanner service, to determine how to render the media.
* fix for a small design mismatch
* fix for greedy error state
* updated naming
* just making some screenshot that have been affected by a string change on Localazy
* pr suggestions + updated strings
- Drop the redundant searchService coordinator/view model parameter; derive it from the client proxy.
- Rename the globalSearch avatar size to search.
- Lift the query observation streams out of their tasks.
- Restore the appeared and updateVisibleRange comments.
- Use CompoundIcon defaults and a scaledFrame for media previews.
- Simplify the result mapping with compactMap(makeResult) and drop unsupported events by returning nil.
- Move the preview helpers beneath the previews.
The SDK now surfaces polls, stickers, redactions and live location shares
alongside plain messages. Map them to their preview content instead of
dropping them as unsupported events.
Split global search into Rooms and Messages tabs. The Messages tab lists
matching events with the room's name and avatar, a sender-prefixed preview,
rich media (image/video/audio/file) previews, and a loading indicator, then
paginates as you scroll. Queries are debounced and the previous one is
superseded so late results can't clobber a newer search.
Wrap the SDK's SearchService in a SearchServiceProxy that publishes typed
message results and paginates on demand, expose it on the ClientProxy, and
enable the search index store on the session. Also opens up the timeline item
factory's message content builder so the proxy can reuse it.
* implemented the content scanner service with caching and a way to use in the state store context
* fix swiftformat comment enforcing
* pr suggestions
The Observation migration (2d486ece3) ported the preview fulfillment loop
from Combine publishers to async sequences but didn't carry over the
publisher path's 1s timeout. Without it, a preview whose expected state never
arrives loops forever.
* Stop reserving space for the non-existant icon background in ListRowLabel on iOS 26.
* Use the .avatar label style for NotificationSettingsEditScreenRoomCell.
* Fall back to the AppLock PIN code when there's no passcode.
* Add extra tests on the LinkNewDeviceFlowCoordinator.
* Misc tweaks for clarification.
* Regenerate snapshots.
* Limit conversations a message can be forwarded to
* Review fixups
* fix: remove the unused constant argument
---------
Co-authored-by: Mauro Romito <mauro.romito@element.io>
* use observation in unit and preview tests instead of the async stream
* use a parsing approach that is independent of the sourcery annotation
* Fix observation deferred fulfillments not receiving the initial value
Observation's observe only emits transitions, not the value present at subscription time. Drop the leading initial value from the affected transitionValues sequences and assert it directly with #expect instead.
* improved docs
The call-from-Recents handling was wired entirely to the deprecated
INStartVideoCallIntent (the activity-type registration and the cast), which
also meant the app never handled the modern INStartCallIntent that superseded
it in iOS 13. Switch both to INStartCallIntent and derive isVoiceCall from its
callCapability. Clears the deprecation warning.
PostHog deprecated `init(apiKey:host:)` in favour of `init(projectToken:host:)`.
The project token is the same value as the old API key, so this is a label-only
swap with no behaviour change.
`NSMutableAttributedString.enumerateAttribute(_:in:options:using:)` runs its
closure synchronously on the calling thread and its `using:` parameter isn't
`@Sendable`. The explicit `@Sendable` on the closure literals was therefore
unnecessary and was the only thing triggering the "capture of non-Sendable
NSMutableAttributedString" and "mutation of captured var in concurrently-
executing code" warnings. Removing it clears all six with no behaviour change.
homeserverReachabilityPublisher now reports unreachable while suspended so media loading parks instead of failing against a closed store. The reachability banner was keyed off the same publisher, so pausing the client would surface a spurious "Server unreachable" message.
Expose a separate homeserverConnectivityPublisher derived from the sync service state alone (it stays reachable while suspended) and key the banner off that, keeping the suspend-aware publisher for gating work that needs an open store.
`homeserverReachabilityPublisher` was driven directly by the sync service state so stopping sync on pause still reported .reachable. MediaProvider.loadImageRetryingOnReconnection would then retry against a closed store, fail, and bail out permanently because it treated the reachable state as a non-recoverable error.
Make reachability a function of both the desired service state and the latest sync state, computed in one place: store the sync state in the listener and recompute reachability from it, reporting unreachable whenever the client isn't meant to be running. Recompute on suspend and on resume.