Implement Threaded Unread Handling
Based on the feature specification from #478 (closed), this ticket is for the actual implementation of this feature.
When the user scrolls the forum list, visible unread entries will be marked read after playing their animation. The unread counters on the two floating buttons are updated accordingly. If the user presses the floating button, the list scrolls to the nearest unread message in that direction which plays its animation. While the list scrolls, no messages that are passed will be marked as read.
When a new message arrives, the counters are updated accordingly when the new message is not visible in the current viewport. If it is visible, its animation plays and it is marked as read. If the message arrives in a closed thread, the root message has an unread counter signaling the availability of unread messages in that thread.
If there are no more unread messages in one direction, the respective floating button will be hidden.
When the user opens the forum next time, the list should scroll to the most recently read message (easy to implement via MessageTracker). It's a good compromise between taking the user somewhere familiar, and taking her to the latest content. But scrolling to the first unread message, as we've discussed previously, would also be reasonable.