Foam 1.0.7
A lot of work on fixing bugs where emotes and badges don't render, height estimation issues in the chat while scrolling, and the phone getting warm when watching streamers with an extremely busy chat
Every row can carry badges, paints, and multiple animated emotes. If each row decodes its own copy, or a shared cache drops a reference while the row is still mounted, you would see blank areas in the chat.
Persistence was part contributing to this problem. A hot chat write should not re-serialize a large cold cache on every message. Splitting and shrinking that blob keeps MMKV and Legend State from taxing every IRC event.
I wrote more about the image side of this earlier: Optimising expo-image for Foam. More of that approach landed in the production chat path here.
What's Included
- One emote pipeline instead of several overlapping paths.
- Decode-once image handling with a single URL decision point.
- Smaller persisted chat state, with hot writes kept out of the cold blob.
- Synchronized animated emote frames across visible rows.
- Fixes for blank emote and badge slots under memory pressure.
- Legend List render-range and row-size bucketing fixes for blank spacing holes.
- Usernotice messages render instead of getting dropped.
- Player resume and re-attach when the app comes back from background.
- iOS native-feel polish restored after a short revert and stabilize cycle.
- Emote sheet load freezes addressed, including pausing animated decode when it should not be running.