A recent change made us wait for the category to be loaded before
constructing the Timeline, to know if we should preload it.
However the timeline property of Room assumes that there is always a
timeline available after the construction, which was not true anymore.
So we construct the Timeline during construction again, and use a
property to preload it when both the category and the matrix timeline
are ready.
Fix the position when removing the last item, and when truncating the
list.
Also add a check that we are removing the proper event from the map, in
case we have created the same event several times.
With the context, the string change breaks the string freeze, and it is
not necessary since it has the same meaning as the other string with the
mnemonic.
It seems that sometimes the GtkListView does nothing when we are
notified that its size has changed and we request to focus its last
child.
It might be because the size is allocated before the child is ready, so
we delay the request.
Try to be smarter about what we are doing when we get signals from the
vadjustment.
We can ignore the upper and page-size signals when we are already
auto-scrolling, since trying to scroll more will just result in even
more signals later.
Only focus the last child once, then rely on scrolling to the end to
make sure that we are at the bottom.
It is expected that we will not be able to access most of the room state
so do not try to load everything and reduce the logging level when a
permission error happens in those states.
Those are the categories that the user is most likely to visit.
Also we should not preload the timeline for categories where we do not
offer to view it.
That way we can benefit from improvements upstream.
This also simplifies the camera API in the process by using a trait
instead of a subclassable GObject.
Moving away from the SSO term allows us to transition seemlessly towards
OIDC.
Adding a "Continue" button avoids to surprise the user by opening a URL
without warning.
Fixes SSO identity provider login in the process.
The previous code wrongly assumed that only updated items could be
inserted in the optimized diff.
Now instead of rebuilding `VectorDiffs` we update items as we process
the diff and only handle removals or insertions after that.
It requires a few changes during login to only offer SSO when OIDC
compatability is detected,
and most actions that require UIAA in account details must now occur
in the account management UI of MAS.
A recent change in the SDK made them less optimized than before,
it creates jumps in the room history when sending a message.
We try to work around that by optimizing the batch ourselves.