frosty/lib/screens/channel/chat/stores/chat_store.dart

1620 lines
57 KiB
Dart
Raw Normal View History

import 'dart:async';
import 'dart:convert';
import 'package:firebase_crashlytics/firebase_crashlytics.dart';
import 'package:flutter/material.dart';
v5 (#463) * migrate to dio * ignore folders * simplify twitch api headers handling * clean up main * simplify logs * optimize profile picture fetching fixes refetches on tab switch * update claude md * refactor irc.dart * update copilot instructions with essential commands and project structure details * implement message sending state management and UI updates * refactor notification handling and add copy-paste functionality in chat * refactor AlertMessage to support vertical layout and optional padding * refactor error messages for consistency and clarity across various components * refactor chat layout to use draggable divider and improve chat width settings * refactor Uptime widget to use SharedTimerService for synchronized updates * refactor search results components to handle null future states gracefully * refactor loading indicators to use skeleton loaders for improved user experience * refactor UI components for improved layout and responsiveness, enhance skeleton loaders, and streamline padding adjustments * refactor: replace manual blur effects with BlurredContainer for consistency and reusability * refactor: enhance JavaScript execution and error handling in WebView components * refactor: replace app bar with blurred container for improved UI consistency across screens * refactor: streamline video chat layout and enhance PiP drag gesture functionality * revert some app bar changes * refactor: implement Picture-in-Picture drag functionality in VideoChat * refactor: pass currentChannelId to IRCMessage and ChatMessage for improved context * fix large thubmnail width * chore: update Gradle and Kotlin plugin versions for improved compatibility * changes from v4.10.0 branch * feat: integrate AnimatedScrollBorder for improved UI responsiveness across various screens * refactor: update SectionHeader styling and improve theme management * feat: add pinned section to StreamsList and enhance skeleton loader padding * feat: add repository guidelines for project structure, coding style, testing, and security * feat: enhance StreamCard UI with BlurredContainer and adjust border width in theme * feat: implement unfocusInput and safeRequestFocus methods to manage text field focus behavior * feat: enhance Picture-in-Picture drag interactions with haptic feedback and smooth animations * refactor: improve code formatting and readability across multiple files * feat: implement picture-in-picture mode toggle and state management for video playback * feat: reset PiP mode state when pausing video playback * feat: add custom app bar with profile picture and stream info for video chat * feat: convert multiple settings screens to use StatefulWidget and add animated scroll borders * feat: update blur configuration for adaptive alpha based on theme * fix: adjust default font size in SectionHeader widget * feat: enhance PiP mode with drag overlay instruction and UI improvements * fix: improve badge rendering with consistent margin and border for current channel * refactor: replace BackdropFilter with BlurredContainer for improved clarity and maintainability * fix: reduce background transparency in Uptime widget for better visibility * feat: enhance photo view dialog with full resolution toggle and blurred background * fix: reset chat delay to 0 when auto sync is enabled and update settings title for clarity * fix: adjust border width in theme to improve consistency * feat: add forceDarkMode option to BlurredContainer for improved theme adaptability * feat: implement offline followed channels feature with UI integration and settings option * fix: increase font size and weight for offline status text for better readability * feat: remove offline pinned channels feature and update related UI components * feat: optimize offline channels loading behavior based on expansion state * fix: improve clarity and consistency in repository guidelines formatting * feat: update full resolution URL handling and button visibility logic * feat: replace app bar with blurred version in chat-only mode and add animated scroll border * feat: refactor video chat layout for improved chat and video display in landscape mode * feat: remove bottom bar visibility setting and adjust chat layout accordingly * fix: simplify condition for displaying offline channels section in following tab * feat: enhance reply thread display with indentation and reply icon * feat: implement showModalBottomSheetWithProperFocus for improved focus handling * feat: add gradient direction support to BlurredContainer for enhanced visual effects * feat: enhance NavigationBar and Theme settings for improved visual consistency * feat: add gradient direction support to BlurredContainer in VideoChat for enhanced visual effects * chore: update .gitignore to include .cursor file for better environment management * fix: update PiP drag gesture conditions to include video paused state for better user experience * refactor: replace ScrollController with SettingsPageLayout in settings screens for improved layout management * refactor: centralize orientation handling by introducing OrientationUtils for improved readability and maintainability * refactor: replace OrientationUtils with ContextExtensions for streamlined context-based access to theme, layout, and API dependencies * refactor: improve video chat UI by adjusting title layout and adding stream info tooltips for better user experience * refactor: adjust titleSpacing in theme and navigation components for improved layout consistency * refactor: update stream info timer handling and overlay management for improved UI responsiveness * refactor: enhance stream info timer logic and overlay visibility management for chat-only mode * refactor: enhance input decoration theme in FrostyThemes for improved visual consistency and responsiveness * refactor: adjust inputDecorationTheme padding in FrostyThemes for improved visual consistency * refactor: enhance video overlay management by including video preview overlay in hideElements for improved UI consistency * refactor: improve chat bottom bar padding and video chat layout for enhanced UI consistency * refactor: adjust chat padding to account for device bottom insets for improved layout consistency * refactor: update text styles in FrostyThemes for improved visual consistency across UI components * refactor: update iOS minimum deployment target to 13.0 for improved compatibility * refactor: adjust chat bottom padding based on emote menu visibility for improved layout consistency * refactor: adjust padding values in StreamsList for improved layout consistency * refactor: replace Padding with AnimatedPadding in Chat for smoother layout transitions refactor: replace Container with AnimatedContainer in BlurredContainer for smoother animations * refactor: remove unnecessary radius property from ProfilePicture in OfflineChannelCard for cleaner code * refactor: enhance chat bottom bar suffix icon to display message delay with tooltip for improved user experience * refactor: update hint text and tooltips in chat bottom bar and search for improved clarity * refactor: simplify notification display logic and enhance chat input behavior for improved user experience * refactor: enhance layout consistency by adjusting spacing in various components across the channel and home screens * refactor: introduce LiveIndicator widget and adjust spacing in channel and video components for improved layout consistency * refactor: remove monospace font family from chat bottom bar for improved text rendering * refactor: reduce notification animation duration and change dismiss direction for improved user experience * refactor: replace VideoBar with StreamInfoBar in video components for improved layout and consistency * refactor: adjust font sizes and spacing in StreamInfoBar for improved layout consistency * refactor: standardize font sizes and update gradient stops in video components for improved visual consistency * refactor: update tooltip padding and background color in theme for improved visual consistency * refactor: enhance tooltip behavior and standardize font sizes in StreamInfoBar and related components for improved visual consistency * refactor: add showThumbnail option to LargeStreamCardSkeletonLoader for improved layout flexibility * refactor: add StreamInfoBarSkeletonLoader for improved layout consistency in stream components * refactor: add shadow effects to icons and text in StreamInfoBar and VideoOverlay for improved visual depth * refactor: update defaultOverlayOpacity to 0.0 for improved overlay behavior * fix: correct stream info text color on overlay * refactor: implement a new color picker dialog with random color generation for enhanced user experience * refactor: adjust gradient colors and stops in VideoOverlay for improved visual consistency * refactor: refine gradient colors and stops in VideoOverlay for enhanced visual clarity * refactor: add isCompact parameter to StreamInfoBar for responsive text sizing * fix: update tooltip background color to use surface color for better contrast * feat: add shared chat mode support in chat store and update StreamInfoBar for visual indication * refactor: disable debug print for IRC messages to reduce log clutter * feat: implement chat color selection feature with user color management in chat settings * refactor: replace color adjustment logic with new contrast-aware utility for chat names * refactor: simplify chat details UI by replacing list tiles with action cards and removing unused clear dialog * refactor: enhance chat details UI by improving time formatting and adding label styling to action cards * refactor: update chat color terminology to 'Username color' for clarity in UI * refactor: enhance chat details UI by introducing active chat modes display and improving layout structure * refactor: improve chat details layout by replacing ListTile with Padding and adding a Divider for better visual separation * refactor: remove chat notifications positioning setting and adjust notification alignment in video chat * refactor: streamline StreamInfoBar component by consolidating offline handling and improving layout for better readability * refactor: enhance StreamInfoBar by adding tooltip for streamer name and improving text overflow handling * refactor: adjust tooltip display duration in StreamInfoBar and update theme configuration * refactor: adjust margin and padding in StreamCard for improved layout consistency * chore: update dependencies in pubspec.yaml and pubspec.lock for Firebase and other packages * template * chore: update iOS platform version to 15.0 and Firebase dependencies to 12.2.0 * refactor: simplify StreamInfoBar layout by reducing nested widgets and improving text color handling * format * feat: enhance Channel model and StreamInfoBar to support offline channel details * feat: add offline indicator and improve StreamInfoBar layout for better offline channel display * fix: adjust icon color opacity in StreamInfoBar for improved visibility * feat: enhance dismissal animation in FrostyPhotoViewDialog to track swipe direction * docs: update copilot instructions for clarity and additional error handling details * refactor: optimize latency tooltip layout and improve offline indicator styling in VideoOverlay * feat: implement shared chat asset fetching and participant management in ChatAssetsStore * refactor: replace Observer with Builder for improved widget rebuilding in VideoOverlay * refactor: update StreamInfoBar border styling and adjust layout in VideoOverlay for improved visual consistency * feat: add showTextShadows property to StreamInfoBar for customizable text shadow display * refactor: adjust layout in VideoOverlay by adding padding to improve spacing and visual consistency * refactor: enhance VideoOverlay gradients and layout for improved visual hierarchy and user experience * refactor: reduce vertical padding in VideoOverlay for improved layout consistency * refactor: remove overlay opacity settings from VideoSettings and SettingsStore for simplification * refactor: improve text overlay transition in VideoChat for better user experience * Revert "refactor: improve text overlay transition in VideoChat for better user experience" This reverts commit fd16ff5ec30ec266157e5c8a9d4a6090c91717f6. * refactor: wrap videoOverlay in ColoredBox for improved layout handling * refactor: optimize animation duration and transition curves in VideoChat for smoother interactions * refactor: dispose searchScrollController in HomeStoreBase to prevent memory leaks * refactor: simplify gradient definitions in VideoOverlay for improved readability and maintainability * refactor: remove 'Offline' text overlay from VideoOverlay for cleaner UI * refactor: add refresh functionality for assets in ChatDetails with loading indicators * refactor: update visibility conditions for uptime, viewer count, and category display in StreamInfoBar * refactor: replace AlertDialog with FrostyDialog for consistent dialog styling across the application * refactor: enhance layout handling in FrostyPageView to prevent overflow during height transitions * refactor: replace ColorPickerDialog with AccentColorPickerDialog for improved color selection experience * refactor: replace theme and accent color settings with dedicated components for improved modularity and readability * refactor: replace ElevatedButton with TextButton for consistent button styling across dialogs * refactor: integrate MobX Observer for reactive state management in settings widgets * refactor: update theme and dialog components for improved styling and consistency * refactor: enhance dialog styling with rounded corners and border in theme configuration * refactor: improve dialog messages for unauthorized access handling * refactor: update bodyLarge text style in theme configuration to include font weight * refactor: standardize Divider usage and adjust theme styles for improved consistency * refactor: adjust Divider properties and theme styles for enhanced visual consistency * chore: remove GEMINI.md file as it is no longer needed for project documentation * refactor: enhance token validation and reconnect logic in AuthBase for improved error handling * format * refactor: integrate landscape cutout settings into VideoChat layout for improved responsiveness * refactor: implement app lifecycle handling in VideoChat and enhance stream info update logic in VideoStore * refactor: update landscape cutout conditionals in VideoChat layout for improved responsiveness * update AGENTS.md * add scrollbar to search * fix scrolling exception * update CLAUDE.md * 5 auth reconnect attemps then log out * increase reply max lines to 2 * simplify and improve reply formatting * add prime icon * better draggable divider * support draggable divider in fullscreen overlay chat * add text shadow in fullscreen chat overlay mode * format * add landscape checks * video store optimization attempts * Dispose WebViewController and remove JavaScript channels properly * Track and cleanup all MutationObservers to prevent accumulation * Throttle latency updates to once per 5 seconds (reduces CPU load) * Add timeout protection and null checks for robustness * Prevent duplicate event listeners on page reloads * double tap divider to reset * Revert "video store optimization attempts" This reverts commit b1df7b0de473543283211a489dca698d9d241857. * optimize video store attempt 2 * Revert "double tap divider to reset" This reverts commit aeb26a433500ec71f822794835e927018ee59e1e. * optimize latency listener to open the menu and check every 20 secconds * more optimizations * hard refresh * abbreviate latency * fix lint * improve hide default overlay * fix chat no longer reconnecting with chat delay * refine chat alerts * fix historical message missing badges and emotes on initial connection * parallelize * revert * add reconnect button inline action * refactor: replace Scrollbar with FrostyScrollbar across chat and settings screens for consistent styling * tweak chat details menu * add scrollbar to release notes, renames for consistency * fix duplicate message case * fix chat delay alerts in auto sync mode * add regex for numeric strings and enhance display name formatting logic * exterminate borders * refactor: simplify active chat modes display in chat details screen * feat: enhance chat input button with delay notification and disable state * fix: wrap chat in SafeArea to prevent UI overflow issues * refactor: remove divider line from video chat and update draggable divider visibility logic * persist overlay in pip mode * fix: update chat delay handling and notifications in chat bottom bar * fix: update chat overlay visibility logic to respect fullscreen settings * tap to show deleted message * fix: prevent accidental chat scrolling when accessing system UI in landscape mode * show latency in portrait * fix: enhance chat delay notifications with dynamic delay time * docs: update CLAUDE.md for improved environment variable instructions and architecture overview * fix: improve chat delay countdown management and message handling * add preliminary release notes * remove agents.md * update lockfile * add initial multi chat feature * add option to persist multi chat tabs * add remove confirmation dialog * improve add chat design * lazy-load tabs * create global assets store to dedupe global asset fetching * improve tab design/styles * update notes * use frosty dialog * update claude md * tweak * add ability to reorder tabs * resolve conflict * merge cleanup * format * update release notes * add chat delay sync completion tracking to prevent countdown re-appearance * add tests * fix * update release notes * bump
2026-01-01 22:28:17 -05:00
import 'package:flutter/services.dart';
import 'package:frosty/apis/twitch_api.dart';
import 'package:frosty/models/badges.dart';
2022-01-15 15:46:46 -05:00
import 'package:frosty/models/emotes.dart';
import 'package:frosty/models/events.dart';
2022-01-16 12:39:20 -05:00
import 'package:frosty/models/irc.dart';
import 'package:frosty/screens/channel/chat/details/chat_details_store.dart';
import 'package:frosty/screens/channel/chat/stores/banned_user_tracker.dart';
import 'package:frosty/screens/channel/chat/stores/chat_assets_store.dart';
import 'package:frosty/screens/channel/chat/stores/chat_interaction_pause.dart';
feat(chat): add bubbles for shared chat participant channels (#581) * feat(chat): add bubbles for shared chat participant channels Twitch's native shared chat previously had no way to interact with participant channels the way manually-added chats work. Adds per-participant bubbles alongside manual tabs: tapping one spotlights that channel (fading the rest), hiding one filters its messages from the feed entirely. Defaults to unfaded, resets on rejoin (fresh ChatStore per connect). Manual "merged mode" fading is untouched and unaffected. * refactor(chat): dedup shared-chat tag lookup and extract fade policy - add IRCMessage.sourceChannelId, replacing three copies of the same source-room-id/room-id tag lookup - move the shared-chat spotlight/merged-mode fade decision out of ChatMessage's build into ChatStore.shouldFadeMessage, matching the extract-into-store convention already used for SharedChatBubbleState - factor the tab-bar item's Padding/Center wrapper into a shared _wrapItem helper instead of duplicating it per branch * fix(chat): don't spotlight a hidden shared-chat bubble toggleFocus didn't check hiddenChannelIds, so tapping a hidden bubble's chip added it to the spotlight set — fading every other participant to showcase a channel whose own messages were already filtered out of the feed. * fix(chat): stop shared-chat detection flapping on system messages _isInSharedChatMode was recomputed from every PRIVMSG/NOTICE/USERNOTICE, but only PRIVMSG reliably carries source-room-id for a session's duration. A sub/raid/announcement without the tag would flip the flag off and back on within a single live session. Previously this only risked a redundant asset refetch (already guarded); now the shared chat bubble bar reads the flag directly, so a flap would visibly collapse and reopen it. Scope detection to PRIVMSG only.
2026-07-03 00:16:49 -04:00
import 'package:frosty/screens/channel/chat/stores/shared_chat_bubble_state.dart';
import 'package:frosty/screens/settings/stores/auth_store.dart';
import 'package:frosty/screens/settings/stores/settings_store.dart';
import 'package:frosty/utils.dart';
2021-10-01 00:08:19 -04:00
import 'package:mobx/mobx.dart';
feat(video,chat): native player, ad-break awareness, chat send/delay reliability, and tab redesign (#567) Squash-merge commit. Covers four areas: native video player, chat reliability, multi-tab, and hardening. ## Native video player - Direct HLS playback via `better_native_video_player` (forked from `plug-and-pay/flutter-native-video-player`, patched on `frosty-patches` branch) - Twitch GQL playback token fetching with platform cookie extraction (iOS Swift + Android Kotlin plugins) for authenticated streams - Quality selection (source, 720p, 480p, 360p, 160p, audio-only) persisted per channel - Picture-in-picture: iOS automatic inline PiP, Android auto-PiP on API 31+ guarded against older devices - Latency polling, chat latency sync, stall detection/recovery, startup auto-pause recovery, watchdog timers - **Twitch stitched-ad break detection** (HLS `EXT-X-DATERANGE`) on both platforms, emitting `adBreakChanged` so the host suspends latency/stall recovery and chat sync during ads (program-date-time is unreliable then). Matches `CLASS="twitch-stitched-ad"` / `ID="stitched-ad-"` **and** the `X-TV-TWITCH-AD-*` attribute prefix (the durable signal streamlink/yt-dlp use) - Shared `VideoPlayerInterface` so WebView and native paths are interchangeable via settings toggle - `PlaybackAccessToken` model, `TwitchGqlApi` client ## Chat delay & send reliability - **Optimistic send-finalize**: Twitch acks a sent message with a per-PRIVMSG USERSTATE (not an echo), which it can intermittently drop — more so under a long chat delay. A missing ack no longer shows a false "message may not have been sent" error; the send is finalized optimistically (local echo rendered), and only genuine rejection NOTICEs surface an error. Ack timeout scaled by the chat delay. - **Per-line chat-delay bypass**: control/state lines (USERSTATE/ROOMSTATE/GLOBALUSERSTATE), rejection NOTICEs, the reconnect notice, and untagged server lines bypass the delay so send-acks and PONGs aren't stalled; only displayable chat content is delayed, staying in sync with delayed video. - **Measured chat bottom-bar height**: the message list reflows to the composer's real measured height, fixing the input overlapping messages when a long message expands it (replaces a fixed-constant estimate). - IRC tag parsing handles valueless and escaped tags per the IRCv3 message-tags spec (fixes a recent-messages RangeError on certain tags). ## Chat / multi-tab - Redesigned tab chips: unread dot indicator, chips dim until WebSocket connects - Animated tab options popover replacing `MenuAnchor` (no animation hook in Flutter 3.44) - Simplified `ChatTabs` from `StatefulWidget` to `StatelessWidget` - Focus-current-channel fade bump to 0.55; section-header alpha lifted to match the muted-label tier - `addTab` now calls `setActiveTab` to snapshot outgoing tab's `lastSeenMessageId` — fixes spurious unread dots after adding a tab - `onActivateSourceTab` threaded into `ChatUserModal` so Reply in merged mode switches to the correct source tab's composer ## Bug fixes and hardening - **Reverted the experimental iOS low-latency mode** (5s live-edge join + 1.05x catch-up): AVPlayer can't sustain <~18s on Twitch (declared `TARGETDURATION:6` paces playlist refreshes), and the offset starved the buffer into pause-on-launch. Default join distance restored. - Fork (Android): **cap `BEHIND_LIVE_WINDOW` recovery** so a stream repeatedly falling off the live window can't silently re-prepare forever; emits `error` on exhaustion so the host recovery ladder takes over - Guard all Android `setAutoPipMode` calls with `_autoPipAvailable` — prevents `PlatformException` on Android 8–11; check `_disposed` after `isAutoPipAvailable` await to prevent post-dispose auto-PiP re-enable - Remove `_isInPipMode` guard from `_onPaused` so `_paused` tracks actual state, fixing PiP play/pause toggle getting stuck - Tighten iOS cookie domain check to exact `twitch.tv` / `.twitch.tv` suffix - Invalidate the stored web session token when Twitch rejects it with a 401 (profile card flips back to unlinked; future loads skip the doomed authenticated request), and re-extract the cookie on launch when logged in without a linked session - Send `play_session_id` and `player_backend=mediaplayer` to Usher, matching the web client / streamlink - Fork (iOS): restore program-date-time latency measurement (a prior rev measured distance to the manifest edge, reading ~0s and silently disabling high-latency recovery / chat-delay auto-sync); release platform views on dispose (per-stream view + AVPlayerViewController leak), track the observed AVPlayerItem for KVO removal (sibling-view crash), main-thread seek results, resolve superseded load futures - Fork (Android): clean up method handlers orphaned by PiP-time view disposal (leaked audio-focus listeners), drop the live-offset re-anchoring seekTo on metadata updates (latency creep), restore pre-duck volume, respect user pause in the stall watchdog, resolve superseded load futures - Deep review pass: expire the quality-switch flag so stall recovery isn't disabled for the session, cap latency-driven recovery (clock-skew loop), generation-guard the error overlay, two-strike offline confirmation, controller null-safety on quality switch - Tighten `/me` local-echo match (no longer renders `/meow ...` as an action); clear pending send text on disconnect ## Web / docs - Remove stale Cloudflare Images binding from `wrangler.jsonc` (covered by `images.unoptimized: true`) - Correct `web/AGENTS.md` Cache Components claim (feature not enabled) - Repo and agent config cleanup ## Test plan - [x] `flutter analyze` — clean (frosty + plugin lib) - [x] `flutter test` — 319/319 pass (adds `ChatLatencySync`, `StreamInfoPoller`, video timing invariants, `PlaybackAccessToken`, IRC tag parsing) - [x] Android plugin Kotlin compiles against the bumped fork rev - [ ] Native player plays live streams on iOS and Android - [ ] Quality switching works and persists across channel reopens - [ ] PiP enters/exits correctly; pause/resume toggle in PiP window works - [ ] Audio-only mode does not crash on Android < API 31 - [ ] Sending under a long synced chat delay no longer shows a false "may not have been sent" error - [ ] Long composer text reflows the message list (no input/message overlap) - [ ] Multi-tab: adding a tab does not mark previous tab as unread - [ ] Merged chat: Reply from user modal targets the correct tab's composer 🤖 Generated with [Claude Code](https://claude.com/claude-code)
2026-06-13 17:06:24 -04:00
import 'package:web_socket_channel/io.dart';
import 'package:web_socket_channel/web_socket_channel.dart';
2021-10-01 00:08:19 -04:00
part 'chat_store.g.dart';
/// The store and view-model for chat-related activities.
class ChatStore = ChatStoreBase with _$ChatStore;
2021-10-01 00:08:19 -04:00
abstract class ChatStoreBase with Store {
/// The total maximum amount of messages in chat.
static const _messageLimit = 5000;
/// The maximum amount of messages to render when autoscroll is enabled.
static const _renderMessageLimit = 100;
/// IRC commands that should bypass chat delay.
/// These are confirmations/state updates rather than chat messages to sync.
static const _delayBypassCommands = {
'USERSTATE',
'GLOBALUSERSTATE',
'ROOMSTATE',
'NOTICE', // Rejection notices need immediate feedback
};
/// NOTICE msg-id values indicating message was rejected (from Twitch IRC docs).
/// https://dev.twitch.tv/docs/irc/msg-id/
static const _rejectionMsgIds = {
// Rate limiting
'msg_slowmode',
'msg_ratelimit',
'msg_duplicate',
// User restrictions
'msg_banned',
'msg_timedout',
'msg_channel_blocked',
'msg_suspended',
// Room mode restrictions
'msg_emoteonly',
'msg_subsonly',
'msg_followersonly',
'msg_followersonly_followed',
'msg_followersonly_zero',
'msg_r9k',
// Verification requirements
'msg_verified_email',
'msg_requires_verified_phone_number',
// Moderation
'msg_rejected',
'msg_rejected_mandatory',
'msg_bad_characters',
};
feat(video,chat): native player, ad-break awareness, chat send/delay reliability, and tab redesign (#567) Squash-merge commit. Covers four areas: native video player, chat reliability, multi-tab, and hardening. ## Native video player - Direct HLS playback via `better_native_video_player` (forked from `plug-and-pay/flutter-native-video-player`, patched on `frosty-patches` branch) - Twitch GQL playback token fetching with platform cookie extraction (iOS Swift + Android Kotlin plugins) for authenticated streams - Quality selection (source, 720p, 480p, 360p, 160p, audio-only) persisted per channel - Picture-in-picture: iOS automatic inline PiP, Android auto-PiP on API 31+ guarded against older devices - Latency polling, chat latency sync, stall detection/recovery, startup auto-pause recovery, watchdog timers - **Twitch stitched-ad break detection** (HLS `EXT-X-DATERANGE`) on both platforms, emitting `adBreakChanged` so the host suspends latency/stall recovery and chat sync during ads (program-date-time is unreliable then). Matches `CLASS="twitch-stitched-ad"` / `ID="stitched-ad-"` **and** the `X-TV-TWITCH-AD-*` attribute prefix (the durable signal streamlink/yt-dlp use) - Shared `VideoPlayerInterface` so WebView and native paths are interchangeable via settings toggle - `PlaybackAccessToken` model, `TwitchGqlApi` client ## Chat delay & send reliability - **Optimistic send-finalize**: Twitch acks a sent message with a per-PRIVMSG USERSTATE (not an echo), which it can intermittently drop — more so under a long chat delay. A missing ack no longer shows a false "message may not have been sent" error; the send is finalized optimistically (local echo rendered), and only genuine rejection NOTICEs surface an error. Ack timeout scaled by the chat delay. - **Per-line chat-delay bypass**: control/state lines (USERSTATE/ROOMSTATE/GLOBALUSERSTATE), rejection NOTICEs, the reconnect notice, and untagged server lines bypass the delay so send-acks and PONGs aren't stalled; only displayable chat content is delayed, staying in sync with delayed video. - **Measured chat bottom-bar height**: the message list reflows to the composer's real measured height, fixing the input overlapping messages when a long message expands it (replaces a fixed-constant estimate). - IRC tag parsing handles valueless and escaped tags per the IRCv3 message-tags spec (fixes a recent-messages RangeError on certain tags). ## Chat / multi-tab - Redesigned tab chips: unread dot indicator, chips dim until WebSocket connects - Animated tab options popover replacing `MenuAnchor` (no animation hook in Flutter 3.44) - Simplified `ChatTabs` from `StatefulWidget` to `StatelessWidget` - Focus-current-channel fade bump to 0.55; section-header alpha lifted to match the muted-label tier - `addTab` now calls `setActiveTab` to snapshot outgoing tab's `lastSeenMessageId` — fixes spurious unread dots after adding a tab - `onActivateSourceTab` threaded into `ChatUserModal` so Reply in merged mode switches to the correct source tab's composer ## Bug fixes and hardening - **Reverted the experimental iOS low-latency mode** (5s live-edge join + 1.05x catch-up): AVPlayer can't sustain <~18s on Twitch (declared `TARGETDURATION:6` paces playlist refreshes), and the offset starved the buffer into pause-on-launch. Default join distance restored. - Fork (Android): **cap `BEHIND_LIVE_WINDOW` recovery** so a stream repeatedly falling off the live window can't silently re-prepare forever; emits `error` on exhaustion so the host recovery ladder takes over - Guard all Android `setAutoPipMode` calls with `_autoPipAvailable` — prevents `PlatformException` on Android 8–11; check `_disposed` after `isAutoPipAvailable` await to prevent post-dispose auto-PiP re-enable - Remove `_isInPipMode` guard from `_onPaused` so `_paused` tracks actual state, fixing PiP play/pause toggle getting stuck - Tighten iOS cookie domain check to exact `twitch.tv` / `.twitch.tv` suffix - Invalidate the stored web session token when Twitch rejects it with a 401 (profile card flips back to unlinked; future loads skip the doomed authenticated request), and re-extract the cookie on launch when logged in without a linked session - Send `play_session_id` and `player_backend=mediaplayer` to Usher, matching the web client / streamlink - Fork (iOS): restore program-date-time latency measurement (a prior rev measured distance to the manifest edge, reading ~0s and silently disabling high-latency recovery / chat-delay auto-sync); release platform views on dispose (per-stream view + AVPlayerViewController leak), track the observed AVPlayerItem for KVO removal (sibling-view crash), main-thread seek results, resolve superseded load futures - Fork (Android): clean up method handlers orphaned by PiP-time view disposal (leaked audio-focus listeners), drop the live-offset re-anchoring seekTo on metadata updates (latency creep), restore pre-duck volume, respect user pause in the stall watchdog, resolve superseded load futures - Deep review pass: expire the quality-switch flag so stall recovery isn't disabled for the session, cap latency-driven recovery (clock-skew loop), generation-guard the error overlay, two-strike offline confirmation, controller null-safety on quality switch - Tighten `/me` local-echo match (no longer renders `/meow ...` as an action); clear pending send text on disconnect ## Web / docs - Remove stale Cloudflare Images binding from `wrangler.jsonc` (covered by `images.unoptimized: true`) - Correct `web/AGENTS.md` Cache Components claim (feature not enabled) - Repo and agent config cleanup ## Test plan - [x] `flutter analyze` — clean (frosty + plugin lib) - [x] `flutter test` — 319/319 pass (adds `ChatLatencySync`, `StreamInfoPoller`, video timing invariants, `PlaybackAccessToken`, IRC tag parsing) - [x] Android plugin Kotlin compiles against the bumped fork rev - [ ] Native player plays live streams on iOS and Android - [ ] Quality switching works and persists across channel reopens - [ ] PiP enters/exits correctly; pause/resume toggle in PiP window works - [ ] Audio-only mode does not crash on Android < API 31 - [ ] Sending under a long synced chat delay no longer shows a false "may not have been sent" error - [ ] Long composer text reflows the message list (no input/message overlap) - [ ] Multi-tab: adding a tab does not mark previous tab as unread - [ ] Merged chat: Reply from user modal targets the correct tab's composer 🤖 Generated with [Claude Code](https://claude.com/claude-code)
2026-06-13 17:06:24 -04:00
/// Fallback height used to pad the message list for one frame, until the
/// real bottom bar reports its measured height via [setBottomBarHeight].
static const _baseBottomBarHeight = 68.0;
feat(video,chat): native player, ad-break awareness, chat send/delay reliability, and tab redesign (#567) Squash-merge commit. Covers four areas: native video player, chat reliability, multi-tab, and hardening. ## Native video player - Direct HLS playback via `better_native_video_player` (forked from `plug-and-pay/flutter-native-video-player`, patched on `frosty-patches` branch) - Twitch GQL playback token fetching with platform cookie extraction (iOS Swift + Android Kotlin plugins) for authenticated streams - Quality selection (source, 720p, 480p, 360p, 160p, audio-only) persisted per channel - Picture-in-picture: iOS automatic inline PiP, Android auto-PiP on API 31+ guarded against older devices - Latency polling, chat latency sync, stall detection/recovery, startup auto-pause recovery, watchdog timers - **Twitch stitched-ad break detection** (HLS `EXT-X-DATERANGE`) on both platforms, emitting `adBreakChanged` so the host suspends latency/stall recovery and chat sync during ads (program-date-time is unreliable then). Matches `CLASS="twitch-stitched-ad"` / `ID="stitched-ad-"` **and** the `X-TV-TWITCH-AD-*` attribute prefix (the durable signal streamlink/yt-dlp use) - Shared `VideoPlayerInterface` so WebView and native paths are interchangeable via settings toggle - `PlaybackAccessToken` model, `TwitchGqlApi` client ## Chat delay & send reliability - **Optimistic send-finalize**: Twitch acks a sent message with a per-PRIVMSG USERSTATE (not an echo), which it can intermittently drop — more so under a long chat delay. A missing ack no longer shows a false "message may not have been sent" error; the send is finalized optimistically (local echo rendered), and only genuine rejection NOTICEs surface an error. Ack timeout scaled by the chat delay. - **Per-line chat-delay bypass**: control/state lines (USERSTATE/ROOMSTATE/GLOBALUSERSTATE), rejection NOTICEs, the reconnect notice, and untagged server lines bypass the delay so send-acks and PONGs aren't stalled; only displayable chat content is delayed, staying in sync with delayed video. - **Measured chat bottom-bar height**: the message list reflows to the composer's real measured height, fixing the input overlapping messages when a long message expands it (replaces a fixed-constant estimate). - IRC tag parsing handles valueless and escaped tags per the IRCv3 message-tags spec (fixes a recent-messages RangeError on certain tags). ## Chat / multi-tab - Redesigned tab chips: unread dot indicator, chips dim until WebSocket connects - Animated tab options popover replacing `MenuAnchor` (no animation hook in Flutter 3.44) - Simplified `ChatTabs` from `StatefulWidget` to `StatelessWidget` - Focus-current-channel fade bump to 0.55; section-header alpha lifted to match the muted-label tier - `addTab` now calls `setActiveTab` to snapshot outgoing tab's `lastSeenMessageId` — fixes spurious unread dots after adding a tab - `onActivateSourceTab` threaded into `ChatUserModal` so Reply in merged mode switches to the correct source tab's composer ## Bug fixes and hardening - **Reverted the experimental iOS low-latency mode** (5s live-edge join + 1.05x catch-up): AVPlayer can't sustain <~18s on Twitch (declared `TARGETDURATION:6` paces playlist refreshes), and the offset starved the buffer into pause-on-launch. Default join distance restored. - Fork (Android): **cap `BEHIND_LIVE_WINDOW` recovery** so a stream repeatedly falling off the live window can't silently re-prepare forever; emits `error` on exhaustion so the host recovery ladder takes over - Guard all Android `setAutoPipMode` calls with `_autoPipAvailable` — prevents `PlatformException` on Android 8–11; check `_disposed` after `isAutoPipAvailable` await to prevent post-dispose auto-PiP re-enable - Remove `_isInPipMode` guard from `_onPaused` so `_paused` tracks actual state, fixing PiP play/pause toggle getting stuck - Tighten iOS cookie domain check to exact `twitch.tv` / `.twitch.tv` suffix - Invalidate the stored web session token when Twitch rejects it with a 401 (profile card flips back to unlinked; future loads skip the doomed authenticated request), and re-extract the cookie on launch when logged in without a linked session - Send `play_session_id` and `player_backend=mediaplayer` to Usher, matching the web client / streamlink - Fork (iOS): restore program-date-time latency measurement (a prior rev measured distance to the manifest edge, reading ~0s and silently disabling high-latency recovery / chat-delay auto-sync); release platform views on dispose (per-stream view + AVPlayerViewController leak), track the observed AVPlayerItem for KVO removal (sibling-view crash), main-thread seek results, resolve superseded load futures - Fork (Android): clean up method handlers orphaned by PiP-time view disposal (leaked audio-focus listeners), drop the live-offset re-anchoring seekTo on metadata updates (latency creep), restore pre-duck volume, respect user pause in the stall watchdog, resolve superseded load futures - Deep review pass: expire the quality-switch flag so stall recovery isn't disabled for the session, cap latency-driven recovery (clock-skew loop), generation-guard the error overlay, two-strike offline confirmation, controller null-safety on quality switch - Tighten `/me` local-echo match (no longer renders `/meow ...` as an action); clear pending send text on disconnect ## Web / docs - Remove stale Cloudflare Images binding from `wrangler.jsonc` (covered by `images.unoptimized: true`) - Correct `web/AGENTS.md` Cache Components claim (feature not enabled) - Repo and agent config cleanup ## Test plan - [x] `flutter analyze` — clean (frosty + plugin lib) - [x] `flutter test` — 319/319 pass (adds `ChatLatencySync`, `StreamInfoPoller`, video timing invariants, `PlaybackAccessToken`, IRC tag parsing) - [x] Android plugin Kotlin compiles against the bumped fork rev - [ ] Native player plays live streams on iOS and Android - [ ] Quality switching works and persists across channel reopens - [ ] PiP enters/exits correctly; pause/resume toggle in PiP window works - [ ] Audio-only mode does not crash on Android < API 31 - [ ] Sending under a long synced chat delay no longer shows a false "may not have been sent" error - [ ] Long composer text reflows the message list (no input/message overlap) - [ ] Multi-tab: adding a tab does not mark previous tab as unread - [ ] Merged chat: Reply from user modal targets the correct tab's composer 🤖 Generated with [Claude Code](https://claude.com/claude-code)
2026-06-13 17:06:24 -04:00
/// Server-initiated graceful reconnect notice. Twitch sends this untagged
/// before maintenance so clients can re-establish ahead of the close.
static const _serverReconnectNotice = ':tmi.twitch.tv RECONNECT';
/// Muted words pre-normalized (trimmed, lowercased, empties dropped) by a
/// reaction on the setting — avoids re-normalizing on every message.
var _normalizedMutedWords = <String>[];
/// Whether a single IRC [line] should bypass the chat delay and be handled
/// immediately. Displayable chat content (PRIVMSG/USERNOTICE and the
/// moderation CLEARCHAT/CLEARMSG) is delayed, so it stays in sync with the
/// delayed video. Everything else is handled at once: control/state messages
/// (USERSTATE/ROOMSTATE/GLOBALUSERSTATE), NOTICE (so a send rejection surfaces
/// immediately instead of one chat-delay later), the reconnect notice, and
/// any untagged server line (PING keepalives, CAP, JOIN, the welcome banner)
/// — delaying those would stall the send-ack, drop the PONG, or never start
/// the buffer drain.
bool _lineShouldBypassDelay(String line) {
if (line.isEmpty || line == _serverReconnectNotice) return true;
// Displayable chat content is always IRCv3-tagged; an untagged line is
// never delayed.
if (!line.startsWith('@')) return true;
final parts = line.split(' ');
return parts.length >= 3 && _delayBypassCommands.contains(parts[2]);
}
Duration get _chatDelay =>
Duration(milliseconds: (settings.effectiveChatDelay * 1000).round());
bool get _hasActiveChatDelay =>
settings.showVideo && _chatDelay > Duration.zero;
final TwitchApi twitchApi;
/// The amount of messages to free (remove) when the [_messageLimit] is reached.
final _messagesToRemove = (_messageLimit * 0.2).toInt();
/// The provided auth store to determine login status, get the token, and use the headers for requests.
final AuthStore auth;
/// The provided setting store to account for any user-defined behaviors.
final SettingsStore settings;
2022-01-10 13:10:31 -05:00
/// The focus node for the textfield to allow for showing and hiding the keyboard/focus.
final textFieldFocusNode = FocusNode();
/// The name of the channel to connect to.
final String channelName;
2021-12-11 17:09:15 -05:00
2022-01-15 15:46:46 -05:00
/// The channel's ID for API requests.
final String channelId;
/// The channel's display name to show on widgets.
final String displayName;
var _shouldDisconnect = false;
/// The Twitch IRC WebSocket channel.
WebSocketChannel? _channel;
/// The subscription that handles the WebSocket connection.
StreamSubscription? _channelListener;
WebSocketChannel? _sevenTVChannel;
2025-03-23 22:11:09 -07:00
/// The subscription that handles the 7TV WebSocket connection.
StreamSubscription? _sevenTVChannelListener;
2023-11-28 04:13:53 -05:00
static const _maxRetries = 5;
feat(video,chat): native player, ad-break awareness, chat send/delay reliability, and tab redesign (#567) Squash-merge commit. Covers four areas: native video player, chat reliability, multi-tab, and hardening. ## Native video player - Direct HLS playback via `better_native_video_player` (forked from `plug-and-pay/flutter-native-video-player`, patched on `frosty-patches` branch) - Twitch GQL playback token fetching with platform cookie extraction (iOS Swift + Android Kotlin plugins) for authenticated streams - Quality selection (source, 720p, 480p, 360p, 160p, audio-only) persisted per channel - Picture-in-picture: iOS automatic inline PiP, Android auto-PiP on API 31+ guarded against older devices - Latency polling, chat latency sync, stall detection/recovery, startup auto-pause recovery, watchdog timers - **Twitch stitched-ad break detection** (HLS `EXT-X-DATERANGE`) on both platforms, emitting `adBreakChanged` so the host suspends latency/stall recovery and chat sync during ads (program-date-time is unreliable then). Matches `CLASS="twitch-stitched-ad"` / `ID="stitched-ad-"` **and** the `X-TV-TWITCH-AD-*` attribute prefix (the durable signal streamlink/yt-dlp use) - Shared `VideoPlayerInterface` so WebView and native paths are interchangeable via settings toggle - `PlaybackAccessToken` model, `TwitchGqlApi` client ## Chat delay & send reliability - **Optimistic send-finalize**: Twitch acks a sent message with a per-PRIVMSG USERSTATE (not an echo), which it can intermittently drop — more so under a long chat delay. A missing ack no longer shows a false "message may not have been sent" error; the send is finalized optimistically (local echo rendered), and only genuine rejection NOTICEs surface an error. Ack timeout scaled by the chat delay. - **Per-line chat-delay bypass**: control/state lines (USERSTATE/ROOMSTATE/GLOBALUSERSTATE), rejection NOTICEs, the reconnect notice, and untagged server lines bypass the delay so send-acks and PONGs aren't stalled; only displayable chat content is delayed, staying in sync with delayed video. - **Measured chat bottom-bar height**: the message list reflows to the composer's real measured height, fixing the input overlapping messages when a long message expands it (replaces a fixed-constant estimate). - IRC tag parsing handles valueless and escaped tags per the IRCv3 message-tags spec (fixes a recent-messages RangeError on certain tags). ## Chat / multi-tab - Redesigned tab chips: unread dot indicator, chips dim until WebSocket connects - Animated tab options popover replacing `MenuAnchor` (no animation hook in Flutter 3.44) - Simplified `ChatTabs` from `StatefulWidget` to `StatelessWidget` - Focus-current-channel fade bump to 0.55; section-header alpha lifted to match the muted-label tier - `addTab` now calls `setActiveTab` to snapshot outgoing tab's `lastSeenMessageId` — fixes spurious unread dots after adding a tab - `onActivateSourceTab` threaded into `ChatUserModal` so Reply in merged mode switches to the correct source tab's composer ## Bug fixes and hardening - **Reverted the experimental iOS low-latency mode** (5s live-edge join + 1.05x catch-up): AVPlayer can't sustain <~18s on Twitch (declared `TARGETDURATION:6` paces playlist refreshes), and the offset starved the buffer into pause-on-launch. Default join distance restored. - Fork (Android): **cap `BEHIND_LIVE_WINDOW` recovery** so a stream repeatedly falling off the live window can't silently re-prepare forever; emits `error` on exhaustion so the host recovery ladder takes over - Guard all Android `setAutoPipMode` calls with `_autoPipAvailable` — prevents `PlatformException` on Android 8–11; check `_disposed` after `isAutoPipAvailable` await to prevent post-dispose auto-PiP re-enable - Remove `_isInPipMode` guard from `_onPaused` so `_paused` tracks actual state, fixing PiP play/pause toggle getting stuck - Tighten iOS cookie domain check to exact `twitch.tv` / `.twitch.tv` suffix - Invalidate the stored web session token when Twitch rejects it with a 401 (profile card flips back to unlinked; future loads skip the doomed authenticated request), and re-extract the cookie on launch when logged in without a linked session - Send `play_session_id` and `player_backend=mediaplayer` to Usher, matching the web client / streamlink - Fork (iOS): restore program-date-time latency measurement (a prior rev measured distance to the manifest edge, reading ~0s and silently disabling high-latency recovery / chat-delay auto-sync); release platform views on dispose (per-stream view + AVPlayerViewController leak), track the observed AVPlayerItem for KVO removal (sibling-view crash), main-thread seek results, resolve superseded load futures - Fork (Android): clean up method handlers orphaned by PiP-time view disposal (leaked audio-focus listeners), drop the live-offset re-anchoring seekTo on metadata updates (latency creep), restore pre-duck volume, respect user pause in the stall watchdog, resolve superseded load futures - Deep review pass: expire the quality-switch flag so stall recovery isn't disabled for the session, cap latency-driven recovery (clock-skew loop), generation-guard the error overlay, two-strike offline confirmation, controller null-safety on quality switch - Tighten `/me` local-echo match (no longer renders `/meow ...` as an action); clear pending send text on disconnect ## Web / docs - Remove stale Cloudflare Images binding from `wrangler.jsonc` (covered by `images.unoptimized: true`) - Correct `web/AGENTS.md` Cache Components claim (feature not enabled) - Repo and agent config cleanup ## Test plan - [x] `flutter analyze` — clean (frosty + plugin lib) - [x] `flutter test` — 319/319 pass (adds `ChatLatencySync`, `StreamInfoPoller`, video timing invariants, `PlaybackAccessToken`, IRC tag parsing) - [x] Android plugin Kotlin compiles against the bumped fork rev - [ ] Native player plays live streams on iOS and Android - [ ] Quality switching works and persists across channel reopens - [ ] PiP enters/exits correctly; pause/resume toggle in PiP window works - [ ] Audio-only mode does not crash on Android < API 31 - [ ] Sending under a long synced chat delay no longer shows a false "may not have been sent" error - [ ] Long composer text reflows the message list (no input/message overlap) - [ ] Multi-tab: adding a tab does not mark previous tab as unread - [ ] Merged chat: Reply from user modal targets the correct tab's composer 🤖 Generated with [Claude Code](https://claude.com/claude-code)
2026-06-13 17:06:24 -04:00
/// Ping interval for both the IRC and 7TV WebSocket sockets. Catches
/// zombie connections (silent network changes, OS suspends) without
/// waking the radio every 15s. Twitch's own recommended keepalive tops
/// out at 600s; community libs (e.g. dank-twitch-irc) sit around 30s.
static const _pingInterval = Duration(seconds: 60);
// The retry counter for exponential backoff.
var _retries = 0;
// The current time to wait between retries for exponential backoff.
var _backoffTime = 0;
2021-11-14 04:25:33 -05:00
// Reference to the reconnect message for in-place updates.
IRCMessage? _reconnectMessage;
// Timestamp when reconnection started, for calculating elapsed time.
DateTime? _reconnectStartTime;
/// The scroll controller that controls auto-scroll and resume-scroll behavior.
2021-11-14 04:25:33 -05:00
final scrollController = ScrollController();
/// The text controller that handles the TextField inputs and sending of messages.
2021-11-14 04:25:33 -05:00
final textController = TextEditingController();
2021-10-03 22:14:55 -04:00
/// The chat details store responsible for the chat modes and users in chat.
final ChatDetailsStore chatDetailsStore;
/// The assets store responsible for badges, emotes, and the emote menu.
final ChatAssetsStore assetsStore;
2021-11-23 04:15:13 -05:00
2022-01-09 12:53:40 -05:00
/// Requested message to be sent by the user. Will only be sent on receipt of a USERNOTICE command.
IRCMessage? toSend;
feat(video,chat): native player, ad-break awareness, chat send/delay reliability, and tab redesign (#567) Squash-merge commit. Covers four areas: native video player, chat reliability, multi-tab, and hardening. ## Native video player - Direct HLS playback via `better_native_video_player` (forked from `plug-and-pay/flutter-native-video-player`, patched on `frosty-patches` branch) - Twitch GQL playback token fetching with platform cookie extraction (iOS Swift + Android Kotlin plugins) for authenticated streams - Quality selection (source, 720p, 480p, 360p, 160p, audio-only) persisted per channel - Picture-in-picture: iOS automatic inline PiP, Android auto-PiP on API 31+ guarded against older devices - Latency polling, chat latency sync, stall detection/recovery, startup auto-pause recovery, watchdog timers - **Twitch stitched-ad break detection** (HLS `EXT-X-DATERANGE`) on both platforms, emitting `adBreakChanged` so the host suspends latency/stall recovery and chat sync during ads (program-date-time is unreliable then). Matches `CLASS="twitch-stitched-ad"` / `ID="stitched-ad-"` **and** the `X-TV-TWITCH-AD-*` attribute prefix (the durable signal streamlink/yt-dlp use) - Shared `VideoPlayerInterface` so WebView and native paths are interchangeable via settings toggle - `PlaybackAccessToken` model, `TwitchGqlApi` client ## Chat delay & send reliability - **Optimistic send-finalize**: Twitch acks a sent message with a per-PRIVMSG USERSTATE (not an echo), which it can intermittently drop — more so under a long chat delay. A missing ack no longer shows a false "message may not have been sent" error; the send is finalized optimistically (local echo rendered), and only genuine rejection NOTICEs surface an error. Ack timeout scaled by the chat delay. - **Per-line chat-delay bypass**: control/state lines (USERSTATE/ROOMSTATE/GLOBALUSERSTATE), rejection NOTICEs, the reconnect notice, and untagged server lines bypass the delay so send-acks and PONGs aren't stalled; only displayable chat content is delayed, staying in sync with delayed video. - **Measured chat bottom-bar height**: the message list reflows to the composer's real measured height, fixing the input overlapping messages when a long message expands it (replaces a fixed-constant estimate). - IRC tag parsing handles valueless and escaped tags per the IRCv3 message-tags spec (fixes a recent-messages RangeError on certain tags). ## Chat / multi-tab - Redesigned tab chips: unread dot indicator, chips dim until WebSocket connects - Animated tab options popover replacing `MenuAnchor` (no animation hook in Flutter 3.44) - Simplified `ChatTabs` from `StatefulWidget` to `StatelessWidget` - Focus-current-channel fade bump to 0.55; section-header alpha lifted to match the muted-label tier - `addTab` now calls `setActiveTab` to snapshot outgoing tab's `lastSeenMessageId` — fixes spurious unread dots after adding a tab - `onActivateSourceTab` threaded into `ChatUserModal` so Reply in merged mode switches to the correct source tab's composer ## Bug fixes and hardening - **Reverted the experimental iOS low-latency mode** (5s live-edge join + 1.05x catch-up): AVPlayer can't sustain <~18s on Twitch (declared `TARGETDURATION:6` paces playlist refreshes), and the offset starved the buffer into pause-on-launch. Default join distance restored. - Fork (Android): **cap `BEHIND_LIVE_WINDOW` recovery** so a stream repeatedly falling off the live window can't silently re-prepare forever; emits `error` on exhaustion so the host recovery ladder takes over - Guard all Android `setAutoPipMode` calls with `_autoPipAvailable` — prevents `PlatformException` on Android 8–11; check `_disposed` after `isAutoPipAvailable` await to prevent post-dispose auto-PiP re-enable - Remove `_isInPipMode` guard from `_onPaused` so `_paused` tracks actual state, fixing PiP play/pause toggle getting stuck - Tighten iOS cookie domain check to exact `twitch.tv` / `.twitch.tv` suffix - Invalidate the stored web session token when Twitch rejects it with a 401 (profile card flips back to unlinked; future loads skip the doomed authenticated request), and re-extract the cookie on launch when logged in without a linked session - Send `play_session_id` and `player_backend=mediaplayer` to Usher, matching the web client / streamlink - Fork (iOS): restore program-date-time latency measurement (a prior rev measured distance to the manifest edge, reading ~0s and silently disabling high-latency recovery / chat-delay auto-sync); release platform views on dispose (per-stream view + AVPlayerViewController leak), track the observed AVPlayerItem for KVO removal (sibling-view crash), main-thread seek results, resolve superseded load futures - Fork (Android): clean up method handlers orphaned by PiP-time view disposal (leaked audio-focus listeners), drop the live-offset re-anchoring seekTo on metadata updates (latency creep), restore pre-duck volume, respect user pause in the stall watchdog, resolve superseded load futures - Deep review pass: expire the quality-switch flag so stall recovery isn't disabled for the session, cap latency-driven recovery (clock-skew loop), generation-guard the error overlay, two-strike offline confirmation, controller null-safety on quality switch - Tighten `/me` local-echo match (no longer renders `/meow ...` as an action); clear pending send text on disconnect ## Web / docs - Remove stale Cloudflare Images binding from `wrangler.jsonc` (covered by `images.unoptimized: true`) - Correct `web/AGENTS.md` Cache Components claim (feature not enabled) - Repo and agent config cleanup ## Test plan - [x] `flutter analyze` — clean (frosty + plugin lib) - [x] `flutter test` — 319/319 pass (adds `ChatLatencySync`, `StreamInfoPoller`, video timing invariants, `PlaybackAccessToken`, IRC tag parsing) - [x] Android plugin Kotlin compiles against the bumped fork rev - [ ] Native player plays live streams on iOS and Android - [ ] Quality switching works and persists across channel reopens - [ ] PiP enters/exits correctly; pause/resume toggle in PiP window works - [ ] Audio-only mode does not crash on Android < API 31 - [ ] Sending under a long synced chat delay no longer shows a false "may not have been sent" error - [ ] Long composer text reflows the message list (no input/message overlap) - [ ] Multi-tab: adding a tab does not mark previous tab as unread - [ ] Merged chat: Reply from user modal targets the correct tab's composer 🤖 Generated with [Claude Code](https://claude.com/claude-code)
2026-06-13 17:06:24 -04:00
/// Raw text of the most recent outgoing message, retained until the send is
/// confirmed. Lets the USERSTATE handler build the local echo even when the
/// message was sent before this session's first USERSTATE arrived (so
/// [toSend] couldn't be built up front).
String? _pendingSentMessageText;
/// The list of reaction disposer functions that will be used later when disposing.
final reactions = <ReactionDisposer>[];
/// The periodic timer used for batching chat message re-renders.
Timer? _messageBufferTimer;
/// The list of chat messages to add once autoscroll is resumed.
/// This is used as an optimization to prevent the list from being updated/shifted while the user is scrolling.
Update to Material 3/You and other changes/fixes (#280) * Use adaptive refresh indicators * Add new message count indicator in chat * Sync pubspec.lock * Initial migration to material 3 * Restore default bottom sheet style * Remove FrostyListTile and reset styles * Use "Clear" button for all search history * Add `require_trailing_commas` lint rule * Exclude generated files from linter * Use ListView for safe area support in bottom sheet * Add initial dark theme * Make sizing and units consistent * Update onbaording spacings & copy * Migrate to default material 3 buttons * Add headers to chat details bottom sheet * Simplify token log in method * Use bottom sheet for account options * Remove `AnimateScale` widget * Tweak search paddings * Update message spacing divisions * Upgrade packages * Update message spacing divisions * Regenerate splash screens * Update Inter & add google fonts * Add initial material 3 themes * Use adaptive alert dialogs * Revert to oultined inputs * Fix tooltip message * Revert add google_fonts * Improve themes and various styling * Convert categories grid to list * Tweak stream card thumbnail radii * Tweak settings headers * Left align floating snackbars * Tweak search header padding * Fix profile pics occasionally not rounded * Use profile pic for settings button if logged in * Redesign sleep timer * Use divider theme and reduce thickness * Use 0 letter spacing for tab bar titles * Redesign category streams list * Add border to tooltips * Increase category card font weight * Use outlined icon btton for chat user modal * Reduce profile pic radius in search results * Fix scrolll to top button safe area * Add support for reply threads * Reduce tooltip and snackbar border thickness * Rebuild reply threads on new messages * Upgrade packages (iOS) * Reduce font weight for all chat alerts * Use tabbars for pageview * Add dividers everywhere * Revert "Add dividers everywhere" This reverts commit 5f0d349fdbb0afad313cfb88e8c359714b3ea87a. * Remove fill from inputs * Add dividers to settings * Use segmented button for settings list * Add scrollbar to lists with scrollcontroller * Redesign badge/emote tooltip * Remove outline from chat user modal buttons * Remove divider from reply thread * Use tap for chatters list and increase font weight * Constrain emote tooltip width
2023-10-22 18:38:32 -04:00
final messageBuffer = ObservableList<IRCMessage>();
/// Pending delayed IRC payloads waiting to be rendered.
final _pendingChatCallbacks = <_DelayedCallback>[];
/// Pending delayed 7TV payloads waiting to be rendered.
final _pendingSevenTVCallbacks = <_DelayedCallback>[];
v5 (#463) * migrate to dio * ignore folders * simplify twitch api headers handling * clean up main * simplify logs * optimize profile picture fetching fixes refetches on tab switch * update claude md * refactor irc.dart * update copilot instructions with essential commands and project structure details * implement message sending state management and UI updates * refactor notification handling and add copy-paste functionality in chat * refactor AlertMessage to support vertical layout and optional padding * refactor error messages for consistency and clarity across various components * refactor chat layout to use draggable divider and improve chat width settings * refactor Uptime widget to use SharedTimerService for synchronized updates * refactor search results components to handle null future states gracefully * refactor loading indicators to use skeleton loaders for improved user experience * refactor UI components for improved layout and responsiveness, enhance skeleton loaders, and streamline padding adjustments * refactor: replace manual blur effects with BlurredContainer for consistency and reusability * refactor: enhance JavaScript execution and error handling in WebView components * refactor: replace app bar with blurred container for improved UI consistency across screens * refactor: streamline video chat layout and enhance PiP drag gesture functionality * revert some app bar changes * refactor: implement Picture-in-Picture drag functionality in VideoChat * refactor: pass currentChannelId to IRCMessage and ChatMessage for improved context * fix large thubmnail width * chore: update Gradle and Kotlin plugin versions for improved compatibility * changes from v4.10.0 branch * feat: integrate AnimatedScrollBorder for improved UI responsiveness across various screens * refactor: update SectionHeader styling and improve theme management * feat: add pinned section to StreamsList and enhance skeleton loader padding * feat: add repository guidelines for project structure, coding style, testing, and security * feat: enhance StreamCard UI with BlurredContainer and adjust border width in theme * feat: implement unfocusInput and safeRequestFocus methods to manage text field focus behavior * feat: enhance Picture-in-Picture drag interactions with haptic feedback and smooth animations * refactor: improve code formatting and readability across multiple files * feat: implement picture-in-picture mode toggle and state management for video playback * feat: reset PiP mode state when pausing video playback * feat: add custom app bar with profile picture and stream info for video chat * feat: convert multiple settings screens to use StatefulWidget and add animated scroll borders * feat: update blur configuration for adaptive alpha based on theme * fix: adjust default font size in SectionHeader widget * feat: enhance PiP mode with drag overlay instruction and UI improvements * fix: improve badge rendering with consistent margin and border for current channel * refactor: replace BackdropFilter with BlurredContainer for improved clarity and maintainability * fix: reduce background transparency in Uptime widget for better visibility * feat: enhance photo view dialog with full resolution toggle and blurred background * fix: reset chat delay to 0 when auto sync is enabled and update settings title for clarity * fix: adjust border width in theme to improve consistency * feat: add forceDarkMode option to BlurredContainer for improved theme adaptability * feat: implement offline followed channels feature with UI integration and settings option * fix: increase font size and weight for offline status text for better readability * feat: remove offline pinned channels feature and update related UI components * feat: optimize offline channels loading behavior based on expansion state * fix: improve clarity and consistency in repository guidelines formatting * feat: update full resolution URL handling and button visibility logic * feat: replace app bar with blurred version in chat-only mode and add animated scroll border * feat: refactor video chat layout for improved chat and video display in landscape mode * feat: remove bottom bar visibility setting and adjust chat layout accordingly * fix: simplify condition for displaying offline channels section in following tab * feat: enhance reply thread display with indentation and reply icon * feat: implement showModalBottomSheetWithProperFocus for improved focus handling * feat: add gradient direction support to BlurredContainer for enhanced visual effects * feat: enhance NavigationBar and Theme settings for improved visual consistency * feat: add gradient direction support to BlurredContainer in VideoChat for enhanced visual effects * chore: update .gitignore to include .cursor file for better environment management * fix: update PiP drag gesture conditions to include video paused state for better user experience * refactor: replace ScrollController with SettingsPageLayout in settings screens for improved layout management * refactor: centralize orientation handling by introducing OrientationUtils for improved readability and maintainability * refactor: replace OrientationUtils with ContextExtensions for streamlined context-based access to theme, layout, and API dependencies * refactor: improve video chat UI by adjusting title layout and adding stream info tooltips for better user experience * refactor: adjust titleSpacing in theme and navigation components for improved layout consistency * refactor: update stream info timer handling and overlay management for improved UI responsiveness * refactor: enhance stream info timer logic and overlay visibility management for chat-only mode * refactor: enhance input decoration theme in FrostyThemes for improved visual consistency and responsiveness * refactor: adjust inputDecorationTheme padding in FrostyThemes for improved visual consistency * refactor: enhance video overlay management by including video preview overlay in hideElements for improved UI consistency * refactor: improve chat bottom bar padding and video chat layout for enhanced UI consistency * refactor: adjust chat padding to account for device bottom insets for improved layout consistency * refactor: update text styles in FrostyThemes for improved visual consistency across UI components * refactor: update iOS minimum deployment target to 13.0 for improved compatibility * refactor: adjust chat bottom padding based on emote menu visibility for improved layout consistency * refactor: adjust padding values in StreamsList for improved layout consistency * refactor: replace Padding with AnimatedPadding in Chat for smoother layout transitions refactor: replace Container with AnimatedContainer in BlurredContainer for smoother animations * refactor: remove unnecessary radius property from ProfilePicture in OfflineChannelCard for cleaner code * refactor: enhance chat bottom bar suffix icon to display message delay with tooltip for improved user experience * refactor: update hint text and tooltips in chat bottom bar and search for improved clarity * refactor: simplify notification display logic and enhance chat input behavior for improved user experience * refactor: enhance layout consistency by adjusting spacing in various components across the channel and home screens * refactor: introduce LiveIndicator widget and adjust spacing in channel and video components for improved layout consistency * refactor: remove monospace font family from chat bottom bar for improved text rendering * refactor: reduce notification animation duration and change dismiss direction for improved user experience * refactor: replace VideoBar with StreamInfoBar in video components for improved layout and consistency * refactor: adjust font sizes and spacing in StreamInfoBar for improved layout consistency * refactor: standardize font sizes and update gradient stops in video components for improved visual consistency * refactor: update tooltip padding and background color in theme for improved visual consistency * refactor: enhance tooltip behavior and standardize font sizes in StreamInfoBar and related components for improved visual consistency * refactor: add showThumbnail option to LargeStreamCardSkeletonLoader for improved layout flexibility * refactor: add StreamInfoBarSkeletonLoader for improved layout consistency in stream components * refactor: add shadow effects to icons and text in StreamInfoBar and VideoOverlay for improved visual depth * refactor: update defaultOverlayOpacity to 0.0 for improved overlay behavior * fix: correct stream info text color on overlay * refactor: implement a new color picker dialog with random color generation for enhanced user experience * refactor: adjust gradient colors and stops in VideoOverlay for improved visual consistency * refactor: refine gradient colors and stops in VideoOverlay for enhanced visual clarity * refactor: add isCompact parameter to StreamInfoBar for responsive text sizing * fix: update tooltip background color to use surface color for better contrast * feat: add shared chat mode support in chat store and update StreamInfoBar for visual indication * refactor: disable debug print for IRC messages to reduce log clutter * feat: implement chat color selection feature with user color management in chat settings * refactor: replace color adjustment logic with new contrast-aware utility for chat names * refactor: simplify chat details UI by replacing list tiles with action cards and removing unused clear dialog * refactor: enhance chat details UI by improving time formatting and adding label styling to action cards * refactor: update chat color terminology to 'Username color' for clarity in UI * refactor: enhance chat details UI by introducing active chat modes display and improving layout structure * refactor: improve chat details layout by replacing ListTile with Padding and adding a Divider for better visual separation * refactor: remove chat notifications positioning setting and adjust notification alignment in video chat * refactor: streamline StreamInfoBar component by consolidating offline handling and improving layout for better readability * refactor: enhance StreamInfoBar by adding tooltip for streamer name and improving text overflow handling * refactor: adjust tooltip display duration in StreamInfoBar and update theme configuration * refactor: adjust margin and padding in StreamCard for improved layout consistency * chore: update dependencies in pubspec.yaml and pubspec.lock for Firebase and other packages * template * chore: update iOS platform version to 15.0 and Firebase dependencies to 12.2.0 * refactor: simplify StreamInfoBar layout by reducing nested widgets and improving text color handling * format * feat: enhance Channel model and StreamInfoBar to support offline channel details * feat: add offline indicator and improve StreamInfoBar layout for better offline channel display * fix: adjust icon color opacity in StreamInfoBar for improved visibility * feat: enhance dismissal animation in FrostyPhotoViewDialog to track swipe direction * docs: update copilot instructions for clarity and additional error handling details * refactor: optimize latency tooltip layout and improve offline indicator styling in VideoOverlay * feat: implement shared chat asset fetching and participant management in ChatAssetsStore * refactor: replace Observer with Builder for improved widget rebuilding in VideoOverlay * refactor: update StreamInfoBar border styling and adjust layout in VideoOverlay for improved visual consistency * feat: add showTextShadows property to StreamInfoBar for customizable text shadow display * refactor: adjust layout in VideoOverlay by adding padding to improve spacing and visual consistency * refactor: enhance VideoOverlay gradients and layout for improved visual hierarchy and user experience * refactor: reduce vertical padding in VideoOverlay for improved layout consistency * refactor: remove overlay opacity settings from VideoSettings and SettingsStore for simplification * refactor: improve text overlay transition in VideoChat for better user experience * Revert "refactor: improve text overlay transition in VideoChat for better user experience" This reverts commit fd16ff5ec30ec266157e5c8a9d4a6090c91717f6. * refactor: wrap videoOverlay in ColoredBox for improved layout handling * refactor: optimize animation duration and transition curves in VideoChat for smoother interactions * refactor: dispose searchScrollController in HomeStoreBase to prevent memory leaks * refactor: simplify gradient definitions in VideoOverlay for improved readability and maintainability * refactor: remove 'Offline' text overlay from VideoOverlay for cleaner UI * refactor: add refresh functionality for assets in ChatDetails with loading indicators * refactor: update visibility conditions for uptime, viewer count, and category display in StreamInfoBar * refactor: replace AlertDialog with FrostyDialog for consistent dialog styling across the application * refactor: enhance layout handling in FrostyPageView to prevent overflow during height transitions * refactor: replace ColorPickerDialog with AccentColorPickerDialog for improved color selection experience * refactor: replace theme and accent color settings with dedicated components for improved modularity and readability * refactor: replace ElevatedButton with TextButton for consistent button styling across dialogs * refactor: integrate MobX Observer for reactive state management in settings widgets * refactor: update theme and dialog components for improved styling and consistency * refactor: enhance dialog styling with rounded corners and border in theme configuration * refactor: improve dialog messages for unauthorized access handling * refactor: update bodyLarge text style in theme configuration to include font weight * refactor: standardize Divider usage and adjust theme styles for improved consistency * refactor: adjust Divider properties and theme styles for enhanced visual consistency * chore: remove GEMINI.md file as it is no longer needed for project documentation * refactor: enhance token validation and reconnect logic in AuthBase for improved error handling * format * refactor: integrate landscape cutout settings into VideoChat layout for improved responsiveness * refactor: implement app lifecycle handling in VideoChat and enhance stream info update logic in VideoStore * refactor: update landscape cutout conditionals in VideoChat layout for improved responsiveness * update AGENTS.md * add scrollbar to search * fix scrolling exception * update CLAUDE.md * 5 auth reconnect attemps then log out * increase reply max lines to 2 * simplify and improve reply formatting * add prime icon * better draggable divider * support draggable divider in fullscreen overlay chat * add text shadow in fullscreen chat overlay mode * format * add landscape checks * video store optimization attempts * Dispose WebViewController and remove JavaScript channels properly * Track and cleanup all MutationObservers to prevent accumulation * Throttle latency updates to once per 5 seconds (reduces CPU load) * Add timeout protection and null checks for robustness * Prevent duplicate event listeners on page reloads * double tap divider to reset * Revert "video store optimization attempts" This reverts commit b1df7b0de473543283211a489dca698d9d241857. * optimize video store attempt 2 * Revert "double tap divider to reset" This reverts commit aeb26a433500ec71f822794835e927018ee59e1e. * optimize latency listener to open the menu and check every 20 secconds * more optimizations * hard refresh * abbreviate latency * fix lint * improve hide default overlay * fix chat no longer reconnecting with chat delay * refine chat alerts * fix historical message missing badges and emotes on initial connection * parallelize * revert * add reconnect button inline action * refactor: replace Scrollbar with FrostyScrollbar across chat and settings screens for consistent styling * tweak chat details menu * add scrollbar to release notes, renames for consistency * fix duplicate message case * fix chat delay alerts in auto sync mode * add regex for numeric strings and enhance display name formatting logic * exterminate borders * refactor: simplify active chat modes display in chat details screen * feat: enhance chat input button with delay notification and disable state * fix: wrap chat in SafeArea to prevent UI overflow issues * refactor: remove divider line from video chat and update draggable divider visibility logic * persist overlay in pip mode * fix: update chat delay handling and notifications in chat bottom bar * fix: update chat overlay visibility logic to respect fullscreen settings * tap to show deleted message * fix: prevent accidental chat scrolling when accessing system UI in landscape mode * show latency in portrait * fix: enhance chat delay notifications with dynamic delay time * docs: update CLAUDE.md for improved environment variable instructions and architecture overview * fix: improve chat delay countdown management and message handling * add preliminary release notes * remove agents.md * update lockfile * add initial multi chat feature * add option to persist multi chat tabs * add remove confirmation dialog * improve add chat design * lazy-load tabs * create global assets store to dedupe global asset fetching * improve tab design/styles * update notes * use frosty dialog * update claude md * tweak * add ability to reorder tabs * resolve conflict * merge cleanup * format * update release notes * add chat delay sync completion tracking to prevent countdown re-appearance * add tests * fix * update release notes * bump
2026-01-01 22:28:17 -05:00
/// The set of message IDs that have been revealed by the user (for deleted messages).
final revealedMessageIds = ObservableSet<String>();
feat(chat): add bubbles for shared chat participant channels (#581) * feat(chat): add bubbles for shared chat participant channels Twitch's native shared chat previously had no way to interact with participant channels the way manually-added chats work. Adds per-participant bubbles alongside manual tabs: tapping one spotlights that channel (fading the rest), hiding one filters its messages from the feed entirely. Defaults to unfaded, resets on rejoin (fresh ChatStore per connect). Manual "merged mode" fading is untouched and unaffected. * refactor(chat): dedup shared-chat tag lookup and extract fade policy - add IRCMessage.sourceChannelId, replacing three copies of the same source-room-id/room-id tag lookup - move the shared-chat spotlight/merged-mode fade decision out of ChatMessage's build into ChatStore.shouldFadeMessage, matching the extract-into-store convention already used for SharedChatBubbleState - factor the tab-bar item's Padding/Center wrapper into a shared _wrapItem helper instead of duplicating it per branch * fix(chat): don't spotlight a hidden shared-chat bubble toggleFocus didn't check hiddenChannelIds, so tapping a hidden bubble's chip added it to the spotlight set — fading every other participant to showcase a channel whose own messages were already filtered out of the feed. * fix(chat): stop shared-chat detection flapping on system messages _isInSharedChatMode was recomputed from every PRIVMSG/NOTICE/USERNOTICE, but only PRIVMSG reliably carries source-room-id for a session's duration. A sub/raid/announcement without the tag would flip the flag off and back on within a single live session. Previously this only risked a redundant asset refetch (already guarded); now the shared chat bubble bar reads the flag directly, so a flap would visibly collapse and reopen it. Scope detection to PRIVMSG only.
2026-07-03 00:16:49 -04:00
/// User-driven spotlight/hide selections for shared chat participant
/// channels. See [SharedChatBubbleState].
final sharedChatBubbles = SharedChatBubbleState();
v5 (#463) * migrate to dio * ignore folders * simplify twitch api headers handling * clean up main * simplify logs * optimize profile picture fetching fixes refetches on tab switch * update claude md * refactor irc.dart * update copilot instructions with essential commands and project structure details * implement message sending state management and UI updates * refactor notification handling and add copy-paste functionality in chat * refactor AlertMessage to support vertical layout and optional padding * refactor error messages for consistency and clarity across various components * refactor chat layout to use draggable divider and improve chat width settings * refactor Uptime widget to use SharedTimerService for synchronized updates * refactor search results components to handle null future states gracefully * refactor loading indicators to use skeleton loaders for improved user experience * refactor UI components for improved layout and responsiveness, enhance skeleton loaders, and streamline padding adjustments * refactor: replace manual blur effects with BlurredContainer for consistency and reusability * refactor: enhance JavaScript execution and error handling in WebView components * refactor: replace app bar with blurred container for improved UI consistency across screens * refactor: streamline video chat layout and enhance PiP drag gesture functionality * revert some app bar changes * refactor: implement Picture-in-Picture drag functionality in VideoChat * refactor: pass currentChannelId to IRCMessage and ChatMessage for improved context * fix large thubmnail width * chore: update Gradle and Kotlin plugin versions for improved compatibility * changes from v4.10.0 branch * feat: integrate AnimatedScrollBorder for improved UI responsiveness across various screens * refactor: update SectionHeader styling and improve theme management * feat: add pinned section to StreamsList and enhance skeleton loader padding * feat: add repository guidelines for project structure, coding style, testing, and security * feat: enhance StreamCard UI with BlurredContainer and adjust border width in theme * feat: implement unfocusInput and safeRequestFocus methods to manage text field focus behavior * feat: enhance Picture-in-Picture drag interactions with haptic feedback and smooth animations * refactor: improve code formatting and readability across multiple files * feat: implement picture-in-picture mode toggle and state management for video playback * feat: reset PiP mode state when pausing video playback * feat: add custom app bar with profile picture and stream info for video chat * feat: convert multiple settings screens to use StatefulWidget and add animated scroll borders * feat: update blur configuration for adaptive alpha based on theme * fix: adjust default font size in SectionHeader widget * feat: enhance PiP mode with drag overlay instruction and UI improvements * fix: improve badge rendering with consistent margin and border for current channel * refactor: replace BackdropFilter with BlurredContainer for improved clarity and maintainability * fix: reduce background transparency in Uptime widget for better visibility * feat: enhance photo view dialog with full resolution toggle and blurred background * fix: reset chat delay to 0 when auto sync is enabled and update settings title for clarity * fix: adjust border width in theme to improve consistency * feat: add forceDarkMode option to BlurredContainer for improved theme adaptability * feat: implement offline followed channels feature with UI integration and settings option * fix: increase font size and weight for offline status text for better readability * feat: remove offline pinned channels feature and update related UI components * feat: optimize offline channels loading behavior based on expansion state * fix: improve clarity and consistency in repository guidelines formatting * feat: update full resolution URL handling and button visibility logic * feat: replace app bar with blurred version in chat-only mode and add animated scroll border * feat: refactor video chat layout for improved chat and video display in landscape mode * feat: remove bottom bar visibility setting and adjust chat layout accordingly * fix: simplify condition for displaying offline channels section in following tab * feat: enhance reply thread display with indentation and reply icon * feat: implement showModalBottomSheetWithProperFocus for improved focus handling * feat: add gradient direction support to BlurredContainer for enhanced visual effects * feat: enhance NavigationBar and Theme settings for improved visual consistency * feat: add gradient direction support to BlurredContainer in VideoChat for enhanced visual effects * chore: update .gitignore to include .cursor file for better environment management * fix: update PiP drag gesture conditions to include video paused state for better user experience * refactor: replace ScrollController with SettingsPageLayout in settings screens for improved layout management * refactor: centralize orientation handling by introducing OrientationUtils for improved readability and maintainability * refactor: replace OrientationUtils with ContextExtensions for streamlined context-based access to theme, layout, and API dependencies * refactor: improve video chat UI by adjusting title layout and adding stream info tooltips for better user experience * refactor: adjust titleSpacing in theme and navigation components for improved layout consistency * refactor: update stream info timer handling and overlay management for improved UI responsiveness * refactor: enhance stream info timer logic and overlay visibility management for chat-only mode * refactor: enhance input decoration theme in FrostyThemes for improved visual consistency and responsiveness * refactor: adjust inputDecorationTheme padding in FrostyThemes for improved visual consistency * refactor: enhance video overlay management by including video preview overlay in hideElements for improved UI consistency * refactor: improve chat bottom bar padding and video chat layout for enhanced UI consistency * refactor: adjust chat padding to account for device bottom insets for improved layout consistency * refactor: update text styles in FrostyThemes for improved visual consistency across UI components * refactor: update iOS minimum deployment target to 13.0 for improved compatibility * refactor: adjust chat bottom padding based on emote menu visibility for improved layout consistency * refactor: adjust padding values in StreamsList for improved layout consistency * refactor: replace Padding with AnimatedPadding in Chat for smoother layout transitions refactor: replace Container with AnimatedContainer in BlurredContainer for smoother animations * refactor: remove unnecessary radius property from ProfilePicture in OfflineChannelCard for cleaner code * refactor: enhance chat bottom bar suffix icon to display message delay with tooltip for improved user experience * refactor: update hint text and tooltips in chat bottom bar and search for improved clarity * refactor: simplify notification display logic and enhance chat input behavior for improved user experience * refactor: enhance layout consistency by adjusting spacing in various components across the channel and home screens * refactor: introduce LiveIndicator widget and adjust spacing in channel and video components for improved layout consistency * refactor: remove monospace font family from chat bottom bar for improved text rendering * refactor: reduce notification animation duration and change dismiss direction for improved user experience * refactor: replace VideoBar with StreamInfoBar in video components for improved layout and consistency * refactor: adjust font sizes and spacing in StreamInfoBar for improved layout consistency * refactor: standardize font sizes and update gradient stops in video components for improved visual consistency * refactor: update tooltip padding and background color in theme for improved visual consistency * refactor: enhance tooltip behavior and standardize font sizes in StreamInfoBar and related components for improved visual consistency * refactor: add showThumbnail option to LargeStreamCardSkeletonLoader for improved layout flexibility * refactor: add StreamInfoBarSkeletonLoader for improved layout consistency in stream components * refactor: add shadow effects to icons and text in StreamInfoBar and VideoOverlay for improved visual depth * refactor: update defaultOverlayOpacity to 0.0 for improved overlay behavior * fix: correct stream info text color on overlay * refactor: implement a new color picker dialog with random color generation for enhanced user experience * refactor: adjust gradient colors and stops in VideoOverlay for improved visual consistency * refactor: refine gradient colors and stops in VideoOverlay for enhanced visual clarity * refactor: add isCompact parameter to StreamInfoBar for responsive text sizing * fix: update tooltip background color to use surface color for better contrast * feat: add shared chat mode support in chat store and update StreamInfoBar for visual indication * refactor: disable debug print for IRC messages to reduce log clutter * feat: implement chat color selection feature with user color management in chat settings * refactor: replace color adjustment logic with new contrast-aware utility for chat names * refactor: simplify chat details UI by replacing list tiles with action cards and removing unused clear dialog * refactor: enhance chat details UI by improving time formatting and adding label styling to action cards * refactor: update chat color terminology to 'Username color' for clarity in UI * refactor: enhance chat details UI by introducing active chat modes display and improving layout structure * refactor: improve chat details layout by replacing ListTile with Padding and adding a Divider for better visual separation * refactor: remove chat notifications positioning setting and adjust notification alignment in video chat * refactor: streamline StreamInfoBar component by consolidating offline handling and improving layout for better readability * refactor: enhance StreamInfoBar by adding tooltip for streamer name and improving text overflow handling * refactor: adjust tooltip display duration in StreamInfoBar and update theme configuration * refactor: adjust margin and padding in StreamCard for improved layout consistency * chore: update dependencies in pubspec.yaml and pubspec.lock for Firebase and other packages * template * chore: update iOS platform version to 15.0 and Firebase dependencies to 12.2.0 * refactor: simplify StreamInfoBar layout by reducing nested widgets and improving text color handling * format * feat: enhance Channel model and StreamInfoBar to support offline channel details * feat: add offline indicator and improve StreamInfoBar layout for better offline channel display * fix: adjust icon color opacity in StreamInfoBar for improved visibility * feat: enhance dismissal animation in FrostyPhotoViewDialog to track swipe direction * docs: update copilot instructions for clarity and additional error handling details * refactor: optimize latency tooltip layout and improve offline indicator styling in VideoOverlay * feat: implement shared chat asset fetching and participant management in ChatAssetsStore * refactor: replace Observer with Builder for improved widget rebuilding in VideoOverlay * refactor: update StreamInfoBar border styling and adjust layout in VideoOverlay for improved visual consistency * feat: add showTextShadows property to StreamInfoBar for customizable text shadow display * refactor: adjust layout in VideoOverlay by adding padding to improve spacing and visual consistency * refactor: enhance VideoOverlay gradients and layout for improved visual hierarchy and user experience * refactor: reduce vertical padding in VideoOverlay for improved layout consistency * refactor: remove overlay opacity settings from VideoSettings and SettingsStore for simplification * refactor: improve text overlay transition in VideoChat for better user experience * Revert "refactor: improve text overlay transition in VideoChat for better user experience" This reverts commit fd16ff5ec30ec266157e5c8a9d4a6090c91717f6. * refactor: wrap videoOverlay in ColoredBox for improved layout handling * refactor: optimize animation duration and transition curves in VideoChat for smoother interactions * refactor: dispose searchScrollController in HomeStoreBase to prevent memory leaks * refactor: simplify gradient definitions in VideoOverlay for improved readability and maintainability * refactor: remove 'Offline' text overlay from VideoOverlay for cleaner UI * refactor: add refresh functionality for assets in ChatDetails with loading indicators * refactor: update visibility conditions for uptime, viewer count, and category display in StreamInfoBar * refactor: replace AlertDialog with FrostyDialog for consistent dialog styling across the application * refactor: enhance layout handling in FrostyPageView to prevent overflow during height transitions * refactor: replace ColorPickerDialog with AccentColorPickerDialog for improved color selection experience * refactor: replace theme and accent color settings with dedicated components for improved modularity and readability * refactor: replace ElevatedButton with TextButton for consistent button styling across dialogs * refactor: integrate MobX Observer for reactive state management in settings widgets * refactor: update theme and dialog components for improved styling and consistency * refactor: enhance dialog styling with rounded corners and border in theme configuration * refactor: improve dialog messages for unauthorized access handling * refactor: update bodyLarge text style in theme configuration to include font weight * refactor: standardize Divider usage and adjust theme styles for improved consistency * refactor: adjust Divider properties and theme styles for enhanced visual consistency * chore: remove GEMINI.md file as it is no longer needed for project documentation * refactor: enhance token validation and reconnect logic in AuthBase for improved error handling * format * refactor: integrate landscape cutout settings into VideoChat layout for improved responsiveness * refactor: implement app lifecycle handling in VideoChat and enhance stream info update logic in VideoStore * refactor: update landscape cutout conditionals in VideoChat layout for improved responsiveness * update AGENTS.md * add scrollbar to search * fix scrolling exception * update CLAUDE.md * 5 auth reconnect attemps then log out * increase reply max lines to 2 * simplify and improve reply formatting * add prime icon * better draggable divider * support draggable divider in fullscreen overlay chat * add text shadow in fullscreen chat overlay mode * format * add landscape checks * video store optimization attempts * Dispose WebViewController and remove JavaScript channels properly * Track and cleanup all MutationObservers to prevent accumulation * Throttle latency updates to once per 5 seconds (reduces CPU load) * Add timeout protection and null checks for robustness * Prevent duplicate event listeners on page reloads * double tap divider to reset * Revert "video store optimization attempts" This reverts commit b1df7b0de473543283211a489dca698d9d241857. * optimize video store attempt 2 * Revert "double tap divider to reset" This reverts commit aeb26a433500ec71f822794835e927018ee59e1e. * optimize latency listener to open the menu and check every 20 secconds * more optimizations * hard refresh * abbreviate latency * fix lint * improve hide default overlay * fix chat no longer reconnecting with chat delay * refine chat alerts * fix historical message missing badges and emotes on initial connection * parallelize * revert * add reconnect button inline action * refactor: replace Scrollbar with FrostyScrollbar across chat and settings screens for consistent styling * tweak chat details menu * add scrollbar to release notes, renames for consistency * fix duplicate message case * fix chat delay alerts in auto sync mode * add regex for numeric strings and enhance display name formatting logic * exterminate borders * refactor: simplify active chat modes display in chat details screen * feat: enhance chat input button with delay notification and disable state * fix: wrap chat in SafeArea to prevent UI overflow issues * refactor: remove divider line from video chat and update draggable divider visibility logic * persist overlay in pip mode * fix: update chat delay handling and notifications in chat bottom bar * fix: update chat overlay visibility logic to respect fullscreen settings * tap to show deleted message * fix: prevent accidental chat scrolling when accessing system UI in landscape mode * show latency in portrait * fix: enhance chat delay notifications with dynamic delay time * docs: update CLAUDE.md for improved environment variable instructions and architecture overview * fix: improve chat delay countdown management and message handling * add preliminary release notes * remove agents.md * update lockfile * add initial multi chat feature * add option to persist multi chat tabs * add remove confirmation dialog * improve add chat design * lazy-load tabs * create global assets store to dedupe global asset fetching * improve tab design/styles * update notes * use frosty dialog * update claude md * tweak * add ability to reorder tabs * resolve conflict * merge cleanup * format * update release notes * add chat delay sync completion tracking to prevent countdown re-appearance * add tests * fix * update release notes * bump
2026-01-01 22:28:17 -05:00
@action
void revealMessage(String id) {
revealedMessageIds.add(id);
}
feat(chat): add bubbles for shared chat participant channels (#581) * feat(chat): add bubbles for shared chat participant channels Twitch's native shared chat previously had no way to interact with participant channels the way manually-added chats work. Adds per-participant bubbles alongside manual tabs: tapping one spotlights that channel (fading the rest), hiding one filters its messages from the feed entirely. Defaults to unfaded, resets on rejoin (fresh ChatStore per connect). Manual "merged mode" fading is untouched and unaffected. * refactor(chat): dedup shared-chat tag lookup and extract fade policy - add IRCMessage.sourceChannelId, replacing three copies of the same source-room-id/room-id tag lookup - move the shared-chat spotlight/merged-mode fade decision out of ChatMessage's build into ChatStore.shouldFadeMessage, matching the extract-into-store convention already used for SharedChatBubbleState - factor the tab-bar item's Padding/Center wrapper into a shared _wrapItem helper instead of duplicating it per branch * fix(chat): don't spotlight a hidden shared-chat bubble toggleFocus didn't check hiddenChannelIds, so tapping a hidden bubble's chip added it to the spotlight set — fading every other participant to showcase a channel whose own messages were already filtered out of the feed. * fix(chat): stop shared-chat detection flapping on system messages _isInSharedChatMode was recomputed from every PRIVMSG/NOTICE/USERNOTICE, but only PRIVMSG reliably carries source-room-id for a session's duration. A sub/raid/announcement without the tag would flip the flag off and back on within a single live session. Previously this only risked a redundant asset refetch (already guarded); now the shared chat bubble bar reads the flag directly, so a flap would visibly collapse and reopen it. Scope detection to PRIVMSG only.
2026-07-03 00:16:49 -04:00
/// Whether a message from [sourceChannelId] should render faded.
///
/// [overrideCurrentChannelId] is set only when rendering the manual
/// "merged mode" view (multiple manually-added tabs interleaved), which
/// always fades non-active-tab messages, gated by [focusCurrentChannel].
/// Otherwise this is the normal single-connection view, where native
/// Twitch shared chat defaults to unfaded and only fades once the user
/// spotlights a participant channel via a chat bubble — an explicit
/// action that isn't gated by that setting.
bool shouldFadeMessage({
required String? sourceChannelId,
required String? overrideCurrentChannelId,
}) {
if (sourceChannelId == null) return false;
final currentChannelId = overrideCurrentChannelId ?? channelId;
if (sourceChannelId == currentChannelId) return false;
final isMerged = overrideCurrentChannelId != null;
if (isMerged) return settings.focusCurrentChannel;
return sharedChatBubbles.focusedChannelIds.isNotEmpty &&
!sharedChatBubbles.isFocused(sourceChannelId);
}
/// Timer used for dismissing the notification.
Timer? _notificationTimer;
/// Timer used for resetting the sending state if no acknowledgment is received.
Timer? _sendingTimeoutTimer;
v5 (#463) * migrate to dio * ignore folders * simplify twitch api headers handling * clean up main * simplify logs * optimize profile picture fetching fixes refetches on tab switch * update claude md * refactor irc.dart * update copilot instructions with essential commands and project structure details * implement message sending state management and UI updates * refactor notification handling and add copy-paste functionality in chat * refactor AlertMessage to support vertical layout and optional padding * refactor error messages for consistency and clarity across various components * refactor chat layout to use draggable divider and improve chat width settings * refactor Uptime widget to use SharedTimerService for synchronized updates * refactor search results components to handle null future states gracefully * refactor loading indicators to use skeleton loaders for improved user experience * refactor UI components for improved layout and responsiveness, enhance skeleton loaders, and streamline padding adjustments * refactor: replace manual blur effects with BlurredContainer for consistency and reusability * refactor: enhance JavaScript execution and error handling in WebView components * refactor: replace app bar with blurred container for improved UI consistency across screens * refactor: streamline video chat layout and enhance PiP drag gesture functionality * revert some app bar changes * refactor: implement Picture-in-Picture drag functionality in VideoChat * refactor: pass currentChannelId to IRCMessage and ChatMessage for improved context * fix large thubmnail width * chore: update Gradle and Kotlin plugin versions for improved compatibility * changes from v4.10.0 branch * feat: integrate AnimatedScrollBorder for improved UI responsiveness across various screens * refactor: update SectionHeader styling and improve theme management * feat: add pinned section to StreamsList and enhance skeleton loader padding * feat: add repository guidelines for project structure, coding style, testing, and security * feat: enhance StreamCard UI with BlurredContainer and adjust border width in theme * feat: implement unfocusInput and safeRequestFocus methods to manage text field focus behavior * feat: enhance Picture-in-Picture drag interactions with haptic feedback and smooth animations * refactor: improve code formatting and readability across multiple files * feat: implement picture-in-picture mode toggle and state management for video playback * feat: reset PiP mode state when pausing video playback * feat: add custom app bar with profile picture and stream info for video chat * feat: convert multiple settings screens to use StatefulWidget and add animated scroll borders * feat: update blur configuration for adaptive alpha based on theme * fix: adjust default font size in SectionHeader widget * feat: enhance PiP mode with drag overlay instruction and UI improvements * fix: improve badge rendering with consistent margin and border for current channel * refactor: replace BackdropFilter with BlurredContainer for improved clarity and maintainability * fix: reduce background transparency in Uptime widget for better visibility * feat: enhance photo view dialog with full resolution toggle and blurred background * fix: reset chat delay to 0 when auto sync is enabled and update settings title for clarity * fix: adjust border width in theme to improve consistency * feat: add forceDarkMode option to BlurredContainer for improved theme adaptability * feat: implement offline followed channels feature with UI integration and settings option * fix: increase font size and weight for offline status text for better readability * feat: remove offline pinned channels feature and update related UI components * feat: optimize offline channels loading behavior based on expansion state * fix: improve clarity and consistency in repository guidelines formatting * feat: update full resolution URL handling and button visibility logic * feat: replace app bar with blurred version in chat-only mode and add animated scroll border * feat: refactor video chat layout for improved chat and video display in landscape mode * feat: remove bottom bar visibility setting and adjust chat layout accordingly * fix: simplify condition for displaying offline channels section in following tab * feat: enhance reply thread display with indentation and reply icon * feat: implement showModalBottomSheetWithProperFocus for improved focus handling * feat: add gradient direction support to BlurredContainer for enhanced visual effects * feat: enhance NavigationBar and Theme settings for improved visual consistency * feat: add gradient direction support to BlurredContainer in VideoChat for enhanced visual effects * chore: update .gitignore to include .cursor file for better environment management * fix: update PiP drag gesture conditions to include video paused state for better user experience * refactor: replace ScrollController with SettingsPageLayout in settings screens for improved layout management * refactor: centralize orientation handling by introducing OrientationUtils for improved readability and maintainability * refactor: replace OrientationUtils with ContextExtensions for streamlined context-based access to theme, layout, and API dependencies * refactor: improve video chat UI by adjusting title layout and adding stream info tooltips for better user experience * refactor: adjust titleSpacing in theme and navigation components for improved layout consistency * refactor: update stream info timer handling and overlay management for improved UI responsiveness * refactor: enhance stream info timer logic and overlay visibility management for chat-only mode * refactor: enhance input decoration theme in FrostyThemes for improved visual consistency and responsiveness * refactor: adjust inputDecorationTheme padding in FrostyThemes for improved visual consistency * refactor: enhance video overlay management by including video preview overlay in hideElements for improved UI consistency * refactor: improve chat bottom bar padding and video chat layout for enhanced UI consistency * refactor: adjust chat padding to account for device bottom insets for improved layout consistency * refactor: update text styles in FrostyThemes for improved visual consistency across UI components * refactor: update iOS minimum deployment target to 13.0 for improved compatibility * refactor: adjust chat bottom padding based on emote menu visibility for improved layout consistency * refactor: adjust padding values in StreamsList for improved layout consistency * refactor: replace Padding with AnimatedPadding in Chat for smoother layout transitions refactor: replace Container with AnimatedContainer in BlurredContainer for smoother animations * refactor: remove unnecessary radius property from ProfilePicture in OfflineChannelCard for cleaner code * refactor: enhance chat bottom bar suffix icon to display message delay with tooltip for improved user experience * refactor: update hint text and tooltips in chat bottom bar and search for improved clarity * refactor: simplify notification display logic and enhance chat input behavior for improved user experience * refactor: enhance layout consistency by adjusting spacing in various components across the channel and home screens * refactor: introduce LiveIndicator widget and adjust spacing in channel and video components for improved layout consistency * refactor: remove monospace font family from chat bottom bar for improved text rendering * refactor: reduce notification animation duration and change dismiss direction for improved user experience * refactor: replace VideoBar with StreamInfoBar in video components for improved layout and consistency * refactor: adjust font sizes and spacing in StreamInfoBar for improved layout consistency * refactor: standardize font sizes and update gradient stops in video components for improved visual consistency * refactor: update tooltip padding and background color in theme for improved visual consistency * refactor: enhance tooltip behavior and standardize font sizes in StreamInfoBar and related components for improved visual consistency * refactor: add showThumbnail option to LargeStreamCardSkeletonLoader for improved layout flexibility * refactor: add StreamInfoBarSkeletonLoader for improved layout consistency in stream components * refactor: add shadow effects to icons and text in StreamInfoBar and VideoOverlay for improved visual depth * refactor: update defaultOverlayOpacity to 0.0 for improved overlay behavior * fix: correct stream info text color on overlay * refactor: implement a new color picker dialog with random color generation for enhanced user experience * refactor: adjust gradient colors and stops in VideoOverlay for improved visual consistency * refactor: refine gradient colors and stops in VideoOverlay for enhanced visual clarity * refactor: add isCompact parameter to StreamInfoBar for responsive text sizing * fix: update tooltip background color to use surface color for better contrast * feat: add shared chat mode support in chat store and update StreamInfoBar for visual indication * refactor: disable debug print for IRC messages to reduce log clutter * feat: implement chat color selection feature with user color management in chat settings * refactor: replace color adjustment logic with new contrast-aware utility for chat names * refactor: simplify chat details UI by replacing list tiles with action cards and removing unused clear dialog * refactor: enhance chat details UI by improving time formatting and adding label styling to action cards * refactor: update chat color terminology to 'Username color' for clarity in UI * refactor: enhance chat details UI by introducing active chat modes display and improving layout structure * refactor: improve chat details layout by replacing ListTile with Padding and adding a Divider for better visual separation * refactor: remove chat notifications positioning setting and adjust notification alignment in video chat * refactor: streamline StreamInfoBar component by consolidating offline handling and improving layout for better readability * refactor: enhance StreamInfoBar by adding tooltip for streamer name and improving text overflow handling * refactor: adjust tooltip display duration in StreamInfoBar and update theme configuration * refactor: adjust margin and padding in StreamCard for improved layout consistency * chore: update dependencies in pubspec.yaml and pubspec.lock for Firebase and other packages * template * chore: update iOS platform version to 15.0 and Firebase dependencies to 12.2.0 * refactor: simplify StreamInfoBar layout by reducing nested widgets and improving text color handling * format * feat: enhance Channel model and StreamInfoBar to support offline channel details * feat: add offline indicator and improve StreamInfoBar layout for better offline channel display * fix: adjust icon color opacity in StreamInfoBar for improved visibility * feat: enhance dismissal animation in FrostyPhotoViewDialog to track swipe direction * docs: update copilot instructions for clarity and additional error handling details * refactor: optimize latency tooltip layout and improve offline indicator styling in VideoOverlay * feat: implement shared chat asset fetching and participant management in ChatAssetsStore * refactor: replace Observer with Builder for improved widget rebuilding in VideoOverlay * refactor: update StreamInfoBar border styling and adjust layout in VideoOverlay for improved visual consistency * feat: add showTextShadows property to StreamInfoBar for customizable text shadow display * refactor: adjust layout in VideoOverlay by adding padding to improve spacing and visual consistency * refactor: enhance VideoOverlay gradients and layout for improved visual hierarchy and user experience * refactor: reduce vertical padding in VideoOverlay for improved layout consistency * refactor: remove overlay opacity settings from VideoSettings and SettingsStore for simplification * refactor: improve text overlay transition in VideoChat for better user experience * Revert "refactor: improve text overlay transition in VideoChat for better user experience" This reverts commit fd16ff5ec30ec266157e5c8a9d4a6090c91717f6. * refactor: wrap videoOverlay in ColoredBox for improved layout handling * refactor: optimize animation duration and transition curves in VideoChat for smoother interactions * refactor: dispose searchScrollController in HomeStoreBase to prevent memory leaks * refactor: simplify gradient definitions in VideoOverlay for improved readability and maintainability * refactor: remove 'Offline' text overlay from VideoOverlay for cleaner UI * refactor: add refresh functionality for assets in ChatDetails with loading indicators * refactor: update visibility conditions for uptime, viewer count, and category display in StreamInfoBar * refactor: replace AlertDialog with FrostyDialog for consistent dialog styling across the application * refactor: enhance layout handling in FrostyPageView to prevent overflow during height transitions * refactor: replace ColorPickerDialog with AccentColorPickerDialog for improved color selection experience * refactor: replace theme and accent color settings with dedicated components for improved modularity and readability * refactor: replace ElevatedButton with TextButton for consistent button styling across dialogs * refactor: integrate MobX Observer for reactive state management in settings widgets * refactor: update theme and dialog components for improved styling and consistency * refactor: enhance dialog styling with rounded corners and border in theme configuration * refactor: improve dialog messages for unauthorized access handling * refactor: update bodyLarge text style in theme configuration to include font weight * refactor: standardize Divider usage and adjust theme styles for improved consistency * refactor: adjust Divider properties and theme styles for enhanced visual consistency * chore: remove GEMINI.md file as it is no longer needed for project documentation * refactor: enhance token validation and reconnect logic in AuthBase for improved error handling * format * refactor: integrate landscape cutout settings into VideoChat layout for improved responsiveness * refactor: implement app lifecycle handling in VideoChat and enhance stream info update logic in VideoStore * refactor: update landscape cutout conditionals in VideoChat layout for improved responsiveness * update AGENTS.md * add scrollbar to search * fix scrolling exception * update CLAUDE.md * 5 auth reconnect attemps then log out * increase reply max lines to 2 * simplify and improve reply formatting * add prime icon * better draggable divider * support draggable divider in fullscreen overlay chat * add text shadow in fullscreen chat overlay mode * format * add landscape checks * video store optimization attempts * Dispose WebViewController and remove JavaScript channels properly * Track and cleanup all MutationObservers to prevent accumulation * Throttle latency updates to once per 5 seconds (reduces CPU load) * Add timeout protection and null checks for robustness * Prevent duplicate event listeners on page reloads * double tap divider to reset * Revert "video store optimization attempts" This reverts commit b1df7b0de473543283211a489dca698d9d241857. * optimize video store attempt 2 * Revert "double tap divider to reset" This reverts commit aeb26a433500ec71f822794835e927018ee59e1e. * optimize latency listener to open the menu and check every 20 secconds * more optimizations * hard refresh * abbreviate latency * fix lint * improve hide default overlay * fix chat no longer reconnecting with chat delay * refine chat alerts * fix historical message missing badges and emotes on initial connection * parallelize * revert * add reconnect button inline action * refactor: replace Scrollbar with FrostyScrollbar across chat and settings screens for consistent styling * tweak chat details menu * add scrollbar to release notes, renames for consistency * fix duplicate message case * fix chat delay alerts in auto sync mode * add regex for numeric strings and enhance display name formatting logic * exterminate borders * refactor: simplify active chat modes display in chat details screen * feat: enhance chat input button with delay notification and disable state * fix: wrap chat in SafeArea to prevent UI overflow issues * refactor: remove divider line from video chat and update draggable divider visibility logic * persist overlay in pip mode * fix: update chat delay handling and notifications in chat bottom bar * fix: update chat overlay visibility logic to respect fullscreen settings * tap to show deleted message * fix: prevent accidental chat scrolling when accessing system UI in landscape mode * show latency in portrait * fix: enhance chat delay notifications with dynamic delay time * docs: update CLAUDE.md for improved environment variable instructions and architecture overview * fix: improve chat delay countdown management and message handling * add preliminary release notes * remove agents.md * update lockfile * add initial multi chat feature * add option to persist multi chat tabs * add remove confirmation dialog * improve add chat design * lazy-load tabs * create global assets store to dedupe global asset fetching * improve tab design/styles * update notes * use frosty dialog * update claude md * tweak * add ability to reorder tabs * resolve conflict * merge cleanup * format * update release notes * add chat delay sync completion tracking to prevent countdown re-appearance * add tests * fix * update release notes * bump
2026-01-01 22:28:17 -05:00
/// Timer used for updating the chat delay countdown message.
Timer? _chatDelayCountdownTimer;
/// Reference to the current countdown message for direct updates (avoids O(n) search).
IRCMessage? _countdownMessage;
/// Tracks whether the initial chat delay sync has completed for the current session.
/// Prevents the countdown from re-appearing when latency updates arrive after initial sync.
bool _chatDelaySyncCompleted = false;
/// The current timer for the sleep timer if active.
Timer? sleepTimer;
/// The time remaining for the sleep timer.
@observable
var timeRemaining = const Duration();
/// A notification message to display above the chat.
@readonly
String? _notification;
/// The list of chat messages to render and display.
@readonly
var _messages = ObservableList<IRCMessage>();
/// The list of chat messages that should be rendered. Used to prevent jank when resuming scroll.
@computed
List<IRCMessage> get renderMessages {
// If autoscroll is disabled, render ALL messages in chat.
// The second condition is to prevent an out-of-range index error with sublist.
feat(chat): add bubbles for shared chat participant channels (#581) * feat(chat): add bubbles for shared chat participant channels Twitch's native shared chat previously had no way to interact with participant channels the way manually-added chats work. Adds per-participant bubbles alongside manual tabs: tapping one spotlights that channel (fading the rest), hiding one filters its messages from the feed entirely. Defaults to unfaded, resets on rejoin (fresh ChatStore per connect). Manual "merged mode" fading is untouched and unaffected. * refactor(chat): dedup shared-chat tag lookup and extract fade policy - add IRCMessage.sourceChannelId, replacing three copies of the same source-room-id/room-id tag lookup - move the shared-chat spotlight/merged-mode fade decision out of ChatMessage's build into ChatStore.shouldFadeMessage, matching the extract-into-store convention already used for SharedChatBubbleState - factor the tab-bar item's Padding/Center wrapper into a shared _wrapItem helper instead of duplicating it per branch * fix(chat): don't spotlight a hidden shared-chat bubble toggleFocus didn't check hiddenChannelIds, so tapping a hidden bubble's chip added it to the spotlight set — fading every other participant to showcase a channel whose own messages were already filtered out of the feed. * fix(chat): stop shared-chat detection flapping on system messages _isInSharedChatMode was recomputed from every PRIVMSG/NOTICE/USERNOTICE, but only PRIVMSG reliably carries source-room-id for a session's duration. A sub/raid/announcement without the tag would flip the flag off and back on within a single live session. Previously this only risked a redundant asset refetch (already guarded); now the shared chat bubble bar reads the flag directly, so a flap would visibly collapse and reopen it. Scope detection to PRIVMSG only.
2026-07-03 00:16:49 -04:00
final base = (!_autoScroll || _messages.length < _renderMessageLimit)
? _messages
: _messages.sublist(_messages.length - _renderMessageLimit);
// Filter out messages from shared chat participant channels the user
// has hidden. Short-circuit when nothing is hidden (the common case).
if (sharedChatBubbles.hiddenChannelIds.isEmpty) return base;
return base.where((message) {
final sourceChannelId = message.sourceChannelId;
return sourceChannelId == null ||
!sharedChatBubbles.hiddenChannelIds.contains(sourceChannelId);
}).toList();
}
/// If the chat should automatically scroll/jump to the latest message.
@readonly
var _autoScroll = true;
/// Tracks users banned/timed-out via CLEARCHAT so the moderation menu only
/// offers an unban action when it applies.
final _bannedUserTracker = BannedUserTracker();
/// Whether [userId] is currently banned or within an unexpired timeout
/// (as observed from CLEARCHAT in this session).
bool isUserBannedOrTimedOut(String userId) =>
_bannedUserTracker.isBannedOrTimedOut(userId, DateTime.now());
/// Forget a user's ban state after a successful unban so the action hides.
void clearUserBanState(String userId) => _bannedUserTracker.clear(userId);
/// Freezes the rendered list while the user is touching it, so a long-press
/// target can't scroll out from under the finger and get its gesture
/// recognizer disposed mid-press. Plain field (not observable): it only gates
/// the periodic [addMessages] flush, which reads it each 200ms tick.
final _interactionPause = ChatInteractionPause();
/// Hooks for the message list to report touch start/move/end (see [Chat]).
void onMessageListPointerDown(int pointer, Offset position) =>
_interactionPause.pointerDown(pointer, position);
void onMessageListPointerMove(int pointer, Offset position) =>
_interactionPause.pointerMove(pointer, position);
void onMessageListPointerUp(int pointer) =>
_interactionPause.pointerUp(pointer);
@readonly
var _inputText = '';
@readonly
var _showSendButton = false;
@readonly
var _showEmoteAutocomplete = false;
@readonly
var _showMentionAutocomplete = false;
v5 (#463) * migrate to dio * ignore folders * simplify twitch api headers handling * clean up main * simplify logs * optimize profile picture fetching fixes refetches on tab switch * update claude md * refactor irc.dart * update copilot instructions with essential commands and project structure details * implement message sending state management and UI updates * refactor notification handling and add copy-paste functionality in chat * refactor AlertMessage to support vertical layout and optional padding * refactor error messages for consistency and clarity across various components * refactor chat layout to use draggable divider and improve chat width settings * refactor Uptime widget to use SharedTimerService for synchronized updates * refactor search results components to handle null future states gracefully * refactor loading indicators to use skeleton loaders for improved user experience * refactor UI components for improved layout and responsiveness, enhance skeleton loaders, and streamline padding adjustments * refactor: replace manual blur effects with BlurredContainer for consistency and reusability * refactor: enhance JavaScript execution and error handling in WebView components * refactor: replace app bar with blurred container for improved UI consistency across screens * refactor: streamline video chat layout and enhance PiP drag gesture functionality * revert some app bar changes * refactor: implement Picture-in-Picture drag functionality in VideoChat * refactor: pass currentChannelId to IRCMessage and ChatMessage for improved context * fix large thubmnail width * chore: update Gradle and Kotlin plugin versions for improved compatibility * changes from v4.10.0 branch * feat: integrate AnimatedScrollBorder for improved UI responsiveness across various screens * refactor: update SectionHeader styling and improve theme management * feat: add pinned section to StreamsList and enhance skeleton loader padding * feat: add repository guidelines for project structure, coding style, testing, and security * feat: enhance StreamCard UI with BlurredContainer and adjust border width in theme * feat: implement unfocusInput and safeRequestFocus methods to manage text field focus behavior * feat: enhance Picture-in-Picture drag interactions with haptic feedback and smooth animations * refactor: improve code formatting and readability across multiple files * feat: implement picture-in-picture mode toggle and state management for video playback * feat: reset PiP mode state when pausing video playback * feat: add custom app bar with profile picture and stream info for video chat * feat: convert multiple settings screens to use StatefulWidget and add animated scroll borders * feat: update blur configuration for adaptive alpha based on theme * fix: adjust default font size in SectionHeader widget * feat: enhance PiP mode with drag overlay instruction and UI improvements * fix: improve badge rendering with consistent margin and border for current channel * refactor: replace BackdropFilter with BlurredContainer for improved clarity and maintainability * fix: reduce background transparency in Uptime widget for better visibility * feat: enhance photo view dialog with full resolution toggle and blurred background * fix: reset chat delay to 0 when auto sync is enabled and update settings title for clarity * fix: adjust border width in theme to improve consistency * feat: add forceDarkMode option to BlurredContainer for improved theme adaptability * feat: implement offline followed channels feature with UI integration and settings option * fix: increase font size and weight for offline status text for better readability * feat: remove offline pinned channels feature and update related UI components * feat: optimize offline channels loading behavior based on expansion state * fix: improve clarity and consistency in repository guidelines formatting * feat: update full resolution URL handling and button visibility logic * feat: replace app bar with blurred version in chat-only mode and add animated scroll border * feat: refactor video chat layout for improved chat and video display in landscape mode * feat: remove bottom bar visibility setting and adjust chat layout accordingly * fix: simplify condition for displaying offline channels section in following tab * feat: enhance reply thread display with indentation and reply icon * feat: implement showModalBottomSheetWithProperFocus for improved focus handling * feat: add gradient direction support to BlurredContainer for enhanced visual effects * feat: enhance NavigationBar and Theme settings for improved visual consistency * feat: add gradient direction support to BlurredContainer in VideoChat for enhanced visual effects * chore: update .gitignore to include .cursor file for better environment management * fix: update PiP drag gesture conditions to include video paused state for better user experience * refactor: replace ScrollController with SettingsPageLayout in settings screens for improved layout management * refactor: centralize orientation handling by introducing OrientationUtils for improved readability and maintainability * refactor: replace OrientationUtils with ContextExtensions for streamlined context-based access to theme, layout, and API dependencies * refactor: improve video chat UI by adjusting title layout and adding stream info tooltips for better user experience * refactor: adjust titleSpacing in theme and navigation components for improved layout consistency * refactor: update stream info timer handling and overlay management for improved UI responsiveness * refactor: enhance stream info timer logic and overlay visibility management for chat-only mode * refactor: enhance input decoration theme in FrostyThemes for improved visual consistency and responsiveness * refactor: adjust inputDecorationTheme padding in FrostyThemes for improved visual consistency * refactor: enhance video overlay management by including video preview overlay in hideElements for improved UI consistency * refactor: improve chat bottom bar padding and video chat layout for enhanced UI consistency * refactor: adjust chat padding to account for device bottom insets for improved layout consistency * refactor: update text styles in FrostyThemes for improved visual consistency across UI components * refactor: update iOS minimum deployment target to 13.0 for improved compatibility * refactor: adjust chat bottom padding based on emote menu visibility for improved layout consistency * refactor: adjust padding values in StreamsList for improved layout consistency * refactor: replace Padding with AnimatedPadding in Chat for smoother layout transitions refactor: replace Container with AnimatedContainer in BlurredContainer for smoother animations * refactor: remove unnecessary radius property from ProfilePicture in OfflineChannelCard for cleaner code * refactor: enhance chat bottom bar suffix icon to display message delay with tooltip for improved user experience * refactor: update hint text and tooltips in chat bottom bar and search for improved clarity * refactor: simplify notification display logic and enhance chat input behavior for improved user experience * refactor: enhance layout consistency by adjusting spacing in various components across the channel and home screens * refactor: introduce LiveIndicator widget and adjust spacing in channel and video components for improved layout consistency * refactor: remove monospace font family from chat bottom bar for improved text rendering * refactor: reduce notification animation duration and change dismiss direction for improved user experience * refactor: replace VideoBar with StreamInfoBar in video components for improved layout and consistency * refactor: adjust font sizes and spacing in StreamInfoBar for improved layout consistency * refactor: standardize font sizes and update gradient stops in video components for improved visual consistency * refactor: update tooltip padding and background color in theme for improved visual consistency * refactor: enhance tooltip behavior and standardize font sizes in StreamInfoBar and related components for improved visual consistency * refactor: add showThumbnail option to LargeStreamCardSkeletonLoader for improved layout flexibility * refactor: add StreamInfoBarSkeletonLoader for improved layout consistency in stream components * refactor: add shadow effects to icons and text in StreamInfoBar and VideoOverlay for improved visual depth * refactor: update defaultOverlayOpacity to 0.0 for improved overlay behavior * fix: correct stream info text color on overlay * refactor: implement a new color picker dialog with random color generation for enhanced user experience * refactor: adjust gradient colors and stops in VideoOverlay for improved visual consistency * refactor: refine gradient colors and stops in VideoOverlay for enhanced visual clarity * refactor: add isCompact parameter to StreamInfoBar for responsive text sizing * fix: update tooltip background color to use surface color for better contrast * feat: add shared chat mode support in chat store and update StreamInfoBar for visual indication * refactor: disable debug print for IRC messages to reduce log clutter * feat: implement chat color selection feature with user color management in chat settings * refactor: replace color adjustment logic with new contrast-aware utility for chat names * refactor: simplify chat details UI by replacing list tiles with action cards and removing unused clear dialog * refactor: enhance chat details UI by improving time formatting and adding label styling to action cards * refactor: update chat color terminology to 'Username color' for clarity in UI * refactor: enhance chat details UI by introducing active chat modes display and improving layout structure * refactor: improve chat details layout by replacing ListTile with Padding and adding a Divider for better visual separation * refactor: remove chat notifications positioning setting and adjust notification alignment in video chat * refactor: streamline StreamInfoBar component by consolidating offline handling and improving layout for better readability * refactor: enhance StreamInfoBar by adding tooltip for streamer name and improving text overflow handling * refactor: adjust tooltip display duration in StreamInfoBar and update theme configuration * refactor: adjust margin and padding in StreamCard for improved layout consistency * chore: update dependencies in pubspec.yaml and pubspec.lock for Firebase and other packages * template * chore: update iOS platform version to 15.0 and Firebase dependencies to 12.2.0 * refactor: simplify StreamInfoBar layout by reducing nested widgets and improving text color handling * format * feat: enhance Channel model and StreamInfoBar to support offline channel details * feat: add offline indicator and improve StreamInfoBar layout for better offline channel display * fix: adjust icon color opacity in StreamInfoBar for improved visibility * feat: enhance dismissal animation in FrostyPhotoViewDialog to track swipe direction * docs: update copilot instructions for clarity and additional error handling details * refactor: optimize latency tooltip layout and improve offline indicator styling in VideoOverlay * feat: implement shared chat asset fetching and participant management in ChatAssetsStore * refactor: replace Observer with Builder for improved widget rebuilding in VideoOverlay * refactor: update StreamInfoBar border styling and adjust layout in VideoOverlay for improved visual consistency * feat: add showTextShadows property to StreamInfoBar for customizable text shadow display * refactor: adjust layout in VideoOverlay by adding padding to improve spacing and visual consistency * refactor: enhance VideoOverlay gradients and layout for improved visual hierarchy and user experience * refactor: reduce vertical padding in VideoOverlay for improved layout consistency * refactor: remove overlay opacity settings from VideoSettings and SettingsStore for simplification * refactor: improve text overlay transition in VideoChat for better user experience * Revert "refactor: improve text overlay transition in VideoChat for better user experience" This reverts commit fd16ff5ec30ec266157e5c8a9d4a6090c91717f6. * refactor: wrap videoOverlay in ColoredBox for improved layout handling * refactor: optimize animation duration and transition curves in VideoChat for smoother interactions * refactor: dispose searchScrollController in HomeStoreBase to prevent memory leaks * refactor: simplify gradient definitions in VideoOverlay for improved readability and maintainability * refactor: remove 'Offline' text overlay from VideoOverlay for cleaner UI * refactor: add refresh functionality for assets in ChatDetails with loading indicators * refactor: update visibility conditions for uptime, viewer count, and category display in StreamInfoBar * refactor: replace AlertDialog with FrostyDialog for consistent dialog styling across the application * refactor: enhance layout handling in FrostyPageView to prevent overflow during height transitions * refactor: replace ColorPickerDialog with AccentColorPickerDialog for improved color selection experience * refactor: replace theme and accent color settings with dedicated components for improved modularity and readability * refactor: replace ElevatedButton with TextButton for consistent button styling across dialogs * refactor: integrate MobX Observer for reactive state management in settings widgets * refactor: update theme and dialog components for improved styling and consistency * refactor: enhance dialog styling with rounded corners and border in theme configuration * refactor: improve dialog messages for unauthorized access handling * refactor: update bodyLarge text style in theme configuration to include font weight * refactor: standardize Divider usage and adjust theme styles for improved consistency * refactor: adjust Divider properties and theme styles for enhanced visual consistency * chore: remove GEMINI.md file as it is no longer needed for project documentation * refactor: enhance token validation and reconnect logic in AuthBase for improved error handling * format * refactor: integrate landscape cutout settings into VideoChat layout for improved responsiveness * refactor: implement app lifecycle handling in VideoChat and enhance stream info update logic in VideoStore * refactor: update landscape cutout conditionals in VideoChat layout for improved responsiveness * update AGENTS.md * add scrollbar to search * fix scrolling exception * update CLAUDE.md * 5 auth reconnect attemps then log out * increase reply max lines to 2 * simplify and improve reply formatting * add prime icon * better draggable divider * support draggable divider in fullscreen overlay chat * add text shadow in fullscreen chat overlay mode * format * add landscape checks * video store optimization attempts * Dispose WebViewController and remove JavaScript channels properly * Track and cleanup all MutationObservers to prevent accumulation * Throttle latency updates to once per 5 seconds (reduces CPU load) * Add timeout protection and null checks for robustness * Prevent duplicate event listeners on page reloads * double tap divider to reset * Revert "video store optimization attempts" This reverts commit b1df7b0de473543283211a489dca698d9d241857. * optimize video store attempt 2 * Revert "double tap divider to reset" This reverts commit aeb26a433500ec71f822794835e927018ee59e1e. * optimize latency listener to open the menu and check every 20 secconds * more optimizations * hard refresh * abbreviate latency * fix lint * improve hide default overlay * fix chat no longer reconnecting with chat delay * refine chat alerts * fix historical message missing badges and emotes on initial connection * parallelize * revert * add reconnect button inline action * refactor: replace Scrollbar with FrostyScrollbar across chat and settings screens for consistent styling * tweak chat details menu * add scrollbar to release notes, renames for consistency * fix duplicate message case * fix chat delay alerts in auto sync mode * add regex for numeric strings and enhance display name formatting logic * exterminate borders * refactor: simplify active chat modes display in chat details screen * feat: enhance chat input button with delay notification and disable state * fix: wrap chat in SafeArea to prevent UI overflow issues * refactor: remove divider line from video chat and update draggable divider visibility logic * persist overlay in pip mode * fix: update chat delay handling and notifications in chat bottom bar * fix: update chat overlay visibility logic to respect fullscreen settings * tap to show deleted message * fix: prevent accidental chat scrolling when accessing system UI in landscape mode * show latency in portrait * fix: enhance chat delay notifications with dynamic delay time * docs: update CLAUDE.md for improved environment variable instructions and architecture overview * fix: improve chat delay countdown management and message handling * add preliminary release notes * remove agents.md * update lockfile * add initial multi chat feature * add option to persist multi chat tabs * add remove confirmation dialog * improve add chat design * lazy-load tabs * create global assets store to dedupe global asset fetching * improve tab design/styles * update notes * use frosty dialog * update claude md * tweak * add ability to reorder tabs * resolve conflict * merge cleanup * format * update release notes * add chat delay sync completion tracking to prevent countdown re-appearance * add tests * fix * update release notes * bump
2026-01-01 22:28:17 -05:00
/// Whether the chat is currently in shared chat mode (based on source-room-id tag presence).
@readonly
var _isInSharedChatMode = false;
/// Whether we're waiting for server acknowledgment of a sent message.
@readonly
var _isWaitingForAck = false;
/// Whether the chat WebSocket is currently connected.
@readonly
var _isConnected = false;
/// Whether we've successfully connected at least once (to distinguish
/// "connecting" from "disconnected" in the UI).
@readonly
var _hasConnected = false;
/// The logged-in user's appearance in chat.
@readonly
var _userState = const USERSTATE();
@observable
var expandChat = false;
@observable
IRCMessage? replyingToMessage;
/// Emotes matching the current autocomplete search term.
@computed
List<Emote> get matchingEmotes {
if (!_showEmoteAutocomplete) return const [];
final searchTerm = _inputText.split(' ').last.toLowerCase();
if (searchTerm.isEmpty) return const [];
return [
...assetsStore.userEmoteToObject.values,
...assetsStore.bttvEmotes,
...assetsStore.ffzEmotes,
...assetsStore.sevenTVEmotes,
].where((emote) => emote.name.toLowerCase().contains(searchTerm)).toList();
}
/// Chatters matching the current mention autocomplete search term.
@computed
List<String> get matchingChatters {
if (!_showMentionAutocomplete) return const [];
2026-01-06 20:22:14 -05:00
final searchTerm = _inputText
.split(' ')
.last
.replaceFirst('@', '')
.toLowerCase();
return chatDetailsStore.chatUsers
.where((chatter) => chatter.contains(searchTerm))
.toList();
}
feat(video,chat): native player, ad-break awareness, chat send/delay reliability, and tab redesign (#567) Squash-merge commit. Covers four areas: native video player, chat reliability, multi-tab, and hardening. ## Native video player - Direct HLS playback via `better_native_video_player` (forked from `plug-and-pay/flutter-native-video-player`, patched on `frosty-patches` branch) - Twitch GQL playback token fetching with platform cookie extraction (iOS Swift + Android Kotlin plugins) for authenticated streams - Quality selection (source, 720p, 480p, 360p, 160p, audio-only) persisted per channel - Picture-in-picture: iOS automatic inline PiP, Android auto-PiP on API 31+ guarded against older devices - Latency polling, chat latency sync, stall detection/recovery, startup auto-pause recovery, watchdog timers - **Twitch stitched-ad break detection** (HLS `EXT-X-DATERANGE`) on both platforms, emitting `adBreakChanged` so the host suspends latency/stall recovery and chat sync during ads (program-date-time is unreliable then). Matches `CLASS="twitch-stitched-ad"` / `ID="stitched-ad-"` **and** the `X-TV-TWITCH-AD-*` attribute prefix (the durable signal streamlink/yt-dlp use) - Shared `VideoPlayerInterface` so WebView and native paths are interchangeable via settings toggle - `PlaybackAccessToken` model, `TwitchGqlApi` client ## Chat delay & send reliability - **Optimistic send-finalize**: Twitch acks a sent message with a per-PRIVMSG USERSTATE (not an echo), which it can intermittently drop — more so under a long chat delay. A missing ack no longer shows a false "message may not have been sent" error; the send is finalized optimistically (local echo rendered), and only genuine rejection NOTICEs surface an error. Ack timeout scaled by the chat delay. - **Per-line chat-delay bypass**: control/state lines (USERSTATE/ROOMSTATE/GLOBALUSERSTATE), rejection NOTICEs, the reconnect notice, and untagged server lines bypass the delay so send-acks and PONGs aren't stalled; only displayable chat content is delayed, staying in sync with delayed video. - **Measured chat bottom-bar height**: the message list reflows to the composer's real measured height, fixing the input overlapping messages when a long message expands it (replaces a fixed-constant estimate). - IRC tag parsing handles valueless and escaped tags per the IRCv3 message-tags spec (fixes a recent-messages RangeError on certain tags). ## Chat / multi-tab - Redesigned tab chips: unread dot indicator, chips dim until WebSocket connects - Animated tab options popover replacing `MenuAnchor` (no animation hook in Flutter 3.44) - Simplified `ChatTabs` from `StatefulWidget` to `StatelessWidget` - Focus-current-channel fade bump to 0.55; section-header alpha lifted to match the muted-label tier - `addTab` now calls `setActiveTab` to snapshot outgoing tab's `lastSeenMessageId` — fixes spurious unread dots after adding a tab - `onActivateSourceTab` threaded into `ChatUserModal` so Reply in merged mode switches to the correct source tab's composer ## Bug fixes and hardening - **Reverted the experimental iOS low-latency mode** (5s live-edge join + 1.05x catch-up): AVPlayer can't sustain <~18s on Twitch (declared `TARGETDURATION:6` paces playlist refreshes), and the offset starved the buffer into pause-on-launch. Default join distance restored. - Fork (Android): **cap `BEHIND_LIVE_WINDOW` recovery** so a stream repeatedly falling off the live window can't silently re-prepare forever; emits `error` on exhaustion so the host recovery ladder takes over - Guard all Android `setAutoPipMode` calls with `_autoPipAvailable` — prevents `PlatformException` on Android 8–11; check `_disposed` after `isAutoPipAvailable` await to prevent post-dispose auto-PiP re-enable - Remove `_isInPipMode` guard from `_onPaused` so `_paused` tracks actual state, fixing PiP play/pause toggle getting stuck - Tighten iOS cookie domain check to exact `twitch.tv` / `.twitch.tv` suffix - Invalidate the stored web session token when Twitch rejects it with a 401 (profile card flips back to unlinked; future loads skip the doomed authenticated request), and re-extract the cookie on launch when logged in without a linked session - Send `play_session_id` and `player_backend=mediaplayer` to Usher, matching the web client / streamlink - Fork (iOS): restore program-date-time latency measurement (a prior rev measured distance to the manifest edge, reading ~0s and silently disabling high-latency recovery / chat-delay auto-sync); release platform views on dispose (per-stream view + AVPlayerViewController leak), track the observed AVPlayerItem for KVO removal (sibling-view crash), main-thread seek results, resolve superseded load futures - Fork (Android): clean up method handlers orphaned by PiP-time view disposal (leaked audio-focus listeners), drop the live-offset re-anchoring seekTo on metadata updates (latency creep), restore pre-duck volume, respect user pause in the stall watchdog, resolve superseded load futures - Deep review pass: expire the quality-switch flag so stall recovery isn't disabled for the session, cap latency-driven recovery (clock-skew loop), generation-guard the error overlay, two-strike offline confirmation, controller null-safety on quality switch - Tighten `/me` local-echo match (no longer renders `/meow ...` as an action); clear pending send text on disconnect ## Web / docs - Remove stale Cloudflare Images binding from `wrangler.jsonc` (covered by `images.unoptimized: true`) - Correct `web/AGENTS.md` Cache Components claim (feature not enabled) - Repo and agent config cleanup ## Test plan - [x] `flutter analyze` — clean (frosty + plugin lib) - [x] `flutter test` — 319/319 pass (adds `ChatLatencySync`, `StreamInfoPoller`, video timing invariants, `PlaybackAccessToken`, IRC tag parsing) - [x] Android plugin Kotlin compiles against the bumped fork rev - [ ] Native player plays live streams on iOS and Android - [ ] Quality switching works and persists across channel reopens - [ ] PiP enters/exits correctly; pause/resume toggle in PiP window works - [ ] Audio-only mode does not crash on Android < API 31 - [ ] Sending under a long synced chat delay no longer shows a false "may not have been sent" error - [ ] Long composer text reflows the message list (no input/message overlap) - [ ] Multi-tab: adding a tab does not mark previous tab as unread - [ ] Merged chat: Reply from user modal targets the correct tab's composer 🤖 Generated with [Claude Code](https://claude.com/claude-code)
2026-06-13 17:06:24 -04:00
/// Measured height of the rendered bottom bar (input plus any reply or
/// autocomplete overlays). The bar reports this via [setBottomBarHeight] so
/// the message list's bottom padding tracks the bar's *true* height —
/// including multi-line input growth and OS text scaling, which fixed
/// per-overlay constants silently undercount.
final _measuredBottomBarHeight = Observable<double?>(null);
feat(video,chat): native player, ad-break awareness, chat send/delay reliability, and tab redesign (#567) Squash-merge commit. Covers four areas: native video player, chat reliability, multi-tab, and hardening. ## Native video player - Direct HLS playback via `better_native_video_player` (forked from `plug-and-pay/flutter-native-video-player`, patched on `frosty-patches` branch) - Twitch GQL playback token fetching with platform cookie extraction (iOS Swift + Android Kotlin plugins) for authenticated streams - Quality selection (source, 720p, 480p, 360p, 160p, audio-only) persisted per channel - Picture-in-picture: iOS automatic inline PiP, Android auto-PiP on API 31+ guarded against older devices - Latency polling, chat latency sync, stall detection/recovery, startup auto-pause recovery, watchdog timers - **Twitch stitched-ad break detection** (HLS `EXT-X-DATERANGE`) on both platforms, emitting `adBreakChanged` so the host suspends latency/stall recovery and chat sync during ads (program-date-time is unreliable then). Matches `CLASS="twitch-stitched-ad"` / `ID="stitched-ad-"` **and** the `X-TV-TWITCH-AD-*` attribute prefix (the durable signal streamlink/yt-dlp use) - Shared `VideoPlayerInterface` so WebView and native paths are interchangeable via settings toggle - `PlaybackAccessToken` model, `TwitchGqlApi` client ## Chat delay & send reliability - **Optimistic send-finalize**: Twitch acks a sent message with a per-PRIVMSG USERSTATE (not an echo), which it can intermittently drop — more so under a long chat delay. A missing ack no longer shows a false "message may not have been sent" error; the send is finalized optimistically (local echo rendered), and only genuine rejection NOTICEs surface an error. Ack timeout scaled by the chat delay. - **Per-line chat-delay bypass**: control/state lines (USERSTATE/ROOMSTATE/GLOBALUSERSTATE), rejection NOTICEs, the reconnect notice, and untagged server lines bypass the delay so send-acks and PONGs aren't stalled; only displayable chat content is delayed, staying in sync with delayed video. - **Measured chat bottom-bar height**: the message list reflows to the composer's real measured height, fixing the input overlapping messages when a long message expands it (replaces a fixed-constant estimate). - IRC tag parsing handles valueless and escaped tags per the IRCv3 message-tags spec (fixes a recent-messages RangeError on certain tags). ## Chat / multi-tab - Redesigned tab chips: unread dot indicator, chips dim until WebSocket connects - Animated tab options popover replacing `MenuAnchor` (no animation hook in Flutter 3.44) - Simplified `ChatTabs` from `StatefulWidget` to `StatelessWidget` - Focus-current-channel fade bump to 0.55; section-header alpha lifted to match the muted-label tier - `addTab` now calls `setActiveTab` to snapshot outgoing tab's `lastSeenMessageId` — fixes spurious unread dots after adding a tab - `onActivateSourceTab` threaded into `ChatUserModal` so Reply in merged mode switches to the correct source tab's composer ## Bug fixes and hardening - **Reverted the experimental iOS low-latency mode** (5s live-edge join + 1.05x catch-up): AVPlayer can't sustain <~18s on Twitch (declared `TARGETDURATION:6` paces playlist refreshes), and the offset starved the buffer into pause-on-launch. Default join distance restored. - Fork (Android): **cap `BEHIND_LIVE_WINDOW` recovery** so a stream repeatedly falling off the live window can't silently re-prepare forever; emits `error` on exhaustion so the host recovery ladder takes over - Guard all Android `setAutoPipMode` calls with `_autoPipAvailable` — prevents `PlatformException` on Android 8–11; check `_disposed` after `isAutoPipAvailable` await to prevent post-dispose auto-PiP re-enable - Remove `_isInPipMode` guard from `_onPaused` so `_paused` tracks actual state, fixing PiP play/pause toggle getting stuck - Tighten iOS cookie domain check to exact `twitch.tv` / `.twitch.tv` suffix - Invalidate the stored web session token when Twitch rejects it with a 401 (profile card flips back to unlinked; future loads skip the doomed authenticated request), and re-extract the cookie on launch when logged in without a linked session - Send `play_session_id` and `player_backend=mediaplayer` to Usher, matching the web client / streamlink - Fork (iOS): restore program-date-time latency measurement (a prior rev measured distance to the manifest edge, reading ~0s and silently disabling high-latency recovery / chat-delay auto-sync); release platform views on dispose (per-stream view + AVPlayerViewController leak), track the observed AVPlayerItem for KVO removal (sibling-view crash), main-thread seek results, resolve superseded load futures - Fork (Android): clean up method handlers orphaned by PiP-time view disposal (leaked audio-focus listeners), drop the live-offset re-anchoring seekTo on metadata updates (latency creep), restore pre-duck volume, respect user pause in the stall watchdog, resolve superseded load futures - Deep review pass: expire the quality-switch flag so stall recovery isn't disabled for the session, cap latency-driven recovery (clock-skew loop), generation-guard the error overlay, two-strike offline confirmation, controller null-safety on quality switch - Tighten `/me` local-echo match (no longer renders `/meow ...` as an action); clear pending send text on disconnect ## Web / docs - Remove stale Cloudflare Images binding from `wrangler.jsonc` (covered by `images.unoptimized: true`) - Correct `web/AGENTS.md` Cache Components claim (feature not enabled) - Repo and agent config cleanup ## Test plan - [x] `flutter analyze` — clean (frosty + plugin lib) - [x] `flutter test` — 319/319 pass (adds `ChatLatencySync`, `StreamInfoPoller`, video timing invariants, `PlaybackAccessToken`, IRC tag parsing) - [x] Android plugin Kotlin compiles against the bumped fork rev - [ ] Native player plays live streams on iOS and Android - [ ] Quality switching works and persists across channel reopens - [ ] PiP enters/exits correctly; pause/resume toggle in PiP window works - [ ] Audio-only mode does not crash on Android < API 31 - [ ] Sending under a long synced chat delay no longer shows a false "may not have been sent" error - [ ] Long composer text reflows the message list (no input/message overlap) - [ ] Multi-tab: adding a tab does not mark previous tab as unread - [ ] Merged chat: Reply from user modal targets the correct tab's composer 🤖 Generated with [Claude Code](https://claude.com/claude-code)
2026-06-13 17:06:24 -04:00
/// Current bottom bar height, used to dynamically pad the message list so the
/// bar never overlaps messages. Falls back to the single-line base height
/// until the real bar reports its first measurement.
@computed
double get bottomBarHeight =>
_measuredBottomBarHeight.value ?? _baseBottomBarHeight;
/// Reports the bar's real rendered height. Sub-pixel changes are ignored to
/// avoid needless message-list relayouts.
void setBottomBarHeight(double height) {
final current = _measuredBottomBarHeight.value;
if (current != null && (current - height).abs() < 0.5) return;
runInAction(() => _measuredBottomBarHeight.value = height);
}
ChatStoreBase({
required this.twitchApi,
2021-11-23 04:15:13 -05:00
required this.auth,
required this.chatDetailsStore,
required this.assetsStore,
2021-11-23 04:15:13 -05:00
required this.settings,
required this.channelName,
2022-01-15 15:46:46 -05:00
required this.channelId,
required this.displayName,
2021-11-23 04:15:13 -05:00
}) {
// Create a reaction that will reconnect to chat when logging in or out.
// Closing the channel will trigger a reconnect with the new credentials.
reactions.add(
v5 (#463) * migrate to dio * ignore folders * simplify twitch api headers handling * clean up main * simplify logs * optimize profile picture fetching fixes refetches on tab switch * update claude md * refactor irc.dart * update copilot instructions with essential commands and project structure details * implement message sending state management and UI updates * refactor notification handling and add copy-paste functionality in chat * refactor AlertMessage to support vertical layout and optional padding * refactor error messages for consistency and clarity across various components * refactor chat layout to use draggable divider and improve chat width settings * refactor Uptime widget to use SharedTimerService for synchronized updates * refactor search results components to handle null future states gracefully * refactor loading indicators to use skeleton loaders for improved user experience * refactor UI components for improved layout and responsiveness, enhance skeleton loaders, and streamline padding adjustments * refactor: replace manual blur effects with BlurredContainer for consistency and reusability * refactor: enhance JavaScript execution and error handling in WebView components * refactor: replace app bar with blurred container for improved UI consistency across screens * refactor: streamline video chat layout and enhance PiP drag gesture functionality * revert some app bar changes * refactor: implement Picture-in-Picture drag functionality in VideoChat * refactor: pass currentChannelId to IRCMessage and ChatMessage for improved context * fix large thubmnail width * chore: update Gradle and Kotlin plugin versions for improved compatibility * changes from v4.10.0 branch * feat: integrate AnimatedScrollBorder for improved UI responsiveness across various screens * refactor: update SectionHeader styling and improve theme management * feat: add pinned section to StreamsList and enhance skeleton loader padding * feat: add repository guidelines for project structure, coding style, testing, and security * feat: enhance StreamCard UI with BlurredContainer and adjust border width in theme * feat: implement unfocusInput and safeRequestFocus methods to manage text field focus behavior * feat: enhance Picture-in-Picture drag interactions with haptic feedback and smooth animations * refactor: improve code formatting and readability across multiple files * feat: implement picture-in-picture mode toggle and state management for video playback * feat: reset PiP mode state when pausing video playback * feat: add custom app bar with profile picture and stream info for video chat * feat: convert multiple settings screens to use StatefulWidget and add animated scroll borders * feat: update blur configuration for adaptive alpha based on theme * fix: adjust default font size in SectionHeader widget * feat: enhance PiP mode with drag overlay instruction and UI improvements * fix: improve badge rendering with consistent margin and border for current channel * refactor: replace BackdropFilter with BlurredContainer for improved clarity and maintainability * fix: reduce background transparency in Uptime widget for better visibility * feat: enhance photo view dialog with full resolution toggle and blurred background * fix: reset chat delay to 0 when auto sync is enabled and update settings title for clarity * fix: adjust border width in theme to improve consistency * feat: add forceDarkMode option to BlurredContainer for improved theme adaptability * feat: implement offline followed channels feature with UI integration and settings option * fix: increase font size and weight for offline status text for better readability * feat: remove offline pinned channels feature and update related UI components * feat: optimize offline channels loading behavior based on expansion state * fix: improve clarity and consistency in repository guidelines formatting * feat: update full resolution URL handling and button visibility logic * feat: replace app bar with blurred version in chat-only mode and add animated scroll border * feat: refactor video chat layout for improved chat and video display in landscape mode * feat: remove bottom bar visibility setting and adjust chat layout accordingly * fix: simplify condition for displaying offline channels section in following tab * feat: enhance reply thread display with indentation and reply icon * feat: implement showModalBottomSheetWithProperFocus for improved focus handling * feat: add gradient direction support to BlurredContainer for enhanced visual effects * feat: enhance NavigationBar and Theme settings for improved visual consistency * feat: add gradient direction support to BlurredContainer in VideoChat for enhanced visual effects * chore: update .gitignore to include .cursor file for better environment management * fix: update PiP drag gesture conditions to include video paused state for better user experience * refactor: replace ScrollController with SettingsPageLayout in settings screens for improved layout management * refactor: centralize orientation handling by introducing OrientationUtils for improved readability and maintainability * refactor: replace OrientationUtils with ContextExtensions for streamlined context-based access to theme, layout, and API dependencies * refactor: improve video chat UI by adjusting title layout and adding stream info tooltips for better user experience * refactor: adjust titleSpacing in theme and navigation components for improved layout consistency * refactor: update stream info timer handling and overlay management for improved UI responsiveness * refactor: enhance stream info timer logic and overlay visibility management for chat-only mode * refactor: enhance input decoration theme in FrostyThemes for improved visual consistency and responsiveness * refactor: adjust inputDecorationTheme padding in FrostyThemes for improved visual consistency * refactor: enhance video overlay management by including video preview overlay in hideElements for improved UI consistency * refactor: improve chat bottom bar padding and video chat layout for enhanced UI consistency * refactor: adjust chat padding to account for device bottom insets for improved layout consistency * refactor: update text styles in FrostyThemes for improved visual consistency across UI components * refactor: update iOS minimum deployment target to 13.0 for improved compatibility * refactor: adjust chat bottom padding based on emote menu visibility for improved layout consistency * refactor: adjust padding values in StreamsList for improved layout consistency * refactor: replace Padding with AnimatedPadding in Chat for smoother layout transitions refactor: replace Container with AnimatedContainer in BlurredContainer for smoother animations * refactor: remove unnecessary radius property from ProfilePicture in OfflineChannelCard for cleaner code * refactor: enhance chat bottom bar suffix icon to display message delay with tooltip for improved user experience * refactor: update hint text and tooltips in chat bottom bar and search for improved clarity * refactor: simplify notification display logic and enhance chat input behavior for improved user experience * refactor: enhance layout consistency by adjusting spacing in various components across the channel and home screens * refactor: introduce LiveIndicator widget and adjust spacing in channel and video components for improved layout consistency * refactor: remove monospace font family from chat bottom bar for improved text rendering * refactor: reduce notification animation duration and change dismiss direction for improved user experience * refactor: replace VideoBar with StreamInfoBar in video components for improved layout and consistency * refactor: adjust font sizes and spacing in StreamInfoBar for improved layout consistency * refactor: standardize font sizes and update gradient stops in video components for improved visual consistency * refactor: update tooltip padding and background color in theme for improved visual consistency * refactor: enhance tooltip behavior and standardize font sizes in StreamInfoBar and related components for improved visual consistency * refactor: add showThumbnail option to LargeStreamCardSkeletonLoader for improved layout flexibility * refactor: add StreamInfoBarSkeletonLoader for improved layout consistency in stream components * refactor: add shadow effects to icons and text in StreamInfoBar and VideoOverlay for improved visual depth * refactor: update defaultOverlayOpacity to 0.0 for improved overlay behavior * fix: correct stream info text color on overlay * refactor: implement a new color picker dialog with random color generation for enhanced user experience * refactor: adjust gradient colors and stops in VideoOverlay for improved visual consistency * refactor: refine gradient colors and stops in VideoOverlay for enhanced visual clarity * refactor: add isCompact parameter to StreamInfoBar for responsive text sizing * fix: update tooltip background color to use surface color for better contrast * feat: add shared chat mode support in chat store and update StreamInfoBar for visual indication * refactor: disable debug print for IRC messages to reduce log clutter * feat: implement chat color selection feature with user color management in chat settings * refactor: replace color adjustment logic with new contrast-aware utility for chat names * refactor: simplify chat details UI by replacing list tiles with action cards and removing unused clear dialog * refactor: enhance chat details UI by improving time formatting and adding label styling to action cards * refactor: update chat color terminology to 'Username color' for clarity in UI * refactor: enhance chat details UI by introducing active chat modes display and improving layout structure * refactor: improve chat details layout by replacing ListTile with Padding and adding a Divider for better visual separation * refactor: remove chat notifications positioning setting and adjust notification alignment in video chat * refactor: streamline StreamInfoBar component by consolidating offline handling and improving layout for better readability * refactor: enhance StreamInfoBar by adding tooltip for streamer name and improving text overflow handling * refactor: adjust tooltip display duration in StreamInfoBar and update theme configuration * refactor: adjust margin and padding in StreamCard for improved layout consistency * chore: update dependencies in pubspec.yaml and pubspec.lock for Firebase and other packages * template * chore: update iOS platform version to 15.0 and Firebase dependencies to 12.2.0 * refactor: simplify StreamInfoBar layout by reducing nested widgets and improving text color handling * format * feat: enhance Channel model and StreamInfoBar to support offline channel details * feat: add offline indicator and improve StreamInfoBar layout for better offline channel display * fix: adjust icon color opacity in StreamInfoBar for improved visibility * feat: enhance dismissal animation in FrostyPhotoViewDialog to track swipe direction * docs: update copilot instructions for clarity and additional error handling details * refactor: optimize latency tooltip layout and improve offline indicator styling in VideoOverlay * feat: implement shared chat asset fetching and participant management in ChatAssetsStore * refactor: replace Observer with Builder for improved widget rebuilding in VideoOverlay * refactor: update StreamInfoBar border styling and adjust layout in VideoOverlay for improved visual consistency * feat: add showTextShadows property to StreamInfoBar for customizable text shadow display * refactor: adjust layout in VideoOverlay by adding padding to improve spacing and visual consistency * refactor: enhance VideoOverlay gradients and layout for improved visual hierarchy and user experience * refactor: reduce vertical padding in VideoOverlay for improved layout consistency * refactor: remove overlay opacity settings from VideoSettings and SettingsStore for simplification * refactor: improve text overlay transition in VideoChat for better user experience * Revert "refactor: improve text overlay transition in VideoChat for better user experience" This reverts commit fd16ff5ec30ec266157e5c8a9d4a6090c91717f6. * refactor: wrap videoOverlay in ColoredBox for improved layout handling * refactor: optimize animation duration and transition curves in VideoChat for smoother interactions * refactor: dispose searchScrollController in HomeStoreBase to prevent memory leaks * refactor: simplify gradient definitions in VideoOverlay for improved readability and maintainability * refactor: remove 'Offline' text overlay from VideoOverlay for cleaner UI * refactor: add refresh functionality for assets in ChatDetails with loading indicators * refactor: update visibility conditions for uptime, viewer count, and category display in StreamInfoBar * refactor: replace AlertDialog with FrostyDialog for consistent dialog styling across the application * refactor: enhance layout handling in FrostyPageView to prevent overflow during height transitions * refactor: replace ColorPickerDialog with AccentColorPickerDialog for improved color selection experience * refactor: replace theme and accent color settings with dedicated components for improved modularity and readability * refactor: replace ElevatedButton with TextButton for consistent button styling across dialogs * refactor: integrate MobX Observer for reactive state management in settings widgets * refactor: update theme and dialog components for improved styling and consistency * refactor: enhance dialog styling with rounded corners and border in theme configuration * refactor: improve dialog messages for unauthorized access handling * refactor: update bodyLarge text style in theme configuration to include font weight * refactor: standardize Divider usage and adjust theme styles for improved consistency * refactor: adjust Divider properties and theme styles for enhanced visual consistency * chore: remove GEMINI.md file as it is no longer needed for project documentation * refactor: enhance token validation and reconnect logic in AuthBase for improved error handling * format * refactor: integrate landscape cutout settings into VideoChat layout for improved responsiveness * refactor: implement app lifecycle handling in VideoChat and enhance stream info update logic in VideoStore * refactor: update landscape cutout conditionals in VideoChat layout for improved responsiveness * update AGENTS.md * add scrollbar to search * fix scrolling exception * update CLAUDE.md * 5 auth reconnect attemps then log out * increase reply max lines to 2 * simplify and improve reply formatting * add prime icon * better draggable divider * support draggable divider in fullscreen overlay chat * add text shadow in fullscreen chat overlay mode * format * add landscape checks * video store optimization attempts * Dispose WebViewController and remove JavaScript channels properly * Track and cleanup all MutationObservers to prevent accumulation * Throttle latency updates to once per 5 seconds (reduces CPU load) * Add timeout protection and null checks for robustness * Prevent duplicate event listeners on page reloads * double tap divider to reset * Revert "video store optimization attempts" This reverts commit b1df7b0de473543283211a489dca698d9d241857. * optimize video store attempt 2 * Revert "double tap divider to reset" This reverts commit aeb26a433500ec71f822794835e927018ee59e1e. * optimize latency listener to open the menu and check every 20 secconds * more optimizations * hard refresh * abbreviate latency * fix lint * improve hide default overlay * fix chat no longer reconnecting with chat delay * refine chat alerts * fix historical message missing badges and emotes on initial connection * parallelize * revert * add reconnect button inline action * refactor: replace Scrollbar with FrostyScrollbar across chat and settings screens for consistent styling * tweak chat details menu * add scrollbar to release notes, renames for consistency * fix duplicate message case * fix chat delay alerts in auto sync mode * add regex for numeric strings and enhance display name formatting logic * exterminate borders * refactor: simplify active chat modes display in chat details screen * feat: enhance chat input button with delay notification and disable state * fix: wrap chat in SafeArea to prevent UI overflow issues * refactor: remove divider line from video chat and update draggable divider visibility logic * persist overlay in pip mode * fix: update chat delay handling and notifications in chat bottom bar * fix: update chat overlay visibility logic to respect fullscreen settings * tap to show deleted message * fix: prevent accidental chat scrolling when accessing system UI in landscape mode * show latency in portrait * fix: enhance chat delay notifications with dynamic delay time * docs: update CLAUDE.md for improved environment variable instructions and architecture overview * fix: improve chat delay countdown management and message handling * add preliminary release notes * remove agents.md * update lockfile * add initial multi chat feature * add option to persist multi chat tabs * add remove confirmation dialog * improve add chat design * lazy-load tabs * create global assets store to dedupe global asset fetching * improve tab design/styles * update notes * use frosty dialog * update claude md * tweak * add ability to reorder tabs * resolve conflict * merge cleanup * format * update release notes * add chat delay sync completion tracking to prevent countdown re-appearance * add tests * fix * update release notes * bump
2026-01-01 22:28:17 -05:00
reaction((_) => auth.isLoggedIn, (_) => _channel?.sink.close(1000)),
);
feat(video,chat): native player, ad-break awareness, chat send/delay reliability, and tab redesign (#567) Squash-merge commit. Covers four areas: native video player, chat reliability, multi-tab, and hardening. ## Native video player - Direct HLS playback via `better_native_video_player` (forked from `plug-and-pay/flutter-native-video-player`, patched on `frosty-patches` branch) - Twitch GQL playback token fetching with platform cookie extraction (iOS Swift + Android Kotlin plugins) for authenticated streams - Quality selection (source, 720p, 480p, 360p, 160p, audio-only) persisted per channel - Picture-in-picture: iOS automatic inline PiP, Android auto-PiP on API 31+ guarded against older devices - Latency polling, chat latency sync, stall detection/recovery, startup auto-pause recovery, watchdog timers - **Twitch stitched-ad break detection** (HLS `EXT-X-DATERANGE`) on both platforms, emitting `adBreakChanged` so the host suspends latency/stall recovery and chat sync during ads (program-date-time is unreliable then). Matches `CLASS="twitch-stitched-ad"` / `ID="stitched-ad-"` **and** the `X-TV-TWITCH-AD-*` attribute prefix (the durable signal streamlink/yt-dlp use) - Shared `VideoPlayerInterface` so WebView and native paths are interchangeable via settings toggle - `PlaybackAccessToken` model, `TwitchGqlApi` client ## Chat delay & send reliability - **Optimistic send-finalize**: Twitch acks a sent message with a per-PRIVMSG USERSTATE (not an echo), which it can intermittently drop — more so under a long chat delay. A missing ack no longer shows a false "message may not have been sent" error; the send is finalized optimistically (local echo rendered), and only genuine rejection NOTICEs surface an error. Ack timeout scaled by the chat delay. - **Per-line chat-delay bypass**: control/state lines (USERSTATE/ROOMSTATE/GLOBALUSERSTATE), rejection NOTICEs, the reconnect notice, and untagged server lines bypass the delay so send-acks and PONGs aren't stalled; only displayable chat content is delayed, staying in sync with delayed video. - **Measured chat bottom-bar height**: the message list reflows to the composer's real measured height, fixing the input overlapping messages when a long message expands it (replaces a fixed-constant estimate). - IRC tag parsing handles valueless and escaped tags per the IRCv3 message-tags spec (fixes a recent-messages RangeError on certain tags). ## Chat / multi-tab - Redesigned tab chips: unread dot indicator, chips dim until WebSocket connects - Animated tab options popover replacing `MenuAnchor` (no animation hook in Flutter 3.44) - Simplified `ChatTabs` from `StatefulWidget` to `StatelessWidget` - Focus-current-channel fade bump to 0.55; section-header alpha lifted to match the muted-label tier - `addTab` now calls `setActiveTab` to snapshot outgoing tab's `lastSeenMessageId` — fixes spurious unread dots after adding a tab - `onActivateSourceTab` threaded into `ChatUserModal` so Reply in merged mode switches to the correct source tab's composer ## Bug fixes and hardening - **Reverted the experimental iOS low-latency mode** (5s live-edge join + 1.05x catch-up): AVPlayer can't sustain <~18s on Twitch (declared `TARGETDURATION:6` paces playlist refreshes), and the offset starved the buffer into pause-on-launch. Default join distance restored. - Fork (Android): **cap `BEHIND_LIVE_WINDOW` recovery** so a stream repeatedly falling off the live window can't silently re-prepare forever; emits `error` on exhaustion so the host recovery ladder takes over - Guard all Android `setAutoPipMode` calls with `_autoPipAvailable` — prevents `PlatformException` on Android 8–11; check `_disposed` after `isAutoPipAvailable` await to prevent post-dispose auto-PiP re-enable - Remove `_isInPipMode` guard from `_onPaused` so `_paused` tracks actual state, fixing PiP play/pause toggle getting stuck - Tighten iOS cookie domain check to exact `twitch.tv` / `.twitch.tv` suffix - Invalidate the stored web session token when Twitch rejects it with a 401 (profile card flips back to unlinked; future loads skip the doomed authenticated request), and re-extract the cookie on launch when logged in without a linked session - Send `play_session_id` and `player_backend=mediaplayer` to Usher, matching the web client / streamlink - Fork (iOS): restore program-date-time latency measurement (a prior rev measured distance to the manifest edge, reading ~0s and silently disabling high-latency recovery / chat-delay auto-sync); release platform views on dispose (per-stream view + AVPlayerViewController leak), track the observed AVPlayerItem for KVO removal (sibling-view crash), main-thread seek results, resolve superseded load futures - Fork (Android): clean up method handlers orphaned by PiP-time view disposal (leaked audio-focus listeners), drop the live-offset re-anchoring seekTo on metadata updates (latency creep), restore pre-duck volume, respect user pause in the stall watchdog, resolve superseded load futures - Deep review pass: expire the quality-switch flag so stall recovery isn't disabled for the session, cap latency-driven recovery (clock-skew loop), generation-guard the error overlay, two-strike offline confirmation, controller null-safety on quality switch - Tighten `/me` local-echo match (no longer renders `/meow ...` as an action); clear pending send text on disconnect ## Web / docs - Remove stale Cloudflare Images binding from `wrangler.jsonc` (covered by `images.unoptimized: true`) - Correct `web/AGENTS.md` Cache Components claim (feature not enabled) - Repo and agent config cleanup ## Test plan - [x] `flutter analyze` — clean (frosty + plugin lib) - [x] `flutter test` — 319/319 pass (adds `ChatLatencySync`, `StreamInfoPoller`, video timing invariants, `PlaybackAccessToken`, IRC tag parsing) - [x] Android plugin Kotlin compiles against the bumped fork rev - [ ] Native player plays live streams on iOS and Android - [ ] Quality switching works and persists across channel reopens - [ ] PiP enters/exits correctly; pause/resume toggle in PiP window works - [ ] Audio-only mode does not crash on Android < API 31 - [ ] Sending under a long synced chat delay no longer shows a false "may not have been sent" error - [ ] Long composer text reflows the message list (no input/message overlap) - [ ] Multi-tab: adding a tab does not mark previous tab as unread - [ ] Merged chat: Reply from user modal targets the correct tab's composer 🤖 Generated with [Claude Code](https://claude.com/claude-code)
2026-06-13 17:06:24 -04:00
// Normalize muted words once per settings change instead of per message
// — the filter runs in the IRC hot path (50+ msgs/s in busy channels).
reactions.add(
reaction((_) => settings.mutedWords.toList(), (List<String> words) {
_normalizedMutedWords = words
.map((word) => word.trim().toLowerCase())
.where((word) => word.isNotEmpty)
.toList();
}, fireImmediately: true),
feat(video,chat): native player, ad-break awareness, chat send/delay reliability, and tab redesign (#567) Squash-merge commit. Covers four areas: native video player, chat reliability, multi-tab, and hardening. ## Native video player - Direct HLS playback via `better_native_video_player` (forked from `plug-and-pay/flutter-native-video-player`, patched on `frosty-patches` branch) - Twitch GQL playback token fetching with platform cookie extraction (iOS Swift + Android Kotlin plugins) for authenticated streams - Quality selection (source, 720p, 480p, 360p, 160p, audio-only) persisted per channel - Picture-in-picture: iOS automatic inline PiP, Android auto-PiP on API 31+ guarded against older devices - Latency polling, chat latency sync, stall detection/recovery, startup auto-pause recovery, watchdog timers - **Twitch stitched-ad break detection** (HLS `EXT-X-DATERANGE`) on both platforms, emitting `adBreakChanged` so the host suspends latency/stall recovery and chat sync during ads (program-date-time is unreliable then). Matches `CLASS="twitch-stitched-ad"` / `ID="stitched-ad-"` **and** the `X-TV-TWITCH-AD-*` attribute prefix (the durable signal streamlink/yt-dlp use) - Shared `VideoPlayerInterface` so WebView and native paths are interchangeable via settings toggle - `PlaybackAccessToken` model, `TwitchGqlApi` client ## Chat delay & send reliability - **Optimistic send-finalize**: Twitch acks a sent message with a per-PRIVMSG USERSTATE (not an echo), which it can intermittently drop — more so under a long chat delay. A missing ack no longer shows a false "message may not have been sent" error; the send is finalized optimistically (local echo rendered), and only genuine rejection NOTICEs surface an error. Ack timeout scaled by the chat delay. - **Per-line chat-delay bypass**: control/state lines (USERSTATE/ROOMSTATE/GLOBALUSERSTATE), rejection NOTICEs, the reconnect notice, and untagged server lines bypass the delay so send-acks and PONGs aren't stalled; only displayable chat content is delayed, staying in sync with delayed video. - **Measured chat bottom-bar height**: the message list reflows to the composer's real measured height, fixing the input overlapping messages when a long message expands it (replaces a fixed-constant estimate). - IRC tag parsing handles valueless and escaped tags per the IRCv3 message-tags spec (fixes a recent-messages RangeError on certain tags). ## Chat / multi-tab - Redesigned tab chips: unread dot indicator, chips dim until WebSocket connects - Animated tab options popover replacing `MenuAnchor` (no animation hook in Flutter 3.44) - Simplified `ChatTabs` from `StatefulWidget` to `StatelessWidget` - Focus-current-channel fade bump to 0.55; section-header alpha lifted to match the muted-label tier - `addTab` now calls `setActiveTab` to snapshot outgoing tab's `lastSeenMessageId` — fixes spurious unread dots after adding a tab - `onActivateSourceTab` threaded into `ChatUserModal` so Reply in merged mode switches to the correct source tab's composer ## Bug fixes and hardening - **Reverted the experimental iOS low-latency mode** (5s live-edge join + 1.05x catch-up): AVPlayer can't sustain <~18s on Twitch (declared `TARGETDURATION:6` paces playlist refreshes), and the offset starved the buffer into pause-on-launch. Default join distance restored. - Fork (Android): **cap `BEHIND_LIVE_WINDOW` recovery** so a stream repeatedly falling off the live window can't silently re-prepare forever; emits `error` on exhaustion so the host recovery ladder takes over - Guard all Android `setAutoPipMode` calls with `_autoPipAvailable` — prevents `PlatformException` on Android 8–11; check `_disposed` after `isAutoPipAvailable` await to prevent post-dispose auto-PiP re-enable - Remove `_isInPipMode` guard from `_onPaused` so `_paused` tracks actual state, fixing PiP play/pause toggle getting stuck - Tighten iOS cookie domain check to exact `twitch.tv` / `.twitch.tv` suffix - Invalidate the stored web session token when Twitch rejects it with a 401 (profile card flips back to unlinked; future loads skip the doomed authenticated request), and re-extract the cookie on launch when logged in without a linked session - Send `play_session_id` and `player_backend=mediaplayer` to Usher, matching the web client / streamlink - Fork (iOS): restore program-date-time latency measurement (a prior rev measured distance to the manifest edge, reading ~0s and silently disabling high-latency recovery / chat-delay auto-sync); release platform views on dispose (per-stream view + AVPlayerViewController leak), track the observed AVPlayerItem for KVO removal (sibling-view crash), main-thread seek results, resolve superseded load futures - Fork (Android): clean up method handlers orphaned by PiP-time view disposal (leaked audio-focus listeners), drop the live-offset re-anchoring seekTo on metadata updates (latency creep), restore pre-duck volume, respect user pause in the stall watchdog, resolve superseded load futures - Deep review pass: expire the quality-switch flag so stall recovery isn't disabled for the session, cap latency-driven recovery (clock-skew loop), generation-guard the error overlay, two-strike offline confirmation, controller null-safety on quality switch - Tighten `/me` local-echo match (no longer renders `/meow ...` as an action); clear pending send text on disconnect ## Web / docs - Remove stale Cloudflare Images binding from `wrangler.jsonc` (covered by `images.unoptimized: true`) - Correct `web/AGENTS.md` Cache Components claim (feature not enabled) - Repo and agent config cleanup ## Test plan - [x] `flutter analyze` — clean (frosty + plugin lib) - [x] `flutter test` — 319/319 pass (adds `ChatLatencySync`, `StreamInfoPoller`, video timing invariants, `PlaybackAccessToken`, IRC tag parsing) - [x] Android plugin Kotlin compiles against the bumped fork rev - [ ] Native player plays live streams on iOS and Android - [ ] Quality switching works and persists across channel reopens - [ ] PiP enters/exits correctly; pause/resume toggle in PiP window works - [ ] Audio-only mode does not crash on Android < API 31 - [ ] Sending under a long synced chat delay no longer shows a false "may not have been sent" error - [ ] Long composer text reflows the message list (no input/message overlap) - [ ] Multi-tab: adding a tab does not mark previous tab as unread - [ ] Merged chat: Reply from user modal targets the correct tab's composer 🤖 Generated with [Claude Code](https://claude.com/claude-code)
2026-06-13 17:06:24 -04:00
);
reactions.add(
reaction(
(_) => [
settings.showTwitchEmotes,
settings.showTwitchBadges,
settings.show7TVEmotes,
settings.showBTTVEmotes,
settings.showBTTVBadges,
settings.showFFZEmotes,
settings.showFFZBadges,
],
(_) {
if (!settings.show7TVEmotes) {
_sevenTVChannel?.sink.close(1000);
}
getAssets().then((_) {
if (settings.show7TVEmotes) {
final emoteSetId = assetsStore.sevenTvEmoteSetId;
if (emoteSetId != null) {
listenToSevenTVEmoteSet(emoteSetId: emoteSetId);
}
}
});
},
),
);
v5 (#463) * migrate to dio * ignore folders * simplify twitch api headers handling * clean up main * simplify logs * optimize profile picture fetching fixes refetches on tab switch * update claude md * refactor irc.dart * update copilot instructions with essential commands and project structure details * implement message sending state management and UI updates * refactor notification handling and add copy-paste functionality in chat * refactor AlertMessage to support vertical layout and optional padding * refactor error messages for consistency and clarity across various components * refactor chat layout to use draggable divider and improve chat width settings * refactor Uptime widget to use SharedTimerService for synchronized updates * refactor search results components to handle null future states gracefully * refactor loading indicators to use skeleton loaders for improved user experience * refactor UI components for improved layout and responsiveness, enhance skeleton loaders, and streamline padding adjustments * refactor: replace manual blur effects with BlurredContainer for consistency and reusability * refactor: enhance JavaScript execution and error handling in WebView components * refactor: replace app bar with blurred container for improved UI consistency across screens * refactor: streamline video chat layout and enhance PiP drag gesture functionality * revert some app bar changes * refactor: implement Picture-in-Picture drag functionality in VideoChat * refactor: pass currentChannelId to IRCMessage and ChatMessage for improved context * fix large thubmnail width * chore: update Gradle and Kotlin plugin versions for improved compatibility * changes from v4.10.0 branch * feat: integrate AnimatedScrollBorder for improved UI responsiveness across various screens * refactor: update SectionHeader styling and improve theme management * feat: add pinned section to StreamsList and enhance skeleton loader padding * feat: add repository guidelines for project structure, coding style, testing, and security * feat: enhance StreamCard UI with BlurredContainer and adjust border width in theme * feat: implement unfocusInput and safeRequestFocus methods to manage text field focus behavior * feat: enhance Picture-in-Picture drag interactions with haptic feedback and smooth animations * refactor: improve code formatting and readability across multiple files * feat: implement picture-in-picture mode toggle and state management for video playback * feat: reset PiP mode state when pausing video playback * feat: add custom app bar with profile picture and stream info for video chat * feat: convert multiple settings screens to use StatefulWidget and add animated scroll borders * feat: update blur configuration for adaptive alpha based on theme * fix: adjust default font size in SectionHeader widget * feat: enhance PiP mode with drag overlay instruction and UI improvements * fix: improve badge rendering with consistent margin and border for current channel * refactor: replace BackdropFilter with BlurredContainer for improved clarity and maintainability * fix: reduce background transparency in Uptime widget for better visibility * feat: enhance photo view dialog with full resolution toggle and blurred background * fix: reset chat delay to 0 when auto sync is enabled and update settings title for clarity * fix: adjust border width in theme to improve consistency * feat: add forceDarkMode option to BlurredContainer for improved theme adaptability * feat: implement offline followed channels feature with UI integration and settings option * fix: increase font size and weight for offline status text for better readability * feat: remove offline pinned channels feature and update related UI components * feat: optimize offline channels loading behavior based on expansion state * fix: improve clarity and consistency in repository guidelines formatting * feat: update full resolution URL handling and button visibility logic * feat: replace app bar with blurred version in chat-only mode and add animated scroll border * feat: refactor video chat layout for improved chat and video display in landscape mode * feat: remove bottom bar visibility setting and adjust chat layout accordingly * fix: simplify condition for displaying offline channels section in following tab * feat: enhance reply thread display with indentation and reply icon * feat: implement showModalBottomSheetWithProperFocus for improved focus handling * feat: add gradient direction support to BlurredContainer for enhanced visual effects * feat: enhance NavigationBar and Theme settings for improved visual consistency * feat: add gradient direction support to BlurredContainer in VideoChat for enhanced visual effects * chore: update .gitignore to include .cursor file for better environment management * fix: update PiP drag gesture conditions to include video paused state for better user experience * refactor: replace ScrollController with SettingsPageLayout in settings screens for improved layout management * refactor: centralize orientation handling by introducing OrientationUtils for improved readability and maintainability * refactor: replace OrientationUtils with ContextExtensions for streamlined context-based access to theme, layout, and API dependencies * refactor: improve video chat UI by adjusting title layout and adding stream info tooltips for better user experience * refactor: adjust titleSpacing in theme and navigation components for improved layout consistency * refactor: update stream info timer handling and overlay management for improved UI responsiveness * refactor: enhance stream info timer logic and overlay visibility management for chat-only mode * refactor: enhance input decoration theme in FrostyThemes for improved visual consistency and responsiveness * refactor: adjust inputDecorationTheme padding in FrostyThemes for improved visual consistency * refactor: enhance video overlay management by including video preview overlay in hideElements for improved UI consistency * refactor: improve chat bottom bar padding and video chat layout for enhanced UI consistency * refactor: adjust chat padding to account for device bottom insets for improved layout consistency * refactor: update text styles in FrostyThemes for improved visual consistency across UI components * refactor: update iOS minimum deployment target to 13.0 for improved compatibility * refactor: adjust chat bottom padding based on emote menu visibility for improved layout consistency * refactor: adjust padding values in StreamsList for improved layout consistency * refactor: replace Padding with AnimatedPadding in Chat for smoother layout transitions refactor: replace Container with AnimatedContainer in BlurredContainer for smoother animations * refactor: remove unnecessary radius property from ProfilePicture in OfflineChannelCard for cleaner code * refactor: enhance chat bottom bar suffix icon to display message delay with tooltip for improved user experience * refactor: update hint text and tooltips in chat bottom bar and search for improved clarity * refactor: simplify notification display logic and enhance chat input behavior for improved user experience * refactor: enhance layout consistency by adjusting spacing in various components across the channel and home screens * refactor: introduce LiveIndicator widget and adjust spacing in channel and video components for improved layout consistency * refactor: remove monospace font family from chat bottom bar for improved text rendering * refactor: reduce notification animation duration and change dismiss direction for improved user experience * refactor: replace VideoBar with StreamInfoBar in video components for improved layout and consistency * refactor: adjust font sizes and spacing in StreamInfoBar for improved layout consistency * refactor: standardize font sizes and update gradient stops in video components for improved visual consistency * refactor: update tooltip padding and background color in theme for improved visual consistency * refactor: enhance tooltip behavior and standardize font sizes in StreamInfoBar and related components for improved visual consistency * refactor: add showThumbnail option to LargeStreamCardSkeletonLoader for improved layout flexibility * refactor: add StreamInfoBarSkeletonLoader for improved layout consistency in stream components * refactor: add shadow effects to icons and text in StreamInfoBar and VideoOverlay for improved visual depth * refactor: update defaultOverlayOpacity to 0.0 for improved overlay behavior * fix: correct stream info text color on overlay * refactor: implement a new color picker dialog with random color generation for enhanced user experience * refactor: adjust gradient colors and stops in VideoOverlay for improved visual consistency * refactor: refine gradient colors and stops in VideoOverlay for enhanced visual clarity * refactor: add isCompact parameter to StreamInfoBar for responsive text sizing * fix: update tooltip background color to use surface color for better contrast * feat: add shared chat mode support in chat store and update StreamInfoBar for visual indication * refactor: disable debug print for IRC messages to reduce log clutter * feat: implement chat color selection feature with user color management in chat settings * refactor: replace color adjustment logic with new contrast-aware utility for chat names * refactor: simplify chat details UI by replacing list tiles with action cards and removing unused clear dialog * refactor: enhance chat details UI by improving time formatting and adding label styling to action cards * refactor: update chat color terminology to 'Username color' for clarity in UI * refactor: enhance chat details UI by introducing active chat modes display and improving layout structure * refactor: improve chat details layout by replacing ListTile with Padding and adding a Divider for better visual separation * refactor: remove chat notifications positioning setting and adjust notification alignment in video chat * refactor: streamline StreamInfoBar component by consolidating offline handling and improving layout for better readability * refactor: enhance StreamInfoBar by adding tooltip for streamer name and improving text overflow handling * refactor: adjust tooltip display duration in StreamInfoBar and update theme configuration * refactor: adjust margin and padding in StreamCard for improved layout consistency * chore: update dependencies in pubspec.yaml and pubspec.lock for Firebase and other packages * template * chore: update iOS platform version to 15.0 and Firebase dependencies to 12.2.0 * refactor: simplify StreamInfoBar layout by reducing nested widgets and improving text color handling * format * feat: enhance Channel model and StreamInfoBar to support offline channel details * feat: add offline indicator and improve StreamInfoBar layout for better offline channel display * fix: adjust icon color opacity in StreamInfoBar for improved visibility * feat: enhance dismissal animation in FrostyPhotoViewDialog to track swipe direction * docs: update copilot instructions for clarity and additional error handling details * refactor: optimize latency tooltip layout and improve offline indicator styling in VideoOverlay * feat: implement shared chat asset fetching and participant management in ChatAssetsStore * refactor: replace Observer with Builder for improved widget rebuilding in VideoOverlay * refactor: update StreamInfoBar border styling and adjust layout in VideoOverlay for improved visual consistency * feat: add showTextShadows property to StreamInfoBar for customizable text shadow display * refactor: adjust layout in VideoOverlay by adding padding to improve spacing and visual consistency * refactor: enhance VideoOverlay gradients and layout for improved visual hierarchy and user experience * refactor: reduce vertical padding in VideoOverlay for improved layout consistency * refactor: remove overlay opacity settings from VideoSettings and SettingsStore for simplification * refactor: improve text overlay transition in VideoChat for better user experience * Revert "refactor: improve text overlay transition in VideoChat for better user experience" This reverts commit fd16ff5ec30ec266157e5c8a9d4a6090c91717f6. * refactor: wrap videoOverlay in ColoredBox for improved layout handling * refactor: optimize animation duration and transition curves in VideoChat for smoother interactions * refactor: dispose searchScrollController in HomeStoreBase to prevent memory leaks * refactor: simplify gradient definitions in VideoOverlay for improved readability and maintainability * refactor: remove 'Offline' text overlay from VideoOverlay for cleaner UI * refactor: add refresh functionality for assets in ChatDetails with loading indicators * refactor: update visibility conditions for uptime, viewer count, and category display in StreamInfoBar * refactor: replace AlertDialog with FrostyDialog for consistent dialog styling across the application * refactor: enhance layout handling in FrostyPageView to prevent overflow during height transitions * refactor: replace ColorPickerDialog with AccentColorPickerDialog for improved color selection experience * refactor: replace theme and accent color settings with dedicated components for improved modularity and readability * refactor: replace ElevatedButton with TextButton for consistent button styling across dialogs * refactor: integrate MobX Observer for reactive state management in settings widgets * refactor: update theme and dialog components for improved styling and consistency * refactor: enhance dialog styling with rounded corners and border in theme configuration * refactor: improve dialog messages for unauthorized access handling * refactor: update bodyLarge text style in theme configuration to include font weight * refactor: standardize Divider usage and adjust theme styles for improved consistency * refactor: adjust Divider properties and theme styles for enhanced visual consistency * chore: remove GEMINI.md file as it is no longer needed for project documentation * refactor: enhance token validation and reconnect logic in AuthBase for improved error handling * format * refactor: integrate landscape cutout settings into VideoChat layout for improved responsiveness * refactor: implement app lifecycle handling in VideoChat and enhance stream info update logic in VideoStore * refactor: update landscape cutout conditionals in VideoChat layout for improved responsiveness * update AGENTS.md * add scrollbar to search * fix scrolling exception * update CLAUDE.md * 5 auth reconnect attemps then log out * increase reply max lines to 2 * simplify and improve reply formatting * add prime icon * better draggable divider * support draggable divider in fullscreen overlay chat * add text shadow in fullscreen chat overlay mode * format * add landscape checks * video store optimization attempts * Dispose WebViewController and remove JavaScript channels properly * Track and cleanup all MutationObservers to prevent accumulation * Throttle latency updates to once per 5 seconds (reduces CPU load) * Add timeout protection and null checks for robustness * Prevent duplicate event listeners on page reloads * double tap divider to reset * Revert "video store optimization attempts" This reverts commit b1df7b0de473543283211a489dca698d9d241857. * optimize video store attempt 2 * Revert "double tap divider to reset" This reverts commit aeb26a433500ec71f822794835e927018ee59e1e. * optimize latency listener to open the menu and check every 20 secconds * more optimizations * hard refresh * abbreviate latency * fix lint * improve hide default overlay * fix chat no longer reconnecting with chat delay * refine chat alerts * fix historical message missing badges and emotes on initial connection * parallelize * revert * add reconnect button inline action * refactor: replace Scrollbar with FrostyScrollbar across chat and settings screens for consistent styling * tweak chat details menu * add scrollbar to release notes, renames for consistency * fix duplicate message case * fix chat delay alerts in auto sync mode * add regex for numeric strings and enhance display name formatting logic * exterminate borders * refactor: simplify active chat modes display in chat details screen * feat: enhance chat input button with delay notification and disable state * fix: wrap chat in SafeArea to prevent UI overflow issues * refactor: remove divider line from video chat and update draggable divider visibility logic * persist overlay in pip mode * fix: update chat delay handling and notifications in chat bottom bar * fix: update chat overlay visibility logic to respect fullscreen settings * tap to show deleted message * fix: prevent accidental chat scrolling when accessing system UI in landscape mode * show latency in portrait * fix: enhance chat delay notifications with dynamic delay time * docs: update CLAUDE.md for improved environment variable instructions and architecture overview * fix: improve chat delay countdown management and message handling * add preliminary release notes * remove agents.md * update lockfile * add initial multi chat feature * add option to persist multi chat tabs * add remove confirmation dialog * improve add chat design * lazy-load tabs * create global assets store to dedupe global asset fetching * improve tab design/styles * update notes * use frosty dialog * update claude md * tweak * add ability to reorder tabs * resolve conflict * merge cleanup * format * update release notes * add chat delay sync completion tracking to prevent countdown re-appearance * add tests * fix * update release notes * bump
2026-01-01 22:28:17 -05:00
// Start chat delay countdown when toggling video on, cancel when off
reactions.add(
reaction((_) => settings.showVideo, (showVideo) {
if (showVideo && settings.effectiveChatDelay > 0) {
v5 (#463) * migrate to dio * ignore folders * simplify twitch api headers handling * clean up main * simplify logs * optimize profile picture fetching fixes refetches on tab switch * update claude md * refactor irc.dart * update copilot instructions with essential commands and project structure details * implement message sending state management and UI updates * refactor notification handling and add copy-paste functionality in chat * refactor AlertMessage to support vertical layout and optional padding * refactor error messages for consistency and clarity across various components * refactor chat layout to use draggable divider and improve chat width settings * refactor Uptime widget to use SharedTimerService for synchronized updates * refactor search results components to handle null future states gracefully * refactor loading indicators to use skeleton loaders for improved user experience * refactor UI components for improved layout and responsiveness, enhance skeleton loaders, and streamline padding adjustments * refactor: replace manual blur effects with BlurredContainer for consistency and reusability * refactor: enhance JavaScript execution and error handling in WebView components * refactor: replace app bar with blurred container for improved UI consistency across screens * refactor: streamline video chat layout and enhance PiP drag gesture functionality * revert some app bar changes * refactor: implement Picture-in-Picture drag functionality in VideoChat * refactor: pass currentChannelId to IRCMessage and ChatMessage for improved context * fix large thubmnail width * chore: update Gradle and Kotlin plugin versions for improved compatibility * changes from v4.10.0 branch * feat: integrate AnimatedScrollBorder for improved UI responsiveness across various screens * refactor: update SectionHeader styling and improve theme management * feat: add pinned section to StreamsList and enhance skeleton loader padding * feat: add repository guidelines for project structure, coding style, testing, and security * feat: enhance StreamCard UI with BlurredContainer and adjust border width in theme * feat: implement unfocusInput and safeRequestFocus methods to manage text field focus behavior * feat: enhance Picture-in-Picture drag interactions with haptic feedback and smooth animations * refactor: improve code formatting and readability across multiple files * feat: implement picture-in-picture mode toggle and state management for video playback * feat: reset PiP mode state when pausing video playback * feat: add custom app bar with profile picture and stream info for video chat * feat: convert multiple settings screens to use StatefulWidget and add animated scroll borders * feat: update blur configuration for adaptive alpha based on theme * fix: adjust default font size in SectionHeader widget * feat: enhance PiP mode with drag overlay instruction and UI improvements * fix: improve badge rendering with consistent margin and border for current channel * refactor: replace BackdropFilter with BlurredContainer for improved clarity and maintainability * fix: reduce background transparency in Uptime widget for better visibility * feat: enhance photo view dialog with full resolution toggle and blurred background * fix: reset chat delay to 0 when auto sync is enabled and update settings title for clarity * fix: adjust border width in theme to improve consistency * feat: add forceDarkMode option to BlurredContainer for improved theme adaptability * feat: implement offline followed channels feature with UI integration and settings option * fix: increase font size and weight for offline status text for better readability * feat: remove offline pinned channels feature and update related UI components * feat: optimize offline channels loading behavior based on expansion state * fix: improve clarity and consistency in repository guidelines formatting * feat: update full resolution URL handling and button visibility logic * feat: replace app bar with blurred version in chat-only mode and add animated scroll border * feat: refactor video chat layout for improved chat and video display in landscape mode * feat: remove bottom bar visibility setting and adjust chat layout accordingly * fix: simplify condition for displaying offline channels section in following tab * feat: enhance reply thread display with indentation and reply icon * feat: implement showModalBottomSheetWithProperFocus for improved focus handling * feat: add gradient direction support to BlurredContainer for enhanced visual effects * feat: enhance NavigationBar and Theme settings for improved visual consistency * feat: add gradient direction support to BlurredContainer in VideoChat for enhanced visual effects * chore: update .gitignore to include .cursor file for better environment management * fix: update PiP drag gesture conditions to include video paused state for better user experience * refactor: replace ScrollController with SettingsPageLayout in settings screens for improved layout management * refactor: centralize orientation handling by introducing OrientationUtils for improved readability and maintainability * refactor: replace OrientationUtils with ContextExtensions for streamlined context-based access to theme, layout, and API dependencies * refactor: improve video chat UI by adjusting title layout and adding stream info tooltips for better user experience * refactor: adjust titleSpacing in theme and navigation components for improved layout consistency * refactor: update stream info timer handling and overlay management for improved UI responsiveness * refactor: enhance stream info timer logic and overlay visibility management for chat-only mode * refactor: enhance input decoration theme in FrostyThemes for improved visual consistency and responsiveness * refactor: adjust inputDecorationTheme padding in FrostyThemes for improved visual consistency * refactor: enhance video overlay management by including video preview overlay in hideElements for improved UI consistency * refactor: improve chat bottom bar padding and video chat layout for enhanced UI consistency * refactor: adjust chat padding to account for device bottom insets for improved layout consistency * refactor: update text styles in FrostyThemes for improved visual consistency across UI components * refactor: update iOS minimum deployment target to 13.0 for improved compatibility * refactor: adjust chat bottom padding based on emote menu visibility for improved layout consistency * refactor: adjust padding values in StreamsList for improved layout consistency * refactor: replace Padding with AnimatedPadding in Chat for smoother layout transitions refactor: replace Container with AnimatedContainer in BlurredContainer for smoother animations * refactor: remove unnecessary radius property from ProfilePicture in OfflineChannelCard for cleaner code * refactor: enhance chat bottom bar suffix icon to display message delay with tooltip for improved user experience * refactor: update hint text and tooltips in chat bottom bar and search for improved clarity * refactor: simplify notification display logic and enhance chat input behavior for improved user experience * refactor: enhance layout consistency by adjusting spacing in various components across the channel and home screens * refactor: introduce LiveIndicator widget and adjust spacing in channel and video components for improved layout consistency * refactor: remove monospace font family from chat bottom bar for improved text rendering * refactor: reduce notification animation duration and change dismiss direction for improved user experience * refactor: replace VideoBar with StreamInfoBar in video components for improved layout and consistency * refactor: adjust font sizes and spacing in StreamInfoBar for improved layout consistency * refactor: standardize font sizes and update gradient stops in video components for improved visual consistency * refactor: update tooltip padding and background color in theme for improved visual consistency * refactor: enhance tooltip behavior and standardize font sizes in StreamInfoBar and related components for improved visual consistency * refactor: add showThumbnail option to LargeStreamCardSkeletonLoader for improved layout flexibility * refactor: add StreamInfoBarSkeletonLoader for improved layout consistency in stream components * refactor: add shadow effects to icons and text in StreamInfoBar and VideoOverlay for improved visual depth * refactor: update defaultOverlayOpacity to 0.0 for improved overlay behavior * fix: correct stream info text color on overlay * refactor: implement a new color picker dialog with random color generation for enhanced user experience * refactor: adjust gradient colors and stops in VideoOverlay for improved visual consistency * refactor: refine gradient colors and stops in VideoOverlay for enhanced visual clarity * refactor: add isCompact parameter to StreamInfoBar for responsive text sizing * fix: update tooltip background color to use surface color for better contrast * feat: add shared chat mode support in chat store and update StreamInfoBar for visual indication * refactor: disable debug print for IRC messages to reduce log clutter * feat: implement chat color selection feature with user color management in chat settings * refactor: replace color adjustment logic with new contrast-aware utility for chat names * refactor: simplify chat details UI by replacing list tiles with action cards and removing unused clear dialog * refactor: enhance chat details UI by improving time formatting and adding label styling to action cards * refactor: update chat color terminology to 'Username color' for clarity in UI * refactor: enhance chat details UI by introducing active chat modes display and improving layout structure * refactor: improve chat details layout by replacing ListTile with Padding and adding a Divider for better visual separation * refactor: remove chat notifications positioning setting and adjust notification alignment in video chat * refactor: streamline StreamInfoBar component by consolidating offline handling and improving layout for better readability * refactor: enhance StreamInfoBar by adding tooltip for streamer name and improving text overflow handling * refactor: adjust tooltip display duration in StreamInfoBar and update theme configuration * refactor: adjust margin and padding in StreamCard for improved layout consistency * chore: update dependencies in pubspec.yaml and pubspec.lock for Firebase and other packages * template * chore: update iOS platform version to 15.0 and Firebase dependencies to 12.2.0 * refactor: simplify StreamInfoBar layout by reducing nested widgets and improving text color handling * format * feat: enhance Channel model and StreamInfoBar to support offline channel details * feat: add offline indicator and improve StreamInfoBar layout for better offline channel display * fix: adjust icon color opacity in StreamInfoBar for improved visibility * feat: enhance dismissal animation in FrostyPhotoViewDialog to track swipe direction * docs: update copilot instructions for clarity and additional error handling details * refactor: optimize latency tooltip layout and improve offline indicator styling in VideoOverlay * feat: implement shared chat asset fetching and participant management in ChatAssetsStore * refactor: replace Observer with Builder for improved widget rebuilding in VideoOverlay * refactor: update StreamInfoBar border styling and adjust layout in VideoOverlay for improved visual consistency * feat: add showTextShadows property to StreamInfoBar for customizable text shadow display * refactor: adjust layout in VideoOverlay by adding padding to improve spacing and visual consistency * refactor: enhance VideoOverlay gradients and layout for improved visual hierarchy and user experience * refactor: reduce vertical padding in VideoOverlay for improved layout consistency * refactor: remove overlay opacity settings from VideoSettings and SettingsStore for simplification * refactor: improve text overlay transition in VideoChat for better user experience * Revert "refactor: improve text overlay transition in VideoChat for better user experience" This reverts commit fd16ff5ec30ec266157e5c8a9d4a6090c91717f6. * refactor: wrap videoOverlay in ColoredBox for improved layout handling * refactor: optimize animation duration and transition curves in VideoChat for smoother interactions * refactor: dispose searchScrollController in HomeStoreBase to prevent memory leaks * refactor: simplify gradient definitions in VideoOverlay for improved readability and maintainability * refactor: remove 'Offline' text overlay from VideoOverlay for cleaner UI * refactor: add refresh functionality for assets in ChatDetails with loading indicators * refactor: update visibility conditions for uptime, viewer count, and category display in StreamInfoBar * refactor: replace AlertDialog with FrostyDialog for consistent dialog styling across the application * refactor: enhance layout handling in FrostyPageView to prevent overflow during height transitions * refactor: replace ColorPickerDialog with AccentColorPickerDialog for improved color selection experience * refactor: replace theme and accent color settings with dedicated components for improved modularity and readability * refactor: replace ElevatedButton with TextButton for consistent button styling across dialogs * refactor: integrate MobX Observer for reactive state management in settings widgets * refactor: update theme and dialog components for improved styling and consistency * refactor: enhance dialog styling with rounded corners and border in theme configuration * refactor: improve dialog messages for unauthorized access handling * refactor: update bodyLarge text style in theme configuration to include font weight * refactor: standardize Divider usage and adjust theme styles for improved consistency * refactor: adjust Divider properties and theme styles for enhanced visual consistency * chore: remove GEMINI.md file as it is no longer needed for project documentation * refactor: enhance token validation and reconnect logic in AuthBase for improved error handling * format * refactor: integrate landscape cutout settings into VideoChat layout for improved responsiveness * refactor: implement app lifecycle handling in VideoChat and enhance stream info update logic in VideoStore * refactor: update landscape cutout conditionals in VideoChat layout for improved responsiveness * update AGENTS.md * add scrollbar to search * fix scrolling exception * update CLAUDE.md * 5 auth reconnect attemps then log out * increase reply max lines to 2 * simplify and improve reply formatting * add prime icon * better draggable divider * support draggable divider in fullscreen overlay chat * add text shadow in fullscreen chat overlay mode * format * add landscape checks * video store optimization attempts * Dispose WebViewController and remove JavaScript channels properly * Track and cleanup all MutationObservers to prevent accumulation * Throttle latency updates to once per 5 seconds (reduces CPU load) * Add timeout protection and null checks for robustness * Prevent duplicate event listeners on page reloads * double tap divider to reset * Revert "video store optimization attempts" This reverts commit b1df7b0de473543283211a489dca698d9d241857. * optimize video store attempt 2 * Revert "double tap divider to reset" This reverts commit aeb26a433500ec71f822794835e927018ee59e1e. * optimize latency listener to open the menu and check every 20 secconds * more optimizations * hard refresh * abbreviate latency * fix lint * improve hide default overlay * fix chat no longer reconnecting with chat delay * refine chat alerts * fix historical message missing badges and emotes on initial connection * parallelize * revert * add reconnect button inline action * refactor: replace Scrollbar with FrostyScrollbar across chat and settings screens for consistent styling * tweak chat details menu * add scrollbar to release notes, renames for consistency * fix duplicate message case * fix chat delay alerts in auto sync mode * add regex for numeric strings and enhance display name formatting logic * exterminate borders * refactor: simplify active chat modes display in chat details screen * feat: enhance chat input button with delay notification and disable state * fix: wrap chat in SafeArea to prevent UI overflow issues * refactor: remove divider line from video chat and update draggable divider visibility logic * persist overlay in pip mode * fix: update chat delay handling and notifications in chat bottom bar * fix: update chat overlay visibility logic to respect fullscreen settings * tap to show deleted message * fix: prevent accidental chat scrolling when accessing system UI in landscape mode * show latency in portrait * fix: enhance chat delay notifications with dynamic delay time * docs: update CLAUDE.md for improved environment variable instructions and architecture overview * fix: improve chat delay countdown management and message handling * add preliminary release notes * remove agents.md * update lockfile * add initial multi chat feature * add option to persist multi chat tabs * add remove confirmation dialog * improve add chat design * lazy-load tabs * create global assets store to dedupe global asset fetching * improve tab design/styles * update notes * use frosty dialog * update claude md * tweak * add ability to reorder tabs * resolve conflict * merge cleanup * format * update release notes * add chat delay sync completion tracking to prevent countdown re-appearance * add tests * fix * update release notes * bump
2026-01-01 22:28:17 -05:00
_startChatDelayCountdown();
} else if (!showVideo) {
_flushPendingDelayedCallbacks();
v5 (#463) * migrate to dio * ignore folders * simplify twitch api headers handling * clean up main * simplify logs * optimize profile picture fetching fixes refetches on tab switch * update claude md * refactor irc.dart * update copilot instructions with essential commands and project structure details * implement message sending state management and UI updates * refactor notification handling and add copy-paste functionality in chat * refactor AlertMessage to support vertical layout and optional padding * refactor error messages for consistency and clarity across various components * refactor chat layout to use draggable divider and improve chat width settings * refactor Uptime widget to use SharedTimerService for synchronized updates * refactor search results components to handle null future states gracefully * refactor loading indicators to use skeleton loaders for improved user experience * refactor UI components for improved layout and responsiveness, enhance skeleton loaders, and streamline padding adjustments * refactor: replace manual blur effects with BlurredContainer for consistency and reusability * refactor: enhance JavaScript execution and error handling in WebView components * refactor: replace app bar with blurred container for improved UI consistency across screens * refactor: streamline video chat layout and enhance PiP drag gesture functionality * revert some app bar changes * refactor: implement Picture-in-Picture drag functionality in VideoChat * refactor: pass currentChannelId to IRCMessage and ChatMessage for improved context * fix large thubmnail width * chore: update Gradle and Kotlin plugin versions for improved compatibility * changes from v4.10.0 branch * feat: integrate AnimatedScrollBorder for improved UI responsiveness across various screens * refactor: update SectionHeader styling and improve theme management * feat: add pinned section to StreamsList and enhance skeleton loader padding * feat: add repository guidelines for project structure, coding style, testing, and security * feat: enhance StreamCard UI with BlurredContainer and adjust border width in theme * feat: implement unfocusInput and safeRequestFocus methods to manage text field focus behavior * feat: enhance Picture-in-Picture drag interactions with haptic feedback and smooth animations * refactor: improve code formatting and readability across multiple files * feat: implement picture-in-picture mode toggle and state management for video playback * feat: reset PiP mode state when pausing video playback * feat: add custom app bar with profile picture and stream info for video chat * feat: convert multiple settings screens to use StatefulWidget and add animated scroll borders * feat: update blur configuration for adaptive alpha based on theme * fix: adjust default font size in SectionHeader widget * feat: enhance PiP mode with drag overlay instruction and UI improvements * fix: improve badge rendering with consistent margin and border for current channel * refactor: replace BackdropFilter with BlurredContainer for improved clarity and maintainability * fix: reduce background transparency in Uptime widget for better visibility * feat: enhance photo view dialog with full resolution toggle and blurred background * fix: reset chat delay to 0 when auto sync is enabled and update settings title for clarity * fix: adjust border width in theme to improve consistency * feat: add forceDarkMode option to BlurredContainer for improved theme adaptability * feat: implement offline followed channels feature with UI integration and settings option * fix: increase font size and weight for offline status text for better readability * feat: remove offline pinned channels feature and update related UI components * feat: optimize offline channels loading behavior based on expansion state * fix: improve clarity and consistency in repository guidelines formatting * feat: update full resolution URL handling and button visibility logic * feat: replace app bar with blurred version in chat-only mode and add animated scroll border * feat: refactor video chat layout for improved chat and video display in landscape mode * feat: remove bottom bar visibility setting and adjust chat layout accordingly * fix: simplify condition for displaying offline channels section in following tab * feat: enhance reply thread display with indentation and reply icon * feat: implement showModalBottomSheetWithProperFocus for improved focus handling * feat: add gradient direction support to BlurredContainer for enhanced visual effects * feat: enhance NavigationBar and Theme settings for improved visual consistency * feat: add gradient direction support to BlurredContainer in VideoChat for enhanced visual effects * chore: update .gitignore to include .cursor file for better environment management * fix: update PiP drag gesture conditions to include video paused state for better user experience * refactor: replace ScrollController with SettingsPageLayout in settings screens for improved layout management * refactor: centralize orientation handling by introducing OrientationUtils for improved readability and maintainability * refactor: replace OrientationUtils with ContextExtensions for streamlined context-based access to theme, layout, and API dependencies * refactor: improve video chat UI by adjusting title layout and adding stream info tooltips for better user experience * refactor: adjust titleSpacing in theme and navigation components for improved layout consistency * refactor: update stream info timer handling and overlay management for improved UI responsiveness * refactor: enhance stream info timer logic and overlay visibility management for chat-only mode * refactor: enhance input decoration theme in FrostyThemes for improved visual consistency and responsiveness * refactor: adjust inputDecorationTheme padding in FrostyThemes for improved visual consistency * refactor: enhance video overlay management by including video preview overlay in hideElements for improved UI consistency * refactor: improve chat bottom bar padding and video chat layout for enhanced UI consistency * refactor: adjust chat padding to account for device bottom insets for improved layout consistency * refactor: update text styles in FrostyThemes for improved visual consistency across UI components * refactor: update iOS minimum deployment target to 13.0 for improved compatibility * refactor: adjust chat bottom padding based on emote menu visibility for improved layout consistency * refactor: adjust padding values in StreamsList for improved layout consistency * refactor: replace Padding with AnimatedPadding in Chat for smoother layout transitions refactor: replace Container with AnimatedContainer in BlurredContainer for smoother animations * refactor: remove unnecessary radius property from ProfilePicture in OfflineChannelCard for cleaner code * refactor: enhance chat bottom bar suffix icon to display message delay with tooltip for improved user experience * refactor: update hint text and tooltips in chat bottom bar and search for improved clarity * refactor: simplify notification display logic and enhance chat input behavior for improved user experience * refactor: enhance layout consistency by adjusting spacing in various components across the channel and home screens * refactor: introduce LiveIndicator widget and adjust spacing in channel and video components for improved layout consistency * refactor: remove monospace font family from chat bottom bar for improved text rendering * refactor: reduce notification animation duration and change dismiss direction for improved user experience * refactor: replace VideoBar with StreamInfoBar in video components for improved layout and consistency * refactor: adjust font sizes and spacing in StreamInfoBar for improved layout consistency * refactor: standardize font sizes and update gradient stops in video components for improved visual consistency * refactor: update tooltip padding and background color in theme for improved visual consistency * refactor: enhance tooltip behavior and standardize font sizes in StreamInfoBar and related components for improved visual consistency * refactor: add showThumbnail option to LargeStreamCardSkeletonLoader for improved layout flexibility * refactor: add StreamInfoBarSkeletonLoader for improved layout consistency in stream components * refactor: add shadow effects to icons and text in StreamInfoBar and VideoOverlay for improved visual depth * refactor: update defaultOverlayOpacity to 0.0 for improved overlay behavior * fix: correct stream info text color on overlay * refactor: implement a new color picker dialog with random color generation for enhanced user experience * refactor: adjust gradient colors and stops in VideoOverlay for improved visual consistency * refactor: refine gradient colors and stops in VideoOverlay for enhanced visual clarity * refactor: add isCompact parameter to StreamInfoBar for responsive text sizing * fix: update tooltip background color to use surface color for better contrast * feat: add shared chat mode support in chat store and update StreamInfoBar for visual indication * refactor: disable debug print for IRC messages to reduce log clutter * feat: implement chat color selection feature with user color management in chat settings * refactor: replace color adjustment logic with new contrast-aware utility for chat names * refactor: simplify chat details UI by replacing list tiles with action cards and removing unused clear dialog * refactor: enhance chat details UI by improving time formatting and adding label styling to action cards * refactor: update chat color terminology to 'Username color' for clarity in UI * refactor: enhance chat details UI by introducing active chat modes display and improving layout structure * refactor: improve chat details layout by replacing ListTile with Padding and adding a Divider for better visual separation * refactor: remove chat notifications positioning setting and adjust notification alignment in video chat * refactor: streamline StreamInfoBar component by consolidating offline handling and improving layout for better readability * refactor: enhance StreamInfoBar by adding tooltip for streamer name and improving text overflow handling * refactor: adjust tooltip display duration in StreamInfoBar and update theme configuration * refactor: adjust margin and padding in StreamCard for improved layout consistency * chore: update dependencies in pubspec.yaml and pubspec.lock for Firebase and other packages * template * chore: update iOS platform version to 15.0 and Firebase dependencies to 12.2.0 * refactor: simplify StreamInfoBar layout by reducing nested widgets and improving text color handling * format * feat: enhance Channel model and StreamInfoBar to support offline channel details * feat: add offline indicator and improve StreamInfoBar layout for better offline channel display * fix: adjust icon color opacity in StreamInfoBar for improved visibility * feat: enhance dismissal animation in FrostyPhotoViewDialog to track swipe direction * docs: update copilot instructions for clarity and additional error handling details * refactor: optimize latency tooltip layout and improve offline indicator styling in VideoOverlay * feat: implement shared chat asset fetching and participant management in ChatAssetsStore * refactor: replace Observer with Builder for improved widget rebuilding in VideoOverlay * refactor: update StreamInfoBar border styling and adjust layout in VideoOverlay for improved visual consistency * feat: add showTextShadows property to StreamInfoBar for customizable text shadow display * refactor: adjust layout in VideoOverlay by adding padding to improve spacing and visual consistency * refactor: enhance VideoOverlay gradients and layout for improved visual hierarchy and user experience * refactor: reduce vertical padding in VideoOverlay for improved layout consistency * refactor: remove overlay opacity settings from VideoSettings and SettingsStore for simplification * refactor: improve text overlay transition in VideoChat for better user experience * Revert "refactor: improve text overlay transition in VideoChat for better user experience" This reverts commit fd16ff5ec30ec266157e5c8a9d4a6090c91717f6. * refactor: wrap videoOverlay in ColoredBox for improved layout handling * refactor: optimize animation duration and transition curves in VideoChat for smoother interactions * refactor: dispose searchScrollController in HomeStoreBase to prevent memory leaks * refactor: simplify gradient definitions in VideoOverlay for improved readability and maintainability * refactor: remove 'Offline' text overlay from VideoOverlay for cleaner UI * refactor: add refresh functionality for assets in ChatDetails with loading indicators * refactor: update visibility conditions for uptime, viewer count, and category display in StreamInfoBar * refactor: replace AlertDialog with FrostyDialog for consistent dialog styling across the application * refactor: enhance layout handling in FrostyPageView to prevent overflow during height transitions * refactor: replace ColorPickerDialog with AccentColorPickerDialog for improved color selection experience * refactor: replace theme and accent color settings with dedicated components for improved modularity and readability * refactor: replace ElevatedButton with TextButton for consistent button styling across dialogs * refactor: integrate MobX Observer for reactive state management in settings widgets * refactor: update theme and dialog components for improved styling and consistency * refactor: enhance dialog styling with rounded corners and border in theme configuration * refactor: improve dialog messages for unauthorized access handling * refactor: update bodyLarge text style in theme configuration to include font weight * refactor: standardize Divider usage and adjust theme styles for improved consistency * refactor: adjust Divider properties and theme styles for enhanced visual consistency * chore: remove GEMINI.md file as it is no longer needed for project documentation * refactor: enhance token validation and reconnect logic in AuthBase for improved error handling * format * refactor: integrate landscape cutout settings into VideoChat layout for improved responsiveness * refactor: implement app lifecycle handling in VideoChat and enhance stream info update logic in VideoStore * refactor: update landscape cutout conditionals in VideoChat layout for improved responsiveness * update AGENTS.md * add scrollbar to search * fix scrolling exception * update CLAUDE.md * 5 auth reconnect attemps then log out * increase reply max lines to 2 * simplify and improve reply formatting * add prime icon * better draggable divider * support draggable divider in fullscreen overlay chat * add text shadow in fullscreen chat overlay mode * format * add landscape checks * video store optimization attempts * Dispose WebViewController and remove JavaScript channels properly * Track and cleanup all MutationObservers to prevent accumulation * Throttle latency updates to once per 5 seconds (reduces CPU load) * Add timeout protection and null checks for robustness * Prevent duplicate event listeners on page reloads * double tap divider to reset * Revert "video store optimization attempts" This reverts commit b1df7b0de473543283211a489dca698d9d241857. * optimize video store attempt 2 * Revert "double tap divider to reset" This reverts commit aeb26a433500ec71f822794835e927018ee59e1e. * optimize latency listener to open the menu and check every 20 secconds * more optimizations * hard refresh * abbreviate latency * fix lint * improve hide default overlay * fix chat no longer reconnecting with chat delay * refine chat alerts * fix historical message missing badges and emotes on initial connection * parallelize * revert * add reconnect button inline action * refactor: replace Scrollbar with FrostyScrollbar across chat and settings screens for consistent styling * tweak chat details menu * add scrollbar to release notes, renames for consistency * fix duplicate message case * fix chat delay alerts in auto sync mode * add regex for numeric strings and enhance display name formatting logic * exterminate borders * refactor: simplify active chat modes display in chat details screen * feat: enhance chat input button with delay notification and disable state * fix: wrap chat in SafeArea to prevent UI overflow issues * refactor: remove divider line from video chat and update draggable divider visibility logic * persist overlay in pip mode * fix: update chat delay handling and notifications in chat bottom bar * fix: update chat overlay visibility logic to respect fullscreen settings * tap to show deleted message * fix: prevent accidental chat scrolling when accessing system UI in landscape mode * show latency in portrait * fix: enhance chat delay notifications with dynamic delay time * docs: update CLAUDE.md for improved environment variable instructions and architecture overview * fix: improve chat delay countdown management and message handling * add preliminary release notes * remove agents.md * update lockfile * add initial multi chat feature * add option to persist multi chat tabs * add remove confirmation dialog * improve add chat design * lazy-load tabs * create global assets store to dedupe global asset fetching * improve tab design/styles * update notes * use frosty dialog * update claude md * tweak * add ability to reorder tabs * resolve conflict * merge cleanup * format * update release notes * add chat delay sync completion tracking to prevent countdown re-appearance * add tests * fix * update release notes * bump
2026-01-01 22:28:17 -05:00
_cancelChatDelayCountdown();
_chatDelaySyncCompleted = false;
}
}),
);
v5 (#463) * migrate to dio * ignore folders * simplify twitch api headers handling * clean up main * simplify logs * optimize profile picture fetching fixes refetches on tab switch * update claude md * refactor irc.dart * update copilot instructions with essential commands and project structure details * implement message sending state management and UI updates * refactor notification handling and add copy-paste functionality in chat * refactor AlertMessage to support vertical layout and optional padding * refactor error messages for consistency and clarity across various components * refactor chat layout to use draggable divider and improve chat width settings * refactor Uptime widget to use SharedTimerService for synchronized updates * refactor search results components to handle null future states gracefully * refactor loading indicators to use skeleton loaders for improved user experience * refactor UI components for improved layout and responsiveness, enhance skeleton loaders, and streamline padding adjustments * refactor: replace manual blur effects with BlurredContainer for consistency and reusability * refactor: enhance JavaScript execution and error handling in WebView components * refactor: replace app bar with blurred container for improved UI consistency across screens * refactor: streamline video chat layout and enhance PiP drag gesture functionality * revert some app bar changes * refactor: implement Picture-in-Picture drag functionality in VideoChat * refactor: pass currentChannelId to IRCMessage and ChatMessage for improved context * fix large thubmnail width * chore: update Gradle and Kotlin plugin versions for improved compatibility * changes from v4.10.0 branch * feat: integrate AnimatedScrollBorder for improved UI responsiveness across various screens * refactor: update SectionHeader styling and improve theme management * feat: add pinned section to StreamsList and enhance skeleton loader padding * feat: add repository guidelines for project structure, coding style, testing, and security * feat: enhance StreamCard UI with BlurredContainer and adjust border width in theme * feat: implement unfocusInput and safeRequestFocus methods to manage text field focus behavior * feat: enhance Picture-in-Picture drag interactions with haptic feedback and smooth animations * refactor: improve code formatting and readability across multiple files * feat: implement picture-in-picture mode toggle and state management for video playback * feat: reset PiP mode state when pausing video playback * feat: add custom app bar with profile picture and stream info for video chat * feat: convert multiple settings screens to use StatefulWidget and add animated scroll borders * feat: update blur configuration for adaptive alpha based on theme * fix: adjust default font size in SectionHeader widget * feat: enhance PiP mode with drag overlay instruction and UI improvements * fix: improve badge rendering with consistent margin and border for current channel * refactor: replace BackdropFilter with BlurredContainer for improved clarity and maintainability * fix: reduce background transparency in Uptime widget for better visibility * feat: enhance photo view dialog with full resolution toggle and blurred background * fix: reset chat delay to 0 when auto sync is enabled and update settings title for clarity * fix: adjust border width in theme to improve consistency * feat: add forceDarkMode option to BlurredContainer for improved theme adaptability * feat: implement offline followed channels feature with UI integration and settings option * fix: increase font size and weight for offline status text for better readability * feat: remove offline pinned channels feature and update related UI components * feat: optimize offline channels loading behavior based on expansion state * fix: improve clarity and consistency in repository guidelines formatting * feat: update full resolution URL handling and button visibility logic * feat: replace app bar with blurred version in chat-only mode and add animated scroll border * feat: refactor video chat layout for improved chat and video display in landscape mode * feat: remove bottom bar visibility setting and adjust chat layout accordingly * fix: simplify condition for displaying offline channels section in following tab * feat: enhance reply thread display with indentation and reply icon * feat: implement showModalBottomSheetWithProperFocus for improved focus handling * feat: add gradient direction support to BlurredContainer for enhanced visual effects * feat: enhance NavigationBar and Theme settings for improved visual consistency * feat: add gradient direction support to BlurredContainer in VideoChat for enhanced visual effects * chore: update .gitignore to include .cursor file for better environment management * fix: update PiP drag gesture conditions to include video paused state for better user experience * refactor: replace ScrollController with SettingsPageLayout in settings screens for improved layout management * refactor: centralize orientation handling by introducing OrientationUtils for improved readability and maintainability * refactor: replace OrientationUtils with ContextExtensions for streamlined context-based access to theme, layout, and API dependencies * refactor: improve video chat UI by adjusting title layout and adding stream info tooltips for better user experience * refactor: adjust titleSpacing in theme and navigation components for improved layout consistency * refactor: update stream info timer handling and overlay management for improved UI responsiveness * refactor: enhance stream info timer logic and overlay visibility management for chat-only mode * refactor: enhance input decoration theme in FrostyThemes for improved visual consistency and responsiveness * refactor: adjust inputDecorationTheme padding in FrostyThemes for improved visual consistency * refactor: enhance video overlay management by including video preview overlay in hideElements for improved UI consistency * refactor: improve chat bottom bar padding and video chat layout for enhanced UI consistency * refactor: adjust chat padding to account for device bottom insets for improved layout consistency * refactor: update text styles in FrostyThemes for improved visual consistency across UI components * refactor: update iOS minimum deployment target to 13.0 for improved compatibility * refactor: adjust chat bottom padding based on emote menu visibility for improved layout consistency * refactor: adjust padding values in StreamsList for improved layout consistency * refactor: replace Padding with AnimatedPadding in Chat for smoother layout transitions refactor: replace Container with AnimatedContainer in BlurredContainer for smoother animations * refactor: remove unnecessary radius property from ProfilePicture in OfflineChannelCard for cleaner code * refactor: enhance chat bottom bar suffix icon to display message delay with tooltip for improved user experience * refactor: update hint text and tooltips in chat bottom bar and search for improved clarity * refactor: simplify notification display logic and enhance chat input behavior for improved user experience * refactor: enhance layout consistency by adjusting spacing in various components across the channel and home screens * refactor: introduce LiveIndicator widget and adjust spacing in channel and video components for improved layout consistency * refactor: remove monospace font family from chat bottom bar for improved text rendering * refactor: reduce notification animation duration and change dismiss direction for improved user experience * refactor: replace VideoBar with StreamInfoBar in video components for improved layout and consistency * refactor: adjust font sizes and spacing in StreamInfoBar for improved layout consistency * refactor: standardize font sizes and update gradient stops in video components for improved visual consistency * refactor: update tooltip padding and background color in theme for improved visual consistency * refactor: enhance tooltip behavior and standardize font sizes in StreamInfoBar and related components for improved visual consistency * refactor: add showThumbnail option to LargeStreamCardSkeletonLoader for improved layout flexibility * refactor: add StreamInfoBarSkeletonLoader for improved layout consistency in stream components * refactor: add shadow effects to icons and text in StreamInfoBar and VideoOverlay for improved visual depth * refactor: update defaultOverlayOpacity to 0.0 for improved overlay behavior * fix: correct stream info text color on overlay * refactor: implement a new color picker dialog with random color generation for enhanced user experience * refactor: adjust gradient colors and stops in VideoOverlay for improved visual consistency * refactor: refine gradient colors and stops in VideoOverlay for enhanced visual clarity * refactor: add isCompact parameter to StreamInfoBar for responsive text sizing * fix: update tooltip background color to use surface color for better contrast * feat: add shared chat mode support in chat store and update StreamInfoBar for visual indication * refactor: disable debug print for IRC messages to reduce log clutter * feat: implement chat color selection feature with user color management in chat settings * refactor: replace color adjustment logic with new contrast-aware utility for chat names * refactor: simplify chat details UI by replacing list tiles with action cards and removing unused clear dialog * refactor: enhance chat details UI by improving time formatting and adding label styling to action cards * refactor: update chat color terminology to 'Username color' for clarity in UI * refactor: enhance chat details UI by introducing active chat modes display and improving layout structure * refactor: improve chat details layout by replacing ListTile with Padding and adding a Divider for better visual separation * refactor: remove chat notifications positioning setting and adjust notification alignment in video chat * refactor: streamline StreamInfoBar component by consolidating offline handling and improving layout for better readability * refactor: enhance StreamInfoBar by adding tooltip for streamer name and improving text overflow handling * refactor: adjust tooltip display duration in StreamInfoBar and update theme configuration * refactor: adjust margin and padding in StreamCard for improved layout consistency * chore: update dependencies in pubspec.yaml and pubspec.lock for Firebase and other packages * template * chore: update iOS platform version to 15.0 and Firebase dependencies to 12.2.0 * refactor: simplify StreamInfoBar layout by reducing nested widgets and improving text color handling * format * feat: enhance Channel model and StreamInfoBar to support offline channel details * feat: add offline indicator and improve StreamInfoBar layout for better offline channel display * fix: adjust icon color opacity in StreamInfoBar for improved visibility * feat: enhance dismissal animation in FrostyPhotoViewDialog to track swipe direction * docs: update copilot instructions for clarity and additional error handling details * refactor: optimize latency tooltip layout and improve offline indicator styling in VideoOverlay * feat: implement shared chat asset fetching and participant management in ChatAssetsStore * refactor: replace Observer with Builder for improved widget rebuilding in VideoOverlay * refactor: update StreamInfoBar border styling and adjust layout in VideoOverlay for improved visual consistency * feat: add showTextShadows property to StreamInfoBar for customizable text shadow display * refactor: adjust layout in VideoOverlay by adding padding to improve spacing and visual consistency * refactor: enhance VideoOverlay gradients and layout for improved visual hierarchy and user experience * refactor: reduce vertical padding in VideoOverlay for improved layout consistency * refactor: remove overlay opacity settings from VideoSettings and SettingsStore for simplification * refactor: improve text overlay transition in VideoChat for better user experience * Revert "refactor: improve text overlay transition in VideoChat for better user experience" This reverts commit fd16ff5ec30ec266157e5c8a9d4a6090c91717f6. * refactor: wrap videoOverlay in ColoredBox for improved layout handling * refactor: optimize animation duration and transition curves in VideoChat for smoother interactions * refactor: dispose searchScrollController in HomeStoreBase to prevent memory leaks * refactor: simplify gradient definitions in VideoOverlay for improved readability and maintainability * refactor: remove 'Offline' text overlay from VideoOverlay for cleaner UI * refactor: add refresh functionality for assets in ChatDetails with loading indicators * refactor: update visibility conditions for uptime, viewer count, and category display in StreamInfoBar * refactor: replace AlertDialog with FrostyDialog for consistent dialog styling across the application * refactor: enhance layout handling in FrostyPageView to prevent overflow during height transitions * refactor: replace ColorPickerDialog with AccentColorPickerDialog for improved color selection experience * refactor: replace theme and accent color settings with dedicated components for improved modularity and readability * refactor: replace ElevatedButton with TextButton for consistent button styling across dialogs * refactor: integrate MobX Observer for reactive state management in settings widgets * refactor: update theme and dialog components for improved styling and consistency * refactor: enhance dialog styling with rounded corners and border in theme configuration * refactor: improve dialog messages for unauthorized access handling * refactor: update bodyLarge text style in theme configuration to include font weight * refactor: standardize Divider usage and adjust theme styles for improved consistency * refactor: adjust Divider properties and theme styles for enhanced visual consistency * chore: remove GEMINI.md file as it is no longer needed for project documentation * refactor: enhance token validation and reconnect logic in AuthBase for improved error handling * format * refactor: integrate landscape cutout settings into VideoChat layout for improved responsiveness * refactor: implement app lifecycle handling in VideoChat and enhance stream info update logic in VideoStore * refactor: update landscape cutout conditionals in VideoChat layout for improved responsiveness * update AGENTS.md * add scrollbar to search * fix scrolling exception * update CLAUDE.md * 5 auth reconnect attemps then log out * increase reply max lines to 2 * simplify and improve reply formatting * add prime icon * better draggable divider * support draggable divider in fullscreen overlay chat * add text shadow in fullscreen chat overlay mode * format * add landscape checks * video store optimization attempts * Dispose WebViewController and remove JavaScript channels properly * Track and cleanup all MutationObservers to prevent accumulation * Throttle latency updates to once per 5 seconds (reduces CPU load) * Add timeout protection and null checks for robustness * Prevent duplicate event listeners on page reloads * double tap divider to reset * Revert "video store optimization attempts" This reverts commit b1df7b0de473543283211a489dca698d9d241857. * optimize video store attempt 2 * Revert "double tap divider to reset" This reverts commit aeb26a433500ec71f822794835e927018ee59e1e. * optimize latency listener to open the menu and check every 20 secconds * more optimizations * hard refresh * abbreviate latency * fix lint * improve hide default overlay * fix chat no longer reconnecting with chat delay * refine chat alerts * fix historical message missing badges and emotes on initial connection * parallelize * revert * add reconnect button inline action * refactor: replace Scrollbar with FrostyScrollbar across chat and settings screens for consistent styling * tweak chat details menu * add scrollbar to release notes, renames for consistency * fix duplicate message case * fix chat delay alerts in auto sync mode * add regex for numeric strings and enhance display name formatting logic * exterminate borders * refactor: simplify active chat modes display in chat details screen * feat: enhance chat input button with delay notification and disable state * fix: wrap chat in SafeArea to prevent UI overflow issues * refactor: remove divider line from video chat and update draggable divider visibility logic * persist overlay in pip mode * fix: update chat delay handling and notifications in chat bottom bar * fix: update chat overlay visibility logic to respect fullscreen settings * tap to show deleted message * fix: prevent accidental chat scrolling when accessing system UI in landscape mode * show latency in portrait * fix: enhance chat delay notifications with dynamic delay time * docs: update CLAUDE.md for improved environment variable instructions and architecture overview * fix: improve chat delay countdown management and message handling * add preliminary release notes * remove agents.md * update lockfile * add initial multi chat feature * add option to persist multi chat tabs * add remove confirmation dialog * improve add chat design * lazy-load tabs * create global assets store to dedupe global asset fetching * improve tab design/styles * update notes * use frosty dialog * update claude md * tweak * add ability to reorder tabs * resolve conflict * merge cleanup * format * update release notes * add chat delay sync completion tracking to prevent countdown re-appearance * add tests * fix * update release notes * bump
2026-01-01 22:28:17 -05:00
// Start chat delay countdown when chatDelay is set (for auto sync mode)
// Cancel countdown if delay becomes 0
reactions.add(
reaction((_) => settings.effectiveChatDelay, (chatDelay) {
v5 (#463) * migrate to dio * ignore folders * simplify twitch api headers handling * clean up main * simplify logs * optimize profile picture fetching fixes refetches on tab switch * update claude md * refactor irc.dart * update copilot instructions with essential commands and project structure details * implement message sending state management and UI updates * refactor notification handling and add copy-paste functionality in chat * refactor AlertMessage to support vertical layout and optional padding * refactor error messages for consistency and clarity across various components * refactor chat layout to use draggable divider and improve chat width settings * refactor Uptime widget to use SharedTimerService for synchronized updates * refactor search results components to handle null future states gracefully * refactor loading indicators to use skeleton loaders for improved user experience * refactor UI components for improved layout and responsiveness, enhance skeleton loaders, and streamline padding adjustments * refactor: replace manual blur effects with BlurredContainer for consistency and reusability * refactor: enhance JavaScript execution and error handling in WebView components * refactor: replace app bar with blurred container for improved UI consistency across screens * refactor: streamline video chat layout and enhance PiP drag gesture functionality * revert some app bar changes * refactor: implement Picture-in-Picture drag functionality in VideoChat * refactor: pass currentChannelId to IRCMessage and ChatMessage for improved context * fix large thubmnail width * chore: update Gradle and Kotlin plugin versions for improved compatibility * changes from v4.10.0 branch * feat: integrate AnimatedScrollBorder for improved UI responsiveness across various screens * refactor: update SectionHeader styling and improve theme management * feat: add pinned section to StreamsList and enhance skeleton loader padding * feat: add repository guidelines for project structure, coding style, testing, and security * feat: enhance StreamCard UI with BlurredContainer and adjust border width in theme * feat: implement unfocusInput and safeRequestFocus methods to manage text field focus behavior * feat: enhance Picture-in-Picture drag interactions with haptic feedback and smooth animations * refactor: improve code formatting and readability across multiple files * feat: implement picture-in-picture mode toggle and state management for video playback * feat: reset PiP mode state when pausing video playback * feat: add custom app bar with profile picture and stream info for video chat * feat: convert multiple settings screens to use StatefulWidget and add animated scroll borders * feat: update blur configuration for adaptive alpha based on theme * fix: adjust default font size in SectionHeader widget * feat: enhance PiP mode with drag overlay instruction and UI improvements * fix: improve badge rendering with consistent margin and border for current channel * refactor: replace BackdropFilter with BlurredContainer for improved clarity and maintainability * fix: reduce background transparency in Uptime widget for better visibility * feat: enhance photo view dialog with full resolution toggle and blurred background * fix: reset chat delay to 0 when auto sync is enabled and update settings title for clarity * fix: adjust border width in theme to improve consistency * feat: add forceDarkMode option to BlurredContainer for improved theme adaptability * feat: implement offline followed channels feature with UI integration and settings option * fix: increase font size and weight for offline status text for better readability * feat: remove offline pinned channels feature and update related UI components * feat: optimize offline channels loading behavior based on expansion state * fix: improve clarity and consistency in repository guidelines formatting * feat: update full resolution URL handling and button visibility logic * feat: replace app bar with blurred version in chat-only mode and add animated scroll border * feat: refactor video chat layout for improved chat and video display in landscape mode * feat: remove bottom bar visibility setting and adjust chat layout accordingly * fix: simplify condition for displaying offline channels section in following tab * feat: enhance reply thread display with indentation and reply icon * feat: implement showModalBottomSheetWithProperFocus for improved focus handling * feat: add gradient direction support to BlurredContainer for enhanced visual effects * feat: enhance NavigationBar and Theme settings for improved visual consistency * feat: add gradient direction support to BlurredContainer in VideoChat for enhanced visual effects * chore: update .gitignore to include .cursor file for better environment management * fix: update PiP drag gesture conditions to include video paused state for better user experience * refactor: replace ScrollController with SettingsPageLayout in settings screens for improved layout management * refactor: centralize orientation handling by introducing OrientationUtils for improved readability and maintainability * refactor: replace OrientationUtils with ContextExtensions for streamlined context-based access to theme, layout, and API dependencies * refactor: improve video chat UI by adjusting title layout and adding stream info tooltips for better user experience * refactor: adjust titleSpacing in theme and navigation components for improved layout consistency * refactor: update stream info timer handling and overlay management for improved UI responsiveness * refactor: enhance stream info timer logic and overlay visibility management for chat-only mode * refactor: enhance input decoration theme in FrostyThemes for improved visual consistency and responsiveness * refactor: adjust inputDecorationTheme padding in FrostyThemes for improved visual consistency * refactor: enhance video overlay management by including video preview overlay in hideElements for improved UI consistency * refactor: improve chat bottom bar padding and video chat layout for enhanced UI consistency * refactor: adjust chat padding to account for device bottom insets for improved layout consistency * refactor: update text styles in FrostyThemes for improved visual consistency across UI components * refactor: update iOS minimum deployment target to 13.0 for improved compatibility * refactor: adjust chat bottom padding based on emote menu visibility for improved layout consistency * refactor: adjust padding values in StreamsList for improved layout consistency * refactor: replace Padding with AnimatedPadding in Chat for smoother layout transitions refactor: replace Container with AnimatedContainer in BlurredContainer for smoother animations * refactor: remove unnecessary radius property from ProfilePicture in OfflineChannelCard for cleaner code * refactor: enhance chat bottom bar suffix icon to display message delay with tooltip for improved user experience * refactor: update hint text and tooltips in chat bottom bar and search for improved clarity * refactor: simplify notification display logic and enhance chat input behavior for improved user experience * refactor: enhance layout consistency by adjusting spacing in various components across the channel and home screens * refactor: introduce LiveIndicator widget and adjust spacing in channel and video components for improved layout consistency * refactor: remove monospace font family from chat bottom bar for improved text rendering * refactor: reduce notification animation duration and change dismiss direction for improved user experience * refactor: replace VideoBar with StreamInfoBar in video components for improved layout and consistency * refactor: adjust font sizes and spacing in StreamInfoBar for improved layout consistency * refactor: standardize font sizes and update gradient stops in video components for improved visual consistency * refactor: update tooltip padding and background color in theme for improved visual consistency * refactor: enhance tooltip behavior and standardize font sizes in StreamInfoBar and related components for improved visual consistency * refactor: add showThumbnail option to LargeStreamCardSkeletonLoader for improved layout flexibility * refactor: add StreamInfoBarSkeletonLoader for improved layout consistency in stream components * refactor: add shadow effects to icons and text in StreamInfoBar and VideoOverlay for improved visual depth * refactor: update defaultOverlayOpacity to 0.0 for improved overlay behavior * fix: correct stream info text color on overlay * refactor: implement a new color picker dialog with random color generation for enhanced user experience * refactor: adjust gradient colors and stops in VideoOverlay for improved visual consistency * refactor: refine gradient colors and stops in VideoOverlay for enhanced visual clarity * refactor: add isCompact parameter to StreamInfoBar for responsive text sizing * fix: update tooltip background color to use surface color for better contrast * feat: add shared chat mode support in chat store and update StreamInfoBar for visual indication * refactor: disable debug print for IRC messages to reduce log clutter * feat: implement chat color selection feature with user color management in chat settings * refactor: replace color adjustment logic with new contrast-aware utility for chat names * refactor: simplify chat details UI by replacing list tiles with action cards and removing unused clear dialog * refactor: enhance chat details UI by improving time formatting and adding label styling to action cards * refactor: update chat color terminology to 'Username color' for clarity in UI * refactor: enhance chat details UI by introducing active chat modes display and improving layout structure * refactor: improve chat details layout by replacing ListTile with Padding and adding a Divider for better visual separation * refactor: remove chat notifications positioning setting and adjust notification alignment in video chat * refactor: streamline StreamInfoBar component by consolidating offline handling and improving layout for better readability * refactor: enhance StreamInfoBar by adding tooltip for streamer name and improving text overflow handling * refactor: adjust tooltip display duration in StreamInfoBar and update theme configuration * refactor: adjust margin and padding in StreamCard for improved layout consistency * chore: update dependencies in pubspec.yaml and pubspec.lock for Firebase and other packages * template * chore: update iOS platform version to 15.0 and Firebase dependencies to 12.2.0 * refactor: simplify StreamInfoBar layout by reducing nested widgets and improving text color handling * format * feat: enhance Channel model and StreamInfoBar to support offline channel details * feat: add offline indicator and improve StreamInfoBar layout for better offline channel display * fix: adjust icon color opacity in StreamInfoBar for improved visibility * feat: enhance dismissal animation in FrostyPhotoViewDialog to track swipe direction * docs: update copilot instructions for clarity and additional error handling details * refactor: optimize latency tooltip layout and improve offline indicator styling in VideoOverlay * feat: implement shared chat asset fetching and participant management in ChatAssetsStore * refactor: replace Observer with Builder for improved widget rebuilding in VideoOverlay * refactor: update StreamInfoBar border styling and adjust layout in VideoOverlay for improved visual consistency * feat: add showTextShadows property to StreamInfoBar for customizable text shadow display * refactor: adjust layout in VideoOverlay by adding padding to improve spacing and visual consistency * refactor: enhance VideoOverlay gradients and layout for improved visual hierarchy and user experience * refactor: reduce vertical padding in VideoOverlay for improved layout consistency * refactor: remove overlay opacity settings from VideoSettings and SettingsStore for simplification * refactor: improve text overlay transition in VideoChat for better user experience * Revert "refactor: improve text overlay transition in VideoChat for better user experience" This reverts commit fd16ff5ec30ec266157e5c8a9d4a6090c91717f6. * refactor: wrap videoOverlay in ColoredBox for improved layout handling * refactor: optimize animation duration and transition curves in VideoChat for smoother interactions * refactor: dispose searchScrollController in HomeStoreBase to prevent memory leaks * refactor: simplify gradient definitions in VideoOverlay for improved readability and maintainability * refactor: remove 'Offline' text overlay from VideoOverlay for cleaner UI * refactor: add refresh functionality for assets in ChatDetails with loading indicators * refactor: update visibility conditions for uptime, viewer count, and category display in StreamInfoBar * refactor: replace AlertDialog with FrostyDialog for consistent dialog styling across the application * refactor: enhance layout handling in FrostyPageView to prevent overflow during height transitions * refactor: replace ColorPickerDialog with AccentColorPickerDialog for improved color selection experience * refactor: replace theme and accent color settings with dedicated components for improved modularity and readability * refactor: replace ElevatedButton with TextButton for consistent button styling across dialogs * refactor: integrate MobX Observer for reactive state management in settings widgets * refactor: update theme and dialog components for improved styling and consistency * refactor: enhance dialog styling with rounded corners and border in theme configuration * refactor: improve dialog messages for unauthorized access handling * refactor: update bodyLarge text style in theme configuration to include font weight * refactor: standardize Divider usage and adjust theme styles for improved consistency * refactor: adjust Divider properties and theme styles for enhanced visual consistency * chore: remove GEMINI.md file as it is no longer needed for project documentation * refactor: enhance token validation and reconnect logic in AuthBase for improved error handling * format * refactor: integrate landscape cutout settings into VideoChat layout for improved responsiveness * refactor: implement app lifecycle handling in VideoChat and enhance stream info update logic in VideoStore * refactor: update landscape cutout conditionals in VideoChat layout for improved responsiveness * update AGENTS.md * add scrollbar to search * fix scrolling exception * update CLAUDE.md * 5 auth reconnect attemps then log out * increase reply max lines to 2 * simplify and improve reply formatting * add prime icon * better draggable divider * support draggable divider in fullscreen overlay chat * add text shadow in fullscreen chat overlay mode * format * add landscape checks * video store optimization attempts * Dispose WebViewController and remove JavaScript channels properly * Track and cleanup all MutationObservers to prevent accumulation * Throttle latency updates to once per 5 seconds (reduces CPU load) * Add timeout protection and null checks for robustness * Prevent duplicate event listeners on page reloads * double tap divider to reset * Revert "video store optimization attempts" This reverts commit b1df7b0de473543283211a489dca698d9d241857. * optimize video store attempt 2 * Revert "double tap divider to reset" This reverts commit aeb26a433500ec71f822794835e927018ee59e1e. * optimize latency listener to open the menu and check every 20 secconds * more optimizations * hard refresh * abbreviate latency * fix lint * improve hide default overlay * fix chat no longer reconnecting with chat delay * refine chat alerts * fix historical message missing badges and emotes on initial connection * parallelize * revert * add reconnect button inline action * refactor: replace Scrollbar with FrostyScrollbar across chat and settings screens for consistent styling * tweak chat details menu * add scrollbar to release notes, renames for consistency * fix duplicate message case * fix chat delay alerts in auto sync mode * add regex for numeric strings and enhance display name formatting logic * exterminate borders * refactor: simplify active chat modes display in chat details screen * feat: enhance chat input button with delay notification and disable state * fix: wrap chat in SafeArea to prevent UI overflow issues * refactor: remove divider line from video chat and update draggable divider visibility logic * persist overlay in pip mode * fix: update chat delay handling and notifications in chat bottom bar * fix: update chat overlay visibility logic to respect fullscreen settings * tap to show deleted message * fix: prevent accidental chat scrolling when accessing system UI in landscape mode * show latency in portrait * fix: enhance chat delay notifications with dynamic delay time * docs: update CLAUDE.md for improved environment variable instructions and architecture overview * fix: improve chat delay countdown management and message handling * add preliminary release notes * remove agents.md * update lockfile * add initial multi chat feature * add option to persist multi chat tabs * add remove confirmation dialog * improve add chat design * lazy-load tabs * create global assets store to dedupe global asset fetching * improve tab design/styles * update notes * use frosty dialog * update claude md * tweak * add ability to reorder tabs * resolve conflict * merge cleanup * format * update release notes * add chat delay sync completion tracking to prevent countdown re-appearance * add tests * fix * update release notes * bump
2026-01-01 22:28:17 -05:00
if (chatDelay == 0) {
_flushPendingDelayedCallbacks();
v5 (#463) * migrate to dio * ignore folders * simplify twitch api headers handling * clean up main * simplify logs * optimize profile picture fetching fixes refetches on tab switch * update claude md * refactor irc.dart * update copilot instructions with essential commands and project structure details * implement message sending state management and UI updates * refactor notification handling and add copy-paste functionality in chat * refactor AlertMessage to support vertical layout and optional padding * refactor error messages for consistency and clarity across various components * refactor chat layout to use draggable divider and improve chat width settings * refactor Uptime widget to use SharedTimerService for synchronized updates * refactor search results components to handle null future states gracefully * refactor loading indicators to use skeleton loaders for improved user experience * refactor UI components for improved layout and responsiveness, enhance skeleton loaders, and streamline padding adjustments * refactor: replace manual blur effects with BlurredContainer for consistency and reusability * refactor: enhance JavaScript execution and error handling in WebView components * refactor: replace app bar with blurred container for improved UI consistency across screens * refactor: streamline video chat layout and enhance PiP drag gesture functionality * revert some app bar changes * refactor: implement Picture-in-Picture drag functionality in VideoChat * refactor: pass currentChannelId to IRCMessage and ChatMessage for improved context * fix large thubmnail width * chore: update Gradle and Kotlin plugin versions for improved compatibility * changes from v4.10.0 branch * feat: integrate AnimatedScrollBorder for improved UI responsiveness across various screens * refactor: update SectionHeader styling and improve theme management * feat: add pinned section to StreamsList and enhance skeleton loader padding * feat: add repository guidelines for project structure, coding style, testing, and security * feat: enhance StreamCard UI with BlurredContainer and adjust border width in theme * feat: implement unfocusInput and safeRequestFocus methods to manage text field focus behavior * feat: enhance Picture-in-Picture drag interactions with haptic feedback and smooth animations * refactor: improve code formatting and readability across multiple files * feat: implement picture-in-picture mode toggle and state management for video playback * feat: reset PiP mode state when pausing video playback * feat: add custom app bar with profile picture and stream info for video chat * feat: convert multiple settings screens to use StatefulWidget and add animated scroll borders * feat: update blur configuration for adaptive alpha based on theme * fix: adjust default font size in SectionHeader widget * feat: enhance PiP mode with drag overlay instruction and UI improvements * fix: improve badge rendering with consistent margin and border for current channel * refactor: replace BackdropFilter with BlurredContainer for improved clarity and maintainability * fix: reduce background transparency in Uptime widget for better visibility * feat: enhance photo view dialog with full resolution toggle and blurred background * fix: reset chat delay to 0 when auto sync is enabled and update settings title for clarity * fix: adjust border width in theme to improve consistency * feat: add forceDarkMode option to BlurredContainer for improved theme adaptability * feat: implement offline followed channels feature with UI integration and settings option * fix: increase font size and weight for offline status text for better readability * feat: remove offline pinned channels feature and update related UI components * feat: optimize offline channels loading behavior based on expansion state * fix: improve clarity and consistency in repository guidelines formatting * feat: update full resolution URL handling and button visibility logic * feat: replace app bar with blurred version in chat-only mode and add animated scroll border * feat: refactor video chat layout for improved chat and video display in landscape mode * feat: remove bottom bar visibility setting and adjust chat layout accordingly * fix: simplify condition for displaying offline channels section in following tab * feat: enhance reply thread display with indentation and reply icon * feat: implement showModalBottomSheetWithProperFocus for improved focus handling * feat: add gradient direction support to BlurredContainer for enhanced visual effects * feat: enhance NavigationBar and Theme settings for improved visual consistency * feat: add gradient direction support to BlurredContainer in VideoChat for enhanced visual effects * chore: update .gitignore to include .cursor file for better environment management * fix: update PiP drag gesture conditions to include video paused state for better user experience * refactor: replace ScrollController with SettingsPageLayout in settings screens for improved layout management * refactor: centralize orientation handling by introducing OrientationUtils for improved readability and maintainability * refactor: replace OrientationUtils with ContextExtensions for streamlined context-based access to theme, layout, and API dependencies * refactor: improve video chat UI by adjusting title layout and adding stream info tooltips for better user experience * refactor: adjust titleSpacing in theme and navigation components for improved layout consistency * refactor: update stream info timer handling and overlay management for improved UI responsiveness * refactor: enhance stream info timer logic and overlay visibility management for chat-only mode * refactor: enhance input decoration theme in FrostyThemes for improved visual consistency and responsiveness * refactor: adjust inputDecorationTheme padding in FrostyThemes for improved visual consistency * refactor: enhance video overlay management by including video preview overlay in hideElements for improved UI consistency * refactor: improve chat bottom bar padding and video chat layout for enhanced UI consistency * refactor: adjust chat padding to account for device bottom insets for improved layout consistency * refactor: update text styles in FrostyThemes for improved visual consistency across UI components * refactor: update iOS minimum deployment target to 13.0 for improved compatibility * refactor: adjust chat bottom padding based on emote menu visibility for improved layout consistency * refactor: adjust padding values in StreamsList for improved layout consistency * refactor: replace Padding with AnimatedPadding in Chat for smoother layout transitions refactor: replace Container with AnimatedContainer in BlurredContainer for smoother animations * refactor: remove unnecessary radius property from ProfilePicture in OfflineChannelCard for cleaner code * refactor: enhance chat bottom bar suffix icon to display message delay with tooltip for improved user experience * refactor: update hint text and tooltips in chat bottom bar and search for improved clarity * refactor: simplify notification display logic and enhance chat input behavior for improved user experience * refactor: enhance layout consistency by adjusting spacing in various components across the channel and home screens * refactor: introduce LiveIndicator widget and adjust spacing in channel and video components for improved layout consistency * refactor: remove monospace font family from chat bottom bar for improved text rendering * refactor: reduce notification animation duration and change dismiss direction for improved user experience * refactor: replace VideoBar with StreamInfoBar in video components for improved layout and consistency * refactor: adjust font sizes and spacing in StreamInfoBar for improved layout consistency * refactor: standardize font sizes and update gradient stops in video components for improved visual consistency * refactor: update tooltip padding and background color in theme for improved visual consistency * refactor: enhance tooltip behavior and standardize font sizes in StreamInfoBar and related components for improved visual consistency * refactor: add showThumbnail option to LargeStreamCardSkeletonLoader for improved layout flexibility * refactor: add StreamInfoBarSkeletonLoader for improved layout consistency in stream components * refactor: add shadow effects to icons and text in StreamInfoBar and VideoOverlay for improved visual depth * refactor: update defaultOverlayOpacity to 0.0 for improved overlay behavior * fix: correct stream info text color on overlay * refactor: implement a new color picker dialog with random color generation for enhanced user experience * refactor: adjust gradient colors and stops in VideoOverlay for improved visual consistency * refactor: refine gradient colors and stops in VideoOverlay for enhanced visual clarity * refactor: add isCompact parameter to StreamInfoBar for responsive text sizing * fix: update tooltip background color to use surface color for better contrast * feat: add shared chat mode support in chat store and update StreamInfoBar for visual indication * refactor: disable debug print for IRC messages to reduce log clutter * feat: implement chat color selection feature with user color management in chat settings * refactor: replace color adjustment logic with new contrast-aware utility for chat names * refactor: simplify chat details UI by replacing list tiles with action cards and removing unused clear dialog * refactor: enhance chat details UI by improving time formatting and adding label styling to action cards * refactor: update chat color terminology to 'Username color' for clarity in UI * refactor: enhance chat details UI by introducing active chat modes display and improving layout structure * refactor: improve chat details layout by replacing ListTile with Padding and adding a Divider for better visual separation * refactor: remove chat notifications positioning setting and adjust notification alignment in video chat * refactor: streamline StreamInfoBar component by consolidating offline handling and improving layout for better readability * refactor: enhance StreamInfoBar by adding tooltip for streamer name and improving text overflow handling * refactor: adjust tooltip display duration in StreamInfoBar and update theme configuration * refactor: adjust margin and padding in StreamCard for improved layout consistency * chore: update dependencies in pubspec.yaml and pubspec.lock for Firebase and other packages * template * chore: update iOS platform version to 15.0 and Firebase dependencies to 12.2.0 * refactor: simplify StreamInfoBar layout by reducing nested widgets and improving text color handling * format * feat: enhance Channel model and StreamInfoBar to support offline channel details * feat: add offline indicator and improve StreamInfoBar layout for better offline channel display * fix: adjust icon color opacity in StreamInfoBar for improved visibility * feat: enhance dismissal animation in FrostyPhotoViewDialog to track swipe direction * docs: update copilot instructions for clarity and additional error handling details * refactor: optimize latency tooltip layout and improve offline indicator styling in VideoOverlay * feat: implement shared chat asset fetching and participant management in ChatAssetsStore * refactor: replace Observer with Builder for improved widget rebuilding in VideoOverlay * refactor: update StreamInfoBar border styling and adjust layout in VideoOverlay for improved visual consistency * feat: add showTextShadows property to StreamInfoBar for customizable text shadow display * refactor: adjust layout in VideoOverlay by adding padding to improve spacing and visual consistency * refactor: enhance VideoOverlay gradients and layout for improved visual hierarchy and user experience * refactor: reduce vertical padding in VideoOverlay for improved layout consistency * refactor: remove overlay opacity settings from VideoSettings and SettingsStore for simplification * refactor: improve text overlay transition in VideoChat for better user experience * Revert "refactor: improve text overlay transition in VideoChat for better user experience" This reverts commit fd16ff5ec30ec266157e5c8a9d4a6090c91717f6. * refactor: wrap videoOverlay in ColoredBox for improved layout handling * refactor: optimize animation duration and transition curves in VideoChat for smoother interactions * refactor: dispose searchScrollController in HomeStoreBase to prevent memory leaks * refactor: simplify gradient definitions in VideoOverlay for improved readability and maintainability * refactor: remove 'Offline' text overlay from VideoOverlay for cleaner UI * refactor: add refresh functionality for assets in ChatDetails with loading indicators * refactor: update visibility conditions for uptime, viewer count, and category display in StreamInfoBar * refactor: replace AlertDialog with FrostyDialog for consistent dialog styling across the application * refactor: enhance layout handling in FrostyPageView to prevent overflow during height transitions * refactor: replace ColorPickerDialog with AccentColorPickerDialog for improved color selection experience * refactor: replace theme and accent color settings with dedicated components for improved modularity and readability * refactor: replace ElevatedButton with TextButton for consistent button styling across dialogs * refactor: integrate MobX Observer for reactive state management in settings widgets * refactor: update theme and dialog components for improved styling and consistency * refactor: enhance dialog styling with rounded corners and border in theme configuration * refactor: improve dialog messages for unauthorized access handling * refactor: update bodyLarge text style in theme configuration to include font weight * refactor: standardize Divider usage and adjust theme styles for improved consistency * refactor: adjust Divider properties and theme styles for enhanced visual consistency * chore: remove GEMINI.md file as it is no longer needed for project documentation * refactor: enhance token validation and reconnect logic in AuthBase for improved error handling * format * refactor: integrate landscape cutout settings into VideoChat layout for improved responsiveness * refactor: implement app lifecycle handling in VideoChat and enhance stream info update logic in VideoStore * refactor: update landscape cutout conditionals in VideoChat layout for improved responsiveness * update AGENTS.md * add scrollbar to search * fix scrolling exception * update CLAUDE.md * 5 auth reconnect attemps then log out * increase reply max lines to 2 * simplify and improve reply formatting * add prime icon * better draggable divider * support draggable divider in fullscreen overlay chat * add text shadow in fullscreen chat overlay mode * format * add landscape checks * video store optimization attempts * Dispose WebViewController and remove JavaScript channels properly * Track and cleanup all MutationObservers to prevent accumulation * Throttle latency updates to once per 5 seconds (reduces CPU load) * Add timeout protection and null checks for robustness * Prevent duplicate event listeners on page reloads * double tap divider to reset * Revert "video store optimization attempts" This reverts commit b1df7b0de473543283211a489dca698d9d241857. * optimize video store attempt 2 * Revert "double tap divider to reset" This reverts commit aeb26a433500ec71f822794835e927018ee59e1e. * optimize latency listener to open the menu and check every 20 secconds * more optimizations * hard refresh * abbreviate latency * fix lint * improve hide default overlay * fix chat no longer reconnecting with chat delay * refine chat alerts * fix historical message missing badges and emotes on initial connection * parallelize * revert * add reconnect button inline action * refactor: replace Scrollbar with FrostyScrollbar across chat and settings screens for consistent styling * tweak chat details menu * add scrollbar to release notes, renames for consistency * fix duplicate message case * fix chat delay alerts in auto sync mode * add regex for numeric strings and enhance display name formatting logic * exterminate borders * refactor: simplify active chat modes display in chat details screen * feat: enhance chat input button with delay notification and disable state * fix: wrap chat in SafeArea to prevent UI overflow issues * refactor: remove divider line from video chat and update draggable divider visibility logic * persist overlay in pip mode * fix: update chat delay handling and notifications in chat bottom bar * fix: update chat overlay visibility logic to respect fullscreen settings * tap to show deleted message * fix: prevent accidental chat scrolling when accessing system UI in landscape mode * show latency in portrait * fix: enhance chat delay notifications with dynamic delay time * docs: update CLAUDE.md for improved environment variable instructions and architecture overview * fix: improve chat delay countdown management and message handling * add preliminary release notes * remove agents.md * update lockfile * add initial multi chat feature * add option to persist multi chat tabs * add remove confirmation dialog * improve add chat design * lazy-load tabs * create global assets store to dedupe global asset fetching * improve tab design/styles * update notes * use frosty dialog * update claude md * tweak * add ability to reorder tabs * resolve conflict * merge cleanup * format * update release notes * add chat delay sync completion tracking to prevent countdown re-appearance * add tests * fix * update release notes * bump
2026-01-01 22:28:17 -05:00
_cancelChatDelayCountdown();
_chatDelaySyncCompleted = false;
} else if (settings.autoSyncChatDelay &&
settings.showVideo &&
chatDelay > 0 &&
!_chatDelaySyncCompleted) {
_startChatDelayCountdown();
}
}),
);
2022-05-24 23:45:14 -04:00
v5 (#463) * migrate to dio * ignore folders * simplify twitch api headers handling * clean up main * simplify logs * optimize profile picture fetching fixes refetches on tab switch * update claude md * refactor irc.dart * update copilot instructions with essential commands and project structure details * implement message sending state management and UI updates * refactor notification handling and add copy-paste functionality in chat * refactor AlertMessage to support vertical layout and optional padding * refactor error messages for consistency and clarity across various components * refactor chat layout to use draggable divider and improve chat width settings * refactor Uptime widget to use SharedTimerService for synchronized updates * refactor search results components to handle null future states gracefully * refactor loading indicators to use skeleton loaders for improved user experience * refactor UI components for improved layout and responsiveness, enhance skeleton loaders, and streamline padding adjustments * refactor: replace manual blur effects with BlurredContainer for consistency and reusability * refactor: enhance JavaScript execution and error handling in WebView components * refactor: replace app bar with blurred container for improved UI consistency across screens * refactor: streamline video chat layout and enhance PiP drag gesture functionality * revert some app bar changes * refactor: implement Picture-in-Picture drag functionality in VideoChat * refactor: pass currentChannelId to IRCMessage and ChatMessage for improved context * fix large thubmnail width * chore: update Gradle and Kotlin plugin versions for improved compatibility * changes from v4.10.0 branch * feat: integrate AnimatedScrollBorder for improved UI responsiveness across various screens * refactor: update SectionHeader styling and improve theme management * feat: add pinned section to StreamsList and enhance skeleton loader padding * feat: add repository guidelines for project structure, coding style, testing, and security * feat: enhance StreamCard UI with BlurredContainer and adjust border width in theme * feat: implement unfocusInput and safeRequestFocus methods to manage text field focus behavior * feat: enhance Picture-in-Picture drag interactions with haptic feedback and smooth animations * refactor: improve code formatting and readability across multiple files * feat: implement picture-in-picture mode toggle and state management for video playback * feat: reset PiP mode state when pausing video playback * feat: add custom app bar with profile picture and stream info for video chat * feat: convert multiple settings screens to use StatefulWidget and add animated scroll borders * feat: update blur configuration for adaptive alpha based on theme * fix: adjust default font size in SectionHeader widget * feat: enhance PiP mode with drag overlay instruction and UI improvements * fix: improve badge rendering with consistent margin and border for current channel * refactor: replace BackdropFilter with BlurredContainer for improved clarity and maintainability * fix: reduce background transparency in Uptime widget for better visibility * feat: enhance photo view dialog with full resolution toggle and blurred background * fix: reset chat delay to 0 when auto sync is enabled and update settings title for clarity * fix: adjust border width in theme to improve consistency * feat: add forceDarkMode option to BlurredContainer for improved theme adaptability * feat: implement offline followed channels feature with UI integration and settings option * fix: increase font size and weight for offline status text for better readability * feat: remove offline pinned channels feature and update related UI components * feat: optimize offline channels loading behavior based on expansion state * fix: improve clarity and consistency in repository guidelines formatting * feat: update full resolution URL handling and button visibility logic * feat: replace app bar with blurred version in chat-only mode and add animated scroll border * feat: refactor video chat layout for improved chat and video display in landscape mode * feat: remove bottom bar visibility setting and adjust chat layout accordingly * fix: simplify condition for displaying offline channels section in following tab * feat: enhance reply thread display with indentation and reply icon * feat: implement showModalBottomSheetWithProperFocus for improved focus handling * feat: add gradient direction support to BlurredContainer for enhanced visual effects * feat: enhance NavigationBar and Theme settings for improved visual consistency * feat: add gradient direction support to BlurredContainer in VideoChat for enhanced visual effects * chore: update .gitignore to include .cursor file for better environment management * fix: update PiP drag gesture conditions to include video paused state for better user experience * refactor: replace ScrollController with SettingsPageLayout in settings screens for improved layout management * refactor: centralize orientation handling by introducing OrientationUtils for improved readability and maintainability * refactor: replace OrientationUtils with ContextExtensions for streamlined context-based access to theme, layout, and API dependencies * refactor: improve video chat UI by adjusting title layout and adding stream info tooltips for better user experience * refactor: adjust titleSpacing in theme and navigation components for improved layout consistency * refactor: update stream info timer handling and overlay management for improved UI responsiveness * refactor: enhance stream info timer logic and overlay visibility management for chat-only mode * refactor: enhance input decoration theme in FrostyThemes for improved visual consistency and responsiveness * refactor: adjust inputDecorationTheme padding in FrostyThemes for improved visual consistency * refactor: enhance video overlay management by including video preview overlay in hideElements for improved UI consistency * refactor: improve chat bottom bar padding and video chat layout for enhanced UI consistency * refactor: adjust chat padding to account for device bottom insets for improved layout consistency * refactor: update text styles in FrostyThemes for improved visual consistency across UI components * refactor: update iOS minimum deployment target to 13.0 for improved compatibility * refactor: adjust chat bottom padding based on emote menu visibility for improved layout consistency * refactor: adjust padding values in StreamsList for improved layout consistency * refactor: replace Padding with AnimatedPadding in Chat for smoother layout transitions refactor: replace Container with AnimatedContainer in BlurredContainer for smoother animations * refactor: remove unnecessary radius property from ProfilePicture in OfflineChannelCard for cleaner code * refactor: enhance chat bottom bar suffix icon to display message delay with tooltip for improved user experience * refactor: update hint text and tooltips in chat bottom bar and search for improved clarity * refactor: simplify notification display logic and enhance chat input behavior for improved user experience * refactor: enhance layout consistency by adjusting spacing in various components across the channel and home screens * refactor: introduce LiveIndicator widget and adjust spacing in channel and video components for improved layout consistency * refactor: remove monospace font family from chat bottom bar for improved text rendering * refactor: reduce notification animation duration and change dismiss direction for improved user experience * refactor: replace VideoBar with StreamInfoBar in video components for improved layout and consistency * refactor: adjust font sizes and spacing in StreamInfoBar for improved layout consistency * refactor: standardize font sizes and update gradient stops in video components for improved visual consistency * refactor: update tooltip padding and background color in theme for improved visual consistency * refactor: enhance tooltip behavior and standardize font sizes in StreamInfoBar and related components for improved visual consistency * refactor: add showThumbnail option to LargeStreamCardSkeletonLoader for improved layout flexibility * refactor: add StreamInfoBarSkeletonLoader for improved layout consistency in stream components * refactor: add shadow effects to icons and text in StreamInfoBar and VideoOverlay for improved visual depth * refactor: update defaultOverlayOpacity to 0.0 for improved overlay behavior * fix: correct stream info text color on overlay * refactor: implement a new color picker dialog with random color generation for enhanced user experience * refactor: adjust gradient colors and stops in VideoOverlay for improved visual consistency * refactor: refine gradient colors and stops in VideoOverlay for enhanced visual clarity * refactor: add isCompact parameter to StreamInfoBar for responsive text sizing * fix: update tooltip background color to use surface color for better contrast * feat: add shared chat mode support in chat store and update StreamInfoBar for visual indication * refactor: disable debug print for IRC messages to reduce log clutter * feat: implement chat color selection feature with user color management in chat settings * refactor: replace color adjustment logic with new contrast-aware utility for chat names * refactor: simplify chat details UI by replacing list tiles with action cards and removing unused clear dialog * refactor: enhance chat details UI by improving time formatting and adding label styling to action cards * refactor: update chat color terminology to 'Username color' for clarity in UI * refactor: enhance chat details UI by introducing active chat modes display and improving layout structure * refactor: improve chat details layout by replacing ListTile with Padding and adding a Divider for better visual separation * refactor: remove chat notifications positioning setting and adjust notification alignment in video chat * refactor: streamline StreamInfoBar component by consolidating offline handling and improving layout for better readability * refactor: enhance StreamInfoBar by adding tooltip for streamer name and improving text overflow handling * refactor: adjust tooltip display duration in StreamInfoBar and update theme configuration * refactor: adjust margin and padding in StreamCard for improved layout consistency * chore: update dependencies in pubspec.yaml and pubspec.lock for Firebase and other packages * template * chore: update iOS platform version to 15.0 and Firebase dependencies to 12.2.0 * refactor: simplify StreamInfoBar layout by reducing nested widgets and improving text color handling * format * feat: enhance Channel model and StreamInfoBar to support offline channel details * feat: add offline indicator and improve StreamInfoBar layout for better offline channel display * fix: adjust icon color opacity in StreamInfoBar for improved visibility * feat: enhance dismissal animation in FrostyPhotoViewDialog to track swipe direction * docs: update copilot instructions for clarity and additional error handling details * refactor: optimize latency tooltip layout and improve offline indicator styling in VideoOverlay * feat: implement shared chat asset fetching and participant management in ChatAssetsStore * refactor: replace Observer with Builder for improved widget rebuilding in VideoOverlay * refactor: update StreamInfoBar border styling and adjust layout in VideoOverlay for improved visual consistency * feat: add showTextShadows property to StreamInfoBar for customizable text shadow display * refactor: adjust layout in VideoOverlay by adding padding to improve spacing and visual consistency * refactor: enhance VideoOverlay gradients and layout for improved visual hierarchy and user experience * refactor: reduce vertical padding in VideoOverlay for improved layout consistency * refactor: remove overlay opacity settings from VideoSettings and SettingsStore for simplification * refactor: improve text overlay transition in VideoChat for better user experience * Revert "refactor: improve text overlay transition in VideoChat for better user experience" This reverts commit fd16ff5ec30ec266157e5c8a9d4a6090c91717f6. * refactor: wrap videoOverlay in ColoredBox for improved layout handling * refactor: optimize animation duration and transition curves in VideoChat for smoother interactions * refactor: dispose searchScrollController in HomeStoreBase to prevent memory leaks * refactor: simplify gradient definitions in VideoOverlay for improved readability and maintainability * refactor: remove 'Offline' text overlay from VideoOverlay for cleaner UI * refactor: add refresh functionality for assets in ChatDetails with loading indicators * refactor: update visibility conditions for uptime, viewer count, and category display in StreamInfoBar * refactor: replace AlertDialog with FrostyDialog for consistent dialog styling across the application * refactor: enhance layout handling in FrostyPageView to prevent overflow during height transitions * refactor: replace ColorPickerDialog with AccentColorPickerDialog for improved color selection experience * refactor: replace theme and accent color settings with dedicated components for improved modularity and readability * refactor: replace ElevatedButton with TextButton for consistent button styling across dialogs * refactor: integrate MobX Observer for reactive state management in settings widgets * refactor: update theme and dialog components for improved styling and consistency * refactor: enhance dialog styling with rounded corners and border in theme configuration * refactor: improve dialog messages for unauthorized access handling * refactor: update bodyLarge text style in theme configuration to include font weight * refactor: standardize Divider usage and adjust theme styles for improved consistency * refactor: adjust Divider properties and theme styles for enhanced visual consistency * chore: remove GEMINI.md file as it is no longer needed for project documentation * refactor: enhance token validation and reconnect logic in AuthBase for improved error handling * format * refactor: integrate landscape cutout settings into VideoChat layout for improved responsiveness * refactor: implement app lifecycle handling in VideoChat and enhance stream info update logic in VideoStore * refactor: update landscape cutout conditionals in VideoChat layout for improved responsiveness * update AGENTS.md * add scrollbar to search * fix scrolling exception * update CLAUDE.md * 5 auth reconnect attemps then log out * increase reply max lines to 2 * simplify and improve reply formatting * add prime icon * better draggable divider * support draggable divider in fullscreen overlay chat * add text shadow in fullscreen chat overlay mode * format * add landscape checks * video store optimization attempts * Dispose WebViewController and remove JavaScript channels properly * Track and cleanup all MutationObservers to prevent accumulation * Throttle latency updates to once per 5 seconds (reduces CPU load) * Add timeout protection and null checks for robustness * Prevent duplicate event listeners on page reloads * double tap divider to reset * Revert "video store optimization attempts" This reverts commit b1df7b0de473543283211a489dca698d9d241857. * optimize video store attempt 2 * Revert "double tap divider to reset" This reverts commit aeb26a433500ec71f822794835e927018ee59e1e. * optimize latency listener to open the menu and check every 20 secconds * more optimizations * hard refresh * abbreviate latency * fix lint * improve hide default overlay * fix chat no longer reconnecting with chat delay * refine chat alerts * fix historical message missing badges and emotes on initial connection * parallelize * revert * add reconnect button inline action * refactor: replace Scrollbar with FrostyScrollbar across chat and settings screens for consistent styling * tweak chat details menu * add scrollbar to release notes, renames for consistency * fix duplicate message case * fix chat delay alerts in auto sync mode * add regex for numeric strings and enhance display name formatting logic * exterminate borders * refactor: simplify active chat modes display in chat details screen * feat: enhance chat input button with delay notification and disable state * fix: wrap chat in SafeArea to prevent UI overflow issues * refactor: remove divider line from video chat and update draggable divider visibility logic * persist overlay in pip mode * fix: update chat delay handling and notifications in chat bottom bar * fix: update chat overlay visibility logic to respect fullscreen settings * tap to show deleted message * fix: prevent accidental chat scrolling when accessing system UI in landscape mode * show latency in portrait * fix: enhance chat delay notifications with dynamic delay time * docs: update CLAUDE.md for improved environment variable instructions and architecture overview * fix: improve chat delay countdown management and message handling * add preliminary release notes * remove agents.md * update lockfile * add initial multi chat feature * add option to persist multi chat tabs * add remove confirmation dialog * improve add chat design * lazy-load tabs * create global assets store to dedupe global asset fetching * improve tab design/styles * update notes * use frosty dialog * update claude md * tweak * add ability to reorder tabs * resolve conflict * merge cleanup * format * update release notes * add chat delay sync completion tracking to prevent countdown re-appearance * add tests * fix * update release notes * bump
2026-01-01 22:28:17 -05:00
assetsStore.init();
_messages.add(IRCMessage.createNotice(message: 'Connecting to chat...'));
if (settings.showRecentMessages) {
getRecentMessage().then((_) => connectToChat());
} else {
connectToChat();
}
// Refresh which channels the user moderates on entry so mod actions reflect
// status granted/revoked since login. Fire-and-forget, like blocked users.
if (auth.isLoggedIn) auth.user.refreshModeratedChannels();
// Tell the scrollController to determine when auto-scroll should be enabled or disabled.
2021-11-14 04:25:33 -05:00
scrollController.addListener(() {
// If the scroll position is at the latest message (maximum possible), enable autoscroll.
// Else if the position is before the latest message (not at the edge), disable autoscroll.
if (scrollController.position.pixels <= 0) {
_autoScroll = true;
} else if (scrollController.position.pixels > 0) {
_autoScroll = false;
2021-09-06 19:03:39 -04:00
}
});
textFieldFocusNode.addListener(() {
if (textFieldFocusNode.hasFocus) {
// Hide the emote menu if it is currently shown.
if (assetsStore.showEmoteMenu) assetsStore.showEmoteMenu = false;
}
// Un-expand the chat when unfocusing.
if (!textFieldFocusNode.hasFocus) expandChat = false;
});
// Add a listener to the textfield that will show/hide the autocomplete bar if focused.
// Will also rebuild the autocomplete bar when typing, refreshing the results as the user types.
textController.addListener(() {
_inputText = textController.text;
v5 (#463) * migrate to dio * ignore folders * simplify twitch api headers handling * clean up main * simplify logs * optimize profile picture fetching fixes refetches on tab switch * update claude md * refactor irc.dart * update copilot instructions with essential commands and project structure details * implement message sending state management and UI updates * refactor notification handling and add copy-paste functionality in chat * refactor AlertMessage to support vertical layout and optional padding * refactor error messages for consistency and clarity across various components * refactor chat layout to use draggable divider and improve chat width settings * refactor Uptime widget to use SharedTimerService for synchronized updates * refactor search results components to handle null future states gracefully * refactor loading indicators to use skeleton loaders for improved user experience * refactor UI components for improved layout and responsiveness, enhance skeleton loaders, and streamline padding adjustments * refactor: replace manual blur effects with BlurredContainer for consistency and reusability * refactor: enhance JavaScript execution and error handling in WebView components * refactor: replace app bar with blurred container for improved UI consistency across screens * refactor: streamline video chat layout and enhance PiP drag gesture functionality * revert some app bar changes * refactor: implement Picture-in-Picture drag functionality in VideoChat * refactor: pass currentChannelId to IRCMessage and ChatMessage for improved context * fix large thubmnail width * chore: update Gradle and Kotlin plugin versions for improved compatibility * changes from v4.10.0 branch * feat: integrate AnimatedScrollBorder for improved UI responsiveness across various screens * refactor: update SectionHeader styling and improve theme management * feat: add pinned section to StreamsList and enhance skeleton loader padding * feat: add repository guidelines for project structure, coding style, testing, and security * feat: enhance StreamCard UI with BlurredContainer and adjust border width in theme * feat: implement unfocusInput and safeRequestFocus methods to manage text field focus behavior * feat: enhance Picture-in-Picture drag interactions with haptic feedback and smooth animations * refactor: improve code formatting and readability across multiple files * feat: implement picture-in-picture mode toggle and state management for video playback * feat: reset PiP mode state when pausing video playback * feat: add custom app bar with profile picture and stream info for video chat * feat: convert multiple settings screens to use StatefulWidget and add animated scroll borders * feat: update blur configuration for adaptive alpha based on theme * fix: adjust default font size in SectionHeader widget * feat: enhance PiP mode with drag overlay instruction and UI improvements * fix: improve badge rendering with consistent margin and border for current channel * refactor: replace BackdropFilter with BlurredContainer for improved clarity and maintainability * fix: reduce background transparency in Uptime widget for better visibility * feat: enhance photo view dialog with full resolution toggle and blurred background * fix: reset chat delay to 0 when auto sync is enabled and update settings title for clarity * fix: adjust border width in theme to improve consistency * feat: add forceDarkMode option to BlurredContainer for improved theme adaptability * feat: implement offline followed channels feature with UI integration and settings option * fix: increase font size and weight for offline status text for better readability * feat: remove offline pinned channels feature and update related UI components * feat: optimize offline channels loading behavior based on expansion state * fix: improve clarity and consistency in repository guidelines formatting * feat: update full resolution URL handling and button visibility logic * feat: replace app bar with blurred version in chat-only mode and add animated scroll border * feat: refactor video chat layout for improved chat and video display in landscape mode * feat: remove bottom bar visibility setting and adjust chat layout accordingly * fix: simplify condition for displaying offline channels section in following tab * feat: enhance reply thread display with indentation and reply icon * feat: implement showModalBottomSheetWithProperFocus for improved focus handling * feat: add gradient direction support to BlurredContainer for enhanced visual effects * feat: enhance NavigationBar and Theme settings for improved visual consistency * feat: add gradient direction support to BlurredContainer in VideoChat for enhanced visual effects * chore: update .gitignore to include .cursor file for better environment management * fix: update PiP drag gesture conditions to include video paused state for better user experience * refactor: replace ScrollController with SettingsPageLayout in settings screens for improved layout management * refactor: centralize orientation handling by introducing OrientationUtils for improved readability and maintainability * refactor: replace OrientationUtils with ContextExtensions for streamlined context-based access to theme, layout, and API dependencies * refactor: improve video chat UI by adjusting title layout and adding stream info tooltips for better user experience * refactor: adjust titleSpacing in theme and navigation components for improved layout consistency * refactor: update stream info timer handling and overlay management for improved UI responsiveness * refactor: enhance stream info timer logic and overlay visibility management for chat-only mode * refactor: enhance input decoration theme in FrostyThemes for improved visual consistency and responsiveness * refactor: adjust inputDecorationTheme padding in FrostyThemes for improved visual consistency * refactor: enhance video overlay management by including video preview overlay in hideElements for improved UI consistency * refactor: improve chat bottom bar padding and video chat layout for enhanced UI consistency * refactor: adjust chat padding to account for device bottom insets for improved layout consistency * refactor: update text styles in FrostyThemes for improved visual consistency across UI components * refactor: update iOS minimum deployment target to 13.0 for improved compatibility * refactor: adjust chat bottom padding based on emote menu visibility for improved layout consistency * refactor: adjust padding values in StreamsList for improved layout consistency * refactor: replace Padding with AnimatedPadding in Chat for smoother layout transitions refactor: replace Container with AnimatedContainer in BlurredContainer for smoother animations * refactor: remove unnecessary radius property from ProfilePicture in OfflineChannelCard for cleaner code * refactor: enhance chat bottom bar suffix icon to display message delay with tooltip for improved user experience * refactor: update hint text and tooltips in chat bottom bar and search for improved clarity * refactor: simplify notification display logic and enhance chat input behavior for improved user experience * refactor: enhance layout consistency by adjusting spacing in various components across the channel and home screens * refactor: introduce LiveIndicator widget and adjust spacing in channel and video components for improved layout consistency * refactor: remove monospace font family from chat bottom bar for improved text rendering * refactor: reduce notification animation duration and change dismiss direction for improved user experience * refactor: replace VideoBar with StreamInfoBar in video components for improved layout and consistency * refactor: adjust font sizes and spacing in StreamInfoBar for improved layout consistency * refactor: standardize font sizes and update gradient stops in video components for improved visual consistency * refactor: update tooltip padding and background color in theme for improved visual consistency * refactor: enhance tooltip behavior and standardize font sizes in StreamInfoBar and related components for improved visual consistency * refactor: add showThumbnail option to LargeStreamCardSkeletonLoader for improved layout flexibility * refactor: add StreamInfoBarSkeletonLoader for improved layout consistency in stream components * refactor: add shadow effects to icons and text in StreamInfoBar and VideoOverlay for improved visual depth * refactor: update defaultOverlayOpacity to 0.0 for improved overlay behavior * fix: correct stream info text color on overlay * refactor: implement a new color picker dialog with random color generation for enhanced user experience * refactor: adjust gradient colors and stops in VideoOverlay for improved visual consistency * refactor: refine gradient colors and stops in VideoOverlay for enhanced visual clarity * refactor: add isCompact parameter to StreamInfoBar for responsive text sizing * fix: update tooltip background color to use surface color for better contrast * feat: add shared chat mode support in chat store and update StreamInfoBar for visual indication * refactor: disable debug print for IRC messages to reduce log clutter * feat: implement chat color selection feature with user color management in chat settings * refactor: replace color adjustment logic with new contrast-aware utility for chat names * refactor: simplify chat details UI by replacing list tiles with action cards and removing unused clear dialog * refactor: enhance chat details UI by improving time formatting and adding label styling to action cards * refactor: update chat color terminology to 'Username color' for clarity in UI * refactor: enhance chat details UI by introducing active chat modes display and improving layout structure * refactor: improve chat details layout by replacing ListTile with Padding and adding a Divider for better visual separation * refactor: remove chat notifications positioning setting and adjust notification alignment in video chat * refactor: streamline StreamInfoBar component by consolidating offline handling and improving layout for better readability * refactor: enhance StreamInfoBar by adding tooltip for streamer name and improving text overflow handling * refactor: adjust tooltip display duration in StreamInfoBar and update theme configuration * refactor: adjust margin and padding in StreamCard for improved layout consistency * chore: update dependencies in pubspec.yaml and pubspec.lock for Firebase and other packages * template * chore: update iOS platform version to 15.0 and Firebase dependencies to 12.2.0 * refactor: simplify StreamInfoBar layout by reducing nested widgets and improving text color handling * format * feat: enhance Channel model and StreamInfoBar to support offline channel details * feat: add offline indicator and improve StreamInfoBar layout for better offline channel display * fix: adjust icon color opacity in StreamInfoBar for improved visibility * feat: enhance dismissal animation in FrostyPhotoViewDialog to track swipe direction * docs: update copilot instructions for clarity and additional error handling details * refactor: optimize latency tooltip layout and improve offline indicator styling in VideoOverlay * feat: implement shared chat asset fetching and participant management in ChatAssetsStore * refactor: replace Observer with Builder for improved widget rebuilding in VideoOverlay * refactor: update StreamInfoBar border styling and adjust layout in VideoOverlay for improved visual consistency * feat: add showTextShadows property to StreamInfoBar for customizable text shadow display * refactor: adjust layout in VideoOverlay by adding padding to improve spacing and visual consistency * refactor: enhance VideoOverlay gradients and layout for improved visual hierarchy and user experience * refactor: reduce vertical padding in VideoOverlay for improved layout consistency * refactor: remove overlay opacity settings from VideoSettings and SettingsStore for simplification * refactor: improve text overlay transition in VideoChat for better user experience * Revert "refactor: improve text overlay transition in VideoChat for better user experience" This reverts commit fd16ff5ec30ec266157e5c8a9d4a6090c91717f6. * refactor: wrap videoOverlay in ColoredBox for improved layout handling * refactor: optimize animation duration and transition curves in VideoChat for smoother interactions * refactor: dispose searchScrollController in HomeStoreBase to prevent memory leaks * refactor: simplify gradient definitions in VideoOverlay for improved readability and maintainability * refactor: remove 'Offline' text overlay from VideoOverlay for cleaner UI * refactor: add refresh functionality for assets in ChatDetails with loading indicators * refactor: update visibility conditions for uptime, viewer count, and category display in StreamInfoBar * refactor: replace AlertDialog with FrostyDialog for consistent dialog styling across the application * refactor: enhance layout handling in FrostyPageView to prevent overflow during height transitions * refactor: replace ColorPickerDialog with AccentColorPickerDialog for improved color selection experience * refactor: replace theme and accent color settings with dedicated components for improved modularity and readability * refactor: replace ElevatedButton with TextButton for consistent button styling across dialogs * refactor: integrate MobX Observer for reactive state management in settings widgets * refactor: update theme and dialog components for improved styling and consistency * refactor: enhance dialog styling with rounded corners and border in theme configuration * refactor: improve dialog messages for unauthorized access handling * refactor: update bodyLarge text style in theme configuration to include font weight * refactor: standardize Divider usage and adjust theme styles for improved consistency * refactor: adjust Divider properties and theme styles for enhanced visual consistency * chore: remove GEMINI.md file as it is no longer needed for project documentation * refactor: enhance token validation and reconnect logic in AuthBase for improved error handling * format * refactor: integrate landscape cutout settings into VideoChat layout for improved responsiveness * refactor: implement app lifecycle handling in VideoChat and enhance stream info update logic in VideoStore * refactor: update landscape cutout conditionals in VideoChat layout for improved responsiveness * update AGENTS.md * add scrollbar to search * fix scrolling exception * update CLAUDE.md * 5 auth reconnect attemps then log out * increase reply max lines to 2 * simplify and improve reply formatting * add prime icon * better draggable divider * support draggable divider in fullscreen overlay chat * add text shadow in fullscreen chat overlay mode * format * add landscape checks * video store optimization attempts * Dispose WebViewController and remove JavaScript channels properly * Track and cleanup all MutationObservers to prevent accumulation * Throttle latency updates to once per 5 seconds (reduces CPU load) * Add timeout protection and null checks for robustness * Prevent duplicate event listeners on page reloads * double tap divider to reset * Revert "video store optimization attempts" This reverts commit b1df7b0de473543283211a489dca698d9d241857. * optimize video store attempt 2 * Revert "double tap divider to reset" This reverts commit aeb26a433500ec71f822794835e927018ee59e1e. * optimize latency listener to open the menu and check every 20 secconds * more optimizations * hard refresh * abbreviate latency * fix lint * improve hide default overlay * fix chat no longer reconnecting with chat delay * refine chat alerts * fix historical message missing badges and emotes on initial connection * parallelize * revert * add reconnect button inline action * refactor: replace Scrollbar with FrostyScrollbar across chat and settings screens for consistent styling * tweak chat details menu * add scrollbar to release notes, renames for consistency * fix duplicate message case * fix chat delay alerts in auto sync mode * add regex for numeric strings and enhance display name formatting logic * exterminate borders * refactor: simplify active chat modes display in chat details screen * feat: enhance chat input button with delay notification and disable state * fix: wrap chat in SafeArea to prevent UI overflow issues * refactor: remove divider line from video chat and update draggable divider visibility logic * persist overlay in pip mode * fix: update chat delay handling and notifications in chat bottom bar * fix: update chat overlay visibility logic to respect fullscreen settings * tap to show deleted message * fix: prevent accidental chat scrolling when accessing system UI in landscape mode * show latency in portrait * fix: enhance chat delay notifications with dynamic delay time * docs: update CLAUDE.md for improved environment variable instructions and architecture overview * fix: improve chat delay countdown management and message handling * add preliminary release notes * remove agents.md * update lockfile * add initial multi chat feature * add option to persist multi chat tabs * add remove confirmation dialog * improve add chat design * lazy-load tabs * create global assets store to dedupe global asset fetching * improve tab design/styles * update notes * use frosty dialog * update claude md * tweak * add ability to reorder tabs * resolve conflict * merge cleanup * format * update release notes * add chat delay sync completion tracking to prevent countdown re-appearance * add tests * fix * update release notes * bump
2026-01-01 22:28:17 -05:00
_showEmoteAutocomplete =
!_showMentionAutocomplete &&
textFieldFocusNode.hasFocus &&
textController.text.split(' ').last.isNotEmpty;
_showSendButton = textController.text.isNotEmpty;
v5 (#463) * migrate to dio * ignore folders * simplify twitch api headers handling * clean up main * simplify logs * optimize profile picture fetching fixes refetches on tab switch * update claude md * refactor irc.dart * update copilot instructions with essential commands and project structure details * implement message sending state management and UI updates * refactor notification handling and add copy-paste functionality in chat * refactor AlertMessage to support vertical layout and optional padding * refactor error messages for consistency and clarity across various components * refactor chat layout to use draggable divider and improve chat width settings * refactor Uptime widget to use SharedTimerService for synchronized updates * refactor search results components to handle null future states gracefully * refactor loading indicators to use skeleton loaders for improved user experience * refactor UI components for improved layout and responsiveness, enhance skeleton loaders, and streamline padding adjustments * refactor: replace manual blur effects with BlurredContainer for consistency and reusability * refactor: enhance JavaScript execution and error handling in WebView components * refactor: replace app bar with blurred container for improved UI consistency across screens * refactor: streamline video chat layout and enhance PiP drag gesture functionality * revert some app bar changes * refactor: implement Picture-in-Picture drag functionality in VideoChat * refactor: pass currentChannelId to IRCMessage and ChatMessage for improved context * fix large thubmnail width * chore: update Gradle and Kotlin plugin versions for improved compatibility * changes from v4.10.0 branch * feat: integrate AnimatedScrollBorder for improved UI responsiveness across various screens * refactor: update SectionHeader styling and improve theme management * feat: add pinned section to StreamsList and enhance skeleton loader padding * feat: add repository guidelines for project structure, coding style, testing, and security * feat: enhance StreamCard UI with BlurredContainer and adjust border width in theme * feat: implement unfocusInput and safeRequestFocus methods to manage text field focus behavior * feat: enhance Picture-in-Picture drag interactions with haptic feedback and smooth animations * refactor: improve code formatting and readability across multiple files * feat: implement picture-in-picture mode toggle and state management for video playback * feat: reset PiP mode state when pausing video playback * feat: add custom app bar with profile picture and stream info for video chat * feat: convert multiple settings screens to use StatefulWidget and add animated scroll borders * feat: update blur configuration for adaptive alpha based on theme * fix: adjust default font size in SectionHeader widget * feat: enhance PiP mode with drag overlay instruction and UI improvements * fix: improve badge rendering with consistent margin and border for current channel * refactor: replace BackdropFilter with BlurredContainer for improved clarity and maintainability * fix: reduce background transparency in Uptime widget for better visibility * feat: enhance photo view dialog with full resolution toggle and blurred background * fix: reset chat delay to 0 when auto sync is enabled and update settings title for clarity * fix: adjust border width in theme to improve consistency * feat: add forceDarkMode option to BlurredContainer for improved theme adaptability * feat: implement offline followed channels feature with UI integration and settings option * fix: increase font size and weight for offline status text for better readability * feat: remove offline pinned channels feature and update related UI components * feat: optimize offline channels loading behavior based on expansion state * fix: improve clarity and consistency in repository guidelines formatting * feat: update full resolution URL handling and button visibility logic * feat: replace app bar with blurred version in chat-only mode and add animated scroll border * feat: refactor video chat layout for improved chat and video display in landscape mode * feat: remove bottom bar visibility setting and adjust chat layout accordingly * fix: simplify condition for displaying offline channels section in following tab * feat: enhance reply thread display with indentation and reply icon * feat: implement showModalBottomSheetWithProperFocus for improved focus handling * feat: add gradient direction support to BlurredContainer for enhanced visual effects * feat: enhance NavigationBar and Theme settings for improved visual consistency * feat: add gradient direction support to BlurredContainer in VideoChat for enhanced visual effects * chore: update .gitignore to include .cursor file for better environment management * fix: update PiP drag gesture conditions to include video paused state for better user experience * refactor: replace ScrollController with SettingsPageLayout in settings screens for improved layout management * refactor: centralize orientation handling by introducing OrientationUtils for improved readability and maintainability * refactor: replace OrientationUtils with ContextExtensions for streamlined context-based access to theme, layout, and API dependencies * refactor: improve video chat UI by adjusting title layout and adding stream info tooltips for better user experience * refactor: adjust titleSpacing in theme and navigation components for improved layout consistency * refactor: update stream info timer handling and overlay management for improved UI responsiveness * refactor: enhance stream info timer logic and overlay visibility management for chat-only mode * refactor: enhance input decoration theme in FrostyThemes for improved visual consistency and responsiveness * refactor: adjust inputDecorationTheme padding in FrostyThemes for improved visual consistency * refactor: enhance video overlay management by including video preview overlay in hideElements for improved UI consistency * refactor: improve chat bottom bar padding and video chat layout for enhanced UI consistency * refactor: adjust chat padding to account for device bottom insets for improved layout consistency * refactor: update text styles in FrostyThemes for improved visual consistency across UI components * refactor: update iOS minimum deployment target to 13.0 for improved compatibility * refactor: adjust chat bottom padding based on emote menu visibility for improved layout consistency * refactor: adjust padding values in StreamsList for improved layout consistency * refactor: replace Padding with AnimatedPadding in Chat for smoother layout transitions refactor: replace Container with AnimatedContainer in BlurredContainer for smoother animations * refactor: remove unnecessary radius property from ProfilePicture in OfflineChannelCard for cleaner code * refactor: enhance chat bottom bar suffix icon to display message delay with tooltip for improved user experience * refactor: update hint text and tooltips in chat bottom bar and search for improved clarity * refactor: simplify notification display logic and enhance chat input behavior for improved user experience * refactor: enhance layout consistency by adjusting spacing in various components across the channel and home screens * refactor: introduce LiveIndicator widget and adjust spacing in channel and video components for improved layout consistency * refactor: remove monospace font family from chat bottom bar for improved text rendering * refactor: reduce notification animation duration and change dismiss direction for improved user experience * refactor: replace VideoBar with StreamInfoBar in video components for improved layout and consistency * refactor: adjust font sizes and spacing in StreamInfoBar for improved layout consistency * refactor: standardize font sizes and update gradient stops in video components for improved visual consistency * refactor: update tooltip padding and background color in theme for improved visual consistency * refactor: enhance tooltip behavior and standardize font sizes in StreamInfoBar and related components for improved visual consistency * refactor: add showThumbnail option to LargeStreamCardSkeletonLoader for improved layout flexibility * refactor: add StreamInfoBarSkeletonLoader for improved layout consistency in stream components * refactor: add shadow effects to icons and text in StreamInfoBar and VideoOverlay for improved visual depth * refactor: update defaultOverlayOpacity to 0.0 for improved overlay behavior * fix: correct stream info text color on overlay * refactor: implement a new color picker dialog with random color generation for enhanced user experience * refactor: adjust gradient colors and stops in VideoOverlay for improved visual consistency * refactor: refine gradient colors and stops in VideoOverlay for enhanced visual clarity * refactor: add isCompact parameter to StreamInfoBar for responsive text sizing * fix: update tooltip background color to use surface color for better contrast * feat: add shared chat mode support in chat store and update StreamInfoBar for visual indication * refactor: disable debug print for IRC messages to reduce log clutter * feat: implement chat color selection feature with user color management in chat settings * refactor: replace color adjustment logic with new contrast-aware utility for chat names * refactor: simplify chat details UI by replacing list tiles with action cards and removing unused clear dialog * refactor: enhance chat details UI by improving time formatting and adding label styling to action cards * refactor: update chat color terminology to 'Username color' for clarity in UI * refactor: enhance chat details UI by introducing active chat modes display and improving layout structure * refactor: improve chat details layout by replacing ListTile with Padding and adding a Divider for better visual separation * refactor: remove chat notifications positioning setting and adjust notification alignment in video chat * refactor: streamline StreamInfoBar component by consolidating offline handling and improving layout for better readability * refactor: enhance StreamInfoBar by adding tooltip for streamer name and improving text overflow handling * refactor: adjust tooltip display duration in StreamInfoBar and update theme configuration * refactor: adjust margin and padding in StreamCard for improved layout consistency * chore: update dependencies in pubspec.yaml and pubspec.lock for Firebase and other packages * template * chore: update iOS platform version to 15.0 and Firebase dependencies to 12.2.0 * refactor: simplify StreamInfoBar layout by reducing nested widgets and improving text color handling * format * feat: enhance Channel model and StreamInfoBar to support offline channel details * feat: add offline indicator and improve StreamInfoBar layout for better offline channel display * fix: adjust icon color opacity in StreamInfoBar for improved visibility * feat: enhance dismissal animation in FrostyPhotoViewDialog to track swipe direction * docs: update copilot instructions for clarity and additional error handling details * refactor: optimize latency tooltip layout and improve offline indicator styling in VideoOverlay * feat: implement shared chat asset fetching and participant management in ChatAssetsStore * refactor: replace Observer with Builder for improved widget rebuilding in VideoOverlay * refactor: update StreamInfoBar border styling and adjust layout in VideoOverlay for improved visual consistency * feat: add showTextShadows property to StreamInfoBar for customizable text shadow display * refactor: adjust layout in VideoOverlay by adding padding to improve spacing and visual consistency * refactor: enhance VideoOverlay gradients and layout for improved visual hierarchy and user experience * refactor: reduce vertical padding in VideoOverlay for improved layout consistency * refactor: remove overlay opacity settings from VideoSettings and SettingsStore for simplification * refactor: improve text overlay transition in VideoChat for better user experience * Revert "refactor: improve text overlay transition in VideoChat for better user experience" This reverts commit fd16ff5ec30ec266157e5c8a9d4a6090c91717f6. * refactor: wrap videoOverlay in ColoredBox for improved layout handling * refactor: optimize animation duration and transition curves in VideoChat for smoother interactions * refactor: dispose searchScrollController in HomeStoreBase to prevent memory leaks * refactor: simplify gradient definitions in VideoOverlay for improved readability and maintainability * refactor: remove 'Offline' text overlay from VideoOverlay for cleaner UI * refactor: add refresh functionality for assets in ChatDetails with loading indicators * refactor: update visibility conditions for uptime, viewer count, and category display in StreamInfoBar * refactor: replace AlertDialog with FrostyDialog for consistent dialog styling across the application * refactor: enhance layout handling in FrostyPageView to prevent overflow during height transitions * refactor: replace ColorPickerDialog with AccentColorPickerDialog for improved color selection experience * refactor: replace theme and accent color settings with dedicated components for improved modularity and readability * refactor: replace ElevatedButton with TextButton for consistent button styling across dialogs * refactor: integrate MobX Observer for reactive state management in settings widgets * refactor: update theme and dialog components for improved styling and consistency * refactor: enhance dialog styling with rounded corners and border in theme configuration * refactor: improve dialog messages for unauthorized access handling * refactor: update bodyLarge text style in theme configuration to include font weight * refactor: standardize Divider usage and adjust theme styles for improved consistency * refactor: adjust Divider properties and theme styles for enhanced visual consistency * chore: remove GEMINI.md file as it is no longer needed for project documentation * refactor: enhance token validation and reconnect logic in AuthBase for improved error handling * format * refactor: integrate landscape cutout settings into VideoChat layout for improved responsiveness * refactor: implement app lifecycle handling in VideoChat and enhance stream info update logic in VideoStore * refactor: update landscape cutout conditionals in VideoChat layout for improved responsiveness * update AGENTS.md * add scrollbar to search * fix scrolling exception * update CLAUDE.md * 5 auth reconnect attemps then log out * increase reply max lines to 2 * simplify and improve reply formatting * add prime icon * better draggable divider * support draggable divider in fullscreen overlay chat * add text shadow in fullscreen chat overlay mode * format * add landscape checks * video store optimization attempts * Dispose WebViewController and remove JavaScript channels properly * Track and cleanup all MutationObservers to prevent accumulation * Throttle latency updates to once per 5 seconds (reduces CPU load) * Add timeout protection and null checks for robustness * Prevent duplicate event listeners on page reloads * double tap divider to reset * Revert "video store optimization attempts" This reverts commit b1df7b0de473543283211a489dca698d9d241857. * optimize video store attempt 2 * Revert "double tap divider to reset" This reverts commit aeb26a433500ec71f822794835e927018ee59e1e. * optimize latency listener to open the menu and check every 20 secconds * more optimizations * hard refresh * abbreviate latency * fix lint * improve hide default overlay * fix chat no longer reconnecting with chat delay * refine chat alerts * fix historical message missing badges and emotes on initial connection * parallelize * revert * add reconnect button inline action * refactor: replace Scrollbar with FrostyScrollbar across chat and settings screens for consistent styling * tweak chat details menu * add scrollbar to release notes, renames for consistency * fix duplicate message case * fix chat delay alerts in auto sync mode * add regex for numeric strings and enhance display name formatting logic * exterminate borders * refactor: simplify active chat modes display in chat details screen * feat: enhance chat input button with delay notification and disable state * fix: wrap chat in SafeArea to prevent UI overflow issues * refactor: remove divider line from video chat and update draggable divider visibility logic * persist overlay in pip mode * fix: update chat delay handling and notifications in chat bottom bar * fix: update chat overlay visibility logic to respect fullscreen settings * tap to show deleted message * fix: prevent accidental chat scrolling when accessing system UI in landscape mode * show latency in portrait * fix: enhance chat delay notifications with dynamic delay time * docs: update CLAUDE.md for improved environment variable instructions and architecture overview * fix: improve chat delay countdown management and message handling * add preliminary release notes * remove agents.md * update lockfile * add initial multi chat feature * add option to persist multi chat tabs * add remove confirmation dialog * improve add chat design * lazy-load tabs * create global assets store to dedupe global asset fetching * improve tab design/styles * update notes * use frosty dialog * update claude md * tweak * add ability to reorder tabs * resolve conflict * merge cleanup * format * update release notes * add chat delay sync completion tracking to prevent countdown re-appearance * add tests * fix * update release notes * bump
2026-01-01 22:28:17 -05:00
_showMentionAutocomplete =
textFieldFocusNode.hasFocus &&
textController.text.split(' ').last.startsWith('@');
});
}
void _enqueueDelayedCallback(
List<_DelayedCallback> queue,
void Function() callback,
) {
queue.add(
_DelayedCallback(
feat(video,chat): native player, ad-break awareness, chat send/delay reliability, and tab redesign (#567) Squash-merge commit. Covers four areas: native video player, chat reliability, multi-tab, and hardening. ## Native video player - Direct HLS playback via `better_native_video_player` (forked from `plug-and-pay/flutter-native-video-player`, patched on `frosty-patches` branch) - Twitch GQL playback token fetching with platform cookie extraction (iOS Swift + Android Kotlin plugins) for authenticated streams - Quality selection (source, 720p, 480p, 360p, 160p, audio-only) persisted per channel - Picture-in-picture: iOS automatic inline PiP, Android auto-PiP on API 31+ guarded against older devices - Latency polling, chat latency sync, stall detection/recovery, startup auto-pause recovery, watchdog timers - **Twitch stitched-ad break detection** (HLS `EXT-X-DATERANGE`) on both platforms, emitting `adBreakChanged` so the host suspends latency/stall recovery and chat sync during ads (program-date-time is unreliable then). Matches `CLASS="twitch-stitched-ad"` / `ID="stitched-ad-"` **and** the `X-TV-TWITCH-AD-*` attribute prefix (the durable signal streamlink/yt-dlp use) - Shared `VideoPlayerInterface` so WebView and native paths are interchangeable via settings toggle - `PlaybackAccessToken` model, `TwitchGqlApi` client ## Chat delay & send reliability - **Optimistic send-finalize**: Twitch acks a sent message with a per-PRIVMSG USERSTATE (not an echo), which it can intermittently drop — more so under a long chat delay. A missing ack no longer shows a false "message may not have been sent" error; the send is finalized optimistically (local echo rendered), and only genuine rejection NOTICEs surface an error. Ack timeout scaled by the chat delay. - **Per-line chat-delay bypass**: control/state lines (USERSTATE/ROOMSTATE/GLOBALUSERSTATE), rejection NOTICEs, the reconnect notice, and untagged server lines bypass the delay so send-acks and PONGs aren't stalled; only displayable chat content is delayed, staying in sync with delayed video. - **Measured chat bottom-bar height**: the message list reflows to the composer's real measured height, fixing the input overlapping messages when a long message expands it (replaces a fixed-constant estimate). - IRC tag parsing handles valueless and escaped tags per the IRCv3 message-tags spec (fixes a recent-messages RangeError on certain tags). ## Chat / multi-tab - Redesigned tab chips: unread dot indicator, chips dim until WebSocket connects - Animated tab options popover replacing `MenuAnchor` (no animation hook in Flutter 3.44) - Simplified `ChatTabs` from `StatefulWidget` to `StatelessWidget` - Focus-current-channel fade bump to 0.55; section-header alpha lifted to match the muted-label tier - `addTab` now calls `setActiveTab` to snapshot outgoing tab's `lastSeenMessageId` — fixes spurious unread dots after adding a tab - `onActivateSourceTab` threaded into `ChatUserModal` so Reply in merged mode switches to the correct source tab's composer ## Bug fixes and hardening - **Reverted the experimental iOS low-latency mode** (5s live-edge join + 1.05x catch-up): AVPlayer can't sustain <~18s on Twitch (declared `TARGETDURATION:6` paces playlist refreshes), and the offset starved the buffer into pause-on-launch. Default join distance restored. - Fork (Android): **cap `BEHIND_LIVE_WINDOW` recovery** so a stream repeatedly falling off the live window can't silently re-prepare forever; emits `error` on exhaustion so the host recovery ladder takes over - Guard all Android `setAutoPipMode` calls with `_autoPipAvailable` — prevents `PlatformException` on Android 8–11; check `_disposed` after `isAutoPipAvailable` await to prevent post-dispose auto-PiP re-enable - Remove `_isInPipMode` guard from `_onPaused` so `_paused` tracks actual state, fixing PiP play/pause toggle getting stuck - Tighten iOS cookie domain check to exact `twitch.tv` / `.twitch.tv` suffix - Invalidate the stored web session token when Twitch rejects it with a 401 (profile card flips back to unlinked; future loads skip the doomed authenticated request), and re-extract the cookie on launch when logged in without a linked session - Send `play_session_id` and `player_backend=mediaplayer` to Usher, matching the web client / streamlink - Fork (iOS): restore program-date-time latency measurement (a prior rev measured distance to the manifest edge, reading ~0s and silently disabling high-latency recovery / chat-delay auto-sync); release platform views on dispose (per-stream view + AVPlayerViewController leak), track the observed AVPlayerItem for KVO removal (sibling-view crash), main-thread seek results, resolve superseded load futures - Fork (Android): clean up method handlers orphaned by PiP-time view disposal (leaked audio-focus listeners), drop the live-offset re-anchoring seekTo on metadata updates (latency creep), restore pre-duck volume, respect user pause in the stall watchdog, resolve superseded load futures - Deep review pass: expire the quality-switch flag so stall recovery isn't disabled for the session, cap latency-driven recovery (clock-skew loop), generation-guard the error overlay, two-strike offline confirmation, controller null-safety on quality switch - Tighten `/me` local-echo match (no longer renders `/meow ...` as an action); clear pending send text on disconnect ## Web / docs - Remove stale Cloudflare Images binding from `wrangler.jsonc` (covered by `images.unoptimized: true`) - Correct `web/AGENTS.md` Cache Components claim (feature not enabled) - Repo and agent config cleanup ## Test plan - [x] `flutter analyze` — clean (frosty + plugin lib) - [x] `flutter test` — 319/319 pass (adds `ChatLatencySync`, `StreamInfoPoller`, video timing invariants, `PlaybackAccessToken`, IRC tag parsing) - [x] Android plugin Kotlin compiles against the bumped fork rev - [ ] Native player plays live streams on iOS and Android - [ ] Quality switching works and persists across channel reopens - [ ] PiP enters/exits correctly; pause/resume toggle in PiP window works - [ ] Audio-only mode does not crash on Android < API 31 - [ ] Sending under a long synced chat delay no longer shows a false "may not have been sent" error - [ ] Long composer text reflows the message list (no input/message overlap) - [ ] Multi-tab: adding a tab does not mark previous tab as unread - [ ] Merged chat: Reply from user modal targets the correct tab's composer 🤖 Generated with [Claude Code](https://claude.com/claude-code)
2026-06-13 17:06:24 -04:00
releaseAt: DateTime.now().add(_chatDelay),
callback: callback,
),
);
}
void _flushDueDelayedCallbacks() {
_flushDueDelayedCallbacksForQueue(_pendingChatCallbacks);
_flushDueDelayedCallbacksForQueue(_pendingSevenTVCallbacks);
}
void _flushDueDelayedCallbacksForQueue(List<_DelayedCallback> queue) {
if (queue.isEmpty) return;
final now = DateTime.now();
final readyCallbacks = <_DelayedCallback>[];
queue.removeWhere((delayedCallback) {
final isReady = !delayedCallback.releaseAt.isAfter(now);
if (isReady) {
readyCallbacks.add(delayedCallback);
}
return isReady;
});
for (final delayedCallback in readyCallbacks) {
delayedCallback.callback();
}
}
void _flushPendingDelayedCallbacks() {
_flushPendingDelayedCallbacksForQueue(_pendingChatCallbacks);
_flushPendingDelayedCallbacksForQueue(_pendingSevenTVCallbacks);
}
void _flushPendingDelayedCallbacksForQueue(List<_DelayedCallback> queue) {
if (queue.isEmpty) return;
final pendingCallbacks = List<_DelayedCallback>.from(queue);
queue.clear();
for (final delayedCallback in pendingCallbacks) {
delayedCallback.callback();
}
}
void _clearPendingDelayedCallbacks({
bool clearChat = true,
bool clearSevenTV = true,
}) {
if (clearChat) {
_pendingChatCallbacks.clear();
}
if (clearSevenTV) {
_pendingSevenTVCallbacks.clear();
}
}
/// Handle and process the provided string-representation of the IRC data.
///
/// If a message, parses the IRC data into an [IRCMessage] and handles it based on the [Command].
/// Else if a PING request, sends back the PONG to keep the connection alive.
@action
void _handleIRCData(String data) {
// The IRC data can contain more than one message separated by CRLF.
// To account for this, split by CRLF, then loop and process each message.
for (final message in data.trimRight().split('\r\n')) {
// debugPrint('$message\n');
feat(video,chat): native player, ad-break awareness, chat send/delay reliability, and tab redesign (#567) Squash-merge commit. Covers four areas: native video player, chat reliability, multi-tab, and hardening. ## Native video player - Direct HLS playback via `better_native_video_player` (forked from `plug-and-pay/flutter-native-video-player`, patched on `frosty-patches` branch) - Twitch GQL playback token fetching with platform cookie extraction (iOS Swift + Android Kotlin plugins) for authenticated streams - Quality selection (source, 720p, 480p, 360p, 160p, audio-only) persisted per channel - Picture-in-picture: iOS automatic inline PiP, Android auto-PiP on API 31+ guarded against older devices - Latency polling, chat latency sync, stall detection/recovery, startup auto-pause recovery, watchdog timers - **Twitch stitched-ad break detection** (HLS `EXT-X-DATERANGE`) on both platforms, emitting `adBreakChanged` so the host suspends latency/stall recovery and chat sync during ads (program-date-time is unreliable then). Matches `CLASS="twitch-stitched-ad"` / `ID="stitched-ad-"` **and** the `X-TV-TWITCH-AD-*` attribute prefix (the durable signal streamlink/yt-dlp use) - Shared `VideoPlayerInterface` so WebView and native paths are interchangeable via settings toggle - `PlaybackAccessToken` model, `TwitchGqlApi` client ## Chat delay & send reliability - **Optimistic send-finalize**: Twitch acks a sent message with a per-PRIVMSG USERSTATE (not an echo), which it can intermittently drop — more so under a long chat delay. A missing ack no longer shows a false "message may not have been sent" error; the send is finalized optimistically (local echo rendered), and only genuine rejection NOTICEs surface an error. Ack timeout scaled by the chat delay. - **Per-line chat-delay bypass**: control/state lines (USERSTATE/ROOMSTATE/GLOBALUSERSTATE), rejection NOTICEs, the reconnect notice, and untagged server lines bypass the delay so send-acks and PONGs aren't stalled; only displayable chat content is delayed, staying in sync with delayed video. - **Measured chat bottom-bar height**: the message list reflows to the composer's real measured height, fixing the input overlapping messages when a long message expands it (replaces a fixed-constant estimate). - IRC tag parsing handles valueless and escaped tags per the IRCv3 message-tags spec (fixes a recent-messages RangeError on certain tags). ## Chat / multi-tab - Redesigned tab chips: unread dot indicator, chips dim until WebSocket connects - Animated tab options popover replacing `MenuAnchor` (no animation hook in Flutter 3.44) - Simplified `ChatTabs` from `StatefulWidget` to `StatelessWidget` - Focus-current-channel fade bump to 0.55; section-header alpha lifted to match the muted-label tier - `addTab` now calls `setActiveTab` to snapshot outgoing tab's `lastSeenMessageId` — fixes spurious unread dots after adding a tab - `onActivateSourceTab` threaded into `ChatUserModal` so Reply in merged mode switches to the correct source tab's composer ## Bug fixes and hardening - **Reverted the experimental iOS low-latency mode** (5s live-edge join + 1.05x catch-up): AVPlayer can't sustain <~18s on Twitch (declared `TARGETDURATION:6` paces playlist refreshes), and the offset starved the buffer into pause-on-launch. Default join distance restored. - Fork (Android): **cap `BEHIND_LIVE_WINDOW` recovery** so a stream repeatedly falling off the live window can't silently re-prepare forever; emits `error` on exhaustion so the host recovery ladder takes over - Guard all Android `setAutoPipMode` calls with `_autoPipAvailable` — prevents `PlatformException` on Android 8–11; check `_disposed` after `isAutoPipAvailable` await to prevent post-dispose auto-PiP re-enable - Remove `_isInPipMode` guard from `_onPaused` so `_paused` tracks actual state, fixing PiP play/pause toggle getting stuck - Tighten iOS cookie domain check to exact `twitch.tv` / `.twitch.tv` suffix - Invalidate the stored web session token when Twitch rejects it with a 401 (profile card flips back to unlinked; future loads skip the doomed authenticated request), and re-extract the cookie on launch when logged in without a linked session - Send `play_session_id` and `player_backend=mediaplayer` to Usher, matching the web client / streamlink - Fork (iOS): restore program-date-time latency measurement (a prior rev measured distance to the manifest edge, reading ~0s and silently disabling high-latency recovery / chat-delay auto-sync); release platform views on dispose (per-stream view + AVPlayerViewController leak), track the observed AVPlayerItem for KVO removal (sibling-view crash), main-thread seek results, resolve superseded load futures - Fork (Android): clean up method handlers orphaned by PiP-time view disposal (leaked audio-focus listeners), drop the live-offset re-anchoring seekTo on metadata updates (latency creep), restore pre-duck volume, respect user pause in the stall watchdog, resolve superseded load futures - Deep review pass: expire the quality-switch flag so stall recovery isn't disabled for the session, cap latency-driven recovery (clock-skew loop), generation-guard the error overlay, two-strike offline confirmation, controller null-safety on quality switch - Tighten `/me` local-echo match (no longer renders `/meow ...` as an action); clear pending send text on disconnect ## Web / docs - Remove stale Cloudflare Images binding from `wrangler.jsonc` (covered by `images.unoptimized: true`) - Correct `web/AGENTS.md` Cache Components claim (feature not enabled) - Repo and agent config cleanup ## Test plan - [x] `flutter analyze` — clean (frosty + plugin lib) - [x] `flutter test` — 319/319 pass (adds `ChatLatencySync`, `StreamInfoPoller`, video timing invariants, `PlaybackAccessToken`, IRC tag parsing) - [x] Android plugin Kotlin compiles against the bumped fork rev - [ ] Native player plays live streams on iOS and Android - [ ] Quality switching works and persists across channel reopens - [ ] PiP enters/exits correctly; pause/resume toggle in PiP window works - [ ] Audio-only mode does not crash on Android < API 31 - [ ] Sending under a long synced chat delay no longer shows a false "may not have been sent" error - [ ] Long composer text reflows the message list (no input/message overlap) - [ ] Multi-tab: adding a tab does not mark previous tab as unread - [ ] Merged chat: Reply from user modal targets the correct tab's composer 🤖 Generated with [Claude Code](https://claude.com/claude-code)
2026-06-13 17:06:24 -04:00
if (message == _serverReconnectNotice) {
// Twitch is about to close the socket for maintenance — close it
// ourselves so the existing onDone path reconnects with no backoff
// (first retry is immediate) instead of waiting for the server to
// drop us mid-message.
_channel?.sink.close(1000);
continue;
}
2021-09-11 02:17:09 -04:00
if (message.startsWith('@')) {
// Parse defensively: a single malformed message must never abort the
// loop, or one bad frame would drop every other message batched with
// it (e.g. an entire recent-messages backlog). Skip and keep going.
final IRCMessage parsedIRCMessage;
try {
parsedIRCMessage = IRCMessage.fromString(
message,
userLogin: auth.user.details?.login,
);
} catch (e) {
debugPrint('Failed to parse IRC message: $e');
continue;
}
if (parsedIRCMessage.user != null) {
chatDetailsStore.chatUsers.add(parsedIRCMessage.user!);
}
// Filter messages from any blocked users if not a moderator or not the channel owner.
if (!_userState.mod &&
channelName != auth.user.details?.login &&
auth.user.blockedUsers
Update to Material 3/You and other changes/fixes (#280) * Use adaptive refresh indicators * Add new message count indicator in chat * Sync pubspec.lock * Initial migration to material 3 * Restore default bottom sheet style * Remove FrostyListTile and reset styles * Use "Clear" button for all search history * Add `require_trailing_commas` lint rule * Exclude generated files from linter * Use ListView for safe area support in bottom sheet * Add initial dark theme * Make sizing and units consistent * Update onbaording spacings & copy * Migrate to default material 3 buttons * Add headers to chat details bottom sheet * Simplify token log in method * Use bottom sheet for account options * Remove `AnimateScale` widget * Tweak search paddings * Update message spacing divisions * Upgrade packages * Update message spacing divisions * Regenerate splash screens * Update Inter & add google fonts * Add initial material 3 themes * Use adaptive alert dialogs * Revert to oultined inputs * Fix tooltip message * Revert add google_fonts * Improve themes and various styling * Convert categories grid to list * Tweak stream card thumbnail radii * Tweak settings headers * Left align floating snackbars * Tweak search header padding * Fix profile pics occasionally not rounded * Use profile pic for settings button if logged in * Redesign sleep timer * Use divider theme and reduce thickness * Use 0 letter spacing for tab bar titles * Redesign category streams list * Add border to tooltips * Increase category card font weight * Use outlined icon btton for chat user modal * Reduce profile pic radius in search results * Fix scrolll to top button safe area * Add support for reply threads * Reduce tooltip and snackbar border thickness * Rebuild reply threads on new messages * Upgrade packages (iOS) * Reduce font weight for all chat alerts * Use tabbars for pageview * Add dividers everywhere * Revert "Add dividers everywhere" This reverts commit 5f0d349fdbb0afad313cfb88e8c359714b3ea87a. * Remove fill from inputs * Add dividers to settings * Use segmented button for settings list * Add scrollbar to lists with scrollcontroller * Redesign badge/emote tooltip * Remove outline from chat user modal buttons * Remove divider from reply thread * Use tap for chatters list and increase font weight * Constrain emote tooltip width
2023-10-22 18:38:32 -04:00
.where(
(blockedUser) =>
blockedUser.userLogin == parsedIRCMessage.user,
)
.isNotEmpty) {
continue;
}
feat(video,chat): native player, ad-break awareness, chat send/delay reliability, and tab redesign (#567) Squash-merge commit. Covers four areas: native video player, chat reliability, multi-tab, and hardening. ## Native video player - Direct HLS playback via `better_native_video_player` (forked from `plug-and-pay/flutter-native-video-player`, patched on `frosty-patches` branch) - Twitch GQL playback token fetching with platform cookie extraction (iOS Swift + Android Kotlin plugins) for authenticated streams - Quality selection (source, 720p, 480p, 360p, 160p, audio-only) persisted per channel - Picture-in-picture: iOS automatic inline PiP, Android auto-PiP on API 31+ guarded against older devices - Latency polling, chat latency sync, stall detection/recovery, startup auto-pause recovery, watchdog timers - **Twitch stitched-ad break detection** (HLS `EXT-X-DATERANGE`) on both platforms, emitting `adBreakChanged` so the host suspends latency/stall recovery and chat sync during ads (program-date-time is unreliable then). Matches `CLASS="twitch-stitched-ad"` / `ID="stitched-ad-"` **and** the `X-TV-TWITCH-AD-*` attribute prefix (the durable signal streamlink/yt-dlp use) - Shared `VideoPlayerInterface` so WebView and native paths are interchangeable via settings toggle - `PlaybackAccessToken` model, `TwitchGqlApi` client ## Chat delay & send reliability - **Optimistic send-finalize**: Twitch acks a sent message with a per-PRIVMSG USERSTATE (not an echo), which it can intermittently drop — more so under a long chat delay. A missing ack no longer shows a false "message may not have been sent" error; the send is finalized optimistically (local echo rendered), and only genuine rejection NOTICEs surface an error. Ack timeout scaled by the chat delay. - **Per-line chat-delay bypass**: control/state lines (USERSTATE/ROOMSTATE/GLOBALUSERSTATE), rejection NOTICEs, the reconnect notice, and untagged server lines bypass the delay so send-acks and PONGs aren't stalled; only displayable chat content is delayed, staying in sync with delayed video. - **Measured chat bottom-bar height**: the message list reflows to the composer's real measured height, fixing the input overlapping messages when a long message expands it (replaces a fixed-constant estimate). - IRC tag parsing handles valueless and escaped tags per the IRCv3 message-tags spec (fixes a recent-messages RangeError on certain tags). ## Chat / multi-tab - Redesigned tab chips: unread dot indicator, chips dim until WebSocket connects - Animated tab options popover replacing `MenuAnchor` (no animation hook in Flutter 3.44) - Simplified `ChatTabs` from `StatefulWidget` to `StatelessWidget` - Focus-current-channel fade bump to 0.55; section-header alpha lifted to match the muted-label tier - `addTab` now calls `setActiveTab` to snapshot outgoing tab's `lastSeenMessageId` — fixes spurious unread dots after adding a tab - `onActivateSourceTab` threaded into `ChatUserModal` so Reply in merged mode switches to the correct source tab's composer ## Bug fixes and hardening - **Reverted the experimental iOS low-latency mode** (5s live-edge join + 1.05x catch-up): AVPlayer can't sustain <~18s on Twitch (declared `TARGETDURATION:6` paces playlist refreshes), and the offset starved the buffer into pause-on-launch. Default join distance restored. - Fork (Android): **cap `BEHIND_LIVE_WINDOW` recovery** so a stream repeatedly falling off the live window can't silently re-prepare forever; emits `error` on exhaustion so the host recovery ladder takes over - Guard all Android `setAutoPipMode` calls with `_autoPipAvailable` — prevents `PlatformException` on Android 8–11; check `_disposed` after `isAutoPipAvailable` await to prevent post-dispose auto-PiP re-enable - Remove `_isInPipMode` guard from `_onPaused` so `_paused` tracks actual state, fixing PiP play/pause toggle getting stuck - Tighten iOS cookie domain check to exact `twitch.tv` / `.twitch.tv` suffix - Invalidate the stored web session token when Twitch rejects it with a 401 (profile card flips back to unlinked; future loads skip the doomed authenticated request), and re-extract the cookie on launch when logged in without a linked session - Send `play_session_id` and `player_backend=mediaplayer` to Usher, matching the web client / streamlink - Fork (iOS): restore program-date-time latency measurement (a prior rev measured distance to the manifest edge, reading ~0s and silently disabling high-latency recovery / chat-delay auto-sync); release platform views on dispose (per-stream view + AVPlayerViewController leak), track the observed AVPlayerItem for KVO removal (sibling-view crash), main-thread seek results, resolve superseded load futures - Fork (Android): clean up method handlers orphaned by PiP-time view disposal (leaked audio-focus listeners), drop the live-offset re-anchoring seekTo on metadata updates (latency creep), restore pre-duck volume, respect user pause in the stall watchdog, resolve superseded load futures - Deep review pass: expire the quality-switch flag so stall recovery isn't disabled for the session, cap latency-driven recovery (clock-skew loop), generation-guard the error overlay, two-strike offline confirmation, controller null-safety on quality switch - Tighten `/me` local-echo match (no longer renders `/meow ...` as an action); clear pending send text on disconnect ## Web / docs - Remove stale Cloudflare Images binding from `wrangler.jsonc` (covered by `images.unoptimized: true`) - Correct `web/AGENTS.md` Cache Components claim (feature not enabled) - Repo and agent config cleanup ## Test plan - [x] `flutter analyze` — clean (frosty + plugin lib) - [x] `flutter test` — 319/319 pass (adds `ChatLatencySync`, `StreamInfoPoller`, video timing invariants, `PlaybackAccessToken`, IRC tag parsing) - [x] Android plugin Kotlin compiles against the bumped fork rev - [ ] Native player plays live streams on iOS and Android - [ ] Quality switching works and persists across channel reopens - [ ] PiP enters/exits correctly; pause/resume toggle in PiP window works - [ ] Audio-only mode does not crash on Android < API 31 - [ ] Sending under a long synced chat delay no longer shows a false "may not have been sent" error - [ ] Long composer text reflows the message list (no input/message overlap) - [ ] Multi-tab: adding a tab does not mark previous tab as unread - [ ] Merged chat: Reply from user modal targets the correct tab's composer 🤖 Generated with [Claude Code](https://claude.com/claude-code)
2026-06-13 17:06:24 -04:00
// Filter messages containing any muted words. Must use `continue`
// (not `return`) — a single IRC frame can batch many messages, and
// returning would drop the rest of the frame with the matched one.
if (parsedIRCMessage.message != null &&
_normalizedMutedWords.isNotEmpty) {
final msg = parsedIRCMessage.message!.toLowerCase();
final words = settings.matchWholeWord ? msg.split(' ') : null;
final muted = _normalizedMutedWords.any(
(word) => words != null ? words.contains(word) : msg.contains(word),
feat(video,chat): native player, ad-break awareness, chat send/delay reliability, and tab redesign (#567) Squash-merge commit. Covers four areas: native video player, chat reliability, multi-tab, and hardening. ## Native video player - Direct HLS playback via `better_native_video_player` (forked from `plug-and-pay/flutter-native-video-player`, patched on `frosty-patches` branch) - Twitch GQL playback token fetching with platform cookie extraction (iOS Swift + Android Kotlin plugins) for authenticated streams - Quality selection (source, 720p, 480p, 360p, 160p, audio-only) persisted per channel - Picture-in-picture: iOS automatic inline PiP, Android auto-PiP on API 31+ guarded against older devices - Latency polling, chat latency sync, stall detection/recovery, startup auto-pause recovery, watchdog timers - **Twitch stitched-ad break detection** (HLS `EXT-X-DATERANGE`) on both platforms, emitting `adBreakChanged` so the host suspends latency/stall recovery and chat sync during ads (program-date-time is unreliable then). Matches `CLASS="twitch-stitched-ad"` / `ID="stitched-ad-"` **and** the `X-TV-TWITCH-AD-*` attribute prefix (the durable signal streamlink/yt-dlp use) - Shared `VideoPlayerInterface` so WebView and native paths are interchangeable via settings toggle - `PlaybackAccessToken` model, `TwitchGqlApi` client ## Chat delay & send reliability - **Optimistic send-finalize**: Twitch acks a sent message with a per-PRIVMSG USERSTATE (not an echo), which it can intermittently drop — more so under a long chat delay. A missing ack no longer shows a false "message may not have been sent" error; the send is finalized optimistically (local echo rendered), and only genuine rejection NOTICEs surface an error. Ack timeout scaled by the chat delay. - **Per-line chat-delay bypass**: control/state lines (USERSTATE/ROOMSTATE/GLOBALUSERSTATE), rejection NOTICEs, the reconnect notice, and untagged server lines bypass the delay so send-acks and PONGs aren't stalled; only displayable chat content is delayed, staying in sync with delayed video. - **Measured chat bottom-bar height**: the message list reflows to the composer's real measured height, fixing the input overlapping messages when a long message expands it (replaces a fixed-constant estimate). - IRC tag parsing handles valueless and escaped tags per the IRCv3 message-tags spec (fixes a recent-messages RangeError on certain tags). ## Chat / multi-tab - Redesigned tab chips: unread dot indicator, chips dim until WebSocket connects - Animated tab options popover replacing `MenuAnchor` (no animation hook in Flutter 3.44) - Simplified `ChatTabs` from `StatefulWidget` to `StatelessWidget` - Focus-current-channel fade bump to 0.55; section-header alpha lifted to match the muted-label tier - `addTab` now calls `setActiveTab` to snapshot outgoing tab's `lastSeenMessageId` — fixes spurious unread dots after adding a tab - `onActivateSourceTab` threaded into `ChatUserModal` so Reply in merged mode switches to the correct source tab's composer ## Bug fixes and hardening - **Reverted the experimental iOS low-latency mode** (5s live-edge join + 1.05x catch-up): AVPlayer can't sustain <~18s on Twitch (declared `TARGETDURATION:6` paces playlist refreshes), and the offset starved the buffer into pause-on-launch. Default join distance restored. - Fork (Android): **cap `BEHIND_LIVE_WINDOW` recovery** so a stream repeatedly falling off the live window can't silently re-prepare forever; emits `error` on exhaustion so the host recovery ladder takes over - Guard all Android `setAutoPipMode` calls with `_autoPipAvailable` — prevents `PlatformException` on Android 8–11; check `_disposed` after `isAutoPipAvailable` await to prevent post-dispose auto-PiP re-enable - Remove `_isInPipMode` guard from `_onPaused` so `_paused` tracks actual state, fixing PiP play/pause toggle getting stuck - Tighten iOS cookie domain check to exact `twitch.tv` / `.twitch.tv` suffix - Invalidate the stored web session token when Twitch rejects it with a 401 (profile card flips back to unlinked; future loads skip the doomed authenticated request), and re-extract the cookie on launch when logged in without a linked session - Send `play_session_id` and `player_backend=mediaplayer` to Usher, matching the web client / streamlink - Fork (iOS): restore program-date-time latency measurement (a prior rev measured distance to the manifest edge, reading ~0s and silently disabling high-latency recovery / chat-delay auto-sync); release platform views on dispose (per-stream view + AVPlayerViewController leak), track the observed AVPlayerItem for KVO removal (sibling-view crash), main-thread seek results, resolve superseded load futures - Fork (Android): clean up method handlers orphaned by PiP-time view disposal (leaked audio-focus listeners), drop the live-offset re-anchoring seekTo on metadata updates (latency creep), restore pre-duck volume, respect user pause in the stall watchdog, resolve superseded load futures - Deep review pass: expire the quality-switch flag so stall recovery isn't disabled for the session, cap latency-driven recovery (clock-skew loop), generation-guard the error overlay, two-strike offline confirmation, controller null-safety on quality switch - Tighten `/me` local-echo match (no longer renders `/meow ...` as an action); clear pending send text on disconnect ## Web / docs - Remove stale Cloudflare Images binding from `wrangler.jsonc` (covered by `images.unoptimized: true`) - Correct `web/AGENTS.md` Cache Components claim (feature not enabled) - Repo and agent config cleanup ## Test plan - [x] `flutter analyze` — clean (frosty + plugin lib) - [x] `flutter test` — 319/319 pass (adds `ChatLatencySync`, `StreamInfoPoller`, video timing invariants, `PlaybackAccessToken`, IRC tag parsing) - [x] Android plugin Kotlin compiles against the bumped fork rev - [ ] Native player plays live streams on iOS and Android - [ ] Quality switching works and persists across channel reopens - [ ] PiP enters/exits correctly; pause/resume toggle in PiP window works - [ ] Audio-only mode does not crash on Android < API 31 - [ ] Sending under a long synced chat delay no longer shows a false "may not have been sent" error - [ ] Long composer text reflows the message list (no input/message overlap) - [ ] Multi-tab: adding a tab does not mark previous tab as unread - [ ] Merged chat: Reply from user modal targets the correct tab's composer 🤖 Generated with [Claude Code](https://claude.com/claude-code)
2026-06-13 17:06:24 -04:00
);
if (muted) continue;
}
switch (parsedIRCMessage.command) {
case Command.privateMessage:
case Command.notice:
case Command.userNotice:
// Check if this is a rejection notice for a pending message
if (parsedIRCMessage.command == Command.notice &&
_isWaitingForAck) {
final msgId = parsedIRCMessage.tags['msg-id'];
if (msgId != null && _rejectionMsgIds.contains(msgId)) {
// Message was rejected - clear pending but preserve text field for retry
_sendingTimeoutTimer?.cancel();
_isWaitingForAck = false;
toSend = null;
feat(video,chat): native player, ad-break awareness, chat send/delay reliability, and tab redesign (#567) Squash-merge commit. Covers four areas: native video player, chat reliability, multi-tab, and hardening. ## Native video player - Direct HLS playback via `better_native_video_player` (forked from `plug-and-pay/flutter-native-video-player`, patched on `frosty-patches` branch) - Twitch GQL playback token fetching with platform cookie extraction (iOS Swift + Android Kotlin plugins) for authenticated streams - Quality selection (source, 720p, 480p, 360p, 160p, audio-only) persisted per channel - Picture-in-picture: iOS automatic inline PiP, Android auto-PiP on API 31+ guarded against older devices - Latency polling, chat latency sync, stall detection/recovery, startup auto-pause recovery, watchdog timers - **Twitch stitched-ad break detection** (HLS `EXT-X-DATERANGE`) on both platforms, emitting `adBreakChanged` so the host suspends latency/stall recovery and chat sync during ads (program-date-time is unreliable then). Matches `CLASS="twitch-stitched-ad"` / `ID="stitched-ad-"` **and** the `X-TV-TWITCH-AD-*` attribute prefix (the durable signal streamlink/yt-dlp use) - Shared `VideoPlayerInterface` so WebView and native paths are interchangeable via settings toggle - `PlaybackAccessToken` model, `TwitchGqlApi` client ## Chat delay & send reliability - **Optimistic send-finalize**: Twitch acks a sent message with a per-PRIVMSG USERSTATE (not an echo), which it can intermittently drop — more so under a long chat delay. A missing ack no longer shows a false "message may not have been sent" error; the send is finalized optimistically (local echo rendered), and only genuine rejection NOTICEs surface an error. Ack timeout scaled by the chat delay. - **Per-line chat-delay bypass**: control/state lines (USERSTATE/ROOMSTATE/GLOBALUSERSTATE), rejection NOTICEs, the reconnect notice, and untagged server lines bypass the delay so send-acks and PONGs aren't stalled; only displayable chat content is delayed, staying in sync with delayed video. - **Measured chat bottom-bar height**: the message list reflows to the composer's real measured height, fixing the input overlapping messages when a long message expands it (replaces a fixed-constant estimate). - IRC tag parsing handles valueless and escaped tags per the IRCv3 message-tags spec (fixes a recent-messages RangeError on certain tags). ## Chat / multi-tab - Redesigned tab chips: unread dot indicator, chips dim until WebSocket connects - Animated tab options popover replacing `MenuAnchor` (no animation hook in Flutter 3.44) - Simplified `ChatTabs` from `StatefulWidget` to `StatelessWidget` - Focus-current-channel fade bump to 0.55; section-header alpha lifted to match the muted-label tier - `addTab` now calls `setActiveTab` to snapshot outgoing tab's `lastSeenMessageId` — fixes spurious unread dots after adding a tab - `onActivateSourceTab` threaded into `ChatUserModal` so Reply in merged mode switches to the correct source tab's composer ## Bug fixes and hardening - **Reverted the experimental iOS low-latency mode** (5s live-edge join + 1.05x catch-up): AVPlayer can't sustain <~18s on Twitch (declared `TARGETDURATION:6` paces playlist refreshes), and the offset starved the buffer into pause-on-launch. Default join distance restored. - Fork (Android): **cap `BEHIND_LIVE_WINDOW` recovery** so a stream repeatedly falling off the live window can't silently re-prepare forever; emits `error` on exhaustion so the host recovery ladder takes over - Guard all Android `setAutoPipMode` calls with `_autoPipAvailable` — prevents `PlatformException` on Android 8–11; check `_disposed` after `isAutoPipAvailable` await to prevent post-dispose auto-PiP re-enable - Remove `_isInPipMode` guard from `_onPaused` so `_paused` tracks actual state, fixing PiP play/pause toggle getting stuck - Tighten iOS cookie domain check to exact `twitch.tv` / `.twitch.tv` suffix - Invalidate the stored web session token when Twitch rejects it with a 401 (profile card flips back to unlinked; future loads skip the doomed authenticated request), and re-extract the cookie on launch when logged in without a linked session - Send `play_session_id` and `player_backend=mediaplayer` to Usher, matching the web client / streamlink - Fork (iOS): restore program-date-time latency measurement (a prior rev measured distance to the manifest edge, reading ~0s and silently disabling high-latency recovery / chat-delay auto-sync); release platform views on dispose (per-stream view + AVPlayerViewController leak), track the observed AVPlayerItem for KVO removal (sibling-view crash), main-thread seek results, resolve superseded load futures - Fork (Android): clean up method handlers orphaned by PiP-time view disposal (leaked audio-focus listeners), drop the live-offset re-anchoring seekTo on metadata updates (latency creep), restore pre-duck volume, respect user pause in the stall watchdog, resolve superseded load futures - Deep review pass: expire the quality-switch flag so stall recovery isn't disabled for the session, cap latency-driven recovery (clock-skew loop), generation-guard the error overlay, two-strike offline confirmation, controller null-safety on quality switch - Tighten `/me` local-echo match (no longer renders `/meow ...` as an action); clear pending send text on disconnect ## Web / docs - Remove stale Cloudflare Images binding from `wrangler.jsonc` (covered by `images.unoptimized: true`) - Correct `web/AGENTS.md` Cache Components claim (feature not enabled) - Repo and agent config cleanup ## Test plan - [x] `flutter analyze` — clean (frosty + plugin lib) - [x] `flutter test` — 319/319 pass (adds `ChatLatencySync`, `StreamInfoPoller`, video timing invariants, `PlaybackAccessToken`, IRC tag parsing) - [x] Android plugin Kotlin compiles against the bumped fork rev - [ ] Native player plays live streams on iOS and Android - [ ] Quality switching works and persists across channel reopens - [ ] PiP enters/exits correctly; pause/resume toggle in PiP window works - [ ] Audio-only mode does not crash on Android < API 31 - [ ] Sending under a long synced chat delay no longer shows a false "may not have been sent" error - [ ] Long composer text reflows the message list (no input/message overlap) - [ ] Multi-tab: adding a tab does not mark previous tab as unread - [ ] Merged chat: Reply from user modal targets the correct tab's composer 🤖 Generated with [Claude Code](https://claude.com/claude-code)
2026-06-13 17:06:24 -04:00
// Drop the retained text so a later USERSTATE can't render the
// rejected message as a deferred echo.
_pendingSentMessageText = null;
// Show notification with Twitch's rejection message
if (parsedIRCMessage.message != null) {
HapticFeedback.heavyImpact();
updateNotification(parsedIRCMessage.message!);
}
}
}
feat(chat): add bubbles for shared chat participant channels (#581) * feat(chat): add bubbles for shared chat participant channels Twitch's native shared chat previously had no way to interact with participant channels the way manually-added chats work. Adds per-participant bubbles alongside manual tabs: tapping one spotlights that channel (fading the rest), hiding one filters its messages from the feed entirely. Defaults to unfaded, resets on rejoin (fresh ChatStore per connect). Manual "merged mode" fading is untouched and unaffected. * refactor(chat): dedup shared-chat tag lookup and extract fade policy - add IRCMessage.sourceChannelId, replacing three copies of the same source-room-id/room-id tag lookup - move the shared-chat spotlight/merged-mode fade decision out of ChatMessage's build into ChatStore.shouldFadeMessage, matching the extract-into-store convention already used for SharedChatBubbleState - factor the tab-bar item's Padding/Center wrapper into a shared _wrapItem helper instead of duplicating it per branch * fix(chat): don't spotlight a hidden shared-chat bubble toggleFocus didn't check hiddenChannelIds, so tapping a hidden bubble's chip added it to the spotlight set — fading every other participant to showcase a channel whose own messages were already filtered out of the feed. * fix(chat): stop shared-chat detection flapping on system messages _isInSharedChatMode was recomputed from every PRIVMSG/NOTICE/USERNOTICE, but only PRIVMSG reliably carries source-room-id for a session's duration. A sub/raid/announcement without the tag would flip the flag off and back on within a single live session. Previously this only risked a redundant asset refetch (already guarded); now the shared chat bubble bar reads the flag directly, so a flap would visibly collapse and reopen it. Scope detection to PRIVMSG only.
2026-07-03 00:16:49 -04:00
// Update shared chat mode based on source-room-id tag presence.
// Only PRIVMSG reliably carries this tag for the session's
// duration — NOTICE/USERNOTICE (subs, raids, announcements)
// don't always, so gating on those too would flap this flag off
// and on within a single live session (now visibly, since the
// shared chat bubble bar reads it — previously this only risked
// a redundant asset refetch, guarded below).
if (parsedIRCMessage.command == Command.privateMessage) {
final wasShared = _isInSharedChatMode;
_isInSharedChatMode = parsedIRCMessage.tags.containsKey(
'source-room-id',
v5 (#463) * migrate to dio * ignore folders * simplify twitch api headers handling * clean up main * simplify logs * optimize profile picture fetching fixes refetches on tab switch * update claude md * refactor irc.dart * update copilot instructions with essential commands and project structure details * implement message sending state management and UI updates * refactor notification handling and add copy-paste functionality in chat * refactor AlertMessage to support vertical layout and optional padding * refactor error messages for consistency and clarity across various components * refactor chat layout to use draggable divider and improve chat width settings * refactor Uptime widget to use SharedTimerService for synchronized updates * refactor search results components to handle null future states gracefully * refactor loading indicators to use skeleton loaders for improved user experience * refactor UI components for improved layout and responsiveness, enhance skeleton loaders, and streamline padding adjustments * refactor: replace manual blur effects with BlurredContainer for consistency and reusability * refactor: enhance JavaScript execution and error handling in WebView components * refactor: replace app bar with blurred container for improved UI consistency across screens * refactor: streamline video chat layout and enhance PiP drag gesture functionality * revert some app bar changes * refactor: implement Picture-in-Picture drag functionality in VideoChat * refactor: pass currentChannelId to IRCMessage and ChatMessage for improved context * fix large thubmnail width * chore: update Gradle and Kotlin plugin versions for improved compatibility * changes from v4.10.0 branch * feat: integrate AnimatedScrollBorder for improved UI responsiveness across various screens * refactor: update SectionHeader styling and improve theme management * feat: add pinned section to StreamsList and enhance skeleton loader padding * feat: add repository guidelines for project structure, coding style, testing, and security * feat: enhance StreamCard UI with BlurredContainer and adjust border width in theme * feat: implement unfocusInput and safeRequestFocus methods to manage text field focus behavior * feat: enhance Picture-in-Picture drag interactions with haptic feedback and smooth animations * refactor: improve code formatting and readability across multiple files * feat: implement picture-in-picture mode toggle and state management for video playback * feat: reset PiP mode state when pausing video playback * feat: add custom app bar with profile picture and stream info for video chat * feat: convert multiple settings screens to use StatefulWidget and add animated scroll borders * feat: update blur configuration for adaptive alpha based on theme * fix: adjust default font size in SectionHeader widget * feat: enhance PiP mode with drag overlay instruction and UI improvements * fix: improve badge rendering with consistent margin and border for current channel * refactor: replace BackdropFilter with BlurredContainer for improved clarity and maintainability * fix: reduce background transparency in Uptime widget for better visibility * feat: enhance photo view dialog with full resolution toggle and blurred background * fix: reset chat delay to 0 when auto sync is enabled and update settings title for clarity * fix: adjust border width in theme to improve consistency * feat: add forceDarkMode option to BlurredContainer for improved theme adaptability * feat: implement offline followed channels feature with UI integration and settings option * fix: increase font size and weight for offline status text for better readability * feat: remove offline pinned channels feature and update related UI components * feat: optimize offline channels loading behavior based on expansion state * fix: improve clarity and consistency in repository guidelines formatting * feat: update full resolution URL handling and button visibility logic * feat: replace app bar with blurred version in chat-only mode and add animated scroll border * feat: refactor video chat layout for improved chat and video display in landscape mode * feat: remove bottom bar visibility setting and adjust chat layout accordingly * fix: simplify condition for displaying offline channels section in following tab * feat: enhance reply thread display with indentation and reply icon * feat: implement showModalBottomSheetWithProperFocus for improved focus handling * feat: add gradient direction support to BlurredContainer for enhanced visual effects * feat: enhance NavigationBar and Theme settings for improved visual consistency * feat: add gradient direction support to BlurredContainer in VideoChat for enhanced visual effects * chore: update .gitignore to include .cursor file for better environment management * fix: update PiP drag gesture conditions to include video paused state for better user experience * refactor: replace ScrollController with SettingsPageLayout in settings screens for improved layout management * refactor: centralize orientation handling by introducing OrientationUtils for improved readability and maintainability * refactor: replace OrientationUtils with ContextExtensions for streamlined context-based access to theme, layout, and API dependencies * refactor: improve video chat UI by adjusting title layout and adding stream info tooltips for better user experience * refactor: adjust titleSpacing in theme and navigation components for improved layout consistency * refactor: update stream info timer handling and overlay management for improved UI responsiveness * refactor: enhance stream info timer logic and overlay visibility management for chat-only mode * refactor: enhance input decoration theme in FrostyThemes for improved visual consistency and responsiveness * refactor: adjust inputDecorationTheme padding in FrostyThemes for improved visual consistency * refactor: enhance video overlay management by including video preview overlay in hideElements for improved UI consistency * refactor: improve chat bottom bar padding and video chat layout for enhanced UI consistency * refactor: adjust chat padding to account for device bottom insets for improved layout consistency * refactor: update text styles in FrostyThemes for improved visual consistency across UI components * refactor: update iOS minimum deployment target to 13.0 for improved compatibility * refactor: adjust chat bottom padding based on emote menu visibility for improved layout consistency * refactor: adjust padding values in StreamsList for improved layout consistency * refactor: replace Padding with AnimatedPadding in Chat for smoother layout transitions refactor: replace Container with AnimatedContainer in BlurredContainer for smoother animations * refactor: remove unnecessary radius property from ProfilePicture in OfflineChannelCard for cleaner code * refactor: enhance chat bottom bar suffix icon to display message delay with tooltip for improved user experience * refactor: update hint text and tooltips in chat bottom bar and search for improved clarity * refactor: simplify notification display logic and enhance chat input behavior for improved user experience * refactor: enhance layout consistency by adjusting spacing in various components across the channel and home screens * refactor: introduce LiveIndicator widget and adjust spacing in channel and video components for improved layout consistency * refactor: remove monospace font family from chat bottom bar for improved text rendering * refactor: reduce notification animation duration and change dismiss direction for improved user experience * refactor: replace VideoBar with StreamInfoBar in video components for improved layout and consistency * refactor: adjust font sizes and spacing in StreamInfoBar for improved layout consistency * refactor: standardize font sizes and update gradient stops in video components for improved visual consistency * refactor: update tooltip padding and background color in theme for improved visual consistency * refactor: enhance tooltip behavior and standardize font sizes in StreamInfoBar and related components for improved visual consistency * refactor: add showThumbnail option to LargeStreamCardSkeletonLoader for improved layout flexibility * refactor: add StreamInfoBarSkeletonLoader for improved layout consistency in stream components * refactor: add shadow effects to icons and text in StreamInfoBar and VideoOverlay for improved visual depth * refactor: update defaultOverlayOpacity to 0.0 for improved overlay behavior * fix: correct stream info text color on overlay * refactor: implement a new color picker dialog with random color generation for enhanced user experience * refactor: adjust gradient colors and stops in VideoOverlay for improved visual consistency * refactor: refine gradient colors and stops in VideoOverlay for enhanced visual clarity * refactor: add isCompact parameter to StreamInfoBar for responsive text sizing * fix: update tooltip background color to use surface color for better contrast * feat: add shared chat mode support in chat store and update StreamInfoBar for visual indication * refactor: disable debug print for IRC messages to reduce log clutter * feat: implement chat color selection feature with user color management in chat settings * refactor: replace color adjustment logic with new contrast-aware utility for chat names * refactor: simplify chat details UI by replacing list tiles with action cards and removing unused clear dialog * refactor: enhance chat details UI by improving time formatting and adding label styling to action cards * refactor: update chat color terminology to 'Username color' for clarity in UI * refactor: enhance chat details UI by introducing active chat modes display and improving layout structure * refactor: improve chat details layout by replacing ListTile with Padding and adding a Divider for better visual separation * refactor: remove chat notifications positioning setting and adjust notification alignment in video chat * refactor: streamline StreamInfoBar component by consolidating offline handling and improving layout for better readability * refactor: enhance StreamInfoBar by adding tooltip for streamer name and improving text overflow handling * refactor: adjust tooltip display duration in StreamInfoBar and update theme configuration * refactor: adjust margin and padding in StreamCard for improved layout consistency * chore: update dependencies in pubspec.yaml and pubspec.lock for Firebase and other packages * template * chore: update iOS platform version to 15.0 and Firebase dependencies to 12.2.0 * refactor: simplify StreamInfoBar layout by reducing nested widgets and improving text color handling * format * feat: enhance Channel model and StreamInfoBar to support offline channel details * feat: add offline indicator and improve StreamInfoBar layout for better offline channel display * fix: adjust icon color opacity in StreamInfoBar for improved visibility * feat: enhance dismissal animation in FrostyPhotoViewDialog to track swipe direction * docs: update copilot instructions for clarity and additional error handling details * refactor: optimize latency tooltip layout and improve offline indicator styling in VideoOverlay * feat: implement shared chat asset fetching and participant management in ChatAssetsStore * refactor: replace Observer with Builder for improved widget rebuilding in VideoOverlay * refactor: update StreamInfoBar border styling and adjust layout in VideoOverlay for improved visual consistency * feat: add showTextShadows property to StreamInfoBar for customizable text shadow display * refactor: adjust layout in VideoOverlay by adding padding to improve spacing and visual consistency * refactor: enhance VideoOverlay gradients and layout for improved visual hierarchy and user experience * refactor: reduce vertical padding in VideoOverlay for improved layout consistency * refactor: remove overlay opacity settings from VideoSettings and SettingsStore for simplification * refactor: improve text overlay transition in VideoChat for better user experience * Revert "refactor: improve text overlay transition in VideoChat for better user experience" This reverts commit fd16ff5ec30ec266157e5c8a9d4a6090c91717f6. * refactor: wrap videoOverlay in ColoredBox for improved layout handling * refactor: optimize animation duration and transition curves in VideoChat for smoother interactions * refactor: dispose searchScrollController in HomeStoreBase to prevent memory leaks * refactor: simplify gradient definitions in VideoOverlay for improved readability and maintainability * refactor: remove 'Offline' text overlay from VideoOverlay for cleaner UI * refactor: add refresh functionality for assets in ChatDetails with loading indicators * refactor: update visibility conditions for uptime, viewer count, and category display in StreamInfoBar * refactor: replace AlertDialog with FrostyDialog for consistent dialog styling across the application * refactor: enhance layout handling in FrostyPageView to prevent overflow during height transitions * refactor: replace ColorPickerDialog with AccentColorPickerDialog for improved color selection experience * refactor: replace theme and accent color settings with dedicated components for improved modularity and readability * refactor: replace ElevatedButton with TextButton for consistent button styling across dialogs * refactor: integrate MobX Observer for reactive state management in settings widgets * refactor: update theme and dialog components for improved styling and consistency * refactor: enhance dialog styling with rounded corners and border in theme configuration * refactor: improve dialog messages for unauthorized access handling * refactor: update bodyLarge text style in theme configuration to include font weight * refactor: standardize Divider usage and adjust theme styles for improved consistency * refactor: adjust Divider properties and theme styles for enhanced visual consistency * chore: remove GEMINI.md file as it is no longer needed for project documentation * refactor: enhance token validation and reconnect logic in AuthBase for improved error handling * format * refactor: integrate landscape cutout settings into VideoChat layout for improved responsiveness * refactor: implement app lifecycle handling in VideoChat and enhance stream info update logic in VideoStore * refactor: update landscape cutout conditionals in VideoChat layout for improved responsiveness * update AGENTS.md * add scrollbar to search * fix scrolling exception * update CLAUDE.md * 5 auth reconnect attemps then log out * increase reply max lines to 2 * simplify and improve reply formatting * add prime icon * better draggable divider * support draggable divider in fullscreen overlay chat * add text shadow in fullscreen chat overlay mode * format * add landscape checks * video store optimization attempts * Dispose WebViewController and remove JavaScript channels properly * Track and cleanup all MutationObservers to prevent accumulation * Throttle latency updates to once per 5 seconds (reduces CPU load) * Add timeout protection and null checks for robustness * Prevent duplicate event listeners on page reloads * double tap divider to reset * Revert "video store optimization attempts" This reverts commit b1df7b0de473543283211a489dca698d9d241857. * optimize video store attempt 2 * Revert "double tap divider to reset" This reverts commit aeb26a433500ec71f822794835e927018ee59e1e. * optimize latency listener to open the menu and check every 20 secconds * more optimizations * hard refresh * abbreviate latency * fix lint * improve hide default overlay * fix chat no longer reconnecting with chat delay * refine chat alerts * fix historical message missing badges and emotes on initial connection * parallelize * revert * add reconnect button inline action * refactor: replace Scrollbar with FrostyScrollbar across chat and settings screens for consistent styling * tweak chat details menu * add scrollbar to release notes, renames for consistency * fix duplicate message case * fix chat delay alerts in auto sync mode * add regex for numeric strings and enhance display name formatting logic * exterminate borders * refactor: simplify active chat modes display in chat details screen * feat: enhance chat input button with delay notification and disable state * fix: wrap chat in SafeArea to prevent UI overflow issues * refactor: remove divider line from video chat and update draggable divider visibility logic * persist overlay in pip mode * fix: update chat delay handling and notifications in chat bottom bar * fix: update chat overlay visibility logic to respect fullscreen settings * tap to show deleted message * fix: prevent accidental chat scrolling when accessing system UI in landscape mode * show latency in portrait * fix: enhance chat delay notifications with dynamic delay time * docs: update CLAUDE.md for improved environment variable instructions and architecture overview * fix: improve chat delay countdown management and message handling * add preliminary release notes * remove agents.md * update lockfile * add initial multi chat feature * add option to persist multi chat tabs * add remove confirmation dialog * improve add chat design * lazy-load tabs * create global assets store to dedupe global asset fetching * improve tab design/styles * update notes * use frosty dialog * update claude md * tweak * add ability to reorder tabs * resolve conflict * merge cleanup * format * update release notes * add chat delay sync completion tracking to prevent countdown re-appearance * add tests * fix * update release notes * bump
2026-01-01 22:28:17 -05:00
);
feat(chat): add bubbles for shared chat participant channels (#581) * feat(chat): add bubbles for shared chat participant channels Twitch's native shared chat previously had no way to interact with participant channels the way manually-added chats work. Adds per-participant bubbles alongside manual tabs: tapping one spotlights that channel (fading the rest), hiding one filters its messages from the feed entirely. Defaults to unfaded, resets on rejoin (fresh ChatStore per connect). Manual "merged mode" fading is untouched and unaffected. * refactor(chat): dedup shared-chat tag lookup and extract fade policy - add IRCMessage.sourceChannelId, replacing three copies of the same source-room-id/room-id tag lookup - move the shared-chat spotlight/merged-mode fade decision out of ChatMessage's build into ChatStore.shouldFadeMessage, matching the extract-into-store convention already used for SharedChatBubbleState - factor the tab-bar item's Padding/Center wrapper into a shared _wrapItem helper instead of duplicating it per branch * fix(chat): don't spotlight a hidden shared-chat bubble toggleFocus didn't check hiddenChannelIds, so tapping a hidden bubble's chip added it to the spotlight set — fading every other participant to showcase a channel whose own messages were already filtered out of the feed. * fix(chat): stop shared-chat detection flapping on system messages _isInSharedChatMode was recomputed from every PRIVMSG/NOTICE/USERNOTICE, but only PRIVMSG reliably carries source-room-id for a session's duration. A sub/raid/announcement without the tag would flip the flag off and back on within a single live session. Previously this only risked a redundant asset refetch (already guarded); now the shared chat bubble bar reads the flag directly, so a flap would visibly collapse and reopen it. Scope detection to PRIVMSG only.
2026-07-03 00:16:49 -04:00
// On transition into shared chat mode, fetch assets for participants.
if (!wasShared && _isInSharedChatMode) {
assetsStore.fetchSharedChatAssets(
channelId: channelId,
headers: auth.headersTwitch,
onEmoteError: (error) {
debugPrint(error.toString());
return <Emote>[];
},
onBadgeError: (error) {
debugPrint(error.toString());
return <String, ChatBadge>{};
},
showTwitchEmotes: settings.showTwitchEmotes,
showTwitchBadges: settings.showTwitchBadges,
show7TVEmotes: settings.show7TVEmotes,
showBTTVEmotes: settings.showBTTVEmotes,
showFFZEmotes: settings.showFFZEmotes,
showFFZBadges: settings.showFFZBadges,
);
} else if (wasShared &&
!_isInSharedChatMode &&
assetsStore.hasLoadedSharedChatAssets) {
// On leaving shared chat, drop the participants' merged emotes and
// badges and restore just this channel's assets — otherwise the
// other streamer's emote set and badges linger (#522). Guarded on
// having actually loaded shared assets so a flapping tag can't
// trigger redundant refetches.
assetsStore.resetSharedChatAssets();
getAssets();
}
v5 (#463) * migrate to dio * ignore folders * simplify twitch api headers handling * clean up main * simplify logs * optimize profile picture fetching fixes refetches on tab switch * update claude md * refactor irc.dart * update copilot instructions with essential commands and project structure details * implement message sending state management and UI updates * refactor notification handling and add copy-paste functionality in chat * refactor AlertMessage to support vertical layout and optional padding * refactor error messages for consistency and clarity across various components * refactor chat layout to use draggable divider and improve chat width settings * refactor Uptime widget to use SharedTimerService for synchronized updates * refactor search results components to handle null future states gracefully * refactor loading indicators to use skeleton loaders for improved user experience * refactor UI components for improved layout and responsiveness, enhance skeleton loaders, and streamline padding adjustments * refactor: replace manual blur effects with BlurredContainer for consistency and reusability * refactor: enhance JavaScript execution and error handling in WebView components * refactor: replace app bar with blurred container for improved UI consistency across screens * refactor: streamline video chat layout and enhance PiP drag gesture functionality * revert some app bar changes * refactor: implement Picture-in-Picture drag functionality in VideoChat * refactor: pass currentChannelId to IRCMessage and ChatMessage for improved context * fix large thubmnail width * chore: update Gradle and Kotlin plugin versions for improved compatibility * changes from v4.10.0 branch * feat: integrate AnimatedScrollBorder for improved UI responsiveness across various screens * refactor: update SectionHeader styling and improve theme management * feat: add pinned section to StreamsList and enhance skeleton loader padding * feat: add repository guidelines for project structure, coding style, testing, and security * feat: enhance StreamCard UI with BlurredContainer and adjust border width in theme * feat: implement unfocusInput and safeRequestFocus methods to manage text field focus behavior * feat: enhance Picture-in-Picture drag interactions with haptic feedback and smooth animations * refactor: improve code formatting and readability across multiple files * feat: implement picture-in-picture mode toggle and state management for video playback * feat: reset PiP mode state when pausing video playback * feat: add custom app bar with profile picture and stream info for video chat * feat: convert multiple settings screens to use StatefulWidget and add animated scroll borders * feat: update blur configuration for adaptive alpha based on theme * fix: adjust default font size in SectionHeader widget * feat: enhance PiP mode with drag overlay instruction and UI improvements * fix: improve badge rendering with consistent margin and border for current channel * refactor: replace BackdropFilter with BlurredContainer for improved clarity and maintainability * fix: reduce background transparency in Uptime widget for better visibility * feat: enhance photo view dialog with full resolution toggle and blurred background * fix: reset chat delay to 0 when auto sync is enabled and update settings title for clarity * fix: adjust border width in theme to improve consistency * feat: add forceDarkMode option to BlurredContainer for improved theme adaptability * feat: implement offline followed channels feature with UI integration and settings option * fix: increase font size and weight for offline status text for better readability * feat: remove offline pinned channels feature and update related UI components * feat: optimize offline channels loading behavior based on expansion state * fix: improve clarity and consistency in repository guidelines formatting * feat: update full resolution URL handling and button visibility logic * feat: replace app bar with blurred version in chat-only mode and add animated scroll border * feat: refactor video chat layout for improved chat and video display in landscape mode * feat: remove bottom bar visibility setting and adjust chat layout accordingly * fix: simplify condition for displaying offline channels section in following tab * feat: enhance reply thread display with indentation and reply icon * feat: implement showModalBottomSheetWithProperFocus for improved focus handling * feat: add gradient direction support to BlurredContainer for enhanced visual effects * feat: enhance NavigationBar and Theme settings for improved visual consistency * feat: add gradient direction support to BlurredContainer in VideoChat for enhanced visual effects * chore: update .gitignore to include .cursor file for better environment management * fix: update PiP drag gesture conditions to include video paused state for better user experience * refactor: replace ScrollController with SettingsPageLayout in settings screens for improved layout management * refactor: centralize orientation handling by introducing OrientationUtils for improved readability and maintainability * refactor: replace OrientationUtils with ContextExtensions for streamlined context-based access to theme, layout, and API dependencies * refactor: improve video chat UI by adjusting title layout and adding stream info tooltips for better user experience * refactor: adjust titleSpacing in theme and navigation components for improved layout consistency * refactor: update stream info timer handling and overlay management for improved UI responsiveness * refactor: enhance stream info timer logic and overlay visibility management for chat-only mode * refactor: enhance input decoration theme in FrostyThemes for improved visual consistency and responsiveness * refactor: adjust inputDecorationTheme padding in FrostyThemes for improved visual consistency * refactor: enhance video overlay management by including video preview overlay in hideElements for improved UI consistency * refactor: improve chat bottom bar padding and video chat layout for enhanced UI consistency * refactor: adjust chat padding to account for device bottom insets for improved layout consistency * refactor: update text styles in FrostyThemes for improved visual consistency across UI components * refactor: update iOS minimum deployment target to 13.0 for improved compatibility * refactor: adjust chat bottom padding based on emote menu visibility for improved layout consistency * refactor: adjust padding values in StreamsList for improved layout consistency * refactor: replace Padding with AnimatedPadding in Chat for smoother layout transitions refactor: replace Container with AnimatedContainer in BlurredContainer for smoother animations * refactor: remove unnecessary radius property from ProfilePicture in OfflineChannelCard for cleaner code * refactor: enhance chat bottom bar suffix icon to display message delay with tooltip for improved user experience * refactor: update hint text and tooltips in chat bottom bar and search for improved clarity * refactor: simplify notification display logic and enhance chat input behavior for improved user experience * refactor: enhance layout consistency by adjusting spacing in various components across the channel and home screens * refactor: introduce LiveIndicator widget and adjust spacing in channel and video components for improved layout consistency * refactor: remove monospace font family from chat bottom bar for improved text rendering * refactor: reduce notification animation duration and change dismiss direction for improved user experience * refactor: replace VideoBar with StreamInfoBar in video components for improved layout and consistency * refactor: adjust font sizes and spacing in StreamInfoBar for improved layout consistency * refactor: standardize font sizes and update gradient stops in video components for improved visual consistency * refactor: update tooltip padding and background color in theme for improved visual consistency * refactor: enhance tooltip behavior and standardize font sizes in StreamInfoBar and related components for improved visual consistency * refactor: add showThumbnail option to LargeStreamCardSkeletonLoader for improved layout flexibility * refactor: add StreamInfoBarSkeletonLoader for improved layout consistency in stream components * refactor: add shadow effects to icons and text in StreamInfoBar and VideoOverlay for improved visual depth * refactor: update defaultOverlayOpacity to 0.0 for improved overlay behavior * fix: correct stream info text color on overlay * refactor: implement a new color picker dialog with random color generation for enhanced user experience * refactor: adjust gradient colors and stops in VideoOverlay for improved visual consistency * refactor: refine gradient colors and stops in VideoOverlay for enhanced visual clarity * refactor: add isCompact parameter to StreamInfoBar for responsive text sizing * fix: update tooltip background color to use surface color for better contrast * feat: add shared chat mode support in chat store and update StreamInfoBar for visual indication * refactor: disable debug print for IRC messages to reduce log clutter * feat: implement chat color selection feature with user color management in chat settings * refactor: replace color adjustment logic with new contrast-aware utility for chat names * refactor: simplify chat details UI by replacing list tiles with action cards and removing unused clear dialog * refactor: enhance chat details UI by improving time formatting and adding label styling to action cards * refactor: update chat color terminology to 'Username color' for clarity in UI * refactor: enhance chat details UI by introducing active chat modes display and improving layout structure * refactor: improve chat details layout by replacing ListTile with Padding and adding a Divider for better visual separation * refactor: remove chat notifications positioning setting and adjust notification alignment in video chat * refactor: streamline StreamInfoBar component by consolidating offline handling and improving layout for better readability * refactor: enhance StreamInfoBar by adding tooltip for streamer name and improving text overflow handling * refactor: adjust tooltip display duration in StreamInfoBar and update theme configuration * refactor: adjust margin and padding in StreamCard for improved layout consistency * chore: update dependencies in pubspec.yaml and pubspec.lock for Firebase and other packages * template * chore: update iOS platform version to 15.0 and Firebase dependencies to 12.2.0 * refactor: simplify StreamInfoBar layout by reducing nested widgets and improving text color handling * format * feat: enhance Channel model and StreamInfoBar to support offline channel details * feat: add offline indicator and improve StreamInfoBar layout for better offline channel display * fix: adjust icon color opacity in StreamInfoBar for improved visibility * feat: enhance dismissal animation in FrostyPhotoViewDialog to track swipe direction * docs: update copilot instructions for clarity and additional error handling details * refactor: optimize latency tooltip layout and improve offline indicator styling in VideoOverlay * feat: implement shared chat asset fetching and participant management in ChatAssetsStore * refactor: replace Observer with Builder for improved widget rebuilding in VideoOverlay * refactor: update StreamInfoBar border styling and adjust layout in VideoOverlay for improved visual consistency * feat: add showTextShadows property to StreamInfoBar for customizable text shadow display * refactor: adjust layout in VideoOverlay by adding padding to improve spacing and visual consistency * refactor: enhance VideoOverlay gradients and layout for improved visual hierarchy and user experience * refactor: reduce vertical padding in VideoOverlay for improved layout consistency * refactor: remove overlay opacity settings from VideoSettings and SettingsStore for simplification * refactor: improve text overlay transition in VideoChat for better user experience * Revert "refactor: improve text overlay transition in VideoChat for better user experience" This reverts commit fd16ff5ec30ec266157e5c8a9d4a6090c91717f6. * refactor: wrap videoOverlay in ColoredBox for improved layout handling * refactor: optimize animation duration and transition curves in VideoChat for smoother interactions * refactor: dispose searchScrollController in HomeStoreBase to prevent memory leaks * refactor: simplify gradient definitions in VideoOverlay for improved readability and maintainability * refactor: remove 'Offline' text overlay from VideoOverlay for cleaner UI * refactor: add refresh functionality for assets in ChatDetails with loading indicators * refactor: update visibility conditions for uptime, viewer count, and category display in StreamInfoBar * refactor: replace AlertDialog with FrostyDialog for consistent dialog styling across the application * refactor: enhance layout handling in FrostyPageView to prevent overflow during height transitions * refactor: replace ColorPickerDialog with AccentColorPickerDialog for improved color selection experience * refactor: replace theme and accent color settings with dedicated components for improved modularity and readability * refactor: replace ElevatedButton with TextButton for consistent button styling across dialogs * refactor: integrate MobX Observer for reactive state management in settings widgets * refactor: update theme and dialog components for improved styling and consistency * refactor: enhance dialog styling with rounded corners and border in theme configuration * refactor: improve dialog messages for unauthorized access handling * refactor: update bodyLarge text style in theme configuration to include font weight * refactor: standardize Divider usage and adjust theme styles for improved consistency * refactor: adjust Divider properties and theme styles for enhanced visual consistency * chore: remove GEMINI.md file as it is no longer needed for project documentation * refactor: enhance token validation and reconnect logic in AuthBase for improved error handling * format * refactor: integrate landscape cutout settings into VideoChat layout for improved responsiveness * refactor: implement app lifecycle handling in VideoChat and enhance stream info update logic in VideoStore * refactor: update landscape cutout conditionals in VideoChat layout for improved responsiveness * update AGENTS.md * add scrollbar to search * fix scrolling exception * update CLAUDE.md * 5 auth reconnect attemps then log out * increase reply max lines to 2 * simplify and improve reply formatting * add prime icon * better draggable divider * support draggable divider in fullscreen overlay chat * add text shadow in fullscreen chat overlay mode * format * add landscape checks * video store optimization attempts * Dispose WebViewController and remove JavaScript channels properly * Track and cleanup all MutationObservers to prevent accumulation * Throttle latency updates to once per 5 seconds (reduces CPU load) * Add timeout protection and null checks for robustness * Prevent duplicate event listeners on page reloads * double tap divider to reset * Revert "video store optimization attempts" This reverts commit b1df7b0de473543283211a489dca698d9d241857. * optimize video store attempt 2 * Revert "double tap divider to reset" This reverts commit aeb26a433500ec71f822794835e927018ee59e1e. * optimize latency listener to open the menu and check every 20 secconds * more optimizations * hard refresh * abbreviate latency * fix lint * improve hide default overlay * fix chat no longer reconnecting with chat delay * refine chat alerts * fix historical message missing badges and emotes on initial connection * parallelize * revert * add reconnect button inline action * refactor: replace Scrollbar with FrostyScrollbar across chat and settings screens for consistent styling * tweak chat details menu * add scrollbar to release notes, renames for consistency * fix duplicate message case * fix chat delay alerts in auto sync mode * add regex for numeric strings and enhance display name formatting logic * exterminate borders * refactor: simplify active chat modes display in chat details screen * feat: enhance chat input button with delay notification and disable state * fix: wrap chat in SafeArea to prevent UI overflow issues * refactor: remove divider line from video chat and update draggable divider visibility logic * persist overlay in pip mode * fix: update chat delay handling and notifications in chat bottom bar * fix: update chat overlay visibility logic to respect fullscreen settings * tap to show deleted message * fix: prevent accidental chat scrolling when accessing system UI in landscape mode * show latency in portrait * fix: enhance chat delay notifications with dynamic delay time * docs: update CLAUDE.md for improved environment variable instructions and architecture overview * fix: improve chat delay countdown management and message handling * add preliminary release notes * remove agents.md * update lockfile * add initial multi chat feature * add option to persist multi chat tabs * add remove confirmation dialog * improve add chat design * lazy-load tabs * create global assets store to dedupe global asset fetching * improve tab design/styles * update notes * use frosty dialog * update claude md * tweak * add ability to reorder tabs * resolve conflict * merge cleanup * format * update release notes * add chat delay sync completion tracking to prevent countdown re-appearance * add tests * fix * update release notes * bump
2026-01-01 22:28:17 -05:00
}
Update to Material 3/You and other changes/fixes (#280) * Use adaptive refresh indicators * Add new message count indicator in chat * Sync pubspec.lock * Initial migration to material 3 * Restore default bottom sheet style * Remove FrostyListTile and reset styles * Use "Clear" button for all search history * Add `require_trailing_commas` lint rule * Exclude generated files from linter * Use ListView for safe area support in bottom sheet * Add initial dark theme * Make sizing and units consistent * Update onbaording spacings & copy * Migrate to default material 3 buttons * Add headers to chat details bottom sheet * Simplify token log in method * Use bottom sheet for account options * Remove `AnimateScale` widget * Tweak search paddings * Update message spacing divisions * Upgrade packages * Update message spacing divisions * Regenerate splash screens * Update Inter & add google fonts * Add initial material 3 themes * Use adaptive alert dialogs * Revert to oultined inputs * Fix tooltip message * Revert add google_fonts * Improve themes and various styling * Convert categories grid to list * Tweak stream card thumbnail radii * Tweak settings headers * Left align floating snackbars * Tweak search header padding * Fix profile pics occasionally not rounded * Use profile pic for settings button if logged in * Redesign sleep timer * Use divider theme and reduce thickness * Use 0 letter spacing for tab bar titles * Redesign category streams list * Add border to tooltips * Increase category card font weight * Use outlined icon btton for chat user modal * Reduce profile pic radius in search results * Fix scrolll to top button safe area * Add support for reply threads * Reduce tooltip and snackbar border thickness * Rebuild reply threads on new messages * Upgrade packages (iOS) * Reduce font weight for all chat alerts * Use tabbars for pageview * Add dividers everywhere * Revert "Add dividers everywhere" This reverts commit 5f0d349fdbb0afad313cfb88e8c359714b3ea87a. * Remove fill from inputs * Add dividers to settings * Use segmented button for settings list * Add scrollbar to lists with scrollcontroller * Redesign badge/emote tooltip * Remove outline from chat user modal buttons * Remove divider from reply thread * Use tap for chatters list and increase font weight * Constrain emote tooltip width
2023-10-22 18:38:32 -04:00
messageBuffer.add(parsedIRCMessage);
2021-10-20 05:12:15 -04:00
break;
case Command.clearChat:
// Track the banned/timed-out user so the chat can offer an unban
// action only when applicable. target-user-id is absent for a
// whole-chat clear.
final clearedUserId = parsedIRCMessage.tags['target-user-id'];
if (clearedUserId != null) {
final banDuration = parsedIRCMessage.tags['ban-duration'];
final seconds = banDuration != null
? int.tryParse(banDuration)
: null;
if (seconds != null) {
_bannedUserTracker.recordTimeout(
clearedUserId,
Duration(seconds: seconds),
DateTime.now(),
);
} else {
_bannedUserTracker.recordBan(clearedUserId);
}
}
2022-07-27 16:25:34 -04:00
IRCMessage.clearChat(
messages: _messages,
Update to Material 3/You and other changes/fixes (#280) * Use adaptive refresh indicators * Add new message count indicator in chat * Sync pubspec.lock * Initial migration to material 3 * Restore default bottom sheet style * Remove FrostyListTile and reset styles * Use "Clear" button for all search history * Add `require_trailing_commas` lint rule * Exclude generated files from linter * Use ListView for safe area support in bottom sheet * Add initial dark theme * Make sizing and units consistent * Update onbaording spacings & copy * Migrate to default material 3 buttons * Add headers to chat details bottom sheet * Simplify token log in method * Use bottom sheet for account options * Remove `AnimateScale` widget * Tweak search paddings * Update message spacing divisions * Upgrade packages * Update message spacing divisions * Regenerate splash screens * Update Inter & add google fonts * Add initial material 3 themes * Use adaptive alert dialogs * Revert to oultined inputs * Fix tooltip message * Revert add google_fonts * Improve themes and various styling * Convert categories grid to list * Tweak stream card thumbnail radii * Tweak settings headers * Left align floating snackbars * Tweak search header padding * Fix profile pics occasionally not rounded * Use profile pic for settings button if logged in * Redesign sleep timer * Use divider theme and reduce thickness * Use 0 letter spacing for tab bar titles * Redesign category streams list * Add border to tooltips * Increase category card font weight * Use outlined icon btton for chat user modal * Reduce profile pic radius in search results * Fix scrolll to top button safe area * Add support for reply threads * Reduce tooltip and snackbar border thickness * Rebuild reply threads on new messages * Upgrade packages (iOS) * Reduce font weight for all chat alerts * Use tabbars for pageview * Add dividers everywhere * Revert "Add dividers everywhere" This reverts commit 5f0d349fdbb0afad313cfb88e8c359714b3ea87a. * Remove fill from inputs * Add dividers to settings * Use segmented button for settings list * Add scrollbar to lists with scrollcontroller * Redesign badge/emote tooltip * Remove outline from chat user modal buttons * Remove divider from reply thread * Use tap for chatters list and increase font weight * Constrain emote tooltip width
2023-10-22 18:38:32 -04:00
bufferedMessages: messageBuffer,
2022-07-27 16:25:34 -04:00
ircMessage: parsedIRCMessage,
);
// clearChat marks messages in place, which doesn't notify the
// observable list; reassign so renderMessages recomputes and the
// ban/timeout strike-through shows without waiting for the next
// message.
_messages = _messages.toList().asObservable();
2021-10-20 05:12:15 -04:00
break;
case Command.clearMessage:
2022-07-27 16:25:34 -04:00
IRCMessage.clearMessage(
messages: _messages,
Update to Material 3/You and other changes/fixes (#280) * Use adaptive refresh indicators * Add new message count indicator in chat * Sync pubspec.lock * Initial migration to material 3 * Restore default bottom sheet style * Remove FrostyListTile and reset styles * Use "Clear" button for all search history * Add `require_trailing_commas` lint rule * Exclude generated files from linter * Use ListView for safe area support in bottom sheet * Add initial dark theme * Make sizing and units consistent * Update onbaording spacings & copy * Migrate to default material 3 buttons * Add headers to chat details bottom sheet * Simplify token log in method * Use bottom sheet for account options * Remove `AnimateScale` widget * Tweak search paddings * Update message spacing divisions * Upgrade packages * Update message spacing divisions * Regenerate splash screens * Update Inter & add google fonts * Add initial material 3 themes * Use adaptive alert dialogs * Revert to oultined inputs * Fix tooltip message * Revert add google_fonts * Improve themes and various styling * Convert categories grid to list * Tweak stream card thumbnail radii * Tweak settings headers * Left align floating snackbars * Tweak search header padding * Fix profile pics occasionally not rounded * Use profile pic for settings button if logged in * Redesign sleep timer * Use divider theme and reduce thickness * Use 0 letter spacing for tab bar titles * Redesign category streams list * Add border to tooltips * Increase category card font weight * Use outlined icon btton for chat user modal * Reduce profile pic radius in search results * Fix scrolll to top button safe area * Add support for reply threads * Reduce tooltip and snackbar border thickness * Rebuild reply threads on new messages * Upgrade packages (iOS) * Reduce font weight for all chat alerts * Use tabbars for pageview * Add dividers everywhere * Revert "Add dividers everywhere" This reverts commit 5f0d349fdbb0afad313cfb88e8c359714b3ea87a. * Remove fill from inputs * Add dividers to settings * Use segmented button for settings list * Add scrollbar to lists with scrollcontroller * Redesign badge/emote tooltip * Remove outline from chat user modal buttons * Remove divider from reply thread * Use tap for chatters list and increase font weight * Constrain emote tooltip width
2023-10-22 18:38:32 -04:00
bufferedMessages: messageBuffer,
2022-07-27 16:25:34 -04:00
ircMessage: parsedIRCMessage,
);
// Same as clearChat: force a re-render so the deleted message
// updates immediately rather than on the next incoming message.
_messages = _messages.toList().asObservable();
break;
case Command.roomState:
v5 (#463) * migrate to dio * ignore folders * simplify twitch api headers handling * clean up main * simplify logs * optimize profile picture fetching fixes refetches on tab switch * update claude md * refactor irc.dart * update copilot instructions with essential commands and project structure details * implement message sending state management and UI updates * refactor notification handling and add copy-paste functionality in chat * refactor AlertMessage to support vertical layout and optional padding * refactor error messages for consistency and clarity across various components * refactor chat layout to use draggable divider and improve chat width settings * refactor Uptime widget to use SharedTimerService for synchronized updates * refactor search results components to handle null future states gracefully * refactor loading indicators to use skeleton loaders for improved user experience * refactor UI components for improved layout and responsiveness, enhance skeleton loaders, and streamline padding adjustments * refactor: replace manual blur effects with BlurredContainer for consistency and reusability * refactor: enhance JavaScript execution and error handling in WebView components * refactor: replace app bar with blurred container for improved UI consistency across screens * refactor: streamline video chat layout and enhance PiP drag gesture functionality * revert some app bar changes * refactor: implement Picture-in-Picture drag functionality in VideoChat * refactor: pass currentChannelId to IRCMessage and ChatMessage for improved context * fix large thubmnail width * chore: update Gradle and Kotlin plugin versions for improved compatibility * changes from v4.10.0 branch * feat: integrate AnimatedScrollBorder for improved UI responsiveness across various screens * refactor: update SectionHeader styling and improve theme management * feat: add pinned section to StreamsList and enhance skeleton loader padding * feat: add repository guidelines for project structure, coding style, testing, and security * feat: enhance StreamCard UI with BlurredContainer and adjust border width in theme * feat: implement unfocusInput and safeRequestFocus methods to manage text field focus behavior * feat: enhance Picture-in-Picture drag interactions with haptic feedback and smooth animations * refactor: improve code formatting and readability across multiple files * feat: implement picture-in-picture mode toggle and state management for video playback * feat: reset PiP mode state when pausing video playback * feat: add custom app bar with profile picture and stream info for video chat * feat: convert multiple settings screens to use StatefulWidget and add animated scroll borders * feat: update blur configuration for adaptive alpha based on theme * fix: adjust default font size in SectionHeader widget * feat: enhance PiP mode with drag overlay instruction and UI improvements * fix: improve badge rendering with consistent margin and border for current channel * refactor: replace BackdropFilter with BlurredContainer for improved clarity and maintainability * fix: reduce background transparency in Uptime widget for better visibility * feat: enhance photo view dialog with full resolution toggle and blurred background * fix: reset chat delay to 0 when auto sync is enabled and update settings title for clarity * fix: adjust border width in theme to improve consistency * feat: add forceDarkMode option to BlurredContainer for improved theme adaptability * feat: implement offline followed channels feature with UI integration and settings option * fix: increase font size and weight for offline status text for better readability * feat: remove offline pinned channels feature and update related UI components * feat: optimize offline channels loading behavior based on expansion state * fix: improve clarity and consistency in repository guidelines formatting * feat: update full resolution URL handling and button visibility logic * feat: replace app bar with blurred version in chat-only mode and add animated scroll border * feat: refactor video chat layout for improved chat and video display in landscape mode * feat: remove bottom bar visibility setting and adjust chat layout accordingly * fix: simplify condition for displaying offline channels section in following tab * feat: enhance reply thread display with indentation and reply icon * feat: implement showModalBottomSheetWithProperFocus for improved focus handling * feat: add gradient direction support to BlurredContainer for enhanced visual effects * feat: enhance NavigationBar and Theme settings for improved visual consistency * feat: add gradient direction support to BlurredContainer in VideoChat for enhanced visual effects * chore: update .gitignore to include .cursor file for better environment management * fix: update PiP drag gesture conditions to include video paused state for better user experience * refactor: replace ScrollController with SettingsPageLayout in settings screens for improved layout management * refactor: centralize orientation handling by introducing OrientationUtils for improved readability and maintainability * refactor: replace OrientationUtils with ContextExtensions for streamlined context-based access to theme, layout, and API dependencies * refactor: improve video chat UI by adjusting title layout and adding stream info tooltips for better user experience * refactor: adjust titleSpacing in theme and navigation components for improved layout consistency * refactor: update stream info timer handling and overlay management for improved UI responsiveness * refactor: enhance stream info timer logic and overlay visibility management for chat-only mode * refactor: enhance input decoration theme in FrostyThemes for improved visual consistency and responsiveness * refactor: adjust inputDecorationTheme padding in FrostyThemes for improved visual consistency * refactor: enhance video overlay management by including video preview overlay in hideElements for improved UI consistency * refactor: improve chat bottom bar padding and video chat layout for enhanced UI consistency * refactor: adjust chat padding to account for device bottom insets for improved layout consistency * refactor: update text styles in FrostyThemes for improved visual consistency across UI components * refactor: update iOS minimum deployment target to 13.0 for improved compatibility * refactor: adjust chat bottom padding based on emote menu visibility for improved layout consistency * refactor: adjust padding values in StreamsList for improved layout consistency * refactor: replace Padding with AnimatedPadding in Chat for smoother layout transitions refactor: replace Container with AnimatedContainer in BlurredContainer for smoother animations * refactor: remove unnecessary radius property from ProfilePicture in OfflineChannelCard for cleaner code * refactor: enhance chat bottom bar suffix icon to display message delay with tooltip for improved user experience * refactor: update hint text and tooltips in chat bottom bar and search for improved clarity * refactor: simplify notification display logic and enhance chat input behavior for improved user experience * refactor: enhance layout consistency by adjusting spacing in various components across the channel and home screens * refactor: introduce LiveIndicator widget and adjust spacing in channel and video components for improved layout consistency * refactor: remove monospace font family from chat bottom bar for improved text rendering * refactor: reduce notification animation duration and change dismiss direction for improved user experience * refactor: replace VideoBar with StreamInfoBar in video components for improved layout and consistency * refactor: adjust font sizes and spacing in StreamInfoBar for improved layout consistency * refactor: standardize font sizes and update gradient stops in video components for improved visual consistency * refactor: update tooltip padding and background color in theme for improved visual consistency * refactor: enhance tooltip behavior and standardize font sizes in StreamInfoBar and related components for improved visual consistency * refactor: add showThumbnail option to LargeStreamCardSkeletonLoader for improved layout flexibility * refactor: add StreamInfoBarSkeletonLoader for improved layout consistency in stream components * refactor: add shadow effects to icons and text in StreamInfoBar and VideoOverlay for improved visual depth * refactor: update defaultOverlayOpacity to 0.0 for improved overlay behavior * fix: correct stream info text color on overlay * refactor: implement a new color picker dialog with random color generation for enhanced user experience * refactor: adjust gradient colors and stops in VideoOverlay for improved visual consistency * refactor: refine gradient colors and stops in VideoOverlay for enhanced visual clarity * refactor: add isCompact parameter to StreamInfoBar for responsive text sizing * fix: update tooltip background color to use surface color for better contrast * feat: add shared chat mode support in chat store and update StreamInfoBar for visual indication * refactor: disable debug print for IRC messages to reduce log clutter * feat: implement chat color selection feature with user color management in chat settings * refactor: replace color adjustment logic with new contrast-aware utility for chat names * refactor: simplify chat details UI by replacing list tiles with action cards and removing unused clear dialog * refactor: enhance chat details UI by improving time formatting and adding label styling to action cards * refactor: update chat color terminology to 'Username color' for clarity in UI * refactor: enhance chat details UI by introducing active chat modes display and improving layout structure * refactor: improve chat details layout by replacing ListTile with Padding and adding a Divider for better visual separation * refactor: remove chat notifications positioning setting and adjust notification alignment in video chat * refactor: streamline StreamInfoBar component by consolidating offline handling and improving layout for better readability * refactor: enhance StreamInfoBar by adding tooltip for streamer name and improving text overflow handling * refactor: adjust tooltip display duration in StreamInfoBar and update theme configuration * refactor: adjust margin and padding in StreamCard for improved layout consistency * chore: update dependencies in pubspec.yaml and pubspec.lock for Firebase and other packages * template * chore: update iOS platform version to 15.0 and Firebase dependencies to 12.2.0 * refactor: simplify StreamInfoBar layout by reducing nested widgets and improving text color handling * format * feat: enhance Channel model and StreamInfoBar to support offline channel details * feat: add offline indicator and improve StreamInfoBar layout for better offline channel display * fix: adjust icon color opacity in StreamInfoBar for improved visibility * feat: enhance dismissal animation in FrostyPhotoViewDialog to track swipe direction * docs: update copilot instructions for clarity and additional error handling details * refactor: optimize latency tooltip layout and improve offline indicator styling in VideoOverlay * feat: implement shared chat asset fetching and participant management in ChatAssetsStore * refactor: replace Observer with Builder for improved widget rebuilding in VideoOverlay * refactor: update StreamInfoBar border styling and adjust layout in VideoOverlay for improved visual consistency * feat: add showTextShadows property to StreamInfoBar for customizable text shadow display * refactor: adjust layout in VideoOverlay by adding padding to improve spacing and visual consistency * refactor: enhance VideoOverlay gradients and layout for improved visual hierarchy and user experience * refactor: reduce vertical padding in VideoOverlay for improved layout consistency * refactor: remove overlay opacity settings from VideoSettings and SettingsStore for simplification * refactor: improve text overlay transition in VideoChat for better user experience * Revert "refactor: improve text overlay transition in VideoChat for better user experience" This reverts commit fd16ff5ec30ec266157e5c8a9d4a6090c91717f6. * refactor: wrap videoOverlay in ColoredBox for improved layout handling * refactor: optimize animation duration and transition curves in VideoChat for smoother interactions * refactor: dispose searchScrollController in HomeStoreBase to prevent memory leaks * refactor: simplify gradient definitions in VideoOverlay for improved readability and maintainability * refactor: remove 'Offline' text overlay from VideoOverlay for cleaner UI * refactor: add refresh functionality for assets in ChatDetails with loading indicators * refactor: update visibility conditions for uptime, viewer count, and category display in StreamInfoBar * refactor: replace AlertDialog with FrostyDialog for consistent dialog styling across the application * refactor: enhance layout handling in FrostyPageView to prevent overflow during height transitions * refactor: replace ColorPickerDialog with AccentColorPickerDialog for improved color selection experience * refactor: replace theme and accent color settings with dedicated components for improved modularity and readability * refactor: replace ElevatedButton with TextButton for consistent button styling across dialogs * refactor: integrate MobX Observer for reactive state management in settings widgets * refactor: update theme and dialog components for improved styling and consistency * refactor: enhance dialog styling with rounded corners and border in theme configuration * refactor: improve dialog messages for unauthorized access handling * refactor: update bodyLarge text style in theme configuration to include font weight * refactor: standardize Divider usage and adjust theme styles for improved consistency * refactor: adjust Divider properties and theme styles for enhanced visual consistency * chore: remove GEMINI.md file as it is no longer needed for project documentation * refactor: enhance token validation and reconnect logic in AuthBase for improved error handling * format * refactor: integrate landscape cutout settings into VideoChat layout for improved responsiveness * refactor: implement app lifecycle handling in VideoChat and enhance stream info update logic in VideoStore * refactor: update landscape cutout conditionals in VideoChat layout for improved responsiveness * update AGENTS.md * add scrollbar to search * fix scrolling exception * update CLAUDE.md * 5 auth reconnect attemps then log out * increase reply max lines to 2 * simplify and improve reply formatting * add prime icon * better draggable divider * support draggable divider in fullscreen overlay chat * add text shadow in fullscreen chat overlay mode * format * add landscape checks * video store optimization attempts * Dispose WebViewController and remove JavaScript channels properly * Track and cleanup all MutationObservers to prevent accumulation * Throttle latency updates to once per 5 seconds (reduces CPU load) * Add timeout protection and null checks for robustness * Prevent duplicate event listeners on page reloads * double tap divider to reset * Revert "video store optimization attempts" This reverts commit b1df7b0de473543283211a489dca698d9d241857. * optimize video store attempt 2 * Revert "double tap divider to reset" This reverts commit aeb26a433500ec71f822794835e927018ee59e1e. * optimize latency listener to open the menu and check every 20 secconds * more optimizations * hard refresh * abbreviate latency * fix lint * improve hide default overlay * fix chat no longer reconnecting with chat delay * refine chat alerts * fix historical message missing badges and emotes on initial connection * parallelize * revert * add reconnect button inline action * refactor: replace Scrollbar with FrostyScrollbar across chat and settings screens for consistent styling * tweak chat details menu * add scrollbar to release notes, renames for consistency * fix duplicate message case * fix chat delay alerts in auto sync mode * add regex for numeric strings and enhance display name formatting logic * exterminate borders * refactor: simplify active chat modes display in chat details screen * feat: enhance chat input button with delay notification and disable state * fix: wrap chat in SafeArea to prevent UI overflow issues * refactor: remove divider line from video chat and update draggable divider visibility logic * persist overlay in pip mode * fix: update chat delay handling and notifications in chat bottom bar * fix: update chat overlay visibility logic to respect fullscreen settings * tap to show deleted message * fix: prevent accidental chat scrolling when accessing system UI in landscape mode * show latency in portrait * fix: enhance chat delay notifications with dynamic delay time * docs: update CLAUDE.md for improved environment variable instructions and architecture overview * fix: improve chat delay countdown management and message handling * add preliminary release notes * remove agents.md * update lockfile * add initial multi chat feature * add option to persist multi chat tabs * add remove confirmation dialog * improve add chat design * lazy-load tabs * create global assets store to dedupe global asset fetching * improve tab design/styles * update notes * use frosty dialog * update claude md * tweak * add ability to reorder tabs * resolve conflict * merge cleanup * format * update release notes * add chat delay sync completion tracking to prevent countdown re-appearance * add tests * fix * update release notes * bump
2026-01-01 22:28:17 -05:00
chatDetailsStore.roomState = chatDetailsStore.roomState
.fromIRCMessage(parsedIRCMessage);
continue;
case Command.userState:
_userState = _userState.fromIRCMessage(parsedIRCMessage);
feat(video,chat): native player, ad-break awareness, chat send/delay reliability, and tab redesign (#567) Squash-merge commit. Covers four areas: native video player, chat reliability, multi-tab, and hardening. ## Native video player - Direct HLS playback via `better_native_video_player` (forked from `plug-and-pay/flutter-native-video-player`, patched on `frosty-patches` branch) - Twitch GQL playback token fetching with platform cookie extraction (iOS Swift + Android Kotlin plugins) for authenticated streams - Quality selection (source, 720p, 480p, 360p, 160p, audio-only) persisted per channel - Picture-in-picture: iOS automatic inline PiP, Android auto-PiP on API 31+ guarded against older devices - Latency polling, chat latency sync, stall detection/recovery, startup auto-pause recovery, watchdog timers - **Twitch stitched-ad break detection** (HLS `EXT-X-DATERANGE`) on both platforms, emitting `adBreakChanged` so the host suspends latency/stall recovery and chat sync during ads (program-date-time is unreliable then). Matches `CLASS="twitch-stitched-ad"` / `ID="stitched-ad-"` **and** the `X-TV-TWITCH-AD-*` attribute prefix (the durable signal streamlink/yt-dlp use) - Shared `VideoPlayerInterface` so WebView and native paths are interchangeable via settings toggle - `PlaybackAccessToken` model, `TwitchGqlApi` client ## Chat delay & send reliability - **Optimistic send-finalize**: Twitch acks a sent message with a per-PRIVMSG USERSTATE (not an echo), which it can intermittently drop — more so under a long chat delay. A missing ack no longer shows a false "message may not have been sent" error; the send is finalized optimistically (local echo rendered), and only genuine rejection NOTICEs surface an error. Ack timeout scaled by the chat delay. - **Per-line chat-delay bypass**: control/state lines (USERSTATE/ROOMSTATE/GLOBALUSERSTATE), rejection NOTICEs, the reconnect notice, and untagged server lines bypass the delay so send-acks and PONGs aren't stalled; only displayable chat content is delayed, staying in sync with delayed video. - **Measured chat bottom-bar height**: the message list reflows to the composer's real measured height, fixing the input overlapping messages when a long message expands it (replaces a fixed-constant estimate). - IRC tag parsing handles valueless and escaped tags per the IRCv3 message-tags spec (fixes a recent-messages RangeError on certain tags). ## Chat / multi-tab - Redesigned tab chips: unread dot indicator, chips dim until WebSocket connects - Animated tab options popover replacing `MenuAnchor` (no animation hook in Flutter 3.44) - Simplified `ChatTabs` from `StatefulWidget` to `StatelessWidget` - Focus-current-channel fade bump to 0.55; section-header alpha lifted to match the muted-label tier - `addTab` now calls `setActiveTab` to snapshot outgoing tab's `lastSeenMessageId` — fixes spurious unread dots after adding a tab - `onActivateSourceTab` threaded into `ChatUserModal` so Reply in merged mode switches to the correct source tab's composer ## Bug fixes and hardening - **Reverted the experimental iOS low-latency mode** (5s live-edge join + 1.05x catch-up): AVPlayer can't sustain <~18s on Twitch (declared `TARGETDURATION:6` paces playlist refreshes), and the offset starved the buffer into pause-on-launch. Default join distance restored. - Fork (Android): **cap `BEHIND_LIVE_WINDOW` recovery** so a stream repeatedly falling off the live window can't silently re-prepare forever; emits `error` on exhaustion so the host recovery ladder takes over - Guard all Android `setAutoPipMode` calls with `_autoPipAvailable` — prevents `PlatformException` on Android 8–11; check `_disposed` after `isAutoPipAvailable` await to prevent post-dispose auto-PiP re-enable - Remove `_isInPipMode` guard from `_onPaused` so `_paused` tracks actual state, fixing PiP play/pause toggle getting stuck - Tighten iOS cookie domain check to exact `twitch.tv` / `.twitch.tv` suffix - Invalidate the stored web session token when Twitch rejects it with a 401 (profile card flips back to unlinked; future loads skip the doomed authenticated request), and re-extract the cookie on launch when logged in without a linked session - Send `play_session_id` and `player_backend=mediaplayer` to Usher, matching the web client / streamlink - Fork (iOS): restore program-date-time latency measurement (a prior rev measured distance to the manifest edge, reading ~0s and silently disabling high-latency recovery / chat-delay auto-sync); release platform views on dispose (per-stream view + AVPlayerViewController leak), track the observed AVPlayerItem for KVO removal (sibling-view crash), main-thread seek results, resolve superseded load futures - Fork (Android): clean up method handlers orphaned by PiP-time view disposal (leaked audio-focus listeners), drop the live-offset re-anchoring seekTo on metadata updates (latency creep), restore pre-duck volume, respect user pause in the stall watchdog, resolve superseded load futures - Deep review pass: expire the quality-switch flag so stall recovery isn't disabled for the session, cap latency-driven recovery (clock-skew loop), generation-guard the error overlay, two-strike offline confirmation, controller null-safety on quality switch - Tighten `/me` local-echo match (no longer renders `/meow ...` as an action); clear pending send text on disconnect ## Web / docs - Remove stale Cloudflare Images binding from `wrangler.jsonc` (covered by `images.unoptimized: true`) - Correct `web/AGENTS.md` Cache Components claim (feature not enabled) - Repo and agent config cleanup ## Test plan - [x] `flutter analyze` — clean (frosty + plugin lib) - [x] `flutter test` — 319/319 pass (adds `ChatLatencySync`, `StreamInfoPoller`, video timing invariants, `PlaybackAccessToken`, IRC tag parsing) - [x] Android plugin Kotlin compiles against the bumped fork rev - [ ] Native player plays live streams on iOS and Android - [ ] Quality switching works and persists across channel reopens - [ ] PiP enters/exits correctly; pause/resume toggle in PiP window works - [ ] Audio-only mode does not crash on Android < API 31 - [ ] Sending under a long synced chat delay no longer shows a false "may not have been sent" error - [ ] Long composer text reflows the message list (no input/message overlap) - [ ] Multi-tab: adding a tab does not mark previous tab as unread - [ ] Merged chat: Reply from user modal targets the correct tab's composer 🤖 Generated with [Claude Code](https://claude.com/claude-code)
2026-06-13 17:06:24 -04:00
// A USERSTATE following our PRIVMSG confirms the send. Finalize
// regardless of whether a local echo was pre-built — gating this on
// `toSend` left the player stuck "sending" (and firing a false
// "may not have been sent") whenever the message went out before
// this session's first USERSTATE populated `_userState`.
if (_isWaitingForAck) {
_finalizeSend(parsedIRCMessage.tags['id']);
}
break;
case Command.globalUserState:
final setIds = parsedIRCMessage.tags['emote-sets']?.split(',');
if (setIds != null) {
2022-01-15 15:46:46 -05:00
assetsStore.userEmotesFuture(
emoteSets: setIds,
headers: auth.headersTwitch,
onError: (error) {
debugPrint(error.toString());
return <Emote>[];
},
);
}
continue;
case Command.none:
debugPrint('Unknown command: ${parsedIRCMessage.command}');
continue;
}
if (!_autoScroll) {
// While autoscroll is disabled, occasionally move messages from the buffer to the messages to prevent a memory leak.
Update to Material 3/You and other changes/fixes (#280) * Use adaptive refresh indicators * Add new message count indicator in chat * Sync pubspec.lock * Initial migration to material 3 * Restore default bottom sheet style * Remove FrostyListTile and reset styles * Use "Clear" button for all search history * Add `require_trailing_commas` lint rule * Exclude generated files from linter * Use ListView for safe area support in bottom sheet * Add initial dark theme * Make sizing and units consistent * Update onbaording spacings & copy * Migrate to default material 3 buttons * Add headers to chat details bottom sheet * Simplify token log in method * Use bottom sheet for account options * Remove `AnimateScale` widget * Tweak search paddings * Update message spacing divisions * Upgrade packages * Update message spacing divisions * Regenerate splash screens * Update Inter & add google fonts * Add initial material 3 themes * Use adaptive alert dialogs * Revert to oultined inputs * Fix tooltip message * Revert add google_fonts * Improve themes and various styling * Convert categories grid to list * Tweak stream card thumbnail radii * Tweak settings headers * Left align floating snackbars * Tweak search header padding * Fix profile pics occasionally not rounded * Use profile pic for settings button if logged in * Redesign sleep timer * Use divider theme and reduce thickness * Use 0 letter spacing for tab bar titles * Redesign category streams list * Add border to tooltips * Increase category card font weight * Use outlined icon btton for chat user modal * Reduce profile pic radius in search results * Fix scrolll to top button safe area * Add support for reply threads * Reduce tooltip and snackbar border thickness * Rebuild reply threads on new messages * Upgrade packages (iOS) * Reduce font weight for all chat alerts * Use tabbars for pageview * Add dividers everywhere * Revert "Add dividers everywhere" This reverts commit 5f0d349fdbb0afad313cfb88e8c359714b3ea87a. * Remove fill from inputs * Add dividers to settings * Use segmented button for settings list * Add scrollbar to lists with scrollcontroller * Redesign badge/emote tooltip * Remove outline from chat user modal buttons * Remove divider from reply thread * Use tap for chatters list and increase font weight * Constrain emote tooltip width
2023-10-22 18:38:32 -04:00
if (messageBuffer.length >= _messagesToRemove) {
_messages.addAll(messageBuffer);
messageBuffer.clear();
}
}
// If the message limit is reached, remove the oldest messages.
if (_messages.length >= _messageLimit) {
_messages = _messages.sublist(_messagesToRemove).asObservable();
}
} else if (message == 'PING :tmi.twitch.tv') {
_channel?.sink.add('PONG :tmi.twitch.tv');
return;
} else if (message.contains('Welcome, GLHF!')) {
Update to Material 3/You and other changes/fixes (#280) * Use adaptive refresh indicators * Add new message count indicator in chat * Sync pubspec.lock * Initial migration to material 3 * Restore default bottom sheet style * Remove FrostyListTile and reset styles * Use "Clear" button for all search history * Add `require_trailing_commas` lint rule * Exclude generated files from linter * Use ListView for safe area support in bottom sheet * Add initial dark theme * Make sizing and units consistent * Update onbaording spacings & copy * Migrate to default material 3 buttons * Add headers to chat details bottom sheet * Simplify token log in method * Use bottom sheet for account options * Remove `AnimateScale` widget * Tweak search paddings * Update message spacing divisions * Upgrade packages * Update message spacing divisions * Regenerate splash screens * Update Inter & add google fonts * Add initial material 3 themes * Use adaptive alert dialogs * Revert to oultined inputs * Fix tooltip message * Revert add google_fonts * Improve themes and various styling * Convert categories grid to list * Tweak stream card thumbnail radii * Tweak settings headers * Left align floating snackbars * Tweak search header padding * Fix profile pics occasionally not rounded * Use profile pic for settings button if logged in * Redesign sleep timer * Use divider theme and reduce thickness * Use 0 letter spacing for tab bar titles * Redesign category streams list * Add border to tooltips * Increase category card font weight * Use outlined icon btton for chat user modal * Reduce profile pic radius in search results * Fix scrolll to top button safe area * Add support for reply threads * Reduce tooltip and snackbar border thickness * Rebuild reply threads on new messages * Upgrade packages (iOS) * Reduce font weight for all chat alerts * Use tabbars for pageview * Add dividers everywhere * Revert "Add dividers everywhere" This reverts commit 5f0d349fdbb0afad313cfb88e8c359714b3ea87a. * Remove fill from inputs * Add dividers to settings * Use segmented button for settings list * Add scrollbar to lists with scrollcontroller * Redesign badge/emote tooltip * Remove outline from chat user modal buttons * Remove divider from reply thread * Use tap for chatters list and increase font weight * Constrain emote tooltip width
2023-10-22 18:38:32 -04:00
messageBuffer.add(
IRCMessage.createNotice(
message:
"Welcome to ${getReadableName(displayName, channelName)}'s chat!",
Update to Material 3/You and other changes/fixes (#280) * Use adaptive refresh indicators * Add new message count indicator in chat * Sync pubspec.lock * Initial migration to material 3 * Restore default bottom sheet style * Remove FrostyListTile and reset styles * Use "Clear" button for all search history * Add `require_trailing_commas` lint rule * Exclude generated files from linter * Use ListView for safe area support in bottom sheet * Add initial dark theme * Make sizing and units consistent * Update onbaording spacings & copy * Migrate to default material 3 buttons * Add headers to chat details bottom sheet * Simplify token log in method * Use bottom sheet for account options * Remove `AnimateScale` widget * Tweak search paddings * Update message spacing divisions * Upgrade packages * Update message spacing divisions * Regenerate splash screens * Update Inter & add google fonts * Add initial material 3 themes * Use adaptive alert dialogs * Revert to oultined inputs * Fix tooltip message * Revert add google_fonts * Improve themes and various styling * Convert categories grid to list * Tweak stream card thumbnail radii * Tweak settings headers * Left align floating snackbars * Tweak search header padding * Fix profile pics occasionally not rounded * Use profile pic for settings button if logged in * Redesign sleep timer * Use divider theme and reduce thickness * Use 0 letter spacing for tab bar titles * Redesign category streams list * Add border to tooltips * Increase category card font weight * Use outlined icon btton for chat user modal * Reduce profile pic radius in search results * Fix scrolll to top button safe area * Add support for reply threads * Reduce tooltip and snackbar border thickness * Rebuild reply threads on new messages * Upgrade packages (iOS) * Reduce font weight for all chat alerts * Use tabbars for pageview * Add dividers everywhere * Revert "Add dividers everywhere" This reverts commit 5f0d349fdbb0afad313cfb88e8c359714b3ea87a. * Remove fill from inputs * Add dividers to settings * Use segmented button for settings list * Add scrollbar to lists with scrollcontroller * Redesign badge/emote tooltip * Remove outline from chat user modal buttons * Remove divider from reply thread * Use tap for chatters list and increase font weight * Constrain emote tooltip width
2023-10-22 18:38:32 -04:00
),
);
// Activate the message buffer.
v5 (#463) * migrate to dio * ignore folders * simplify twitch api headers handling * clean up main * simplify logs * optimize profile picture fetching fixes refetches on tab switch * update claude md * refactor irc.dart * update copilot instructions with essential commands and project structure details * implement message sending state management and UI updates * refactor notification handling and add copy-paste functionality in chat * refactor AlertMessage to support vertical layout and optional padding * refactor error messages for consistency and clarity across various components * refactor chat layout to use draggable divider and improve chat width settings * refactor Uptime widget to use SharedTimerService for synchronized updates * refactor search results components to handle null future states gracefully * refactor loading indicators to use skeleton loaders for improved user experience * refactor UI components for improved layout and responsiveness, enhance skeleton loaders, and streamline padding adjustments * refactor: replace manual blur effects with BlurredContainer for consistency and reusability * refactor: enhance JavaScript execution and error handling in WebView components * refactor: replace app bar with blurred container for improved UI consistency across screens * refactor: streamline video chat layout and enhance PiP drag gesture functionality * revert some app bar changes * refactor: implement Picture-in-Picture drag functionality in VideoChat * refactor: pass currentChannelId to IRCMessage and ChatMessage for improved context * fix large thubmnail width * chore: update Gradle and Kotlin plugin versions for improved compatibility * changes from v4.10.0 branch * feat: integrate AnimatedScrollBorder for improved UI responsiveness across various screens * refactor: update SectionHeader styling and improve theme management * feat: add pinned section to StreamsList and enhance skeleton loader padding * feat: add repository guidelines for project structure, coding style, testing, and security * feat: enhance StreamCard UI with BlurredContainer and adjust border width in theme * feat: implement unfocusInput and safeRequestFocus methods to manage text field focus behavior * feat: enhance Picture-in-Picture drag interactions with haptic feedback and smooth animations * refactor: improve code formatting and readability across multiple files * feat: implement picture-in-picture mode toggle and state management for video playback * feat: reset PiP mode state when pausing video playback * feat: add custom app bar with profile picture and stream info for video chat * feat: convert multiple settings screens to use StatefulWidget and add animated scroll borders * feat: update blur configuration for adaptive alpha based on theme * fix: adjust default font size in SectionHeader widget * feat: enhance PiP mode with drag overlay instruction and UI improvements * fix: improve badge rendering with consistent margin and border for current channel * refactor: replace BackdropFilter with BlurredContainer for improved clarity and maintainability * fix: reduce background transparency in Uptime widget for better visibility * feat: enhance photo view dialog with full resolution toggle and blurred background * fix: reset chat delay to 0 when auto sync is enabled and update settings title for clarity * fix: adjust border width in theme to improve consistency * feat: add forceDarkMode option to BlurredContainer for improved theme adaptability * feat: implement offline followed channels feature with UI integration and settings option * fix: increase font size and weight for offline status text for better readability * feat: remove offline pinned channels feature and update related UI components * feat: optimize offline channels loading behavior based on expansion state * fix: improve clarity and consistency in repository guidelines formatting * feat: update full resolution URL handling and button visibility logic * feat: replace app bar with blurred version in chat-only mode and add animated scroll border * feat: refactor video chat layout for improved chat and video display in landscape mode * feat: remove bottom bar visibility setting and adjust chat layout accordingly * fix: simplify condition for displaying offline channels section in following tab * feat: enhance reply thread display with indentation and reply icon * feat: implement showModalBottomSheetWithProperFocus for improved focus handling * feat: add gradient direction support to BlurredContainer for enhanced visual effects * feat: enhance NavigationBar and Theme settings for improved visual consistency * feat: add gradient direction support to BlurredContainer in VideoChat for enhanced visual effects * chore: update .gitignore to include .cursor file for better environment management * fix: update PiP drag gesture conditions to include video paused state for better user experience * refactor: replace ScrollController with SettingsPageLayout in settings screens for improved layout management * refactor: centralize orientation handling by introducing OrientationUtils for improved readability and maintainability * refactor: replace OrientationUtils with ContextExtensions for streamlined context-based access to theme, layout, and API dependencies * refactor: improve video chat UI by adjusting title layout and adding stream info tooltips for better user experience * refactor: adjust titleSpacing in theme and navigation components for improved layout consistency * refactor: update stream info timer handling and overlay management for improved UI responsiveness * refactor: enhance stream info timer logic and overlay visibility management for chat-only mode * refactor: enhance input decoration theme in FrostyThemes for improved visual consistency and responsiveness * refactor: adjust inputDecorationTheme padding in FrostyThemes for improved visual consistency * refactor: enhance video overlay management by including video preview overlay in hideElements for improved UI consistency * refactor: improve chat bottom bar padding and video chat layout for enhanced UI consistency * refactor: adjust chat padding to account for device bottom insets for improved layout consistency * refactor: update text styles in FrostyThemes for improved visual consistency across UI components * refactor: update iOS minimum deployment target to 13.0 for improved compatibility * refactor: adjust chat bottom padding based on emote menu visibility for improved layout consistency * refactor: adjust padding values in StreamsList for improved layout consistency * refactor: replace Padding with AnimatedPadding in Chat for smoother layout transitions refactor: replace Container with AnimatedContainer in BlurredContainer for smoother animations * refactor: remove unnecessary radius property from ProfilePicture in OfflineChannelCard for cleaner code * refactor: enhance chat bottom bar suffix icon to display message delay with tooltip for improved user experience * refactor: update hint text and tooltips in chat bottom bar and search for improved clarity * refactor: simplify notification display logic and enhance chat input behavior for improved user experience * refactor: enhance layout consistency by adjusting spacing in various components across the channel and home screens * refactor: introduce LiveIndicator widget and adjust spacing in channel and video components for improved layout consistency * refactor: remove monospace font family from chat bottom bar for improved text rendering * refactor: reduce notification animation duration and change dismiss direction for improved user experience * refactor: replace VideoBar with StreamInfoBar in video components for improved layout and consistency * refactor: adjust font sizes and spacing in StreamInfoBar for improved layout consistency * refactor: standardize font sizes and update gradient stops in video components for improved visual consistency * refactor: update tooltip padding and background color in theme for improved visual consistency * refactor: enhance tooltip behavior and standardize font sizes in StreamInfoBar and related components for improved visual consistency * refactor: add showThumbnail option to LargeStreamCardSkeletonLoader for improved layout flexibility * refactor: add StreamInfoBarSkeletonLoader for improved layout consistency in stream components * refactor: add shadow effects to icons and text in StreamInfoBar and VideoOverlay for improved visual depth * refactor: update defaultOverlayOpacity to 0.0 for improved overlay behavior * fix: correct stream info text color on overlay * refactor: implement a new color picker dialog with random color generation for enhanced user experience * refactor: adjust gradient colors and stops in VideoOverlay for improved visual consistency * refactor: refine gradient colors and stops in VideoOverlay for enhanced visual clarity * refactor: add isCompact parameter to StreamInfoBar for responsive text sizing * fix: update tooltip background color to use surface color for better contrast * feat: add shared chat mode support in chat store and update StreamInfoBar for visual indication * refactor: disable debug print for IRC messages to reduce log clutter * feat: implement chat color selection feature with user color management in chat settings * refactor: replace color adjustment logic with new contrast-aware utility for chat names * refactor: simplify chat details UI by replacing list tiles with action cards and removing unused clear dialog * refactor: enhance chat details UI by improving time formatting and adding label styling to action cards * refactor: update chat color terminology to 'Username color' for clarity in UI * refactor: enhance chat details UI by introducing active chat modes display and improving layout structure * refactor: improve chat details layout by replacing ListTile with Padding and adding a Divider for better visual separation * refactor: remove chat notifications positioning setting and adjust notification alignment in video chat * refactor: streamline StreamInfoBar component by consolidating offline handling and improving layout for better readability * refactor: enhance StreamInfoBar by adding tooltip for streamer name and improving text overflow handling * refactor: adjust tooltip display duration in StreamInfoBar and update theme configuration * refactor: adjust margin and padding in StreamCard for improved layout consistency * chore: update dependencies in pubspec.yaml and pubspec.lock for Firebase and other packages * template * chore: update iOS platform version to 15.0 and Firebase dependencies to 12.2.0 * refactor: simplify StreamInfoBar layout by reducing nested widgets and improving text color handling * format * feat: enhance Channel model and StreamInfoBar to support offline channel details * feat: add offline indicator and improve StreamInfoBar layout for better offline channel display * fix: adjust icon color opacity in StreamInfoBar for improved visibility * feat: enhance dismissal animation in FrostyPhotoViewDialog to track swipe direction * docs: update copilot instructions for clarity and additional error handling details * refactor: optimize latency tooltip layout and improve offline indicator styling in VideoOverlay * feat: implement shared chat asset fetching and participant management in ChatAssetsStore * refactor: replace Observer with Builder for improved widget rebuilding in VideoOverlay * refactor: update StreamInfoBar border styling and adjust layout in VideoOverlay for improved visual consistency * feat: add showTextShadows property to StreamInfoBar for customizable text shadow display * refactor: adjust layout in VideoOverlay by adding padding to improve spacing and visual consistency * refactor: enhance VideoOverlay gradients and layout for improved visual hierarchy and user experience * refactor: reduce vertical padding in VideoOverlay for improved layout consistency * refactor: remove overlay opacity settings from VideoSettings and SettingsStore for simplification * refactor: improve text overlay transition in VideoChat for better user experience * Revert "refactor: improve text overlay transition in VideoChat for better user experience" This reverts commit fd16ff5ec30ec266157e5c8a9d4a6090c91717f6. * refactor: wrap videoOverlay in ColoredBox for improved layout handling * refactor: optimize animation duration and transition curves in VideoChat for smoother interactions * refactor: dispose searchScrollController in HomeStoreBase to prevent memory leaks * refactor: simplify gradient definitions in VideoOverlay for improved readability and maintainability * refactor: remove 'Offline' text overlay from VideoOverlay for cleaner UI * refactor: add refresh functionality for assets in ChatDetails with loading indicators * refactor: update visibility conditions for uptime, viewer count, and category display in StreamInfoBar * refactor: replace AlertDialog with FrostyDialog for consistent dialog styling across the application * refactor: enhance layout handling in FrostyPageView to prevent overflow during height transitions * refactor: replace ColorPickerDialog with AccentColorPickerDialog for improved color selection experience * refactor: replace theme and accent color settings with dedicated components for improved modularity and readability * refactor: replace ElevatedButton with TextButton for consistent button styling across dialogs * refactor: integrate MobX Observer for reactive state management in settings widgets * refactor: update theme and dialog components for improved styling and consistency * refactor: enhance dialog styling with rounded corners and border in theme configuration * refactor: improve dialog messages for unauthorized access handling * refactor: update bodyLarge text style in theme configuration to include font weight * refactor: standardize Divider usage and adjust theme styles for improved consistency * refactor: adjust Divider properties and theme styles for enhanced visual consistency * chore: remove GEMINI.md file as it is no longer needed for project documentation * refactor: enhance token validation and reconnect logic in AuthBase for improved error handling * format * refactor: integrate landscape cutout settings into VideoChat layout for improved responsiveness * refactor: implement app lifecycle handling in VideoChat and enhance stream info update logic in VideoStore * refactor: update landscape cutout conditionals in VideoChat layout for improved responsiveness * update AGENTS.md * add scrollbar to search * fix scrolling exception * update CLAUDE.md * 5 auth reconnect attemps then log out * increase reply max lines to 2 * simplify and improve reply formatting * add prime icon * better draggable divider * support draggable divider in fullscreen overlay chat * add text shadow in fullscreen chat overlay mode * format * add landscape checks * video store optimization attempts * Dispose WebViewController and remove JavaScript channels properly * Track and cleanup all MutationObservers to prevent accumulation * Throttle latency updates to once per 5 seconds (reduces CPU load) * Add timeout protection and null checks for robustness * Prevent duplicate event listeners on page reloads * double tap divider to reset * Revert "video store optimization attempts" This reverts commit b1df7b0de473543283211a489dca698d9d241857. * optimize video store attempt 2 * Revert "double tap divider to reset" This reverts commit aeb26a433500ec71f822794835e927018ee59e1e. * optimize latency listener to open the menu and check every 20 secconds * more optimizations * hard refresh * abbreviate latency * fix lint * improve hide default overlay * fix chat no longer reconnecting with chat delay * refine chat alerts * fix historical message missing badges and emotes on initial connection * parallelize * revert * add reconnect button inline action * refactor: replace Scrollbar with FrostyScrollbar across chat and settings screens for consistent styling * tweak chat details menu * add scrollbar to release notes, renames for consistency * fix duplicate message case * fix chat delay alerts in auto sync mode * add regex for numeric strings and enhance display name formatting logic * exterminate borders * refactor: simplify active chat modes display in chat details screen * feat: enhance chat input button with delay notification and disable state * fix: wrap chat in SafeArea to prevent UI overflow issues * refactor: remove divider line from video chat and update draggable divider visibility logic * persist overlay in pip mode * fix: update chat delay handling and notifications in chat bottom bar * fix: update chat overlay visibility logic to respect fullscreen settings * tap to show deleted message * fix: prevent accidental chat scrolling when accessing system UI in landscape mode * show latency in portrait * fix: enhance chat delay notifications with dynamic delay time * docs: update CLAUDE.md for improved environment variable instructions and architecture overview * fix: improve chat delay countdown management and message handling * add preliminary release notes * remove agents.md * update lockfile * add initial multi chat feature * add option to persist multi chat tabs * add remove confirmation dialog * improve add chat design * lazy-load tabs * create global assets store to dedupe global asset fetching * improve tab design/styles * update notes * use frosty dialog * update claude md * tweak * add ability to reorder tabs * resolve conflict * merge cleanup * format * update release notes * add chat delay sync completion tracking to prevent countdown re-appearance * add tests * fix * update release notes * bump
2026-01-01 22:28:17 -05:00
// Cancel any existing timer before creating a new one to prevent duplicates on reconnect.
_messageBufferTimer?.cancel();
// Create a timer that will add messages from the buffer every 200 milliseconds.
_messageBufferTimer = Timer.periodic(
const Duration(milliseconds: 200),
(timer) => addMessages(),
);
v5 (#463) * migrate to dio * ignore folders * simplify twitch api headers handling * clean up main * simplify logs * optimize profile picture fetching fixes refetches on tab switch * update claude md * refactor irc.dart * update copilot instructions with essential commands and project structure details * implement message sending state management and UI updates * refactor notification handling and add copy-paste functionality in chat * refactor AlertMessage to support vertical layout and optional padding * refactor error messages for consistency and clarity across various components * refactor chat layout to use draggable divider and improve chat width settings * refactor Uptime widget to use SharedTimerService for synchronized updates * refactor search results components to handle null future states gracefully * refactor loading indicators to use skeleton loaders for improved user experience * refactor UI components for improved layout and responsiveness, enhance skeleton loaders, and streamline padding adjustments * refactor: replace manual blur effects with BlurredContainer for consistency and reusability * refactor: enhance JavaScript execution and error handling in WebView components * refactor: replace app bar with blurred container for improved UI consistency across screens * refactor: streamline video chat layout and enhance PiP drag gesture functionality * revert some app bar changes * refactor: implement Picture-in-Picture drag functionality in VideoChat * refactor: pass currentChannelId to IRCMessage and ChatMessage for improved context * fix large thubmnail width * chore: update Gradle and Kotlin plugin versions for improved compatibility * changes from v4.10.0 branch * feat: integrate AnimatedScrollBorder for improved UI responsiveness across various screens * refactor: update SectionHeader styling and improve theme management * feat: add pinned section to StreamsList and enhance skeleton loader padding * feat: add repository guidelines for project structure, coding style, testing, and security * feat: enhance StreamCard UI with BlurredContainer and adjust border width in theme * feat: implement unfocusInput and safeRequestFocus methods to manage text field focus behavior * feat: enhance Picture-in-Picture drag interactions with haptic feedback and smooth animations * refactor: improve code formatting and readability across multiple files * feat: implement picture-in-picture mode toggle and state management for video playback * feat: reset PiP mode state when pausing video playback * feat: add custom app bar with profile picture and stream info for video chat * feat: convert multiple settings screens to use StatefulWidget and add animated scroll borders * feat: update blur configuration for adaptive alpha based on theme * fix: adjust default font size in SectionHeader widget * feat: enhance PiP mode with drag overlay instruction and UI improvements * fix: improve badge rendering with consistent margin and border for current channel * refactor: replace BackdropFilter with BlurredContainer for improved clarity and maintainability * fix: reduce background transparency in Uptime widget for better visibility * feat: enhance photo view dialog with full resolution toggle and blurred background * fix: reset chat delay to 0 when auto sync is enabled and update settings title for clarity * fix: adjust border width in theme to improve consistency * feat: add forceDarkMode option to BlurredContainer for improved theme adaptability * feat: implement offline followed channels feature with UI integration and settings option * fix: increase font size and weight for offline status text for better readability * feat: remove offline pinned channels feature and update related UI components * feat: optimize offline channels loading behavior based on expansion state * fix: improve clarity and consistency in repository guidelines formatting * feat: update full resolution URL handling and button visibility logic * feat: replace app bar with blurred version in chat-only mode and add animated scroll border * feat: refactor video chat layout for improved chat and video display in landscape mode * feat: remove bottom bar visibility setting and adjust chat layout accordingly * fix: simplify condition for displaying offline channels section in following tab * feat: enhance reply thread display with indentation and reply icon * feat: implement showModalBottomSheetWithProperFocus for improved focus handling * feat: add gradient direction support to BlurredContainer for enhanced visual effects * feat: enhance NavigationBar and Theme settings for improved visual consistency * feat: add gradient direction support to BlurredContainer in VideoChat for enhanced visual effects * chore: update .gitignore to include .cursor file for better environment management * fix: update PiP drag gesture conditions to include video paused state for better user experience * refactor: replace ScrollController with SettingsPageLayout in settings screens for improved layout management * refactor: centralize orientation handling by introducing OrientationUtils for improved readability and maintainability * refactor: replace OrientationUtils with ContextExtensions for streamlined context-based access to theme, layout, and API dependencies * refactor: improve video chat UI by adjusting title layout and adding stream info tooltips for better user experience * refactor: adjust titleSpacing in theme and navigation components for improved layout consistency * refactor: update stream info timer handling and overlay management for improved UI responsiveness * refactor: enhance stream info timer logic and overlay visibility management for chat-only mode * refactor: enhance input decoration theme in FrostyThemes for improved visual consistency and responsiveness * refactor: adjust inputDecorationTheme padding in FrostyThemes for improved visual consistency * refactor: enhance video overlay management by including video preview overlay in hideElements for improved UI consistency * refactor: improve chat bottom bar padding and video chat layout for enhanced UI consistency * refactor: adjust chat padding to account for device bottom insets for improved layout consistency * refactor: update text styles in FrostyThemes for improved visual consistency across UI components * refactor: update iOS minimum deployment target to 13.0 for improved compatibility * refactor: adjust chat bottom padding based on emote menu visibility for improved layout consistency * refactor: adjust padding values in StreamsList for improved layout consistency * refactor: replace Padding with AnimatedPadding in Chat for smoother layout transitions refactor: replace Container with AnimatedContainer in BlurredContainer for smoother animations * refactor: remove unnecessary radius property from ProfilePicture in OfflineChannelCard for cleaner code * refactor: enhance chat bottom bar suffix icon to display message delay with tooltip for improved user experience * refactor: update hint text and tooltips in chat bottom bar and search for improved clarity * refactor: simplify notification display logic and enhance chat input behavior for improved user experience * refactor: enhance layout consistency by adjusting spacing in various components across the channel and home screens * refactor: introduce LiveIndicator widget and adjust spacing in channel and video components for improved layout consistency * refactor: remove monospace font family from chat bottom bar for improved text rendering * refactor: reduce notification animation duration and change dismiss direction for improved user experience * refactor: replace VideoBar with StreamInfoBar in video components for improved layout and consistency * refactor: adjust font sizes and spacing in StreamInfoBar for improved layout consistency * refactor: standardize font sizes and update gradient stops in video components for improved visual consistency * refactor: update tooltip padding and background color in theme for improved visual consistency * refactor: enhance tooltip behavior and standardize font sizes in StreamInfoBar and related components for improved visual consistency * refactor: add showThumbnail option to LargeStreamCardSkeletonLoader for improved layout flexibility * refactor: add StreamInfoBarSkeletonLoader for improved layout consistency in stream components * refactor: add shadow effects to icons and text in StreamInfoBar and VideoOverlay for improved visual depth * refactor: update defaultOverlayOpacity to 0.0 for improved overlay behavior * fix: correct stream info text color on overlay * refactor: implement a new color picker dialog with random color generation for enhanced user experience * refactor: adjust gradient colors and stops in VideoOverlay for improved visual consistency * refactor: refine gradient colors and stops in VideoOverlay for enhanced visual clarity * refactor: add isCompact parameter to StreamInfoBar for responsive text sizing * fix: update tooltip background color to use surface color for better contrast * feat: add shared chat mode support in chat store and update StreamInfoBar for visual indication * refactor: disable debug print for IRC messages to reduce log clutter * feat: implement chat color selection feature with user color management in chat settings * refactor: replace color adjustment logic with new contrast-aware utility for chat names * refactor: simplify chat details UI by replacing list tiles with action cards and removing unused clear dialog * refactor: enhance chat details UI by improving time formatting and adding label styling to action cards * refactor: update chat color terminology to 'Username color' for clarity in UI * refactor: enhance chat details UI by introducing active chat modes display and improving layout structure * refactor: improve chat details layout by replacing ListTile with Padding and adding a Divider for better visual separation * refactor: remove chat notifications positioning setting and adjust notification alignment in video chat * refactor: streamline StreamInfoBar component by consolidating offline handling and improving layout for better readability * refactor: enhance StreamInfoBar by adding tooltip for streamer name and improving text overflow handling * refactor: adjust tooltip display duration in StreamInfoBar and update theme configuration * refactor: adjust margin and padding in StreamCard for improved layout consistency * chore: update dependencies in pubspec.yaml and pubspec.lock for Firebase and other packages * template * chore: update iOS platform version to 15.0 and Firebase dependencies to 12.2.0 * refactor: simplify StreamInfoBar layout by reducing nested widgets and improving text color handling * format * feat: enhance Channel model and StreamInfoBar to support offline channel details * feat: add offline indicator and improve StreamInfoBar layout for better offline channel display * fix: adjust icon color opacity in StreamInfoBar for improved visibility * feat: enhance dismissal animation in FrostyPhotoViewDialog to track swipe direction * docs: update copilot instructions for clarity and additional error handling details * refactor: optimize latency tooltip layout and improve offline indicator styling in VideoOverlay * feat: implement shared chat asset fetching and participant management in ChatAssetsStore * refactor: replace Observer with Builder for improved widget rebuilding in VideoOverlay * refactor: update StreamInfoBar border styling and adjust layout in VideoOverlay for improved visual consistency * feat: add showTextShadows property to StreamInfoBar for customizable text shadow display * refactor: adjust layout in VideoOverlay by adding padding to improve spacing and visual consistency * refactor: enhance VideoOverlay gradients and layout for improved visual hierarchy and user experience * refactor: reduce vertical padding in VideoOverlay for improved layout consistency * refactor: remove overlay opacity settings from VideoSettings and SettingsStore for simplification * refactor: improve text overlay transition in VideoChat for better user experience * Revert "refactor: improve text overlay transition in VideoChat for better user experience" This reverts commit fd16ff5ec30ec266157e5c8a9d4a6090c91717f6. * refactor: wrap videoOverlay in ColoredBox for improved layout handling * refactor: optimize animation duration and transition curves in VideoChat for smoother interactions * refactor: dispose searchScrollController in HomeStoreBase to prevent memory leaks * refactor: simplify gradient definitions in VideoOverlay for improved readability and maintainability * refactor: remove 'Offline' text overlay from VideoOverlay for cleaner UI * refactor: add refresh functionality for assets in ChatDetails with loading indicators * refactor: update visibility conditions for uptime, viewer count, and category display in StreamInfoBar * refactor: replace AlertDialog with FrostyDialog for consistent dialog styling across the application * refactor: enhance layout handling in FrostyPageView to prevent overflow during height transitions * refactor: replace ColorPickerDialog with AccentColorPickerDialog for improved color selection experience * refactor: replace theme and accent color settings with dedicated components for improved modularity and readability * refactor: replace ElevatedButton with TextButton for consistent button styling across dialogs * refactor: integrate MobX Observer for reactive state management in settings widgets * refactor: update theme and dialog components for improved styling and consistency * refactor: enhance dialog styling with rounded corners and border in theme configuration * refactor: improve dialog messages for unauthorized access handling * refactor: update bodyLarge text style in theme configuration to include font weight * refactor: standardize Divider usage and adjust theme styles for improved consistency * refactor: adjust Divider properties and theme styles for enhanced visual consistency * chore: remove GEMINI.md file as it is no longer needed for project documentation * refactor: enhance token validation and reconnect logic in AuthBase for improved error handling * format * refactor: integrate landscape cutout settings into VideoChat layout for improved responsiveness * refactor: implement app lifecycle handling in VideoChat and enhance stream info update logic in VideoStore * refactor: update landscape cutout conditionals in VideoChat layout for improved responsiveness * update AGENTS.md * add scrollbar to search * fix scrolling exception * update CLAUDE.md * 5 auth reconnect attemps then log out * increase reply max lines to 2 * simplify and improve reply formatting * add prime icon * better draggable divider * support draggable divider in fullscreen overlay chat * add text shadow in fullscreen chat overlay mode * format * add landscape checks * video store optimization attempts * Dispose WebViewController and remove JavaScript channels properly * Track and cleanup all MutationObservers to prevent accumulation * Throttle latency updates to once per 5 seconds (reduces CPU load) * Add timeout protection and null checks for robustness * Prevent duplicate event listeners on page reloads * double tap divider to reset * Revert "video store optimization attempts" This reverts commit b1df7b0de473543283211a489dca698d9d241857. * optimize video store attempt 2 * Revert "double tap divider to reset" This reverts commit aeb26a433500ec71f822794835e927018ee59e1e. * optimize latency listener to open the menu and check every 20 secconds * more optimizations * hard refresh * abbreviate latency * fix lint * improve hide default overlay * fix chat no longer reconnecting with chat delay * refine chat alerts * fix historical message missing badges and emotes on initial connection * parallelize * revert * add reconnect button inline action * refactor: replace Scrollbar with FrostyScrollbar across chat and settings screens for consistent styling * tweak chat details menu * add scrollbar to release notes, renames for consistency * fix duplicate message case * fix chat delay alerts in auto sync mode * add regex for numeric strings and enhance display name formatting logic * exterminate borders * refactor: simplify active chat modes display in chat details screen * feat: enhance chat input button with delay notification and disable state * fix: wrap chat in SafeArea to prevent UI overflow issues * refactor: remove divider line from video chat and update draggable divider visibility logic * persist overlay in pip mode * fix: update chat delay handling and notifications in chat bottom bar * fix: update chat overlay visibility logic to respect fullscreen settings * tap to show deleted message * fix: prevent accidental chat scrolling when accessing system UI in landscape mode * show latency in portrait * fix: enhance chat delay notifications with dynamic delay time * docs: update CLAUDE.md for improved environment variable instructions and architecture overview * fix: improve chat delay countdown management and message handling * add preliminary release notes * remove agents.md * update lockfile * add initial multi chat feature * add option to persist multi chat tabs * add remove confirmation dialog * improve add chat design * lazy-load tabs * create global assets store to dedupe global asset fetching * improve tab design/styles * update notes * use frosty dialog * update claude md * tweak * add ability to reorder tabs * resolve conflict * merge cleanup * format * update release notes * add chat delay sync completion tracking to prevent countdown re-appearance * add tests * fix * update release notes * bump
2026-01-01 22:28:17 -05:00
// Set up 7TV real-time listener (assets already fetched in connectToChat)
if (settings.show7TVEmotes) {
final emoteSetId = assetsStore.sevenTvEmoteSetId;
if (emoteSetId != null && !_shouldDisconnect) {
listenToSevenTVEmoteSet(emoteSetId: emoteSetId);
}
v5 (#463) * migrate to dio * ignore folders * simplify twitch api headers handling * clean up main * simplify logs * optimize profile picture fetching fixes refetches on tab switch * update claude md * refactor irc.dart * update copilot instructions with essential commands and project structure details * implement message sending state management and UI updates * refactor notification handling and add copy-paste functionality in chat * refactor AlertMessage to support vertical layout and optional padding * refactor error messages for consistency and clarity across various components * refactor chat layout to use draggable divider and improve chat width settings * refactor Uptime widget to use SharedTimerService for synchronized updates * refactor search results components to handle null future states gracefully * refactor loading indicators to use skeleton loaders for improved user experience * refactor UI components for improved layout and responsiveness, enhance skeleton loaders, and streamline padding adjustments * refactor: replace manual blur effects with BlurredContainer for consistency and reusability * refactor: enhance JavaScript execution and error handling in WebView components * refactor: replace app bar with blurred container for improved UI consistency across screens * refactor: streamline video chat layout and enhance PiP drag gesture functionality * revert some app bar changes * refactor: implement Picture-in-Picture drag functionality in VideoChat * refactor: pass currentChannelId to IRCMessage and ChatMessage for improved context * fix large thubmnail width * chore: update Gradle and Kotlin plugin versions for improved compatibility * changes from v4.10.0 branch * feat: integrate AnimatedScrollBorder for improved UI responsiveness across various screens * refactor: update SectionHeader styling and improve theme management * feat: add pinned section to StreamsList and enhance skeleton loader padding * feat: add repository guidelines for project structure, coding style, testing, and security * feat: enhance StreamCard UI with BlurredContainer and adjust border width in theme * feat: implement unfocusInput and safeRequestFocus methods to manage text field focus behavior * feat: enhance Picture-in-Picture drag interactions with haptic feedback and smooth animations * refactor: improve code formatting and readability across multiple files * feat: implement picture-in-picture mode toggle and state management for video playback * feat: reset PiP mode state when pausing video playback * feat: add custom app bar with profile picture and stream info for video chat * feat: convert multiple settings screens to use StatefulWidget and add animated scroll borders * feat: update blur configuration for adaptive alpha based on theme * fix: adjust default font size in SectionHeader widget * feat: enhance PiP mode with drag overlay instruction and UI improvements * fix: improve badge rendering with consistent margin and border for current channel * refactor: replace BackdropFilter with BlurredContainer for improved clarity and maintainability * fix: reduce background transparency in Uptime widget for better visibility * feat: enhance photo view dialog with full resolution toggle and blurred background * fix: reset chat delay to 0 when auto sync is enabled and update settings title for clarity * fix: adjust border width in theme to improve consistency * feat: add forceDarkMode option to BlurredContainer for improved theme adaptability * feat: implement offline followed channels feature with UI integration and settings option * fix: increase font size and weight for offline status text for better readability * feat: remove offline pinned channels feature and update related UI components * feat: optimize offline channels loading behavior based on expansion state * fix: improve clarity and consistency in repository guidelines formatting * feat: update full resolution URL handling and button visibility logic * feat: replace app bar with blurred version in chat-only mode and add animated scroll border * feat: refactor video chat layout for improved chat and video display in landscape mode * feat: remove bottom bar visibility setting and adjust chat layout accordingly * fix: simplify condition for displaying offline channels section in following tab * feat: enhance reply thread display with indentation and reply icon * feat: implement showModalBottomSheetWithProperFocus for improved focus handling * feat: add gradient direction support to BlurredContainer for enhanced visual effects * feat: enhance NavigationBar and Theme settings for improved visual consistency * feat: add gradient direction support to BlurredContainer in VideoChat for enhanced visual effects * chore: update .gitignore to include .cursor file for better environment management * fix: update PiP drag gesture conditions to include video paused state for better user experience * refactor: replace ScrollController with SettingsPageLayout in settings screens for improved layout management * refactor: centralize orientation handling by introducing OrientationUtils for improved readability and maintainability * refactor: replace OrientationUtils with ContextExtensions for streamlined context-based access to theme, layout, and API dependencies * refactor: improve video chat UI by adjusting title layout and adding stream info tooltips for better user experience * refactor: adjust titleSpacing in theme and navigation components for improved layout consistency * refactor: update stream info timer handling and overlay management for improved UI responsiveness * refactor: enhance stream info timer logic and overlay visibility management for chat-only mode * refactor: enhance input decoration theme in FrostyThemes for improved visual consistency and responsiveness * refactor: adjust inputDecorationTheme padding in FrostyThemes for improved visual consistency * refactor: enhance video overlay management by including video preview overlay in hideElements for improved UI consistency * refactor: improve chat bottom bar padding and video chat layout for enhanced UI consistency * refactor: adjust chat padding to account for device bottom insets for improved layout consistency * refactor: update text styles in FrostyThemes for improved visual consistency across UI components * refactor: update iOS minimum deployment target to 13.0 for improved compatibility * refactor: adjust chat bottom padding based on emote menu visibility for improved layout consistency * refactor: adjust padding values in StreamsList for improved layout consistency * refactor: replace Padding with AnimatedPadding in Chat for smoother layout transitions refactor: replace Container with AnimatedContainer in BlurredContainer for smoother animations * refactor: remove unnecessary radius property from ProfilePicture in OfflineChannelCard for cleaner code * refactor: enhance chat bottom bar suffix icon to display message delay with tooltip for improved user experience * refactor: update hint text and tooltips in chat bottom bar and search for improved clarity * refactor: simplify notification display logic and enhance chat input behavior for improved user experience * refactor: enhance layout consistency by adjusting spacing in various components across the channel and home screens * refactor: introduce LiveIndicator widget and adjust spacing in channel and video components for improved layout consistency * refactor: remove monospace font family from chat bottom bar for improved text rendering * refactor: reduce notification animation duration and change dismiss direction for improved user experience * refactor: replace VideoBar with StreamInfoBar in video components for improved layout and consistency * refactor: adjust font sizes and spacing in StreamInfoBar for improved layout consistency * refactor: standardize font sizes and update gradient stops in video components for improved visual consistency * refactor: update tooltip padding and background color in theme for improved visual consistency * refactor: enhance tooltip behavior and standardize font sizes in StreamInfoBar and related components for improved visual consistency * refactor: add showThumbnail option to LargeStreamCardSkeletonLoader for improved layout flexibility * refactor: add StreamInfoBarSkeletonLoader for improved layout consistency in stream components * refactor: add shadow effects to icons and text in StreamInfoBar and VideoOverlay for improved visual depth * refactor: update defaultOverlayOpacity to 0.0 for improved overlay behavior * fix: correct stream info text color on overlay * refactor: implement a new color picker dialog with random color generation for enhanced user experience * refactor: adjust gradient colors and stops in VideoOverlay for improved visual consistency * refactor: refine gradient colors and stops in VideoOverlay for enhanced visual clarity * refactor: add isCompact parameter to StreamInfoBar for responsive text sizing * fix: update tooltip background color to use surface color for better contrast * feat: add shared chat mode support in chat store and update StreamInfoBar for visual indication * refactor: disable debug print for IRC messages to reduce log clutter * feat: implement chat color selection feature with user color management in chat settings * refactor: replace color adjustment logic with new contrast-aware utility for chat names * refactor: simplify chat details UI by replacing list tiles with action cards and removing unused clear dialog * refactor: enhance chat details UI by improving time formatting and adding label styling to action cards * refactor: update chat color terminology to 'Username color' for clarity in UI * refactor: enhance chat details UI by introducing active chat modes display and improving layout structure * refactor: improve chat details layout by replacing ListTile with Padding and adding a Divider for better visual separation * refactor: remove chat notifications positioning setting and adjust notification alignment in video chat * refactor: streamline StreamInfoBar component by consolidating offline handling and improving layout for better readability * refactor: enhance StreamInfoBar by adding tooltip for streamer name and improving text overflow handling * refactor: adjust tooltip display duration in StreamInfoBar and update theme configuration * refactor: adjust margin and padding in StreamCard for improved layout consistency * chore: update dependencies in pubspec.yaml and pubspec.lock for Firebase and other packages * template * chore: update iOS platform version to 15.0 and Firebase dependencies to 12.2.0 * refactor: simplify StreamInfoBar layout by reducing nested widgets and improving text color handling * format * feat: enhance Channel model and StreamInfoBar to support offline channel details * feat: add offline indicator and improve StreamInfoBar layout for better offline channel display * fix: adjust icon color opacity in StreamInfoBar for improved visibility * feat: enhance dismissal animation in FrostyPhotoViewDialog to track swipe direction * docs: update copilot instructions for clarity and additional error handling details * refactor: optimize latency tooltip layout and improve offline indicator styling in VideoOverlay * feat: implement shared chat asset fetching and participant management in ChatAssetsStore * refactor: replace Observer with Builder for improved widget rebuilding in VideoOverlay * refactor: update StreamInfoBar border styling and adjust layout in VideoOverlay for improved visual consistency * feat: add showTextShadows property to StreamInfoBar for customizable text shadow display * refactor: adjust layout in VideoOverlay by adding padding to improve spacing and visual consistency * refactor: enhance VideoOverlay gradients and layout for improved visual hierarchy and user experience * refactor: reduce vertical padding in VideoOverlay for improved layout consistency * refactor: remove overlay opacity settings from VideoSettings and SettingsStore for simplification * refactor: improve text overlay transition in VideoChat for better user experience * Revert "refactor: improve text overlay transition in VideoChat for better user experience" This reverts commit fd16ff5ec30ec266157e5c8a9d4a6090c91717f6. * refactor: wrap videoOverlay in ColoredBox for improved layout handling * refactor: optimize animation duration and transition curves in VideoChat for smoother interactions * refactor: dispose searchScrollController in HomeStoreBase to prevent memory leaks * refactor: simplify gradient definitions in VideoOverlay for improved readability and maintainability * refactor: remove 'Offline' text overlay from VideoOverlay for cleaner UI * refactor: add refresh functionality for assets in ChatDetails with loading indicators * refactor: update visibility conditions for uptime, viewer count, and category display in StreamInfoBar * refactor: replace AlertDialog with FrostyDialog for consistent dialog styling across the application * refactor: enhance layout handling in FrostyPageView to prevent overflow during height transitions * refactor: replace ColorPickerDialog with AccentColorPickerDialog for improved color selection experience * refactor: replace theme and accent color settings with dedicated components for improved modularity and readability * refactor: replace ElevatedButton with TextButton for consistent button styling across dialogs * refactor: integrate MobX Observer for reactive state management in settings widgets * refactor: update theme and dialog components for improved styling and consistency * refactor: enhance dialog styling with rounded corners and border in theme configuration * refactor: improve dialog messages for unauthorized access handling * refactor: update bodyLarge text style in theme configuration to include font weight * refactor: standardize Divider usage and adjust theme styles for improved consistency * refactor: adjust Divider properties and theme styles for enhanced visual consistency * chore: remove GEMINI.md file as it is no longer needed for project documentation * refactor: enhance token validation and reconnect logic in AuthBase for improved error handling * format * refactor: integrate landscape cutout settings into VideoChat layout for improved responsiveness * refactor: implement app lifecycle handling in VideoChat and enhance stream info update logic in VideoStore * refactor: update landscape cutout conditionals in VideoChat layout for improved responsiveness * update AGENTS.md * add scrollbar to search * fix scrolling exception * update CLAUDE.md * 5 auth reconnect attemps then log out * increase reply max lines to 2 * simplify and improve reply formatting * add prime icon * better draggable divider * support draggable divider in fullscreen overlay chat * add text shadow in fullscreen chat overlay mode * format * add landscape checks * video store optimization attempts * Dispose WebViewController and remove JavaScript channels properly * Track and cleanup all MutationObservers to prevent accumulation * Throttle latency updates to once per 5 seconds (reduces CPU load) * Add timeout protection and null checks for robustness * Prevent duplicate event listeners on page reloads * double tap divider to reset * Revert "video store optimization attempts" This reverts commit b1df7b0de473543283211a489dca698d9d241857. * optimize video store attempt 2 * Revert "double tap divider to reset" This reverts commit aeb26a433500ec71f822794835e927018ee59e1e. * optimize latency listener to open the menu and check every 20 secconds * more optimizations * hard refresh * abbreviate latency * fix lint * improve hide default overlay * fix chat no longer reconnecting with chat delay * refine chat alerts * fix historical message missing badges and emotes on initial connection * parallelize * revert * add reconnect button inline action * refactor: replace Scrollbar with FrostyScrollbar across chat and settings screens for consistent styling * tweak chat details menu * add scrollbar to release notes, renames for consistency * fix duplicate message case * fix chat delay alerts in auto sync mode * add regex for numeric strings and enhance display name formatting logic * exterminate borders * refactor: simplify active chat modes display in chat details screen * feat: enhance chat input button with delay notification and disable state * fix: wrap chat in SafeArea to prevent UI overflow issues * refactor: remove divider line from video chat and update draggable divider visibility logic * persist overlay in pip mode * fix: update chat delay handling and notifications in chat bottom bar * fix: update chat overlay visibility logic to respect fullscreen settings * tap to show deleted message * fix: prevent accidental chat scrolling when accessing system UI in landscape mode * show latency in portrait * fix: enhance chat delay notifications with dynamic delay time * docs: update CLAUDE.md for improved environment variable instructions and architecture overview * fix: improve chat delay countdown management and message handling * add preliminary release notes * remove agents.md * update lockfile * add initial multi chat feature * add option to persist multi chat tabs * add remove confirmation dialog * improve add chat design * lazy-load tabs * create global assets store to dedupe global asset fetching * improve tab design/styles * update notes * use frosty dialog * update claude md * tweak * add ability to reorder tabs * resolve conflict * merge cleanup * format * update release notes * add chat delay sync completion tracking to prevent countdown re-appearance * add tests * fix * update release notes * bump
2026-01-01 22:28:17 -05:00
}
// Transform reconnect message to summary on successful connection
if (_reconnectMessage != null && _reconnectStartTime != null) {
2026-01-06 20:22:14 -05:00
final elapsed = DateTime.now()
.difference(_reconnectStartTime!)
.inSeconds;
final attempts = _retries;
final index = _messages.indexOf(_reconnectMessage!);
if (index != -1) {
_messages[index] = IRCMessage.createNotice(
message:
'Reconnected ($attempts ${attempts == 1 ? 'attempt' : 'attempts'}, ${elapsed}s)',
);
}
}
_reconnectMessage = null;
_reconnectStartTime = null;
// Reset exponential backoff if successfully connected.
_retries = 0;
_backoffTime = 0;
// Mark connection as established for UI
_isConnected = true;
_hasConnected = true;
}
}
}
// Fetch the assets used in chat including badges and emotes.
@action
v5 (#463) * migrate to dio * ignore folders * simplify twitch api headers handling * clean up main * simplify logs * optimize profile picture fetching fixes refetches on tab switch * update claude md * refactor irc.dart * update copilot instructions with essential commands and project structure details * implement message sending state management and UI updates * refactor notification handling and add copy-paste functionality in chat * refactor AlertMessage to support vertical layout and optional padding * refactor error messages for consistency and clarity across various components * refactor chat layout to use draggable divider and improve chat width settings * refactor Uptime widget to use SharedTimerService for synchronized updates * refactor search results components to handle null future states gracefully * refactor loading indicators to use skeleton loaders for improved user experience * refactor UI components for improved layout and responsiveness, enhance skeleton loaders, and streamline padding adjustments * refactor: replace manual blur effects with BlurredContainer for consistency and reusability * refactor: enhance JavaScript execution and error handling in WebView components * refactor: replace app bar with blurred container for improved UI consistency across screens * refactor: streamline video chat layout and enhance PiP drag gesture functionality * revert some app bar changes * refactor: implement Picture-in-Picture drag functionality in VideoChat * refactor: pass currentChannelId to IRCMessage and ChatMessage for improved context * fix large thubmnail width * chore: update Gradle and Kotlin plugin versions for improved compatibility * changes from v4.10.0 branch * feat: integrate AnimatedScrollBorder for improved UI responsiveness across various screens * refactor: update SectionHeader styling and improve theme management * feat: add pinned section to StreamsList and enhance skeleton loader padding * feat: add repository guidelines for project structure, coding style, testing, and security * feat: enhance StreamCard UI with BlurredContainer and adjust border width in theme * feat: implement unfocusInput and safeRequestFocus methods to manage text field focus behavior * feat: enhance Picture-in-Picture drag interactions with haptic feedback and smooth animations * refactor: improve code formatting and readability across multiple files * feat: implement picture-in-picture mode toggle and state management for video playback * feat: reset PiP mode state when pausing video playback * feat: add custom app bar with profile picture and stream info for video chat * feat: convert multiple settings screens to use StatefulWidget and add animated scroll borders * feat: update blur configuration for adaptive alpha based on theme * fix: adjust default font size in SectionHeader widget * feat: enhance PiP mode with drag overlay instruction and UI improvements * fix: improve badge rendering with consistent margin and border for current channel * refactor: replace BackdropFilter with BlurredContainer for improved clarity and maintainability * fix: reduce background transparency in Uptime widget for better visibility * feat: enhance photo view dialog with full resolution toggle and blurred background * fix: reset chat delay to 0 when auto sync is enabled and update settings title for clarity * fix: adjust border width in theme to improve consistency * feat: add forceDarkMode option to BlurredContainer for improved theme adaptability * feat: implement offline followed channels feature with UI integration and settings option * fix: increase font size and weight for offline status text for better readability * feat: remove offline pinned channels feature and update related UI components * feat: optimize offline channels loading behavior based on expansion state * fix: improve clarity and consistency in repository guidelines formatting * feat: update full resolution URL handling and button visibility logic * feat: replace app bar with blurred version in chat-only mode and add animated scroll border * feat: refactor video chat layout for improved chat and video display in landscape mode * feat: remove bottom bar visibility setting and adjust chat layout accordingly * fix: simplify condition for displaying offline channels section in following tab * feat: enhance reply thread display with indentation and reply icon * feat: implement showModalBottomSheetWithProperFocus for improved focus handling * feat: add gradient direction support to BlurredContainer for enhanced visual effects * feat: enhance NavigationBar and Theme settings for improved visual consistency * feat: add gradient direction support to BlurredContainer in VideoChat for enhanced visual effects * chore: update .gitignore to include .cursor file for better environment management * fix: update PiP drag gesture conditions to include video paused state for better user experience * refactor: replace ScrollController with SettingsPageLayout in settings screens for improved layout management * refactor: centralize orientation handling by introducing OrientationUtils for improved readability and maintainability * refactor: replace OrientationUtils with ContextExtensions for streamlined context-based access to theme, layout, and API dependencies * refactor: improve video chat UI by adjusting title layout and adding stream info tooltips for better user experience * refactor: adjust titleSpacing in theme and navigation components for improved layout consistency * refactor: update stream info timer handling and overlay management for improved UI responsiveness * refactor: enhance stream info timer logic and overlay visibility management for chat-only mode * refactor: enhance input decoration theme in FrostyThemes for improved visual consistency and responsiveness * refactor: adjust inputDecorationTheme padding in FrostyThemes for improved visual consistency * refactor: enhance video overlay management by including video preview overlay in hideElements for improved UI consistency * refactor: improve chat bottom bar padding and video chat layout for enhanced UI consistency * refactor: adjust chat padding to account for device bottom insets for improved layout consistency * refactor: update text styles in FrostyThemes for improved visual consistency across UI components * refactor: update iOS minimum deployment target to 13.0 for improved compatibility * refactor: adjust chat bottom padding based on emote menu visibility for improved layout consistency * refactor: adjust padding values in StreamsList for improved layout consistency * refactor: replace Padding with AnimatedPadding in Chat for smoother layout transitions refactor: replace Container with AnimatedContainer in BlurredContainer for smoother animations * refactor: remove unnecessary radius property from ProfilePicture in OfflineChannelCard for cleaner code * refactor: enhance chat bottom bar suffix icon to display message delay with tooltip for improved user experience * refactor: update hint text and tooltips in chat bottom bar and search for improved clarity * refactor: simplify notification display logic and enhance chat input behavior for improved user experience * refactor: enhance layout consistency by adjusting spacing in various components across the channel and home screens * refactor: introduce LiveIndicator widget and adjust spacing in channel and video components for improved layout consistency * refactor: remove monospace font family from chat bottom bar for improved text rendering * refactor: reduce notification animation duration and change dismiss direction for improved user experience * refactor: replace VideoBar with StreamInfoBar in video components for improved layout and consistency * refactor: adjust font sizes and spacing in StreamInfoBar for improved layout consistency * refactor: standardize font sizes and update gradient stops in video components for improved visual consistency * refactor: update tooltip padding and background color in theme for improved visual consistency * refactor: enhance tooltip behavior and standardize font sizes in StreamInfoBar and related components for improved visual consistency * refactor: add showThumbnail option to LargeStreamCardSkeletonLoader for improved layout flexibility * refactor: add StreamInfoBarSkeletonLoader for improved layout consistency in stream components * refactor: add shadow effects to icons and text in StreamInfoBar and VideoOverlay for improved visual depth * refactor: update defaultOverlayOpacity to 0.0 for improved overlay behavior * fix: correct stream info text color on overlay * refactor: implement a new color picker dialog with random color generation for enhanced user experience * refactor: adjust gradient colors and stops in VideoOverlay for improved visual consistency * refactor: refine gradient colors and stops in VideoOverlay for enhanced visual clarity * refactor: add isCompact parameter to StreamInfoBar for responsive text sizing * fix: update tooltip background color to use surface color for better contrast * feat: add shared chat mode support in chat store and update StreamInfoBar for visual indication * refactor: disable debug print for IRC messages to reduce log clutter * feat: implement chat color selection feature with user color management in chat settings * refactor: replace color adjustment logic with new contrast-aware utility for chat names * refactor: simplify chat details UI by replacing list tiles with action cards and removing unused clear dialog * refactor: enhance chat details UI by improving time formatting and adding label styling to action cards * refactor: update chat color terminology to 'Username color' for clarity in UI * refactor: enhance chat details UI by introducing active chat modes display and improving layout structure * refactor: improve chat details layout by replacing ListTile with Padding and adding a Divider for better visual separation * refactor: remove chat notifications positioning setting and adjust notification alignment in video chat * refactor: streamline StreamInfoBar component by consolidating offline handling and improving layout for better readability * refactor: enhance StreamInfoBar by adding tooltip for streamer name and improving text overflow handling * refactor: adjust tooltip display duration in StreamInfoBar and update theme configuration * refactor: adjust margin and padding in StreamCard for improved layout consistency * chore: update dependencies in pubspec.yaml and pubspec.lock for Firebase and other packages * template * chore: update iOS platform version to 15.0 and Firebase dependencies to 12.2.0 * refactor: simplify StreamInfoBar layout by reducing nested widgets and improving text color handling * format * feat: enhance Channel model and StreamInfoBar to support offline channel details * feat: add offline indicator and improve StreamInfoBar layout for better offline channel display * fix: adjust icon color opacity in StreamInfoBar for improved visibility * feat: enhance dismissal animation in FrostyPhotoViewDialog to track swipe direction * docs: update copilot instructions for clarity and additional error handling details * refactor: optimize latency tooltip layout and improve offline indicator styling in VideoOverlay * feat: implement shared chat asset fetching and participant management in ChatAssetsStore * refactor: replace Observer with Builder for improved widget rebuilding in VideoOverlay * refactor: update StreamInfoBar border styling and adjust layout in VideoOverlay for improved visual consistency * feat: add showTextShadows property to StreamInfoBar for customizable text shadow display * refactor: adjust layout in VideoOverlay by adding padding to improve spacing and visual consistency * refactor: enhance VideoOverlay gradients and layout for improved visual hierarchy and user experience * refactor: reduce vertical padding in VideoOverlay for improved layout consistency * refactor: remove overlay opacity settings from VideoSettings and SettingsStore for simplification * refactor: improve text overlay transition in VideoChat for better user experience * Revert "refactor: improve text overlay transition in VideoChat for better user experience" This reverts commit fd16ff5ec30ec266157e5c8a9d4a6090c91717f6. * refactor: wrap videoOverlay in ColoredBox for improved layout handling * refactor: optimize animation duration and transition curves in VideoChat for smoother interactions * refactor: dispose searchScrollController in HomeStoreBase to prevent memory leaks * refactor: simplify gradient definitions in VideoOverlay for improved readability and maintainability * refactor: remove 'Offline' text overlay from VideoOverlay for cleaner UI * refactor: add refresh functionality for assets in ChatDetails with loading indicators * refactor: update visibility conditions for uptime, viewer count, and category display in StreamInfoBar * refactor: replace AlertDialog with FrostyDialog for consistent dialog styling across the application * refactor: enhance layout handling in FrostyPageView to prevent overflow during height transitions * refactor: replace ColorPickerDialog with AccentColorPickerDialog for improved color selection experience * refactor: replace theme and accent color settings with dedicated components for improved modularity and readability * refactor: replace ElevatedButton with TextButton for consistent button styling across dialogs * refactor: integrate MobX Observer for reactive state management in settings widgets * refactor: update theme and dialog components for improved styling and consistency * refactor: enhance dialog styling with rounded corners and border in theme configuration * refactor: improve dialog messages for unauthorized access handling * refactor: update bodyLarge text style in theme configuration to include font weight * refactor: standardize Divider usage and adjust theme styles for improved consistency * refactor: adjust Divider properties and theme styles for enhanced visual consistency * chore: remove GEMINI.md file as it is no longer needed for project documentation * refactor: enhance token validation and reconnect logic in AuthBase for improved error handling * format * refactor: integrate landscape cutout settings into VideoChat layout for improved responsiveness * refactor: implement app lifecycle handling in VideoChat and enhance stream info update logic in VideoStore * refactor: update landscape cutout conditionals in VideoChat layout for improved responsiveness * update AGENTS.md * add scrollbar to search * fix scrolling exception * update CLAUDE.md * 5 auth reconnect attemps then log out * increase reply max lines to 2 * simplify and improve reply formatting * add prime icon * better draggable divider * support draggable divider in fullscreen overlay chat * add text shadow in fullscreen chat overlay mode * format * add landscape checks * video store optimization attempts * Dispose WebViewController and remove JavaScript channels properly * Track and cleanup all MutationObservers to prevent accumulation * Throttle latency updates to once per 5 seconds (reduces CPU load) * Add timeout protection and null checks for robustness * Prevent duplicate event listeners on page reloads * double tap divider to reset * Revert "video store optimization attempts" This reverts commit b1df7b0de473543283211a489dca698d9d241857. * optimize video store attempt 2 * Revert "double tap divider to reset" This reverts commit aeb26a433500ec71f822794835e927018ee59e1e. * optimize latency listener to open the menu and check every 20 secconds * more optimizations * hard refresh * abbreviate latency * fix lint * improve hide default overlay * fix chat no longer reconnecting with chat delay * refine chat alerts * fix historical message missing badges and emotes on initial connection * parallelize * revert * add reconnect button inline action * refactor: replace Scrollbar with FrostyScrollbar across chat and settings screens for consistent styling * tweak chat details menu * add scrollbar to release notes, renames for consistency * fix duplicate message case * fix chat delay alerts in auto sync mode * add regex for numeric strings and enhance display name formatting logic * exterminate borders * refactor: simplify active chat modes display in chat details screen * feat: enhance chat input button with delay notification and disable state * fix: wrap chat in SafeArea to prevent UI overflow issues * refactor: remove divider line from video chat and update draggable divider visibility logic * persist overlay in pip mode * fix: update chat delay handling and notifications in chat bottom bar * fix: update chat overlay visibility logic to respect fullscreen settings * tap to show deleted message * fix: prevent accidental chat scrolling when accessing system UI in landscape mode * show latency in portrait * fix: enhance chat delay notifications with dynamic delay time * docs: update CLAUDE.md for improved environment variable instructions and architecture overview * fix: improve chat delay countdown management and message handling * add preliminary release notes * remove agents.md * update lockfile * add initial multi chat feature * add option to persist multi chat tabs * add remove confirmation dialog * improve add chat design * lazy-load tabs * create global assets store to dedupe global asset fetching * improve tab design/styles * update notes * use frosty dialog * update claude md * tweak * add ability to reorder tabs * resolve conflict * merge cleanup * format * update release notes * add chat delay sync completion tracking to prevent countdown re-appearance * add tests * fix * update release notes * bump
2026-01-01 22:28:17 -05:00
Future<void> getAssets() async {
// Prepare common error handlers to avoid repetition.
List<Emote> onEmoteError(dynamic error) {
debugPrint(error.toString());
return <Emote>[];
}
// Returns a Map, not a List: this is attached via `.catchError` to the
// `getBadgesChannel` future (a Future<Map<String, ChatBadge>>), so the
// handler must return that type or Dart throws at runtime.
Map<String, ChatBadge> onBadgeError(dynamic error) {
v5 (#463) * migrate to dio * ignore folders * simplify twitch api headers handling * clean up main * simplify logs * optimize profile picture fetching fixes refetches on tab switch * update claude md * refactor irc.dart * update copilot instructions with essential commands and project structure details * implement message sending state management and UI updates * refactor notification handling and add copy-paste functionality in chat * refactor AlertMessage to support vertical layout and optional padding * refactor error messages for consistency and clarity across various components * refactor chat layout to use draggable divider and improve chat width settings * refactor Uptime widget to use SharedTimerService for synchronized updates * refactor search results components to handle null future states gracefully * refactor loading indicators to use skeleton loaders for improved user experience * refactor UI components for improved layout and responsiveness, enhance skeleton loaders, and streamline padding adjustments * refactor: replace manual blur effects with BlurredContainer for consistency and reusability * refactor: enhance JavaScript execution and error handling in WebView components * refactor: replace app bar with blurred container for improved UI consistency across screens * refactor: streamline video chat layout and enhance PiP drag gesture functionality * revert some app bar changes * refactor: implement Picture-in-Picture drag functionality in VideoChat * refactor: pass currentChannelId to IRCMessage and ChatMessage for improved context * fix large thubmnail width * chore: update Gradle and Kotlin plugin versions for improved compatibility * changes from v4.10.0 branch * feat: integrate AnimatedScrollBorder for improved UI responsiveness across various screens * refactor: update SectionHeader styling and improve theme management * feat: add pinned section to StreamsList and enhance skeleton loader padding * feat: add repository guidelines for project structure, coding style, testing, and security * feat: enhance StreamCard UI with BlurredContainer and adjust border width in theme * feat: implement unfocusInput and safeRequestFocus methods to manage text field focus behavior * feat: enhance Picture-in-Picture drag interactions with haptic feedback and smooth animations * refactor: improve code formatting and readability across multiple files * feat: implement picture-in-picture mode toggle and state management for video playback * feat: reset PiP mode state when pausing video playback * feat: add custom app bar with profile picture and stream info for video chat * feat: convert multiple settings screens to use StatefulWidget and add animated scroll borders * feat: update blur configuration for adaptive alpha based on theme * fix: adjust default font size in SectionHeader widget * feat: enhance PiP mode with drag overlay instruction and UI improvements * fix: improve badge rendering with consistent margin and border for current channel * refactor: replace BackdropFilter with BlurredContainer for improved clarity and maintainability * fix: reduce background transparency in Uptime widget for better visibility * feat: enhance photo view dialog with full resolution toggle and blurred background * fix: reset chat delay to 0 when auto sync is enabled and update settings title for clarity * fix: adjust border width in theme to improve consistency * feat: add forceDarkMode option to BlurredContainer for improved theme adaptability * feat: implement offline followed channels feature with UI integration and settings option * fix: increase font size and weight for offline status text for better readability * feat: remove offline pinned channels feature and update related UI components * feat: optimize offline channels loading behavior based on expansion state * fix: improve clarity and consistency in repository guidelines formatting * feat: update full resolution URL handling and button visibility logic * feat: replace app bar with blurred version in chat-only mode and add animated scroll border * feat: refactor video chat layout for improved chat and video display in landscape mode * feat: remove bottom bar visibility setting and adjust chat layout accordingly * fix: simplify condition for displaying offline channels section in following tab * feat: enhance reply thread display with indentation and reply icon * feat: implement showModalBottomSheetWithProperFocus for improved focus handling * feat: add gradient direction support to BlurredContainer for enhanced visual effects * feat: enhance NavigationBar and Theme settings for improved visual consistency * feat: add gradient direction support to BlurredContainer in VideoChat for enhanced visual effects * chore: update .gitignore to include .cursor file for better environment management * fix: update PiP drag gesture conditions to include video paused state for better user experience * refactor: replace ScrollController with SettingsPageLayout in settings screens for improved layout management * refactor: centralize orientation handling by introducing OrientationUtils for improved readability and maintainability * refactor: replace OrientationUtils with ContextExtensions for streamlined context-based access to theme, layout, and API dependencies * refactor: improve video chat UI by adjusting title layout and adding stream info tooltips for better user experience * refactor: adjust titleSpacing in theme and navigation components for improved layout consistency * refactor: update stream info timer handling and overlay management for improved UI responsiveness * refactor: enhance stream info timer logic and overlay visibility management for chat-only mode * refactor: enhance input decoration theme in FrostyThemes for improved visual consistency and responsiveness * refactor: adjust inputDecorationTheme padding in FrostyThemes for improved visual consistency * refactor: enhance video overlay management by including video preview overlay in hideElements for improved UI consistency * refactor: improve chat bottom bar padding and video chat layout for enhanced UI consistency * refactor: adjust chat padding to account for device bottom insets for improved layout consistency * refactor: update text styles in FrostyThemes for improved visual consistency across UI components * refactor: update iOS minimum deployment target to 13.0 for improved compatibility * refactor: adjust chat bottom padding based on emote menu visibility for improved layout consistency * refactor: adjust padding values in StreamsList for improved layout consistency * refactor: replace Padding with AnimatedPadding in Chat for smoother layout transitions refactor: replace Container with AnimatedContainer in BlurredContainer for smoother animations * refactor: remove unnecessary radius property from ProfilePicture in OfflineChannelCard for cleaner code * refactor: enhance chat bottom bar suffix icon to display message delay with tooltip for improved user experience * refactor: update hint text and tooltips in chat bottom bar and search for improved clarity * refactor: simplify notification display logic and enhance chat input behavior for improved user experience * refactor: enhance layout consistency by adjusting spacing in various components across the channel and home screens * refactor: introduce LiveIndicator widget and adjust spacing in channel and video components for improved layout consistency * refactor: remove monospace font family from chat bottom bar for improved text rendering * refactor: reduce notification animation duration and change dismiss direction for improved user experience * refactor: replace VideoBar with StreamInfoBar in video components for improved layout and consistency * refactor: adjust font sizes and spacing in StreamInfoBar for improved layout consistency * refactor: standardize font sizes and update gradient stops in video components for improved visual consistency * refactor: update tooltip padding and background color in theme for improved visual consistency * refactor: enhance tooltip behavior and standardize font sizes in StreamInfoBar and related components for improved visual consistency * refactor: add showThumbnail option to LargeStreamCardSkeletonLoader for improved layout flexibility * refactor: add StreamInfoBarSkeletonLoader for improved layout consistency in stream components * refactor: add shadow effects to icons and text in StreamInfoBar and VideoOverlay for improved visual depth * refactor: update defaultOverlayOpacity to 0.0 for improved overlay behavior * fix: correct stream info text color on overlay * refactor: implement a new color picker dialog with random color generation for enhanced user experience * refactor: adjust gradient colors and stops in VideoOverlay for improved visual consistency * refactor: refine gradient colors and stops in VideoOverlay for enhanced visual clarity * refactor: add isCompact parameter to StreamInfoBar for responsive text sizing * fix: update tooltip background color to use surface color for better contrast * feat: add shared chat mode support in chat store and update StreamInfoBar for visual indication * refactor: disable debug print for IRC messages to reduce log clutter * feat: implement chat color selection feature with user color management in chat settings * refactor: replace color adjustment logic with new contrast-aware utility for chat names * refactor: simplify chat details UI by replacing list tiles with action cards and removing unused clear dialog * refactor: enhance chat details UI by improving time formatting and adding label styling to action cards * refactor: update chat color terminology to 'Username color' for clarity in UI * refactor: enhance chat details UI by introducing active chat modes display and improving layout structure * refactor: improve chat details layout by replacing ListTile with Padding and adding a Divider for better visual separation * refactor: remove chat notifications positioning setting and adjust notification alignment in video chat * refactor: streamline StreamInfoBar component by consolidating offline handling and improving layout for better readability * refactor: enhance StreamInfoBar by adding tooltip for streamer name and improving text overflow handling * refactor: adjust tooltip display duration in StreamInfoBar and update theme configuration * refactor: adjust margin and padding in StreamCard for improved layout consistency * chore: update dependencies in pubspec.yaml and pubspec.lock for Firebase and other packages * template * chore: update iOS platform version to 15.0 and Firebase dependencies to 12.2.0 * refactor: simplify StreamInfoBar layout by reducing nested widgets and improving text color handling * format * feat: enhance Channel model and StreamInfoBar to support offline channel details * feat: add offline indicator and improve StreamInfoBar layout for better offline channel display * fix: adjust icon color opacity in StreamInfoBar for improved visibility * feat: enhance dismissal animation in FrostyPhotoViewDialog to track swipe direction * docs: update copilot instructions for clarity and additional error handling details * refactor: optimize latency tooltip layout and improve offline indicator styling in VideoOverlay * feat: implement shared chat asset fetching and participant management in ChatAssetsStore * refactor: replace Observer with Builder for improved widget rebuilding in VideoOverlay * refactor: update StreamInfoBar border styling and adjust layout in VideoOverlay for improved visual consistency * feat: add showTextShadows property to StreamInfoBar for customizable text shadow display * refactor: adjust layout in VideoOverlay by adding padding to improve spacing and visual consistency * refactor: enhance VideoOverlay gradients and layout for improved visual hierarchy and user experience * refactor: reduce vertical padding in VideoOverlay for improved layout consistency * refactor: remove overlay opacity settings from VideoSettings and SettingsStore for simplification * refactor: improve text overlay transition in VideoChat for better user experience * Revert "refactor: improve text overlay transition in VideoChat for better user experience" This reverts commit fd16ff5ec30ec266157e5c8a9d4a6090c91717f6. * refactor: wrap videoOverlay in ColoredBox for improved layout handling * refactor: optimize animation duration and transition curves in VideoChat for smoother interactions * refactor: dispose searchScrollController in HomeStoreBase to prevent memory leaks * refactor: simplify gradient definitions in VideoOverlay for improved readability and maintainability * refactor: remove 'Offline' text overlay from VideoOverlay for cleaner UI * refactor: add refresh functionality for assets in ChatDetails with loading indicators * refactor: update visibility conditions for uptime, viewer count, and category display in StreamInfoBar * refactor: replace AlertDialog with FrostyDialog for consistent dialog styling across the application * refactor: enhance layout handling in FrostyPageView to prevent overflow during height transitions * refactor: replace ColorPickerDialog with AccentColorPickerDialog for improved color selection experience * refactor: replace theme and accent color settings with dedicated components for improved modularity and readability * refactor: replace ElevatedButton with TextButton for consistent button styling across dialogs * refactor: integrate MobX Observer for reactive state management in settings widgets * refactor: update theme and dialog components for improved styling and consistency * refactor: enhance dialog styling with rounded corners and border in theme configuration * refactor: improve dialog messages for unauthorized access handling * refactor: update bodyLarge text style in theme configuration to include font weight * refactor: standardize Divider usage and adjust theme styles for improved consistency * refactor: adjust Divider properties and theme styles for enhanced visual consistency * chore: remove GEMINI.md file as it is no longer needed for project documentation * refactor: enhance token validation and reconnect logic in AuthBase for improved error handling * format * refactor: integrate landscape cutout settings into VideoChat layout for improved responsiveness * refactor: implement app lifecycle handling in VideoChat and enhance stream info update logic in VideoStore * refactor: update landscape cutout conditionals in VideoChat layout for improved responsiveness * update AGENTS.md * add scrollbar to search * fix scrolling exception * update CLAUDE.md * 5 auth reconnect attemps then log out * increase reply max lines to 2 * simplify and improve reply formatting * add prime icon * better draggable divider * support draggable divider in fullscreen overlay chat * add text shadow in fullscreen chat overlay mode * format * add landscape checks * video store optimization attempts * Dispose WebViewController and remove JavaScript channels properly * Track and cleanup all MutationObservers to prevent accumulation * Throttle latency updates to once per 5 seconds (reduces CPU load) * Add timeout protection and null checks for robustness * Prevent duplicate event listeners on page reloads * double tap divider to reset * Revert "video store optimization attempts" This reverts commit b1df7b0de473543283211a489dca698d9d241857. * optimize video store attempt 2 * Revert "double tap divider to reset" This reverts commit aeb26a433500ec71f822794835e927018ee59e1e. * optimize latency listener to open the menu and check every 20 secconds * more optimizations * hard refresh * abbreviate latency * fix lint * improve hide default overlay * fix chat no longer reconnecting with chat delay * refine chat alerts * fix historical message missing badges and emotes on initial connection * parallelize * revert * add reconnect button inline action * refactor: replace Scrollbar with FrostyScrollbar across chat and settings screens for consistent styling * tweak chat details menu * add scrollbar to release notes, renames for consistency * fix duplicate message case * fix chat delay alerts in auto sync mode * add regex for numeric strings and enhance display name formatting logic * exterminate borders * refactor: simplify active chat modes display in chat details screen * feat: enhance chat input button with delay notification and disable state * fix: wrap chat in SafeArea to prevent UI overflow issues * refactor: remove divider line from video chat and update draggable divider visibility logic * persist overlay in pip mode * fix: update chat delay handling and notifications in chat bottom bar * fix: update chat overlay visibility logic to respect fullscreen settings * tap to show deleted message * fix: prevent accidental chat scrolling when accessing system UI in landscape mode * show latency in portrait * fix: enhance chat delay notifications with dynamic delay time * docs: update CLAUDE.md for improved environment variable instructions and architecture overview * fix: improve chat delay countdown management and message handling * add preliminary release notes * remove agents.md * update lockfile * add initial multi chat feature * add option to persist multi chat tabs * add remove confirmation dialog * improve add chat design * lazy-load tabs * create global assets store to dedupe global asset fetching * improve tab design/styles * update notes * use frosty dialog * update claude md * tweak * add ability to reorder tabs * resolve conflict * merge cleanup * format * update release notes * add chat delay sync completion tracking to prevent countdown re-appearance * add tests * fix * update release notes * bump
2026-01-01 22:28:17 -05:00
debugPrint(error.toString());
return <String, ChatBadge>{};
v5 (#463) * migrate to dio * ignore folders * simplify twitch api headers handling * clean up main * simplify logs * optimize profile picture fetching fixes refetches on tab switch * update claude md * refactor irc.dart * update copilot instructions with essential commands and project structure details * implement message sending state management and UI updates * refactor notification handling and add copy-paste functionality in chat * refactor AlertMessage to support vertical layout and optional padding * refactor error messages for consistency and clarity across various components * refactor chat layout to use draggable divider and improve chat width settings * refactor Uptime widget to use SharedTimerService for synchronized updates * refactor search results components to handle null future states gracefully * refactor loading indicators to use skeleton loaders for improved user experience * refactor UI components for improved layout and responsiveness, enhance skeleton loaders, and streamline padding adjustments * refactor: replace manual blur effects with BlurredContainer for consistency and reusability * refactor: enhance JavaScript execution and error handling in WebView components * refactor: replace app bar with blurred container for improved UI consistency across screens * refactor: streamline video chat layout and enhance PiP drag gesture functionality * revert some app bar changes * refactor: implement Picture-in-Picture drag functionality in VideoChat * refactor: pass currentChannelId to IRCMessage and ChatMessage for improved context * fix large thubmnail width * chore: update Gradle and Kotlin plugin versions for improved compatibility * changes from v4.10.0 branch * feat: integrate AnimatedScrollBorder for improved UI responsiveness across various screens * refactor: update SectionHeader styling and improve theme management * feat: add pinned section to StreamsList and enhance skeleton loader padding * feat: add repository guidelines for project structure, coding style, testing, and security * feat: enhance StreamCard UI with BlurredContainer and adjust border width in theme * feat: implement unfocusInput and safeRequestFocus methods to manage text field focus behavior * feat: enhance Picture-in-Picture drag interactions with haptic feedback and smooth animations * refactor: improve code formatting and readability across multiple files * feat: implement picture-in-picture mode toggle and state management for video playback * feat: reset PiP mode state when pausing video playback * feat: add custom app bar with profile picture and stream info for video chat * feat: convert multiple settings screens to use StatefulWidget and add animated scroll borders * feat: update blur configuration for adaptive alpha based on theme * fix: adjust default font size in SectionHeader widget * feat: enhance PiP mode with drag overlay instruction and UI improvements * fix: improve badge rendering with consistent margin and border for current channel * refactor: replace BackdropFilter with BlurredContainer for improved clarity and maintainability * fix: reduce background transparency in Uptime widget for better visibility * feat: enhance photo view dialog with full resolution toggle and blurred background * fix: reset chat delay to 0 when auto sync is enabled and update settings title for clarity * fix: adjust border width in theme to improve consistency * feat: add forceDarkMode option to BlurredContainer for improved theme adaptability * feat: implement offline followed channels feature with UI integration and settings option * fix: increase font size and weight for offline status text for better readability * feat: remove offline pinned channels feature and update related UI components * feat: optimize offline channels loading behavior based on expansion state * fix: improve clarity and consistency in repository guidelines formatting * feat: update full resolution URL handling and button visibility logic * feat: replace app bar with blurred version in chat-only mode and add animated scroll border * feat: refactor video chat layout for improved chat and video display in landscape mode * feat: remove bottom bar visibility setting and adjust chat layout accordingly * fix: simplify condition for displaying offline channels section in following tab * feat: enhance reply thread display with indentation and reply icon * feat: implement showModalBottomSheetWithProperFocus for improved focus handling * feat: add gradient direction support to BlurredContainer for enhanced visual effects * feat: enhance NavigationBar and Theme settings for improved visual consistency * feat: add gradient direction support to BlurredContainer in VideoChat for enhanced visual effects * chore: update .gitignore to include .cursor file for better environment management * fix: update PiP drag gesture conditions to include video paused state for better user experience * refactor: replace ScrollController with SettingsPageLayout in settings screens for improved layout management * refactor: centralize orientation handling by introducing OrientationUtils for improved readability and maintainability * refactor: replace OrientationUtils with ContextExtensions for streamlined context-based access to theme, layout, and API dependencies * refactor: improve video chat UI by adjusting title layout and adding stream info tooltips for better user experience * refactor: adjust titleSpacing in theme and navigation components for improved layout consistency * refactor: update stream info timer handling and overlay management for improved UI responsiveness * refactor: enhance stream info timer logic and overlay visibility management for chat-only mode * refactor: enhance input decoration theme in FrostyThemes for improved visual consistency and responsiveness * refactor: adjust inputDecorationTheme padding in FrostyThemes for improved visual consistency * refactor: enhance video overlay management by including video preview overlay in hideElements for improved UI consistency * refactor: improve chat bottom bar padding and video chat layout for enhanced UI consistency * refactor: adjust chat padding to account for device bottom insets for improved layout consistency * refactor: update text styles in FrostyThemes for improved visual consistency across UI components * refactor: update iOS minimum deployment target to 13.0 for improved compatibility * refactor: adjust chat bottom padding based on emote menu visibility for improved layout consistency * refactor: adjust padding values in StreamsList for improved layout consistency * refactor: replace Padding with AnimatedPadding in Chat for smoother layout transitions refactor: replace Container with AnimatedContainer in BlurredContainer for smoother animations * refactor: remove unnecessary radius property from ProfilePicture in OfflineChannelCard for cleaner code * refactor: enhance chat bottom bar suffix icon to display message delay with tooltip for improved user experience * refactor: update hint text and tooltips in chat bottom bar and search for improved clarity * refactor: simplify notification display logic and enhance chat input behavior for improved user experience * refactor: enhance layout consistency by adjusting spacing in various components across the channel and home screens * refactor: introduce LiveIndicator widget and adjust spacing in channel and video components for improved layout consistency * refactor: remove monospace font family from chat bottom bar for improved text rendering * refactor: reduce notification animation duration and change dismiss direction for improved user experience * refactor: replace VideoBar with StreamInfoBar in video components for improved layout and consistency * refactor: adjust font sizes and spacing in StreamInfoBar for improved layout consistency * refactor: standardize font sizes and update gradient stops in video components for improved visual consistency * refactor: update tooltip padding and background color in theme for improved visual consistency * refactor: enhance tooltip behavior and standardize font sizes in StreamInfoBar and related components for improved visual consistency * refactor: add showThumbnail option to LargeStreamCardSkeletonLoader for improved layout flexibility * refactor: add StreamInfoBarSkeletonLoader for improved layout consistency in stream components * refactor: add shadow effects to icons and text in StreamInfoBar and VideoOverlay for improved visual depth * refactor: update defaultOverlayOpacity to 0.0 for improved overlay behavior * fix: correct stream info text color on overlay * refactor: implement a new color picker dialog with random color generation for enhanced user experience * refactor: adjust gradient colors and stops in VideoOverlay for improved visual consistency * refactor: refine gradient colors and stops in VideoOverlay for enhanced visual clarity * refactor: add isCompact parameter to StreamInfoBar for responsive text sizing * fix: update tooltip background color to use surface color for better contrast * feat: add shared chat mode support in chat store and update StreamInfoBar for visual indication * refactor: disable debug print for IRC messages to reduce log clutter * feat: implement chat color selection feature with user color management in chat settings * refactor: replace color adjustment logic with new contrast-aware utility for chat names * refactor: simplify chat details UI by replacing list tiles with action cards and removing unused clear dialog * refactor: enhance chat details UI by improving time formatting and adding label styling to action cards * refactor: update chat color terminology to 'Username color' for clarity in UI * refactor: enhance chat details UI by introducing active chat modes display and improving layout structure * refactor: improve chat details layout by replacing ListTile with Padding and adding a Divider for better visual separation * refactor: remove chat notifications positioning setting and adjust notification alignment in video chat * refactor: streamline StreamInfoBar component by consolidating offline handling and improving layout for better readability * refactor: enhance StreamInfoBar by adding tooltip for streamer name and improving text overflow handling * refactor: adjust tooltip display duration in StreamInfoBar and update theme configuration * refactor: adjust margin and padding in StreamCard for improved layout consistency * chore: update dependencies in pubspec.yaml and pubspec.lock for Firebase and other packages * template * chore: update iOS platform version to 15.0 and Firebase dependencies to 12.2.0 * refactor: simplify StreamInfoBar layout by reducing nested widgets and improving text color handling * format * feat: enhance Channel model and StreamInfoBar to support offline channel details * feat: add offline indicator and improve StreamInfoBar layout for better offline channel display * fix: adjust icon color opacity in StreamInfoBar for improved visibility * feat: enhance dismissal animation in FrostyPhotoViewDialog to track swipe direction * docs: update copilot instructions for clarity and additional error handling details * refactor: optimize latency tooltip layout and improve offline indicator styling in VideoOverlay * feat: implement shared chat asset fetching and participant management in ChatAssetsStore * refactor: replace Observer with Builder for improved widget rebuilding in VideoOverlay * refactor: update StreamInfoBar border styling and adjust layout in VideoOverlay for improved visual consistency * feat: add showTextShadows property to StreamInfoBar for customizable text shadow display * refactor: adjust layout in VideoOverlay by adding padding to improve spacing and visual consistency * refactor: enhance VideoOverlay gradients and layout for improved visual hierarchy and user experience * refactor: reduce vertical padding in VideoOverlay for improved layout consistency * refactor: remove overlay opacity settings from VideoSettings and SettingsStore for simplification * refactor: improve text overlay transition in VideoChat for better user experience * Revert "refactor: improve text overlay transition in VideoChat for better user experience" This reverts commit fd16ff5ec30ec266157e5c8a9d4a6090c91717f6. * refactor: wrap videoOverlay in ColoredBox for improved layout handling * refactor: optimize animation duration and transition curves in VideoChat for smoother interactions * refactor: dispose searchScrollController in HomeStoreBase to prevent memory leaks * refactor: simplify gradient definitions in VideoOverlay for improved readability and maintainability * refactor: remove 'Offline' text overlay from VideoOverlay for cleaner UI * refactor: add refresh functionality for assets in ChatDetails with loading indicators * refactor: update visibility conditions for uptime, viewer count, and category display in StreamInfoBar * refactor: replace AlertDialog with FrostyDialog for consistent dialog styling across the application * refactor: enhance layout handling in FrostyPageView to prevent overflow during height transitions * refactor: replace ColorPickerDialog with AccentColorPickerDialog for improved color selection experience * refactor: replace theme and accent color settings with dedicated components for improved modularity and readability * refactor: replace ElevatedButton with TextButton for consistent button styling across dialogs * refactor: integrate MobX Observer for reactive state management in settings widgets * refactor: update theme and dialog components for improved styling and consistency * refactor: enhance dialog styling with rounded corners and border in theme configuration * refactor: improve dialog messages for unauthorized access handling * refactor: update bodyLarge text style in theme configuration to include font weight * refactor: standardize Divider usage and adjust theme styles for improved consistency * refactor: adjust Divider properties and theme styles for enhanced visual consistency * chore: remove GEMINI.md file as it is no longer needed for project documentation * refactor: enhance token validation and reconnect logic in AuthBase for improved error handling * format * refactor: integrate landscape cutout settings into VideoChat layout for improved responsiveness * refactor: implement app lifecycle handling in VideoChat and enhance stream info update logic in VideoStore * refactor: update landscape cutout conditionals in VideoChat layout for improved responsiveness * update AGENTS.md * add scrollbar to search * fix scrolling exception * update CLAUDE.md * 5 auth reconnect attemps then log out * increase reply max lines to 2 * simplify and improve reply formatting * add prime icon * better draggable divider * support draggable divider in fullscreen overlay chat * add text shadow in fullscreen chat overlay mode * format * add landscape checks * video store optimization attempts * Dispose WebViewController and remove JavaScript channels properly * Track and cleanup all MutationObservers to prevent accumulation * Throttle latency updates to once per 5 seconds (reduces CPU load) * Add timeout protection and null checks for robustness * Prevent duplicate event listeners on page reloads * double tap divider to reset * Revert "video store optimization attempts" This reverts commit b1df7b0de473543283211a489dca698d9d241857. * optimize video store attempt 2 * Revert "double tap divider to reset" This reverts commit aeb26a433500ec71f822794835e927018ee59e1e. * optimize latency listener to open the menu and check every 20 secconds * more optimizations * hard refresh * abbreviate latency * fix lint * improve hide default overlay * fix chat no longer reconnecting with chat delay * refine chat alerts * fix historical message missing badges and emotes on initial connection * parallelize * revert * add reconnect button inline action * refactor: replace Scrollbar with FrostyScrollbar across chat and settings screens for consistent styling * tweak chat details menu * add scrollbar to release notes, renames for consistency * fix duplicate message case * fix chat delay alerts in auto sync mode * add regex for numeric strings and enhance display name formatting logic * exterminate borders * refactor: simplify active chat modes display in chat details screen * feat: enhance chat input button with delay notification and disable state * fix: wrap chat in SafeArea to prevent UI overflow issues * refactor: remove divider line from video chat and update draggable divider visibility logic * persist overlay in pip mode * fix: update chat delay handling and notifications in chat bottom bar * fix: update chat overlay visibility logic to respect fullscreen settings * tap to show deleted message * fix: prevent accidental chat scrolling when accessing system UI in landscape mode * show latency in portrait * fix: enhance chat delay notifications with dynamic delay time * docs: update CLAUDE.md for improved environment variable instructions and architecture overview * fix: improve chat delay countdown management and message handling * add preliminary release notes * remove agents.md * update lockfile * add initial multi chat feature * add option to persist multi chat tabs * add remove confirmation dialog * improve add chat design * lazy-load tabs * create global assets store to dedupe global asset fetching * improve tab design/styles * update notes * use frosty dialog * update claude md * tweak * add ability to reorder tabs * resolve conflict * merge cleanup * format * update release notes * add chat delay sync completion tracking to prevent countdown re-appearance * add tests * fix * update release notes * bump
2026-01-01 22:28:17 -05:00
}
final baseAssets = assetsStore.assetsFuture(
channelId: channelId,
headers: auth.headersTwitch,
onEmoteError: onEmoteError,
onBadgeError: onBadgeError,
showTwitchEmotes: settings.showTwitchEmotes,
showTwitchBadges: settings.showTwitchBadges,
show7TVEmotes: settings.show7TVEmotes,
showBTTVEmotes: settings.showBTTVEmotes,
showBTTVBadges: settings.showBTTVBadges,
showFFZEmotes: settings.showFFZEmotes,
showFFZBadges: settings.showFFZBadges,
);
// If shared chat mode is active, also refresh participant assets in parallel.
if (_isInSharedChatMode) {
final sharedAssets = assetsStore.fetchSharedChatAssets(
channelId: channelId,
headers: auth.headersTwitch,
v5 (#463) * migrate to dio * ignore folders * simplify twitch api headers handling * clean up main * simplify logs * optimize profile picture fetching fixes refetches on tab switch * update claude md * refactor irc.dart * update copilot instructions with essential commands and project structure details * implement message sending state management and UI updates * refactor notification handling and add copy-paste functionality in chat * refactor AlertMessage to support vertical layout and optional padding * refactor error messages for consistency and clarity across various components * refactor chat layout to use draggable divider and improve chat width settings * refactor Uptime widget to use SharedTimerService for synchronized updates * refactor search results components to handle null future states gracefully * refactor loading indicators to use skeleton loaders for improved user experience * refactor UI components for improved layout and responsiveness, enhance skeleton loaders, and streamline padding adjustments * refactor: replace manual blur effects with BlurredContainer for consistency and reusability * refactor: enhance JavaScript execution and error handling in WebView components * refactor: replace app bar with blurred container for improved UI consistency across screens * refactor: streamline video chat layout and enhance PiP drag gesture functionality * revert some app bar changes * refactor: implement Picture-in-Picture drag functionality in VideoChat * refactor: pass currentChannelId to IRCMessage and ChatMessage for improved context * fix large thubmnail width * chore: update Gradle and Kotlin plugin versions for improved compatibility * changes from v4.10.0 branch * feat: integrate AnimatedScrollBorder for improved UI responsiveness across various screens * refactor: update SectionHeader styling and improve theme management * feat: add pinned section to StreamsList and enhance skeleton loader padding * feat: add repository guidelines for project structure, coding style, testing, and security * feat: enhance StreamCard UI with BlurredContainer and adjust border width in theme * feat: implement unfocusInput and safeRequestFocus methods to manage text field focus behavior * feat: enhance Picture-in-Picture drag interactions with haptic feedback and smooth animations * refactor: improve code formatting and readability across multiple files * feat: implement picture-in-picture mode toggle and state management for video playback * feat: reset PiP mode state when pausing video playback * feat: add custom app bar with profile picture and stream info for video chat * feat: convert multiple settings screens to use StatefulWidget and add animated scroll borders * feat: update blur configuration for adaptive alpha based on theme * fix: adjust default font size in SectionHeader widget * feat: enhance PiP mode with drag overlay instruction and UI improvements * fix: improve badge rendering with consistent margin and border for current channel * refactor: replace BackdropFilter with BlurredContainer for improved clarity and maintainability * fix: reduce background transparency in Uptime widget for better visibility * feat: enhance photo view dialog with full resolution toggle and blurred background * fix: reset chat delay to 0 when auto sync is enabled and update settings title for clarity * fix: adjust border width in theme to improve consistency * feat: add forceDarkMode option to BlurredContainer for improved theme adaptability * feat: implement offline followed channels feature with UI integration and settings option * fix: increase font size and weight for offline status text for better readability * feat: remove offline pinned channels feature and update related UI components * feat: optimize offline channels loading behavior based on expansion state * fix: improve clarity and consistency in repository guidelines formatting * feat: update full resolution URL handling and button visibility logic * feat: replace app bar with blurred version in chat-only mode and add animated scroll border * feat: refactor video chat layout for improved chat and video display in landscape mode * feat: remove bottom bar visibility setting and adjust chat layout accordingly * fix: simplify condition for displaying offline channels section in following tab * feat: enhance reply thread display with indentation and reply icon * feat: implement showModalBottomSheetWithProperFocus for improved focus handling * feat: add gradient direction support to BlurredContainer for enhanced visual effects * feat: enhance NavigationBar and Theme settings for improved visual consistency * feat: add gradient direction support to BlurredContainer in VideoChat for enhanced visual effects * chore: update .gitignore to include .cursor file for better environment management * fix: update PiP drag gesture conditions to include video paused state for better user experience * refactor: replace ScrollController with SettingsPageLayout in settings screens for improved layout management * refactor: centralize orientation handling by introducing OrientationUtils for improved readability and maintainability * refactor: replace OrientationUtils with ContextExtensions for streamlined context-based access to theme, layout, and API dependencies * refactor: improve video chat UI by adjusting title layout and adding stream info tooltips for better user experience * refactor: adjust titleSpacing in theme and navigation components for improved layout consistency * refactor: update stream info timer handling and overlay management for improved UI responsiveness * refactor: enhance stream info timer logic and overlay visibility management for chat-only mode * refactor: enhance input decoration theme in FrostyThemes for improved visual consistency and responsiveness * refactor: adjust inputDecorationTheme padding in FrostyThemes for improved visual consistency * refactor: enhance video overlay management by including video preview overlay in hideElements for improved UI consistency * refactor: improve chat bottom bar padding and video chat layout for enhanced UI consistency * refactor: adjust chat padding to account for device bottom insets for improved layout consistency * refactor: update text styles in FrostyThemes for improved visual consistency across UI components * refactor: update iOS minimum deployment target to 13.0 for improved compatibility * refactor: adjust chat bottom padding based on emote menu visibility for improved layout consistency * refactor: adjust padding values in StreamsList for improved layout consistency * refactor: replace Padding with AnimatedPadding in Chat for smoother layout transitions refactor: replace Container with AnimatedContainer in BlurredContainer for smoother animations * refactor: remove unnecessary radius property from ProfilePicture in OfflineChannelCard for cleaner code * refactor: enhance chat bottom bar suffix icon to display message delay with tooltip for improved user experience * refactor: update hint text and tooltips in chat bottom bar and search for improved clarity * refactor: simplify notification display logic and enhance chat input behavior for improved user experience * refactor: enhance layout consistency by adjusting spacing in various components across the channel and home screens * refactor: introduce LiveIndicator widget and adjust spacing in channel and video components for improved layout consistency * refactor: remove monospace font family from chat bottom bar for improved text rendering * refactor: reduce notification animation duration and change dismiss direction for improved user experience * refactor: replace VideoBar with StreamInfoBar in video components for improved layout and consistency * refactor: adjust font sizes and spacing in StreamInfoBar for improved layout consistency * refactor: standardize font sizes and update gradient stops in video components for improved visual consistency * refactor: update tooltip padding and background color in theme for improved visual consistency * refactor: enhance tooltip behavior and standardize font sizes in StreamInfoBar and related components for improved visual consistency * refactor: add showThumbnail option to LargeStreamCardSkeletonLoader for improved layout flexibility * refactor: add StreamInfoBarSkeletonLoader for improved layout consistency in stream components * refactor: add shadow effects to icons and text in StreamInfoBar and VideoOverlay for improved visual depth * refactor: update defaultOverlayOpacity to 0.0 for improved overlay behavior * fix: correct stream info text color on overlay * refactor: implement a new color picker dialog with random color generation for enhanced user experience * refactor: adjust gradient colors and stops in VideoOverlay for improved visual consistency * refactor: refine gradient colors and stops in VideoOverlay for enhanced visual clarity * refactor: add isCompact parameter to StreamInfoBar for responsive text sizing * fix: update tooltip background color to use surface color for better contrast * feat: add shared chat mode support in chat store and update StreamInfoBar for visual indication * refactor: disable debug print for IRC messages to reduce log clutter * feat: implement chat color selection feature with user color management in chat settings * refactor: replace color adjustment logic with new contrast-aware utility for chat names * refactor: simplify chat details UI by replacing list tiles with action cards and removing unused clear dialog * refactor: enhance chat details UI by improving time formatting and adding label styling to action cards * refactor: update chat color terminology to 'Username color' for clarity in UI * refactor: enhance chat details UI by introducing active chat modes display and improving layout structure * refactor: improve chat details layout by replacing ListTile with Padding and adding a Divider for better visual separation * refactor: remove chat notifications positioning setting and adjust notification alignment in video chat * refactor: streamline StreamInfoBar component by consolidating offline handling and improving layout for better readability * refactor: enhance StreamInfoBar by adding tooltip for streamer name and improving text overflow handling * refactor: adjust tooltip display duration in StreamInfoBar and update theme configuration * refactor: adjust margin and padding in StreamCard for improved layout consistency * chore: update dependencies in pubspec.yaml and pubspec.lock for Firebase and other packages * template * chore: update iOS platform version to 15.0 and Firebase dependencies to 12.2.0 * refactor: simplify StreamInfoBar layout by reducing nested widgets and improving text color handling * format * feat: enhance Channel model and StreamInfoBar to support offline channel details * feat: add offline indicator and improve StreamInfoBar layout for better offline channel display * fix: adjust icon color opacity in StreamInfoBar for improved visibility * feat: enhance dismissal animation in FrostyPhotoViewDialog to track swipe direction * docs: update copilot instructions for clarity and additional error handling details * refactor: optimize latency tooltip layout and improve offline indicator styling in VideoOverlay * feat: implement shared chat asset fetching and participant management in ChatAssetsStore * refactor: replace Observer with Builder for improved widget rebuilding in VideoOverlay * refactor: update StreamInfoBar border styling and adjust layout in VideoOverlay for improved visual consistency * feat: add showTextShadows property to StreamInfoBar for customizable text shadow display * refactor: adjust layout in VideoOverlay by adding padding to improve spacing and visual consistency * refactor: enhance VideoOverlay gradients and layout for improved visual hierarchy and user experience * refactor: reduce vertical padding in VideoOverlay for improved layout consistency * refactor: remove overlay opacity settings from VideoSettings and SettingsStore for simplification * refactor: improve text overlay transition in VideoChat for better user experience * Revert "refactor: improve text overlay transition in VideoChat for better user experience" This reverts commit fd16ff5ec30ec266157e5c8a9d4a6090c91717f6. * refactor: wrap videoOverlay in ColoredBox for improved layout handling * refactor: optimize animation duration and transition curves in VideoChat for smoother interactions * refactor: dispose searchScrollController in HomeStoreBase to prevent memory leaks * refactor: simplify gradient definitions in VideoOverlay for improved readability and maintainability * refactor: remove 'Offline' text overlay from VideoOverlay for cleaner UI * refactor: add refresh functionality for assets in ChatDetails with loading indicators * refactor: update visibility conditions for uptime, viewer count, and category display in StreamInfoBar * refactor: replace AlertDialog with FrostyDialog for consistent dialog styling across the application * refactor: enhance layout handling in FrostyPageView to prevent overflow during height transitions * refactor: replace ColorPickerDialog with AccentColorPickerDialog for improved color selection experience * refactor: replace theme and accent color settings with dedicated components for improved modularity and readability * refactor: replace ElevatedButton with TextButton for consistent button styling across dialogs * refactor: integrate MobX Observer for reactive state management in settings widgets * refactor: update theme and dialog components for improved styling and consistency * refactor: enhance dialog styling with rounded corners and border in theme configuration * refactor: improve dialog messages for unauthorized access handling * refactor: update bodyLarge text style in theme configuration to include font weight * refactor: standardize Divider usage and adjust theme styles for improved consistency * refactor: adjust Divider properties and theme styles for enhanced visual consistency * chore: remove GEMINI.md file as it is no longer needed for project documentation * refactor: enhance token validation and reconnect logic in AuthBase for improved error handling * format * refactor: integrate landscape cutout settings into VideoChat layout for improved responsiveness * refactor: implement app lifecycle handling in VideoChat and enhance stream info update logic in VideoStore * refactor: update landscape cutout conditionals in VideoChat layout for improved responsiveness * update AGENTS.md * add scrollbar to search * fix scrolling exception * update CLAUDE.md * 5 auth reconnect attemps then log out * increase reply max lines to 2 * simplify and improve reply formatting * add prime icon * better draggable divider * support draggable divider in fullscreen overlay chat * add text shadow in fullscreen chat overlay mode * format * add landscape checks * video store optimization attempts * Dispose WebViewController and remove JavaScript channels properly * Track and cleanup all MutationObservers to prevent accumulation * Throttle latency updates to once per 5 seconds (reduces CPU load) * Add timeout protection and null checks for robustness * Prevent duplicate event listeners on page reloads * double tap divider to reset * Revert "video store optimization attempts" This reverts commit b1df7b0de473543283211a489dca698d9d241857. * optimize video store attempt 2 * Revert "double tap divider to reset" This reverts commit aeb26a433500ec71f822794835e927018ee59e1e. * optimize latency listener to open the menu and check every 20 secconds * more optimizations * hard refresh * abbreviate latency * fix lint * improve hide default overlay * fix chat no longer reconnecting with chat delay * refine chat alerts * fix historical message missing badges and emotes on initial connection * parallelize * revert * add reconnect button inline action * refactor: replace Scrollbar with FrostyScrollbar across chat and settings screens for consistent styling * tweak chat details menu * add scrollbar to release notes, renames for consistency * fix duplicate message case * fix chat delay alerts in auto sync mode * add regex for numeric strings and enhance display name formatting logic * exterminate borders * refactor: simplify active chat modes display in chat details screen * feat: enhance chat input button with delay notification and disable state * fix: wrap chat in SafeArea to prevent UI overflow issues * refactor: remove divider line from video chat and update draggable divider visibility logic * persist overlay in pip mode * fix: update chat delay handling and notifications in chat bottom bar * fix: update chat overlay visibility logic to respect fullscreen settings * tap to show deleted message * fix: prevent accidental chat scrolling when accessing system UI in landscape mode * show latency in portrait * fix: enhance chat delay notifications with dynamic delay time * docs: update CLAUDE.md for improved environment variable instructions and architecture overview * fix: improve chat delay countdown management and message handling * add preliminary release notes * remove agents.md * update lockfile * add initial multi chat feature * add option to persist multi chat tabs * add remove confirmation dialog * improve add chat design * lazy-load tabs * create global assets store to dedupe global asset fetching * improve tab design/styles * update notes * use frosty dialog * update claude md * tweak * add ability to reorder tabs * resolve conflict * merge cleanup * format * update release notes * add chat delay sync completion tracking to prevent countdown re-appearance * add tests * fix * update release notes * bump
2026-01-01 22:28:17 -05:00
onEmoteError: onEmoteError,
onBadgeError: onBadgeError,
showTwitchEmotes: settings.showTwitchEmotes,
showTwitchBadges: settings.showTwitchBadges,
show7TVEmotes: settings.show7TVEmotes,
showBTTVEmotes: settings.showBTTVEmotes,
showFFZEmotes: settings.showFFZEmotes,
showFFZBadges: settings.showFFZBadges,
v5 (#463) * migrate to dio * ignore folders * simplify twitch api headers handling * clean up main * simplify logs * optimize profile picture fetching fixes refetches on tab switch * update claude md * refactor irc.dart * update copilot instructions with essential commands and project structure details * implement message sending state management and UI updates * refactor notification handling and add copy-paste functionality in chat * refactor AlertMessage to support vertical layout and optional padding * refactor error messages for consistency and clarity across various components * refactor chat layout to use draggable divider and improve chat width settings * refactor Uptime widget to use SharedTimerService for synchronized updates * refactor search results components to handle null future states gracefully * refactor loading indicators to use skeleton loaders for improved user experience * refactor UI components for improved layout and responsiveness, enhance skeleton loaders, and streamline padding adjustments * refactor: replace manual blur effects with BlurredContainer for consistency and reusability * refactor: enhance JavaScript execution and error handling in WebView components * refactor: replace app bar with blurred container for improved UI consistency across screens * refactor: streamline video chat layout and enhance PiP drag gesture functionality * revert some app bar changes * refactor: implement Picture-in-Picture drag functionality in VideoChat * refactor: pass currentChannelId to IRCMessage and ChatMessage for improved context * fix large thubmnail width * chore: update Gradle and Kotlin plugin versions for improved compatibility * changes from v4.10.0 branch * feat: integrate AnimatedScrollBorder for improved UI responsiveness across various screens * refactor: update SectionHeader styling and improve theme management * feat: add pinned section to StreamsList and enhance skeleton loader padding * feat: add repository guidelines for project structure, coding style, testing, and security * feat: enhance StreamCard UI with BlurredContainer and adjust border width in theme * feat: implement unfocusInput and safeRequestFocus methods to manage text field focus behavior * feat: enhance Picture-in-Picture drag interactions with haptic feedback and smooth animations * refactor: improve code formatting and readability across multiple files * feat: implement picture-in-picture mode toggle and state management for video playback * feat: reset PiP mode state when pausing video playback * feat: add custom app bar with profile picture and stream info for video chat * feat: convert multiple settings screens to use StatefulWidget and add animated scroll borders * feat: update blur configuration for adaptive alpha based on theme * fix: adjust default font size in SectionHeader widget * feat: enhance PiP mode with drag overlay instruction and UI improvements * fix: improve badge rendering with consistent margin and border for current channel * refactor: replace BackdropFilter with BlurredContainer for improved clarity and maintainability * fix: reduce background transparency in Uptime widget for better visibility * feat: enhance photo view dialog with full resolution toggle and blurred background * fix: reset chat delay to 0 when auto sync is enabled and update settings title for clarity * fix: adjust border width in theme to improve consistency * feat: add forceDarkMode option to BlurredContainer for improved theme adaptability * feat: implement offline followed channels feature with UI integration and settings option * fix: increase font size and weight for offline status text for better readability * feat: remove offline pinned channels feature and update related UI components * feat: optimize offline channels loading behavior based on expansion state * fix: improve clarity and consistency in repository guidelines formatting * feat: update full resolution URL handling and button visibility logic * feat: replace app bar with blurred version in chat-only mode and add animated scroll border * feat: refactor video chat layout for improved chat and video display in landscape mode * feat: remove bottom bar visibility setting and adjust chat layout accordingly * fix: simplify condition for displaying offline channels section in following tab * feat: enhance reply thread display with indentation and reply icon * feat: implement showModalBottomSheetWithProperFocus for improved focus handling * feat: add gradient direction support to BlurredContainer for enhanced visual effects * feat: enhance NavigationBar and Theme settings for improved visual consistency * feat: add gradient direction support to BlurredContainer in VideoChat for enhanced visual effects * chore: update .gitignore to include .cursor file for better environment management * fix: update PiP drag gesture conditions to include video paused state for better user experience * refactor: replace ScrollController with SettingsPageLayout in settings screens for improved layout management * refactor: centralize orientation handling by introducing OrientationUtils for improved readability and maintainability * refactor: replace OrientationUtils with ContextExtensions for streamlined context-based access to theme, layout, and API dependencies * refactor: improve video chat UI by adjusting title layout and adding stream info tooltips for better user experience * refactor: adjust titleSpacing in theme and navigation components for improved layout consistency * refactor: update stream info timer handling and overlay management for improved UI responsiveness * refactor: enhance stream info timer logic and overlay visibility management for chat-only mode * refactor: enhance input decoration theme in FrostyThemes for improved visual consistency and responsiveness * refactor: adjust inputDecorationTheme padding in FrostyThemes for improved visual consistency * refactor: enhance video overlay management by including video preview overlay in hideElements for improved UI consistency * refactor: improve chat bottom bar padding and video chat layout for enhanced UI consistency * refactor: adjust chat padding to account for device bottom insets for improved layout consistency * refactor: update text styles in FrostyThemes for improved visual consistency across UI components * refactor: update iOS minimum deployment target to 13.0 for improved compatibility * refactor: adjust chat bottom padding based on emote menu visibility for improved layout consistency * refactor: adjust padding values in StreamsList for improved layout consistency * refactor: replace Padding with AnimatedPadding in Chat for smoother layout transitions refactor: replace Container with AnimatedContainer in BlurredContainer for smoother animations * refactor: remove unnecessary radius property from ProfilePicture in OfflineChannelCard for cleaner code * refactor: enhance chat bottom bar suffix icon to display message delay with tooltip for improved user experience * refactor: update hint text and tooltips in chat bottom bar and search for improved clarity * refactor: simplify notification display logic and enhance chat input behavior for improved user experience * refactor: enhance layout consistency by adjusting spacing in various components across the channel and home screens * refactor: introduce LiveIndicator widget and adjust spacing in channel and video components for improved layout consistency * refactor: remove monospace font family from chat bottom bar for improved text rendering * refactor: reduce notification animation duration and change dismiss direction for improved user experience * refactor: replace VideoBar with StreamInfoBar in video components for improved layout and consistency * refactor: adjust font sizes and spacing in StreamInfoBar for improved layout consistency * refactor: standardize font sizes and update gradient stops in video components for improved visual consistency * refactor: update tooltip padding and background color in theme for improved visual consistency * refactor: enhance tooltip behavior and standardize font sizes in StreamInfoBar and related components for improved visual consistency * refactor: add showThumbnail option to LargeStreamCardSkeletonLoader for improved layout flexibility * refactor: add StreamInfoBarSkeletonLoader for improved layout consistency in stream components * refactor: add shadow effects to icons and text in StreamInfoBar and VideoOverlay for improved visual depth * refactor: update defaultOverlayOpacity to 0.0 for improved overlay behavior * fix: correct stream info text color on overlay * refactor: implement a new color picker dialog with random color generation for enhanced user experience * refactor: adjust gradient colors and stops in VideoOverlay for improved visual consistency * refactor: refine gradient colors and stops in VideoOverlay for enhanced visual clarity * refactor: add isCompact parameter to StreamInfoBar for responsive text sizing * fix: update tooltip background color to use surface color for better contrast * feat: add shared chat mode support in chat store and update StreamInfoBar for visual indication * refactor: disable debug print for IRC messages to reduce log clutter * feat: implement chat color selection feature with user color management in chat settings * refactor: replace color adjustment logic with new contrast-aware utility for chat names * refactor: simplify chat details UI by replacing list tiles with action cards and removing unused clear dialog * refactor: enhance chat details UI by improving time formatting and adding label styling to action cards * refactor: update chat color terminology to 'Username color' for clarity in UI * refactor: enhance chat details UI by introducing active chat modes display and improving layout structure * refactor: improve chat details layout by replacing ListTile with Padding and adding a Divider for better visual separation * refactor: remove chat notifications positioning setting and adjust notification alignment in video chat * refactor: streamline StreamInfoBar component by consolidating offline handling and improving layout for better readability * refactor: enhance StreamInfoBar by adding tooltip for streamer name and improving text overflow handling * refactor: adjust tooltip display duration in StreamInfoBar and update theme configuration * refactor: adjust margin and padding in StreamCard for improved layout consistency * chore: update dependencies in pubspec.yaml and pubspec.lock for Firebase and other packages * template * chore: update iOS platform version to 15.0 and Firebase dependencies to 12.2.0 * refactor: simplify StreamInfoBar layout by reducing nested widgets and improving text color handling * format * feat: enhance Channel model and StreamInfoBar to support offline channel details * feat: add offline indicator and improve StreamInfoBar layout for better offline channel display * fix: adjust icon color opacity in StreamInfoBar for improved visibility * feat: enhance dismissal animation in FrostyPhotoViewDialog to track swipe direction * docs: update copilot instructions for clarity and additional error handling details * refactor: optimize latency tooltip layout and improve offline indicator styling in VideoOverlay * feat: implement shared chat asset fetching and participant management in ChatAssetsStore * refactor: replace Observer with Builder for improved widget rebuilding in VideoOverlay * refactor: update StreamInfoBar border styling and adjust layout in VideoOverlay for improved visual consistency * feat: add showTextShadows property to StreamInfoBar for customizable text shadow display * refactor: adjust layout in VideoOverlay by adding padding to improve spacing and visual consistency * refactor: enhance VideoOverlay gradients and layout for improved visual hierarchy and user experience * refactor: reduce vertical padding in VideoOverlay for improved layout consistency * refactor: remove overlay opacity settings from VideoSettings and SettingsStore for simplification * refactor: improve text overlay transition in VideoChat for better user experience * Revert "refactor: improve text overlay transition in VideoChat for better user experience" This reverts commit fd16ff5ec30ec266157e5c8a9d4a6090c91717f6. * refactor: wrap videoOverlay in ColoredBox for improved layout handling * refactor: optimize animation duration and transition curves in VideoChat for smoother interactions * refactor: dispose searchScrollController in HomeStoreBase to prevent memory leaks * refactor: simplify gradient definitions in VideoOverlay for improved readability and maintainability * refactor: remove 'Offline' text overlay from VideoOverlay for cleaner UI * refactor: add refresh functionality for assets in ChatDetails with loading indicators * refactor: update visibility conditions for uptime, viewer count, and category display in StreamInfoBar * refactor: replace AlertDialog with FrostyDialog for consistent dialog styling across the application * refactor: enhance layout handling in FrostyPageView to prevent overflow during height transitions * refactor: replace ColorPickerDialog with AccentColorPickerDialog for improved color selection experience * refactor: replace theme and accent color settings with dedicated components for improved modularity and readability * refactor: replace ElevatedButton with TextButton for consistent button styling across dialogs * refactor: integrate MobX Observer for reactive state management in settings widgets * refactor: update theme and dialog components for improved styling and consistency * refactor: enhance dialog styling with rounded corners and border in theme configuration * refactor: improve dialog messages for unauthorized access handling * refactor: update bodyLarge text style in theme configuration to include font weight * refactor: standardize Divider usage and adjust theme styles for improved consistency * refactor: adjust Divider properties and theme styles for enhanced visual consistency * chore: remove GEMINI.md file as it is no longer needed for project documentation * refactor: enhance token validation and reconnect logic in AuthBase for improved error handling * format * refactor: integrate landscape cutout settings into VideoChat layout for improved responsiveness * refactor: implement app lifecycle handling in VideoChat and enhance stream info update logic in VideoStore * refactor: update landscape cutout conditionals in VideoChat layout for improved responsiveness * update AGENTS.md * add scrollbar to search * fix scrolling exception * update CLAUDE.md * 5 auth reconnect attemps then log out * increase reply max lines to 2 * simplify and improve reply formatting * add prime icon * better draggable divider * support draggable divider in fullscreen overlay chat * add text shadow in fullscreen chat overlay mode * format * add landscape checks * video store optimization attempts * Dispose WebViewController and remove JavaScript channels properly * Track and cleanup all MutationObservers to prevent accumulation * Throttle latency updates to once per 5 seconds (reduces CPU load) * Add timeout protection and null checks for robustness * Prevent duplicate event listeners on page reloads * double tap divider to reset * Revert "video store optimization attempts" This reverts commit b1df7b0de473543283211a489dca698d9d241857. * optimize video store attempt 2 * Revert "double tap divider to reset" This reverts commit aeb26a433500ec71f822794835e927018ee59e1e. * optimize latency listener to open the menu and check every 20 secconds * more optimizations * hard refresh * abbreviate latency * fix lint * improve hide default overlay * fix chat no longer reconnecting with chat delay * refine chat alerts * fix historical message missing badges and emotes on initial connection * parallelize * revert * add reconnect button inline action * refactor: replace Scrollbar with FrostyScrollbar across chat and settings screens for consistent styling * tweak chat details menu * add scrollbar to release notes, renames for consistency * fix duplicate message case * fix chat delay alerts in auto sync mode * add regex for numeric strings and enhance display name formatting logic * exterminate borders * refactor: simplify active chat modes display in chat details screen * feat: enhance chat input button with delay notification and disable state * fix: wrap chat in SafeArea to prevent UI overflow issues * refactor: remove divider line from video chat and update draggable divider visibility logic * persist overlay in pip mode * fix: update chat delay handling and notifications in chat bottom bar * fix: update chat overlay visibility logic to respect fullscreen settings * tap to show deleted message * fix: prevent accidental chat scrolling when accessing system UI in landscape mode * show latency in portrait * fix: enhance chat delay notifications with dynamic delay time * docs: update CLAUDE.md for improved environment variable instructions and architecture overview * fix: improve chat delay countdown management and message handling * add preliminary release notes * remove agents.md * update lockfile * add initial multi chat feature * add option to persist multi chat tabs * add remove confirmation dialog * improve add chat design * lazy-load tabs * create global assets store to dedupe global asset fetching * improve tab design/styles * update notes * use frosty dialog * update claude md * tweak * add ability to reorder tabs * resolve conflict * merge cleanup * format * update release notes * add chat delay sync completion tracking to prevent countdown re-appearance * add tests * fix * update release notes * bump
2026-01-01 22:28:17 -05:00
force: true,
);
v5 (#463) * migrate to dio * ignore folders * simplify twitch api headers handling * clean up main * simplify logs * optimize profile picture fetching fixes refetches on tab switch * update claude md * refactor irc.dart * update copilot instructions with essential commands and project structure details * implement message sending state management and UI updates * refactor notification handling and add copy-paste functionality in chat * refactor AlertMessage to support vertical layout and optional padding * refactor error messages for consistency and clarity across various components * refactor chat layout to use draggable divider and improve chat width settings * refactor Uptime widget to use SharedTimerService for synchronized updates * refactor search results components to handle null future states gracefully * refactor loading indicators to use skeleton loaders for improved user experience * refactor UI components for improved layout and responsiveness, enhance skeleton loaders, and streamline padding adjustments * refactor: replace manual blur effects with BlurredContainer for consistency and reusability * refactor: enhance JavaScript execution and error handling in WebView components * refactor: replace app bar with blurred container for improved UI consistency across screens * refactor: streamline video chat layout and enhance PiP drag gesture functionality * revert some app bar changes * refactor: implement Picture-in-Picture drag functionality in VideoChat * refactor: pass currentChannelId to IRCMessage and ChatMessage for improved context * fix large thubmnail width * chore: update Gradle and Kotlin plugin versions for improved compatibility * changes from v4.10.0 branch * feat: integrate AnimatedScrollBorder for improved UI responsiveness across various screens * refactor: update SectionHeader styling and improve theme management * feat: add pinned section to StreamsList and enhance skeleton loader padding * feat: add repository guidelines for project structure, coding style, testing, and security * feat: enhance StreamCard UI with BlurredContainer and adjust border width in theme * feat: implement unfocusInput and safeRequestFocus methods to manage text field focus behavior * feat: enhance Picture-in-Picture drag interactions with haptic feedback and smooth animations * refactor: improve code formatting and readability across multiple files * feat: implement picture-in-picture mode toggle and state management for video playback * feat: reset PiP mode state when pausing video playback * feat: add custom app bar with profile picture and stream info for video chat * feat: convert multiple settings screens to use StatefulWidget and add animated scroll borders * feat: update blur configuration for adaptive alpha based on theme * fix: adjust default font size in SectionHeader widget * feat: enhance PiP mode with drag overlay instruction and UI improvements * fix: improve badge rendering with consistent margin and border for current channel * refactor: replace BackdropFilter with BlurredContainer for improved clarity and maintainability * fix: reduce background transparency in Uptime widget for better visibility * feat: enhance photo view dialog with full resolution toggle and blurred background * fix: reset chat delay to 0 when auto sync is enabled and update settings title for clarity * fix: adjust border width in theme to improve consistency * feat: add forceDarkMode option to BlurredContainer for improved theme adaptability * feat: implement offline followed channels feature with UI integration and settings option * fix: increase font size and weight for offline status text for better readability * feat: remove offline pinned channels feature and update related UI components * feat: optimize offline channels loading behavior based on expansion state * fix: improve clarity and consistency in repository guidelines formatting * feat: update full resolution URL handling and button visibility logic * feat: replace app bar with blurred version in chat-only mode and add animated scroll border * feat: refactor video chat layout for improved chat and video display in landscape mode * feat: remove bottom bar visibility setting and adjust chat layout accordingly * fix: simplify condition for displaying offline channels section in following tab * feat: enhance reply thread display with indentation and reply icon * feat: implement showModalBottomSheetWithProperFocus for improved focus handling * feat: add gradient direction support to BlurredContainer for enhanced visual effects * feat: enhance NavigationBar and Theme settings for improved visual consistency * feat: add gradient direction support to BlurredContainer in VideoChat for enhanced visual effects * chore: update .gitignore to include .cursor file for better environment management * fix: update PiP drag gesture conditions to include video paused state for better user experience * refactor: replace ScrollController with SettingsPageLayout in settings screens for improved layout management * refactor: centralize orientation handling by introducing OrientationUtils for improved readability and maintainability * refactor: replace OrientationUtils with ContextExtensions for streamlined context-based access to theme, layout, and API dependencies * refactor: improve video chat UI by adjusting title layout and adding stream info tooltips for better user experience * refactor: adjust titleSpacing in theme and navigation components for improved layout consistency * refactor: update stream info timer handling and overlay management for improved UI responsiveness * refactor: enhance stream info timer logic and overlay visibility management for chat-only mode * refactor: enhance input decoration theme in FrostyThemes for improved visual consistency and responsiveness * refactor: adjust inputDecorationTheme padding in FrostyThemes for improved visual consistency * refactor: enhance video overlay management by including video preview overlay in hideElements for improved UI consistency * refactor: improve chat bottom bar padding and video chat layout for enhanced UI consistency * refactor: adjust chat padding to account for device bottom insets for improved layout consistency * refactor: update text styles in FrostyThemes for improved visual consistency across UI components * refactor: update iOS minimum deployment target to 13.0 for improved compatibility * refactor: adjust chat bottom padding based on emote menu visibility for improved layout consistency * refactor: adjust padding values in StreamsList for improved layout consistency * refactor: replace Padding with AnimatedPadding in Chat for smoother layout transitions refactor: replace Container with AnimatedContainer in BlurredContainer for smoother animations * refactor: remove unnecessary radius property from ProfilePicture in OfflineChannelCard for cleaner code * refactor: enhance chat bottom bar suffix icon to display message delay with tooltip for improved user experience * refactor: update hint text and tooltips in chat bottom bar and search for improved clarity * refactor: simplify notification display logic and enhance chat input behavior for improved user experience * refactor: enhance layout consistency by adjusting spacing in various components across the channel and home screens * refactor: introduce LiveIndicator widget and adjust spacing in channel and video components for improved layout consistency * refactor: remove monospace font family from chat bottom bar for improved text rendering * refactor: reduce notification animation duration and change dismiss direction for improved user experience * refactor: replace VideoBar with StreamInfoBar in video components for improved layout and consistency * refactor: adjust font sizes and spacing in StreamInfoBar for improved layout consistency * refactor: standardize font sizes and update gradient stops in video components for improved visual consistency * refactor: update tooltip padding and background color in theme for improved visual consistency * refactor: enhance tooltip behavior and standardize font sizes in StreamInfoBar and related components for improved visual consistency * refactor: add showThumbnail option to LargeStreamCardSkeletonLoader for improved layout flexibility * refactor: add StreamInfoBarSkeletonLoader for improved layout consistency in stream components * refactor: add shadow effects to icons and text in StreamInfoBar and VideoOverlay for improved visual depth * refactor: update defaultOverlayOpacity to 0.0 for improved overlay behavior * fix: correct stream info text color on overlay * refactor: implement a new color picker dialog with random color generation for enhanced user experience * refactor: adjust gradient colors and stops in VideoOverlay for improved visual consistency * refactor: refine gradient colors and stops in VideoOverlay for enhanced visual clarity * refactor: add isCompact parameter to StreamInfoBar for responsive text sizing * fix: update tooltip background color to use surface color for better contrast * feat: add shared chat mode support in chat store and update StreamInfoBar for visual indication * refactor: disable debug print for IRC messages to reduce log clutter * feat: implement chat color selection feature with user color management in chat settings * refactor: replace color adjustment logic with new contrast-aware utility for chat names * refactor: simplify chat details UI by replacing list tiles with action cards and removing unused clear dialog * refactor: enhance chat details UI by improving time formatting and adding label styling to action cards * refactor: update chat color terminology to 'Username color' for clarity in UI * refactor: enhance chat details UI by introducing active chat modes display and improving layout structure * refactor: improve chat details layout by replacing ListTile with Padding and adding a Divider for better visual separation * refactor: remove chat notifications positioning setting and adjust notification alignment in video chat * refactor: streamline StreamInfoBar component by consolidating offline handling and improving layout for better readability * refactor: enhance StreamInfoBar by adding tooltip for streamer name and improving text overflow handling * refactor: adjust tooltip display duration in StreamInfoBar and update theme configuration * refactor: adjust margin and padding in StreamCard for improved layout consistency * chore: update dependencies in pubspec.yaml and pubspec.lock for Firebase and other packages * template * chore: update iOS platform version to 15.0 and Firebase dependencies to 12.2.0 * refactor: simplify StreamInfoBar layout by reducing nested widgets and improving text color handling * format * feat: enhance Channel model and StreamInfoBar to support offline channel details * feat: add offline indicator and improve StreamInfoBar layout for better offline channel display * fix: adjust icon color opacity in StreamInfoBar for improved visibility * feat: enhance dismissal animation in FrostyPhotoViewDialog to track swipe direction * docs: update copilot instructions for clarity and additional error handling details * refactor: optimize latency tooltip layout and improve offline indicator styling in VideoOverlay * feat: implement shared chat asset fetching and participant management in ChatAssetsStore * refactor: replace Observer with Builder for improved widget rebuilding in VideoOverlay * refactor: update StreamInfoBar border styling and adjust layout in VideoOverlay for improved visual consistency * feat: add showTextShadows property to StreamInfoBar for customizable text shadow display * refactor: adjust layout in VideoOverlay by adding padding to improve spacing and visual consistency * refactor: enhance VideoOverlay gradients and layout for improved visual hierarchy and user experience * refactor: reduce vertical padding in VideoOverlay for improved layout consistency * refactor: remove overlay opacity settings from VideoSettings and SettingsStore for simplification * refactor: improve text overlay transition in VideoChat for better user experience * Revert "refactor: improve text overlay transition in VideoChat for better user experience" This reverts commit fd16ff5ec30ec266157e5c8a9d4a6090c91717f6. * refactor: wrap videoOverlay in ColoredBox for improved layout handling * refactor: optimize animation duration and transition curves in VideoChat for smoother interactions * refactor: dispose searchScrollController in HomeStoreBase to prevent memory leaks * refactor: simplify gradient definitions in VideoOverlay for improved readability and maintainability * refactor: remove 'Offline' text overlay from VideoOverlay for cleaner UI * refactor: add refresh functionality for assets in ChatDetails with loading indicators * refactor: update visibility conditions for uptime, viewer count, and category display in StreamInfoBar * refactor: replace AlertDialog with FrostyDialog for consistent dialog styling across the application * refactor: enhance layout handling in FrostyPageView to prevent overflow during height transitions * refactor: replace ColorPickerDialog with AccentColorPickerDialog for improved color selection experience * refactor: replace theme and accent color settings with dedicated components for improved modularity and readability * refactor: replace ElevatedButton with TextButton for consistent button styling across dialogs * refactor: integrate MobX Observer for reactive state management in settings widgets * refactor: update theme and dialog components for improved styling and consistency * refactor: enhance dialog styling with rounded corners and border in theme configuration * refactor: improve dialog messages for unauthorized access handling * refactor: update bodyLarge text style in theme configuration to include font weight * refactor: standardize Divider usage and adjust theme styles for improved consistency * refactor: adjust Divider properties and theme styles for enhanced visual consistency * chore: remove GEMINI.md file as it is no longer needed for project documentation * refactor: enhance token validation and reconnect logic in AuthBase for improved error handling * format * refactor: integrate landscape cutout settings into VideoChat layout for improved responsiveness * refactor: implement app lifecycle handling in VideoChat and enhance stream info update logic in VideoStore * refactor: update landscape cutout conditionals in VideoChat layout for improved responsiveness * update AGENTS.md * add scrollbar to search * fix scrolling exception * update CLAUDE.md * 5 auth reconnect attemps then log out * increase reply max lines to 2 * simplify and improve reply formatting * add prime icon * better draggable divider * support draggable divider in fullscreen overlay chat * add text shadow in fullscreen chat overlay mode * format * add landscape checks * video store optimization attempts * Dispose WebViewController and remove JavaScript channels properly * Track and cleanup all MutationObservers to prevent accumulation * Throttle latency updates to once per 5 seconds (reduces CPU load) * Add timeout protection and null checks for robustness * Prevent duplicate event listeners on page reloads * double tap divider to reset * Revert "video store optimization attempts" This reverts commit b1df7b0de473543283211a489dca698d9d241857. * optimize video store attempt 2 * Revert "double tap divider to reset" This reverts commit aeb26a433500ec71f822794835e927018ee59e1e. * optimize latency listener to open the menu and check every 20 secconds * more optimizations * hard refresh * abbreviate latency * fix lint * improve hide default overlay * fix chat no longer reconnecting with chat delay * refine chat alerts * fix historical message missing badges and emotes on initial connection * parallelize * revert * add reconnect button inline action * refactor: replace Scrollbar with FrostyScrollbar across chat and settings screens for consistent styling * tweak chat details menu * add scrollbar to release notes, renames for consistency * fix duplicate message case * fix chat delay alerts in auto sync mode * add regex for numeric strings and enhance display name formatting logic * exterminate borders * refactor: simplify active chat modes display in chat details screen * feat: enhance chat input button with delay notification and disable state * fix: wrap chat in SafeArea to prevent UI overflow issues * refactor: remove divider line from video chat and update draggable divider visibility logic * persist overlay in pip mode * fix: update chat delay handling and notifications in chat bottom bar * fix: update chat overlay visibility logic to respect fullscreen settings * tap to show deleted message * fix: prevent accidental chat scrolling when accessing system UI in landscape mode * show latency in portrait * fix: enhance chat delay notifications with dynamic delay time * docs: update CLAUDE.md for improved environment variable instructions and architecture overview * fix: improve chat delay countdown management and message handling * add preliminary release notes * remove agents.md * update lockfile * add initial multi chat feature * add option to persist multi chat tabs * add remove confirmation dialog * improve add chat design * lazy-load tabs * create global assets store to dedupe global asset fetching * improve tab design/styles * update notes * use frosty dialog * update claude md * tweak * add ability to reorder tabs * resolve conflict * merge cleanup * format * update release notes * add chat delay sync completion tracking to prevent countdown re-appearance * add tests * fix * update release notes * bump
2026-01-01 22:28:17 -05:00
await Future.wait([baseAssets, sharedAssets]);
} else {
await baseAssets;
}
}
/// Re-enables [_autoScroll] and jumps to the latest message.
@action
void resumeScroll() {
_autoScroll = true;
// Jump to the latest message (bottom of the list/chat).
scrollController.jumpTo(0);
// Add a post frame callback in the event a messages is added at the same time.
WidgetsBinding.instance.addPostFrameCallback((_) {
scrollController.jumpTo(0);
});
}
@action
void listenToSevenTVEmoteSet({required String emoteSetId}) {
final subscribePayload = SevenTVEvent(
op: 35,
d: SevenTVEventData(
type: 'emote_set.update',
condition: {'object_id': emoteSetId},
),
);
2024-08-09 21:28:59 -07:00
_sevenTVChannel?.sink.close(1000);
_clearPendingDelayedCallbacks(clearChat: false);
feat(video,chat): native player, ad-break awareness, chat send/delay reliability, and tab redesign (#567) Squash-merge commit. Covers four areas: native video player, chat reliability, multi-tab, and hardening. ## Native video player - Direct HLS playback via `better_native_video_player` (forked from `plug-and-pay/flutter-native-video-player`, patched on `frosty-patches` branch) - Twitch GQL playback token fetching with platform cookie extraction (iOS Swift + Android Kotlin plugins) for authenticated streams - Quality selection (source, 720p, 480p, 360p, 160p, audio-only) persisted per channel - Picture-in-picture: iOS automatic inline PiP, Android auto-PiP on API 31+ guarded against older devices - Latency polling, chat latency sync, stall detection/recovery, startup auto-pause recovery, watchdog timers - **Twitch stitched-ad break detection** (HLS `EXT-X-DATERANGE`) on both platforms, emitting `adBreakChanged` so the host suspends latency/stall recovery and chat sync during ads (program-date-time is unreliable then). Matches `CLASS="twitch-stitched-ad"` / `ID="stitched-ad-"` **and** the `X-TV-TWITCH-AD-*` attribute prefix (the durable signal streamlink/yt-dlp use) - Shared `VideoPlayerInterface` so WebView and native paths are interchangeable via settings toggle - `PlaybackAccessToken` model, `TwitchGqlApi` client ## Chat delay & send reliability - **Optimistic send-finalize**: Twitch acks a sent message with a per-PRIVMSG USERSTATE (not an echo), which it can intermittently drop — more so under a long chat delay. A missing ack no longer shows a false "message may not have been sent" error; the send is finalized optimistically (local echo rendered), and only genuine rejection NOTICEs surface an error. Ack timeout scaled by the chat delay. - **Per-line chat-delay bypass**: control/state lines (USERSTATE/ROOMSTATE/GLOBALUSERSTATE), rejection NOTICEs, the reconnect notice, and untagged server lines bypass the delay so send-acks and PONGs aren't stalled; only displayable chat content is delayed, staying in sync with delayed video. - **Measured chat bottom-bar height**: the message list reflows to the composer's real measured height, fixing the input overlapping messages when a long message expands it (replaces a fixed-constant estimate). - IRC tag parsing handles valueless and escaped tags per the IRCv3 message-tags spec (fixes a recent-messages RangeError on certain tags). ## Chat / multi-tab - Redesigned tab chips: unread dot indicator, chips dim until WebSocket connects - Animated tab options popover replacing `MenuAnchor` (no animation hook in Flutter 3.44) - Simplified `ChatTabs` from `StatefulWidget` to `StatelessWidget` - Focus-current-channel fade bump to 0.55; section-header alpha lifted to match the muted-label tier - `addTab` now calls `setActiveTab` to snapshot outgoing tab's `lastSeenMessageId` — fixes spurious unread dots after adding a tab - `onActivateSourceTab` threaded into `ChatUserModal` so Reply in merged mode switches to the correct source tab's composer ## Bug fixes and hardening - **Reverted the experimental iOS low-latency mode** (5s live-edge join + 1.05x catch-up): AVPlayer can't sustain <~18s on Twitch (declared `TARGETDURATION:6` paces playlist refreshes), and the offset starved the buffer into pause-on-launch. Default join distance restored. - Fork (Android): **cap `BEHIND_LIVE_WINDOW` recovery** so a stream repeatedly falling off the live window can't silently re-prepare forever; emits `error` on exhaustion so the host recovery ladder takes over - Guard all Android `setAutoPipMode` calls with `_autoPipAvailable` — prevents `PlatformException` on Android 8–11; check `_disposed` after `isAutoPipAvailable` await to prevent post-dispose auto-PiP re-enable - Remove `_isInPipMode` guard from `_onPaused` so `_paused` tracks actual state, fixing PiP play/pause toggle getting stuck - Tighten iOS cookie domain check to exact `twitch.tv` / `.twitch.tv` suffix - Invalidate the stored web session token when Twitch rejects it with a 401 (profile card flips back to unlinked; future loads skip the doomed authenticated request), and re-extract the cookie on launch when logged in without a linked session - Send `play_session_id` and `player_backend=mediaplayer` to Usher, matching the web client / streamlink - Fork (iOS): restore program-date-time latency measurement (a prior rev measured distance to the manifest edge, reading ~0s and silently disabling high-latency recovery / chat-delay auto-sync); release platform views on dispose (per-stream view + AVPlayerViewController leak), track the observed AVPlayerItem for KVO removal (sibling-view crash), main-thread seek results, resolve superseded load futures - Fork (Android): clean up method handlers orphaned by PiP-time view disposal (leaked audio-focus listeners), drop the live-offset re-anchoring seekTo on metadata updates (latency creep), restore pre-duck volume, respect user pause in the stall watchdog, resolve superseded load futures - Deep review pass: expire the quality-switch flag so stall recovery isn't disabled for the session, cap latency-driven recovery (clock-skew loop), generation-guard the error overlay, two-strike offline confirmation, controller null-safety on quality switch - Tighten `/me` local-echo match (no longer renders `/meow ...` as an action); clear pending send text on disconnect ## Web / docs - Remove stale Cloudflare Images binding from `wrangler.jsonc` (covered by `images.unoptimized: true`) - Correct `web/AGENTS.md` Cache Components claim (feature not enabled) - Repo and agent config cleanup ## Test plan - [x] `flutter analyze` — clean (frosty + plugin lib) - [x] `flutter test` — 319/319 pass (adds `ChatLatencySync`, `StreamInfoPoller`, video timing invariants, `PlaybackAccessToken`, IRC tag parsing) - [x] Android plugin Kotlin compiles against the bumped fork rev - [ ] Native player plays live streams on iOS and Android - [ ] Quality switching works and persists across channel reopens - [ ] PiP enters/exits correctly; pause/resume toggle in PiP window works - [ ] Audio-only mode does not crash on Android < API 31 - [ ] Sending under a long synced chat delay no longer shows a false "may not have been sent" error - [ ] Long composer text reflows the message list (no input/message overlap) - [ ] Multi-tab: adding a tab does not mark previous tab as unread - [ ] Merged chat: Reply from user modal targets the correct tab's composer 🤖 Generated with [Claude Code](https://claude.com/claude-code)
2026-06-13 17:06:24 -04:00
_sevenTVChannel = IOWebSocketChannel.connect(
v5 (#463) * migrate to dio * ignore folders * simplify twitch api headers handling * clean up main * simplify logs * optimize profile picture fetching fixes refetches on tab switch * update claude md * refactor irc.dart * update copilot instructions with essential commands and project structure details * implement message sending state management and UI updates * refactor notification handling and add copy-paste functionality in chat * refactor AlertMessage to support vertical layout and optional padding * refactor error messages for consistency and clarity across various components * refactor chat layout to use draggable divider and improve chat width settings * refactor Uptime widget to use SharedTimerService for synchronized updates * refactor search results components to handle null future states gracefully * refactor loading indicators to use skeleton loaders for improved user experience * refactor UI components for improved layout and responsiveness, enhance skeleton loaders, and streamline padding adjustments * refactor: replace manual blur effects with BlurredContainer for consistency and reusability * refactor: enhance JavaScript execution and error handling in WebView components * refactor: replace app bar with blurred container for improved UI consistency across screens * refactor: streamline video chat layout and enhance PiP drag gesture functionality * revert some app bar changes * refactor: implement Picture-in-Picture drag functionality in VideoChat * refactor: pass currentChannelId to IRCMessage and ChatMessage for improved context * fix large thubmnail width * chore: update Gradle and Kotlin plugin versions for improved compatibility * changes from v4.10.0 branch * feat: integrate AnimatedScrollBorder for improved UI responsiveness across various screens * refactor: update SectionHeader styling and improve theme management * feat: add pinned section to StreamsList and enhance skeleton loader padding * feat: add repository guidelines for project structure, coding style, testing, and security * feat: enhance StreamCard UI with BlurredContainer and adjust border width in theme * feat: implement unfocusInput and safeRequestFocus methods to manage text field focus behavior * feat: enhance Picture-in-Picture drag interactions with haptic feedback and smooth animations * refactor: improve code formatting and readability across multiple files * feat: implement picture-in-picture mode toggle and state management for video playback * feat: reset PiP mode state when pausing video playback * feat: add custom app bar with profile picture and stream info for video chat * feat: convert multiple settings screens to use StatefulWidget and add animated scroll borders * feat: update blur configuration for adaptive alpha based on theme * fix: adjust default font size in SectionHeader widget * feat: enhance PiP mode with drag overlay instruction and UI improvements * fix: improve badge rendering with consistent margin and border for current channel * refactor: replace BackdropFilter with BlurredContainer for improved clarity and maintainability * fix: reduce background transparency in Uptime widget for better visibility * feat: enhance photo view dialog with full resolution toggle and blurred background * fix: reset chat delay to 0 when auto sync is enabled and update settings title for clarity * fix: adjust border width in theme to improve consistency * feat: add forceDarkMode option to BlurredContainer for improved theme adaptability * feat: implement offline followed channels feature with UI integration and settings option * fix: increase font size and weight for offline status text for better readability * feat: remove offline pinned channels feature and update related UI components * feat: optimize offline channels loading behavior based on expansion state * fix: improve clarity and consistency in repository guidelines formatting * feat: update full resolution URL handling and button visibility logic * feat: replace app bar with blurred version in chat-only mode and add animated scroll border * feat: refactor video chat layout for improved chat and video display in landscape mode * feat: remove bottom bar visibility setting and adjust chat layout accordingly * fix: simplify condition for displaying offline channels section in following tab * feat: enhance reply thread display with indentation and reply icon * feat: implement showModalBottomSheetWithProperFocus for improved focus handling * feat: add gradient direction support to BlurredContainer for enhanced visual effects * feat: enhance NavigationBar and Theme settings for improved visual consistency * feat: add gradient direction support to BlurredContainer in VideoChat for enhanced visual effects * chore: update .gitignore to include .cursor file for better environment management * fix: update PiP drag gesture conditions to include video paused state for better user experience * refactor: replace ScrollController with SettingsPageLayout in settings screens for improved layout management * refactor: centralize orientation handling by introducing OrientationUtils for improved readability and maintainability * refactor: replace OrientationUtils with ContextExtensions for streamlined context-based access to theme, layout, and API dependencies * refactor: improve video chat UI by adjusting title layout and adding stream info tooltips for better user experience * refactor: adjust titleSpacing in theme and navigation components for improved layout consistency * refactor: update stream info timer handling and overlay management for improved UI responsiveness * refactor: enhance stream info timer logic and overlay visibility management for chat-only mode * refactor: enhance input decoration theme in FrostyThemes for improved visual consistency and responsiveness * refactor: adjust inputDecorationTheme padding in FrostyThemes for improved visual consistency * refactor: enhance video overlay management by including video preview overlay in hideElements for improved UI consistency * refactor: improve chat bottom bar padding and video chat layout for enhanced UI consistency * refactor: adjust chat padding to account for device bottom insets for improved layout consistency * refactor: update text styles in FrostyThemes for improved visual consistency across UI components * refactor: update iOS minimum deployment target to 13.0 for improved compatibility * refactor: adjust chat bottom padding based on emote menu visibility for improved layout consistency * refactor: adjust padding values in StreamsList for improved layout consistency * refactor: replace Padding with AnimatedPadding in Chat for smoother layout transitions refactor: replace Container with AnimatedContainer in BlurredContainer for smoother animations * refactor: remove unnecessary radius property from ProfilePicture in OfflineChannelCard for cleaner code * refactor: enhance chat bottom bar suffix icon to display message delay with tooltip for improved user experience * refactor: update hint text and tooltips in chat bottom bar and search for improved clarity * refactor: simplify notification display logic and enhance chat input behavior for improved user experience * refactor: enhance layout consistency by adjusting spacing in various components across the channel and home screens * refactor: introduce LiveIndicator widget and adjust spacing in channel and video components for improved layout consistency * refactor: remove monospace font family from chat bottom bar for improved text rendering * refactor: reduce notification animation duration and change dismiss direction for improved user experience * refactor: replace VideoBar with StreamInfoBar in video components for improved layout and consistency * refactor: adjust font sizes and spacing in StreamInfoBar for improved layout consistency * refactor: standardize font sizes and update gradient stops in video components for improved visual consistency * refactor: update tooltip padding and background color in theme for improved visual consistency * refactor: enhance tooltip behavior and standardize font sizes in StreamInfoBar and related components for improved visual consistency * refactor: add showThumbnail option to LargeStreamCardSkeletonLoader for improved layout flexibility * refactor: add StreamInfoBarSkeletonLoader for improved layout consistency in stream components * refactor: add shadow effects to icons and text in StreamInfoBar and VideoOverlay for improved visual depth * refactor: update defaultOverlayOpacity to 0.0 for improved overlay behavior * fix: correct stream info text color on overlay * refactor: implement a new color picker dialog with random color generation for enhanced user experience * refactor: adjust gradient colors and stops in VideoOverlay for improved visual consistency * refactor: refine gradient colors and stops in VideoOverlay for enhanced visual clarity * refactor: add isCompact parameter to StreamInfoBar for responsive text sizing * fix: update tooltip background color to use surface color for better contrast * feat: add shared chat mode support in chat store and update StreamInfoBar for visual indication * refactor: disable debug print for IRC messages to reduce log clutter * feat: implement chat color selection feature with user color management in chat settings * refactor: replace color adjustment logic with new contrast-aware utility for chat names * refactor: simplify chat details UI by replacing list tiles with action cards and removing unused clear dialog * refactor: enhance chat details UI by improving time formatting and adding label styling to action cards * refactor: update chat color terminology to 'Username color' for clarity in UI * refactor: enhance chat details UI by introducing active chat modes display and improving layout structure * refactor: improve chat details layout by replacing ListTile with Padding and adding a Divider for better visual separation * refactor: remove chat notifications positioning setting and adjust notification alignment in video chat * refactor: streamline StreamInfoBar component by consolidating offline handling and improving layout for better readability * refactor: enhance StreamInfoBar by adding tooltip for streamer name and improving text overflow handling * refactor: adjust tooltip display duration in StreamInfoBar and update theme configuration * refactor: adjust margin and padding in StreamCard for improved layout consistency * chore: update dependencies in pubspec.yaml and pubspec.lock for Firebase and other packages * template * chore: update iOS platform version to 15.0 and Firebase dependencies to 12.2.0 * refactor: simplify StreamInfoBar layout by reducing nested widgets and improving text color handling * format * feat: enhance Channel model and StreamInfoBar to support offline channel details * feat: add offline indicator and improve StreamInfoBar layout for better offline channel display * fix: adjust icon color opacity in StreamInfoBar for improved visibility * feat: enhance dismissal animation in FrostyPhotoViewDialog to track swipe direction * docs: update copilot instructions for clarity and additional error handling details * refactor: optimize latency tooltip layout and improve offline indicator styling in VideoOverlay * feat: implement shared chat asset fetching and participant management in ChatAssetsStore * refactor: replace Observer with Builder for improved widget rebuilding in VideoOverlay * refactor: update StreamInfoBar border styling and adjust layout in VideoOverlay for improved visual consistency * feat: add showTextShadows property to StreamInfoBar for customizable text shadow display * refactor: adjust layout in VideoOverlay by adding padding to improve spacing and visual consistency * refactor: enhance VideoOverlay gradients and layout for improved visual hierarchy and user experience * refactor: reduce vertical padding in VideoOverlay for improved layout consistency * refactor: remove overlay opacity settings from VideoSettings and SettingsStore for simplification * refactor: improve text overlay transition in VideoChat for better user experience * Revert "refactor: improve text overlay transition in VideoChat for better user experience" This reverts commit fd16ff5ec30ec266157e5c8a9d4a6090c91717f6. * refactor: wrap videoOverlay in ColoredBox for improved layout handling * refactor: optimize animation duration and transition curves in VideoChat for smoother interactions * refactor: dispose searchScrollController in HomeStoreBase to prevent memory leaks * refactor: simplify gradient definitions in VideoOverlay for improved readability and maintainability * refactor: remove 'Offline' text overlay from VideoOverlay for cleaner UI * refactor: add refresh functionality for assets in ChatDetails with loading indicators * refactor: update visibility conditions for uptime, viewer count, and category display in StreamInfoBar * refactor: replace AlertDialog with FrostyDialog for consistent dialog styling across the application * refactor: enhance layout handling in FrostyPageView to prevent overflow during height transitions * refactor: replace ColorPickerDialog with AccentColorPickerDialog for improved color selection experience * refactor: replace theme and accent color settings with dedicated components for improved modularity and readability * refactor: replace ElevatedButton with TextButton for consistent button styling across dialogs * refactor: integrate MobX Observer for reactive state management in settings widgets * refactor: update theme and dialog components for improved styling and consistency * refactor: enhance dialog styling with rounded corners and border in theme configuration * refactor: improve dialog messages for unauthorized access handling * refactor: update bodyLarge text style in theme configuration to include font weight * refactor: standardize Divider usage and adjust theme styles for improved consistency * refactor: adjust Divider properties and theme styles for enhanced visual consistency * chore: remove GEMINI.md file as it is no longer needed for project documentation * refactor: enhance token validation and reconnect logic in AuthBase for improved error handling * format * refactor: integrate landscape cutout settings into VideoChat layout for improved responsiveness * refactor: implement app lifecycle handling in VideoChat and enhance stream info update logic in VideoStore * refactor: update landscape cutout conditionals in VideoChat layout for improved responsiveness * update AGENTS.md * add scrollbar to search * fix scrolling exception * update CLAUDE.md * 5 auth reconnect attemps then log out * increase reply max lines to 2 * simplify and improve reply formatting * add prime icon * better draggable divider * support draggable divider in fullscreen overlay chat * add text shadow in fullscreen chat overlay mode * format * add landscape checks * video store optimization attempts * Dispose WebViewController and remove JavaScript channels properly * Track and cleanup all MutationObservers to prevent accumulation * Throttle latency updates to once per 5 seconds (reduces CPU load) * Add timeout protection and null checks for robustness * Prevent duplicate event listeners on page reloads * double tap divider to reset * Revert "video store optimization attempts" This reverts commit b1df7b0de473543283211a489dca698d9d241857. * optimize video store attempt 2 * Revert "double tap divider to reset" This reverts commit aeb26a433500ec71f822794835e927018ee59e1e. * optimize latency listener to open the menu and check every 20 secconds * more optimizations * hard refresh * abbreviate latency * fix lint * improve hide default overlay * fix chat no longer reconnecting with chat delay * refine chat alerts * fix historical message missing badges and emotes on initial connection * parallelize * revert * add reconnect button inline action * refactor: replace Scrollbar with FrostyScrollbar across chat and settings screens for consistent styling * tweak chat details menu * add scrollbar to release notes, renames for consistency * fix duplicate message case * fix chat delay alerts in auto sync mode * add regex for numeric strings and enhance display name formatting logic * exterminate borders * refactor: simplify active chat modes display in chat details screen * feat: enhance chat input button with delay notification and disable state * fix: wrap chat in SafeArea to prevent UI overflow issues * refactor: remove divider line from video chat and update draggable divider visibility logic * persist overlay in pip mode * fix: update chat delay handling and notifications in chat bottom bar * fix: update chat overlay visibility logic to respect fullscreen settings * tap to show deleted message * fix: prevent accidental chat scrolling when accessing system UI in landscape mode * show latency in portrait * fix: enhance chat delay notifications with dynamic delay time * docs: update CLAUDE.md for improved environment variable instructions and architecture overview * fix: improve chat delay countdown management and message handling * add preliminary release notes * remove agents.md * update lockfile * add initial multi chat feature * add option to persist multi chat tabs * add remove confirmation dialog * improve add chat design * lazy-load tabs * create global assets store to dedupe global asset fetching * improve tab design/styles * update notes * use frosty dialog * update claude md * tweak * add ability to reorder tabs * resolve conflict * merge cleanup * format * update release notes * add chat delay sync completion tracking to prevent countdown re-appearance * add tests * fix * update release notes * bump
2026-01-01 22:28:17 -05:00
Uri.parse('wss://events.7tv.io/v3'),
feat(video,chat): native player, ad-break awareness, chat send/delay reliability, and tab redesign (#567) Squash-merge commit. Covers four areas: native video player, chat reliability, multi-tab, and hardening. ## Native video player - Direct HLS playback via `better_native_video_player` (forked from `plug-and-pay/flutter-native-video-player`, patched on `frosty-patches` branch) - Twitch GQL playback token fetching with platform cookie extraction (iOS Swift + Android Kotlin plugins) for authenticated streams - Quality selection (source, 720p, 480p, 360p, 160p, audio-only) persisted per channel - Picture-in-picture: iOS automatic inline PiP, Android auto-PiP on API 31+ guarded against older devices - Latency polling, chat latency sync, stall detection/recovery, startup auto-pause recovery, watchdog timers - **Twitch stitched-ad break detection** (HLS `EXT-X-DATERANGE`) on both platforms, emitting `adBreakChanged` so the host suspends latency/stall recovery and chat sync during ads (program-date-time is unreliable then). Matches `CLASS="twitch-stitched-ad"` / `ID="stitched-ad-"` **and** the `X-TV-TWITCH-AD-*` attribute prefix (the durable signal streamlink/yt-dlp use) - Shared `VideoPlayerInterface` so WebView and native paths are interchangeable via settings toggle - `PlaybackAccessToken` model, `TwitchGqlApi` client ## Chat delay & send reliability - **Optimistic send-finalize**: Twitch acks a sent message with a per-PRIVMSG USERSTATE (not an echo), which it can intermittently drop — more so under a long chat delay. A missing ack no longer shows a false "message may not have been sent" error; the send is finalized optimistically (local echo rendered), and only genuine rejection NOTICEs surface an error. Ack timeout scaled by the chat delay. - **Per-line chat-delay bypass**: control/state lines (USERSTATE/ROOMSTATE/GLOBALUSERSTATE), rejection NOTICEs, the reconnect notice, and untagged server lines bypass the delay so send-acks and PONGs aren't stalled; only displayable chat content is delayed, staying in sync with delayed video. - **Measured chat bottom-bar height**: the message list reflows to the composer's real measured height, fixing the input overlapping messages when a long message expands it (replaces a fixed-constant estimate). - IRC tag parsing handles valueless and escaped tags per the IRCv3 message-tags spec (fixes a recent-messages RangeError on certain tags). ## Chat / multi-tab - Redesigned tab chips: unread dot indicator, chips dim until WebSocket connects - Animated tab options popover replacing `MenuAnchor` (no animation hook in Flutter 3.44) - Simplified `ChatTabs` from `StatefulWidget` to `StatelessWidget` - Focus-current-channel fade bump to 0.55; section-header alpha lifted to match the muted-label tier - `addTab` now calls `setActiveTab` to snapshot outgoing tab's `lastSeenMessageId` — fixes spurious unread dots after adding a tab - `onActivateSourceTab` threaded into `ChatUserModal` so Reply in merged mode switches to the correct source tab's composer ## Bug fixes and hardening - **Reverted the experimental iOS low-latency mode** (5s live-edge join + 1.05x catch-up): AVPlayer can't sustain <~18s on Twitch (declared `TARGETDURATION:6` paces playlist refreshes), and the offset starved the buffer into pause-on-launch. Default join distance restored. - Fork (Android): **cap `BEHIND_LIVE_WINDOW` recovery** so a stream repeatedly falling off the live window can't silently re-prepare forever; emits `error` on exhaustion so the host recovery ladder takes over - Guard all Android `setAutoPipMode` calls with `_autoPipAvailable` — prevents `PlatformException` on Android 8–11; check `_disposed` after `isAutoPipAvailable` await to prevent post-dispose auto-PiP re-enable - Remove `_isInPipMode` guard from `_onPaused` so `_paused` tracks actual state, fixing PiP play/pause toggle getting stuck - Tighten iOS cookie domain check to exact `twitch.tv` / `.twitch.tv` suffix - Invalidate the stored web session token when Twitch rejects it with a 401 (profile card flips back to unlinked; future loads skip the doomed authenticated request), and re-extract the cookie on launch when logged in without a linked session - Send `play_session_id` and `player_backend=mediaplayer` to Usher, matching the web client / streamlink - Fork (iOS): restore program-date-time latency measurement (a prior rev measured distance to the manifest edge, reading ~0s and silently disabling high-latency recovery / chat-delay auto-sync); release platform views on dispose (per-stream view + AVPlayerViewController leak), track the observed AVPlayerItem for KVO removal (sibling-view crash), main-thread seek results, resolve superseded load futures - Fork (Android): clean up method handlers orphaned by PiP-time view disposal (leaked audio-focus listeners), drop the live-offset re-anchoring seekTo on metadata updates (latency creep), restore pre-duck volume, respect user pause in the stall watchdog, resolve superseded load futures - Deep review pass: expire the quality-switch flag so stall recovery isn't disabled for the session, cap latency-driven recovery (clock-skew loop), generation-guard the error overlay, two-strike offline confirmation, controller null-safety on quality switch - Tighten `/me` local-echo match (no longer renders `/meow ...` as an action); clear pending send text on disconnect ## Web / docs - Remove stale Cloudflare Images binding from `wrangler.jsonc` (covered by `images.unoptimized: true`) - Correct `web/AGENTS.md` Cache Components claim (feature not enabled) - Repo and agent config cleanup ## Test plan - [x] `flutter analyze` — clean (frosty + plugin lib) - [x] `flutter test` — 319/319 pass (adds `ChatLatencySync`, `StreamInfoPoller`, video timing invariants, `PlaybackAccessToken`, IRC tag parsing) - [x] Android plugin Kotlin compiles against the bumped fork rev - [ ] Native player plays live streams on iOS and Android - [ ] Quality switching works and persists across channel reopens - [ ] PiP enters/exits correctly; pause/resume toggle in PiP window works - [ ] Audio-only mode does not crash on Android < API 31 - [ ] Sending under a long synced chat delay no longer shows a false "may not have been sent" error - [ ] Long composer text reflows the message list (no input/message overlap) - [ ] Multi-tab: adding a tab does not mark previous tab as unread - [ ] Merged chat: Reply from user modal targets the correct tab's composer 🤖 Generated with [Claude Code](https://claude.com/claude-code)
2026-06-13 17:06:24 -04:00
pingInterval: _pingInterval,
v5 (#463) * migrate to dio * ignore folders * simplify twitch api headers handling * clean up main * simplify logs * optimize profile picture fetching fixes refetches on tab switch * update claude md * refactor irc.dart * update copilot instructions with essential commands and project structure details * implement message sending state management and UI updates * refactor notification handling and add copy-paste functionality in chat * refactor AlertMessage to support vertical layout and optional padding * refactor error messages for consistency and clarity across various components * refactor chat layout to use draggable divider and improve chat width settings * refactor Uptime widget to use SharedTimerService for synchronized updates * refactor search results components to handle null future states gracefully * refactor loading indicators to use skeleton loaders for improved user experience * refactor UI components for improved layout and responsiveness, enhance skeleton loaders, and streamline padding adjustments * refactor: replace manual blur effects with BlurredContainer for consistency and reusability * refactor: enhance JavaScript execution and error handling in WebView components * refactor: replace app bar with blurred container for improved UI consistency across screens * refactor: streamline video chat layout and enhance PiP drag gesture functionality * revert some app bar changes * refactor: implement Picture-in-Picture drag functionality in VideoChat * refactor: pass currentChannelId to IRCMessage and ChatMessage for improved context * fix large thubmnail width * chore: update Gradle and Kotlin plugin versions for improved compatibility * changes from v4.10.0 branch * feat: integrate AnimatedScrollBorder for improved UI responsiveness across various screens * refactor: update SectionHeader styling and improve theme management * feat: add pinned section to StreamsList and enhance skeleton loader padding * feat: add repository guidelines for project structure, coding style, testing, and security * feat: enhance StreamCard UI with BlurredContainer and adjust border width in theme * feat: implement unfocusInput and safeRequestFocus methods to manage text field focus behavior * feat: enhance Picture-in-Picture drag interactions with haptic feedback and smooth animations * refactor: improve code formatting and readability across multiple files * feat: implement picture-in-picture mode toggle and state management for video playback * feat: reset PiP mode state when pausing video playback * feat: add custom app bar with profile picture and stream info for video chat * feat: convert multiple settings screens to use StatefulWidget and add animated scroll borders * feat: update blur configuration for adaptive alpha based on theme * fix: adjust default font size in SectionHeader widget * feat: enhance PiP mode with drag overlay instruction and UI improvements * fix: improve badge rendering with consistent margin and border for current channel * refactor: replace BackdropFilter with BlurredContainer for improved clarity and maintainability * fix: reduce background transparency in Uptime widget for better visibility * feat: enhance photo view dialog with full resolution toggle and blurred background * fix: reset chat delay to 0 when auto sync is enabled and update settings title for clarity * fix: adjust border width in theme to improve consistency * feat: add forceDarkMode option to BlurredContainer for improved theme adaptability * feat: implement offline followed channels feature with UI integration and settings option * fix: increase font size and weight for offline status text for better readability * feat: remove offline pinned channels feature and update related UI components * feat: optimize offline channels loading behavior based on expansion state * fix: improve clarity and consistency in repository guidelines formatting * feat: update full resolution URL handling and button visibility logic * feat: replace app bar with blurred version in chat-only mode and add animated scroll border * feat: refactor video chat layout for improved chat and video display in landscape mode * feat: remove bottom bar visibility setting and adjust chat layout accordingly * fix: simplify condition for displaying offline channels section in following tab * feat: enhance reply thread display with indentation and reply icon * feat: implement showModalBottomSheetWithProperFocus for improved focus handling * feat: add gradient direction support to BlurredContainer for enhanced visual effects * feat: enhance NavigationBar and Theme settings for improved visual consistency * feat: add gradient direction support to BlurredContainer in VideoChat for enhanced visual effects * chore: update .gitignore to include .cursor file for better environment management * fix: update PiP drag gesture conditions to include video paused state for better user experience * refactor: replace ScrollController with SettingsPageLayout in settings screens for improved layout management * refactor: centralize orientation handling by introducing OrientationUtils for improved readability and maintainability * refactor: replace OrientationUtils with ContextExtensions for streamlined context-based access to theme, layout, and API dependencies * refactor: improve video chat UI by adjusting title layout and adding stream info tooltips for better user experience * refactor: adjust titleSpacing in theme and navigation components for improved layout consistency * refactor: update stream info timer handling and overlay management for improved UI responsiveness * refactor: enhance stream info timer logic and overlay visibility management for chat-only mode * refactor: enhance input decoration theme in FrostyThemes for improved visual consistency and responsiveness * refactor: adjust inputDecorationTheme padding in FrostyThemes for improved visual consistency * refactor: enhance video overlay management by including video preview overlay in hideElements for improved UI consistency * refactor: improve chat bottom bar padding and video chat layout for enhanced UI consistency * refactor: adjust chat padding to account for device bottom insets for improved layout consistency * refactor: update text styles in FrostyThemes for improved visual consistency across UI components * refactor: update iOS minimum deployment target to 13.0 for improved compatibility * refactor: adjust chat bottom padding based on emote menu visibility for improved layout consistency * refactor: adjust padding values in StreamsList for improved layout consistency * refactor: replace Padding with AnimatedPadding in Chat for smoother layout transitions refactor: replace Container with AnimatedContainer in BlurredContainer for smoother animations * refactor: remove unnecessary radius property from ProfilePicture in OfflineChannelCard for cleaner code * refactor: enhance chat bottom bar suffix icon to display message delay with tooltip for improved user experience * refactor: update hint text and tooltips in chat bottom bar and search for improved clarity * refactor: simplify notification display logic and enhance chat input behavior for improved user experience * refactor: enhance layout consistency by adjusting spacing in various components across the channel and home screens * refactor: introduce LiveIndicator widget and adjust spacing in channel and video components for improved layout consistency * refactor: remove monospace font family from chat bottom bar for improved text rendering * refactor: reduce notification animation duration and change dismiss direction for improved user experience * refactor: replace VideoBar with StreamInfoBar in video components for improved layout and consistency * refactor: adjust font sizes and spacing in StreamInfoBar for improved layout consistency * refactor: standardize font sizes and update gradient stops in video components for improved visual consistency * refactor: update tooltip padding and background color in theme for improved visual consistency * refactor: enhance tooltip behavior and standardize font sizes in StreamInfoBar and related components for improved visual consistency * refactor: add showThumbnail option to LargeStreamCardSkeletonLoader for improved layout flexibility * refactor: add StreamInfoBarSkeletonLoader for improved layout consistency in stream components * refactor: add shadow effects to icons and text in StreamInfoBar and VideoOverlay for improved visual depth * refactor: update defaultOverlayOpacity to 0.0 for improved overlay behavior * fix: correct stream info text color on overlay * refactor: implement a new color picker dialog with random color generation for enhanced user experience * refactor: adjust gradient colors and stops in VideoOverlay for improved visual consistency * refactor: refine gradient colors and stops in VideoOverlay for enhanced visual clarity * refactor: add isCompact parameter to StreamInfoBar for responsive text sizing * fix: update tooltip background color to use surface color for better contrast * feat: add shared chat mode support in chat store and update StreamInfoBar for visual indication * refactor: disable debug print for IRC messages to reduce log clutter * feat: implement chat color selection feature with user color management in chat settings * refactor: replace color adjustment logic with new contrast-aware utility for chat names * refactor: simplify chat details UI by replacing list tiles with action cards and removing unused clear dialog * refactor: enhance chat details UI by improving time formatting and adding label styling to action cards * refactor: update chat color terminology to 'Username color' for clarity in UI * refactor: enhance chat details UI by introducing active chat modes display and improving layout structure * refactor: improve chat details layout by replacing ListTile with Padding and adding a Divider for better visual separation * refactor: remove chat notifications positioning setting and adjust notification alignment in video chat * refactor: streamline StreamInfoBar component by consolidating offline handling and improving layout for better readability * refactor: enhance StreamInfoBar by adding tooltip for streamer name and improving text overflow handling * refactor: adjust tooltip display duration in StreamInfoBar and update theme configuration * refactor: adjust margin and padding in StreamCard for improved layout consistency * chore: update dependencies in pubspec.yaml and pubspec.lock for Firebase and other packages * template * chore: update iOS platform version to 15.0 and Firebase dependencies to 12.2.0 * refactor: simplify StreamInfoBar layout by reducing nested widgets and improving text color handling * format * feat: enhance Channel model and StreamInfoBar to support offline channel details * feat: add offline indicator and improve StreamInfoBar layout for better offline channel display * fix: adjust icon color opacity in StreamInfoBar for improved visibility * feat: enhance dismissal animation in FrostyPhotoViewDialog to track swipe direction * docs: update copilot instructions for clarity and additional error handling details * refactor: optimize latency tooltip layout and improve offline indicator styling in VideoOverlay * feat: implement shared chat asset fetching and participant management in ChatAssetsStore * refactor: replace Observer with Builder for improved widget rebuilding in VideoOverlay * refactor: update StreamInfoBar border styling and adjust layout in VideoOverlay for improved visual consistency * feat: add showTextShadows property to StreamInfoBar for customizable text shadow display * refactor: adjust layout in VideoOverlay by adding padding to improve spacing and visual consistency * refactor: enhance VideoOverlay gradients and layout for improved visual hierarchy and user experience * refactor: reduce vertical padding in VideoOverlay for improved layout consistency * refactor: remove overlay opacity settings from VideoSettings and SettingsStore for simplification * refactor: improve text overlay transition in VideoChat for better user experience * Revert "refactor: improve text overlay transition in VideoChat for better user experience" This reverts commit fd16ff5ec30ec266157e5c8a9d4a6090c91717f6. * refactor: wrap videoOverlay in ColoredBox for improved layout handling * refactor: optimize animation duration and transition curves in VideoChat for smoother interactions * refactor: dispose searchScrollController in HomeStoreBase to prevent memory leaks * refactor: simplify gradient definitions in VideoOverlay for improved readability and maintainability * refactor: remove 'Offline' text overlay from VideoOverlay for cleaner UI * refactor: add refresh functionality for assets in ChatDetails with loading indicators * refactor: update visibility conditions for uptime, viewer count, and category display in StreamInfoBar * refactor: replace AlertDialog with FrostyDialog for consistent dialog styling across the application * refactor: enhance layout handling in FrostyPageView to prevent overflow during height transitions * refactor: replace ColorPickerDialog with AccentColorPickerDialog for improved color selection experience * refactor: replace theme and accent color settings with dedicated components for improved modularity and readability * refactor: replace ElevatedButton with TextButton for consistent button styling across dialogs * refactor: integrate MobX Observer for reactive state management in settings widgets * refactor: update theme and dialog components for improved styling and consistency * refactor: enhance dialog styling with rounded corners and border in theme configuration * refactor: improve dialog messages for unauthorized access handling * refactor: update bodyLarge text style in theme configuration to include font weight * refactor: standardize Divider usage and adjust theme styles for improved consistency * refactor: adjust Divider properties and theme styles for enhanced visual consistency * chore: remove GEMINI.md file as it is no longer needed for project documentation * refactor: enhance token validation and reconnect logic in AuthBase for improved error handling * format * refactor: integrate landscape cutout settings into VideoChat layout for improved responsiveness * refactor: implement app lifecycle handling in VideoChat and enhance stream info update logic in VideoStore * refactor: update landscape cutout conditionals in VideoChat layout for improved responsiveness * update AGENTS.md * add scrollbar to search * fix scrolling exception * update CLAUDE.md * 5 auth reconnect attemps then log out * increase reply max lines to 2 * simplify and improve reply formatting * add prime icon * better draggable divider * support draggable divider in fullscreen overlay chat * add text shadow in fullscreen chat overlay mode * format * add landscape checks * video store optimization attempts * Dispose WebViewController and remove JavaScript channels properly * Track and cleanup all MutationObservers to prevent accumulation * Throttle latency updates to once per 5 seconds (reduces CPU load) * Add timeout protection and null checks for robustness * Prevent duplicate event listeners on page reloads * double tap divider to reset * Revert "video store optimization attempts" This reverts commit b1df7b0de473543283211a489dca698d9d241857. * optimize video store attempt 2 * Revert "double tap divider to reset" This reverts commit aeb26a433500ec71f822794835e927018ee59e1e. * optimize latency listener to open the menu and check every 20 secconds * more optimizations * hard refresh * abbreviate latency * fix lint * improve hide default overlay * fix chat no longer reconnecting with chat delay * refine chat alerts * fix historical message missing badges and emotes on initial connection * parallelize * revert * add reconnect button inline action * refactor: replace Scrollbar with FrostyScrollbar across chat and settings screens for consistent styling * tweak chat details menu * add scrollbar to release notes, renames for consistency * fix duplicate message case * fix chat delay alerts in auto sync mode * add regex for numeric strings and enhance display name formatting logic * exterminate borders * refactor: simplify active chat modes display in chat details screen * feat: enhance chat input button with delay notification and disable state * fix: wrap chat in SafeArea to prevent UI overflow issues * refactor: remove divider line from video chat and update draggable divider visibility logic * persist overlay in pip mode * fix: update chat delay handling and notifications in chat bottom bar * fix: update chat overlay visibility logic to respect fullscreen settings * tap to show deleted message * fix: prevent accidental chat scrolling when accessing system UI in landscape mode * show latency in portrait * fix: enhance chat delay notifications with dynamic delay time * docs: update CLAUDE.md for improved environment variable instructions and architecture overview * fix: improve chat delay countdown management and message handling * add preliminary release notes * remove agents.md * update lockfile * add initial multi chat feature * add option to persist multi chat tabs * add remove confirmation dialog * improve add chat design * lazy-load tabs * create global assets store to dedupe global asset fetching * improve tab design/styles * update notes * use frosty dialog * update claude md * tweak * add ability to reorder tabs * resolve conflict * merge cleanup * format * update release notes * add chat delay sync completion tracking to prevent countdown re-appearance * add tests * fix * update release notes * bump
2026-01-01 22:28:17 -05:00
);
void listener(dynamic data) {
// debugPrint(data);
final decoded = jsonDecode(data);
final event = SevenTVEvent.fromJson(decoded);
final body = event.d.body;
if (event.d.type != 'emote_set.update' || body == null) return;
if (body.pushed != null) {
final pushedEmote = body.pushed?.first.value;
if (pushedEmote == null) return;
final emote = Emote.from7TV(pushedEmote, EmoteType.sevenTVChannel);
assetsStore.addChannelEmote(emote);
messageBuffer.add(
IRCMessage.createNotice(
message:
'${getReadableName(body.actor.displayName, body.actor.username)} added 7TV emote "${emote.name}" to chat',
),
);
} else if (body.pulled != null) {
final pulledEmote = body.pulled?.first.oldValue;
if (pulledEmote == null) return;
assetsStore.removeChannelEmote(pulledEmote.name);
messageBuffer.add(
IRCMessage.createNotice(
message:
'${getReadableName(body.actor.displayName, body.actor.username)} removed 7TV emote "${pulledEmote.name}" from chat',
),
);
}
}
2025-03-23 22:11:09 -07:00
// Cancel previous subscription if exists
_sevenTVChannelListener?.cancel();
_sevenTVChannelListener = _sevenTVChannel?.stream.listen(
(data) {
if (!_hasActiveChatDelay) {
listener(data);
} else {
_enqueueDelayedCallback(
_pendingSevenTVCallbacks,
() => listener(data),
);
}
},
onError: (error) {
debugPrint('7TV events error: ${error.toString()}');
FirebaseCrashlytics.instance.recordError(
error,
StackTrace.current,
reason: '7TV WebSocket error, channel=$channelName',
);
},
v5 (#463) * migrate to dio * ignore folders * simplify twitch api headers handling * clean up main * simplify logs * optimize profile picture fetching fixes refetches on tab switch * update claude md * refactor irc.dart * update copilot instructions with essential commands and project structure details * implement message sending state management and UI updates * refactor notification handling and add copy-paste functionality in chat * refactor AlertMessage to support vertical layout and optional padding * refactor error messages for consistency and clarity across various components * refactor chat layout to use draggable divider and improve chat width settings * refactor Uptime widget to use SharedTimerService for synchronized updates * refactor search results components to handle null future states gracefully * refactor loading indicators to use skeleton loaders for improved user experience * refactor UI components for improved layout and responsiveness, enhance skeleton loaders, and streamline padding adjustments * refactor: replace manual blur effects with BlurredContainer for consistency and reusability * refactor: enhance JavaScript execution and error handling in WebView components * refactor: replace app bar with blurred container for improved UI consistency across screens * refactor: streamline video chat layout and enhance PiP drag gesture functionality * revert some app bar changes * refactor: implement Picture-in-Picture drag functionality in VideoChat * refactor: pass currentChannelId to IRCMessage and ChatMessage for improved context * fix large thubmnail width * chore: update Gradle and Kotlin plugin versions for improved compatibility * changes from v4.10.0 branch * feat: integrate AnimatedScrollBorder for improved UI responsiveness across various screens * refactor: update SectionHeader styling and improve theme management * feat: add pinned section to StreamsList and enhance skeleton loader padding * feat: add repository guidelines for project structure, coding style, testing, and security * feat: enhance StreamCard UI with BlurredContainer and adjust border width in theme * feat: implement unfocusInput and safeRequestFocus methods to manage text field focus behavior * feat: enhance Picture-in-Picture drag interactions with haptic feedback and smooth animations * refactor: improve code formatting and readability across multiple files * feat: implement picture-in-picture mode toggle and state management for video playback * feat: reset PiP mode state when pausing video playback * feat: add custom app bar with profile picture and stream info for video chat * feat: convert multiple settings screens to use StatefulWidget and add animated scroll borders * feat: update blur configuration for adaptive alpha based on theme * fix: adjust default font size in SectionHeader widget * feat: enhance PiP mode with drag overlay instruction and UI improvements * fix: improve badge rendering with consistent margin and border for current channel * refactor: replace BackdropFilter with BlurredContainer for improved clarity and maintainability * fix: reduce background transparency in Uptime widget for better visibility * feat: enhance photo view dialog with full resolution toggle and blurred background * fix: reset chat delay to 0 when auto sync is enabled and update settings title for clarity * fix: adjust border width in theme to improve consistency * feat: add forceDarkMode option to BlurredContainer for improved theme adaptability * feat: implement offline followed channels feature with UI integration and settings option * fix: increase font size and weight for offline status text for better readability * feat: remove offline pinned channels feature and update related UI components * feat: optimize offline channels loading behavior based on expansion state * fix: improve clarity and consistency in repository guidelines formatting * feat: update full resolution URL handling and button visibility logic * feat: replace app bar with blurred version in chat-only mode and add animated scroll border * feat: refactor video chat layout for improved chat and video display in landscape mode * feat: remove bottom bar visibility setting and adjust chat layout accordingly * fix: simplify condition for displaying offline channels section in following tab * feat: enhance reply thread display with indentation and reply icon * feat: implement showModalBottomSheetWithProperFocus for improved focus handling * feat: add gradient direction support to BlurredContainer for enhanced visual effects * feat: enhance NavigationBar and Theme settings for improved visual consistency * feat: add gradient direction support to BlurredContainer in VideoChat for enhanced visual effects * chore: update .gitignore to include .cursor file for better environment management * fix: update PiP drag gesture conditions to include video paused state for better user experience * refactor: replace ScrollController with SettingsPageLayout in settings screens for improved layout management * refactor: centralize orientation handling by introducing OrientationUtils for improved readability and maintainability * refactor: replace OrientationUtils with ContextExtensions for streamlined context-based access to theme, layout, and API dependencies * refactor: improve video chat UI by adjusting title layout and adding stream info tooltips for better user experience * refactor: adjust titleSpacing in theme and navigation components for improved layout consistency * refactor: update stream info timer handling and overlay management for improved UI responsiveness * refactor: enhance stream info timer logic and overlay visibility management for chat-only mode * refactor: enhance input decoration theme in FrostyThemes for improved visual consistency and responsiveness * refactor: adjust inputDecorationTheme padding in FrostyThemes for improved visual consistency * refactor: enhance video overlay management by including video preview overlay in hideElements for improved UI consistency * refactor: improve chat bottom bar padding and video chat layout for enhanced UI consistency * refactor: adjust chat padding to account for device bottom insets for improved layout consistency * refactor: update text styles in FrostyThemes for improved visual consistency across UI components * refactor: update iOS minimum deployment target to 13.0 for improved compatibility * refactor: adjust chat bottom padding based on emote menu visibility for improved layout consistency * refactor: adjust padding values in StreamsList for improved layout consistency * refactor: replace Padding with AnimatedPadding in Chat for smoother layout transitions refactor: replace Container with AnimatedContainer in BlurredContainer for smoother animations * refactor: remove unnecessary radius property from ProfilePicture in OfflineChannelCard for cleaner code * refactor: enhance chat bottom bar suffix icon to display message delay with tooltip for improved user experience * refactor: update hint text and tooltips in chat bottom bar and search for improved clarity * refactor: simplify notification display logic and enhance chat input behavior for improved user experience * refactor: enhance layout consistency by adjusting spacing in various components across the channel and home screens * refactor: introduce LiveIndicator widget and adjust spacing in channel and video components for improved layout consistency * refactor: remove monospace font family from chat bottom bar for improved text rendering * refactor: reduce notification animation duration and change dismiss direction for improved user experience * refactor: replace VideoBar with StreamInfoBar in video components for improved layout and consistency * refactor: adjust font sizes and spacing in StreamInfoBar for improved layout consistency * refactor: standardize font sizes and update gradient stops in video components for improved visual consistency * refactor: update tooltip padding and background color in theme for improved visual consistency * refactor: enhance tooltip behavior and standardize font sizes in StreamInfoBar and related components for improved visual consistency * refactor: add showThumbnail option to LargeStreamCardSkeletonLoader for improved layout flexibility * refactor: add StreamInfoBarSkeletonLoader for improved layout consistency in stream components * refactor: add shadow effects to icons and text in StreamInfoBar and VideoOverlay for improved visual depth * refactor: update defaultOverlayOpacity to 0.0 for improved overlay behavior * fix: correct stream info text color on overlay * refactor: implement a new color picker dialog with random color generation for enhanced user experience * refactor: adjust gradient colors and stops in VideoOverlay for improved visual consistency * refactor: refine gradient colors and stops in VideoOverlay for enhanced visual clarity * refactor: add isCompact parameter to StreamInfoBar for responsive text sizing * fix: update tooltip background color to use surface color for better contrast * feat: add shared chat mode support in chat store and update StreamInfoBar for visual indication * refactor: disable debug print for IRC messages to reduce log clutter * feat: implement chat color selection feature with user color management in chat settings * refactor: replace color adjustment logic with new contrast-aware utility for chat names * refactor: simplify chat details UI by replacing list tiles with action cards and removing unused clear dialog * refactor: enhance chat details UI by improving time formatting and adding label styling to action cards * refactor: update chat color terminology to 'Username color' for clarity in UI * refactor: enhance chat details UI by introducing active chat modes display and improving layout structure * refactor: improve chat details layout by replacing ListTile with Padding and adding a Divider for better visual separation * refactor: remove chat notifications positioning setting and adjust notification alignment in video chat * refactor: streamline StreamInfoBar component by consolidating offline handling and improving layout for better readability * refactor: enhance StreamInfoBar by adding tooltip for streamer name and improving text overflow handling * refactor: adjust tooltip display duration in StreamInfoBar and update theme configuration * refactor: adjust margin and padding in StreamCard for improved layout consistency * chore: update dependencies in pubspec.yaml and pubspec.lock for Firebase and other packages * template * chore: update iOS platform version to 15.0 and Firebase dependencies to 12.2.0 * refactor: simplify StreamInfoBar layout by reducing nested widgets and improving text color handling * format * feat: enhance Channel model and StreamInfoBar to support offline channel details * feat: add offline indicator and improve StreamInfoBar layout for better offline channel display * fix: adjust icon color opacity in StreamInfoBar for improved visibility * feat: enhance dismissal animation in FrostyPhotoViewDialog to track swipe direction * docs: update copilot instructions for clarity and additional error handling details * refactor: optimize latency tooltip layout and improve offline indicator styling in VideoOverlay * feat: implement shared chat asset fetching and participant management in ChatAssetsStore * refactor: replace Observer with Builder for improved widget rebuilding in VideoOverlay * refactor: update StreamInfoBar border styling and adjust layout in VideoOverlay for improved visual consistency * feat: add showTextShadows property to StreamInfoBar for customizable text shadow display * refactor: adjust layout in VideoOverlay by adding padding to improve spacing and visual consistency * refactor: enhance VideoOverlay gradients and layout for improved visual hierarchy and user experience * refactor: reduce vertical padding in VideoOverlay for improved layout consistency * refactor: remove overlay opacity settings from VideoSettings and SettingsStore for simplification * refactor: improve text overlay transition in VideoChat for better user experience * Revert "refactor: improve text overlay transition in VideoChat for better user experience" This reverts commit fd16ff5ec30ec266157e5c8a9d4a6090c91717f6. * refactor: wrap videoOverlay in ColoredBox for improved layout handling * refactor: optimize animation duration and transition curves in VideoChat for smoother interactions * refactor: dispose searchScrollController in HomeStoreBase to prevent memory leaks * refactor: simplify gradient definitions in VideoOverlay for improved readability and maintainability * refactor: remove 'Offline' text overlay from VideoOverlay for cleaner UI * refactor: add refresh functionality for assets in ChatDetails with loading indicators * refactor: update visibility conditions for uptime, viewer count, and category display in StreamInfoBar * refactor: replace AlertDialog with FrostyDialog for consistent dialog styling across the application * refactor: enhance layout handling in FrostyPageView to prevent overflow during height transitions * refactor: replace ColorPickerDialog with AccentColorPickerDialog for improved color selection experience * refactor: replace theme and accent color settings with dedicated components for improved modularity and readability * refactor: replace ElevatedButton with TextButton for consistent button styling across dialogs * refactor: integrate MobX Observer for reactive state management in settings widgets * refactor: update theme and dialog components for improved styling and consistency * refactor: enhance dialog styling with rounded corners and border in theme configuration * refactor: improve dialog messages for unauthorized access handling * refactor: update bodyLarge text style in theme configuration to include font weight * refactor: standardize Divider usage and adjust theme styles for improved consistency * refactor: adjust Divider properties and theme styles for enhanced visual consistency * chore: remove GEMINI.md file as it is no longer needed for project documentation * refactor: enhance token validation and reconnect logic in AuthBase for improved error handling * format * refactor: integrate landscape cutout settings into VideoChat layout for improved responsiveness * refactor: implement app lifecycle handling in VideoChat and enhance stream info update logic in VideoStore * refactor: update landscape cutout conditionals in VideoChat layout for improved responsiveness * update AGENTS.md * add scrollbar to search * fix scrolling exception * update CLAUDE.md * 5 auth reconnect attemps then log out * increase reply max lines to 2 * simplify and improve reply formatting * add prime icon * better draggable divider * support draggable divider in fullscreen overlay chat * add text shadow in fullscreen chat overlay mode * format * add landscape checks * video store optimization attempts * Dispose WebViewController and remove JavaScript channels properly * Track and cleanup all MutationObservers to prevent accumulation * Throttle latency updates to once per 5 seconds (reduces CPU load) * Add timeout protection and null checks for robustness * Prevent duplicate event listeners on page reloads * double tap divider to reset * Revert "video store optimization attempts" This reverts commit b1df7b0de473543283211a489dca698d9d241857. * optimize video store attempt 2 * Revert "double tap divider to reset" This reverts commit aeb26a433500ec71f822794835e927018ee59e1e. * optimize latency listener to open the menu and check every 20 secconds * more optimizations * hard refresh * abbreviate latency * fix lint * improve hide default overlay * fix chat no longer reconnecting with chat delay * refine chat alerts * fix historical message missing badges and emotes on initial connection * parallelize * revert * add reconnect button inline action * refactor: replace Scrollbar with FrostyScrollbar across chat and settings screens for consistent styling * tweak chat details menu * add scrollbar to release notes, renames for consistency * fix duplicate message case * fix chat delay alerts in auto sync mode * add regex for numeric strings and enhance display name formatting logic * exterminate borders * refactor: simplify active chat modes display in chat details screen * feat: enhance chat input button with delay notification and disable state * fix: wrap chat in SafeArea to prevent UI overflow issues * refactor: remove divider line from video chat and update draggable divider visibility logic * persist overlay in pip mode * fix: update chat delay handling and notifications in chat bottom bar * fix: update chat overlay visibility logic to respect fullscreen settings * tap to show deleted message * fix: prevent accidental chat scrolling when accessing system UI in landscape mode * show latency in portrait * fix: enhance chat delay notifications with dynamic delay time * docs: update CLAUDE.md for improved environment variable instructions and architecture overview * fix: improve chat delay countdown management and message handling * add preliminary release notes * remove agents.md * update lockfile * add initial multi chat feature * add option to persist multi chat tabs * add remove confirmation dialog * improve add chat design * lazy-load tabs * create global assets store to dedupe global asset fetching * improve tab design/styles * update notes * use frosty dialog * update claude md * tweak * add ability to reorder tabs * resolve conflict * merge cleanup * format * update release notes * add chat delay sync completion tracking to prevent countdown re-appearance * add tests * fix * update release notes * bump
2026-01-01 22:28:17 -05:00
onDone: () {
_clearPendingDelayedCallbacks(clearChat: false);
v5 (#463) * migrate to dio * ignore folders * simplify twitch api headers handling * clean up main * simplify logs * optimize profile picture fetching fixes refetches on tab switch * update claude md * refactor irc.dart * update copilot instructions with essential commands and project structure details * implement message sending state management and UI updates * refactor notification handling and add copy-paste functionality in chat * refactor AlertMessage to support vertical layout and optional padding * refactor error messages for consistency and clarity across various components * refactor chat layout to use draggable divider and improve chat width settings * refactor Uptime widget to use SharedTimerService for synchronized updates * refactor search results components to handle null future states gracefully * refactor loading indicators to use skeleton loaders for improved user experience * refactor UI components for improved layout and responsiveness, enhance skeleton loaders, and streamline padding adjustments * refactor: replace manual blur effects with BlurredContainer for consistency and reusability * refactor: enhance JavaScript execution and error handling in WebView components * refactor: replace app bar with blurred container for improved UI consistency across screens * refactor: streamline video chat layout and enhance PiP drag gesture functionality * revert some app bar changes * refactor: implement Picture-in-Picture drag functionality in VideoChat * refactor: pass currentChannelId to IRCMessage and ChatMessage for improved context * fix large thubmnail width * chore: update Gradle and Kotlin plugin versions for improved compatibility * changes from v4.10.0 branch * feat: integrate AnimatedScrollBorder for improved UI responsiveness across various screens * refactor: update SectionHeader styling and improve theme management * feat: add pinned section to StreamsList and enhance skeleton loader padding * feat: add repository guidelines for project structure, coding style, testing, and security * feat: enhance StreamCard UI with BlurredContainer and adjust border width in theme * feat: implement unfocusInput and safeRequestFocus methods to manage text field focus behavior * feat: enhance Picture-in-Picture drag interactions with haptic feedback and smooth animations * refactor: improve code formatting and readability across multiple files * feat: implement picture-in-picture mode toggle and state management for video playback * feat: reset PiP mode state when pausing video playback * feat: add custom app bar with profile picture and stream info for video chat * feat: convert multiple settings screens to use StatefulWidget and add animated scroll borders * feat: update blur configuration for adaptive alpha based on theme * fix: adjust default font size in SectionHeader widget * feat: enhance PiP mode with drag overlay instruction and UI improvements * fix: improve badge rendering with consistent margin and border for current channel * refactor: replace BackdropFilter with BlurredContainer for improved clarity and maintainability * fix: reduce background transparency in Uptime widget for better visibility * feat: enhance photo view dialog with full resolution toggle and blurred background * fix: reset chat delay to 0 when auto sync is enabled and update settings title for clarity * fix: adjust border width in theme to improve consistency * feat: add forceDarkMode option to BlurredContainer for improved theme adaptability * feat: implement offline followed channels feature with UI integration and settings option * fix: increase font size and weight for offline status text for better readability * feat: remove offline pinned channels feature and update related UI components * feat: optimize offline channels loading behavior based on expansion state * fix: improve clarity and consistency in repository guidelines formatting * feat: update full resolution URL handling and button visibility logic * feat: replace app bar with blurred version in chat-only mode and add animated scroll border * feat: refactor video chat layout for improved chat and video display in landscape mode * feat: remove bottom bar visibility setting and adjust chat layout accordingly * fix: simplify condition for displaying offline channels section in following tab * feat: enhance reply thread display with indentation and reply icon * feat: implement showModalBottomSheetWithProperFocus for improved focus handling * feat: add gradient direction support to BlurredContainer for enhanced visual effects * feat: enhance NavigationBar and Theme settings for improved visual consistency * feat: add gradient direction support to BlurredContainer in VideoChat for enhanced visual effects * chore: update .gitignore to include .cursor file for better environment management * fix: update PiP drag gesture conditions to include video paused state for better user experience * refactor: replace ScrollController with SettingsPageLayout in settings screens for improved layout management * refactor: centralize orientation handling by introducing OrientationUtils for improved readability and maintainability * refactor: replace OrientationUtils with ContextExtensions for streamlined context-based access to theme, layout, and API dependencies * refactor: improve video chat UI by adjusting title layout and adding stream info tooltips for better user experience * refactor: adjust titleSpacing in theme and navigation components for improved layout consistency * refactor: update stream info timer handling and overlay management for improved UI responsiveness * refactor: enhance stream info timer logic and overlay visibility management for chat-only mode * refactor: enhance input decoration theme in FrostyThemes for improved visual consistency and responsiveness * refactor: adjust inputDecorationTheme padding in FrostyThemes for improved visual consistency * refactor: enhance video overlay management by including video preview overlay in hideElements for improved UI consistency * refactor: improve chat bottom bar padding and video chat layout for enhanced UI consistency * refactor: adjust chat padding to account for device bottom insets for improved layout consistency * refactor: update text styles in FrostyThemes for improved visual consistency across UI components * refactor: update iOS minimum deployment target to 13.0 for improved compatibility * refactor: adjust chat bottom padding based on emote menu visibility for improved layout consistency * refactor: adjust padding values in StreamsList for improved layout consistency * refactor: replace Padding with AnimatedPadding in Chat for smoother layout transitions refactor: replace Container with AnimatedContainer in BlurredContainer for smoother animations * refactor: remove unnecessary radius property from ProfilePicture in OfflineChannelCard for cleaner code * refactor: enhance chat bottom bar suffix icon to display message delay with tooltip for improved user experience * refactor: update hint text and tooltips in chat bottom bar and search for improved clarity * refactor: simplify notification display logic and enhance chat input behavior for improved user experience * refactor: enhance layout consistency by adjusting spacing in various components across the channel and home screens * refactor: introduce LiveIndicator widget and adjust spacing in channel and video components for improved layout consistency * refactor: remove monospace font family from chat bottom bar for improved text rendering * refactor: reduce notification animation duration and change dismiss direction for improved user experience * refactor: replace VideoBar with StreamInfoBar in video components for improved layout and consistency * refactor: adjust font sizes and spacing in StreamInfoBar for improved layout consistency * refactor: standardize font sizes and update gradient stops in video components for improved visual consistency * refactor: update tooltip padding and background color in theme for improved visual consistency * refactor: enhance tooltip behavior and standardize font sizes in StreamInfoBar and related components for improved visual consistency * refactor: add showThumbnail option to LargeStreamCardSkeletonLoader for improved layout flexibility * refactor: add StreamInfoBarSkeletonLoader for improved layout consistency in stream components * refactor: add shadow effects to icons and text in StreamInfoBar and VideoOverlay for improved visual depth * refactor: update defaultOverlayOpacity to 0.0 for improved overlay behavior * fix: correct stream info text color on overlay * refactor: implement a new color picker dialog with random color generation for enhanced user experience * refactor: adjust gradient colors and stops in VideoOverlay for improved visual consistency * refactor: refine gradient colors and stops in VideoOverlay for enhanced visual clarity * refactor: add isCompact parameter to StreamInfoBar for responsive text sizing * fix: update tooltip background color to use surface color for better contrast * feat: add shared chat mode support in chat store and update StreamInfoBar for visual indication * refactor: disable debug print for IRC messages to reduce log clutter * feat: implement chat color selection feature with user color management in chat settings * refactor: replace color adjustment logic with new contrast-aware utility for chat names * refactor: simplify chat details UI by replacing list tiles with action cards and removing unused clear dialog * refactor: enhance chat details UI by improving time formatting and adding label styling to action cards * refactor: update chat color terminology to 'Username color' for clarity in UI * refactor: enhance chat details UI by introducing active chat modes display and improving layout structure * refactor: improve chat details layout by replacing ListTile with Padding and adding a Divider for better visual separation * refactor: remove chat notifications positioning setting and adjust notification alignment in video chat * refactor: streamline StreamInfoBar component by consolidating offline handling and improving layout for better readability * refactor: enhance StreamInfoBar by adding tooltip for streamer name and improving text overflow handling * refactor: adjust tooltip display duration in StreamInfoBar and update theme configuration * refactor: adjust margin and padding in StreamCard for improved layout consistency * chore: update dependencies in pubspec.yaml and pubspec.lock for Firebase and other packages * template * chore: update iOS platform version to 15.0 and Firebase dependencies to 12.2.0 * refactor: simplify StreamInfoBar layout by reducing nested widgets and improving text color handling * format * feat: enhance Channel model and StreamInfoBar to support offline channel details * feat: add offline indicator and improve StreamInfoBar layout for better offline channel display * fix: adjust icon color opacity in StreamInfoBar for improved visibility * feat: enhance dismissal animation in FrostyPhotoViewDialog to track swipe direction * docs: update copilot instructions for clarity and additional error handling details * refactor: optimize latency tooltip layout and improve offline indicator styling in VideoOverlay * feat: implement shared chat asset fetching and participant management in ChatAssetsStore * refactor: replace Observer with Builder for improved widget rebuilding in VideoOverlay * refactor: update StreamInfoBar border styling and adjust layout in VideoOverlay for improved visual consistency * feat: add showTextShadows property to StreamInfoBar for customizable text shadow display * refactor: adjust layout in VideoOverlay by adding padding to improve spacing and visual consistency * refactor: enhance VideoOverlay gradients and layout for improved visual hierarchy and user experience * refactor: reduce vertical padding in VideoOverlay for improved layout consistency * refactor: remove overlay opacity settings from VideoSettings and SettingsStore for simplification * refactor: improve text overlay transition in VideoChat for better user experience * Revert "refactor: improve text overlay transition in VideoChat for better user experience" This reverts commit fd16ff5ec30ec266157e5c8a9d4a6090c91717f6. * refactor: wrap videoOverlay in ColoredBox for improved layout handling * refactor: optimize animation duration and transition curves in VideoChat for smoother interactions * refactor: dispose searchScrollController in HomeStoreBase to prevent memory leaks * refactor: simplify gradient definitions in VideoOverlay for improved readability and maintainability * refactor: remove 'Offline' text overlay from VideoOverlay for cleaner UI * refactor: add refresh functionality for assets in ChatDetails with loading indicators * refactor: update visibility conditions for uptime, viewer count, and category display in StreamInfoBar * refactor: replace AlertDialog with FrostyDialog for consistent dialog styling across the application * refactor: enhance layout handling in FrostyPageView to prevent overflow during height transitions * refactor: replace ColorPickerDialog with AccentColorPickerDialog for improved color selection experience * refactor: replace theme and accent color settings with dedicated components for improved modularity and readability * refactor: replace ElevatedButton with TextButton for consistent button styling across dialogs * refactor: integrate MobX Observer for reactive state management in settings widgets * refactor: update theme and dialog components for improved styling and consistency * refactor: enhance dialog styling with rounded corners and border in theme configuration * refactor: improve dialog messages for unauthorized access handling * refactor: update bodyLarge text style in theme configuration to include font weight * refactor: standardize Divider usage and adjust theme styles for improved consistency * refactor: adjust Divider properties and theme styles for enhanced visual consistency * chore: remove GEMINI.md file as it is no longer needed for project documentation * refactor: enhance token validation and reconnect logic in AuthBase for improved error handling * format * refactor: integrate landscape cutout settings into VideoChat layout for improved responsiveness * refactor: implement app lifecycle handling in VideoChat and enhance stream info update logic in VideoStore * refactor: update landscape cutout conditionals in VideoChat layout for improved responsiveness * update AGENTS.md * add scrollbar to search * fix scrolling exception * update CLAUDE.md * 5 auth reconnect attemps then log out * increase reply max lines to 2 * simplify and improve reply formatting * add prime icon * better draggable divider * support draggable divider in fullscreen overlay chat * add text shadow in fullscreen chat overlay mode * format * add landscape checks * video store optimization attempts * Dispose WebViewController and remove JavaScript channels properly * Track and cleanup all MutationObservers to prevent accumulation * Throttle latency updates to once per 5 seconds (reduces CPU load) * Add timeout protection and null checks for robustness * Prevent duplicate event listeners on page reloads * double tap divider to reset * Revert "video store optimization attempts" This reverts commit b1df7b0de473543283211a489dca698d9d241857. * optimize video store attempt 2 * Revert "double tap divider to reset" This reverts commit aeb26a433500ec71f822794835e927018ee59e1e. * optimize latency listener to open the menu and check every 20 secconds * more optimizations * hard refresh * abbreviate latency * fix lint * improve hide default overlay * fix chat no longer reconnecting with chat delay * refine chat alerts * fix historical message missing badges and emotes on initial connection * parallelize * revert * add reconnect button inline action * refactor: replace Scrollbar with FrostyScrollbar across chat and settings screens for consistent styling * tweak chat details menu * add scrollbar to release notes, renames for consistency * fix duplicate message case * fix chat delay alerts in auto sync mode * add regex for numeric strings and enhance display name formatting logic * exterminate borders * refactor: simplify active chat modes display in chat details screen * feat: enhance chat input button with delay notification and disable state * fix: wrap chat in SafeArea to prevent UI overflow issues * refactor: remove divider line from video chat and update draggable divider visibility logic * persist overlay in pip mode * fix: update chat delay handling and notifications in chat bottom bar * fix: update chat overlay visibility logic to respect fullscreen settings * tap to show deleted message * fix: prevent accidental chat scrolling when accessing system UI in landscape mode * show latency in portrait * fix: enhance chat delay notifications with dynamic delay time * docs: update CLAUDE.md for improved environment variable instructions and architecture overview * fix: improve chat delay countdown management and message handling * add preliminary release notes * remove agents.md * update lockfile * add initial multi chat feature * add option to persist multi chat tabs * add remove confirmation dialog * improve add chat design * lazy-load tabs * create global assets store to dedupe global asset fetching * improve tab design/styles * update notes * use frosty dialog * update claude md * tweak * add ability to reorder tabs * resolve conflict * merge cleanup * format * update release notes * add chat delay sync completion tracking to prevent countdown re-appearance * add tests * fix * update release notes * bump
2026-01-01 22:28:17 -05:00
debugPrint('7TV events done');
},
);
_sevenTVChannel?.sink.add(jsonEncode(subscribePayload));
}
2022-01-23 15:02:21 -05:00
@action
v5 (#463) * migrate to dio * ignore folders * simplify twitch api headers handling * clean up main * simplify logs * optimize profile picture fetching fixes refetches on tab switch * update claude md * refactor irc.dart * update copilot instructions with essential commands and project structure details * implement message sending state management and UI updates * refactor notification handling and add copy-paste functionality in chat * refactor AlertMessage to support vertical layout and optional padding * refactor error messages for consistency and clarity across various components * refactor chat layout to use draggable divider and improve chat width settings * refactor Uptime widget to use SharedTimerService for synchronized updates * refactor search results components to handle null future states gracefully * refactor loading indicators to use skeleton loaders for improved user experience * refactor UI components for improved layout and responsiveness, enhance skeleton loaders, and streamline padding adjustments * refactor: replace manual blur effects with BlurredContainer for consistency and reusability * refactor: enhance JavaScript execution and error handling in WebView components * refactor: replace app bar with blurred container for improved UI consistency across screens * refactor: streamline video chat layout and enhance PiP drag gesture functionality * revert some app bar changes * refactor: implement Picture-in-Picture drag functionality in VideoChat * refactor: pass currentChannelId to IRCMessage and ChatMessage for improved context * fix large thubmnail width * chore: update Gradle and Kotlin plugin versions for improved compatibility * changes from v4.10.0 branch * feat: integrate AnimatedScrollBorder for improved UI responsiveness across various screens * refactor: update SectionHeader styling and improve theme management * feat: add pinned section to StreamsList and enhance skeleton loader padding * feat: add repository guidelines for project structure, coding style, testing, and security * feat: enhance StreamCard UI with BlurredContainer and adjust border width in theme * feat: implement unfocusInput and safeRequestFocus methods to manage text field focus behavior * feat: enhance Picture-in-Picture drag interactions with haptic feedback and smooth animations * refactor: improve code formatting and readability across multiple files * feat: implement picture-in-picture mode toggle and state management for video playback * feat: reset PiP mode state when pausing video playback * feat: add custom app bar with profile picture and stream info for video chat * feat: convert multiple settings screens to use StatefulWidget and add animated scroll borders * feat: update blur configuration for adaptive alpha based on theme * fix: adjust default font size in SectionHeader widget * feat: enhance PiP mode with drag overlay instruction and UI improvements * fix: improve badge rendering with consistent margin and border for current channel * refactor: replace BackdropFilter with BlurredContainer for improved clarity and maintainability * fix: reduce background transparency in Uptime widget for better visibility * feat: enhance photo view dialog with full resolution toggle and blurred background * fix: reset chat delay to 0 when auto sync is enabled and update settings title for clarity * fix: adjust border width in theme to improve consistency * feat: add forceDarkMode option to BlurredContainer for improved theme adaptability * feat: implement offline followed channels feature with UI integration and settings option * fix: increase font size and weight for offline status text for better readability * feat: remove offline pinned channels feature and update related UI components * feat: optimize offline channels loading behavior based on expansion state * fix: improve clarity and consistency in repository guidelines formatting * feat: update full resolution URL handling and button visibility logic * feat: replace app bar with blurred version in chat-only mode and add animated scroll border * feat: refactor video chat layout for improved chat and video display in landscape mode * feat: remove bottom bar visibility setting and adjust chat layout accordingly * fix: simplify condition for displaying offline channels section in following tab * feat: enhance reply thread display with indentation and reply icon * feat: implement showModalBottomSheetWithProperFocus for improved focus handling * feat: add gradient direction support to BlurredContainer for enhanced visual effects * feat: enhance NavigationBar and Theme settings for improved visual consistency * feat: add gradient direction support to BlurredContainer in VideoChat for enhanced visual effects * chore: update .gitignore to include .cursor file for better environment management * fix: update PiP drag gesture conditions to include video paused state for better user experience * refactor: replace ScrollController with SettingsPageLayout in settings screens for improved layout management * refactor: centralize orientation handling by introducing OrientationUtils for improved readability and maintainability * refactor: replace OrientationUtils with ContextExtensions for streamlined context-based access to theme, layout, and API dependencies * refactor: improve video chat UI by adjusting title layout and adding stream info tooltips for better user experience * refactor: adjust titleSpacing in theme and navigation components for improved layout consistency * refactor: update stream info timer handling and overlay management for improved UI responsiveness * refactor: enhance stream info timer logic and overlay visibility management for chat-only mode * refactor: enhance input decoration theme in FrostyThemes for improved visual consistency and responsiveness * refactor: adjust inputDecorationTheme padding in FrostyThemes for improved visual consistency * refactor: enhance video overlay management by including video preview overlay in hideElements for improved UI consistency * refactor: improve chat bottom bar padding and video chat layout for enhanced UI consistency * refactor: adjust chat padding to account for device bottom insets for improved layout consistency * refactor: update text styles in FrostyThemes for improved visual consistency across UI components * refactor: update iOS minimum deployment target to 13.0 for improved compatibility * refactor: adjust chat bottom padding based on emote menu visibility for improved layout consistency * refactor: adjust padding values in StreamsList for improved layout consistency * refactor: replace Padding with AnimatedPadding in Chat for smoother layout transitions refactor: replace Container with AnimatedContainer in BlurredContainer for smoother animations * refactor: remove unnecessary radius property from ProfilePicture in OfflineChannelCard for cleaner code * refactor: enhance chat bottom bar suffix icon to display message delay with tooltip for improved user experience * refactor: update hint text and tooltips in chat bottom bar and search for improved clarity * refactor: simplify notification display logic and enhance chat input behavior for improved user experience * refactor: enhance layout consistency by adjusting spacing in various components across the channel and home screens * refactor: introduce LiveIndicator widget and adjust spacing in channel and video components for improved layout consistency * refactor: remove monospace font family from chat bottom bar for improved text rendering * refactor: reduce notification animation duration and change dismiss direction for improved user experience * refactor: replace VideoBar with StreamInfoBar in video components for improved layout and consistency * refactor: adjust font sizes and spacing in StreamInfoBar for improved layout consistency * refactor: standardize font sizes and update gradient stops in video components for improved visual consistency * refactor: update tooltip padding and background color in theme for improved visual consistency * refactor: enhance tooltip behavior and standardize font sizes in StreamInfoBar and related components for improved visual consistency * refactor: add showThumbnail option to LargeStreamCardSkeletonLoader for improved layout flexibility * refactor: add StreamInfoBarSkeletonLoader for improved layout consistency in stream components * refactor: add shadow effects to icons and text in StreamInfoBar and VideoOverlay for improved visual depth * refactor: update defaultOverlayOpacity to 0.0 for improved overlay behavior * fix: correct stream info text color on overlay * refactor: implement a new color picker dialog with random color generation for enhanced user experience * refactor: adjust gradient colors and stops in VideoOverlay for improved visual consistency * refactor: refine gradient colors and stops in VideoOverlay for enhanced visual clarity * refactor: add isCompact parameter to StreamInfoBar for responsive text sizing * fix: update tooltip background color to use surface color for better contrast * feat: add shared chat mode support in chat store and update StreamInfoBar for visual indication * refactor: disable debug print for IRC messages to reduce log clutter * feat: implement chat color selection feature with user color management in chat settings * refactor: replace color adjustment logic with new contrast-aware utility for chat names * refactor: simplify chat details UI by replacing list tiles with action cards and removing unused clear dialog * refactor: enhance chat details UI by improving time formatting and adding label styling to action cards * refactor: update chat color terminology to 'Username color' for clarity in UI * refactor: enhance chat details UI by introducing active chat modes display and improving layout structure * refactor: improve chat details layout by replacing ListTile with Padding and adding a Divider for better visual separation * refactor: remove chat notifications positioning setting and adjust notification alignment in video chat * refactor: streamline StreamInfoBar component by consolidating offline handling and improving layout for better readability * refactor: enhance StreamInfoBar by adding tooltip for streamer name and improving text overflow handling * refactor: adjust tooltip display duration in StreamInfoBar and update theme configuration * refactor: adjust margin and padding in StreamCard for improved layout consistency * chore: update dependencies in pubspec.yaml and pubspec.lock for Firebase and other packages * template * chore: update iOS platform version to 15.0 and Firebase dependencies to 12.2.0 * refactor: simplify StreamInfoBar layout by reducing nested widgets and improving text color handling * format * feat: enhance Channel model and StreamInfoBar to support offline channel details * feat: add offline indicator and improve StreamInfoBar layout for better offline channel display * fix: adjust icon color opacity in StreamInfoBar for improved visibility * feat: enhance dismissal animation in FrostyPhotoViewDialog to track swipe direction * docs: update copilot instructions for clarity and additional error handling details * refactor: optimize latency tooltip layout and improve offline indicator styling in VideoOverlay * feat: implement shared chat asset fetching and participant management in ChatAssetsStore * refactor: replace Observer with Builder for improved widget rebuilding in VideoOverlay * refactor: update StreamInfoBar border styling and adjust layout in VideoOverlay for improved visual consistency * feat: add showTextShadows property to StreamInfoBar for customizable text shadow display * refactor: adjust layout in VideoOverlay by adding padding to improve spacing and visual consistency * refactor: enhance VideoOverlay gradients and layout for improved visual hierarchy and user experience * refactor: reduce vertical padding in VideoOverlay for improved layout consistency * refactor: remove overlay opacity settings from VideoSettings and SettingsStore for simplification * refactor: improve text overlay transition in VideoChat for better user experience * Revert "refactor: improve text overlay transition in VideoChat for better user experience" This reverts commit fd16ff5ec30ec266157e5c8a9d4a6090c91717f6. * refactor: wrap videoOverlay in ColoredBox for improved layout handling * refactor: optimize animation duration and transition curves in VideoChat for smoother interactions * refactor: dispose searchScrollController in HomeStoreBase to prevent memory leaks * refactor: simplify gradient definitions in VideoOverlay for improved readability and maintainability * refactor: remove 'Offline' text overlay from VideoOverlay for cleaner UI * refactor: add refresh functionality for assets in ChatDetails with loading indicators * refactor: update visibility conditions for uptime, viewer count, and category display in StreamInfoBar * refactor: replace AlertDialog with FrostyDialog for consistent dialog styling across the application * refactor: enhance layout handling in FrostyPageView to prevent overflow during height transitions * refactor: replace ColorPickerDialog with AccentColorPickerDialog for improved color selection experience * refactor: replace theme and accent color settings with dedicated components for improved modularity and readability * refactor: replace ElevatedButton with TextButton for consistent button styling across dialogs * refactor: integrate MobX Observer for reactive state management in settings widgets * refactor: update theme and dialog components for improved styling and consistency * refactor: enhance dialog styling with rounded corners and border in theme configuration * refactor: improve dialog messages for unauthorized access handling * refactor: update bodyLarge text style in theme configuration to include font weight * refactor: standardize Divider usage and adjust theme styles for improved consistency * refactor: adjust Divider properties and theme styles for enhanced visual consistency * chore: remove GEMINI.md file as it is no longer needed for project documentation * refactor: enhance token validation and reconnect logic in AuthBase for improved error handling * format * refactor: integrate landscape cutout settings into VideoChat layout for improved responsiveness * refactor: implement app lifecycle handling in VideoChat and enhance stream info update logic in VideoStore * refactor: update landscape cutout conditionals in VideoChat layout for improved responsiveness * update AGENTS.md * add scrollbar to search * fix scrolling exception * update CLAUDE.md * 5 auth reconnect attemps then log out * increase reply max lines to 2 * simplify and improve reply formatting * add prime icon * better draggable divider * support draggable divider in fullscreen overlay chat * add text shadow in fullscreen chat overlay mode * format * add landscape checks * video store optimization attempts * Dispose WebViewController and remove JavaScript channels properly * Track and cleanup all MutationObservers to prevent accumulation * Throttle latency updates to once per 5 seconds (reduces CPU load) * Add timeout protection and null checks for robustness * Prevent duplicate event listeners on page reloads * double tap divider to reset * Revert "video store optimization attempts" This reverts commit b1df7b0de473543283211a489dca698d9d241857. * optimize video store attempt 2 * Revert "double tap divider to reset" This reverts commit aeb26a433500ec71f822794835e927018ee59e1e. * optimize latency listener to open the menu and check every 20 secconds * more optimizations * hard refresh * abbreviate latency * fix lint * improve hide default overlay * fix chat no longer reconnecting with chat delay * refine chat alerts * fix historical message missing badges and emotes on initial connection * parallelize * revert * add reconnect button inline action * refactor: replace Scrollbar with FrostyScrollbar across chat and settings screens for consistent styling * tweak chat details menu * add scrollbar to release notes, renames for consistency * fix duplicate message case * fix chat delay alerts in auto sync mode * add regex for numeric strings and enhance display name formatting logic * exterminate borders * refactor: simplify active chat modes display in chat details screen * feat: enhance chat input button with delay notification and disable state * fix: wrap chat in SafeArea to prevent UI overflow issues * refactor: remove divider line from video chat and update draggable divider visibility logic * persist overlay in pip mode * fix: update chat delay handling and notifications in chat bottom bar * fix: update chat overlay visibility logic to respect fullscreen settings * tap to show deleted message * fix: prevent accidental chat scrolling when accessing system UI in landscape mode * show latency in portrait * fix: enhance chat delay notifications with dynamic delay time * docs: update CLAUDE.md for improved environment variable instructions and architecture overview * fix: improve chat delay countdown management and message handling * add preliminary release notes * remove agents.md * update lockfile * add initial multi chat feature * add option to persist multi chat tabs * add remove confirmation dialog * improve add chat design * lazy-load tabs * create global assets store to dedupe global asset fetching * improve tab design/styles * update notes * use frosty dialog * update claude md * tweak * add ability to reorder tabs * resolve conflict * merge cleanup * format * update release notes * add chat delay sync completion tracking to prevent countdown re-appearance * add tests * fix * update release notes * bump
2026-01-01 22:28:17 -05:00
Future<void> connectToChat({bool isReconnect = false}) async {
FirebaseCrashlytics.instance.setCustomKey('channel', channelName);
v5 (#463) * migrate to dio * ignore folders * simplify twitch api headers handling * clean up main * simplify logs * optimize profile picture fetching fixes refetches on tab switch * update claude md * refactor irc.dart * update copilot instructions with essential commands and project structure details * implement message sending state management and UI updates * refactor notification handling and add copy-paste functionality in chat * refactor AlertMessage to support vertical layout and optional padding * refactor error messages for consistency and clarity across various components * refactor chat layout to use draggable divider and improve chat width settings * refactor Uptime widget to use SharedTimerService for synchronized updates * refactor search results components to handle null future states gracefully * refactor loading indicators to use skeleton loaders for improved user experience * refactor UI components for improved layout and responsiveness, enhance skeleton loaders, and streamline padding adjustments * refactor: replace manual blur effects with BlurredContainer for consistency and reusability * refactor: enhance JavaScript execution and error handling in WebView components * refactor: replace app bar with blurred container for improved UI consistency across screens * refactor: streamline video chat layout and enhance PiP drag gesture functionality * revert some app bar changes * refactor: implement Picture-in-Picture drag functionality in VideoChat * refactor: pass currentChannelId to IRCMessage and ChatMessage for improved context * fix large thubmnail width * chore: update Gradle and Kotlin plugin versions for improved compatibility * changes from v4.10.0 branch * feat: integrate AnimatedScrollBorder for improved UI responsiveness across various screens * refactor: update SectionHeader styling and improve theme management * feat: add pinned section to StreamsList and enhance skeleton loader padding * feat: add repository guidelines for project structure, coding style, testing, and security * feat: enhance StreamCard UI with BlurredContainer and adjust border width in theme * feat: implement unfocusInput and safeRequestFocus methods to manage text field focus behavior * feat: enhance Picture-in-Picture drag interactions with haptic feedback and smooth animations * refactor: improve code formatting and readability across multiple files * feat: implement picture-in-picture mode toggle and state management for video playback * feat: reset PiP mode state when pausing video playback * feat: add custom app bar with profile picture and stream info for video chat * feat: convert multiple settings screens to use StatefulWidget and add animated scroll borders * feat: update blur configuration for adaptive alpha based on theme * fix: adjust default font size in SectionHeader widget * feat: enhance PiP mode with drag overlay instruction and UI improvements * fix: improve badge rendering with consistent margin and border for current channel * refactor: replace BackdropFilter with BlurredContainer for improved clarity and maintainability * fix: reduce background transparency in Uptime widget for better visibility * feat: enhance photo view dialog with full resolution toggle and blurred background * fix: reset chat delay to 0 when auto sync is enabled and update settings title for clarity * fix: adjust border width in theme to improve consistency * feat: add forceDarkMode option to BlurredContainer for improved theme adaptability * feat: implement offline followed channels feature with UI integration and settings option * fix: increase font size and weight for offline status text for better readability * feat: remove offline pinned channels feature and update related UI components * feat: optimize offline channels loading behavior based on expansion state * fix: improve clarity and consistency in repository guidelines formatting * feat: update full resolution URL handling and button visibility logic * feat: replace app bar with blurred version in chat-only mode and add animated scroll border * feat: refactor video chat layout for improved chat and video display in landscape mode * feat: remove bottom bar visibility setting and adjust chat layout accordingly * fix: simplify condition for displaying offline channels section in following tab * feat: enhance reply thread display with indentation and reply icon * feat: implement showModalBottomSheetWithProperFocus for improved focus handling * feat: add gradient direction support to BlurredContainer for enhanced visual effects * feat: enhance NavigationBar and Theme settings for improved visual consistency * feat: add gradient direction support to BlurredContainer in VideoChat for enhanced visual effects * chore: update .gitignore to include .cursor file for better environment management * fix: update PiP drag gesture conditions to include video paused state for better user experience * refactor: replace ScrollController with SettingsPageLayout in settings screens for improved layout management * refactor: centralize orientation handling by introducing OrientationUtils for improved readability and maintainability * refactor: replace OrientationUtils with ContextExtensions for streamlined context-based access to theme, layout, and API dependencies * refactor: improve video chat UI by adjusting title layout and adding stream info tooltips for better user experience * refactor: adjust titleSpacing in theme and navigation components for improved layout consistency * refactor: update stream info timer handling and overlay management for improved UI responsiveness * refactor: enhance stream info timer logic and overlay visibility management for chat-only mode * refactor: enhance input decoration theme in FrostyThemes for improved visual consistency and responsiveness * refactor: adjust inputDecorationTheme padding in FrostyThemes for improved visual consistency * refactor: enhance video overlay management by including video preview overlay in hideElements for improved UI consistency * refactor: improve chat bottom bar padding and video chat layout for enhanced UI consistency * refactor: adjust chat padding to account for device bottom insets for improved layout consistency * refactor: update text styles in FrostyThemes for improved visual consistency across UI components * refactor: update iOS minimum deployment target to 13.0 for improved compatibility * refactor: adjust chat bottom padding based on emote menu visibility for improved layout consistency * refactor: adjust padding values in StreamsList for improved layout consistency * refactor: replace Padding with AnimatedPadding in Chat for smoother layout transitions refactor: replace Container with AnimatedContainer in BlurredContainer for smoother animations * refactor: remove unnecessary radius property from ProfilePicture in OfflineChannelCard for cleaner code * refactor: enhance chat bottom bar suffix icon to display message delay with tooltip for improved user experience * refactor: update hint text and tooltips in chat bottom bar and search for improved clarity * refactor: simplify notification display logic and enhance chat input behavior for improved user experience * refactor: enhance layout consistency by adjusting spacing in various components across the channel and home screens * refactor: introduce LiveIndicator widget and adjust spacing in channel and video components for improved layout consistency * refactor: remove monospace font family from chat bottom bar for improved text rendering * refactor: reduce notification animation duration and change dismiss direction for improved user experience * refactor: replace VideoBar with StreamInfoBar in video components for improved layout and consistency * refactor: adjust font sizes and spacing in StreamInfoBar for improved layout consistency * refactor: standardize font sizes and update gradient stops in video components for improved visual consistency * refactor: update tooltip padding and background color in theme for improved visual consistency * refactor: enhance tooltip behavior and standardize font sizes in StreamInfoBar and related components for improved visual consistency * refactor: add showThumbnail option to LargeStreamCardSkeletonLoader for improved layout flexibility * refactor: add StreamInfoBarSkeletonLoader for improved layout consistency in stream components * refactor: add shadow effects to icons and text in StreamInfoBar and VideoOverlay for improved visual depth * refactor: update defaultOverlayOpacity to 0.0 for improved overlay behavior * fix: correct stream info text color on overlay * refactor: implement a new color picker dialog with random color generation for enhanced user experience * refactor: adjust gradient colors and stops in VideoOverlay for improved visual consistency * refactor: refine gradient colors and stops in VideoOverlay for enhanced visual clarity * refactor: add isCompact parameter to StreamInfoBar for responsive text sizing * fix: update tooltip background color to use surface color for better contrast * feat: add shared chat mode support in chat store and update StreamInfoBar for visual indication * refactor: disable debug print for IRC messages to reduce log clutter * feat: implement chat color selection feature with user color management in chat settings * refactor: replace color adjustment logic with new contrast-aware utility for chat names * refactor: simplify chat details UI by replacing list tiles with action cards and removing unused clear dialog * refactor: enhance chat details UI by improving time formatting and adding label styling to action cards * refactor: update chat color terminology to 'Username color' for clarity in UI * refactor: enhance chat details UI by introducing active chat modes display and improving layout structure * refactor: improve chat details layout by replacing ListTile with Padding and adding a Divider for better visual separation * refactor: remove chat notifications positioning setting and adjust notification alignment in video chat * refactor: streamline StreamInfoBar component by consolidating offline handling and improving layout for better readability * refactor: enhance StreamInfoBar by adding tooltip for streamer name and improving text overflow handling * refactor: adjust tooltip display duration in StreamInfoBar and update theme configuration * refactor: adjust margin and padding in StreamCard for improved layout consistency * chore: update dependencies in pubspec.yaml and pubspec.lock for Firebase and other packages * template * chore: update iOS platform version to 15.0 and Firebase dependencies to 12.2.0 * refactor: simplify StreamInfoBar layout by reducing nested widgets and improving text color handling * format * feat: enhance Channel model and StreamInfoBar to support offline channel details * feat: add offline indicator and improve StreamInfoBar layout for better offline channel display * fix: adjust icon color opacity in StreamInfoBar for improved visibility * feat: enhance dismissal animation in FrostyPhotoViewDialog to track swipe direction * docs: update copilot instructions for clarity and additional error handling details * refactor: optimize latency tooltip layout and improve offline indicator styling in VideoOverlay * feat: implement shared chat asset fetching and participant management in ChatAssetsStore * refactor: replace Observer with Builder for improved widget rebuilding in VideoOverlay * refactor: update StreamInfoBar border styling and adjust layout in VideoOverlay for improved visual consistency * feat: add showTextShadows property to StreamInfoBar for customizable text shadow display * refactor: adjust layout in VideoOverlay by adding padding to improve spacing and visual consistency * refactor: enhance VideoOverlay gradients and layout for improved visual hierarchy and user experience * refactor: reduce vertical padding in VideoOverlay for improved layout consistency * refactor: remove overlay opacity settings from VideoSettings and SettingsStore for simplification * refactor: improve text overlay transition in VideoChat for better user experience * Revert "refactor: improve text overlay transition in VideoChat for better user experience" This reverts commit fd16ff5ec30ec266157e5c8a9d4a6090c91717f6. * refactor: wrap videoOverlay in ColoredBox for improved layout handling * refactor: optimize animation duration and transition curves in VideoChat for smoother interactions * refactor: dispose searchScrollController in HomeStoreBase to prevent memory leaks * refactor: simplify gradient definitions in VideoOverlay for improved readability and maintainability * refactor: remove 'Offline' text overlay from VideoOverlay for cleaner UI * refactor: add refresh functionality for assets in ChatDetails with loading indicators * refactor: update visibility conditions for uptime, viewer count, and category display in StreamInfoBar * refactor: replace AlertDialog with FrostyDialog for consistent dialog styling across the application * refactor: enhance layout handling in FrostyPageView to prevent overflow during height transitions * refactor: replace ColorPickerDialog with AccentColorPickerDialog for improved color selection experience * refactor: replace theme and accent color settings with dedicated components for improved modularity and readability * refactor: replace ElevatedButton with TextButton for consistent button styling across dialogs * refactor: integrate MobX Observer for reactive state management in settings widgets * refactor: update theme and dialog components for improved styling and consistency * refactor: enhance dialog styling with rounded corners and border in theme configuration * refactor: improve dialog messages for unauthorized access handling * refactor: update bodyLarge text style in theme configuration to include font weight * refactor: standardize Divider usage and adjust theme styles for improved consistency * refactor: adjust Divider properties and theme styles for enhanced visual consistency * chore: remove GEMINI.md file as it is no longer needed for project documentation * refactor: enhance token validation and reconnect logic in AuthBase for improved error handling * format * refactor: integrate landscape cutout settings into VideoChat layout for improved responsiveness * refactor: implement app lifecycle handling in VideoChat and enhance stream info update logic in VideoStore * refactor: update landscape cutout conditionals in VideoChat layout for improved responsiveness * update AGENTS.md * add scrollbar to search * fix scrolling exception * update CLAUDE.md * 5 auth reconnect attemps then log out * increase reply max lines to 2 * simplify and improve reply formatting * add prime icon * better draggable divider * support draggable divider in fullscreen overlay chat * add text shadow in fullscreen chat overlay mode * format * add landscape checks * video store optimization attempts * Dispose WebViewController and remove JavaScript channels properly * Track and cleanup all MutationObservers to prevent accumulation * Throttle latency updates to once per 5 seconds (reduces CPU load) * Add timeout protection and null checks for robustness * Prevent duplicate event listeners on page reloads * double tap divider to reset * Revert "video store optimization attempts" This reverts commit b1df7b0de473543283211a489dca698d9d241857. * optimize video store attempt 2 * Revert "double tap divider to reset" This reverts commit aeb26a433500ec71f822794835e927018ee59e1e. * optimize latency listener to open the menu and check every 20 secconds * more optimizations * hard refresh * abbreviate latency * fix lint * improve hide default overlay * fix chat no longer reconnecting with chat delay * refine chat alerts * fix historical message missing badges and emotes on initial connection * parallelize * revert * add reconnect button inline action * refactor: replace Scrollbar with FrostyScrollbar across chat and settings screens for consistent styling * tweak chat details menu * add scrollbar to release notes, renames for consistency * fix duplicate message case * fix chat delay alerts in auto sync mode * add regex for numeric strings and enhance display name formatting logic * exterminate borders * refactor: simplify active chat modes display in chat details screen * feat: enhance chat input button with delay notification and disable state * fix: wrap chat in SafeArea to prevent UI overflow issues * refactor: remove divider line from video chat and update draggable divider visibility logic * persist overlay in pip mode * fix: update chat delay handling and notifications in chat bottom bar * fix: update chat overlay visibility logic to respect fullscreen settings * tap to show deleted message * fix: prevent accidental chat scrolling when accessing system UI in landscape mode * show latency in portrait * fix: enhance chat delay notifications with dynamic delay time * docs: update CLAUDE.md for improved environment variable instructions and architecture overview * fix: improve chat delay countdown management and message handling * add preliminary release notes * remove agents.md * update lockfile * add initial multi chat feature * add option to persist multi chat tabs * add remove confirmation dialog * improve add chat design * lazy-load tabs * create global assets store to dedupe global asset fetching * improve tab design/styles * update notes * use frosty dialog * update claude md * tweak * add ability to reorder tabs * resolve conflict * merge cleanup * format * update release notes * add chat delay sync completion tracking to prevent countdown re-appearance * add tests * fix * update release notes * bump
2026-01-01 22:28:17 -05:00
// Fetch assets first so they're available for all messages
getAssets().catchError(
(e) => debugPrint('Failed to fetch chat assets: $e'),
);
v5 (#463) * migrate to dio * ignore folders * simplify twitch api headers handling * clean up main * simplify logs * optimize profile picture fetching fixes refetches on tab switch * update claude md * refactor irc.dart * update copilot instructions with essential commands and project structure details * implement message sending state management and UI updates * refactor notification handling and add copy-paste functionality in chat * refactor AlertMessage to support vertical layout and optional padding * refactor error messages for consistency and clarity across various components * refactor chat layout to use draggable divider and improve chat width settings * refactor Uptime widget to use SharedTimerService for synchronized updates * refactor search results components to handle null future states gracefully * refactor loading indicators to use skeleton loaders for improved user experience * refactor UI components for improved layout and responsiveness, enhance skeleton loaders, and streamline padding adjustments * refactor: replace manual blur effects with BlurredContainer for consistency and reusability * refactor: enhance JavaScript execution and error handling in WebView components * refactor: replace app bar with blurred container for improved UI consistency across screens * refactor: streamline video chat layout and enhance PiP drag gesture functionality * revert some app bar changes * refactor: implement Picture-in-Picture drag functionality in VideoChat * refactor: pass currentChannelId to IRCMessage and ChatMessage for improved context * fix large thubmnail width * chore: update Gradle and Kotlin plugin versions for improved compatibility * changes from v4.10.0 branch * feat: integrate AnimatedScrollBorder for improved UI responsiveness across various screens * refactor: update SectionHeader styling and improve theme management * feat: add pinned section to StreamsList and enhance skeleton loader padding * feat: add repository guidelines for project structure, coding style, testing, and security * feat: enhance StreamCard UI with BlurredContainer and adjust border width in theme * feat: implement unfocusInput and safeRequestFocus methods to manage text field focus behavior * feat: enhance Picture-in-Picture drag interactions with haptic feedback and smooth animations * refactor: improve code formatting and readability across multiple files * feat: implement picture-in-picture mode toggle and state management for video playback * feat: reset PiP mode state when pausing video playback * feat: add custom app bar with profile picture and stream info for video chat * feat: convert multiple settings screens to use StatefulWidget and add animated scroll borders * feat: update blur configuration for adaptive alpha based on theme * fix: adjust default font size in SectionHeader widget * feat: enhance PiP mode with drag overlay instruction and UI improvements * fix: improve badge rendering with consistent margin and border for current channel * refactor: replace BackdropFilter with BlurredContainer for improved clarity and maintainability * fix: reduce background transparency in Uptime widget for better visibility * feat: enhance photo view dialog with full resolution toggle and blurred background * fix: reset chat delay to 0 when auto sync is enabled and update settings title for clarity * fix: adjust border width in theme to improve consistency * feat: add forceDarkMode option to BlurredContainer for improved theme adaptability * feat: implement offline followed channels feature with UI integration and settings option * fix: increase font size and weight for offline status text for better readability * feat: remove offline pinned channels feature and update related UI components * feat: optimize offline channels loading behavior based on expansion state * fix: improve clarity and consistency in repository guidelines formatting * feat: update full resolution URL handling and button visibility logic * feat: replace app bar with blurred version in chat-only mode and add animated scroll border * feat: refactor video chat layout for improved chat and video display in landscape mode * feat: remove bottom bar visibility setting and adjust chat layout accordingly * fix: simplify condition for displaying offline channels section in following tab * feat: enhance reply thread display with indentation and reply icon * feat: implement showModalBottomSheetWithProperFocus for improved focus handling * feat: add gradient direction support to BlurredContainer for enhanced visual effects * feat: enhance NavigationBar and Theme settings for improved visual consistency * feat: add gradient direction support to BlurredContainer in VideoChat for enhanced visual effects * chore: update .gitignore to include .cursor file for better environment management * fix: update PiP drag gesture conditions to include video paused state for better user experience * refactor: replace ScrollController with SettingsPageLayout in settings screens for improved layout management * refactor: centralize orientation handling by introducing OrientationUtils for improved readability and maintainability * refactor: replace OrientationUtils with ContextExtensions for streamlined context-based access to theme, layout, and API dependencies * refactor: improve video chat UI by adjusting title layout and adding stream info tooltips for better user experience * refactor: adjust titleSpacing in theme and navigation components for improved layout consistency * refactor: update stream info timer handling and overlay management for improved UI responsiveness * refactor: enhance stream info timer logic and overlay visibility management for chat-only mode * refactor: enhance input decoration theme in FrostyThemes for improved visual consistency and responsiveness * refactor: adjust inputDecorationTheme padding in FrostyThemes for improved visual consistency * refactor: enhance video overlay management by including video preview overlay in hideElements for improved UI consistency * refactor: improve chat bottom bar padding and video chat layout for enhanced UI consistency * refactor: adjust chat padding to account for device bottom insets for improved layout consistency * refactor: update text styles in FrostyThemes for improved visual consistency across UI components * refactor: update iOS minimum deployment target to 13.0 for improved compatibility * refactor: adjust chat bottom padding based on emote menu visibility for improved layout consistency * refactor: adjust padding values in StreamsList for improved layout consistency * refactor: replace Padding with AnimatedPadding in Chat for smoother layout transitions refactor: replace Container with AnimatedContainer in BlurredContainer for smoother animations * refactor: remove unnecessary radius property from ProfilePicture in OfflineChannelCard for cleaner code * refactor: enhance chat bottom bar suffix icon to display message delay with tooltip for improved user experience * refactor: update hint text and tooltips in chat bottom bar and search for improved clarity * refactor: simplify notification display logic and enhance chat input behavior for improved user experience * refactor: enhance layout consistency by adjusting spacing in various components across the channel and home screens * refactor: introduce LiveIndicator widget and adjust spacing in channel and video components for improved layout consistency * refactor: remove monospace font family from chat bottom bar for improved text rendering * refactor: reduce notification animation duration and change dismiss direction for improved user experience * refactor: replace VideoBar with StreamInfoBar in video components for improved layout and consistency * refactor: adjust font sizes and spacing in StreamInfoBar for improved layout consistency * refactor: standardize font sizes and update gradient stops in video components for improved visual consistency * refactor: update tooltip padding and background color in theme for improved visual consistency * refactor: enhance tooltip behavior and standardize font sizes in StreamInfoBar and related components for improved visual consistency * refactor: add showThumbnail option to LargeStreamCardSkeletonLoader for improved layout flexibility * refactor: add StreamInfoBarSkeletonLoader for improved layout consistency in stream components * refactor: add shadow effects to icons and text in StreamInfoBar and VideoOverlay for improved visual depth * refactor: update defaultOverlayOpacity to 0.0 for improved overlay behavior * fix: correct stream info text color on overlay * refactor: implement a new color picker dialog with random color generation for enhanced user experience * refactor: adjust gradient colors and stops in VideoOverlay for improved visual consistency * refactor: refine gradient colors and stops in VideoOverlay for enhanced visual clarity * refactor: add isCompact parameter to StreamInfoBar for responsive text sizing * fix: update tooltip background color to use surface color for better contrast * feat: add shared chat mode support in chat store and update StreamInfoBar for visual indication * refactor: disable debug print for IRC messages to reduce log clutter * feat: implement chat color selection feature with user color management in chat settings * refactor: replace color adjustment logic with new contrast-aware utility for chat names * refactor: simplify chat details UI by replacing list tiles with action cards and removing unused clear dialog * refactor: enhance chat details UI by improving time formatting and adding label styling to action cards * refactor: update chat color terminology to 'Username color' for clarity in UI * refactor: enhance chat details UI by introducing active chat modes display and improving layout structure * refactor: improve chat details layout by replacing ListTile with Padding and adding a Divider for better visual separation * refactor: remove chat notifications positioning setting and adjust notification alignment in video chat * refactor: streamline StreamInfoBar component by consolidating offline handling and improving layout for better readability * refactor: enhance StreamInfoBar by adding tooltip for streamer name and improving text overflow handling * refactor: adjust tooltip display duration in StreamInfoBar and update theme configuration * refactor: adjust margin and padding in StreamCard for improved layout consistency * chore: update dependencies in pubspec.yaml and pubspec.lock for Firebase and other packages * template * chore: update iOS platform version to 15.0 and Firebase dependencies to 12.2.0 * refactor: simplify StreamInfoBar layout by reducing nested widgets and improving text color handling * format * feat: enhance Channel model and StreamInfoBar to support offline channel details * feat: add offline indicator and improve StreamInfoBar layout for better offline channel display * fix: adjust icon color opacity in StreamInfoBar for improved visibility * feat: enhance dismissal animation in FrostyPhotoViewDialog to track swipe direction * docs: update copilot instructions for clarity and additional error handling details * refactor: optimize latency tooltip layout and improve offline indicator styling in VideoOverlay * feat: implement shared chat asset fetching and participant management in ChatAssetsStore * refactor: replace Observer with Builder for improved widget rebuilding in VideoOverlay * refactor: update StreamInfoBar border styling and adjust layout in VideoOverlay for improved visual consistency * feat: add showTextShadows property to StreamInfoBar for customizable text shadow display * refactor: adjust layout in VideoOverlay by adding padding to improve spacing and visual consistency * refactor: enhance VideoOverlay gradients and layout for improved visual hierarchy and user experience * refactor: reduce vertical padding in VideoOverlay for improved layout consistency * refactor: remove overlay opacity settings from VideoSettings and SettingsStore for simplification * refactor: improve text overlay transition in VideoChat for better user experience * Revert "refactor: improve text overlay transition in VideoChat for better user experience" This reverts commit fd16ff5ec30ec266157e5c8a9d4a6090c91717f6. * refactor: wrap videoOverlay in ColoredBox for improved layout handling * refactor: optimize animation duration and transition curves in VideoChat for smoother interactions * refactor: dispose searchScrollController in HomeStoreBase to prevent memory leaks * refactor: simplify gradient definitions in VideoOverlay for improved readability and maintainability * refactor: remove 'Offline' text overlay from VideoOverlay for cleaner UI * refactor: add refresh functionality for assets in ChatDetails with loading indicators * refactor: update visibility conditions for uptime, viewer count, and category display in StreamInfoBar * refactor: replace AlertDialog with FrostyDialog for consistent dialog styling across the application * refactor: enhance layout handling in FrostyPageView to prevent overflow during height transitions * refactor: replace ColorPickerDialog with AccentColorPickerDialog for improved color selection experience * refactor: replace theme and accent color settings with dedicated components for improved modularity and readability * refactor: replace ElevatedButton with TextButton for consistent button styling across dialogs * refactor: integrate MobX Observer for reactive state management in settings widgets * refactor: update theme and dialog components for improved styling and consistency * refactor: enhance dialog styling with rounded corners and border in theme configuration * refactor: improve dialog messages for unauthorized access handling * refactor: update bodyLarge text style in theme configuration to include font weight * refactor: standardize Divider usage and adjust theme styles for improved consistency * refactor: adjust Divider properties and theme styles for enhanced visual consistency * chore: remove GEMINI.md file as it is no longer needed for project documentation * refactor: enhance token validation and reconnect logic in AuthBase for improved error handling * format * refactor: integrate landscape cutout settings into VideoChat layout for improved responsiveness * refactor: implement app lifecycle handling in VideoChat and enhance stream info update logic in VideoStore * refactor: update landscape cutout conditionals in VideoChat layout for improved responsiveness * update AGENTS.md * add scrollbar to search * fix scrolling exception * update CLAUDE.md * 5 auth reconnect attemps then log out * increase reply max lines to 2 * simplify and improve reply formatting * add prime icon * better draggable divider * support draggable divider in fullscreen overlay chat * add text shadow in fullscreen chat overlay mode * format * add landscape checks * video store optimization attempts * Dispose WebViewController and remove JavaScript channels properly * Track and cleanup all MutationObservers to prevent accumulation * Throttle latency updates to once per 5 seconds (reduces CPU load) * Add timeout protection and null checks for robustness * Prevent duplicate event listeners on page reloads * double tap divider to reset * Revert "video store optimization attempts" This reverts commit b1df7b0de473543283211a489dca698d9d241857. * optimize video store attempt 2 * Revert "double tap divider to reset" This reverts commit aeb26a433500ec71f822794835e927018ee59e1e. * optimize latency listener to open the menu and check every 20 secconds * more optimizations * hard refresh * abbreviate latency * fix lint * improve hide default overlay * fix chat no longer reconnecting with chat delay * refine chat alerts * fix historical message missing badges and emotes on initial connection * parallelize * revert * add reconnect button inline action * refactor: replace Scrollbar with FrostyScrollbar across chat and settings screens for consistent styling * tweak chat details menu * add scrollbar to release notes, renames for consistency * fix duplicate message case * fix chat delay alerts in auto sync mode * add regex for numeric strings and enhance display name formatting logic * exterminate borders * refactor: simplify active chat modes display in chat details screen * feat: enhance chat input button with delay notification and disable state * fix: wrap chat in SafeArea to prevent UI overflow issues * refactor: remove divider line from video chat and update draggable divider visibility logic * persist overlay in pip mode * fix: update chat delay handling and notifications in chat bottom bar * fix: update chat overlay visibility logic to respect fullscreen settings * tap to show deleted message * fix: prevent accidental chat scrolling when accessing system UI in landscape mode * show latency in portrait * fix: enhance chat delay notifications with dynamic delay time * docs: update CLAUDE.md for improved environment variable instructions and architecture overview * fix: improve chat delay countdown management and message handling * add preliminary release notes * remove agents.md * update lockfile * add initial multi chat feature * add option to persist multi chat tabs * add remove confirmation dialog * improve add chat design * lazy-load tabs * create global assets store to dedupe global asset fetching * improve tab design/styles * update notes * use frosty dialog * update claude md * tweak * add ability to reorder tabs * resolve conflict * merge cleanup * format * update release notes * add chat delay sync completion tracking to prevent countdown re-appearance * add tests * fix * update release notes * bump
2026-01-01 22:28:17 -05:00
// Cancel existing listener to prevent duplicate message processing
_channelListener?.cancel();
_clearPendingDelayedCallbacks(clearSevenTV: false);
v5 (#463) * migrate to dio * ignore folders * simplify twitch api headers handling * clean up main * simplify logs * optimize profile picture fetching fixes refetches on tab switch * update claude md * refactor irc.dart * update copilot instructions with essential commands and project structure details * implement message sending state management and UI updates * refactor notification handling and add copy-paste functionality in chat * refactor AlertMessage to support vertical layout and optional padding * refactor error messages for consistency and clarity across various components * refactor chat layout to use draggable divider and improve chat width settings * refactor Uptime widget to use SharedTimerService for synchronized updates * refactor search results components to handle null future states gracefully * refactor loading indicators to use skeleton loaders for improved user experience * refactor UI components for improved layout and responsiveness, enhance skeleton loaders, and streamline padding adjustments * refactor: replace manual blur effects with BlurredContainer for consistency and reusability * refactor: enhance JavaScript execution and error handling in WebView components * refactor: replace app bar with blurred container for improved UI consistency across screens * refactor: streamline video chat layout and enhance PiP drag gesture functionality * revert some app bar changes * refactor: implement Picture-in-Picture drag functionality in VideoChat * refactor: pass currentChannelId to IRCMessage and ChatMessage for improved context * fix large thubmnail width * chore: update Gradle and Kotlin plugin versions for improved compatibility * changes from v4.10.0 branch * feat: integrate AnimatedScrollBorder for improved UI responsiveness across various screens * refactor: update SectionHeader styling and improve theme management * feat: add pinned section to StreamsList and enhance skeleton loader padding * feat: add repository guidelines for project structure, coding style, testing, and security * feat: enhance StreamCard UI with BlurredContainer and adjust border width in theme * feat: implement unfocusInput and safeRequestFocus methods to manage text field focus behavior * feat: enhance Picture-in-Picture drag interactions with haptic feedback and smooth animations * refactor: improve code formatting and readability across multiple files * feat: implement picture-in-picture mode toggle and state management for video playback * feat: reset PiP mode state when pausing video playback * feat: add custom app bar with profile picture and stream info for video chat * feat: convert multiple settings screens to use StatefulWidget and add animated scroll borders * feat: update blur configuration for adaptive alpha based on theme * fix: adjust default font size in SectionHeader widget * feat: enhance PiP mode with drag overlay instruction and UI improvements * fix: improve badge rendering with consistent margin and border for current channel * refactor: replace BackdropFilter with BlurredContainer for improved clarity and maintainability * fix: reduce background transparency in Uptime widget for better visibility * feat: enhance photo view dialog with full resolution toggle and blurred background * fix: reset chat delay to 0 when auto sync is enabled and update settings title for clarity * fix: adjust border width in theme to improve consistency * feat: add forceDarkMode option to BlurredContainer for improved theme adaptability * feat: implement offline followed channels feature with UI integration and settings option * fix: increase font size and weight for offline status text for better readability * feat: remove offline pinned channels feature and update related UI components * feat: optimize offline channels loading behavior based on expansion state * fix: improve clarity and consistency in repository guidelines formatting * feat: update full resolution URL handling and button visibility logic * feat: replace app bar with blurred version in chat-only mode and add animated scroll border * feat: refactor video chat layout for improved chat and video display in landscape mode * feat: remove bottom bar visibility setting and adjust chat layout accordingly * fix: simplify condition for displaying offline channels section in following tab * feat: enhance reply thread display with indentation and reply icon * feat: implement showModalBottomSheetWithProperFocus for improved focus handling * feat: add gradient direction support to BlurredContainer for enhanced visual effects * feat: enhance NavigationBar and Theme settings for improved visual consistency * feat: add gradient direction support to BlurredContainer in VideoChat for enhanced visual effects * chore: update .gitignore to include .cursor file for better environment management * fix: update PiP drag gesture conditions to include video paused state for better user experience * refactor: replace ScrollController with SettingsPageLayout in settings screens for improved layout management * refactor: centralize orientation handling by introducing OrientationUtils for improved readability and maintainability * refactor: replace OrientationUtils with ContextExtensions for streamlined context-based access to theme, layout, and API dependencies * refactor: improve video chat UI by adjusting title layout and adding stream info tooltips for better user experience * refactor: adjust titleSpacing in theme and navigation components for improved layout consistency * refactor: update stream info timer handling and overlay management for improved UI responsiveness * refactor: enhance stream info timer logic and overlay visibility management for chat-only mode * refactor: enhance input decoration theme in FrostyThemes for improved visual consistency and responsiveness * refactor: adjust inputDecorationTheme padding in FrostyThemes for improved visual consistency * refactor: enhance video overlay management by including video preview overlay in hideElements for improved UI consistency * refactor: improve chat bottom bar padding and video chat layout for enhanced UI consistency * refactor: adjust chat padding to account for device bottom insets for improved layout consistency * refactor: update text styles in FrostyThemes for improved visual consistency across UI components * refactor: update iOS minimum deployment target to 13.0 for improved compatibility * refactor: adjust chat bottom padding based on emote menu visibility for improved layout consistency * refactor: adjust padding values in StreamsList for improved layout consistency * refactor: replace Padding with AnimatedPadding in Chat for smoother layout transitions refactor: replace Container with AnimatedContainer in BlurredContainer for smoother animations * refactor: remove unnecessary radius property from ProfilePicture in OfflineChannelCard for cleaner code * refactor: enhance chat bottom bar suffix icon to display message delay with tooltip for improved user experience * refactor: update hint text and tooltips in chat bottom bar and search for improved clarity * refactor: simplify notification display logic and enhance chat input behavior for improved user experience * refactor: enhance layout consistency by adjusting spacing in various components across the channel and home screens * refactor: introduce LiveIndicator widget and adjust spacing in channel and video components for improved layout consistency * refactor: remove monospace font family from chat bottom bar for improved text rendering * refactor: reduce notification animation duration and change dismiss direction for improved user experience * refactor: replace VideoBar with StreamInfoBar in video components for improved layout and consistency * refactor: adjust font sizes and spacing in StreamInfoBar for improved layout consistency * refactor: standardize font sizes and update gradient stops in video components for improved visual consistency * refactor: update tooltip padding and background color in theme for improved visual consistency * refactor: enhance tooltip behavior and standardize font sizes in StreamInfoBar and related components for improved visual consistency * refactor: add showThumbnail option to LargeStreamCardSkeletonLoader for improved layout flexibility * refactor: add StreamInfoBarSkeletonLoader for improved layout consistency in stream components * refactor: add shadow effects to icons and text in StreamInfoBar and VideoOverlay for improved visual depth * refactor: update defaultOverlayOpacity to 0.0 for improved overlay behavior * fix: correct stream info text color on overlay * refactor: implement a new color picker dialog with random color generation for enhanced user experience * refactor: adjust gradient colors and stops in VideoOverlay for improved visual consistency * refactor: refine gradient colors and stops in VideoOverlay for enhanced visual clarity * refactor: add isCompact parameter to StreamInfoBar for responsive text sizing * fix: update tooltip background color to use surface color for better contrast * feat: add shared chat mode support in chat store and update StreamInfoBar for visual indication * refactor: disable debug print for IRC messages to reduce log clutter * feat: implement chat color selection feature with user color management in chat settings * refactor: replace color adjustment logic with new contrast-aware utility for chat names * refactor: simplify chat details UI by replacing list tiles with action cards and removing unused clear dialog * refactor: enhance chat details UI by improving time formatting and adding label styling to action cards * refactor: update chat color terminology to 'Username color' for clarity in UI * refactor: enhance chat details UI by introducing active chat modes display and improving layout structure * refactor: improve chat details layout by replacing ListTile with Padding and adding a Divider for better visual separation * refactor: remove chat notifications positioning setting and adjust notification alignment in video chat * refactor: streamline StreamInfoBar component by consolidating offline handling and improving layout for better readability * refactor: enhance StreamInfoBar by adding tooltip for streamer name and improving text overflow handling * refactor: adjust tooltip display duration in StreamInfoBar and update theme configuration * refactor: adjust margin and padding in StreamCard for improved layout consistency * chore: update dependencies in pubspec.yaml and pubspec.lock for Firebase and other packages * template * chore: update iOS platform version to 15.0 and Firebase dependencies to 12.2.0 * refactor: simplify StreamInfoBar layout by reducing nested widgets and improving text color handling * format * feat: enhance Channel model and StreamInfoBar to support offline channel details * feat: add offline indicator and improve StreamInfoBar layout for better offline channel display * fix: adjust icon color opacity in StreamInfoBar for improved visibility * feat: enhance dismissal animation in FrostyPhotoViewDialog to track swipe direction * docs: update copilot instructions for clarity and additional error handling details * refactor: optimize latency tooltip layout and improve offline indicator styling in VideoOverlay * feat: implement shared chat asset fetching and participant management in ChatAssetsStore * refactor: replace Observer with Builder for improved widget rebuilding in VideoOverlay * refactor: update StreamInfoBar border styling and adjust layout in VideoOverlay for improved visual consistency * feat: add showTextShadows property to StreamInfoBar for customizable text shadow display * refactor: adjust layout in VideoOverlay by adding padding to improve spacing and visual consistency * refactor: enhance VideoOverlay gradients and layout for improved visual hierarchy and user experience * refactor: reduce vertical padding in VideoOverlay for improved layout consistency * refactor: remove overlay opacity settings from VideoSettings and SettingsStore for simplification * refactor: improve text overlay transition in VideoChat for better user experience * Revert "refactor: improve text overlay transition in VideoChat for better user experience" This reverts commit fd16ff5ec30ec266157e5c8a9d4a6090c91717f6. * refactor: wrap videoOverlay in ColoredBox for improved layout handling * refactor: optimize animation duration and transition curves in VideoChat for smoother interactions * refactor: dispose searchScrollController in HomeStoreBase to prevent memory leaks * refactor: simplify gradient definitions in VideoOverlay for improved readability and maintainability * refactor: remove 'Offline' text overlay from VideoOverlay for cleaner UI * refactor: add refresh functionality for assets in ChatDetails with loading indicators * refactor: update visibility conditions for uptime, viewer count, and category display in StreamInfoBar * refactor: replace AlertDialog with FrostyDialog for consistent dialog styling across the application * refactor: enhance layout handling in FrostyPageView to prevent overflow during height transitions * refactor: replace ColorPickerDialog with AccentColorPickerDialog for improved color selection experience * refactor: replace theme and accent color settings with dedicated components for improved modularity and readability * refactor: replace ElevatedButton with TextButton for consistent button styling across dialogs * refactor: integrate MobX Observer for reactive state management in settings widgets * refactor: update theme and dialog components for improved styling and consistency * refactor: enhance dialog styling with rounded corners and border in theme configuration * refactor: improve dialog messages for unauthorized access handling * refactor: update bodyLarge text style in theme configuration to include font weight * refactor: standardize Divider usage and adjust theme styles for improved consistency * refactor: adjust Divider properties and theme styles for enhanced visual consistency * chore: remove GEMINI.md file as it is no longer needed for project documentation * refactor: enhance token validation and reconnect logic in AuthBase for improved error handling * format * refactor: integrate landscape cutout settings into VideoChat layout for improved responsiveness * refactor: implement app lifecycle handling in VideoChat and enhance stream info update logic in VideoStore * refactor: update landscape cutout conditionals in VideoChat layout for improved responsiveness * update AGENTS.md * add scrollbar to search * fix scrolling exception * update CLAUDE.md * 5 auth reconnect attemps then log out * increase reply max lines to 2 * simplify and improve reply formatting * add prime icon * better draggable divider * support draggable divider in fullscreen overlay chat * add text shadow in fullscreen chat overlay mode * format * add landscape checks * video store optimization attempts * Dispose WebViewController and remove JavaScript channels properly * Track and cleanup all MutationObservers to prevent accumulation * Throttle latency updates to once per 5 seconds (reduces CPU load) * Add timeout protection and null checks for robustness * Prevent duplicate event listeners on page reloads * double tap divider to reset * Revert "video store optimization attempts" This reverts commit b1df7b0de473543283211a489dca698d9d241857. * optimize video store attempt 2 * Revert "double tap divider to reset" This reverts commit aeb26a433500ec71f822794835e927018ee59e1e. * optimize latency listener to open the menu and check every 20 secconds * more optimizations * hard refresh * abbreviate latency * fix lint * improve hide default overlay * fix chat no longer reconnecting with chat delay * refine chat alerts * fix historical message missing badges and emotes on initial connection * parallelize * revert * add reconnect button inline action * refactor: replace Scrollbar with FrostyScrollbar across chat and settings screens for consistent styling * tweak chat details menu * add scrollbar to release notes, renames for consistency * fix duplicate message case * fix chat delay alerts in auto sync mode * add regex for numeric strings and enhance display name formatting logic * exterminate borders * refactor: simplify active chat modes display in chat details screen * feat: enhance chat input button with delay notification and disable state * fix: wrap chat in SafeArea to prevent UI overflow issues * refactor: remove divider line from video chat and update draggable divider visibility logic * persist overlay in pip mode * fix: update chat delay handling and notifications in chat bottom bar * fix: update chat overlay visibility logic to respect fullscreen settings * tap to show deleted message * fix: prevent accidental chat scrolling when accessing system UI in landscape mode * show latency in portrait * fix: enhance chat delay notifications with dynamic delay time * docs: update CLAUDE.md for improved environment variable instructions and architecture overview * fix: improve chat delay countdown management and message handling * add preliminary release notes * remove agents.md * update lockfile * add initial multi chat feature * add option to persist multi chat tabs * add remove confirmation dialog * improve add chat design * lazy-load tabs * create global assets store to dedupe global asset fetching * improve tab design/styles * update notes * use frosty dialog * update claude md * tweak * add ability to reorder tabs * resolve conflict * merge cleanup * format * update release notes * add chat delay sync completion tracking to prevent countdown re-appearance * add tests * fix * update release notes * bump
2026-01-01 22:28:17 -05:00
2024-08-09 21:28:59 -07:00
_channel?.sink.close(1000);
feat(video,chat): native player, ad-break awareness, chat send/delay reliability, and tab redesign (#567) Squash-merge commit. Covers four areas: native video player, chat reliability, multi-tab, and hardening. ## Native video player - Direct HLS playback via `better_native_video_player` (forked from `plug-and-pay/flutter-native-video-player`, patched on `frosty-patches` branch) - Twitch GQL playback token fetching with platform cookie extraction (iOS Swift + Android Kotlin plugins) for authenticated streams - Quality selection (source, 720p, 480p, 360p, 160p, audio-only) persisted per channel - Picture-in-picture: iOS automatic inline PiP, Android auto-PiP on API 31+ guarded against older devices - Latency polling, chat latency sync, stall detection/recovery, startup auto-pause recovery, watchdog timers - **Twitch stitched-ad break detection** (HLS `EXT-X-DATERANGE`) on both platforms, emitting `adBreakChanged` so the host suspends latency/stall recovery and chat sync during ads (program-date-time is unreliable then). Matches `CLASS="twitch-stitched-ad"` / `ID="stitched-ad-"` **and** the `X-TV-TWITCH-AD-*` attribute prefix (the durable signal streamlink/yt-dlp use) - Shared `VideoPlayerInterface` so WebView and native paths are interchangeable via settings toggle - `PlaybackAccessToken` model, `TwitchGqlApi` client ## Chat delay & send reliability - **Optimistic send-finalize**: Twitch acks a sent message with a per-PRIVMSG USERSTATE (not an echo), which it can intermittently drop — more so under a long chat delay. A missing ack no longer shows a false "message may not have been sent" error; the send is finalized optimistically (local echo rendered), and only genuine rejection NOTICEs surface an error. Ack timeout scaled by the chat delay. - **Per-line chat-delay bypass**: control/state lines (USERSTATE/ROOMSTATE/GLOBALUSERSTATE), rejection NOTICEs, the reconnect notice, and untagged server lines bypass the delay so send-acks and PONGs aren't stalled; only displayable chat content is delayed, staying in sync with delayed video. - **Measured chat bottom-bar height**: the message list reflows to the composer's real measured height, fixing the input overlapping messages when a long message expands it (replaces a fixed-constant estimate). - IRC tag parsing handles valueless and escaped tags per the IRCv3 message-tags spec (fixes a recent-messages RangeError on certain tags). ## Chat / multi-tab - Redesigned tab chips: unread dot indicator, chips dim until WebSocket connects - Animated tab options popover replacing `MenuAnchor` (no animation hook in Flutter 3.44) - Simplified `ChatTabs` from `StatefulWidget` to `StatelessWidget` - Focus-current-channel fade bump to 0.55; section-header alpha lifted to match the muted-label tier - `addTab` now calls `setActiveTab` to snapshot outgoing tab's `lastSeenMessageId` — fixes spurious unread dots after adding a tab - `onActivateSourceTab` threaded into `ChatUserModal` so Reply in merged mode switches to the correct source tab's composer ## Bug fixes and hardening - **Reverted the experimental iOS low-latency mode** (5s live-edge join + 1.05x catch-up): AVPlayer can't sustain <~18s on Twitch (declared `TARGETDURATION:6` paces playlist refreshes), and the offset starved the buffer into pause-on-launch. Default join distance restored. - Fork (Android): **cap `BEHIND_LIVE_WINDOW` recovery** so a stream repeatedly falling off the live window can't silently re-prepare forever; emits `error` on exhaustion so the host recovery ladder takes over - Guard all Android `setAutoPipMode` calls with `_autoPipAvailable` — prevents `PlatformException` on Android 8–11; check `_disposed` after `isAutoPipAvailable` await to prevent post-dispose auto-PiP re-enable - Remove `_isInPipMode` guard from `_onPaused` so `_paused` tracks actual state, fixing PiP play/pause toggle getting stuck - Tighten iOS cookie domain check to exact `twitch.tv` / `.twitch.tv` suffix - Invalidate the stored web session token when Twitch rejects it with a 401 (profile card flips back to unlinked; future loads skip the doomed authenticated request), and re-extract the cookie on launch when logged in without a linked session - Send `play_session_id` and `player_backend=mediaplayer` to Usher, matching the web client / streamlink - Fork (iOS): restore program-date-time latency measurement (a prior rev measured distance to the manifest edge, reading ~0s and silently disabling high-latency recovery / chat-delay auto-sync); release platform views on dispose (per-stream view + AVPlayerViewController leak), track the observed AVPlayerItem for KVO removal (sibling-view crash), main-thread seek results, resolve superseded load futures - Fork (Android): clean up method handlers orphaned by PiP-time view disposal (leaked audio-focus listeners), drop the live-offset re-anchoring seekTo on metadata updates (latency creep), restore pre-duck volume, respect user pause in the stall watchdog, resolve superseded load futures - Deep review pass: expire the quality-switch flag so stall recovery isn't disabled for the session, cap latency-driven recovery (clock-skew loop), generation-guard the error overlay, two-strike offline confirmation, controller null-safety on quality switch - Tighten `/me` local-echo match (no longer renders `/meow ...` as an action); clear pending send text on disconnect ## Web / docs - Remove stale Cloudflare Images binding from `wrangler.jsonc` (covered by `images.unoptimized: true`) - Correct `web/AGENTS.md` Cache Components claim (feature not enabled) - Repo and agent config cleanup ## Test plan - [x] `flutter analyze` — clean (frosty + plugin lib) - [x] `flutter test` — 319/319 pass (adds `ChatLatencySync`, `StreamInfoPoller`, video timing invariants, `PlaybackAccessToken`, IRC tag parsing) - [x] Android plugin Kotlin compiles against the bumped fork rev - [ ] Native player plays live streams on iOS and Android - [ ] Quality switching works and persists across channel reopens - [ ] PiP enters/exits correctly; pause/resume toggle in PiP window works - [ ] Audio-only mode does not crash on Android < API 31 - [ ] Sending under a long synced chat delay no longer shows a false "may not have been sent" error - [ ] Long composer text reflows the message list (no input/message overlap) - [ ] Multi-tab: adding a tab does not mark previous tab as unread - [ ] Merged chat: Reply from user modal targets the correct tab's composer 🤖 Generated with [Claude Code](https://claude.com/claude-code)
2026-06-13 17:06:24 -04:00
_channel = IOWebSocketChannel.connect(
v5 (#463) * migrate to dio * ignore folders * simplify twitch api headers handling * clean up main * simplify logs * optimize profile picture fetching fixes refetches on tab switch * update claude md * refactor irc.dart * update copilot instructions with essential commands and project structure details * implement message sending state management and UI updates * refactor notification handling and add copy-paste functionality in chat * refactor AlertMessage to support vertical layout and optional padding * refactor error messages for consistency and clarity across various components * refactor chat layout to use draggable divider and improve chat width settings * refactor Uptime widget to use SharedTimerService for synchronized updates * refactor search results components to handle null future states gracefully * refactor loading indicators to use skeleton loaders for improved user experience * refactor UI components for improved layout and responsiveness, enhance skeleton loaders, and streamline padding adjustments * refactor: replace manual blur effects with BlurredContainer for consistency and reusability * refactor: enhance JavaScript execution and error handling in WebView components * refactor: replace app bar with blurred container for improved UI consistency across screens * refactor: streamline video chat layout and enhance PiP drag gesture functionality * revert some app bar changes * refactor: implement Picture-in-Picture drag functionality in VideoChat * refactor: pass currentChannelId to IRCMessage and ChatMessage for improved context * fix large thubmnail width * chore: update Gradle and Kotlin plugin versions for improved compatibility * changes from v4.10.0 branch * feat: integrate AnimatedScrollBorder for improved UI responsiveness across various screens * refactor: update SectionHeader styling and improve theme management * feat: add pinned section to StreamsList and enhance skeleton loader padding * feat: add repository guidelines for project structure, coding style, testing, and security * feat: enhance StreamCard UI with BlurredContainer and adjust border width in theme * feat: implement unfocusInput and safeRequestFocus methods to manage text field focus behavior * feat: enhance Picture-in-Picture drag interactions with haptic feedback and smooth animations * refactor: improve code formatting and readability across multiple files * feat: implement picture-in-picture mode toggle and state management for video playback * feat: reset PiP mode state when pausing video playback * feat: add custom app bar with profile picture and stream info for video chat * feat: convert multiple settings screens to use StatefulWidget and add animated scroll borders * feat: update blur configuration for adaptive alpha based on theme * fix: adjust default font size in SectionHeader widget * feat: enhance PiP mode with drag overlay instruction and UI improvements * fix: improve badge rendering with consistent margin and border for current channel * refactor: replace BackdropFilter with BlurredContainer for improved clarity and maintainability * fix: reduce background transparency in Uptime widget for better visibility * feat: enhance photo view dialog with full resolution toggle and blurred background * fix: reset chat delay to 0 when auto sync is enabled and update settings title for clarity * fix: adjust border width in theme to improve consistency * feat: add forceDarkMode option to BlurredContainer for improved theme adaptability * feat: implement offline followed channels feature with UI integration and settings option * fix: increase font size and weight for offline status text for better readability * feat: remove offline pinned channels feature and update related UI components * feat: optimize offline channels loading behavior based on expansion state * fix: improve clarity and consistency in repository guidelines formatting * feat: update full resolution URL handling and button visibility logic * feat: replace app bar with blurred version in chat-only mode and add animated scroll border * feat: refactor video chat layout for improved chat and video display in landscape mode * feat: remove bottom bar visibility setting and adjust chat layout accordingly * fix: simplify condition for displaying offline channels section in following tab * feat: enhance reply thread display with indentation and reply icon * feat: implement showModalBottomSheetWithProperFocus for improved focus handling * feat: add gradient direction support to BlurredContainer for enhanced visual effects * feat: enhance NavigationBar and Theme settings for improved visual consistency * feat: add gradient direction support to BlurredContainer in VideoChat for enhanced visual effects * chore: update .gitignore to include .cursor file for better environment management * fix: update PiP drag gesture conditions to include video paused state for better user experience * refactor: replace ScrollController with SettingsPageLayout in settings screens for improved layout management * refactor: centralize orientation handling by introducing OrientationUtils for improved readability and maintainability * refactor: replace OrientationUtils with ContextExtensions for streamlined context-based access to theme, layout, and API dependencies * refactor: improve video chat UI by adjusting title layout and adding stream info tooltips for better user experience * refactor: adjust titleSpacing in theme and navigation components for improved layout consistency * refactor: update stream info timer handling and overlay management for improved UI responsiveness * refactor: enhance stream info timer logic and overlay visibility management for chat-only mode * refactor: enhance input decoration theme in FrostyThemes for improved visual consistency and responsiveness * refactor: adjust inputDecorationTheme padding in FrostyThemes for improved visual consistency * refactor: enhance video overlay management by including video preview overlay in hideElements for improved UI consistency * refactor: improve chat bottom bar padding and video chat layout for enhanced UI consistency * refactor: adjust chat padding to account for device bottom insets for improved layout consistency * refactor: update text styles in FrostyThemes for improved visual consistency across UI components * refactor: update iOS minimum deployment target to 13.0 for improved compatibility * refactor: adjust chat bottom padding based on emote menu visibility for improved layout consistency * refactor: adjust padding values in StreamsList for improved layout consistency * refactor: replace Padding with AnimatedPadding in Chat for smoother layout transitions refactor: replace Container with AnimatedContainer in BlurredContainer for smoother animations * refactor: remove unnecessary radius property from ProfilePicture in OfflineChannelCard for cleaner code * refactor: enhance chat bottom bar suffix icon to display message delay with tooltip for improved user experience * refactor: update hint text and tooltips in chat bottom bar and search for improved clarity * refactor: simplify notification display logic and enhance chat input behavior for improved user experience * refactor: enhance layout consistency by adjusting spacing in various components across the channel and home screens * refactor: introduce LiveIndicator widget and adjust spacing in channel and video components for improved layout consistency * refactor: remove monospace font family from chat bottom bar for improved text rendering * refactor: reduce notification animation duration and change dismiss direction for improved user experience * refactor: replace VideoBar with StreamInfoBar in video components for improved layout and consistency * refactor: adjust font sizes and spacing in StreamInfoBar for improved layout consistency * refactor: standardize font sizes and update gradient stops in video components for improved visual consistency * refactor: update tooltip padding and background color in theme for improved visual consistency * refactor: enhance tooltip behavior and standardize font sizes in StreamInfoBar and related components for improved visual consistency * refactor: add showThumbnail option to LargeStreamCardSkeletonLoader for improved layout flexibility * refactor: add StreamInfoBarSkeletonLoader for improved layout consistency in stream components * refactor: add shadow effects to icons and text in StreamInfoBar and VideoOverlay for improved visual depth * refactor: update defaultOverlayOpacity to 0.0 for improved overlay behavior * fix: correct stream info text color on overlay * refactor: implement a new color picker dialog with random color generation for enhanced user experience * refactor: adjust gradient colors and stops in VideoOverlay for improved visual consistency * refactor: refine gradient colors and stops in VideoOverlay for enhanced visual clarity * refactor: add isCompact parameter to StreamInfoBar for responsive text sizing * fix: update tooltip background color to use surface color for better contrast * feat: add shared chat mode support in chat store and update StreamInfoBar for visual indication * refactor: disable debug print for IRC messages to reduce log clutter * feat: implement chat color selection feature with user color management in chat settings * refactor: replace color adjustment logic with new contrast-aware utility for chat names * refactor: simplify chat details UI by replacing list tiles with action cards and removing unused clear dialog * refactor: enhance chat details UI by improving time formatting and adding label styling to action cards * refactor: update chat color terminology to 'Username color' for clarity in UI * refactor: enhance chat details UI by introducing active chat modes display and improving layout structure * refactor: improve chat details layout by replacing ListTile with Padding and adding a Divider for better visual separation * refactor: remove chat notifications positioning setting and adjust notification alignment in video chat * refactor: streamline StreamInfoBar component by consolidating offline handling and improving layout for better readability * refactor: enhance StreamInfoBar by adding tooltip for streamer name and improving text overflow handling * refactor: adjust tooltip display duration in StreamInfoBar and update theme configuration * refactor: adjust margin and padding in StreamCard for improved layout consistency * chore: update dependencies in pubspec.yaml and pubspec.lock for Firebase and other packages * template * chore: update iOS platform version to 15.0 and Firebase dependencies to 12.2.0 * refactor: simplify StreamInfoBar layout by reducing nested widgets and improving text color handling * format * feat: enhance Channel model and StreamInfoBar to support offline channel details * feat: add offline indicator and improve StreamInfoBar layout for better offline channel display * fix: adjust icon color opacity in StreamInfoBar for improved visibility * feat: enhance dismissal animation in FrostyPhotoViewDialog to track swipe direction * docs: update copilot instructions for clarity and additional error handling details * refactor: optimize latency tooltip layout and improve offline indicator styling in VideoOverlay * feat: implement shared chat asset fetching and participant management in ChatAssetsStore * refactor: replace Observer with Builder for improved widget rebuilding in VideoOverlay * refactor: update StreamInfoBar border styling and adjust layout in VideoOverlay for improved visual consistency * feat: add showTextShadows property to StreamInfoBar for customizable text shadow display * refactor: adjust layout in VideoOverlay by adding padding to improve spacing and visual consistency * refactor: enhance VideoOverlay gradients and layout for improved visual hierarchy and user experience * refactor: reduce vertical padding in VideoOverlay for improved layout consistency * refactor: remove overlay opacity settings from VideoSettings and SettingsStore for simplification * refactor: improve text overlay transition in VideoChat for better user experience * Revert "refactor: improve text overlay transition in VideoChat for better user experience" This reverts commit fd16ff5ec30ec266157e5c8a9d4a6090c91717f6. * refactor: wrap videoOverlay in ColoredBox for improved layout handling * refactor: optimize animation duration and transition curves in VideoChat for smoother interactions * refactor: dispose searchScrollController in HomeStoreBase to prevent memory leaks * refactor: simplify gradient definitions in VideoOverlay for improved readability and maintainability * refactor: remove 'Offline' text overlay from VideoOverlay for cleaner UI * refactor: add refresh functionality for assets in ChatDetails with loading indicators * refactor: update visibility conditions for uptime, viewer count, and category display in StreamInfoBar * refactor: replace AlertDialog with FrostyDialog for consistent dialog styling across the application * refactor: enhance layout handling in FrostyPageView to prevent overflow during height transitions * refactor: replace ColorPickerDialog with AccentColorPickerDialog for improved color selection experience * refactor: replace theme and accent color settings with dedicated components for improved modularity and readability * refactor: replace ElevatedButton with TextButton for consistent button styling across dialogs * refactor: integrate MobX Observer for reactive state management in settings widgets * refactor: update theme and dialog components for improved styling and consistency * refactor: enhance dialog styling with rounded corners and border in theme configuration * refactor: improve dialog messages for unauthorized access handling * refactor: update bodyLarge text style in theme configuration to include font weight * refactor: standardize Divider usage and adjust theme styles for improved consistency * refactor: adjust Divider properties and theme styles for enhanced visual consistency * chore: remove GEMINI.md file as it is no longer needed for project documentation * refactor: enhance token validation and reconnect logic in AuthBase for improved error handling * format * refactor: integrate landscape cutout settings into VideoChat layout for improved responsiveness * refactor: implement app lifecycle handling in VideoChat and enhance stream info update logic in VideoStore * refactor: update landscape cutout conditionals in VideoChat layout for improved responsiveness * update AGENTS.md * add scrollbar to search * fix scrolling exception * update CLAUDE.md * 5 auth reconnect attemps then log out * increase reply max lines to 2 * simplify and improve reply formatting * add prime icon * better draggable divider * support draggable divider in fullscreen overlay chat * add text shadow in fullscreen chat overlay mode * format * add landscape checks * video store optimization attempts * Dispose WebViewController and remove JavaScript channels properly * Track and cleanup all MutationObservers to prevent accumulation * Throttle latency updates to once per 5 seconds (reduces CPU load) * Add timeout protection and null checks for robustness * Prevent duplicate event listeners on page reloads * double tap divider to reset * Revert "video store optimization attempts" This reverts commit b1df7b0de473543283211a489dca698d9d241857. * optimize video store attempt 2 * Revert "double tap divider to reset" This reverts commit aeb26a433500ec71f822794835e927018ee59e1e. * optimize latency listener to open the menu and check every 20 secconds * more optimizations * hard refresh * abbreviate latency * fix lint * improve hide default overlay * fix chat no longer reconnecting with chat delay * refine chat alerts * fix historical message missing badges and emotes on initial connection * parallelize * revert * add reconnect button inline action * refactor: replace Scrollbar with FrostyScrollbar across chat and settings screens for consistent styling * tweak chat details menu * add scrollbar to release notes, renames for consistency * fix duplicate message case * fix chat delay alerts in auto sync mode * add regex for numeric strings and enhance display name formatting logic * exterminate borders * refactor: simplify active chat modes display in chat details screen * feat: enhance chat input button with delay notification and disable state * fix: wrap chat in SafeArea to prevent UI overflow issues * refactor: remove divider line from video chat and update draggable divider visibility logic * persist overlay in pip mode * fix: update chat delay handling and notifications in chat bottom bar * fix: update chat overlay visibility logic to respect fullscreen settings * tap to show deleted message * fix: prevent accidental chat scrolling when accessing system UI in landscape mode * show latency in portrait * fix: enhance chat delay notifications with dynamic delay time * docs: update CLAUDE.md for improved environment variable instructions and architecture overview * fix: improve chat delay countdown management and message handling * add preliminary release notes * remove agents.md * update lockfile * add initial multi chat feature * add option to persist multi chat tabs * add remove confirmation dialog * improve add chat design * lazy-load tabs * create global assets store to dedupe global asset fetching * improve tab design/styles * update notes * use frosty dialog * update claude md * tweak * add ability to reorder tabs * resolve conflict * merge cleanup * format * update release notes * add chat delay sync completion tracking to prevent countdown re-appearance * add tests * fix * update release notes * bump
2026-01-01 22:28:17 -05:00
Uri.parse('wss://irc-ws.chat.twitch.tv:443'),
feat(video,chat): native player, ad-break awareness, chat send/delay reliability, and tab redesign (#567) Squash-merge commit. Covers four areas: native video player, chat reliability, multi-tab, and hardening. ## Native video player - Direct HLS playback via `better_native_video_player` (forked from `plug-and-pay/flutter-native-video-player`, patched on `frosty-patches` branch) - Twitch GQL playback token fetching with platform cookie extraction (iOS Swift + Android Kotlin plugins) for authenticated streams - Quality selection (source, 720p, 480p, 360p, 160p, audio-only) persisted per channel - Picture-in-picture: iOS automatic inline PiP, Android auto-PiP on API 31+ guarded against older devices - Latency polling, chat latency sync, stall detection/recovery, startup auto-pause recovery, watchdog timers - **Twitch stitched-ad break detection** (HLS `EXT-X-DATERANGE`) on both platforms, emitting `adBreakChanged` so the host suspends latency/stall recovery and chat sync during ads (program-date-time is unreliable then). Matches `CLASS="twitch-stitched-ad"` / `ID="stitched-ad-"` **and** the `X-TV-TWITCH-AD-*` attribute prefix (the durable signal streamlink/yt-dlp use) - Shared `VideoPlayerInterface` so WebView and native paths are interchangeable via settings toggle - `PlaybackAccessToken` model, `TwitchGqlApi` client ## Chat delay & send reliability - **Optimistic send-finalize**: Twitch acks a sent message with a per-PRIVMSG USERSTATE (not an echo), which it can intermittently drop — more so under a long chat delay. A missing ack no longer shows a false "message may not have been sent" error; the send is finalized optimistically (local echo rendered), and only genuine rejection NOTICEs surface an error. Ack timeout scaled by the chat delay. - **Per-line chat-delay bypass**: control/state lines (USERSTATE/ROOMSTATE/GLOBALUSERSTATE), rejection NOTICEs, the reconnect notice, and untagged server lines bypass the delay so send-acks and PONGs aren't stalled; only displayable chat content is delayed, staying in sync with delayed video. - **Measured chat bottom-bar height**: the message list reflows to the composer's real measured height, fixing the input overlapping messages when a long message expands it (replaces a fixed-constant estimate). - IRC tag parsing handles valueless and escaped tags per the IRCv3 message-tags spec (fixes a recent-messages RangeError on certain tags). ## Chat / multi-tab - Redesigned tab chips: unread dot indicator, chips dim until WebSocket connects - Animated tab options popover replacing `MenuAnchor` (no animation hook in Flutter 3.44) - Simplified `ChatTabs` from `StatefulWidget` to `StatelessWidget` - Focus-current-channel fade bump to 0.55; section-header alpha lifted to match the muted-label tier - `addTab` now calls `setActiveTab` to snapshot outgoing tab's `lastSeenMessageId` — fixes spurious unread dots after adding a tab - `onActivateSourceTab` threaded into `ChatUserModal` so Reply in merged mode switches to the correct source tab's composer ## Bug fixes and hardening - **Reverted the experimental iOS low-latency mode** (5s live-edge join + 1.05x catch-up): AVPlayer can't sustain <~18s on Twitch (declared `TARGETDURATION:6` paces playlist refreshes), and the offset starved the buffer into pause-on-launch. Default join distance restored. - Fork (Android): **cap `BEHIND_LIVE_WINDOW` recovery** so a stream repeatedly falling off the live window can't silently re-prepare forever; emits `error` on exhaustion so the host recovery ladder takes over - Guard all Android `setAutoPipMode` calls with `_autoPipAvailable` — prevents `PlatformException` on Android 8–11; check `_disposed` after `isAutoPipAvailable` await to prevent post-dispose auto-PiP re-enable - Remove `_isInPipMode` guard from `_onPaused` so `_paused` tracks actual state, fixing PiP play/pause toggle getting stuck - Tighten iOS cookie domain check to exact `twitch.tv` / `.twitch.tv` suffix - Invalidate the stored web session token when Twitch rejects it with a 401 (profile card flips back to unlinked; future loads skip the doomed authenticated request), and re-extract the cookie on launch when logged in without a linked session - Send `play_session_id` and `player_backend=mediaplayer` to Usher, matching the web client / streamlink - Fork (iOS): restore program-date-time latency measurement (a prior rev measured distance to the manifest edge, reading ~0s and silently disabling high-latency recovery / chat-delay auto-sync); release platform views on dispose (per-stream view + AVPlayerViewController leak), track the observed AVPlayerItem for KVO removal (sibling-view crash), main-thread seek results, resolve superseded load futures - Fork (Android): clean up method handlers orphaned by PiP-time view disposal (leaked audio-focus listeners), drop the live-offset re-anchoring seekTo on metadata updates (latency creep), restore pre-duck volume, respect user pause in the stall watchdog, resolve superseded load futures - Deep review pass: expire the quality-switch flag so stall recovery isn't disabled for the session, cap latency-driven recovery (clock-skew loop), generation-guard the error overlay, two-strike offline confirmation, controller null-safety on quality switch - Tighten `/me` local-echo match (no longer renders `/meow ...` as an action); clear pending send text on disconnect ## Web / docs - Remove stale Cloudflare Images binding from `wrangler.jsonc` (covered by `images.unoptimized: true`) - Correct `web/AGENTS.md` Cache Components claim (feature not enabled) - Repo and agent config cleanup ## Test plan - [x] `flutter analyze` — clean (frosty + plugin lib) - [x] `flutter test` — 319/319 pass (adds `ChatLatencySync`, `StreamInfoPoller`, video timing invariants, `PlaybackAccessToken`, IRC tag parsing) - [x] Android plugin Kotlin compiles against the bumped fork rev - [ ] Native player plays live streams on iOS and Android - [ ] Quality switching works and persists across channel reopens - [ ] PiP enters/exits correctly; pause/resume toggle in PiP window works - [ ] Audio-only mode does not crash on Android < API 31 - [ ] Sending under a long synced chat delay no longer shows a false "may not have been sent" error - [ ] Long composer text reflows the message list (no input/message overlap) - [ ] Multi-tab: adding a tab does not mark previous tab as unread - [ ] Merged chat: Reply from user modal targets the correct tab's composer 🤖 Generated with [Claude Code](https://claude.com/claude-code)
2026-06-13 17:06:24 -04:00
pingInterval: _pingInterval,
v5 (#463) * migrate to dio * ignore folders * simplify twitch api headers handling * clean up main * simplify logs * optimize profile picture fetching fixes refetches on tab switch * update claude md * refactor irc.dart * update copilot instructions with essential commands and project structure details * implement message sending state management and UI updates * refactor notification handling and add copy-paste functionality in chat * refactor AlertMessage to support vertical layout and optional padding * refactor error messages for consistency and clarity across various components * refactor chat layout to use draggable divider and improve chat width settings * refactor Uptime widget to use SharedTimerService for synchronized updates * refactor search results components to handle null future states gracefully * refactor loading indicators to use skeleton loaders for improved user experience * refactor UI components for improved layout and responsiveness, enhance skeleton loaders, and streamline padding adjustments * refactor: replace manual blur effects with BlurredContainer for consistency and reusability * refactor: enhance JavaScript execution and error handling in WebView components * refactor: replace app bar with blurred container for improved UI consistency across screens * refactor: streamline video chat layout and enhance PiP drag gesture functionality * revert some app bar changes * refactor: implement Picture-in-Picture drag functionality in VideoChat * refactor: pass currentChannelId to IRCMessage and ChatMessage for improved context * fix large thubmnail width * chore: update Gradle and Kotlin plugin versions for improved compatibility * changes from v4.10.0 branch * feat: integrate AnimatedScrollBorder for improved UI responsiveness across various screens * refactor: update SectionHeader styling and improve theme management * feat: add pinned section to StreamsList and enhance skeleton loader padding * feat: add repository guidelines for project structure, coding style, testing, and security * feat: enhance StreamCard UI with BlurredContainer and adjust border width in theme * feat: implement unfocusInput and safeRequestFocus methods to manage text field focus behavior * feat: enhance Picture-in-Picture drag interactions with haptic feedback and smooth animations * refactor: improve code formatting and readability across multiple files * feat: implement picture-in-picture mode toggle and state management for video playback * feat: reset PiP mode state when pausing video playback * feat: add custom app bar with profile picture and stream info for video chat * feat: convert multiple settings screens to use StatefulWidget and add animated scroll borders * feat: update blur configuration for adaptive alpha based on theme * fix: adjust default font size in SectionHeader widget * feat: enhance PiP mode with drag overlay instruction and UI improvements * fix: improve badge rendering with consistent margin and border for current channel * refactor: replace BackdropFilter with BlurredContainer for improved clarity and maintainability * fix: reduce background transparency in Uptime widget for better visibility * feat: enhance photo view dialog with full resolution toggle and blurred background * fix: reset chat delay to 0 when auto sync is enabled and update settings title for clarity * fix: adjust border width in theme to improve consistency * feat: add forceDarkMode option to BlurredContainer for improved theme adaptability * feat: implement offline followed channels feature with UI integration and settings option * fix: increase font size and weight for offline status text for better readability * feat: remove offline pinned channels feature and update related UI components * feat: optimize offline channels loading behavior based on expansion state * fix: improve clarity and consistency in repository guidelines formatting * feat: update full resolution URL handling and button visibility logic * feat: replace app bar with blurred version in chat-only mode and add animated scroll border * feat: refactor video chat layout for improved chat and video display in landscape mode * feat: remove bottom bar visibility setting and adjust chat layout accordingly * fix: simplify condition for displaying offline channels section in following tab * feat: enhance reply thread display with indentation and reply icon * feat: implement showModalBottomSheetWithProperFocus for improved focus handling * feat: add gradient direction support to BlurredContainer for enhanced visual effects * feat: enhance NavigationBar and Theme settings for improved visual consistency * feat: add gradient direction support to BlurredContainer in VideoChat for enhanced visual effects * chore: update .gitignore to include .cursor file for better environment management * fix: update PiP drag gesture conditions to include video paused state for better user experience * refactor: replace ScrollController with SettingsPageLayout in settings screens for improved layout management * refactor: centralize orientation handling by introducing OrientationUtils for improved readability and maintainability * refactor: replace OrientationUtils with ContextExtensions for streamlined context-based access to theme, layout, and API dependencies * refactor: improve video chat UI by adjusting title layout and adding stream info tooltips for better user experience * refactor: adjust titleSpacing in theme and navigation components for improved layout consistency * refactor: update stream info timer handling and overlay management for improved UI responsiveness * refactor: enhance stream info timer logic and overlay visibility management for chat-only mode * refactor: enhance input decoration theme in FrostyThemes for improved visual consistency and responsiveness * refactor: adjust inputDecorationTheme padding in FrostyThemes for improved visual consistency * refactor: enhance video overlay management by including video preview overlay in hideElements for improved UI consistency * refactor: improve chat bottom bar padding and video chat layout for enhanced UI consistency * refactor: adjust chat padding to account for device bottom insets for improved layout consistency * refactor: update text styles in FrostyThemes for improved visual consistency across UI components * refactor: update iOS minimum deployment target to 13.0 for improved compatibility * refactor: adjust chat bottom padding based on emote menu visibility for improved layout consistency * refactor: adjust padding values in StreamsList for improved layout consistency * refactor: replace Padding with AnimatedPadding in Chat for smoother layout transitions refactor: replace Container with AnimatedContainer in BlurredContainer for smoother animations * refactor: remove unnecessary radius property from ProfilePicture in OfflineChannelCard for cleaner code * refactor: enhance chat bottom bar suffix icon to display message delay with tooltip for improved user experience * refactor: update hint text and tooltips in chat bottom bar and search for improved clarity * refactor: simplify notification display logic and enhance chat input behavior for improved user experience * refactor: enhance layout consistency by adjusting spacing in various components across the channel and home screens * refactor: introduce LiveIndicator widget and adjust spacing in channel and video components for improved layout consistency * refactor: remove monospace font family from chat bottom bar for improved text rendering * refactor: reduce notification animation duration and change dismiss direction for improved user experience * refactor: replace VideoBar with StreamInfoBar in video components for improved layout and consistency * refactor: adjust font sizes and spacing in StreamInfoBar for improved layout consistency * refactor: standardize font sizes and update gradient stops in video components for improved visual consistency * refactor: update tooltip padding and background color in theme for improved visual consistency * refactor: enhance tooltip behavior and standardize font sizes in StreamInfoBar and related components for improved visual consistency * refactor: add showThumbnail option to LargeStreamCardSkeletonLoader for improved layout flexibility * refactor: add StreamInfoBarSkeletonLoader for improved layout consistency in stream components * refactor: add shadow effects to icons and text in StreamInfoBar and VideoOverlay for improved visual depth * refactor: update defaultOverlayOpacity to 0.0 for improved overlay behavior * fix: correct stream info text color on overlay * refactor: implement a new color picker dialog with random color generation for enhanced user experience * refactor: adjust gradient colors and stops in VideoOverlay for improved visual consistency * refactor: refine gradient colors and stops in VideoOverlay for enhanced visual clarity * refactor: add isCompact parameter to StreamInfoBar for responsive text sizing * fix: update tooltip background color to use surface color for better contrast * feat: add shared chat mode support in chat store and update StreamInfoBar for visual indication * refactor: disable debug print for IRC messages to reduce log clutter * feat: implement chat color selection feature with user color management in chat settings * refactor: replace color adjustment logic with new contrast-aware utility for chat names * refactor: simplify chat details UI by replacing list tiles with action cards and removing unused clear dialog * refactor: enhance chat details UI by improving time formatting and adding label styling to action cards * refactor: update chat color terminology to 'Username color' for clarity in UI * refactor: enhance chat details UI by introducing active chat modes display and improving layout structure * refactor: improve chat details layout by replacing ListTile with Padding and adding a Divider for better visual separation * refactor: remove chat notifications positioning setting and adjust notification alignment in video chat * refactor: streamline StreamInfoBar component by consolidating offline handling and improving layout for better readability * refactor: enhance StreamInfoBar by adding tooltip for streamer name and improving text overflow handling * refactor: adjust tooltip display duration in StreamInfoBar and update theme configuration * refactor: adjust margin and padding in StreamCard for improved layout consistency * chore: update dependencies in pubspec.yaml and pubspec.lock for Firebase and other packages * template * chore: update iOS platform version to 15.0 and Firebase dependencies to 12.2.0 * refactor: simplify StreamInfoBar layout by reducing nested widgets and improving text color handling * format * feat: enhance Channel model and StreamInfoBar to support offline channel details * feat: add offline indicator and improve StreamInfoBar layout for better offline channel display * fix: adjust icon color opacity in StreamInfoBar for improved visibility * feat: enhance dismissal animation in FrostyPhotoViewDialog to track swipe direction * docs: update copilot instructions for clarity and additional error handling details * refactor: optimize latency tooltip layout and improve offline indicator styling in VideoOverlay * feat: implement shared chat asset fetching and participant management in ChatAssetsStore * refactor: replace Observer with Builder for improved widget rebuilding in VideoOverlay * refactor: update StreamInfoBar border styling and adjust layout in VideoOverlay for improved visual consistency * feat: add showTextShadows property to StreamInfoBar for customizable text shadow display * refactor: adjust layout in VideoOverlay by adding padding to improve spacing and visual consistency * refactor: enhance VideoOverlay gradients and layout for improved visual hierarchy and user experience * refactor: reduce vertical padding in VideoOverlay for improved layout consistency * refactor: remove overlay opacity settings from VideoSettings and SettingsStore for simplification * refactor: improve text overlay transition in VideoChat for better user experience * Revert "refactor: improve text overlay transition in VideoChat for better user experience" This reverts commit fd16ff5ec30ec266157e5c8a9d4a6090c91717f6. * refactor: wrap videoOverlay in ColoredBox for improved layout handling * refactor: optimize animation duration and transition curves in VideoChat for smoother interactions * refactor: dispose searchScrollController in HomeStoreBase to prevent memory leaks * refactor: simplify gradient definitions in VideoOverlay for improved readability and maintainability * refactor: remove 'Offline' text overlay from VideoOverlay for cleaner UI * refactor: add refresh functionality for assets in ChatDetails with loading indicators * refactor: update visibility conditions for uptime, viewer count, and category display in StreamInfoBar * refactor: replace AlertDialog with FrostyDialog for consistent dialog styling across the application * refactor: enhance layout handling in FrostyPageView to prevent overflow during height transitions * refactor: replace ColorPickerDialog with AccentColorPickerDialog for improved color selection experience * refactor: replace theme and accent color settings with dedicated components for improved modularity and readability * refactor: replace ElevatedButton with TextButton for consistent button styling across dialogs * refactor: integrate MobX Observer for reactive state management in settings widgets * refactor: update theme and dialog components for improved styling and consistency * refactor: enhance dialog styling with rounded corners and border in theme configuration * refactor: improve dialog messages for unauthorized access handling * refactor: update bodyLarge text style in theme configuration to include font weight * refactor: standardize Divider usage and adjust theme styles for improved consistency * refactor: adjust Divider properties and theme styles for enhanced visual consistency * chore: remove GEMINI.md file as it is no longer needed for project documentation * refactor: enhance token validation and reconnect logic in AuthBase for improved error handling * format * refactor: integrate landscape cutout settings into VideoChat layout for improved responsiveness * refactor: implement app lifecycle handling in VideoChat and enhance stream info update logic in VideoStore * refactor: update landscape cutout conditionals in VideoChat layout for improved responsiveness * update AGENTS.md * add scrollbar to search * fix scrolling exception * update CLAUDE.md * 5 auth reconnect attemps then log out * increase reply max lines to 2 * simplify and improve reply formatting * add prime icon * better draggable divider * support draggable divider in fullscreen overlay chat * add text shadow in fullscreen chat overlay mode * format * add landscape checks * video store optimization attempts * Dispose WebViewController and remove JavaScript channels properly * Track and cleanup all MutationObservers to prevent accumulation * Throttle latency updates to once per 5 seconds (reduces CPU load) * Add timeout protection and null checks for robustness * Prevent duplicate event listeners on page reloads * double tap divider to reset * Revert "video store optimization attempts" This reverts commit b1df7b0de473543283211a489dca698d9d241857. * optimize video store attempt 2 * Revert "double tap divider to reset" This reverts commit aeb26a433500ec71f822794835e927018ee59e1e. * optimize latency listener to open the menu and check every 20 secconds * more optimizations * hard refresh * abbreviate latency * fix lint * improve hide default overlay * fix chat no longer reconnecting with chat delay * refine chat alerts * fix historical message missing badges and emotes on initial connection * parallelize * revert * add reconnect button inline action * refactor: replace Scrollbar with FrostyScrollbar across chat and settings screens for consistent styling * tweak chat details menu * add scrollbar to release notes, renames for consistency * fix duplicate message case * fix chat delay alerts in auto sync mode * add regex for numeric strings and enhance display name formatting logic * exterminate borders * refactor: simplify active chat modes display in chat details screen * feat: enhance chat input button with delay notification and disable state * fix: wrap chat in SafeArea to prevent UI overflow issues * refactor: remove divider line from video chat and update draggable divider visibility logic * persist overlay in pip mode * fix: update chat delay handling and notifications in chat bottom bar * fix: update chat overlay visibility logic to respect fullscreen settings * tap to show deleted message * fix: prevent accidental chat scrolling when accessing system UI in landscape mode * show latency in portrait * fix: enhance chat delay notifications with dynamic delay time * docs: update CLAUDE.md for improved environment variable instructions and architecture overview * fix: improve chat delay countdown management and message handling * add preliminary release notes * remove agents.md * update lockfile * add initial multi chat feature * add option to persist multi chat tabs * add remove confirmation dialog * improve add chat design * lazy-load tabs * create global assets store to dedupe global asset fetching * improve tab design/styles * update notes * use frosty dialog * update claude md * tweak * add ability to reorder tabs * resolve conflict * merge cleanup * format * update release notes * add chat delay sync completion tracking to prevent countdown re-appearance * add tests * fix * update release notes * bump
2026-01-01 22:28:17 -05:00
);
// Only show chat delay countdown on initial connection or video toggle, not on reconnects
if (!isReconnect && _hasActiveChatDelay) {
v5 (#463) * migrate to dio * ignore folders * simplify twitch api headers handling * clean up main * simplify logs * optimize profile picture fetching fixes refetches on tab switch * update claude md * refactor irc.dart * update copilot instructions with essential commands and project structure details * implement message sending state management and UI updates * refactor notification handling and add copy-paste functionality in chat * refactor AlertMessage to support vertical layout and optional padding * refactor error messages for consistency and clarity across various components * refactor chat layout to use draggable divider and improve chat width settings * refactor Uptime widget to use SharedTimerService for synchronized updates * refactor search results components to handle null future states gracefully * refactor loading indicators to use skeleton loaders for improved user experience * refactor UI components for improved layout and responsiveness, enhance skeleton loaders, and streamline padding adjustments * refactor: replace manual blur effects with BlurredContainer for consistency and reusability * refactor: enhance JavaScript execution and error handling in WebView components * refactor: replace app bar with blurred container for improved UI consistency across screens * refactor: streamline video chat layout and enhance PiP drag gesture functionality * revert some app bar changes * refactor: implement Picture-in-Picture drag functionality in VideoChat * refactor: pass currentChannelId to IRCMessage and ChatMessage for improved context * fix large thubmnail width * chore: update Gradle and Kotlin plugin versions for improved compatibility * changes from v4.10.0 branch * feat: integrate AnimatedScrollBorder for improved UI responsiveness across various screens * refactor: update SectionHeader styling and improve theme management * feat: add pinned section to StreamsList and enhance skeleton loader padding * feat: add repository guidelines for project structure, coding style, testing, and security * feat: enhance StreamCard UI with BlurredContainer and adjust border width in theme * feat: implement unfocusInput and safeRequestFocus methods to manage text field focus behavior * feat: enhance Picture-in-Picture drag interactions with haptic feedback and smooth animations * refactor: improve code formatting and readability across multiple files * feat: implement picture-in-picture mode toggle and state management for video playback * feat: reset PiP mode state when pausing video playback * feat: add custom app bar with profile picture and stream info for video chat * feat: convert multiple settings screens to use StatefulWidget and add animated scroll borders * feat: update blur configuration for adaptive alpha based on theme * fix: adjust default font size in SectionHeader widget * feat: enhance PiP mode with drag overlay instruction and UI improvements * fix: improve badge rendering with consistent margin and border for current channel * refactor: replace BackdropFilter with BlurredContainer for improved clarity and maintainability * fix: reduce background transparency in Uptime widget for better visibility * feat: enhance photo view dialog with full resolution toggle and blurred background * fix: reset chat delay to 0 when auto sync is enabled and update settings title for clarity * fix: adjust border width in theme to improve consistency * feat: add forceDarkMode option to BlurredContainer for improved theme adaptability * feat: implement offline followed channels feature with UI integration and settings option * fix: increase font size and weight for offline status text for better readability * feat: remove offline pinned channels feature and update related UI components * feat: optimize offline channels loading behavior based on expansion state * fix: improve clarity and consistency in repository guidelines formatting * feat: update full resolution URL handling and button visibility logic * feat: replace app bar with blurred version in chat-only mode and add animated scroll border * feat: refactor video chat layout for improved chat and video display in landscape mode * feat: remove bottom bar visibility setting and adjust chat layout accordingly * fix: simplify condition for displaying offline channels section in following tab * feat: enhance reply thread display with indentation and reply icon * feat: implement showModalBottomSheetWithProperFocus for improved focus handling * feat: add gradient direction support to BlurredContainer for enhanced visual effects * feat: enhance NavigationBar and Theme settings for improved visual consistency * feat: add gradient direction support to BlurredContainer in VideoChat for enhanced visual effects * chore: update .gitignore to include .cursor file for better environment management * fix: update PiP drag gesture conditions to include video paused state for better user experience * refactor: replace ScrollController with SettingsPageLayout in settings screens for improved layout management * refactor: centralize orientation handling by introducing OrientationUtils for improved readability and maintainability * refactor: replace OrientationUtils with ContextExtensions for streamlined context-based access to theme, layout, and API dependencies * refactor: improve video chat UI by adjusting title layout and adding stream info tooltips for better user experience * refactor: adjust titleSpacing in theme and navigation components for improved layout consistency * refactor: update stream info timer handling and overlay management for improved UI responsiveness * refactor: enhance stream info timer logic and overlay visibility management for chat-only mode * refactor: enhance input decoration theme in FrostyThemes for improved visual consistency and responsiveness * refactor: adjust inputDecorationTheme padding in FrostyThemes for improved visual consistency * refactor: enhance video overlay management by including video preview overlay in hideElements for improved UI consistency * refactor: improve chat bottom bar padding and video chat layout for enhanced UI consistency * refactor: adjust chat padding to account for device bottom insets for improved layout consistency * refactor: update text styles in FrostyThemes for improved visual consistency across UI components * refactor: update iOS minimum deployment target to 13.0 for improved compatibility * refactor: adjust chat bottom padding based on emote menu visibility for improved layout consistency * refactor: adjust padding values in StreamsList for improved layout consistency * refactor: replace Padding with AnimatedPadding in Chat for smoother layout transitions refactor: replace Container with AnimatedContainer in BlurredContainer for smoother animations * refactor: remove unnecessary radius property from ProfilePicture in OfflineChannelCard for cleaner code * refactor: enhance chat bottom bar suffix icon to display message delay with tooltip for improved user experience * refactor: update hint text and tooltips in chat bottom bar and search for improved clarity * refactor: simplify notification display logic and enhance chat input behavior for improved user experience * refactor: enhance layout consistency by adjusting spacing in various components across the channel and home screens * refactor: introduce LiveIndicator widget and adjust spacing in channel and video components for improved layout consistency * refactor: remove monospace font family from chat bottom bar for improved text rendering * refactor: reduce notification animation duration and change dismiss direction for improved user experience * refactor: replace VideoBar with StreamInfoBar in video components for improved layout and consistency * refactor: adjust font sizes and spacing in StreamInfoBar for improved layout consistency * refactor: standardize font sizes and update gradient stops in video components for improved visual consistency * refactor: update tooltip padding and background color in theme for improved visual consistency * refactor: enhance tooltip behavior and standardize font sizes in StreamInfoBar and related components for improved visual consistency * refactor: add showThumbnail option to LargeStreamCardSkeletonLoader for improved layout flexibility * refactor: add StreamInfoBarSkeletonLoader for improved layout consistency in stream components * refactor: add shadow effects to icons and text in StreamInfoBar and VideoOverlay for improved visual depth * refactor: update defaultOverlayOpacity to 0.0 for improved overlay behavior * fix: correct stream info text color on overlay * refactor: implement a new color picker dialog with random color generation for enhanced user experience * refactor: adjust gradient colors and stops in VideoOverlay for improved visual consistency * refactor: refine gradient colors and stops in VideoOverlay for enhanced visual clarity * refactor: add isCompact parameter to StreamInfoBar for responsive text sizing * fix: update tooltip background color to use surface color for better contrast * feat: add shared chat mode support in chat store and update StreamInfoBar for visual indication * refactor: disable debug print for IRC messages to reduce log clutter * feat: implement chat color selection feature with user color management in chat settings * refactor: replace color adjustment logic with new contrast-aware utility for chat names * refactor: simplify chat details UI by replacing list tiles with action cards and removing unused clear dialog * refactor: enhance chat details UI by improving time formatting and adding label styling to action cards * refactor: update chat color terminology to 'Username color' for clarity in UI * refactor: enhance chat details UI by introducing active chat modes display and improving layout structure * refactor: improve chat details layout by replacing ListTile with Padding and adding a Divider for better visual separation * refactor: remove chat notifications positioning setting and adjust notification alignment in video chat * refactor: streamline StreamInfoBar component by consolidating offline handling and improving layout for better readability * refactor: enhance StreamInfoBar by adding tooltip for streamer name and improving text overflow handling * refactor: adjust tooltip display duration in StreamInfoBar and update theme configuration * refactor: adjust margin and padding in StreamCard for improved layout consistency * chore: update dependencies in pubspec.yaml and pubspec.lock for Firebase and other packages * template * chore: update iOS platform version to 15.0 and Firebase dependencies to 12.2.0 * refactor: simplify StreamInfoBar layout by reducing nested widgets and improving text color handling * format * feat: enhance Channel model and StreamInfoBar to support offline channel details * feat: add offline indicator and improve StreamInfoBar layout for better offline channel display * fix: adjust icon color opacity in StreamInfoBar for improved visibility * feat: enhance dismissal animation in FrostyPhotoViewDialog to track swipe direction * docs: update copilot instructions for clarity and additional error handling details * refactor: optimize latency tooltip layout and improve offline indicator styling in VideoOverlay * feat: implement shared chat asset fetching and participant management in ChatAssetsStore * refactor: replace Observer with Builder for improved widget rebuilding in VideoOverlay * refactor: update StreamInfoBar border styling and adjust layout in VideoOverlay for improved visual consistency * feat: add showTextShadows property to StreamInfoBar for customizable text shadow display * refactor: adjust layout in VideoOverlay by adding padding to improve spacing and visual consistency * refactor: enhance VideoOverlay gradients and layout for improved visual hierarchy and user experience * refactor: reduce vertical padding in VideoOverlay for improved layout consistency * refactor: remove overlay opacity settings from VideoSettings and SettingsStore for simplification * refactor: improve text overlay transition in VideoChat for better user experience * Revert "refactor: improve text overlay transition in VideoChat for better user experience" This reverts commit fd16ff5ec30ec266157e5c8a9d4a6090c91717f6. * refactor: wrap videoOverlay in ColoredBox for improved layout handling * refactor: optimize animation duration and transition curves in VideoChat for smoother interactions * refactor: dispose searchScrollController in HomeStoreBase to prevent memory leaks * refactor: simplify gradient definitions in VideoOverlay for improved readability and maintainability * refactor: remove 'Offline' text overlay from VideoOverlay for cleaner UI * refactor: add refresh functionality for assets in ChatDetails with loading indicators * refactor: update visibility conditions for uptime, viewer count, and category display in StreamInfoBar * refactor: replace AlertDialog with FrostyDialog for consistent dialog styling across the application * refactor: enhance layout handling in FrostyPageView to prevent overflow during height transitions * refactor: replace ColorPickerDialog with AccentColorPickerDialog for improved color selection experience * refactor: replace theme and accent color settings with dedicated components for improved modularity and readability * refactor: replace ElevatedButton with TextButton for consistent button styling across dialogs * refactor: integrate MobX Observer for reactive state management in settings widgets * refactor: update theme and dialog components for improved styling and consistency * refactor: enhance dialog styling with rounded corners and border in theme configuration * refactor: improve dialog messages for unauthorized access handling * refactor: update bodyLarge text style in theme configuration to include font weight * refactor: standardize Divider usage and adjust theme styles for improved consistency * refactor: adjust Divider properties and theme styles for enhanced visual consistency * chore: remove GEMINI.md file as it is no longer needed for project documentation * refactor: enhance token validation and reconnect logic in AuthBase for improved error handling * format * refactor: integrate landscape cutout settings into VideoChat layout for improved responsiveness * refactor: implement app lifecycle handling in VideoChat and enhance stream info update logic in VideoStore * refactor: update landscape cutout conditionals in VideoChat layout for improved responsiveness * update AGENTS.md * add scrollbar to search * fix scrolling exception * update CLAUDE.md * 5 auth reconnect attemps then log out * increase reply max lines to 2 * simplify and improve reply formatting * add prime icon * better draggable divider * support draggable divider in fullscreen overlay chat * add text shadow in fullscreen chat overlay mode * format * add landscape checks * video store optimization attempts * Dispose WebViewController and remove JavaScript channels properly * Track and cleanup all MutationObservers to prevent accumulation * Throttle latency updates to once per 5 seconds (reduces CPU load) * Add timeout protection and null checks for robustness * Prevent duplicate event listeners on page reloads * double tap divider to reset * Revert "video store optimization attempts" This reverts commit b1df7b0de473543283211a489dca698d9d241857. * optimize video store attempt 2 * Revert "double tap divider to reset" This reverts commit aeb26a433500ec71f822794835e927018ee59e1e. * optimize latency listener to open the menu and check every 20 secconds * more optimizations * hard refresh * abbreviate latency * fix lint * improve hide default overlay * fix chat no longer reconnecting with chat delay * refine chat alerts * fix historical message missing badges and emotes on initial connection * parallelize * revert * add reconnect button inline action * refactor: replace Scrollbar with FrostyScrollbar across chat and settings screens for consistent styling * tweak chat details menu * add scrollbar to release notes, renames for consistency * fix duplicate message case * fix chat delay alerts in auto sync mode * add regex for numeric strings and enhance display name formatting logic * exterminate borders * refactor: simplify active chat modes display in chat details screen * feat: enhance chat input button with delay notification and disable state * fix: wrap chat in SafeArea to prevent UI overflow issues * refactor: remove divider line from video chat and update draggable divider visibility logic * persist overlay in pip mode * fix: update chat delay handling and notifications in chat bottom bar * fix: update chat overlay visibility logic to respect fullscreen settings * tap to show deleted message * fix: prevent accidental chat scrolling when accessing system UI in landscape mode * show latency in portrait * fix: enhance chat delay notifications with dynamic delay time * docs: update CLAUDE.md for improved environment variable instructions and architecture overview * fix: improve chat delay countdown management and message handling * add preliminary release notes * remove agents.md * update lockfile * add initial multi chat feature * add option to persist multi chat tabs * add remove confirmation dialog * improve add chat design * lazy-load tabs * create global assets store to dedupe global asset fetching * improve tab design/styles * update notes * use frosty dialog * update claude md * tweak * add ability to reorder tabs * resolve conflict * merge cleanup * format * update release notes * add chat delay sync completion tracking to prevent countdown re-appearance * add tests * fix * update release notes * bump
2026-01-01 22:28:17 -05:00
_startChatDelayCountdown();
}
// Listen for new messages and forward them to the handler.
_channelListener = _channel?.stream.listen(
(data) {
final dataStr = data.toString();
feat(video,chat): native player, ad-break awareness, chat send/delay reliability, and tab redesign (#567) Squash-merge commit. Covers four areas: native video player, chat reliability, multi-tab, and hardening. ## Native video player - Direct HLS playback via `better_native_video_player` (forked from `plug-and-pay/flutter-native-video-player`, patched on `frosty-patches` branch) - Twitch GQL playback token fetching with platform cookie extraction (iOS Swift + Android Kotlin plugins) for authenticated streams - Quality selection (source, 720p, 480p, 360p, 160p, audio-only) persisted per channel - Picture-in-picture: iOS automatic inline PiP, Android auto-PiP on API 31+ guarded against older devices - Latency polling, chat latency sync, stall detection/recovery, startup auto-pause recovery, watchdog timers - **Twitch stitched-ad break detection** (HLS `EXT-X-DATERANGE`) on both platforms, emitting `adBreakChanged` so the host suspends latency/stall recovery and chat sync during ads (program-date-time is unreliable then). Matches `CLASS="twitch-stitched-ad"` / `ID="stitched-ad-"` **and** the `X-TV-TWITCH-AD-*` attribute prefix (the durable signal streamlink/yt-dlp use) - Shared `VideoPlayerInterface` so WebView and native paths are interchangeable via settings toggle - `PlaybackAccessToken` model, `TwitchGqlApi` client ## Chat delay & send reliability - **Optimistic send-finalize**: Twitch acks a sent message with a per-PRIVMSG USERSTATE (not an echo), which it can intermittently drop — more so under a long chat delay. A missing ack no longer shows a false "message may not have been sent" error; the send is finalized optimistically (local echo rendered), and only genuine rejection NOTICEs surface an error. Ack timeout scaled by the chat delay. - **Per-line chat-delay bypass**: control/state lines (USERSTATE/ROOMSTATE/GLOBALUSERSTATE), rejection NOTICEs, the reconnect notice, and untagged server lines bypass the delay so send-acks and PONGs aren't stalled; only displayable chat content is delayed, staying in sync with delayed video. - **Measured chat bottom-bar height**: the message list reflows to the composer's real measured height, fixing the input overlapping messages when a long message expands it (replaces a fixed-constant estimate). - IRC tag parsing handles valueless and escaped tags per the IRCv3 message-tags spec (fixes a recent-messages RangeError on certain tags). ## Chat / multi-tab - Redesigned tab chips: unread dot indicator, chips dim until WebSocket connects - Animated tab options popover replacing `MenuAnchor` (no animation hook in Flutter 3.44) - Simplified `ChatTabs` from `StatefulWidget` to `StatelessWidget` - Focus-current-channel fade bump to 0.55; section-header alpha lifted to match the muted-label tier - `addTab` now calls `setActiveTab` to snapshot outgoing tab's `lastSeenMessageId` — fixes spurious unread dots after adding a tab - `onActivateSourceTab` threaded into `ChatUserModal` so Reply in merged mode switches to the correct source tab's composer ## Bug fixes and hardening - **Reverted the experimental iOS low-latency mode** (5s live-edge join + 1.05x catch-up): AVPlayer can't sustain <~18s on Twitch (declared `TARGETDURATION:6` paces playlist refreshes), and the offset starved the buffer into pause-on-launch. Default join distance restored. - Fork (Android): **cap `BEHIND_LIVE_WINDOW` recovery** so a stream repeatedly falling off the live window can't silently re-prepare forever; emits `error` on exhaustion so the host recovery ladder takes over - Guard all Android `setAutoPipMode` calls with `_autoPipAvailable` — prevents `PlatformException` on Android 8–11; check `_disposed` after `isAutoPipAvailable` await to prevent post-dispose auto-PiP re-enable - Remove `_isInPipMode` guard from `_onPaused` so `_paused` tracks actual state, fixing PiP play/pause toggle getting stuck - Tighten iOS cookie domain check to exact `twitch.tv` / `.twitch.tv` suffix - Invalidate the stored web session token when Twitch rejects it with a 401 (profile card flips back to unlinked; future loads skip the doomed authenticated request), and re-extract the cookie on launch when logged in without a linked session - Send `play_session_id` and `player_backend=mediaplayer` to Usher, matching the web client / streamlink - Fork (iOS): restore program-date-time latency measurement (a prior rev measured distance to the manifest edge, reading ~0s and silently disabling high-latency recovery / chat-delay auto-sync); release platform views on dispose (per-stream view + AVPlayerViewController leak), track the observed AVPlayerItem for KVO removal (sibling-view crash), main-thread seek results, resolve superseded load futures - Fork (Android): clean up method handlers orphaned by PiP-time view disposal (leaked audio-focus listeners), drop the live-offset re-anchoring seekTo on metadata updates (latency creep), restore pre-duck volume, respect user pause in the stall watchdog, resolve superseded load futures - Deep review pass: expire the quality-switch flag so stall recovery isn't disabled for the session, cap latency-driven recovery (clock-skew loop), generation-guard the error overlay, two-strike offline confirmation, controller null-safety on quality switch - Tighten `/me` local-echo match (no longer renders `/meow ...` as an action); clear pending send text on disconnect ## Web / docs - Remove stale Cloudflare Images binding from `wrangler.jsonc` (covered by `images.unoptimized: true`) - Correct `web/AGENTS.md` Cache Components claim (feature not enabled) - Repo and agent config cleanup ## Test plan - [x] `flutter analyze` — clean (frosty + plugin lib) - [x] `flutter test` — 319/319 pass (adds `ChatLatencySync`, `StreamInfoPoller`, video timing invariants, `PlaybackAccessToken`, IRC tag parsing) - [x] Android plugin Kotlin compiles against the bumped fork rev - [ ] Native player plays live streams on iOS and Android - [ ] Quality switching works and persists across channel reopens - [ ] PiP enters/exits correctly; pause/resume toggle in PiP window works - [ ] Audio-only mode does not crash on Android < API 31 - [ ] Sending under a long synced chat delay no longer shows a false "may not have been sent" error - [ ] Long composer text reflows the message list (no input/message overlap) - [ ] Multi-tab: adding a tab does not mark previous tab as unread - [ ] Merged chat: Reply from user modal targets the correct tab's composer 🤖 Generated with [Claude Code](https://claude.com/claude-code)
2026-06-13 17:06:24 -04:00
// No active delay: process the whole frame immediately.
if (!_hasActiveChatDelay) {
_handleIRCData(dataStr);
feat(video,chat): native player, ad-break awareness, chat send/delay reliability, and tab redesign (#567) Squash-merge commit. Covers four areas: native video player, chat reliability, multi-tab, and hardening. ## Native video player - Direct HLS playback via `better_native_video_player` (forked from `plug-and-pay/flutter-native-video-player`, patched on `frosty-patches` branch) - Twitch GQL playback token fetching with platform cookie extraction (iOS Swift + Android Kotlin plugins) for authenticated streams - Quality selection (source, 720p, 480p, 360p, 160p, audio-only) persisted per channel - Picture-in-picture: iOS automatic inline PiP, Android auto-PiP on API 31+ guarded against older devices - Latency polling, chat latency sync, stall detection/recovery, startup auto-pause recovery, watchdog timers - **Twitch stitched-ad break detection** (HLS `EXT-X-DATERANGE`) on both platforms, emitting `adBreakChanged` so the host suspends latency/stall recovery and chat sync during ads (program-date-time is unreliable then). Matches `CLASS="twitch-stitched-ad"` / `ID="stitched-ad-"` **and** the `X-TV-TWITCH-AD-*` attribute prefix (the durable signal streamlink/yt-dlp use) - Shared `VideoPlayerInterface` so WebView and native paths are interchangeable via settings toggle - `PlaybackAccessToken` model, `TwitchGqlApi` client ## Chat delay & send reliability - **Optimistic send-finalize**: Twitch acks a sent message with a per-PRIVMSG USERSTATE (not an echo), which it can intermittently drop — more so under a long chat delay. A missing ack no longer shows a false "message may not have been sent" error; the send is finalized optimistically (local echo rendered), and only genuine rejection NOTICEs surface an error. Ack timeout scaled by the chat delay. - **Per-line chat-delay bypass**: control/state lines (USERSTATE/ROOMSTATE/GLOBALUSERSTATE), rejection NOTICEs, the reconnect notice, and untagged server lines bypass the delay so send-acks and PONGs aren't stalled; only displayable chat content is delayed, staying in sync with delayed video. - **Measured chat bottom-bar height**: the message list reflows to the composer's real measured height, fixing the input overlapping messages when a long message expands it (replaces a fixed-constant estimate). - IRC tag parsing handles valueless and escaped tags per the IRCv3 message-tags spec (fixes a recent-messages RangeError on certain tags). ## Chat / multi-tab - Redesigned tab chips: unread dot indicator, chips dim until WebSocket connects - Animated tab options popover replacing `MenuAnchor` (no animation hook in Flutter 3.44) - Simplified `ChatTabs` from `StatefulWidget` to `StatelessWidget` - Focus-current-channel fade bump to 0.55; section-header alpha lifted to match the muted-label tier - `addTab` now calls `setActiveTab` to snapshot outgoing tab's `lastSeenMessageId` — fixes spurious unread dots after adding a tab - `onActivateSourceTab` threaded into `ChatUserModal` so Reply in merged mode switches to the correct source tab's composer ## Bug fixes and hardening - **Reverted the experimental iOS low-latency mode** (5s live-edge join + 1.05x catch-up): AVPlayer can't sustain <~18s on Twitch (declared `TARGETDURATION:6` paces playlist refreshes), and the offset starved the buffer into pause-on-launch. Default join distance restored. - Fork (Android): **cap `BEHIND_LIVE_WINDOW` recovery** so a stream repeatedly falling off the live window can't silently re-prepare forever; emits `error` on exhaustion so the host recovery ladder takes over - Guard all Android `setAutoPipMode` calls with `_autoPipAvailable` — prevents `PlatformException` on Android 8–11; check `_disposed` after `isAutoPipAvailable` await to prevent post-dispose auto-PiP re-enable - Remove `_isInPipMode` guard from `_onPaused` so `_paused` tracks actual state, fixing PiP play/pause toggle getting stuck - Tighten iOS cookie domain check to exact `twitch.tv` / `.twitch.tv` suffix - Invalidate the stored web session token when Twitch rejects it with a 401 (profile card flips back to unlinked; future loads skip the doomed authenticated request), and re-extract the cookie on launch when logged in without a linked session - Send `play_session_id` and `player_backend=mediaplayer` to Usher, matching the web client / streamlink - Fork (iOS): restore program-date-time latency measurement (a prior rev measured distance to the manifest edge, reading ~0s and silently disabling high-latency recovery / chat-delay auto-sync); release platform views on dispose (per-stream view + AVPlayerViewController leak), track the observed AVPlayerItem for KVO removal (sibling-view crash), main-thread seek results, resolve superseded load futures - Fork (Android): clean up method handlers orphaned by PiP-time view disposal (leaked audio-focus listeners), drop the live-offset re-anchoring seekTo on metadata updates (latency creep), restore pre-duck volume, respect user pause in the stall watchdog, resolve superseded load futures - Deep review pass: expire the quality-switch flag so stall recovery isn't disabled for the session, cap latency-driven recovery (clock-skew loop), generation-guard the error overlay, two-strike offline confirmation, controller null-safety on quality switch - Tighten `/me` local-echo match (no longer renders `/meow ...` as an action); clear pending send text on disconnect ## Web / docs - Remove stale Cloudflare Images binding from `wrangler.jsonc` (covered by `images.unoptimized: true`) - Correct `web/AGENTS.md` Cache Components claim (feature not enabled) - Repo and agent config cleanup ## Test plan - [x] `flutter analyze` — clean (frosty + plugin lib) - [x] `flutter test` — 319/319 pass (adds `ChatLatencySync`, `StreamInfoPoller`, video timing invariants, `PlaybackAccessToken`, IRC tag parsing) - [x] Android plugin Kotlin compiles against the bumped fork rev - [ ] Native player plays live streams on iOS and Android - [ ] Quality switching works and persists across channel reopens - [ ] PiP enters/exits correctly; pause/resume toggle in PiP window works - [ ] Audio-only mode does not crash on Android < API 31 - [ ] Sending under a long synced chat delay no longer shows a false "may not have been sent" error - [ ] Long composer text reflows the message list (no input/message overlap) - [ ] Multi-tab: adding a tab does not mark previous tab as unread - [ ] Merged chat: Reply from user modal targets the correct tab's composer 🤖 Generated with [Claude Code](https://claude.com/claude-code)
2026-06-13 17:06:24 -04:00
return;
}
// Dispatch each line individually so a bypass-eligible control message
// isn't dragged behind the delay by chat lines batched in the same
// frame — and, conversely, so a delayed chat line can't hold up a
// PING/USERSTATE that shares the frame.
for (final line in dataStr.split('\r\n')) {
final trimmed = line.trimRight();
if (trimmed.isEmpty) continue;
if (_lineShouldBypassDelay(trimmed)) {
_handleIRCData(trimmed);
} else {
_enqueueDelayedCallback(
_pendingChatCallbacks,
() => _handleIRCData(trimmed),
);
}
}
},
onError: (error) {
debugPrint('Chat error: ${error.toString()}');
FirebaseCrashlytics.instance.recordError(
error,
StackTrace.current,
reason: 'IRC WebSocket error, channel=$channelName',
);
},
onDone: () async {
_clearPendingDelayedCallbacks(clearSevenTV: false);
v5 (#463) * migrate to dio * ignore folders * simplify twitch api headers handling * clean up main * simplify logs * optimize profile picture fetching fixes refetches on tab switch * update claude md * refactor irc.dart * update copilot instructions with essential commands and project structure details * implement message sending state management and UI updates * refactor notification handling and add copy-paste functionality in chat * refactor AlertMessage to support vertical layout and optional padding * refactor error messages for consistency and clarity across various components * refactor chat layout to use draggable divider and improve chat width settings * refactor Uptime widget to use SharedTimerService for synchronized updates * refactor search results components to handle null future states gracefully * refactor loading indicators to use skeleton loaders for improved user experience * refactor UI components for improved layout and responsiveness, enhance skeleton loaders, and streamline padding adjustments * refactor: replace manual blur effects with BlurredContainer for consistency and reusability * refactor: enhance JavaScript execution and error handling in WebView components * refactor: replace app bar with blurred container for improved UI consistency across screens * refactor: streamline video chat layout and enhance PiP drag gesture functionality * revert some app bar changes * refactor: implement Picture-in-Picture drag functionality in VideoChat * refactor: pass currentChannelId to IRCMessage and ChatMessage for improved context * fix large thubmnail width * chore: update Gradle and Kotlin plugin versions for improved compatibility * changes from v4.10.0 branch * feat: integrate AnimatedScrollBorder for improved UI responsiveness across various screens * refactor: update SectionHeader styling and improve theme management * feat: add pinned section to StreamsList and enhance skeleton loader padding * feat: add repository guidelines for project structure, coding style, testing, and security * feat: enhance StreamCard UI with BlurredContainer and adjust border width in theme * feat: implement unfocusInput and safeRequestFocus methods to manage text field focus behavior * feat: enhance Picture-in-Picture drag interactions with haptic feedback and smooth animations * refactor: improve code formatting and readability across multiple files * feat: implement picture-in-picture mode toggle and state management for video playback * feat: reset PiP mode state when pausing video playback * feat: add custom app bar with profile picture and stream info for video chat * feat: convert multiple settings screens to use StatefulWidget and add animated scroll borders * feat: update blur configuration for adaptive alpha based on theme * fix: adjust default font size in SectionHeader widget * feat: enhance PiP mode with drag overlay instruction and UI improvements * fix: improve badge rendering with consistent margin and border for current channel * refactor: replace BackdropFilter with BlurredContainer for improved clarity and maintainability * fix: reduce background transparency in Uptime widget for better visibility * feat: enhance photo view dialog with full resolution toggle and blurred background * fix: reset chat delay to 0 when auto sync is enabled and update settings title for clarity * fix: adjust border width in theme to improve consistency * feat: add forceDarkMode option to BlurredContainer for improved theme adaptability * feat: implement offline followed channels feature with UI integration and settings option * fix: increase font size and weight for offline status text for better readability * feat: remove offline pinned channels feature and update related UI components * feat: optimize offline channels loading behavior based on expansion state * fix: improve clarity and consistency in repository guidelines formatting * feat: update full resolution URL handling and button visibility logic * feat: replace app bar with blurred version in chat-only mode and add animated scroll border * feat: refactor video chat layout for improved chat and video display in landscape mode * feat: remove bottom bar visibility setting and adjust chat layout accordingly * fix: simplify condition for displaying offline channels section in following tab * feat: enhance reply thread display with indentation and reply icon * feat: implement showModalBottomSheetWithProperFocus for improved focus handling * feat: add gradient direction support to BlurredContainer for enhanced visual effects * feat: enhance NavigationBar and Theme settings for improved visual consistency * feat: add gradient direction support to BlurredContainer in VideoChat for enhanced visual effects * chore: update .gitignore to include .cursor file for better environment management * fix: update PiP drag gesture conditions to include video paused state for better user experience * refactor: replace ScrollController with SettingsPageLayout in settings screens for improved layout management * refactor: centralize orientation handling by introducing OrientationUtils for improved readability and maintainability * refactor: replace OrientationUtils with ContextExtensions for streamlined context-based access to theme, layout, and API dependencies * refactor: improve video chat UI by adjusting title layout and adding stream info tooltips for better user experience * refactor: adjust titleSpacing in theme and navigation components for improved layout consistency * refactor: update stream info timer handling and overlay management for improved UI responsiveness * refactor: enhance stream info timer logic and overlay visibility management for chat-only mode * refactor: enhance input decoration theme in FrostyThemes for improved visual consistency and responsiveness * refactor: adjust inputDecorationTheme padding in FrostyThemes for improved visual consistency * refactor: enhance video overlay management by including video preview overlay in hideElements for improved UI consistency * refactor: improve chat bottom bar padding and video chat layout for enhanced UI consistency * refactor: adjust chat padding to account for device bottom insets for improved layout consistency * refactor: update text styles in FrostyThemes for improved visual consistency across UI components * refactor: update iOS minimum deployment target to 13.0 for improved compatibility * refactor: adjust chat bottom padding based on emote menu visibility for improved layout consistency * refactor: adjust padding values in StreamsList for improved layout consistency * refactor: replace Padding with AnimatedPadding in Chat for smoother layout transitions refactor: replace Container with AnimatedContainer in BlurredContainer for smoother animations * refactor: remove unnecessary radius property from ProfilePicture in OfflineChannelCard for cleaner code * refactor: enhance chat bottom bar suffix icon to display message delay with tooltip for improved user experience * refactor: update hint text and tooltips in chat bottom bar and search for improved clarity * refactor: simplify notification display logic and enhance chat input behavior for improved user experience * refactor: enhance layout consistency by adjusting spacing in various components across the channel and home screens * refactor: introduce LiveIndicator widget and adjust spacing in channel and video components for improved layout consistency * refactor: remove monospace font family from chat bottom bar for improved text rendering * refactor: reduce notification animation duration and change dismiss direction for improved user experience * refactor: replace VideoBar with StreamInfoBar in video components for improved layout and consistency * refactor: adjust font sizes and spacing in StreamInfoBar for improved layout consistency * refactor: standardize font sizes and update gradient stops in video components for improved visual consistency * refactor: update tooltip padding and background color in theme for improved visual consistency * refactor: enhance tooltip behavior and standardize font sizes in StreamInfoBar and related components for improved visual consistency * refactor: add showThumbnail option to LargeStreamCardSkeletonLoader for improved layout flexibility * refactor: add StreamInfoBarSkeletonLoader for improved layout consistency in stream components * refactor: add shadow effects to icons and text in StreamInfoBar and VideoOverlay for improved visual depth * refactor: update defaultOverlayOpacity to 0.0 for improved overlay behavior * fix: correct stream info text color on overlay * refactor: implement a new color picker dialog with random color generation for enhanced user experience * refactor: adjust gradient colors and stops in VideoOverlay for improved visual consistency * refactor: refine gradient colors and stops in VideoOverlay for enhanced visual clarity * refactor: add isCompact parameter to StreamInfoBar for responsive text sizing * fix: update tooltip background color to use surface color for better contrast * feat: add shared chat mode support in chat store and update StreamInfoBar for visual indication * refactor: disable debug print for IRC messages to reduce log clutter * feat: implement chat color selection feature with user color management in chat settings * refactor: replace color adjustment logic with new contrast-aware utility for chat names * refactor: simplify chat details UI by replacing list tiles with action cards and removing unused clear dialog * refactor: enhance chat details UI by improving time formatting and adding label styling to action cards * refactor: update chat color terminology to 'Username color' for clarity in UI * refactor: enhance chat details UI by introducing active chat modes display and improving layout structure * refactor: improve chat details layout by replacing ListTile with Padding and adding a Divider for better visual separation * refactor: remove chat notifications positioning setting and adjust notification alignment in video chat * refactor: streamline StreamInfoBar component by consolidating offline handling and improving layout for better readability * refactor: enhance StreamInfoBar by adding tooltip for streamer name and improving text overflow handling * refactor: adjust tooltip display duration in StreamInfoBar and update theme configuration * refactor: adjust margin and padding in StreamCard for improved layout consistency * chore: update dependencies in pubspec.yaml and pubspec.lock for Firebase and other packages * template * chore: update iOS platform version to 15.0 and Firebase dependencies to 12.2.0 * refactor: simplify StreamInfoBar layout by reducing nested widgets and improving text color handling * format * feat: enhance Channel model and StreamInfoBar to support offline channel details * feat: add offline indicator and improve StreamInfoBar layout for better offline channel display * fix: adjust icon color opacity in StreamInfoBar for improved visibility * feat: enhance dismissal animation in FrostyPhotoViewDialog to track swipe direction * docs: update copilot instructions for clarity and additional error handling details * refactor: optimize latency tooltip layout and improve offline indicator styling in VideoOverlay * feat: implement shared chat asset fetching and participant management in ChatAssetsStore * refactor: replace Observer with Builder for improved widget rebuilding in VideoOverlay * refactor: update StreamInfoBar border styling and adjust layout in VideoOverlay for improved visual consistency * feat: add showTextShadows property to StreamInfoBar for customizable text shadow display * refactor: adjust layout in VideoOverlay by adding padding to improve spacing and visual consistency * refactor: enhance VideoOverlay gradients and layout for improved visual hierarchy and user experience * refactor: reduce vertical padding in VideoOverlay for improved layout consistency * refactor: remove overlay opacity settings from VideoSettings and SettingsStore for simplification * refactor: improve text overlay transition in VideoChat for better user experience * Revert "refactor: improve text overlay transition in VideoChat for better user experience" This reverts commit fd16ff5ec30ec266157e5c8a9d4a6090c91717f6. * refactor: wrap videoOverlay in ColoredBox for improved layout handling * refactor: optimize animation duration and transition curves in VideoChat for smoother interactions * refactor: dispose searchScrollController in HomeStoreBase to prevent memory leaks * refactor: simplify gradient definitions in VideoOverlay for improved readability and maintainability * refactor: remove 'Offline' text overlay from VideoOverlay for cleaner UI * refactor: add refresh functionality for assets in ChatDetails with loading indicators * refactor: update visibility conditions for uptime, viewer count, and category display in StreamInfoBar * refactor: replace AlertDialog with FrostyDialog for consistent dialog styling across the application * refactor: enhance layout handling in FrostyPageView to prevent overflow during height transitions * refactor: replace ColorPickerDialog with AccentColorPickerDialog for improved color selection experience * refactor: replace theme and accent color settings with dedicated components for improved modularity and readability * refactor: replace ElevatedButton with TextButton for consistent button styling across dialogs * refactor: integrate MobX Observer for reactive state management in settings widgets * refactor: update theme and dialog components for improved styling and consistency * refactor: enhance dialog styling with rounded corners and border in theme configuration * refactor: improve dialog messages for unauthorized access handling * refactor: update bodyLarge text style in theme configuration to include font weight * refactor: standardize Divider usage and adjust theme styles for improved consistency * refactor: adjust Divider properties and theme styles for enhanced visual consistency * chore: remove GEMINI.md file as it is no longer needed for project documentation * refactor: enhance token validation and reconnect logic in AuthBase for improved error handling * format * refactor: integrate landscape cutout settings into VideoChat layout for improved responsiveness * refactor: implement app lifecycle handling in VideoChat and enhance stream info update logic in VideoStore * refactor: update landscape cutout conditionals in VideoChat layout for improved responsiveness * update AGENTS.md * add scrollbar to search * fix scrolling exception * update CLAUDE.md * 5 auth reconnect attemps then log out * increase reply max lines to 2 * simplify and improve reply formatting * add prime icon * better draggable divider * support draggable divider in fullscreen overlay chat * add text shadow in fullscreen chat overlay mode * format * add landscape checks * video store optimization attempts * Dispose WebViewController and remove JavaScript channels properly * Track and cleanup all MutationObservers to prevent accumulation * Throttle latency updates to once per 5 seconds (reduces CPU load) * Add timeout protection and null checks for robustness * Prevent duplicate event listeners on page reloads * double tap divider to reset * Revert "video store optimization attempts" This reverts commit b1df7b0de473543283211a489dca698d9d241857. * optimize video store attempt 2 * Revert "double tap divider to reset" This reverts commit aeb26a433500ec71f822794835e927018ee59e1e. * optimize latency listener to open the menu and check every 20 secconds * more optimizations * hard refresh * abbreviate latency * fix lint * improve hide default overlay * fix chat no longer reconnecting with chat delay * refine chat alerts * fix historical message missing badges and emotes on initial connection * parallelize * revert * add reconnect button inline action * refactor: replace Scrollbar with FrostyScrollbar across chat and settings screens for consistent styling * tweak chat details menu * add scrollbar to release notes, renames for consistency * fix duplicate message case * fix chat delay alerts in auto sync mode * add regex for numeric strings and enhance display name formatting logic * exterminate borders * refactor: simplify active chat modes display in chat details screen * feat: enhance chat input button with delay notification and disable state * fix: wrap chat in SafeArea to prevent UI overflow issues * refactor: remove divider line from video chat and update draggable divider visibility logic * persist overlay in pip mode * fix: update chat delay handling and notifications in chat bottom bar * fix: update chat overlay visibility logic to respect fullscreen settings * tap to show deleted message * fix: prevent accidental chat scrolling when accessing system UI in landscape mode * show latency in portrait * fix: enhance chat delay notifications with dynamic delay time * docs: update CLAUDE.md for improved environment variable instructions and architecture overview * fix: improve chat delay countdown management and message handling * add preliminary release notes * remove agents.md * update lockfile * add initial multi chat feature * add option to persist multi chat tabs * add remove confirmation dialog * improve add chat design * lazy-load tabs * create global assets store to dedupe global asset fetching * improve tab design/styles * update notes * use frosty dialog * update claude md * tweak * add ability to reorder tabs * resolve conflict * merge cleanup * format * update release notes * add chat delay sync completion tracking to prevent countdown re-appearance * add tests * fix * update release notes * bump
2026-01-01 22:28:17 -05:00
// Mark connection as disconnected for UI
_isConnected = false;
v5 (#463) * migrate to dio * ignore folders * simplify twitch api headers handling * clean up main * simplify logs * optimize profile picture fetching fixes refetches on tab switch * update claude md * refactor irc.dart * update copilot instructions with essential commands and project structure details * implement message sending state management and UI updates * refactor notification handling and add copy-paste functionality in chat * refactor AlertMessage to support vertical layout and optional padding * refactor error messages for consistency and clarity across various components * refactor chat layout to use draggable divider and improve chat width settings * refactor Uptime widget to use SharedTimerService for synchronized updates * refactor search results components to handle null future states gracefully * refactor loading indicators to use skeleton loaders for improved user experience * refactor UI components for improved layout and responsiveness, enhance skeleton loaders, and streamline padding adjustments * refactor: replace manual blur effects with BlurredContainer for consistency and reusability * refactor: enhance JavaScript execution and error handling in WebView components * refactor: replace app bar with blurred container for improved UI consistency across screens * refactor: streamline video chat layout and enhance PiP drag gesture functionality * revert some app bar changes * refactor: implement Picture-in-Picture drag functionality in VideoChat * refactor: pass currentChannelId to IRCMessage and ChatMessage for improved context * fix large thubmnail width * chore: update Gradle and Kotlin plugin versions for improved compatibility * changes from v4.10.0 branch * feat: integrate AnimatedScrollBorder for improved UI responsiveness across various screens * refactor: update SectionHeader styling and improve theme management * feat: add pinned section to StreamsList and enhance skeleton loader padding * feat: add repository guidelines for project structure, coding style, testing, and security * feat: enhance StreamCard UI with BlurredContainer and adjust border width in theme * feat: implement unfocusInput and safeRequestFocus methods to manage text field focus behavior * feat: enhance Picture-in-Picture drag interactions with haptic feedback and smooth animations * refactor: improve code formatting and readability across multiple files * feat: implement picture-in-picture mode toggle and state management for video playback * feat: reset PiP mode state when pausing video playback * feat: add custom app bar with profile picture and stream info for video chat * feat: convert multiple settings screens to use StatefulWidget and add animated scroll borders * feat: update blur configuration for adaptive alpha based on theme * fix: adjust default font size in SectionHeader widget * feat: enhance PiP mode with drag overlay instruction and UI improvements * fix: improve badge rendering with consistent margin and border for current channel * refactor: replace BackdropFilter with BlurredContainer for improved clarity and maintainability * fix: reduce background transparency in Uptime widget for better visibility * feat: enhance photo view dialog with full resolution toggle and blurred background * fix: reset chat delay to 0 when auto sync is enabled and update settings title for clarity * fix: adjust border width in theme to improve consistency * feat: add forceDarkMode option to BlurredContainer for improved theme adaptability * feat: implement offline followed channels feature with UI integration and settings option * fix: increase font size and weight for offline status text for better readability * feat: remove offline pinned channels feature and update related UI components * feat: optimize offline channels loading behavior based on expansion state * fix: improve clarity and consistency in repository guidelines formatting * feat: update full resolution URL handling and button visibility logic * feat: replace app bar with blurred version in chat-only mode and add animated scroll border * feat: refactor video chat layout for improved chat and video display in landscape mode * feat: remove bottom bar visibility setting and adjust chat layout accordingly * fix: simplify condition for displaying offline channels section in following tab * feat: enhance reply thread display with indentation and reply icon * feat: implement showModalBottomSheetWithProperFocus for improved focus handling * feat: add gradient direction support to BlurredContainer for enhanced visual effects * feat: enhance NavigationBar and Theme settings for improved visual consistency * feat: add gradient direction support to BlurredContainer in VideoChat for enhanced visual effects * chore: update .gitignore to include .cursor file for better environment management * fix: update PiP drag gesture conditions to include video paused state for better user experience * refactor: replace ScrollController with SettingsPageLayout in settings screens for improved layout management * refactor: centralize orientation handling by introducing OrientationUtils for improved readability and maintainability * refactor: replace OrientationUtils with ContextExtensions for streamlined context-based access to theme, layout, and API dependencies * refactor: improve video chat UI by adjusting title layout and adding stream info tooltips for better user experience * refactor: adjust titleSpacing in theme and navigation components for improved layout consistency * refactor: update stream info timer handling and overlay management for improved UI responsiveness * refactor: enhance stream info timer logic and overlay visibility management for chat-only mode * refactor: enhance input decoration theme in FrostyThemes for improved visual consistency and responsiveness * refactor: adjust inputDecorationTheme padding in FrostyThemes for improved visual consistency * refactor: enhance video overlay management by including video preview overlay in hideElements for improved UI consistency * refactor: improve chat bottom bar padding and video chat layout for enhanced UI consistency * refactor: adjust chat padding to account for device bottom insets for improved layout consistency * refactor: update text styles in FrostyThemes for improved visual consistency across UI components * refactor: update iOS minimum deployment target to 13.0 for improved compatibility * refactor: adjust chat bottom padding based on emote menu visibility for improved layout consistency * refactor: adjust padding values in StreamsList for improved layout consistency * refactor: replace Padding with AnimatedPadding in Chat for smoother layout transitions refactor: replace Container with AnimatedContainer in BlurredContainer for smoother animations * refactor: remove unnecessary radius property from ProfilePicture in OfflineChannelCard for cleaner code * refactor: enhance chat bottom bar suffix icon to display message delay with tooltip for improved user experience * refactor: update hint text and tooltips in chat bottom bar and search for improved clarity * refactor: simplify notification display logic and enhance chat input behavior for improved user experience * refactor: enhance layout consistency by adjusting spacing in various components across the channel and home screens * refactor: introduce LiveIndicator widget and adjust spacing in channel and video components for improved layout consistency * refactor: remove monospace font family from chat bottom bar for improved text rendering * refactor: reduce notification animation duration and change dismiss direction for improved user experience * refactor: replace VideoBar with StreamInfoBar in video components for improved layout and consistency * refactor: adjust font sizes and spacing in StreamInfoBar for improved layout consistency * refactor: standardize font sizes and update gradient stops in video components for improved visual consistency * refactor: update tooltip padding and background color in theme for improved visual consistency * refactor: enhance tooltip behavior and standardize font sizes in StreamInfoBar and related components for improved visual consistency * refactor: add showThumbnail option to LargeStreamCardSkeletonLoader for improved layout flexibility * refactor: add StreamInfoBarSkeletonLoader for improved layout consistency in stream components * refactor: add shadow effects to icons and text in StreamInfoBar and VideoOverlay for improved visual depth * refactor: update defaultOverlayOpacity to 0.0 for improved overlay behavior * fix: correct stream info text color on overlay * refactor: implement a new color picker dialog with random color generation for enhanced user experience * refactor: adjust gradient colors and stops in VideoOverlay for improved visual consistency * refactor: refine gradient colors and stops in VideoOverlay for enhanced visual clarity * refactor: add isCompact parameter to StreamInfoBar for responsive text sizing * fix: update tooltip background color to use surface color for better contrast * feat: add shared chat mode support in chat store and update StreamInfoBar for visual indication * refactor: disable debug print for IRC messages to reduce log clutter * feat: implement chat color selection feature with user color management in chat settings * refactor: replace color adjustment logic with new contrast-aware utility for chat names * refactor: simplify chat details UI by replacing list tiles with action cards and removing unused clear dialog * refactor: enhance chat details UI by improving time formatting and adding label styling to action cards * refactor: update chat color terminology to 'Username color' for clarity in UI * refactor: enhance chat details UI by introducing active chat modes display and improving layout structure * refactor: improve chat details layout by replacing ListTile with Padding and adding a Divider for better visual separation * refactor: remove chat notifications positioning setting and adjust notification alignment in video chat * refactor: streamline StreamInfoBar component by consolidating offline handling and improving layout for better readability * refactor: enhance StreamInfoBar by adding tooltip for streamer name and improving text overflow handling * refactor: adjust tooltip display duration in StreamInfoBar and update theme configuration * refactor: adjust margin and padding in StreamCard for improved layout consistency * chore: update dependencies in pubspec.yaml and pubspec.lock for Firebase and other packages * template * chore: update iOS platform version to 15.0 and Firebase dependencies to 12.2.0 * refactor: simplify StreamInfoBar layout by reducing nested widgets and improving text color handling * format * feat: enhance Channel model and StreamInfoBar to support offline channel details * feat: add offline indicator and improve StreamInfoBar layout for better offline channel display * fix: adjust icon color opacity in StreamInfoBar for improved visibility * feat: enhance dismissal animation in FrostyPhotoViewDialog to track swipe direction * docs: update copilot instructions for clarity and additional error handling details * refactor: optimize latency tooltip layout and improve offline indicator styling in VideoOverlay * feat: implement shared chat asset fetching and participant management in ChatAssetsStore * refactor: replace Observer with Builder for improved widget rebuilding in VideoOverlay * refactor: update StreamInfoBar border styling and adjust layout in VideoOverlay for improved visual consistency * feat: add showTextShadows property to StreamInfoBar for customizable text shadow display * refactor: adjust layout in VideoOverlay by adding padding to improve spacing and visual consistency * refactor: enhance VideoOverlay gradients and layout for improved visual hierarchy and user experience * refactor: reduce vertical padding in VideoOverlay for improved layout consistency * refactor: remove overlay opacity settings from VideoSettings and SettingsStore for simplification * refactor: improve text overlay transition in VideoChat for better user experience * Revert "refactor: improve text overlay transition in VideoChat for better user experience" This reverts commit fd16ff5ec30ec266157e5c8a9d4a6090c91717f6. * refactor: wrap videoOverlay in ColoredBox for improved layout handling * refactor: optimize animation duration and transition curves in VideoChat for smoother interactions * refactor: dispose searchScrollController in HomeStoreBase to prevent memory leaks * refactor: simplify gradient definitions in VideoOverlay for improved readability and maintainability * refactor: remove 'Offline' text overlay from VideoOverlay for cleaner UI * refactor: add refresh functionality for assets in ChatDetails with loading indicators * refactor: update visibility conditions for uptime, viewer count, and category display in StreamInfoBar * refactor: replace AlertDialog with FrostyDialog for consistent dialog styling across the application * refactor: enhance layout handling in FrostyPageView to prevent overflow during height transitions * refactor: replace ColorPickerDialog with AccentColorPickerDialog for improved color selection experience * refactor: replace theme and accent color settings with dedicated components for improved modularity and readability * refactor: replace ElevatedButton with TextButton for consistent button styling across dialogs * refactor: integrate MobX Observer for reactive state management in settings widgets * refactor: update theme and dialog components for improved styling and consistency * refactor: enhance dialog styling with rounded corners and border in theme configuration * refactor: improve dialog messages for unauthorized access handling * refactor: update bodyLarge text style in theme configuration to include font weight * refactor: standardize Divider usage and adjust theme styles for improved consistency * refactor: adjust Divider properties and theme styles for enhanced visual consistency * chore: remove GEMINI.md file as it is no longer needed for project documentation * refactor: enhance token validation and reconnect logic in AuthBase for improved error handling * format * refactor: integrate landscape cutout settings into VideoChat layout for improved responsiveness * refactor: implement app lifecycle handling in VideoChat and enhance stream info update logic in VideoStore * refactor: update landscape cutout conditionals in VideoChat layout for improved responsiveness * update AGENTS.md * add scrollbar to search * fix scrolling exception * update CLAUDE.md * 5 auth reconnect attemps then log out * increase reply max lines to 2 * simplify and improve reply formatting * add prime icon * better draggable divider * support draggable divider in fullscreen overlay chat * add text shadow in fullscreen chat overlay mode * format * add landscape checks * video store optimization attempts * Dispose WebViewController and remove JavaScript channels properly * Track and cleanup all MutationObservers to prevent accumulation * Throttle latency updates to once per 5 seconds (reduces CPU load) * Add timeout protection and null checks for robustness * Prevent duplicate event listeners on page reloads * double tap divider to reset * Revert "video store optimization attempts" This reverts commit b1df7b0de473543283211a489dca698d9d241857. * optimize video store attempt 2 * Revert "double tap divider to reset" This reverts commit aeb26a433500ec71f822794835e927018ee59e1e. * optimize latency listener to open the menu and check every 20 secconds * more optimizations * hard refresh * abbreviate latency * fix lint * improve hide default overlay * fix chat no longer reconnecting with chat delay * refine chat alerts * fix historical message missing badges and emotes on initial connection * parallelize * revert * add reconnect button inline action * refactor: replace Scrollbar with FrostyScrollbar across chat and settings screens for consistent styling * tweak chat details menu * add scrollbar to release notes, renames for consistency * fix duplicate message case * fix chat delay alerts in auto sync mode * add regex for numeric strings and enhance display name formatting logic * exterminate borders * refactor: simplify active chat modes display in chat details screen * feat: enhance chat input button with delay notification and disable state * fix: wrap chat in SafeArea to prevent UI overflow issues * refactor: remove divider line from video chat and update draggable divider visibility logic * persist overlay in pip mode * fix: update chat delay handling and notifications in chat bottom bar * fix: update chat overlay visibility logic to respect fullscreen settings * tap to show deleted message * fix: prevent accidental chat scrolling when accessing system UI in landscape mode * show latency in portrait * fix: enhance chat delay notifications with dynamic delay time * docs: update CLAUDE.md for improved environment variable instructions and architecture overview * fix: improve chat delay countdown management and message handling * add preliminary release notes * remove agents.md * update lockfile * add initial multi chat feature * add option to persist multi chat tabs * add remove confirmation dialog * improve add chat design * lazy-load tabs * create global assets store to dedupe global asset fetching * improve tab design/styles * update notes * use frosty dialog * update claude md * tweak * add ability to reorder tabs * resolve conflict * merge cleanup * format * update release notes * add chat delay sync completion tracking to prevent countdown re-appearance * add tests * fix * update release notes * bump
2026-01-01 22:28:17 -05:00
// Cancel chat delay countdown when disconnecting
_cancelChatDelayCountdown();
_chatDelaySyncCompleted = false;
feat(video,chat): native player, ad-break awareness, chat send/delay reliability, and tab redesign (#567) Squash-merge commit. Covers four areas: native video player, chat reliability, multi-tab, and hardening. ## Native video player - Direct HLS playback via `better_native_video_player` (forked from `plug-and-pay/flutter-native-video-player`, patched on `frosty-patches` branch) - Twitch GQL playback token fetching with platform cookie extraction (iOS Swift + Android Kotlin plugins) for authenticated streams - Quality selection (source, 720p, 480p, 360p, 160p, audio-only) persisted per channel - Picture-in-picture: iOS automatic inline PiP, Android auto-PiP on API 31+ guarded against older devices - Latency polling, chat latency sync, stall detection/recovery, startup auto-pause recovery, watchdog timers - **Twitch stitched-ad break detection** (HLS `EXT-X-DATERANGE`) on both platforms, emitting `adBreakChanged` so the host suspends latency/stall recovery and chat sync during ads (program-date-time is unreliable then). Matches `CLASS="twitch-stitched-ad"` / `ID="stitched-ad-"` **and** the `X-TV-TWITCH-AD-*` attribute prefix (the durable signal streamlink/yt-dlp use) - Shared `VideoPlayerInterface` so WebView and native paths are interchangeable via settings toggle - `PlaybackAccessToken` model, `TwitchGqlApi` client ## Chat delay & send reliability - **Optimistic send-finalize**: Twitch acks a sent message with a per-PRIVMSG USERSTATE (not an echo), which it can intermittently drop — more so under a long chat delay. A missing ack no longer shows a false "message may not have been sent" error; the send is finalized optimistically (local echo rendered), and only genuine rejection NOTICEs surface an error. Ack timeout scaled by the chat delay. - **Per-line chat-delay bypass**: control/state lines (USERSTATE/ROOMSTATE/GLOBALUSERSTATE), rejection NOTICEs, the reconnect notice, and untagged server lines bypass the delay so send-acks and PONGs aren't stalled; only displayable chat content is delayed, staying in sync with delayed video. - **Measured chat bottom-bar height**: the message list reflows to the composer's real measured height, fixing the input overlapping messages when a long message expands it (replaces a fixed-constant estimate). - IRC tag parsing handles valueless and escaped tags per the IRCv3 message-tags spec (fixes a recent-messages RangeError on certain tags). ## Chat / multi-tab - Redesigned tab chips: unread dot indicator, chips dim until WebSocket connects - Animated tab options popover replacing `MenuAnchor` (no animation hook in Flutter 3.44) - Simplified `ChatTabs` from `StatefulWidget` to `StatelessWidget` - Focus-current-channel fade bump to 0.55; section-header alpha lifted to match the muted-label tier - `addTab` now calls `setActiveTab` to snapshot outgoing tab's `lastSeenMessageId` — fixes spurious unread dots after adding a tab - `onActivateSourceTab` threaded into `ChatUserModal` so Reply in merged mode switches to the correct source tab's composer ## Bug fixes and hardening - **Reverted the experimental iOS low-latency mode** (5s live-edge join + 1.05x catch-up): AVPlayer can't sustain <~18s on Twitch (declared `TARGETDURATION:6` paces playlist refreshes), and the offset starved the buffer into pause-on-launch. Default join distance restored. - Fork (Android): **cap `BEHIND_LIVE_WINDOW` recovery** so a stream repeatedly falling off the live window can't silently re-prepare forever; emits `error` on exhaustion so the host recovery ladder takes over - Guard all Android `setAutoPipMode` calls with `_autoPipAvailable` — prevents `PlatformException` on Android 8–11; check `_disposed` after `isAutoPipAvailable` await to prevent post-dispose auto-PiP re-enable - Remove `_isInPipMode` guard from `_onPaused` so `_paused` tracks actual state, fixing PiP play/pause toggle getting stuck - Tighten iOS cookie domain check to exact `twitch.tv` / `.twitch.tv` suffix - Invalidate the stored web session token when Twitch rejects it with a 401 (profile card flips back to unlinked; future loads skip the doomed authenticated request), and re-extract the cookie on launch when logged in without a linked session - Send `play_session_id` and `player_backend=mediaplayer` to Usher, matching the web client / streamlink - Fork (iOS): restore program-date-time latency measurement (a prior rev measured distance to the manifest edge, reading ~0s and silently disabling high-latency recovery / chat-delay auto-sync); release platform views on dispose (per-stream view + AVPlayerViewController leak), track the observed AVPlayerItem for KVO removal (sibling-view crash), main-thread seek results, resolve superseded load futures - Fork (Android): clean up method handlers orphaned by PiP-time view disposal (leaked audio-focus listeners), drop the live-offset re-anchoring seekTo on metadata updates (latency creep), restore pre-duck volume, respect user pause in the stall watchdog, resolve superseded load futures - Deep review pass: expire the quality-switch flag so stall recovery isn't disabled for the session, cap latency-driven recovery (clock-skew loop), generation-guard the error overlay, two-strike offline confirmation, controller null-safety on quality switch - Tighten `/me` local-echo match (no longer renders `/meow ...` as an action); clear pending send text on disconnect ## Web / docs - Remove stale Cloudflare Images binding from `wrangler.jsonc` (covered by `images.unoptimized: true`) - Correct `web/AGENTS.md` Cache Components claim (feature not enabled) - Repo and agent config cleanup ## Test plan - [x] `flutter analyze` — clean (frosty + plugin lib) - [x] `flutter test` — 319/319 pass (adds `ChatLatencySync`, `StreamInfoPoller`, video timing invariants, `PlaybackAccessToken`, IRC tag parsing) - [x] Android plugin Kotlin compiles against the bumped fork rev - [ ] Native player plays live streams on iOS and Android - [ ] Quality switching works and persists across channel reopens - [ ] PiP enters/exits correctly; pause/resume toggle in PiP window works - [ ] Audio-only mode does not crash on Android < API 31 - [ ] Sending under a long synced chat delay no longer shows a false "may not have been sent" error - [ ] Long composer text reflows the message list (no input/message overlap) - [ ] Multi-tab: adding a tab does not mark previous tab as unread - [ ] Merged chat: Reply from user modal targets the correct tab's composer 🤖 Generated with [Claude Code](https://claude.com/claude-code)
2026-06-13 17:06:24 -04:00
// Reset send state — any in-flight message is unrecoverable across
// a disconnect, so don't leave the user blocked waiting for an ack
// that will never arrive.
_sendingTimeoutTimer?.cancel();
_isWaitingForAck = false;
toSend = null;
_pendingSentMessageText = null;
if (_shouldDisconnect) {
_sevenTVChannel?.sink.close(1000);
return;
}
2023-11-28 04:13:53 -05:00
if (_retries >= _maxRetries) {
FirebaseCrashlytics.instance.log(
'WebSocket reconnection failed after $_maxRetries attempts, channel=$channelName',
);
// Remove the reconnect message before showing final disconnect notice
if (_reconnectMessage != null) {
final index = _messages.indexOf(_reconnectMessage!);
if (index != -1) _messages.removeAt(index);
_reconnectMessage = null;
}
_reconnectStartTime = null;
v5 (#463) * migrate to dio * ignore folders * simplify twitch api headers handling * clean up main * simplify logs * optimize profile picture fetching fixes refetches on tab switch * update claude md * refactor irc.dart * update copilot instructions with essential commands and project structure details * implement message sending state management and UI updates * refactor notification handling and add copy-paste functionality in chat * refactor AlertMessage to support vertical layout and optional padding * refactor error messages for consistency and clarity across various components * refactor chat layout to use draggable divider and improve chat width settings * refactor Uptime widget to use SharedTimerService for synchronized updates * refactor search results components to handle null future states gracefully * refactor loading indicators to use skeleton loaders for improved user experience * refactor UI components for improved layout and responsiveness, enhance skeleton loaders, and streamline padding adjustments * refactor: replace manual blur effects with BlurredContainer for consistency and reusability * refactor: enhance JavaScript execution and error handling in WebView components * refactor: replace app bar with blurred container for improved UI consistency across screens * refactor: streamline video chat layout and enhance PiP drag gesture functionality * revert some app bar changes * refactor: implement Picture-in-Picture drag functionality in VideoChat * refactor: pass currentChannelId to IRCMessage and ChatMessage for improved context * fix large thubmnail width * chore: update Gradle and Kotlin plugin versions for improved compatibility * changes from v4.10.0 branch * feat: integrate AnimatedScrollBorder for improved UI responsiveness across various screens * refactor: update SectionHeader styling and improve theme management * feat: add pinned section to StreamsList and enhance skeleton loader padding * feat: add repository guidelines for project structure, coding style, testing, and security * feat: enhance StreamCard UI with BlurredContainer and adjust border width in theme * feat: implement unfocusInput and safeRequestFocus methods to manage text field focus behavior * feat: enhance Picture-in-Picture drag interactions with haptic feedback and smooth animations * refactor: improve code formatting and readability across multiple files * feat: implement picture-in-picture mode toggle and state management for video playback * feat: reset PiP mode state when pausing video playback * feat: add custom app bar with profile picture and stream info for video chat * feat: convert multiple settings screens to use StatefulWidget and add animated scroll borders * feat: update blur configuration for adaptive alpha based on theme * fix: adjust default font size in SectionHeader widget * feat: enhance PiP mode with drag overlay instruction and UI improvements * fix: improve badge rendering with consistent margin and border for current channel * refactor: replace BackdropFilter with BlurredContainer for improved clarity and maintainability * fix: reduce background transparency in Uptime widget for better visibility * feat: enhance photo view dialog with full resolution toggle and blurred background * fix: reset chat delay to 0 when auto sync is enabled and update settings title for clarity * fix: adjust border width in theme to improve consistency * feat: add forceDarkMode option to BlurredContainer for improved theme adaptability * feat: implement offline followed channels feature with UI integration and settings option * fix: increase font size and weight for offline status text for better readability * feat: remove offline pinned channels feature and update related UI components * feat: optimize offline channels loading behavior based on expansion state * fix: improve clarity and consistency in repository guidelines formatting * feat: update full resolution URL handling and button visibility logic * feat: replace app bar with blurred version in chat-only mode and add animated scroll border * feat: refactor video chat layout for improved chat and video display in landscape mode * feat: remove bottom bar visibility setting and adjust chat layout accordingly * fix: simplify condition for displaying offline channels section in following tab * feat: enhance reply thread display with indentation and reply icon * feat: implement showModalBottomSheetWithProperFocus for improved focus handling * feat: add gradient direction support to BlurredContainer for enhanced visual effects * feat: enhance NavigationBar and Theme settings for improved visual consistency * feat: add gradient direction support to BlurredContainer in VideoChat for enhanced visual effects * chore: update .gitignore to include .cursor file for better environment management * fix: update PiP drag gesture conditions to include video paused state for better user experience * refactor: replace ScrollController with SettingsPageLayout in settings screens for improved layout management * refactor: centralize orientation handling by introducing OrientationUtils for improved readability and maintainability * refactor: replace OrientationUtils with ContextExtensions for streamlined context-based access to theme, layout, and API dependencies * refactor: improve video chat UI by adjusting title layout and adding stream info tooltips for better user experience * refactor: adjust titleSpacing in theme and navigation components for improved layout consistency * refactor: update stream info timer handling and overlay management for improved UI responsiveness * refactor: enhance stream info timer logic and overlay visibility management for chat-only mode * refactor: enhance input decoration theme in FrostyThemes for improved visual consistency and responsiveness * refactor: adjust inputDecorationTheme padding in FrostyThemes for improved visual consistency * refactor: enhance video overlay management by including video preview overlay in hideElements for improved UI consistency * refactor: improve chat bottom bar padding and video chat layout for enhanced UI consistency * refactor: adjust chat padding to account for device bottom insets for improved layout consistency * refactor: update text styles in FrostyThemes for improved visual consistency across UI components * refactor: update iOS minimum deployment target to 13.0 for improved compatibility * refactor: adjust chat bottom padding based on emote menu visibility for improved layout consistency * refactor: adjust padding values in StreamsList for improved layout consistency * refactor: replace Padding with AnimatedPadding in Chat for smoother layout transitions refactor: replace Container with AnimatedContainer in BlurredContainer for smoother animations * refactor: remove unnecessary radius property from ProfilePicture in OfflineChannelCard for cleaner code * refactor: enhance chat bottom bar suffix icon to display message delay with tooltip for improved user experience * refactor: update hint text and tooltips in chat bottom bar and search for improved clarity * refactor: simplify notification display logic and enhance chat input behavior for improved user experience * refactor: enhance layout consistency by adjusting spacing in various components across the channel and home screens * refactor: introduce LiveIndicator widget and adjust spacing in channel and video components for improved layout consistency * refactor: remove monospace font family from chat bottom bar for improved text rendering * refactor: reduce notification animation duration and change dismiss direction for improved user experience * refactor: replace VideoBar with StreamInfoBar in video components for improved layout and consistency * refactor: adjust font sizes and spacing in StreamInfoBar for improved layout consistency * refactor: standardize font sizes and update gradient stops in video components for improved visual consistency * refactor: update tooltip padding and background color in theme for improved visual consistency * refactor: enhance tooltip behavior and standardize font sizes in StreamInfoBar and related components for improved visual consistency * refactor: add showThumbnail option to LargeStreamCardSkeletonLoader for improved layout flexibility * refactor: add StreamInfoBarSkeletonLoader for improved layout consistency in stream components * refactor: add shadow effects to icons and text in StreamInfoBar and VideoOverlay for improved visual depth * refactor: update defaultOverlayOpacity to 0.0 for improved overlay behavior * fix: correct stream info text color on overlay * refactor: implement a new color picker dialog with random color generation for enhanced user experience * refactor: adjust gradient colors and stops in VideoOverlay for improved visual consistency * refactor: refine gradient colors and stops in VideoOverlay for enhanced visual clarity * refactor: add isCompact parameter to StreamInfoBar for responsive text sizing * fix: update tooltip background color to use surface color for better contrast * feat: add shared chat mode support in chat store and update StreamInfoBar for visual indication * refactor: disable debug print for IRC messages to reduce log clutter * feat: implement chat color selection feature with user color management in chat settings * refactor: replace color adjustment logic with new contrast-aware utility for chat names * refactor: simplify chat details UI by replacing list tiles with action cards and removing unused clear dialog * refactor: enhance chat details UI by improving time formatting and adding label styling to action cards * refactor: update chat color terminology to 'Username color' for clarity in UI * refactor: enhance chat details UI by introducing active chat modes display and improving layout structure * refactor: improve chat details layout by replacing ListTile with Padding and adding a Divider for better visual separation * refactor: remove chat notifications positioning setting and adjust notification alignment in video chat * refactor: streamline StreamInfoBar component by consolidating offline handling and improving layout for better readability * refactor: enhance StreamInfoBar by adding tooltip for streamer name and improving text overflow handling * refactor: adjust tooltip display duration in StreamInfoBar and update theme configuration * refactor: adjust margin and padding in StreamCard for improved layout consistency * chore: update dependencies in pubspec.yaml and pubspec.lock for Firebase and other packages * template * chore: update iOS platform version to 15.0 and Firebase dependencies to 12.2.0 * refactor: simplify StreamInfoBar layout by reducing nested widgets and improving text color handling * format * feat: enhance Channel model and StreamInfoBar to support offline channel details * feat: add offline indicator and improve StreamInfoBar layout for better offline channel display * fix: adjust icon color opacity in StreamInfoBar for improved visibility * feat: enhance dismissal animation in FrostyPhotoViewDialog to track swipe direction * docs: update copilot instructions for clarity and additional error handling details * refactor: optimize latency tooltip layout and improve offline indicator styling in VideoOverlay * feat: implement shared chat asset fetching and participant management in ChatAssetsStore * refactor: replace Observer with Builder for improved widget rebuilding in VideoOverlay * refactor: update StreamInfoBar border styling and adjust layout in VideoOverlay for improved visual consistency * feat: add showTextShadows property to StreamInfoBar for customizable text shadow display * refactor: adjust layout in VideoOverlay by adding padding to improve spacing and visual consistency * refactor: enhance VideoOverlay gradients and layout for improved visual hierarchy and user experience * refactor: reduce vertical padding in VideoOverlay for improved layout consistency * refactor: remove overlay opacity settings from VideoSettings and SettingsStore for simplification * refactor: improve text overlay transition in VideoChat for better user experience * Revert "refactor: improve text overlay transition in VideoChat for better user experience" This reverts commit fd16ff5ec30ec266157e5c8a9d4a6090c91717f6. * refactor: wrap videoOverlay in ColoredBox for improved layout handling * refactor: optimize animation duration and transition curves in VideoChat for smoother interactions * refactor: dispose searchScrollController in HomeStoreBase to prevent memory leaks * refactor: simplify gradient definitions in VideoOverlay for improved readability and maintainability * refactor: remove 'Offline' text overlay from VideoOverlay for cleaner UI * refactor: add refresh functionality for assets in ChatDetails with loading indicators * refactor: update visibility conditions for uptime, viewer count, and category display in StreamInfoBar * refactor: replace AlertDialog with FrostyDialog for consistent dialog styling across the application * refactor: enhance layout handling in FrostyPageView to prevent overflow during height transitions * refactor: replace ColorPickerDialog with AccentColorPickerDialog for improved color selection experience * refactor: replace theme and accent color settings with dedicated components for improved modularity and readability * refactor: replace ElevatedButton with TextButton for consistent button styling across dialogs * refactor: integrate MobX Observer for reactive state management in settings widgets * refactor: update theme and dialog components for improved styling and consistency * refactor: enhance dialog styling with rounded corners and border in theme configuration * refactor: improve dialog messages for unauthorized access handling * refactor: update bodyLarge text style in theme configuration to include font weight * refactor: standardize Divider usage and adjust theme styles for improved consistency * refactor: adjust Divider properties and theme styles for enhanced visual consistency * chore: remove GEMINI.md file as it is no longer needed for project documentation * refactor: enhance token validation and reconnect logic in AuthBase for improved error handling * format * refactor: integrate landscape cutout settings into VideoChat layout for improved responsiveness * refactor: implement app lifecycle handling in VideoChat and enhance stream info update logic in VideoStore * refactor: update landscape cutout conditionals in VideoChat layout for improved responsiveness * update AGENTS.md * add scrollbar to search * fix scrolling exception * update CLAUDE.md * 5 auth reconnect attemps then log out * increase reply max lines to 2 * simplify and improve reply formatting * add prime icon * better draggable divider * support draggable divider in fullscreen overlay chat * add text shadow in fullscreen chat overlay mode * format * add landscape checks * video store optimization attempts * Dispose WebViewController and remove JavaScript channels properly * Track and cleanup all MutationObservers to prevent accumulation * Throttle latency updates to once per 5 seconds (reduces CPU load) * Add timeout protection and null checks for robustness * Prevent duplicate event listeners on page reloads * double tap divider to reset * Revert "video store optimization attempts" This reverts commit b1df7b0de473543283211a489dca698d9d241857. * optimize video store attempt 2 * Revert "double tap divider to reset" This reverts commit aeb26a433500ec71f822794835e927018ee59e1e. * optimize latency listener to open the menu and check every 20 secconds * more optimizations * hard refresh * abbreviate latency * fix lint * improve hide default overlay * fix chat no longer reconnecting with chat delay * refine chat alerts * fix historical message missing badges and emotes on initial connection * parallelize * revert * add reconnect button inline action * refactor: replace Scrollbar with FrostyScrollbar across chat and settings screens for consistent styling * tweak chat details menu * add scrollbar to release notes, renames for consistency * fix duplicate message case * fix chat delay alerts in auto sync mode * add regex for numeric strings and enhance display name formatting logic * exterminate borders * refactor: simplify active chat modes display in chat details screen * feat: enhance chat input button with delay notification and disable state * fix: wrap chat in SafeArea to prevent UI overflow issues * refactor: remove divider line from video chat and update draggable divider visibility logic * persist overlay in pip mode * fix: update chat delay handling and notifications in chat bottom bar * fix: update chat overlay visibility logic to respect fullscreen settings * tap to show deleted message * fix: prevent accidental chat scrolling when accessing system UI in landscape mode * show latency in portrait * fix: enhance chat delay notifications with dynamic delay time * docs: update CLAUDE.md for improved environment variable instructions and architecture overview * fix: improve chat delay countdown management and message handling * add preliminary release notes * remove agents.md * update lockfile * add initial multi chat feature * add option to persist multi chat tabs * add remove confirmation dialog * improve add chat design * lazy-load tabs * create global assets store to dedupe global asset fetching * improve tab design/styles * update notes * use frosty dialog * update claude md * tweak * add ability to reorder tabs * resolve conflict * merge cleanup * format * update release notes * add chat delay sync completion tracking to prevent countdown re-appearance * add tests * fix * update release notes * bump
2026-01-01 22:28:17 -05:00
// Add directly to messages, not buffer, so it shows immediately
_messages.add(
2023-11-28 04:13:53 -05:00
IRCMessage.createNotice(
v5 (#463) * migrate to dio * ignore folders * simplify twitch api headers handling * clean up main * simplify logs * optimize profile picture fetching fixes refetches on tab switch * update claude md * refactor irc.dart * update copilot instructions with essential commands and project structure details * implement message sending state management and UI updates * refactor notification handling and add copy-paste functionality in chat * refactor AlertMessage to support vertical layout and optional padding * refactor error messages for consistency and clarity across various components * refactor chat layout to use draggable divider and improve chat width settings * refactor Uptime widget to use SharedTimerService for synchronized updates * refactor search results components to handle null future states gracefully * refactor loading indicators to use skeleton loaders for improved user experience * refactor UI components for improved layout and responsiveness, enhance skeleton loaders, and streamline padding adjustments * refactor: replace manual blur effects with BlurredContainer for consistency and reusability * refactor: enhance JavaScript execution and error handling in WebView components * refactor: replace app bar with blurred container for improved UI consistency across screens * refactor: streamline video chat layout and enhance PiP drag gesture functionality * revert some app bar changes * refactor: implement Picture-in-Picture drag functionality in VideoChat * refactor: pass currentChannelId to IRCMessage and ChatMessage for improved context * fix large thubmnail width * chore: update Gradle and Kotlin plugin versions for improved compatibility * changes from v4.10.0 branch * feat: integrate AnimatedScrollBorder for improved UI responsiveness across various screens * refactor: update SectionHeader styling and improve theme management * feat: add pinned section to StreamsList and enhance skeleton loader padding * feat: add repository guidelines for project structure, coding style, testing, and security * feat: enhance StreamCard UI with BlurredContainer and adjust border width in theme * feat: implement unfocusInput and safeRequestFocus methods to manage text field focus behavior * feat: enhance Picture-in-Picture drag interactions with haptic feedback and smooth animations * refactor: improve code formatting and readability across multiple files * feat: implement picture-in-picture mode toggle and state management for video playback * feat: reset PiP mode state when pausing video playback * feat: add custom app bar with profile picture and stream info for video chat * feat: convert multiple settings screens to use StatefulWidget and add animated scroll borders * feat: update blur configuration for adaptive alpha based on theme * fix: adjust default font size in SectionHeader widget * feat: enhance PiP mode with drag overlay instruction and UI improvements * fix: improve badge rendering with consistent margin and border for current channel * refactor: replace BackdropFilter with BlurredContainer for improved clarity and maintainability * fix: reduce background transparency in Uptime widget for better visibility * feat: enhance photo view dialog with full resolution toggle and blurred background * fix: reset chat delay to 0 when auto sync is enabled and update settings title for clarity * fix: adjust border width in theme to improve consistency * feat: add forceDarkMode option to BlurredContainer for improved theme adaptability * feat: implement offline followed channels feature with UI integration and settings option * fix: increase font size and weight for offline status text for better readability * feat: remove offline pinned channels feature and update related UI components * feat: optimize offline channels loading behavior based on expansion state * fix: improve clarity and consistency in repository guidelines formatting * feat: update full resolution URL handling and button visibility logic * feat: replace app bar with blurred version in chat-only mode and add animated scroll border * feat: refactor video chat layout for improved chat and video display in landscape mode * feat: remove bottom bar visibility setting and adjust chat layout accordingly * fix: simplify condition for displaying offline channels section in following tab * feat: enhance reply thread display with indentation and reply icon * feat: implement showModalBottomSheetWithProperFocus for improved focus handling * feat: add gradient direction support to BlurredContainer for enhanced visual effects * feat: enhance NavigationBar and Theme settings for improved visual consistency * feat: add gradient direction support to BlurredContainer in VideoChat for enhanced visual effects * chore: update .gitignore to include .cursor file for better environment management * fix: update PiP drag gesture conditions to include video paused state for better user experience * refactor: replace ScrollController with SettingsPageLayout in settings screens for improved layout management * refactor: centralize orientation handling by introducing OrientationUtils for improved readability and maintainability * refactor: replace OrientationUtils with ContextExtensions for streamlined context-based access to theme, layout, and API dependencies * refactor: improve video chat UI by adjusting title layout and adding stream info tooltips for better user experience * refactor: adjust titleSpacing in theme and navigation components for improved layout consistency * refactor: update stream info timer handling and overlay management for improved UI responsiveness * refactor: enhance stream info timer logic and overlay visibility management for chat-only mode * refactor: enhance input decoration theme in FrostyThemes for improved visual consistency and responsiveness * refactor: adjust inputDecorationTheme padding in FrostyThemes for improved visual consistency * refactor: enhance video overlay management by including video preview overlay in hideElements for improved UI consistency * refactor: improve chat bottom bar padding and video chat layout for enhanced UI consistency * refactor: adjust chat padding to account for device bottom insets for improved layout consistency * refactor: update text styles in FrostyThemes for improved visual consistency across UI components * refactor: update iOS minimum deployment target to 13.0 for improved compatibility * refactor: adjust chat bottom padding based on emote menu visibility for improved layout consistency * refactor: adjust padding values in StreamsList for improved layout consistency * refactor: replace Padding with AnimatedPadding in Chat for smoother layout transitions refactor: replace Container with AnimatedContainer in BlurredContainer for smoother animations * refactor: remove unnecessary radius property from ProfilePicture in OfflineChannelCard for cleaner code * refactor: enhance chat bottom bar suffix icon to display message delay with tooltip for improved user experience * refactor: update hint text and tooltips in chat bottom bar and search for improved clarity * refactor: simplify notification display logic and enhance chat input behavior for improved user experience * refactor: enhance layout consistency by adjusting spacing in various components across the channel and home screens * refactor: introduce LiveIndicator widget and adjust spacing in channel and video components for improved layout consistency * refactor: remove monospace font family from chat bottom bar for improved text rendering * refactor: reduce notification animation duration and change dismiss direction for improved user experience * refactor: replace VideoBar with StreamInfoBar in video components for improved layout and consistency * refactor: adjust font sizes and spacing in StreamInfoBar for improved layout consistency * refactor: standardize font sizes and update gradient stops in video components for improved visual consistency * refactor: update tooltip padding and background color in theme for improved visual consistency * refactor: enhance tooltip behavior and standardize font sizes in StreamInfoBar and related components for improved visual consistency * refactor: add showThumbnail option to LargeStreamCardSkeletonLoader for improved layout flexibility * refactor: add StreamInfoBarSkeletonLoader for improved layout consistency in stream components * refactor: add shadow effects to icons and text in StreamInfoBar and VideoOverlay for improved visual depth * refactor: update defaultOverlayOpacity to 0.0 for improved overlay behavior * fix: correct stream info text color on overlay * refactor: implement a new color picker dialog with random color generation for enhanced user experience * refactor: adjust gradient colors and stops in VideoOverlay for improved visual consistency * refactor: refine gradient colors and stops in VideoOverlay for enhanced visual clarity * refactor: add isCompact parameter to StreamInfoBar for responsive text sizing * fix: update tooltip background color to use surface color for better contrast * feat: add shared chat mode support in chat store and update StreamInfoBar for visual indication * refactor: disable debug print for IRC messages to reduce log clutter * feat: implement chat color selection feature with user color management in chat settings * refactor: replace color adjustment logic with new contrast-aware utility for chat names * refactor: simplify chat details UI by replacing list tiles with action cards and removing unused clear dialog * refactor: enhance chat details UI by improving time formatting and adding label styling to action cards * refactor: update chat color terminology to 'Username color' for clarity in UI * refactor: enhance chat details UI by introducing active chat modes display and improving layout structure * refactor: improve chat details layout by replacing ListTile with Padding and adding a Divider for better visual separation * refactor: remove chat notifications positioning setting and adjust notification alignment in video chat * refactor: streamline StreamInfoBar component by consolidating offline handling and improving layout for better readability * refactor: enhance StreamInfoBar by adding tooltip for streamer name and improving text overflow handling * refactor: adjust tooltip display duration in StreamInfoBar and update theme configuration * refactor: adjust margin and padding in StreamCard for improved layout consistency * chore: update dependencies in pubspec.yaml and pubspec.lock for Firebase and other packages * template * chore: update iOS platform version to 15.0 and Firebase dependencies to 12.2.0 * refactor: simplify StreamInfoBar layout by reducing nested widgets and improving text color handling * format * feat: enhance Channel model and StreamInfoBar to support offline channel details * feat: add offline indicator and improve StreamInfoBar layout for better offline channel display * fix: adjust icon color opacity in StreamInfoBar for improved visibility * feat: enhance dismissal animation in FrostyPhotoViewDialog to track swipe direction * docs: update copilot instructions for clarity and additional error handling details * refactor: optimize latency tooltip layout and improve offline indicator styling in VideoOverlay * feat: implement shared chat asset fetching and participant management in ChatAssetsStore * refactor: replace Observer with Builder for improved widget rebuilding in VideoOverlay * refactor: update StreamInfoBar border styling and adjust layout in VideoOverlay for improved visual consistency * feat: add showTextShadows property to StreamInfoBar for customizable text shadow display * refactor: adjust layout in VideoOverlay by adding padding to improve spacing and visual consistency * refactor: enhance VideoOverlay gradients and layout for improved visual hierarchy and user experience * refactor: reduce vertical padding in VideoOverlay for improved layout consistency * refactor: remove overlay opacity settings from VideoSettings and SettingsStore for simplification * refactor: improve text overlay transition in VideoChat for better user experience * Revert "refactor: improve text overlay transition in VideoChat for better user experience" This reverts commit fd16ff5ec30ec266157e5c8a9d4a6090c91717f6. * refactor: wrap videoOverlay in ColoredBox for improved layout handling * refactor: optimize animation duration and transition curves in VideoChat for smoother interactions * refactor: dispose searchScrollController in HomeStoreBase to prevent memory leaks * refactor: simplify gradient definitions in VideoOverlay for improved readability and maintainability * refactor: remove 'Offline' text overlay from VideoOverlay for cleaner UI * refactor: add refresh functionality for assets in ChatDetails with loading indicators * refactor: update visibility conditions for uptime, viewer count, and category display in StreamInfoBar * refactor: replace AlertDialog with FrostyDialog for consistent dialog styling across the application * refactor: enhance layout handling in FrostyPageView to prevent overflow during height transitions * refactor: replace ColorPickerDialog with AccentColorPickerDialog for improved color selection experience * refactor: replace theme and accent color settings with dedicated components for improved modularity and readability * refactor: replace ElevatedButton with TextButton for consistent button styling across dialogs * refactor: integrate MobX Observer for reactive state management in settings widgets * refactor: update theme and dialog components for improved styling and consistency * refactor: enhance dialog styling with rounded corners and border in theme configuration * refactor: improve dialog messages for unauthorized access handling * refactor: update bodyLarge text style in theme configuration to include font weight * refactor: standardize Divider usage and adjust theme styles for improved consistency * refactor: adjust Divider properties and theme styles for enhanced visual consistency * chore: remove GEMINI.md file as it is no longer needed for project documentation * refactor: enhance token validation and reconnect logic in AuthBase for improved error handling * format * refactor: integrate landscape cutout settings into VideoChat layout for improved responsiveness * refactor: implement app lifecycle handling in VideoChat and enhance stream info update logic in VideoStore * refactor: update landscape cutout conditionals in VideoChat layout for improved responsiveness * update AGENTS.md * add scrollbar to search * fix scrolling exception * update CLAUDE.md * 5 auth reconnect attemps then log out * increase reply max lines to 2 * simplify and improve reply formatting * add prime icon * better draggable divider * support draggable divider in fullscreen overlay chat * add text shadow in fullscreen chat overlay mode * format * add landscape checks * video store optimization attempts * Dispose WebViewController and remove JavaScript channels properly * Track and cleanup all MutationObservers to prevent accumulation * Throttle latency updates to once per 5 seconds (reduces CPU load) * Add timeout protection and null checks for robustness * Prevent duplicate event listeners on page reloads * double tap divider to reset * Revert "video store optimization attempts" This reverts commit b1df7b0de473543283211a489dca698d9d241857. * optimize video store attempt 2 * Revert "double tap divider to reset" This reverts commit aeb26a433500ec71f822794835e927018ee59e1e. * optimize latency listener to open the menu and check every 20 secconds * more optimizations * hard refresh * abbreviate latency * fix lint * improve hide default overlay * fix chat no longer reconnecting with chat delay * refine chat alerts * fix historical message missing badges and emotes on initial connection * parallelize * revert * add reconnect button inline action * refactor: replace Scrollbar with FrostyScrollbar across chat and settings screens for consistent styling * tweak chat details menu * add scrollbar to release notes, renames for consistency * fix duplicate message case * fix chat delay alerts in auto sync mode * add regex for numeric strings and enhance display name formatting logic * exterminate borders * refactor: simplify active chat modes display in chat details screen * feat: enhance chat input button with delay notification and disable state * fix: wrap chat in SafeArea to prevent UI overflow issues * refactor: remove divider line from video chat and update draggable divider visibility logic * persist overlay in pip mode * fix: update chat delay handling and notifications in chat bottom bar * fix: update chat overlay visibility logic to respect fullscreen settings * tap to show deleted message * fix: prevent accidental chat scrolling when accessing system UI in landscape mode * show latency in portrait * fix: enhance chat delay notifications with dynamic delay time * docs: update CLAUDE.md for improved environment variable instructions and architecture overview * fix: improve chat delay countdown management and message handling * add preliminary release notes * remove agents.md * update lockfile * add initial multi chat feature * add option to persist multi chat tabs * add remove confirmation dialog * improve add chat design * lazy-load tabs * create global assets store to dedupe global asset fetching * improve tab design/styles * update notes * use frosty dialog * update claude md * tweak * add ability to reorder tabs * resolve conflict * merge cleanup * format * update release notes * add chat delay sync completion tracking to prevent countdown re-appearance * add tests * fix * update release notes * bump
2026-01-01 22:28:17 -05:00
message: 'Chat disconnected. Please check your connection.',
actionCallback: () {
_retries = 0;
_backoffTime = 0;
connectToChat(isReconnect: true);
},
actionLabel: 'Reconnect',
2023-11-28 04:13:53 -05:00
),
);
return;
}
// Increment the retry count.
_retries++;
FirebaseCrashlytics.instance.log(
'WebSocket reconnecting: attempt $_retries/$_maxRetries, channel=$channelName',
);
// Start exponential backoff only after first failed attempt (capped at 8s).
// First retry is immediate to catch brief network hiccups.
if (_retries > 1) {
final newBackoff = _backoffTime == 0 ? 1 : _backoffTime * 2;
_backoffTime = newBackoff > 8 ? 8 : newBackoff;
}
// Helper to update the single reconnect message in place (or add if first time)
void updateReconnectMessage(String text) {
final msg = IRCMessage.createNotice(message: text);
if (_reconnectMessage == null) {
2026-01-06 20:22:14 -05:00
_reconnectStartTime ??=
DateTime.now(); // Record when reconnection started
_reconnectMessage = msg;
_messages.add(_reconnectMessage!);
} else {
final index = _messages.indexOf(_reconnectMessage!);
if (index != -1) {
_reconnectMessage = msg;
_messages[index] = _reconnectMessage!;
} else {
// Reference was lost (e.g., message limit cleanup) - re-add
_reconnectMessage = msg;
_messages.add(_reconnectMessage!);
}
}
}
// Countdown phase (if backoff time > 0)
if (_backoffTime > 0) {
v5 (#463) * migrate to dio * ignore folders * simplify twitch api headers handling * clean up main * simplify logs * optimize profile picture fetching fixes refetches on tab switch * update claude md * refactor irc.dart * update copilot instructions with essential commands and project structure details * implement message sending state management and UI updates * refactor notification handling and add copy-paste functionality in chat * refactor AlertMessage to support vertical layout and optional padding * refactor error messages for consistency and clarity across various components * refactor chat layout to use draggable divider and improve chat width settings * refactor Uptime widget to use SharedTimerService for synchronized updates * refactor search results components to handle null future states gracefully * refactor loading indicators to use skeleton loaders for improved user experience * refactor UI components for improved layout and responsiveness, enhance skeleton loaders, and streamline padding adjustments * refactor: replace manual blur effects with BlurredContainer for consistency and reusability * refactor: enhance JavaScript execution and error handling in WebView components * refactor: replace app bar with blurred container for improved UI consistency across screens * refactor: streamline video chat layout and enhance PiP drag gesture functionality * revert some app bar changes * refactor: implement Picture-in-Picture drag functionality in VideoChat * refactor: pass currentChannelId to IRCMessage and ChatMessage for improved context * fix large thubmnail width * chore: update Gradle and Kotlin plugin versions for improved compatibility * changes from v4.10.0 branch * feat: integrate AnimatedScrollBorder for improved UI responsiveness across various screens * refactor: update SectionHeader styling and improve theme management * feat: add pinned section to StreamsList and enhance skeleton loader padding * feat: add repository guidelines for project structure, coding style, testing, and security * feat: enhance StreamCard UI with BlurredContainer and adjust border width in theme * feat: implement unfocusInput and safeRequestFocus methods to manage text field focus behavior * feat: enhance Picture-in-Picture drag interactions with haptic feedback and smooth animations * refactor: improve code formatting and readability across multiple files * feat: implement picture-in-picture mode toggle and state management for video playback * feat: reset PiP mode state when pausing video playback * feat: add custom app bar with profile picture and stream info for video chat * feat: convert multiple settings screens to use StatefulWidget and add animated scroll borders * feat: update blur configuration for adaptive alpha based on theme * fix: adjust default font size in SectionHeader widget * feat: enhance PiP mode with drag overlay instruction and UI improvements * fix: improve badge rendering with consistent margin and border for current channel * refactor: replace BackdropFilter with BlurredContainer for improved clarity and maintainability * fix: reduce background transparency in Uptime widget for better visibility * feat: enhance photo view dialog with full resolution toggle and blurred background * fix: reset chat delay to 0 when auto sync is enabled and update settings title for clarity * fix: adjust border width in theme to improve consistency * feat: add forceDarkMode option to BlurredContainer for improved theme adaptability * feat: implement offline followed channels feature with UI integration and settings option * fix: increase font size and weight for offline status text for better readability * feat: remove offline pinned channels feature and update related UI components * feat: optimize offline channels loading behavior based on expansion state * fix: improve clarity and consistency in repository guidelines formatting * feat: update full resolution URL handling and button visibility logic * feat: replace app bar with blurred version in chat-only mode and add animated scroll border * feat: refactor video chat layout for improved chat and video display in landscape mode * feat: remove bottom bar visibility setting and adjust chat layout accordingly * fix: simplify condition for displaying offline channels section in following tab * feat: enhance reply thread display with indentation and reply icon * feat: implement showModalBottomSheetWithProperFocus for improved focus handling * feat: add gradient direction support to BlurredContainer for enhanced visual effects * feat: enhance NavigationBar and Theme settings for improved visual consistency * feat: add gradient direction support to BlurredContainer in VideoChat for enhanced visual effects * chore: update .gitignore to include .cursor file for better environment management * fix: update PiP drag gesture conditions to include video paused state for better user experience * refactor: replace ScrollController with SettingsPageLayout in settings screens for improved layout management * refactor: centralize orientation handling by introducing OrientationUtils for improved readability and maintainability * refactor: replace OrientationUtils with ContextExtensions for streamlined context-based access to theme, layout, and API dependencies * refactor: improve video chat UI by adjusting title layout and adding stream info tooltips for better user experience * refactor: adjust titleSpacing in theme and navigation components for improved layout consistency * refactor: update stream info timer handling and overlay management for improved UI responsiveness * refactor: enhance stream info timer logic and overlay visibility management for chat-only mode * refactor: enhance input decoration theme in FrostyThemes for improved visual consistency and responsiveness * refactor: adjust inputDecorationTheme padding in FrostyThemes for improved visual consistency * refactor: enhance video overlay management by including video preview overlay in hideElements for improved UI consistency * refactor: improve chat bottom bar padding and video chat layout for enhanced UI consistency * refactor: adjust chat padding to account for device bottom insets for improved layout consistency * refactor: update text styles in FrostyThemes for improved visual consistency across UI components * refactor: update iOS minimum deployment target to 13.0 for improved compatibility * refactor: adjust chat bottom padding based on emote menu visibility for improved layout consistency * refactor: adjust padding values in StreamsList for improved layout consistency * refactor: replace Padding with AnimatedPadding in Chat for smoother layout transitions refactor: replace Container with AnimatedContainer in BlurredContainer for smoother animations * refactor: remove unnecessary radius property from ProfilePicture in OfflineChannelCard for cleaner code * refactor: enhance chat bottom bar suffix icon to display message delay with tooltip for improved user experience * refactor: update hint text and tooltips in chat bottom bar and search for improved clarity * refactor: simplify notification display logic and enhance chat input behavior for improved user experience * refactor: enhance layout consistency by adjusting spacing in various components across the channel and home screens * refactor: introduce LiveIndicator widget and adjust spacing in channel and video components for improved layout consistency * refactor: remove monospace font family from chat bottom bar for improved text rendering * refactor: reduce notification animation duration and change dismiss direction for improved user experience * refactor: replace VideoBar with StreamInfoBar in video components for improved layout and consistency * refactor: adjust font sizes and spacing in StreamInfoBar for improved layout consistency * refactor: standardize font sizes and update gradient stops in video components for improved visual consistency * refactor: update tooltip padding and background color in theme for improved visual consistency * refactor: enhance tooltip behavior and standardize font sizes in StreamInfoBar and related components for improved visual consistency * refactor: add showThumbnail option to LargeStreamCardSkeletonLoader for improved layout flexibility * refactor: add StreamInfoBarSkeletonLoader for improved layout consistency in stream components * refactor: add shadow effects to icons and text in StreamInfoBar and VideoOverlay for improved visual depth * refactor: update defaultOverlayOpacity to 0.0 for improved overlay behavior * fix: correct stream info text color on overlay * refactor: implement a new color picker dialog with random color generation for enhanced user experience * refactor: adjust gradient colors and stops in VideoOverlay for improved visual consistency * refactor: refine gradient colors and stops in VideoOverlay for enhanced visual clarity * refactor: add isCompact parameter to StreamInfoBar for responsive text sizing * fix: update tooltip background color to use surface color for better contrast * feat: add shared chat mode support in chat store and update StreamInfoBar for visual indication * refactor: disable debug print for IRC messages to reduce log clutter * feat: implement chat color selection feature with user color management in chat settings * refactor: replace color adjustment logic with new contrast-aware utility for chat names * refactor: simplify chat details UI by replacing list tiles with action cards and removing unused clear dialog * refactor: enhance chat details UI by improving time formatting and adding label styling to action cards * refactor: update chat color terminology to 'Username color' for clarity in UI * refactor: enhance chat details UI by introducing active chat modes display and improving layout structure * refactor: improve chat details layout by replacing ListTile with Padding and adding a Divider for better visual separation * refactor: remove chat notifications positioning setting and adjust notification alignment in video chat * refactor: streamline StreamInfoBar component by consolidating offline handling and improving layout for better readability * refactor: enhance StreamInfoBar by adding tooltip for streamer name and improving text overflow handling * refactor: adjust tooltip display duration in StreamInfoBar and update theme configuration * refactor: adjust margin and padding in StreamCard for improved layout consistency * chore: update dependencies in pubspec.yaml and pubspec.lock for Firebase and other packages * template * chore: update iOS platform version to 15.0 and Firebase dependencies to 12.2.0 * refactor: simplify StreamInfoBar layout by reducing nested widgets and improving text color handling * format * feat: enhance Channel model and StreamInfoBar to support offline channel details * feat: add offline indicator and improve StreamInfoBar layout for better offline channel display * fix: adjust icon color opacity in StreamInfoBar for improved visibility * feat: enhance dismissal animation in FrostyPhotoViewDialog to track swipe direction * docs: update copilot instructions for clarity and additional error handling details * refactor: optimize latency tooltip layout and improve offline indicator styling in VideoOverlay * feat: implement shared chat asset fetching and participant management in ChatAssetsStore * refactor: replace Observer with Builder for improved widget rebuilding in VideoOverlay * refactor: update StreamInfoBar border styling and adjust layout in VideoOverlay for improved visual consistency * feat: add showTextShadows property to StreamInfoBar for customizable text shadow display * refactor: adjust layout in VideoOverlay by adding padding to improve spacing and visual consistency * refactor: enhance VideoOverlay gradients and layout for improved visual hierarchy and user experience * refactor: reduce vertical padding in VideoOverlay for improved layout consistency * refactor: remove overlay opacity settings from VideoSettings and SettingsStore for simplification * refactor: improve text overlay transition in VideoChat for better user experience * Revert "refactor: improve text overlay transition in VideoChat for better user experience" This reverts commit fd16ff5ec30ec266157e5c8a9d4a6090c91717f6. * refactor: wrap videoOverlay in ColoredBox for improved layout handling * refactor: optimize animation duration and transition curves in VideoChat for smoother interactions * refactor: dispose searchScrollController in HomeStoreBase to prevent memory leaks * refactor: simplify gradient definitions in VideoOverlay for improved readability and maintainability * refactor: remove 'Offline' text overlay from VideoOverlay for cleaner UI * refactor: add refresh functionality for assets in ChatDetails with loading indicators * refactor: update visibility conditions for uptime, viewer count, and category display in StreamInfoBar * refactor: replace AlertDialog with FrostyDialog for consistent dialog styling across the application * refactor: enhance layout handling in FrostyPageView to prevent overflow during height transitions * refactor: replace ColorPickerDialog with AccentColorPickerDialog for improved color selection experience * refactor: replace theme and accent color settings with dedicated components for improved modularity and readability * refactor: replace ElevatedButton with TextButton for consistent button styling across dialogs * refactor: integrate MobX Observer for reactive state management in settings widgets * refactor: update theme and dialog components for improved styling and consistency * refactor: enhance dialog styling with rounded corners and border in theme configuration * refactor: improve dialog messages for unauthorized access handling * refactor: update bodyLarge text style in theme configuration to include font weight * refactor: standardize Divider usage and adjust theme styles for improved consistency * refactor: adjust Divider properties and theme styles for enhanced visual consistency * chore: remove GEMINI.md file as it is no longer needed for project documentation * refactor: enhance token validation and reconnect logic in AuthBase for improved error handling * format * refactor: integrate landscape cutout settings into VideoChat layout for improved responsiveness * refactor: implement app lifecycle handling in VideoChat and enhance stream info update logic in VideoStore * refactor: update landscape cutout conditionals in VideoChat layout for improved responsiveness * update AGENTS.md * add scrollbar to search * fix scrolling exception * update CLAUDE.md * 5 auth reconnect attemps then log out * increase reply max lines to 2 * simplify and improve reply formatting * add prime icon * better draggable divider * support draggable divider in fullscreen overlay chat * add text shadow in fullscreen chat overlay mode * format * add landscape checks * video store optimization attempts * Dispose WebViewController and remove JavaScript channels properly * Track and cleanup all MutationObservers to prevent accumulation * Throttle latency updates to once per 5 seconds (reduces CPU load) * Add timeout protection and null checks for robustness * Prevent duplicate event listeners on page reloads * double tap divider to reset * Revert "video store optimization attempts" This reverts commit b1df7b0de473543283211a489dca698d9d241857. * optimize video store attempt 2 * Revert "double tap divider to reset" This reverts commit aeb26a433500ec71f822794835e927018ee59e1e. * optimize latency listener to open the menu and check every 20 secconds * more optimizations * hard refresh * abbreviate latency * fix lint * improve hide default overlay * fix chat no longer reconnecting with chat delay * refine chat alerts * fix historical message missing badges and emotes on initial connection * parallelize * revert * add reconnect button inline action * refactor: replace Scrollbar with FrostyScrollbar across chat and settings screens for consistent styling * tweak chat details menu * add scrollbar to release notes, renames for consistency * fix duplicate message case * fix chat delay alerts in auto sync mode * add regex for numeric strings and enhance display name formatting logic * exterminate borders * refactor: simplify active chat modes display in chat details screen * feat: enhance chat input button with delay notification and disable state * fix: wrap chat in SafeArea to prevent UI overflow issues * refactor: remove divider line from video chat and update draggable divider visibility logic * persist overlay in pip mode * fix: update chat delay handling and notifications in chat bottom bar * fix: update chat overlay visibility logic to respect fullscreen settings * tap to show deleted message * fix: prevent accidental chat scrolling when accessing system UI in landscape mode * show latency in portrait * fix: enhance chat delay notifications with dynamic delay time * docs: update CLAUDE.md for improved environment variable instructions and architecture overview * fix: improve chat delay countdown management and message handling * add preliminary release notes * remove agents.md * update lockfile * add initial multi chat feature * add option to persist multi chat tabs * add remove confirmation dialog * improve add chat design * lazy-load tabs * create global assets store to dedupe global asset fetching * improve tab design/styles * update notes * use frosty dialog * update claude md * tweak * add ability to reorder tabs * resolve conflict * merge cleanup * format * update release notes * add chat delay sync completion tracking to prevent countdown re-appearance * add tests * fix * update release notes * bump
2026-01-01 22:28:17 -05:00
var remainingSeconds = _backoffTime;
updateReconnectMessage(
'Reconnecting in ${remainingSeconds}s... (attempt $_retries of $_maxRetries)',
v5 (#463) * migrate to dio * ignore folders * simplify twitch api headers handling * clean up main * simplify logs * optimize profile picture fetching fixes refetches on tab switch * update claude md * refactor irc.dart * update copilot instructions with essential commands and project structure details * implement message sending state management and UI updates * refactor notification handling and add copy-paste functionality in chat * refactor AlertMessage to support vertical layout and optional padding * refactor error messages for consistency and clarity across various components * refactor chat layout to use draggable divider and improve chat width settings * refactor Uptime widget to use SharedTimerService for synchronized updates * refactor search results components to handle null future states gracefully * refactor loading indicators to use skeleton loaders for improved user experience * refactor UI components for improved layout and responsiveness, enhance skeleton loaders, and streamline padding adjustments * refactor: replace manual blur effects with BlurredContainer for consistency and reusability * refactor: enhance JavaScript execution and error handling in WebView components * refactor: replace app bar with blurred container for improved UI consistency across screens * refactor: streamline video chat layout and enhance PiP drag gesture functionality * revert some app bar changes * refactor: implement Picture-in-Picture drag functionality in VideoChat * refactor: pass currentChannelId to IRCMessage and ChatMessage for improved context * fix large thubmnail width * chore: update Gradle and Kotlin plugin versions for improved compatibility * changes from v4.10.0 branch * feat: integrate AnimatedScrollBorder for improved UI responsiveness across various screens * refactor: update SectionHeader styling and improve theme management * feat: add pinned section to StreamsList and enhance skeleton loader padding * feat: add repository guidelines for project structure, coding style, testing, and security * feat: enhance StreamCard UI with BlurredContainer and adjust border width in theme * feat: implement unfocusInput and safeRequestFocus methods to manage text field focus behavior * feat: enhance Picture-in-Picture drag interactions with haptic feedback and smooth animations * refactor: improve code formatting and readability across multiple files * feat: implement picture-in-picture mode toggle and state management for video playback * feat: reset PiP mode state when pausing video playback * feat: add custom app bar with profile picture and stream info for video chat * feat: convert multiple settings screens to use StatefulWidget and add animated scroll borders * feat: update blur configuration for adaptive alpha based on theme * fix: adjust default font size in SectionHeader widget * feat: enhance PiP mode with drag overlay instruction and UI improvements * fix: improve badge rendering with consistent margin and border for current channel * refactor: replace BackdropFilter with BlurredContainer for improved clarity and maintainability * fix: reduce background transparency in Uptime widget for better visibility * feat: enhance photo view dialog with full resolution toggle and blurred background * fix: reset chat delay to 0 when auto sync is enabled and update settings title for clarity * fix: adjust border width in theme to improve consistency * feat: add forceDarkMode option to BlurredContainer for improved theme adaptability * feat: implement offline followed channels feature with UI integration and settings option * fix: increase font size and weight for offline status text for better readability * feat: remove offline pinned channels feature and update related UI components * feat: optimize offline channels loading behavior based on expansion state * fix: improve clarity and consistency in repository guidelines formatting * feat: update full resolution URL handling and button visibility logic * feat: replace app bar with blurred version in chat-only mode and add animated scroll border * feat: refactor video chat layout for improved chat and video display in landscape mode * feat: remove bottom bar visibility setting and adjust chat layout accordingly * fix: simplify condition for displaying offline channels section in following tab * feat: enhance reply thread display with indentation and reply icon * feat: implement showModalBottomSheetWithProperFocus for improved focus handling * feat: add gradient direction support to BlurredContainer for enhanced visual effects * feat: enhance NavigationBar and Theme settings for improved visual consistency * feat: add gradient direction support to BlurredContainer in VideoChat for enhanced visual effects * chore: update .gitignore to include .cursor file for better environment management * fix: update PiP drag gesture conditions to include video paused state for better user experience * refactor: replace ScrollController with SettingsPageLayout in settings screens for improved layout management * refactor: centralize orientation handling by introducing OrientationUtils for improved readability and maintainability * refactor: replace OrientationUtils with ContextExtensions for streamlined context-based access to theme, layout, and API dependencies * refactor: improve video chat UI by adjusting title layout and adding stream info tooltips for better user experience * refactor: adjust titleSpacing in theme and navigation components for improved layout consistency * refactor: update stream info timer handling and overlay management for improved UI responsiveness * refactor: enhance stream info timer logic and overlay visibility management for chat-only mode * refactor: enhance input decoration theme in FrostyThemes for improved visual consistency and responsiveness * refactor: adjust inputDecorationTheme padding in FrostyThemes for improved visual consistency * refactor: enhance video overlay management by including video preview overlay in hideElements for improved UI consistency * refactor: improve chat bottom bar padding and video chat layout for enhanced UI consistency * refactor: adjust chat padding to account for device bottom insets for improved layout consistency * refactor: update text styles in FrostyThemes for improved visual consistency across UI components * refactor: update iOS minimum deployment target to 13.0 for improved compatibility * refactor: adjust chat bottom padding based on emote menu visibility for improved layout consistency * refactor: adjust padding values in StreamsList for improved layout consistency * refactor: replace Padding with AnimatedPadding in Chat for smoother layout transitions refactor: replace Container with AnimatedContainer in BlurredContainer for smoother animations * refactor: remove unnecessary radius property from ProfilePicture in OfflineChannelCard for cleaner code * refactor: enhance chat bottom bar suffix icon to display message delay with tooltip for improved user experience * refactor: update hint text and tooltips in chat bottom bar and search for improved clarity * refactor: simplify notification display logic and enhance chat input behavior for improved user experience * refactor: enhance layout consistency by adjusting spacing in various components across the channel and home screens * refactor: introduce LiveIndicator widget and adjust spacing in channel and video components for improved layout consistency * refactor: remove monospace font family from chat bottom bar for improved text rendering * refactor: reduce notification animation duration and change dismiss direction for improved user experience * refactor: replace VideoBar with StreamInfoBar in video components for improved layout and consistency * refactor: adjust font sizes and spacing in StreamInfoBar for improved layout consistency * refactor: standardize font sizes and update gradient stops in video components for improved visual consistency * refactor: update tooltip padding and background color in theme for improved visual consistency * refactor: enhance tooltip behavior and standardize font sizes in StreamInfoBar and related components for improved visual consistency * refactor: add showThumbnail option to LargeStreamCardSkeletonLoader for improved layout flexibility * refactor: add StreamInfoBarSkeletonLoader for improved layout consistency in stream components * refactor: add shadow effects to icons and text in StreamInfoBar and VideoOverlay for improved visual depth * refactor: update defaultOverlayOpacity to 0.0 for improved overlay behavior * fix: correct stream info text color on overlay * refactor: implement a new color picker dialog with random color generation for enhanced user experience * refactor: adjust gradient colors and stops in VideoOverlay for improved visual consistency * refactor: refine gradient colors and stops in VideoOverlay for enhanced visual clarity * refactor: add isCompact parameter to StreamInfoBar for responsive text sizing * fix: update tooltip background color to use surface color for better contrast * feat: add shared chat mode support in chat store and update StreamInfoBar for visual indication * refactor: disable debug print for IRC messages to reduce log clutter * feat: implement chat color selection feature with user color management in chat settings * refactor: replace color adjustment logic with new contrast-aware utility for chat names * refactor: simplify chat details UI by replacing list tiles with action cards and removing unused clear dialog * refactor: enhance chat details UI by improving time formatting and adding label styling to action cards * refactor: update chat color terminology to 'Username color' for clarity in UI * refactor: enhance chat details UI by introducing active chat modes display and improving layout structure * refactor: improve chat details layout by replacing ListTile with Padding and adding a Divider for better visual separation * refactor: remove chat notifications positioning setting and adjust notification alignment in video chat * refactor: streamline StreamInfoBar component by consolidating offline handling and improving layout for better readability * refactor: enhance StreamInfoBar by adding tooltip for streamer name and improving text overflow handling * refactor: adjust tooltip display duration in StreamInfoBar and update theme configuration * refactor: adjust margin and padding in StreamCard for improved layout consistency * chore: update dependencies in pubspec.yaml and pubspec.lock for Firebase and other packages * template * chore: update iOS platform version to 15.0 and Firebase dependencies to 12.2.0 * refactor: simplify StreamInfoBar layout by reducing nested widgets and improving text color handling * format * feat: enhance Channel model and StreamInfoBar to support offline channel details * feat: add offline indicator and improve StreamInfoBar layout for better offline channel display * fix: adjust icon color opacity in StreamInfoBar for improved visibility * feat: enhance dismissal animation in FrostyPhotoViewDialog to track swipe direction * docs: update copilot instructions for clarity and additional error handling details * refactor: optimize latency tooltip layout and improve offline indicator styling in VideoOverlay * feat: implement shared chat asset fetching and participant management in ChatAssetsStore * refactor: replace Observer with Builder for improved widget rebuilding in VideoOverlay * refactor: update StreamInfoBar border styling and adjust layout in VideoOverlay for improved visual consistency * feat: add showTextShadows property to StreamInfoBar for customizable text shadow display * refactor: adjust layout in VideoOverlay by adding padding to improve spacing and visual consistency * refactor: enhance VideoOverlay gradients and layout for improved visual hierarchy and user experience * refactor: reduce vertical padding in VideoOverlay for improved layout consistency * refactor: remove overlay opacity settings from VideoSettings and SettingsStore for simplification * refactor: improve text overlay transition in VideoChat for better user experience * Revert "refactor: improve text overlay transition in VideoChat for better user experience" This reverts commit fd16ff5ec30ec266157e5c8a9d4a6090c91717f6. * refactor: wrap videoOverlay in ColoredBox for improved layout handling * refactor: optimize animation duration and transition curves in VideoChat for smoother interactions * refactor: dispose searchScrollController in HomeStoreBase to prevent memory leaks * refactor: simplify gradient definitions in VideoOverlay for improved readability and maintainability * refactor: remove 'Offline' text overlay from VideoOverlay for cleaner UI * refactor: add refresh functionality for assets in ChatDetails with loading indicators * refactor: update visibility conditions for uptime, viewer count, and category display in StreamInfoBar * refactor: replace AlertDialog with FrostyDialog for consistent dialog styling across the application * refactor: enhance layout handling in FrostyPageView to prevent overflow during height transitions * refactor: replace ColorPickerDialog with AccentColorPickerDialog for improved color selection experience * refactor: replace theme and accent color settings with dedicated components for improved modularity and readability * refactor: replace ElevatedButton with TextButton for consistent button styling across dialogs * refactor: integrate MobX Observer for reactive state management in settings widgets * refactor: update theme and dialog components for improved styling and consistency * refactor: enhance dialog styling with rounded corners and border in theme configuration * refactor: improve dialog messages for unauthorized access handling * refactor: update bodyLarge text style in theme configuration to include font weight * refactor: standardize Divider usage and adjust theme styles for improved consistency * refactor: adjust Divider properties and theme styles for enhanced visual consistency * chore: remove GEMINI.md file as it is no longer needed for project documentation * refactor: enhance token validation and reconnect logic in AuthBase for improved error handling * format * refactor: integrate landscape cutout settings into VideoChat layout for improved responsiveness * refactor: implement app lifecycle handling in VideoChat and enhance stream info update logic in VideoStore * refactor: update landscape cutout conditionals in VideoChat layout for improved responsiveness * update AGENTS.md * add scrollbar to search * fix scrolling exception * update CLAUDE.md * 5 auth reconnect attemps then log out * increase reply max lines to 2 * simplify and improve reply formatting * add prime icon * better draggable divider * support draggable divider in fullscreen overlay chat * add text shadow in fullscreen chat overlay mode * format * add landscape checks * video store optimization attempts * Dispose WebViewController and remove JavaScript channels properly * Track and cleanup all MutationObservers to prevent accumulation * Throttle latency updates to once per 5 seconds (reduces CPU load) * Add timeout protection and null checks for robustness * Prevent duplicate event listeners on page reloads * double tap divider to reset * Revert "video store optimization attempts" This reverts commit b1df7b0de473543283211a489dca698d9d241857. * optimize video store attempt 2 * Revert "double tap divider to reset" This reverts commit aeb26a433500ec71f822794835e927018ee59e1e. * optimize latency listener to open the menu and check every 20 secconds * more optimizations * hard refresh * abbreviate latency * fix lint * improve hide default overlay * fix chat no longer reconnecting with chat delay * refine chat alerts * fix historical message missing badges and emotes on initial connection * parallelize * revert * add reconnect button inline action * refactor: replace Scrollbar with FrostyScrollbar across chat and settings screens for consistent styling * tweak chat details menu * add scrollbar to release notes, renames for consistency * fix duplicate message case * fix chat delay alerts in auto sync mode * add regex for numeric strings and enhance display name formatting logic * exterminate borders * refactor: simplify active chat modes display in chat details screen * feat: enhance chat input button with delay notification and disable state * fix: wrap chat in SafeArea to prevent UI overflow issues * refactor: remove divider line from video chat and update draggable divider visibility logic * persist overlay in pip mode * fix: update chat delay handling and notifications in chat bottom bar * fix: update chat overlay visibility logic to respect fullscreen settings * tap to show deleted message * fix: prevent accidental chat scrolling when accessing system UI in landscape mode * show latency in portrait * fix: enhance chat delay notifications with dynamic delay time * docs: update CLAUDE.md for improved environment variable instructions and architecture overview * fix: improve chat delay countdown management and message handling * add preliminary release notes * remove agents.md * update lockfile * add initial multi chat feature * add option to persist multi chat tabs * add remove confirmation dialog * improve add chat design * lazy-load tabs * create global assets store to dedupe global asset fetching * improve tab design/styles * update notes * use frosty dialog * update claude md * tweak * add ability to reorder tabs * resolve conflict * merge cleanup * format * update release notes * add chat delay sync completion tracking to prevent countdown re-appearance * add tests * fix * update release notes * bump
2026-01-01 22:28:17 -05:00
);
v5 (#463) * migrate to dio * ignore folders * simplify twitch api headers handling * clean up main * simplify logs * optimize profile picture fetching fixes refetches on tab switch * update claude md * refactor irc.dart * update copilot instructions with essential commands and project structure details * implement message sending state management and UI updates * refactor notification handling and add copy-paste functionality in chat * refactor AlertMessage to support vertical layout and optional padding * refactor error messages for consistency and clarity across various components * refactor chat layout to use draggable divider and improve chat width settings * refactor Uptime widget to use SharedTimerService for synchronized updates * refactor search results components to handle null future states gracefully * refactor loading indicators to use skeleton loaders for improved user experience * refactor UI components for improved layout and responsiveness, enhance skeleton loaders, and streamline padding adjustments * refactor: replace manual blur effects with BlurredContainer for consistency and reusability * refactor: enhance JavaScript execution and error handling in WebView components * refactor: replace app bar with blurred container for improved UI consistency across screens * refactor: streamline video chat layout and enhance PiP drag gesture functionality * revert some app bar changes * refactor: implement Picture-in-Picture drag functionality in VideoChat * refactor: pass currentChannelId to IRCMessage and ChatMessage for improved context * fix large thubmnail width * chore: update Gradle and Kotlin plugin versions for improved compatibility * changes from v4.10.0 branch * feat: integrate AnimatedScrollBorder for improved UI responsiveness across various screens * refactor: update SectionHeader styling and improve theme management * feat: add pinned section to StreamsList and enhance skeleton loader padding * feat: add repository guidelines for project structure, coding style, testing, and security * feat: enhance StreamCard UI with BlurredContainer and adjust border width in theme * feat: implement unfocusInput and safeRequestFocus methods to manage text field focus behavior * feat: enhance Picture-in-Picture drag interactions with haptic feedback and smooth animations * refactor: improve code formatting and readability across multiple files * feat: implement picture-in-picture mode toggle and state management for video playback * feat: reset PiP mode state when pausing video playback * feat: add custom app bar with profile picture and stream info for video chat * feat: convert multiple settings screens to use StatefulWidget and add animated scroll borders * feat: update blur configuration for adaptive alpha based on theme * fix: adjust default font size in SectionHeader widget * feat: enhance PiP mode with drag overlay instruction and UI improvements * fix: improve badge rendering with consistent margin and border for current channel * refactor: replace BackdropFilter with BlurredContainer for improved clarity and maintainability * fix: reduce background transparency in Uptime widget for better visibility * feat: enhance photo view dialog with full resolution toggle and blurred background * fix: reset chat delay to 0 when auto sync is enabled and update settings title for clarity * fix: adjust border width in theme to improve consistency * feat: add forceDarkMode option to BlurredContainer for improved theme adaptability * feat: implement offline followed channels feature with UI integration and settings option * fix: increase font size and weight for offline status text for better readability * feat: remove offline pinned channels feature and update related UI components * feat: optimize offline channels loading behavior based on expansion state * fix: improve clarity and consistency in repository guidelines formatting * feat: update full resolution URL handling and button visibility logic * feat: replace app bar with blurred version in chat-only mode and add animated scroll border * feat: refactor video chat layout for improved chat and video display in landscape mode * feat: remove bottom bar visibility setting and adjust chat layout accordingly * fix: simplify condition for displaying offline channels section in following tab * feat: enhance reply thread display with indentation and reply icon * feat: implement showModalBottomSheetWithProperFocus for improved focus handling * feat: add gradient direction support to BlurredContainer for enhanced visual effects * feat: enhance NavigationBar and Theme settings for improved visual consistency * feat: add gradient direction support to BlurredContainer in VideoChat for enhanced visual effects * chore: update .gitignore to include .cursor file for better environment management * fix: update PiP drag gesture conditions to include video paused state for better user experience * refactor: replace ScrollController with SettingsPageLayout in settings screens for improved layout management * refactor: centralize orientation handling by introducing OrientationUtils for improved readability and maintainability * refactor: replace OrientationUtils with ContextExtensions for streamlined context-based access to theme, layout, and API dependencies * refactor: improve video chat UI by adjusting title layout and adding stream info tooltips for better user experience * refactor: adjust titleSpacing in theme and navigation components for improved layout consistency * refactor: update stream info timer handling and overlay management for improved UI responsiveness * refactor: enhance stream info timer logic and overlay visibility management for chat-only mode * refactor: enhance input decoration theme in FrostyThemes for improved visual consistency and responsiveness * refactor: adjust inputDecorationTheme padding in FrostyThemes for improved visual consistency * refactor: enhance video overlay management by including video preview overlay in hideElements for improved UI consistency * refactor: improve chat bottom bar padding and video chat layout for enhanced UI consistency * refactor: adjust chat padding to account for device bottom insets for improved layout consistency * refactor: update text styles in FrostyThemes for improved visual consistency across UI components * refactor: update iOS minimum deployment target to 13.0 for improved compatibility * refactor: adjust chat bottom padding based on emote menu visibility for improved layout consistency * refactor: adjust padding values in StreamsList for improved layout consistency * refactor: replace Padding with AnimatedPadding in Chat for smoother layout transitions refactor: replace Container with AnimatedContainer in BlurredContainer for smoother animations * refactor: remove unnecessary radius property from ProfilePicture in OfflineChannelCard for cleaner code * refactor: enhance chat bottom bar suffix icon to display message delay with tooltip for improved user experience * refactor: update hint text and tooltips in chat bottom bar and search for improved clarity * refactor: simplify notification display logic and enhance chat input behavior for improved user experience * refactor: enhance layout consistency by adjusting spacing in various components across the channel and home screens * refactor: introduce LiveIndicator widget and adjust spacing in channel and video components for improved layout consistency * refactor: remove monospace font family from chat bottom bar for improved text rendering * refactor: reduce notification animation duration and change dismiss direction for improved user experience * refactor: replace VideoBar with StreamInfoBar in video components for improved layout and consistency * refactor: adjust font sizes and spacing in StreamInfoBar for improved layout consistency * refactor: standardize font sizes and update gradient stops in video components for improved visual consistency * refactor: update tooltip padding and background color in theme for improved visual consistency * refactor: enhance tooltip behavior and standardize font sizes in StreamInfoBar and related components for improved visual consistency * refactor: add showThumbnail option to LargeStreamCardSkeletonLoader for improved layout flexibility * refactor: add StreamInfoBarSkeletonLoader for improved layout consistency in stream components * refactor: add shadow effects to icons and text in StreamInfoBar and VideoOverlay for improved visual depth * refactor: update defaultOverlayOpacity to 0.0 for improved overlay behavior * fix: correct stream info text color on overlay * refactor: implement a new color picker dialog with random color generation for enhanced user experience * refactor: adjust gradient colors and stops in VideoOverlay for improved visual consistency * refactor: refine gradient colors and stops in VideoOverlay for enhanced visual clarity * refactor: add isCompact parameter to StreamInfoBar for responsive text sizing * fix: update tooltip background color to use surface color for better contrast * feat: add shared chat mode support in chat store and update StreamInfoBar for visual indication * refactor: disable debug print for IRC messages to reduce log clutter * feat: implement chat color selection feature with user color management in chat settings * refactor: replace color adjustment logic with new contrast-aware utility for chat names * refactor: simplify chat details UI by replacing list tiles with action cards and removing unused clear dialog * refactor: enhance chat details UI by improving time formatting and adding label styling to action cards * refactor: update chat color terminology to 'Username color' for clarity in UI * refactor: enhance chat details UI by introducing active chat modes display and improving layout structure * refactor: improve chat details layout by replacing ListTile with Padding and adding a Divider for better visual separation * refactor: remove chat notifications positioning setting and adjust notification alignment in video chat * refactor: streamline StreamInfoBar component by consolidating offline handling and improving layout for better readability * refactor: enhance StreamInfoBar by adding tooltip for streamer name and improving text overflow handling * refactor: adjust tooltip display duration in StreamInfoBar and update theme configuration * refactor: adjust margin and padding in StreamCard for improved layout consistency * chore: update dependencies in pubspec.yaml and pubspec.lock for Firebase and other packages * template * chore: update iOS platform version to 15.0 and Firebase dependencies to 12.2.0 * refactor: simplify StreamInfoBar layout by reducing nested widgets and improving text color handling * format * feat: enhance Channel model and StreamInfoBar to support offline channel details * feat: add offline indicator and improve StreamInfoBar layout for better offline channel display * fix: adjust icon color opacity in StreamInfoBar for improved visibility * feat: enhance dismissal animation in FrostyPhotoViewDialog to track swipe direction * docs: update copilot instructions for clarity and additional error handling details * refactor: optimize latency tooltip layout and improve offline indicator styling in VideoOverlay * feat: implement shared chat asset fetching and participant management in ChatAssetsStore * refactor: replace Observer with Builder for improved widget rebuilding in VideoOverlay * refactor: update StreamInfoBar border styling and adjust layout in VideoOverlay for improved visual consistency * feat: add showTextShadows property to StreamInfoBar for customizable text shadow display * refactor: adjust layout in VideoOverlay by adding padding to improve spacing and visual consistency * refactor: enhance VideoOverlay gradients and layout for improved visual hierarchy and user experience * refactor: reduce vertical padding in VideoOverlay for improved layout consistency * refactor: remove overlay opacity settings from VideoSettings and SettingsStore for simplification * refactor: improve text overlay transition in VideoChat for better user experience * Revert "refactor: improve text overlay transition in VideoChat for better user experience" This reverts commit fd16ff5ec30ec266157e5c8a9d4a6090c91717f6. * refactor: wrap videoOverlay in ColoredBox for improved layout handling * refactor: optimize animation duration and transition curves in VideoChat for smoother interactions * refactor: dispose searchScrollController in HomeStoreBase to prevent memory leaks * refactor: simplify gradient definitions in VideoOverlay for improved readability and maintainability * refactor: remove 'Offline' text overlay from VideoOverlay for cleaner UI * refactor: add refresh functionality for assets in ChatDetails with loading indicators * refactor: update visibility conditions for uptime, viewer count, and category display in StreamInfoBar * refactor: replace AlertDialog with FrostyDialog for consistent dialog styling across the application * refactor: enhance layout handling in FrostyPageView to prevent overflow during height transitions * refactor: replace ColorPickerDialog with AccentColorPickerDialog for improved color selection experience * refactor: replace theme and accent color settings with dedicated components for improved modularity and readability * refactor: replace ElevatedButton with TextButton for consistent button styling across dialogs * refactor: integrate MobX Observer for reactive state management in settings widgets * refactor: update theme and dialog components for improved styling and consistency * refactor: enhance dialog styling with rounded corners and border in theme configuration * refactor: improve dialog messages for unauthorized access handling * refactor: update bodyLarge text style in theme configuration to include font weight * refactor: standardize Divider usage and adjust theme styles for improved consistency * refactor: adjust Divider properties and theme styles for enhanced visual consistency * chore: remove GEMINI.md file as it is no longer needed for project documentation * refactor: enhance token validation and reconnect logic in AuthBase for improved error handling * format * refactor: integrate landscape cutout settings into VideoChat layout for improved responsiveness * refactor: implement app lifecycle handling in VideoChat and enhance stream info update logic in VideoStore * refactor: update landscape cutout conditionals in VideoChat layout for improved responsiveness * update AGENTS.md * add scrollbar to search * fix scrolling exception * update CLAUDE.md * 5 auth reconnect attemps then log out * increase reply max lines to 2 * simplify and improve reply formatting * add prime icon * better draggable divider * support draggable divider in fullscreen overlay chat * add text shadow in fullscreen chat overlay mode * format * add landscape checks * video store optimization attempts * Dispose WebViewController and remove JavaScript channels properly * Track and cleanup all MutationObservers to prevent accumulation * Throttle latency updates to once per 5 seconds (reduces CPU load) * Add timeout protection and null checks for robustness * Prevent duplicate event listeners on page reloads * double tap divider to reset * Revert "video store optimization attempts" This reverts commit b1df7b0de473543283211a489dca698d9d241857. * optimize video store attempt 2 * Revert "double tap divider to reset" This reverts commit aeb26a433500ec71f822794835e927018ee59e1e. * optimize latency listener to open the menu and check every 20 secconds * more optimizations * hard refresh * abbreviate latency * fix lint * improve hide default overlay * fix chat no longer reconnecting with chat delay * refine chat alerts * fix historical message missing badges and emotes on initial connection * parallelize * revert * add reconnect button inline action * refactor: replace Scrollbar with FrostyScrollbar across chat and settings screens for consistent styling * tweak chat details menu * add scrollbar to release notes, renames for consistency * fix duplicate message case * fix chat delay alerts in auto sync mode * add regex for numeric strings and enhance display name formatting logic * exterminate borders * refactor: simplify active chat modes display in chat details screen * feat: enhance chat input button with delay notification and disable state * fix: wrap chat in SafeArea to prevent UI overflow issues * refactor: remove divider line from video chat and update draggable divider visibility logic * persist overlay in pip mode * fix: update chat delay handling and notifications in chat bottom bar * fix: update chat overlay visibility logic to respect fullscreen settings * tap to show deleted message * fix: prevent accidental chat scrolling when accessing system UI in landscape mode * show latency in portrait * fix: enhance chat delay notifications with dynamic delay time * docs: update CLAUDE.md for improved environment variable instructions and architecture overview * fix: improve chat delay countdown management and message handling * add preliminary release notes * remove agents.md * update lockfile * add initial multi chat feature * add option to persist multi chat tabs * add remove confirmation dialog * improve add chat design * lazy-load tabs * create global assets store to dedupe global asset fetching * improve tab design/styles * update notes * use frosty dialog * update claude md * tweak * add ability to reorder tabs * resolve conflict * merge cleanup * format * update release notes * add chat delay sync completion tracking to prevent countdown re-appearance * add tests * fix * update release notes * bump
2026-01-01 22:28:17 -05:00
// Update countdown every second
await Future.doWhile(() async {
await Future.delayed(const Duration(seconds: 1));
// Abort countdown if dispose was called
if (_shouldDisconnect) {
if (_reconnectMessage != null) {
final index = _messages.indexOf(_reconnectMessage!);
if (index != -1) _messages.removeAt(index);
_reconnectMessage = null;
}
_reconnectStartTime = null;
return false; // Exit loop
}
remainingSeconds--;
v5 (#463) * migrate to dio * ignore folders * simplify twitch api headers handling * clean up main * simplify logs * optimize profile picture fetching fixes refetches on tab switch * update claude md * refactor irc.dart * update copilot instructions with essential commands and project structure details * implement message sending state management and UI updates * refactor notification handling and add copy-paste functionality in chat * refactor AlertMessage to support vertical layout and optional padding * refactor error messages for consistency and clarity across various components * refactor chat layout to use draggable divider and improve chat width settings * refactor Uptime widget to use SharedTimerService for synchronized updates * refactor search results components to handle null future states gracefully * refactor loading indicators to use skeleton loaders for improved user experience * refactor UI components for improved layout and responsiveness, enhance skeleton loaders, and streamline padding adjustments * refactor: replace manual blur effects with BlurredContainer for consistency and reusability * refactor: enhance JavaScript execution and error handling in WebView components * refactor: replace app bar with blurred container for improved UI consistency across screens * refactor: streamline video chat layout and enhance PiP drag gesture functionality * revert some app bar changes * refactor: implement Picture-in-Picture drag functionality in VideoChat * refactor: pass currentChannelId to IRCMessage and ChatMessage for improved context * fix large thubmnail width * chore: update Gradle and Kotlin plugin versions for improved compatibility * changes from v4.10.0 branch * feat: integrate AnimatedScrollBorder for improved UI responsiveness across various screens * refactor: update SectionHeader styling and improve theme management * feat: add pinned section to StreamsList and enhance skeleton loader padding * feat: add repository guidelines for project structure, coding style, testing, and security * feat: enhance StreamCard UI with BlurredContainer and adjust border width in theme * feat: implement unfocusInput and safeRequestFocus methods to manage text field focus behavior * feat: enhance Picture-in-Picture drag interactions with haptic feedback and smooth animations * refactor: improve code formatting and readability across multiple files * feat: implement picture-in-picture mode toggle and state management for video playback * feat: reset PiP mode state when pausing video playback * feat: add custom app bar with profile picture and stream info for video chat * feat: convert multiple settings screens to use StatefulWidget and add animated scroll borders * feat: update blur configuration for adaptive alpha based on theme * fix: adjust default font size in SectionHeader widget * feat: enhance PiP mode with drag overlay instruction and UI improvements * fix: improve badge rendering with consistent margin and border for current channel * refactor: replace BackdropFilter with BlurredContainer for improved clarity and maintainability * fix: reduce background transparency in Uptime widget for better visibility * feat: enhance photo view dialog with full resolution toggle and blurred background * fix: reset chat delay to 0 when auto sync is enabled and update settings title for clarity * fix: adjust border width in theme to improve consistency * feat: add forceDarkMode option to BlurredContainer for improved theme adaptability * feat: implement offline followed channels feature with UI integration and settings option * fix: increase font size and weight for offline status text for better readability * feat: remove offline pinned channels feature and update related UI components * feat: optimize offline channels loading behavior based on expansion state * fix: improve clarity and consistency in repository guidelines formatting * feat: update full resolution URL handling and button visibility logic * feat: replace app bar with blurred version in chat-only mode and add animated scroll border * feat: refactor video chat layout for improved chat and video display in landscape mode * feat: remove bottom bar visibility setting and adjust chat layout accordingly * fix: simplify condition for displaying offline channels section in following tab * feat: enhance reply thread display with indentation and reply icon * feat: implement showModalBottomSheetWithProperFocus for improved focus handling * feat: add gradient direction support to BlurredContainer for enhanced visual effects * feat: enhance NavigationBar and Theme settings for improved visual consistency * feat: add gradient direction support to BlurredContainer in VideoChat for enhanced visual effects * chore: update .gitignore to include .cursor file for better environment management * fix: update PiP drag gesture conditions to include video paused state for better user experience * refactor: replace ScrollController with SettingsPageLayout in settings screens for improved layout management * refactor: centralize orientation handling by introducing OrientationUtils for improved readability and maintainability * refactor: replace OrientationUtils with ContextExtensions for streamlined context-based access to theme, layout, and API dependencies * refactor: improve video chat UI by adjusting title layout and adding stream info tooltips for better user experience * refactor: adjust titleSpacing in theme and navigation components for improved layout consistency * refactor: update stream info timer handling and overlay management for improved UI responsiveness * refactor: enhance stream info timer logic and overlay visibility management for chat-only mode * refactor: enhance input decoration theme in FrostyThemes for improved visual consistency and responsiveness * refactor: adjust inputDecorationTheme padding in FrostyThemes for improved visual consistency * refactor: enhance video overlay management by including video preview overlay in hideElements for improved UI consistency * refactor: improve chat bottom bar padding and video chat layout for enhanced UI consistency * refactor: adjust chat padding to account for device bottom insets for improved layout consistency * refactor: update text styles in FrostyThemes for improved visual consistency across UI components * refactor: update iOS minimum deployment target to 13.0 for improved compatibility * refactor: adjust chat bottom padding based on emote menu visibility for improved layout consistency * refactor: adjust padding values in StreamsList for improved layout consistency * refactor: replace Padding with AnimatedPadding in Chat for smoother layout transitions refactor: replace Container with AnimatedContainer in BlurredContainer for smoother animations * refactor: remove unnecessary radius property from ProfilePicture in OfflineChannelCard for cleaner code * refactor: enhance chat bottom bar suffix icon to display message delay with tooltip for improved user experience * refactor: update hint text and tooltips in chat bottom bar and search for improved clarity * refactor: simplify notification display logic and enhance chat input behavior for improved user experience * refactor: enhance layout consistency by adjusting spacing in various components across the channel and home screens * refactor: introduce LiveIndicator widget and adjust spacing in channel and video components for improved layout consistency * refactor: remove monospace font family from chat bottom bar for improved text rendering * refactor: reduce notification animation duration and change dismiss direction for improved user experience * refactor: replace VideoBar with StreamInfoBar in video components for improved layout and consistency * refactor: adjust font sizes and spacing in StreamInfoBar for improved layout consistency * refactor: standardize font sizes and update gradient stops in video components for improved visual consistency * refactor: update tooltip padding and background color in theme for improved visual consistency * refactor: enhance tooltip behavior and standardize font sizes in StreamInfoBar and related components for improved visual consistency * refactor: add showThumbnail option to LargeStreamCardSkeletonLoader for improved layout flexibility * refactor: add StreamInfoBarSkeletonLoader for improved layout consistency in stream components * refactor: add shadow effects to icons and text in StreamInfoBar and VideoOverlay for improved visual depth * refactor: update defaultOverlayOpacity to 0.0 for improved overlay behavior * fix: correct stream info text color on overlay * refactor: implement a new color picker dialog with random color generation for enhanced user experience * refactor: adjust gradient colors and stops in VideoOverlay for improved visual consistency * refactor: refine gradient colors and stops in VideoOverlay for enhanced visual clarity * refactor: add isCompact parameter to StreamInfoBar for responsive text sizing * fix: update tooltip background color to use surface color for better contrast * feat: add shared chat mode support in chat store and update StreamInfoBar for visual indication * refactor: disable debug print for IRC messages to reduce log clutter * feat: implement chat color selection feature with user color management in chat settings * refactor: replace color adjustment logic with new contrast-aware utility for chat names * refactor: simplify chat details UI by replacing list tiles with action cards and removing unused clear dialog * refactor: enhance chat details UI by improving time formatting and adding label styling to action cards * refactor: update chat color terminology to 'Username color' for clarity in UI * refactor: enhance chat details UI by introducing active chat modes display and improving layout structure * refactor: improve chat details layout by replacing ListTile with Padding and adding a Divider for better visual separation * refactor: remove chat notifications positioning setting and adjust notification alignment in video chat * refactor: streamline StreamInfoBar component by consolidating offline handling and improving layout for better readability * refactor: enhance StreamInfoBar by adding tooltip for streamer name and improving text overflow handling * refactor: adjust tooltip display duration in StreamInfoBar and update theme configuration * refactor: adjust margin and padding in StreamCard for improved layout consistency * chore: update dependencies in pubspec.yaml and pubspec.lock for Firebase and other packages * template * chore: update iOS platform version to 15.0 and Firebase dependencies to 12.2.0 * refactor: simplify StreamInfoBar layout by reducing nested widgets and improving text color handling * format * feat: enhance Channel model and StreamInfoBar to support offline channel details * feat: add offline indicator and improve StreamInfoBar layout for better offline channel display * fix: adjust icon color opacity in StreamInfoBar for improved visibility * feat: enhance dismissal animation in FrostyPhotoViewDialog to track swipe direction * docs: update copilot instructions for clarity and additional error handling details * refactor: optimize latency tooltip layout and improve offline indicator styling in VideoOverlay * feat: implement shared chat asset fetching and participant management in ChatAssetsStore * refactor: replace Observer with Builder for improved widget rebuilding in VideoOverlay * refactor: update StreamInfoBar border styling and adjust layout in VideoOverlay for improved visual consistency * feat: add showTextShadows property to StreamInfoBar for customizable text shadow display * refactor: adjust layout in VideoOverlay by adding padding to improve spacing and visual consistency * refactor: enhance VideoOverlay gradients and layout for improved visual hierarchy and user experience * refactor: reduce vertical padding in VideoOverlay for improved layout consistency * refactor: remove overlay opacity settings from VideoSettings and SettingsStore for simplification * refactor: improve text overlay transition in VideoChat for better user experience * Revert "refactor: improve text overlay transition in VideoChat for better user experience" This reverts commit fd16ff5ec30ec266157e5c8a9d4a6090c91717f6. * refactor: wrap videoOverlay in ColoredBox for improved layout handling * refactor: optimize animation duration and transition curves in VideoChat for smoother interactions * refactor: dispose searchScrollController in HomeStoreBase to prevent memory leaks * refactor: simplify gradient definitions in VideoOverlay for improved readability and maintainability * refactor: remove 'Offline' text overlay from VideoOverlay for cleaner UI * refactor: add refresh functionality for assets in ChatDetails with loading indicators * refactor: update visibility conditions for uptime, viewer count, and category display in StreamInfoBar * refactor: replace AlertDialog with FrostyDialog for consistent dialog styling across the application * refactor: enhance layout handling in FrostyPageView to prevent overflow during height transitions * refactor: replace ColorPickerDialog with AccentColorPickerDialog for improved color selection experience * refactor: replace theme and accent color settings with dedicated components for improved modularity and readability * refactor: replace ElevatedButton with TextButton for consistent button styling across dialogs * refactor: integrate MobX Observer for reactive state management in settings widgets * refactor: update theme and dialog components for improved styling and consistency * refactor: enhance dialog styling with rounded corners and border in theme configuration * refactor: improve dialog messages for unauthorized access handling * refactor: update bodyLarge text style in theme configuration to include font weight * refactor: standardize Divider usage and adjust theme styles for improved consistency * refactor: adjust Divider properties and theme styles for enhanced visual consistency * chore: remove GEMINI.md file as it is no longer needed for project documentation * refactor: enhance token validation and reconnect logic in AuthBase for improved error handling * format * refactor: integrate landscape cutout settings into VideoChat layout for improved responsiveness * refactor: implement app lifecycle handling in VideoChat and enhance stream info update logic in VideoStore * refactor: update landscape cutout conditionals in VideoChat layout for improved responsiveness * update AGENTS.md * add scrollbar to search * fix scrolling exception * update CLAUDE.md * 5 auth reconnect attemps then log out * increase reply max lines to 2 * simplify and improve reply formatting * add prime icon * better draggable divider * support draggable divider in fullscreen overlay chat * add text shadow in fullscreen chat overlay mode * format * add landscape checks * video store optimization attempts * Dispose WebViewController and remove JavaScript channels properly * Track and cleanup all MutationObservers to prevent accumulation * Throttle latency updates to once per 5 seconds (reduces CPU load) * Add timeout protection and null checks for robustness * Prevent duplicate event listeners on page reloads * double tap divider to reset * Revert "video store optimization attempts" This reverts commit b1df7b0de473543283211a489dca698d9d241857. * optimize video store attempt 2 * Revert "double tap divider to reset" This reverts commit aeb26a433500ec71f822794835e927018ee59e1e. * optimize latency listener to open the menu and check every 20 secconds * more optimizations * hard refresh * abbreviate latency * fix lint * improve hide default overlay * fix chat no longer reconnecting with chat delay * refine chat alerts * fix historical message missing badges and emotes on initial connection * parallelize * revert * add reconnect button inline action * refactor: replace Scrollbar with FrostyScrollbar across chat and settings screens for consistent styling * tweak chat details menu * add scrollbar to release notes, renames for consistency * fix duplicate message case * fix chat delay alerts in auto sync mode * add regex for numeric strings and enhance display name formatting logic * exterminate borders * refactor: simplify active chat modes display in chat details screen * feat: enhance chat input button with delay notification and disable state * fix: wrap chat in SafeArea to prevent UI overflow issues * refactor: remove divider line from video chat and update draggable divider visibility logic * persist overlay in pip mode * fix: update chat delay handling and notifications in chat bottom bar * fix: update chat overlay visibility logic to respect fullscreen settings * tap to show deleted message * fix: prevent accidental chat scrolling when accessing system UI in landscape mode * show latency in portrait * fix: enhance chat delay notifications with dynamic delay time * docs: update CLAUDE.md for improved environment variable instructions and architecture overview * fix: improve chat delay countdown management and message handling * add preliminary release notes * remove agents.md * update lockfile * add initial multi chat feature * add option to persist multi chat tabs * add remove confirmation dialog * improve add chat design * lazy-load tabs * create global assets store to dedupe global asset fetching * improve tab design/styles * update notes * use frosty dialog * update claude md * tweak * add ability to reorder tabs * resolve conflict * merge cleanup * format * update release notes * add chat delay sync completion tracking to prevent countdown re-appearance * add tests * fix * update release notes * bump
2026-01-01 22:28:17 -05:00
if (remainingSeconds > 0) {
updateReconnectMessage(
'Reconnecting in ${remainingSeconds}s... (attempt $_retries of $_maxRetries)',
v5 (#463) * migrate to dio * ignore folders * simplify twitch api headers handling * clean up main * simplify logs * optimize profile picture fetching fixes refetches on tab switch * update claude md * refactor irc.dart * update copilot instructions with essential commands and project structure details * implement message sending state management and UI updates * refactor notification handling and add copy-paste functionality in chat * refactor AlertMessage to support vertical layout and optional padding * refactor error messages for consistency and clarity across various components * refactor chat layout to use draggable divider and improve chat width settings * refactor Uptime widget to use SharedTimerService for synchronized updates * refactor search results components to handle null future states gracefully * refactor loading indicators to use skeleton loaders for improved user experience * refactor UI components for improved layout and responsiveness, enhance skeleton loaders, and streamline padding adjustments * refactor: replace manual blur effects with BlurredContainer for consistency and reusability * refactor: enhance JavaScript execution and error handling in WebView components * refactor: replace app bar with blurred container for improved UI consistency across screens * refactor: streamline video chat layout and enhance PiP drag gesture functionality * revert some app bar changes * refactor: implement Picture-in-Picture drag functionality in VideoChat * refactor: pass currentChannelId to IRCMessage and ChatMessage for improved context * fix large thubmnail width * chore: update Gradle and Kotlin plugin versions for improved compatibility * changes from v4.10.0 branch * feat: integrate AnimatedScrollBorder for improved UI responsiveness across various screens * refactor: update SectionHeader styling and improve theme management * feat: add pinned section to StreamsList and enhance skeleton loader padding * feat: add repository guidelines for project structure, coding style, testing, and security * feat: enhance StreamCard UI with BlurredContainer and adjust border width in theme * feat: implement unfocusInput and safeRequestFocus methods to manage text field focus behavior * feat: enhance Picture-in-Picture drag interactions with haptic feedback and smooth animations * refactor: improve code formatting and readability across multiple files * feat: implement picture-in-picture mode toggle and state management for video playback * feat: reset PiP mode state when pausing video playback * feat: add custom app bar with profile picture and stream info for video chat * feat: convert multiple settings screens to use StatefulWidget and add animated scroll borders * feat: update blur configuration for adaptive alpha based on theme * fix: adjust default font size in SectionHeader widget * feat: enhance PiP mode with drag overlay instruction and UI improvements * fix: improve badge rendering with consistent margin and border for current channel * refactor: replace BackdropFilter with BlurredContainer for improved clarity and maintainability * fix: reduce background transparency in Uptime widget for better visibility * feat: enhance photo view dialog with full resolution toggle and blurred background * fix: reset chat delay to 0 when auto sync is enabled and update settings title for clarity * fix: adjust border width in theme to improve consistency * feat: add forceDarkMode option to BlurredContainer for improved theme adaptability * feat: implement offline followed channels feature with UI integration and settings option * fix: increase font size and weight for offline status text for better readability * feat: remove offline pinned channels feature and update related UI components * feat: optimize offline channels loading behavior based on expansion state * fix: improve clarity and consistency in repository guidelines formatting * feat: update full resolution URL handling and button visibility logic * feat: replace app bar with blurred version in chat-only mode and add animated scroll border * feat: refactor video chat layout for improved chat and video display in landscape mode * feat: remove bottom bar visibility setting and adjust chat layout accordingly * fix: simplify condition for displaying offline channels section in following tab * feat: enhance reply thread display with indentation and reply icon * feat: implement showModalBottomSheetWithProperFocus for improved focus handling * feat: add gradient direction support to BlurredContainer for enhanced visual effects * feat: enhance NavigationBar and Theme settings for improved visual consistency * feat: add gradient direction support to BlurredContainer in VideoChat for enhanced visual effects * chore: update .gitignore to include .cursor file for better environment management * fix: update PiP drag gesture conditions to include video paused state for better user experience * refactor: replace ScrollController with SettingsPageLayout in settings screens for improved layout management * refactor: centralize orientation handling by introducing OrientationUtils for improved readability and maintainability * refactor: replace OrientationUtils with ContextExtensions for streamlined context-based access to theme, layout, and API dependencies * refactor: improve video chat UI by adjusting title layout and adding stream info tooltips for better user experience * refactor: adjust titleSpacing in theme and navigation components for improved layout consistency * refactor: update stream info timer handling and overlay management for improved UI responsiveness * refactor: enhance stream info timer logic and overlay visibility management for chat-only mode * refactor: enhance input decoration theme in FrostyThemes for improved visual consistency and responsiveness * refactor: adjust inputDecorationTheme padding in FrostyThemes for improved visual consistency * refactor: enhance video overlay management by including video preview overlay in hideElements for improved UI consistency * refactor: improve chat bottom bar padding and video chat layout for enhanced UI consistency * refactor: adjust chat padding to account for device bottom insets for improved layout consistency * refactor: update text styles in FrostyThemes for improved visual consistency across UI components * refactor: update iOS minimum deployment target to 13.0 for improved compatibility * refactor: adjust chat bottom padding based on emote menu visibility for improved layout consistency * refactor: adjust padding values in StreamsList for improved layout consistency * refactor: replace Padding with AnimatedPadding in Chat for smoother layout transitions refactor: replace Container with AnimatedContainer in BlurredContainer for smoother animations * refactor: remove unnecessary radius property from ProfilePicture in OfflineChannelCard for cleaner code * refactor: enhance chat bottom bar suffix icon to display message delay with tooltip for improved user experience * refactor: update hint text and tooltips in chat bottom bar and search for improved clarity * refactor: simplify notification display logic and enhance chat input behavior for improved user experience * refactor: enhance layout consistency by adjusting spacing in various components across the channel and home screens * refactor: introduce LiveIndicator widget and adjust spacing in channel and video components for improved layout consistency * refactor: remove monospace font family from chat bottom bar for improved text rendering * refactor: reduce notification animation duration and change dismiss direction for improved user experience * refactor: replace VideoBar with StreamInfoBar in video components for improved layout and consistency * refactor: adjust font sizes and spacing in StreamInfoBar for improved layout consistency * refactor: standardize font sizes and update gradient stops in video components for improved visual consistency * refactor: update tooltip padding and background color in theme for improved visual consistency * refactor: enhance tooltip behavior and standardize font sizes in StreamInfoBar and related components for improved visual consistency * refactor: add showThumbnail option to LargeStreamCardSkeletonLoader for improved layout flexibility * refactor: add StreamInfoBarSkeletonLoader for improved layout consistency in stream components * refactor: add shadow effects to icons and text in StreamInfoBar and VideoOverlay for improved visual depth * refactor: update defaultOverlayOpacity to 0.0 for improved overlay behavior * fix: correct stream info text color on overlay * refactor: implement a new color picker dialog with random color generation for enhanced user experience * refactor: adjust gradient colors and stops in VideoOverlay for improved visual consistency * refactor: refine gradient colors and stops in VideoOverlay for enhanced visual clarity * refactor: add isCompact parameter to StreamInfoBar for responsive text sizing * fix: update tooltip background color to use surface color for better contrast * feat: add shared chat mode support in chat store and update StreamInfoBar for visual indication * refactor: disable debug print for IRC messages to reduce log clutter * feat: implement chat color selection feature with user color management in chat settings * refactor: replace color adjustment logic with new contrast-aware utility for chat names * refactor: simplify chat details UI by replacing list tiles with action cards and removing unused clear dialog * refactor: enhance chat details UI by improving time formatting and adding label styling to action cards * refactor: update chat color terminology to 'Username color' for clarity in UI * refactor: enhance chat details UI by introducing active chat modes display and improving layout structure * refactor: improve chat details layout by replacing ListTile with Padding and adding a Divider for better visual separation * refactor: remove chat notifications positioning setting and adjust notification alignment in video chat * refactor: streamline StreamInfoBar component by consolidating offline handling and improving layout for better readability * refactor: enhance StreamInfoBar by adding tooltip for streamer name and improving text overflow handling * refactor: adjust tooltip display duration in StreamInfoBar and update theme configuration * refactor: adjust margin and padding in StreamCard for improved layout consistency * chore: update dependencies in pubspec.yaml and pubspec.lock for Firebase and other packages * template * chore: update iOS platform version to 15.0 and Firebase dependencies to 12.2.0 * refactor: simplify StreamInfoBar layout by reducing nested widgets and improving text color handling * format * feat: enhance Channel model and StreamInfoBar to support offline channel details * feat: add offline indicator and improve StreamInfoBar layout for better offline channel display * fix: adjust icon color opacity in StreamInfoBar for improved visibility * feat: enhance dismissal animation in FrostyPhotoViewDialog to track swipe direction * docs: update copilot instructions for clarity and additional error handling details * refactor: optimize latency tooltip layout and improve offline indicator styling in VideoOverlay * feat: implement shared chat asset fetching and participant management in ChatAssetsStore * refactor: replace Observer with Builder for improved widget rebuilding in VideoOverlay * refactor: update StreamInfoBar border styling and adjust layout in VideoOverlay for improved visual consistency * feat: add showTextShadows property to StreamInfoBar for customizable text shadow display * refactor: adjust layout in VideoOverlay by adding padding to improve spacing and visual consistency * refactor: enhance VideoOverlay gradients and layout for improved visual hierarchy and user experience * refactor: reduce vertical padding in VideoOverlay for improved layout consistency * refactor: remove overlay opacity settings from VideoSettings and SettingsStore for simplification * refactor: improve text overlay transition in VideoChat for better user experience * Revert "refactor: improve text overlay transition in VideoChat for better user experience" This reverts commit fd16ff5ec30ec266157e5c8a9d4a6090c91717f6. * refactor: wrap videoOverlay in ColoredBox for improved layout handling * refactor: optimize animation duration and transition curves in VideoChat for smoother interactions * refactor: dispose searchScrollController in HomeStoreBase to prevent memory leaks * refactor: simplify gradient definitions in VideoOverlay for improved readability and maintainability * refactor: remove 'Offline' text overlay from VideoOverlay for cleaner UI * refactor: add refresh functionality for assets in ChatDetails with loading indicators * refactor: update visibility conditions for uptime, viewer count, and category display in StreamInfoBar * refactor: replace AlertDialog with FrostyDialog for consistent dialog styling across the application * refactor: enhance layout handling in FrostyPageView to prevent overflow during height transitions * refactor: replace ColorPickerDialog with AccentColorPickerDialog for improved color selection experience * refactor: replace theme and accent color settings with dedicated components for improved modularity and readability * refactor: replace ElevatedButton with TextButton for consistent button styling across dialogs * refactor: integrate MobX Observer for reactive state management in settings widgets * refactor: update theme and dialog components for improved styling and consistency * refactor: enhance dialog styling with rounded corners and border in theme configuration * refactor: improve dialog messages for unauthorized access handling * refactor: update bodyLarge text style in theme configuration to include font weight * refactor: standardize Divider usage and adjust theme styles for improved consistency * refactor: adjust Divider properties and theme styles for enhanced visual consistency * chore: remove GEMINI.md file as it is no longer needed for project documentation * refactor: enhance token validation and reconnect logic in AuthBase for improved error handling * format * refactor: integrate landscape cutout settings into VideoChat layout for improved responsiveness * refactor: implement app lifecycle handling in VideoChat and enhance stream info update logic in VideoStore * refactor: update landscape cutout conditionals in VideoChat layout for improved responsiveness * update AGENTS.md * add scrollbar to search * fix scrolling exception * update CLAUDE.md * 5 auth reconnect attemps then log out * increase reply max lines to 2 * simplify and improve reply formatting * add prime icon * better draggable divider * support draggable divider in fullscreen overlay chat * add text shadow in fullscreen chat overlay mode * format * add landscape checks * video store optimization attempts * Dispose WebViewController and remove JavaScript channels properly * Track and cleanup all MutationObservers to prevent accumulation * Throttle latency updates to once per 5 seconds (reduces CPU load) * Add timeout protection and null checks for robustness * Prevent duplicate event listeners on page reloads * double tap divider to reset * Revert "video store optimization attempts" This reverts commit b1df7b0de473543283211a489dca698d9d241857. * optimize video store attempt 2 * Revert "double tap divider to reset" This reverts commit aeb26a433500ec71f822794835e927018ee59e1e. * optimize latency listener to open the menu and check every 20 secconds * more optimizations * hard refresh * abbreviate latency * fix lint * improve hide default overlay * fix chat no longer reconnecting with chat delay * refine chat alerts * fix historical message missing badges and emotes on initial connection * parallelize * revert * add reconnect button inline action * refactor: replace Scrollbar with FrostyScrollbar across chat and settings screens for consistent styling * tweak chat details menu * add scrollbar to release notes, renames for consistency * fix duplicate message case * fix chat delay alerts in auto sync mode * add regex for numeric strings and enhance display name formatting logic * exterminate borders * refactor: simplify active chat modes display in chat details screen * feat: enhance chat input button with delay notification and disable state * fix: wrap chat in SafeArea to prevent UI overflow issues * refactor: remove divider line from video chat and update draggable divider visibility logic * persist overlay in pip mode * fix: update chat delay handling and notifications in chat bottom bar * fix: update chat overlay visibility logic to respect fullscreen settings * tap to show deleted message * fix: prevent accidental chat scrolling when accessing system UI in landscape mode * show latency in portrait * fix: enhance chat delay notifications with dynamic delay time * docs: update CLAUDE.md for improved environment variable instructions and architecture overview * fix: improve chat delay countdown management and message handling * add preliminary release notes * remove agents.md * update lockfile * add initial multi chat feature * add option to persist multi chat tabs * add remove confirmation dialog * improve add chat design * lazy-load tabs * create global assets store to dedupe global asset fetching * improve tab design/styles * update notes * use frosty dialog * update claude md * tweak * add ability to reorder tabs * resolve conflict * merge cleanup * format * update release notes * add chat delay sync completion tracking to prevent countdown re-appearance * add tests * fix * update release notes * bump
2026-01-01 22:28:17 -05:00
);
return true; // Continue loop
}
return false; // Exit loop
v5 (#463) * migrate to dio * ignore folders * simplify twitch api headers handling * clean up main * simplify logs * optimize profile picture fetching fixes refetches on tab switch * update claude md * refactor irc.dart * update copilot instructions with essential commands and project structure details * implement message sending state management and UI updates * refactor notification handling and add copy-paste functionality in chat * refactor AlertMessage to support vertical layout and optional padding * refactor error messages for consistency and clarity across various components * refactor chat layout to use draggable divider and improve chat width settings * refactor Uptime widget to use SharedTimerService for synchronized updates * refactor search results components to handle null future states gracefully * refactor loading indicators to use skeleton loaders for improved user experience * refactor UI components for improved layout and responsiveness, enhance skeleton loaders, and streamline padding adjustments * refactor: replace manual blur effects with BlurredContainer for consistency and reusability * refactor: enhance JavaScript execution and error handling in WebView components * refactor: replace app bar with blurred container for improved UI consistency across screens * refactor: streamline video chat layout and enhance PiP drag gesture functionality * revert some app bar changes * refactor: implement Picture-in-Picture drag functionality in VideoChat * refactor: pass currentChannelId to IRCMessage and ChatMessage for improved context * fix large thubmnail width * chore: update Gradle and Kotlin plugin versions for improved compatibility * changes from v4.10.0 branch * feat: integrate AnimatedScrollBorder for improved UI responsiveness across various screens * refactor: update SectionHeader styling and improve theme management * feat: add pinned section to StreamsList and enhance skeleton loader padding * feat: add repository guidelines for project structure, coding style, testing, and security * feat: enhance StreamCard UI with BlurredContainer and adjust border width in theme * feat: implement unfocusInput and safeRequestFocus methods to manage text field focus behavior * feat: enhance Picture-in-Picture drag interactions with haptic feedback and smooth animations * refactor: improve code formatting and readability across multiple files * feat: implement picture-in-picture mode toggle and state management for video playback * feat: reset PiP mode state when pausing video playback * feat: add custom app bar with profile picture and stream info for video chat * feat: convert multiple settings screens to use StatefulWidget and add animated scroll borders * feat: update blur configuration for adaptive alpha based on theme * fix: adjust default font size in SectionHeader widget * feat: enhance PiP mode with drag overlay instruction and UI improvements * fix: improve badge rendering with consistent margin and border for current channel * refactor: replace BackdropFilter with BlurredContainer for improved clarity and maintainability * fix: reduce background transparency in Uptime widget for better visibility * feat: enhance photo view dialog with full resolution toggle and blurred background * fix: reset chat delay to 0 when auto sync is enabled and update settings title for clarity * fix: adjust border width in theme to improve consistency * feat: add forceDarkMode option to BlurredContainer for improved theme adaptability * feat: implement offline followed channels feature with UI integration and settings option * fix: increase font size and weight for offline status text for better readability * feat: remove offline pinned channels feature and update related UI components * feat: optimize offline channels loading behavior based on expansion state * fix: improve clarity and consistency in repository guidelines formatting * feat: update full resolution URL handling and button visibility logic * feat: replace app bar with blurred version in chat-only mode and add animated scroll border * feat: refactor video chat layout for improved chat and video display in landscape mode * feat: remove bottom bar visibility setting and adjust chat layout accordingly * fix: simplify condition for displaying offline channels section in following tab * feat: enhance reply thread display with indentation and reply icon * feat: implement showModalBottomSheetWithProperFocus for improved focus handling * feat: add gradient direction support to BlurredContainer for enhanced visual effects * feat: enhance NavigationBar and Theme settings for improved visual consistency * feat: add gradient direction support to BlurredContainer in VideoChat for enhanced visual effects * chore: update .gitignore to include .cursor file for better environment management * fix: update PiP drag gesture conditions to include video paused state for better user experience * refactor: replace ScrollController with SettingsPageLayout in settings screens for improved layout management * refactor: centralize orientation handling by introducing OrientationUtils for improved readability and maintainability * refactor: replace OrientationUtils with ContextExtensions for streamlined context-based access to theme, layout, and API dependencies * refactor: improve video chat UI by adjusting title layout and adding stream info tooltips for better user experience * refactor: adjust titleSpacing in theme and navigation components for improved layout consistency * refactor: update stream info timer handling and overlay management for improved UI responsiveness * refactor: enhance stream info timer logic and overlay visibility management for chat-only mode * refactor: enhance input decoration theme in FrostyThemes for improved visual consistency and responsiveness * refactor: adjust inputDecorationTheme padding in FrostyThemes for improved visual consistency * refactor: enhance video overlay management by including video preview overlay in hideElements for improved UI consistency * refactor: improve chat bottom bar padding and video chat layout for enhanced UI consistency * refactor: adjust chat padding to account for device bottom insets for improved layout consistency * refactor: update text styles in FrostyThemes for improved visual consistency across UI components * refactor: update iOS minimum deployment target to 13.0 for improved compatibility * refactor: adjust chat bottom padding based on emote menu visibility for improved layout consistency * refactor: adjust padding values in StreamsList for improved layout consistency * refactor: replace Padding with AnimatedPadding in Chat for smoother layout transitions refactor: replace Container with AnimatedContainer in BlurredContainer for smoother animations * refactor: remove unnecessary radius property from ProfilePicture in OfflineChannelCard for cleaner code * refactor: enhance chat bottom bar suffix icon to display message delay with tooltip for improved user experience * refactor: update hint text and tooltips in chat bottom bar and search for improved clarity * refactor: simplify notification display logic and enhance chat input behavior for improved user experience * refactor: enhance layout consistency by adjusting spacing in various components across the channel and home screens * refactor: introduce LiveIndicator widget and adjust spacing in channel and video components for improved layout consistency * refactor: remove monospace font family from chat bottom bar for improved text rendering * refactor: reduce notification animation duration and change dismiss direction for improved user experience * refactor: replace VideoBar with StreamInfoBar in video components for improved layout and consistency * refactor: adjust font sizes and spacing in StreamInfoBar for improved layout consistency * refactor: standardize font sizes and update gradient stops in video components for improved visual consistency * refactor: update tooltip padding and background color in theme for improved visual consistency * refactor: enhance tooltip behavior and standardize font sizes in StreamInfoBar and related components for improved visual consistency * refactor: add showThumbnail option to LargeStreamCardSkeletonLoader for improved layout flexibility * refactor: add StreamInfoBarSkeletonLoader for improved layout consistency in stream components * refactor: add shadow effects to icons and text in StreamInfoBar and VideoOverlay for improved visual depth * refactor: update defaultOverlayOpacity to 0.0 for improved overlay behavior * fix: correct stream info text color on overlay * refactor: implement a new color picker dialog with random color generation for enhanced user experience * refactor: adjust gradient colors and stops in VideoOverlay for improved visual consistency * refactor: refine gradient colors and stops in VideoOverlay for enhanced visual clarity * refactor: add isCompact parameter to StreamInfoBar for responsive text sizing * fix: update tooltip background color to use surface color for better contrast * feat: add shared chat mode support in chat store and update StreamInfoBar for visual indication * refactor: disable debug print for IRC messages to reduce log clutter * feat: implement chat color selection feature with user color management in chat settings * refactor: replace color adjustment logic with new contrast-aware utility for chat names * refactor: simplify chat details UI by replacing list tiles with action cards and removing unused clear dialog * refactor: enhance chat details UI by improving time formatting and adding label styling to action cards * refactor: update chat color terminology to 'Username color' for clarity in UI * refactor: enhance chat details UI by introducing active chat modes display and improving layout structure * refactor: improve chat details layout by replacing ListTile with Padding and adding a Divider for better visual separation * refactor: remove chat notifications positioning setting and adjust notification alignment in video chat * refactor: streamline StreamInfoBar component by consolidating offline handling and improving layout for better readability * refactor: enhance StreamInfoBar by adding tooltip for streamer name and improving text overflow handling * refactor: adjust tooltip display duration in StreamInfoBar and update theme configuration * refactor: adjust margin and padding in StreamCard for improved layout consistency * chore: update dependencies in pubspec.yaml and pubspec.lock for Firebase and other packages * template * chore: update iOS platform version to 15.0 and Firebase dependencies to 12.2.0 * refactor: simplify StreamInfoBar layout by reducing nested widgets and improving text color handling * format * feat: enhance Channel model and StreamInfoBar to support offline channel details * feat: add offline indicator and improve StreamInfoBar layout for better offline channel display * fix: adjust icon color opacity in StreamInfoBar for improved visibility * feat: enhance dismissal animation in FrostyPhotoViewDialog to track swipe direction * docs: update copilot instructions for clarity and additional error handling details * refactor: optimize latency tooltip layout and improve offline indicator styling in VideoOverlay * feat: implement shared chat asset fetching and participant management in ChatAssetsStore * refactor: replace Observer with Builder for improved widget rebuilding in VideoOverlay * refactor: update StreamInfoBar border styling and adjust layout in VideoOverlay for improved visual consistency * feat: add showTextShadows property to StreamInfoBar for customizable text shadow display * refactor: adjust layout in VideoOverlay by adding padding to improve spacing and visual consistency * refactor: enhance VideoOverlay gradients and layout for improved visual hierarchy and user experience * refactor: reduce vertical padding in VideoOverlay for improved layout consistency * refactor: remove overlay opacity settings from VideoSettings and SettingsStore for simplification * refactor: improve text overlay transition in VideoChat for better user experience * Revert "refactor: improve text overlay transition in VideoChat for better user experience" This reverts commit fd16ff5ec30ec266157e5c8a9d4a6090c91717f6. * refactor: wrap videoOverlay in ColoredBox for improved layout handling * refactor: optimize animation duration and transition curves in VideoChat for smoother interactions * refactor: dispose searchScrollController in HomeStoreBase to prevent memory leaks * refactor: simplify gradient definitions in VideoOverlay for improved readability and maintainability * refactor: remove 'Offline' text overlay from VideoOverlay for cleaner UI * refactor: add refresh functionality for assets in ChatDetails with loading indicators * refactor: update visibility conditions for uptime, viewer count, and category display in StreamInfoBar * refactor: replace AlertDialog with FrostyDialog for consistent dialog styling across the application * refactor: enhance layout handling in FrostyPageView to prevent overflow during height transitions * refactor: replace ColorPickerDialog with AccentColorPickerDialog for improved color selection experience * refactor: replace theme and accent color settings with dedicated components for improved modularity and readability * refactor: replace ElevatedButton with TextButton for consistent button styling across dialogs * refactor: integrate MobX Observer for reactive state management in settings widgets * refactor: update theme and dialog components for improved styling and consistency * refactor: enhance dialog styling with rounded corners and border in theme configuration * refactor: improve dialog messages for unauthorized access handling * refactor: update bodyLarge text style in theme configuration to include font weight * refactor: standardize Divider usage and adjust theme styles for improved consistency * refactor: adjust Divider properties and theme styles for enhanced visual consistency * chore: remove GEMINI.md file as it is no longer needed for project documentation * refactor: enhance token validation and reconnect logic in AuthBase for improved error handling * format * refactor: integrate landscape cutout settings into VideoChat layout for improved responsiveness * refactor: implement app lifecycle handling in VideoChat and enhance stream info update logic in VideoStore * refactor: update landscape cutout conditionals in VideoChat layout for improved responsiveness * update AGENTS.md * add scrollbar to search * fix scrolling exception * update CLAUDE.md * 5 auth reconnect attemps then log out * increase reply max lines to 2 * simplify and improve reply formatting * add prime icon * better draggable divider * support draggable divider in fullscreen overlay chat * add text shadow in fullscreen chat overlay mode * format * add landscape checks * video store optimization attempts * Dispose WebViewController and remove JavaScript channels properly * Track and cleanup all MutationObservers to prevent accumulation * Throttle latency updates to once per 5 seconds (reduces CPU load) * Add timeout protection and null checks for robustness * Prevent duplicate event listeners on page reloads * double tap divider to reset * Revert "video store optimization attempts" This reverts commit b1df7b0de473543283211a489dca698d9d241857. * optimize video store attempt 2 * Revert "double tap divider to reset" This reverts commit aeb26a433500ec71f822794835e927018ee59e1e. * optimize latency listener to open the menu and check every 20 secconds * more optimizations * hard refresh * abbreviate latency * fix lint * improve hide default overlay * fix chat no longer reconnecting with chat delay * refine chat alerts * fix historical message missing badges and emotes on initial connection * parallelize * revert * add reconnect button inline action * refactor: replace Scrollbar with FrostyScrollbar across chat and settings screens for consistent styling * tweak chat details menu * add scrollbar to release notes, renames for consistency * fix duplicate message case * fix chat delay alerts in auto sync mode * add regex for numeric strings and enhance display name formatting logic * exterminate borders * refactor: simplify active chat modes display in chat details screen * feat: enhance chat input button with delay notification and disable state * fix: wrap chat in SafeArea to prevent UI overflow issues * refactor: remove divider line from video chat and update draggable divider visibility logic * persist overlay in pip mode * fix: update chat delay handling and notifications in chat bottom bar * fix: update chat overlay visibility logic to respect fullscreen settings * tap to show deleted message * fix: prevent accidental chat scrolling when accessing system UI in landscape mode * show latency in portrait * fix: enhance chat delay notifications with dynamic delay time * docs: update CLAUDE.md for improved environment variable instructions and architecture overview * fix: improve chat delay countdown management and message handling * add preliminary release notes * remove agents.md * update lockfile * add initial multi chat feature * add option to persist multi chat tabs * add remove confirmation dialog * improve add chat design * lazy-load tabs * create global assets store to dedupe global asset fetching * improve tab design/styles * update notes * use frosty dialog * update claude md * tweak * add ability to reorder tabs * resolve conflict * merge cleanup * format * update release notes * add chat delay sync completion tracking to prevent countdown re-appearance * add tests * fix * update release notes * bump
2026-01-01 22:28:17 -05:00
});
// Don't proceed with reconnection if disposed
if (_shouldDisconnect) return;
}
// Attempting phase - update same message, no add/remove
updateReconnectMessage(
'Reconnecting... (attempt $_retries of $_maxRetries)',
Update to Material 3/You and other changes/fixes (#280) * Use adaptive refresh indicators * Add new message count indicator in chat * Sync pubspec.lock * Initial migration to material 3 * Restore default bottom sheet style * Remove FrostyListTile and reset styles * Use "Clear" button for all search history * Add `require_trailing_commas` lint rule * Exclude generated files from linter * Use ListView for safe area support in bottom sheet * Add initial dark theme * Make sizing and units consistent * Update onbaording spacings & copy * Migrate to default material 3 buttons * Add headers to chat details bottom sheet * Simplify token log in method * Use bottom sheet for account options * Remove `AnimateScale` widget * Tweak search paddings * Update message spacing divisions * Upgrade packages * Update message spacing divisions * Regenerate splash screens * Update Inter & add google fonts * Add initial material 3 themes * Use adaptive alert dialogs * Revert to oultined inputs * Fix tooltip message * Revert add google_fonts * Improve themes and various styling * Convert categories grid to list * Tweak stream card thumbnail radii * Tweak settings headers * Left align floating snackbars * Tweak search header padding * Fix profile pics occasionally not rounded * Use profile pic for settings button if logged in * Redesign sleep timer * Use divider theme and reduce thickness * Use 0 letter spacing for tab bar titles * Redesign category streams list * Add border to tooltips * Increase category card font weight * Use outlined icon btton for chat user modal * Reduce profile pic radius in search results * Fix scrolll to top button safe area * Add support for reply threads * Reduce tooltip and snackbar border thickness * Rebuild reply threads on new messages * Upgrade packages (iOS) * Reduce font weight for all chat alerts * Use tabbars for pageview * Add dividers everywhere * Revert "Add dividers everywhere" This reverts commit 5f0d349fdbb0afad313cfb88e8c359714b3ea87a. * Remove fill from inputs * Add dividers to settings * Use segmented button for settings list * Add scrollbar to lists with scrollcontroller * Redesign badge/emote tooltip * Remove outline from chat user modal buttons * Remove divider from reply thread * Use tap for chatters list and increase font weight * Constrain emote tooltip width
2023-10-22 18:38:32 -04:00
);
_channelListener?.cancel();
v5 (#463) * migrate to dio * ignore folders * simplify twitch api headers handling * clean up main * simplify logs * optimize profile picture fetching fixes refetches on tab switch * update claude md * refactor irc.dart * update copilot instructions with essential commands and project structure details * implement message sending state management and UI updates * refactor notification handling and add copy-paste functionality in chat * refactor AlertMessage to support vertical layout and optional padding * refactor error messages for consistency and clarity across various components * refactor chat layout to use draggable divider and improve chat width settings * refactor Uptime widget to use SharedTimerService for synchronized updates * refactor search results components to handle null future states gracefully * refactor loading indicators to use skeleton loaders for improved user experience * refactor UI components for improved layout and responsiveness, enhance skeleton loaders, and streamline padding adjustments * refactor: replace manual blur effects with BlurredContainer for consistency and reusability * refactor: enhance JavaScript execution and error handling in WebView components * refactor: replace app bar with blurred container for improved UI consistency across screens * refactor: streamline video chat layout and enhance PiP drag gesture functionality * revert some app bar changes * refactor: implement Picture-in-Picture drag functionality in VideoChat * refactor: pass currentChannelId to IRCMessage and ChatMessage for improved context * fix large thubmnail width * chore: update Gradle and Kotlin plugin versions for improved compatibility * changes from v4.10.0 branch * feat: integrate AnimatedScrollBorder for improved UI responsiveness across various screens * refactor: update SectionHeader styling and improve theme management * feat: add pinned section to StreamsList and enhance skeleton loader padding * feat: add repository guidelines for project structure, coding style, testing, and security * feat: enhance StreamCard UI with BlurredContainer and adjust border width in theme * feat: implement unfocusInput and safeRequestFocus methods to manage text field focus behavior * feat: enhance Picture-in-Picture drag interactions with haptic feedback and smooth animations * refactor: improve code formatting and readability across multiple files * feat: implement picture-in-picture mode toggle and state management for video playback * feat: reset PiP mode state when pausing video playback * feat: add custom app bar with profile picture and stream info for video chat * feat: convert multiple settings screens to use StatefulWidget and add animated scroll borders * feat: update blur configuration for adaptive alpha based on theme * fix: adjust default font size in SectionHeader widget * feat: enhance PiP mode with drag overlay instruction and UI improvements * fix: improve badge rendering with consistent margin and border for current channel * refactor: replace BackdropFilter with BlurredContainer for improved clarity and maintainability * fix: reduce background transparency in Uptime widget for better visibility * feat: enhance photo view dialog with full resolution toggle and blurred background * fix: reset chat delay to 0 when auto sync is enabled and update settings title for clarity * fix: adjust border width in theme to improve consistency * feat: add forceDarkMode option to BlurredContainer for improved theme adaptability * feat: implement offline followed channels feature with UI integration and settings option * fix: increase font size and weight for offline status text for better readability * feat: remove offline pinned channels feature and update related UI components * feat: optimize offline channels loading behavior based on expansion state * fix: improve clarity and consistency in repository guidelines formatting * feat: update full resolution URL handling and button visibility logic * feat: replace app bar with blurred version in chat-only mode and add animated scroll border * feat: refactor video chat layout for improved chat and video display in landscape mode * feat: remove bottom bar visibility setting and adjust chat layout accordingly * fix: simplify condition for displaying offline channels section in following tab * feat: enhance reply thread display with indentation and reply icon * feat: implement showModalBottomSheetWithProperFocus for improved focus handling * feat: add gradient direction support to BlurredContainer for enhanced visual effects * feat: enhance NavigationBar and Theme settings for improved visual consistency * feat: add gradient direction support to BlurredContainer in VideoChat for enhanced visual effects * chore: update .gitignore to include .cursor file for better environment management * fix: update PiP drag gesture conditions to include video paused state for better user experience * refactor: replace ScrollController with SettingsPageLayout in settings screens for improved layout management * refactor: centralize orientation handling by introducing OrientationUtils for improved readability and maintainability * refactor: replace OrientationUtils with ContextExtensions for streamlined context-based access to theme, layout, and API dependencies * refactor: improve video chat UI by adjusting title layout and adding stream info tooltips for better user experience * refactor: adjust titleSpacing in theme and navigation components for improved layout consistency * refactor: update stream info timer handling and overlay management for improved UI responsiveness * refactor: enhance stream info timer logic and overlay visibility management for chat-only mode * refactor: enhance input decoration theme in FrostyThemes for improved visual consistency and responsiveness * refactor: adjust inputDecorationTheme padding in FrostyThemes for improved visual consistency * refactor: enhance video overlay management by including video preview overlay in hideElements for improved UI consistency * refactor: improve chat bottom bar padding and video chat layout for enhanced UI consistency * refactor: adjust chat padding to account for device bottom insets for improved layout consistency * refactor: update text styles in FrostyThemes for improved visual consistency across UI components * refactor: update iOS minimum deployment target to 13.0 for improved compatibility * refactor: adjust chat bottom padding based on emote menu visibility for improved layout consistency * refactor: adjust padding values in StreamsList for improved layout consistency * refactor: replace Padding with AnimatedPadding in Chat for smoother layout transitions refactor: replace Container with AnimatedContainer in BlurredContainer for smoother animations * refactor: remove unnecessary radius property from ProfilePicture in OfflineChannelCard for cleaner code * refactor: enhance chat bottom bar suffix icon to display message delay with tooltip for improved user experience * refactor: update hint text and tooltips in chat bottom bar and search for improved clarity * refactor: simplify notification display logic and enhance chat input behavior for improved user experience * refactor: enhance layout consistency by adjusting spacing in various components across the channel and home screens * refactor: introduce LiveIndicator widget and adjust spacing in channel and video components for improved layout consistency * refactor: remove monospace font family from chat bottom bar for improved text rendering * refactor: reduce notification animation duration and change dismiss direction for improved user experience * refactor: replace VideoBar with StreamInfoBar in video components for improved layout and consistency * refactor: adjust font sizes and spacing in StreamInfoBar for improved layout consistency * refactor: standardize font sizes and update gradient stops in video components for improved visual consistency * refactor: update tooltip padding and background color in theme for improved visual consistency * refactor: enhance tooltip behavior and standardize font sizes in StreamInfoBar and related components for improved visual consistency * refactor: add showThumbnail option to LargeStreamCardSkeletonLoader for improved layout flexibility * refactor: add StreamInfoBarSkeletonLoader for improved layout consistency in stream components * refactor: add shadow effects to icons and text in StreamInfoBar and VideoOverlay for improved visual depth * refactor: update defaultOverlayOpacity to 0.0 for improved overlay behavior * fix: correct stream info text color on overlay * refactor: implement a new color picker dialog with random color generation for enhanced user experience * refactor: adjust gradient colors and stops in VideoOverlay for improved visual consistency * refactor: refine gradient colors and stops in VideoOverlay for enhanced visual clarity * refactor: add isCompact parameter to StreamInfoBar for responsive text sizing * fix: update tooltip background color to use surface color for better contrast * feat: add shared chat mode support in chat store and update StreamInfoBar for visual indication * refactor: disable debug print for IRC messages to reduce log clutter * feat: implement chat color selection feature with user color management in chat settings * refactor: replace color adjustment logic with new contrast-aware utility for chat names * refactor: simplify chat details UI by replacing list tiles with action cards and removing unused clear dialog * refactor: enhance chat details UI by improving time formatting and adding label styling to action cards * refactor: update chat color terminology to 'Username color' for clarity in UI * refactor: enhance chat details UI by introducing active chat modes display and improving layout structure * refactor: improve chat details layout by replacing ListTile with Padding and adding a Divider for better visual separation * refactor: remove chat notifications positioning setting and adjust notification alignment in video chat * refactor: streamline StreamInfoBar component by consolidating offline handling and improving layout for better readability * refactor: enhance StreamInfoBar by adding tooltip for streamer name and improving text overflow handling * refactor: adjust tooltip display duration in StreamInfoBar and update theme configuration * refactor: adjust margin and padding in StreamCard for improved layout consistency * chore: update dependencies in pubspec.yaml and pubspec.lock for Firebase and other packages * template * chore: update iOS platform version to 15.0 and Firebase dependencies to 12.2.0 * refactor: simplify StreamInfoBar layout by reducing nested widgets and improving text color handling * format * feat: enhance Channel model and StreamInfoBar to support offline channel details * feat: add offline indicator and improve StreamInfoBar layout for better offline channel display * fix: adjust icon color opacity in StreamInfoBar for improved visibility * feat: enhance dismissal animation in FrostyPhotoViewDialog to track swipe direction * docs: update copilot instructions for clarity and additional error handling details * refactor: optimize latency tooltip layout and improve offline indicator styling in VideoOverlay * feat: implement shared chat asset fetching and participant management in ChatAssetsStore * refactor: replace Observer with Builder for improved widget rebuilding in VideoOverlay * refactor: update StreamInfoBar border styling and adjust layout in VideoOverlay for improved visual consistency * feat: add showTextShadows property to StreamInfoBar for customizable text shadow display * refactor: adjust layout in VideoOverlay by adding padding to improve spacing and visual consistency * refactor: enhance VideoOverlay gradients and layout for improved visual hierarchy and user experience * refactor: reduce vertical padding in VideoOverlay for improved layout consistency * refactor: remove overlay opacity settings from VideoSettings and SettingsStore for simplification * refactor: improve text overlay transition in VideoChat for better user experience * Revert "refactor: improve text overlay transition in VideoChat for better user experience" This reverts commit fd16ff5ec30ec266157e5c8a9d4a6090c91717f6. * refactor: wrap videoOverlay in ColoredBox for improved layout handling * refactor: optimize animation duration and transition curves in VideoChat for smoother interactions * refactor: dispose searchScrollController in HomeStoreBase to prevent memory leaks * refactor: simplify gradient definitions in VideoOverlay for improved readability and maintainability * refactor: remove 'Offline' text overlay from VideoOverlay for cleaner UI * refactor: add refresh functionality for assets in ChatDetails with loading indicators * refactor: update visibility conditions for uptime, viewer count, and category display in StreamInfoBar * refactor: replace AlertDialog with FrostyDialog for consistent dialog styling across the application * refactor: enhance layout handling in FrostyPageView to prevent overflow during height transitions * refactor: replace ColorPickerDialog with AccentColorPickerDialog for improved color selection experience * refactor: replace theme and accent color settings with dedicated components for improved modularity and readability * refactor: replace ElevatedButton with TextButton for consistent button styling across dialogs * refactor: integrate MobX Observer for reactive state management in settings widgets * refactor: update theme and dialog components for improved styling and consistency * refactor: enhance dialog styling with rounded corners and border in theme configuration * refactor: improve dialog messages for unauthorized access handling * refactor: update bodyLarge text style in theme configuration to include font weight * refactor: standardize Divider usage and adjust theme styles for improved consistency * refactor: adjust Divider properties and theme styles for enhanced visual consistency * chore: remove GEMINI.md file as it is no longer needed for project documentation * refactor: enhance token validation and reconnect logic in AuthBase for improved error handling * format * refactor: integrate landscape cutout settings into VideoChat layout for improved responsiveness * refactor: implement app lifecycle handling in VideoChat and enhance stream info update logic in VideoStore * refactor: update landscape cutout conditionals in VideoChat layout for improved responsiveness * update AGENTS.md * add scrollbar to search * fix scrolling exception * update CLAUDE.md * 5 auth reconnect attemps then log out * increase reply max lines to 2 * simplify and improve reply formatting * add prime icon * better draggable divider * support draggable divider in fullscreen overlay chat * add text shadow in fullscreen chat overlay mode * format * add landscape checks * video store optimization attempts * Dispose WebViewController and remove JavaScript channels properly * Track and cleanup all MutationObservers to prevent accumulation * Throttle latency updates to once per 5 seconds (reduces CPU load) * Add timeout protection and null checks for robustness * Prevent duplicate event listeners on page reloads * double tap divider to reset * Revert "video store optimization attempts" This reverts commit b1df7b0de473543283211a489dca698d9d241857. * optimize video store attempt 2 * Revert "double tap divider to reset" This reverts commit aeb26a433500ec71f822794835e927018ee59e1e. * optimize latency listener to open the menu and check every 20 secconds * more optimizations * hard refresh * abbreviate latency * fix lint * improve hide default overlay * fix chat no longer reconnecting with chat delay * refine chat alerts * fix historical message missing badges and emotes on initial connection * parallelize * revert * add reconnect button inline action * refactor: replace Scrollbar with FrostyScrollbar across chat and settings screens for consistent styling * tweak chat details menu * add scrollbar to release notes, renames for consistency * fix duplicate message case * fix chat delay alerts in auto sync mode * add regex for numeric strings and enhance display name formatting logic * exterminate borders * refactor: simplify active chat modes display in chat details screen * feat: enhance chat input button with delay notification and disable state * fix: wrap chat in SafeArea to prevent UI overflow issues * refactor: remove divider line from video chat and update draggable divider visibility logic * persist overlay in pip mode * fix: update chat delay handling and notifications in chat bottom bar * fix: update chat overlay visibility logic to respect fullscreen settings * tap to show deleted message * fix: prevent accidental chat scrolling when accessing system UI in landscape mode * show latency in portrait * fix: enhance chat delay notifications with dynamic delay time * docs: update CLAUDE.md for improved environment variable instructions and architecture overview * fix: improve chat delay countdown management and message handling * add preliminary release notes * remove agents.md * update lockfile * add initial multi chat feature * add option to persist multi chat tabs * add remove confirmation dialog * improve add chat design * lazy-load tabs * create global assets store to dedupe global asset fetching * improve tab design/styles * update notes * use frosty dialog * update claude md * tweak * add ability to reorder tabs * resolve conflict * merge cleanup * format * update release notes * add chat delay sync completion tracking to prevent countdown re-appearance * add tests * fix * update release notes * bump
2026-01-01 22:28:17 -05:00
connectToChat(isReconnect: true);
},
);
// The list of messages sent to the IRC WebSocket channel to connect and join.
final commands = [
// Request the tags and commands capabilities.
// This will display tags containing metadata along with each IRC message.
'CAP REQ :twitch.tv/tags twitch.tv/commands',
// The OAuth token in order to connect, default or user token.
'PASS oauth:${auth.token}',
// The nickname for the connecting user. 'justinfan888' is the Twitch default if not logged in.
'NICK ${auth.isLoggedIn ? auth.user.details!.login : 'justinfan888'}',
// Join the desired channel's room.
'JOIN #$channelName',
];
// Send each command in order.
for (final command in commands) {
_channel?.sink.add(command);
}
}
@action
void addMessages() {
_flushDueDelayedCallbacks();
// Hold messages back while the user is touching the list so the pressed
// message stays put (and alive) for the duration of a long-press.
if (!_autoScroll || _interactionPause.isPaused || messageBuffer.isEmpty) {
return;
}
Update to Material 3/You and other changes/fixes (#280) * Use adaptive refresh indicators * Add new message count indicator in chat * Sync pubspec.lock * Initial migration to material 3 * Restore default bottom sheet style * Remove FrostyListTile and reset styles * Use "Clear" button for all search history * Add `require_trailing_commas` lint rule * Exclude generated files from linter * Use ListView for safe area support in bottom sheet * Add initial dark theme * Make sizing and units consistent * Update onbaording spacings & copy * Migrate to default material 3 buttons * Add headers to chat details bottom sheet * Simplify token log in method * Use bottom sheet for account options * Remove `AnimateScale` widget * Tweak search paddings * Update message spacing divisions * Upgrade packages * Update message spacing divisions * Regenerate splash screens * Update Inter & add google fonts * Add initial material 3 themes * Use adaptive alert dialogs * Revert to oultined inputs * Fix tooltip message * Revert add google_fonts * Improve themes and various styling * Convert categories grid to list * Tweak stream card thumbnail radii * Tweak settings headers * Left align floating snackbars * Tweak search header padding * Fix profile pics occasionally not rounded * Use profile pic for settings button if logged in * Redesign sleep timer * Use divider theme and reduce thickness * Use 0 letter spacing for tab bar titles * Redesign category streams list * Add border to tooltips * Increase category card font weight * Use outlined icon btton for chat user modal * Reduce profile pic radius in search results * Fix scrolll to top button safe area * Add support for reply threads * Reduce tooltip and snackbar border thickness * Rebuild reply threads on new messages * Upgrade packages (iOS) * Reduce font weight for all chat alerts * Use tabbars for pageview * Add dividers everywhere * Revert "Add dividers everywhere" This reverts commit 5f0d349fdbb0afad313cfb88e8c359714b3ea87a. * Remove fill from inputs * Add dividers to settings * Use segmented button for settings list * Add scrollbar to lists with scrollcontroller * Redesign badge/emote tooltip * Remove outline from chat user modal buttons * Remove divider from reply thread * Use tap for chatters list and increase font weight * Constrain emote tooltip width
2023-10-22 18:38:32 -04:00
_messages.addAll(messageBuffer);
messageBuffer.clear();
}
v5 (#463) * migrate to dio * ignore folders * simplify twitch api headers handling * clean up main * simplify logs * optimize profile picture fetching fixes refetches on tab switch * update claude md * refactor irc.dart * update copilot instructions with essential commands and project structure details * implement message sending state management and UI updates * refactor notification handling and add copy-paste functionality in chat * refactor AlertMessage to support vertical layout and optional padding * refactor error messages for consistency and clarity across various components * refactor chat layout to use draggable divider and improve chat width settings * refactor Uptime widget to use SharedTimerService for synchronized updates * refactor search results components to handle null future states gracefully * refactor loading indicators to use skeleton loaders for improved user experience * refactor UI components for improved layout and responsiveness, enhance skeleton loaders, and streamline padding adjustments * refactor: replace manual blur effects with BlurredContainer for consistency and reusability * refactor: enhance JavaScript execution and error handling in WebView components * refactor: replace app bar with blurred container for improved UI consistency across screens * refactor: streamline video chat layout and enhance PiP drag gesture functionality * revert some app bar changes * refactor: implement Picture-in-Picture drag functionality in VideoChat * refactor: pass currentChannelId to IRCMessage and ChatMessage for improved context * fix large thubmnail width * chore: update Gradle and Kotlin plugin versions for improved compatibility * changes from v4.10.0 branch * feat: integrate AnimatedScrollBorder for improved UI responsiveness across various screens * refactor: update SectionHeader styling and improve theme management * feat: add pinned section to StreamsList and enhance skeleton loader padding * feat: add repository guidelines for project structure, coding style, testing, and security * feat: enhance StreamCard UI with BlurredContainer and adjust border width in theme * feat: implement unfocusInput and safeRequestFocus methods to manage text field focus behavior * feat: enhance Picture-in-Picture drag interactions with haptic feedback and smooth animations * refactor: improve code formatting and readability across multiple files * feat: implement picture-in-picture mode toggle and state management for video playback * feat: reset PiP mode state when pausing video playback * feat: add custom app bar with profile picture and stream info for video chat * feat: convert multiple settings screens to use StatefulWidget and add animated scroll borders * feat: update blur configuration for adaptive alpha based on theme * fix: adjust default font size in SectionHeader widget * feat: enhance PiP mode with drag overlay instruction and UI improvements * fix: improve badge rendering with consistent margin and border for current channel * refactor: replace BackdropFilter with BlurredContainer for improved clarity and maintainability * fix: reduce background transparency in Uptime widget for better visibility * feat: enhance photo view dialog with full resolution toggle and blurred background * fix: reset chat delay to 0 when auto sync is enabled and update settings title for clarity * fix: adjust border width in theme to improve consistency * feat: add forceDarkMode option to BlurredContainer for improved theme adaptability * feat: implement offline followed channels feature with UI integration and settings option * fix: increase font size and weight for offline status text for better readability * feat: remove offline pinned channels feature and update related UI components * feat: optimize offline channels loading behavior based on expansion state * fix: improve clarity and consistency in repository guidelines formatting * feat: update full resolution URL handling and button visibility logic * feat: replace app bar with blurred version in chat-only mode and add animated scroll border * feat: refactor video chat layout for improved chat and video display in landscape mode * feat: remove bottom bar visibility setting and adjust chat layout accordingly * fix: simplify condition for displaying offline channels section in following tab * feat: enhance reply thread display with indentation and reply icon * feat: implement showModalBottomSheetWithProperFocus for improved focus handling * feat: add gradient direction support to BlurredContainer for enhanced visual effects * feat: enhance NavigationBar and Theme settings for improved visual consistency * feat: add gradient direction support to BlurredContainer in VideoChat for enhanced visual effects * chore: update .gitignore to include .cursor file for better environment management * fix: update PiP drag gesture conditions to include video paused state for better user experience * refactor: replace ScrollController with SettingsPageLayout in settings screens for improved layout management * refactor: centralize orientation handling by introducing OrientationUtils for improved readability and maintainability * refactor: replace OrientationUtils with ContextExtensions for streamlined context-based access to theme, layout, and API dependencies * refactor: improve video chat UI by adjusting title layout and adding stream info tooltips for better user experience * refactor: adjust titleSpacing in theme and navigation components for improved layout consistency * refactor: update stream info timer handling and overlay management for improved UI responsiveness * refactor: enhance stream info timer logic and overlay visibility management for chat-only mode * refactor: enhance input decoration theme in FrostyThemes for improved visual consistency and responsiveness * refactor: adjust inputDecorationTheme padding in FrostyThemes for improved visual consistency * refactor: enhance video overlay management by including video preview overlay in hideElements for improved UI consistency * refactor: improve chat bottom bar padding and video chat layout for enhanced UI consistency * refactor: adjust chat padding to account for device bottom insets for improved layout consistency * refactor: update text styles in FrostyThemes for improved visual consistency across UI components * refactor: update iOS minimum deployment target to 13.0 for improved compatibility * refactor: adjust chat bottom padding based on emote menu visibility for improved layout consistency * refactor: adjust padding values in StreamsList for improved layout consistency * refactor: replace Padding with AnimatedPadding in Chat for smoother layout transitions refactor: replace Container with AnimatedContainer in BlurredContainer for smoother animations * refactor: remove unnecessary radius property from ProfilePicture in OfflineChannelCard for cleaner code * refactor: enhance chat bottom bar suffix icon to display message delay with tooltip for improved user experience * refactor: update hint text and tooltips in chat bottom bar and search for improved clarity * refactor: simplify notification display logic and enhance chat input behavior for improved user experience * refactor: enhance layout consistency by adjusting spacing in various components across the channel and home screens * refactor: introduce LiveIndicator widget and adjust spacing in channel and video components for improved layout consistency * refactor: remove monospace font family from chat bottom bar for improved text rendering * refactor: reduce notification animation duration and change dismiss direction for improved user experience * refactor: replace VideoBar with StreamInfoBar in video components for improved layout and consistency * refactor: adjust font sizes and spacing in StreamInfoBar for improved layout consistency * refactor: standardize font sizes and update gradient stops in video components for improved visual consistency * refactor: update tooltip padding and background color in theme for improved visual consistency * refactor: enhance tooltip behavior and standardize font sizes in StreamInfoBar and related components for improved visual consistency * refactor: add showThumbnail option to LargeStreamCardSkeletonLoader for improved layout flexibility * refactor: add StreamInfoBarSkeletonLoader for improved layout consistency in stream components * refactor: add shadow effects to icons and text in StreamInfoBar and VideoOverlay for improved visual depth * refactor: update defaultOverlayOpacity to 0.0 for improved overlay behavior * fix: correct stream info text color on overlay * refactor: implement a new color picker dialog with random color generation for enhanced user experience * refactor: adjust gradient colors and stops in VideoOverlay for improved visual consistency * refactor: refine gradient colors and stops in VideoOverlay for enhanced visual clarity * refactor: add isCompact parameter to StreamInfoBar for responsive text sizing * fix: update tooltip background color to use surface color for better contrast * feat: add shared chat mode support in chat store and update StreamInfoBar for visual indication * refactor: disable debug print for IRC messages to reduce log clutter * feat: implement chat color selection feature with user color management in chat settings * refactor: replace color adjustment logic with new contrast-aware utility for chat names * refactor: simplify chat details UI by replacing list tiles with action cards and removing unused clear dialog * refactor: enhance chat details UI by improving time formatting and adding label styling to action cards * refactor: update chat color terminology to 'Username color' for clarity in UI * refactor: enhance chat details UI by introducing active chat modes display and improving layout structure * refactor: improve chat details layout by replacing ListTile with Padding and adding a Divider for better visual separation * refactor: remove chat notifications positioning setting and adjust notification alignment in video chat * refactor: streamline StreamInfoBar component by consolidating offline handling and improving layout for better readability * refactor: enhance StreamInfoBar by adding tooltip for streamer name and improving text overflow handling * refactor: adjust tooltip display duration in StreamInfoBar and update theme configuration * refactor: adjust margin and padding in StreamCard for improved layout consistency * chore: update dependencies in pubspec.yaml and pubspec.lock for Firebase and other packages * template * chore: update iOS platform version to 15.0 and Firebase dependencies to 12.2.0 * refactor: simplify StreamInfoBar layout by reducing nested widgets and improving text color handling * format * feat: enhance Channel model and StreamInfoBar to support offline channel details * feat: add offline indicator and improve StreamInfoBar layout for better offline channel display * fix: adjust icon color opacity in StreamInfoBar for improved visibility * feat: enhance dismissal animation in FrostyPhotoViewDialog to track swipe direction * docs: update copilot instructions for clarity and additional error handling details * refactor: optimize latency tooltip layout and improve offline indicator styling in VideoOverlay * feat: implement shared chat asset fetching and participant management in ChatAssetsStore * refactor: replace Observer with Builder for improved widget rebuilding in VideoOverlay * refactor: update StreamInfoBar border styling and adjust layout in VideoOverlay for improved visual consistency * feat: add showTextShadows property to StreamInfoBar for customizable text shadow display * refactor: adjust layout in VideoOverlay by adding padding to improve spacing and visual consistency * refactor: enhance VideoOverlay gradients and layout for improved visual hierarchy and user experience * refactor: reduce vertical padding in VideoOverlay for improved layout consistency * refactor: remove overlay opacity settings from VideoSettings and SettingsStore for simplification * refactor: improve text overlay transition in VideoChat for better user experience * Revert "refactor: improve text overlay transition in VideoChat for better user experience" This reverts commit fd16ff5ec30ec266157e5c8a9d4a6090c91717f6. * refactor: wrap videoOverlay in ColoredBox for improved layout handling * refactor: optimize animation duration and transition curves in VideoChat for smoother interactions * refactor: dispose searchScrollController in HomeStoreBase to prevent memory leaks * refactor: simplify gradient definitions in VideoOverlay for improved readability and maintainability * refactor: remove 'Offline' text overlay from VideoOverlay for cleaner UI * refactor: add refresh functionality for assets in ChatDetails with loading indicators * refactor: update visibility conditions for uptime, viewer count, and category display in StreamInfoBar * refactor: replace AlertDialog with FrostyDialog for consistent dialog styling across the application * refactor: enhance layout handling in FrostyPageView to prevent overflow during height transitions * refactor: replace ColorPickerDialog with AccentColorPickerDialog for improved color selection experience * refactor: replace theme and accent color settings with dedicated components for improved modularity and readability * refactor: replace ElevatedButton with TextButton for consistent button styling across dialogs * refactor: integrate MobX Observer for reactive state management in settings widgets * refactor: update theme and dialog components for improved styling and consistency * refactor: enhance dialog styling with rounded corners and border in theme configuration * refactor: improve dialog messages for unauthorized access handling * refactor: update bodyLarge text style in theme configuration to include font weight * refactor: standardize Divider usage and adjust theme styles for improved consistency * refactor: adjust Divider properties and theme styles for enhanced visual consistency * chore: remove GEMINI.md file as it is no longer needed for project documentation * refactor: enhance token validation and reconnect logic in AuthBase for improved error handling * format * refactor: integrate landscape cutout settings into VideoChat layout for improved responsiveness * refactor: implement app lifecycle handling in VideoChat and enhance stream info update logic in VideoStore * refactor: update landscape cutout conditionals in VideoChat layout for improved responsiveness * update AGENTS.md * add scrollbar to search * fix scrolling exception * update CLAUDE.md * 5 auth reconnect attemps then log out * increase reply max lines to 2 * simplify and improve reply formatting * add prime icon * better draggable divider * support draggable divider in fullscreen overlay chat * add text shadow in fullscreen chat overlay mode * format * add landscape checks * video store optimization attempts * Dispose WebViewController and remove JavaScript channels properly * Track and cleanup all MutationObservers to prevent accumulation * Throttle latency updates to once per 5 seconds (reduces CPU load) * Add timeout protection and null checks for robustness * Prevent duplicate event listeners on page reloads * double tap divider to reset * Revert "video store optimization attempts" This reverts commit b1df7b0de473543283211a489dca698d9d241857. * optimize video store attempt 2 * Revert "double tap divider to reset" This reverts commit aeb26a433500ec71f822794835e927018ee59e1e. * optimize latency listener to open the menu and check every 20 secconds * more optimizations * hard refresh * abbreviate latency * fix lint * improve hide default overlay * fix chat no longer reconnecting with chat delay * refine chat alerts * fix historical message missing badges and emotes on initial connection * parallelize * revert * add reconnect button inline action * refactor: replace Scrollbar with FrostyScrollbar across chat and settings screens for consistent styling * tweak chat details menu * add scrollbar to release notes, renames for consistency * fix duplicate message case * fix chat delay alerts in auto sync mode * add regex for numeric strings and enhance display name formatting logic * exterminate borders * refactor: simplify active chat modes display in chat details screen * feat: enhance chat input button with delay notification and disable state * fix: wrap chat in SafeArea to prevent UI overflow issues * refactor: remove divider line from video chat and update draggable divider visibility logic * persist overlay in pip mode * fix: update chat delay handling and notifications in chat bottom bar * fix: update chat overlay visibility logic to respect fullscreen settings * tap to show deleted message * fix: prevent accidental chat scrolling when accessing system UI in landscape mode * show latency in portrait * fix: enhance chat delay notifications with dynamic delay time * docs: update CLAUDE.md for improved environment variable instructions and architecture overview * fix: improve chat delay countdown management and message handling * add preliminary release notes * remove agents.md * update lockfile * add initial multi chat feature * add option to persist multi chat tabs * add remove confirmation dialog * improve add chat design * lazy-load tabs * create global assets store to dedupe global asset fetching * improve tab design/styles * update notes * use frosty dialog * update claude md * tweak * add ability to reorder tabs * resolve conflict * merge cleanup * format * update release notes * add chat delay sync completion tracking to prevent countdown re-appearance * add tests * fix * update release notes * bump
2026-01-01 22:28:17 -05:00
/// Cancels the chat delay countdown and removes the countdown message.
@action
void _cancelChatDelayCountdown() {
_chatDelayCountdownTimer?.cancel();
_chatDelayCountdownTimer = null;
// Remove the countdown message if it exists
if (_countdownMessage != null) {
_messages.remove(_countdownMessage);
_countdownMessage = null;
}
}
/// Starts and manages the chat delay countdown message.
@action
void _startChatDelayCountdown() {
// Cancel any existing countdown first (prevents duplicate messages)
_cancelChatDelayCountdown();
// Flush any buffered messages first to ensure countdown is at the bottom
if (messageBuffer.isNotEmpty) {
_messages.addAll(messageBuffer);
messageBuffer.clear();
}
feat(video,chat): native player, ad-break awareness, chat send/delay reliability, and tab redesign (#567) Squash-merge commit. Covers four areas: native video player, chat reliability, multi-tab, and hardening. ## Native video player - Direct HLS playback via `better_native_video_player` (forked from `plug-and-pay/flutter-native-video-player`, patched on `frosty-patches` branch) - Twitch GQL playback token fetching with platform cookie extraction (iOS Swift + Android Kotlin plugins) for authenticated streams - Quality selection (source, 720p, 480p, 360p, 160p, audio-only) persisted per channel - Picture-in-picture: iOS automatic inline PiP, Android auto-PiP on API 31+ guarded against older devices - Latency polling, chat latency sync, stall detection/recovery, startup auto-pause recovery, watchdog timers - **Twitch stitched-ad break detection** (HLS `EXT-X-DATERANGE`) on both platforms, emitting `adBreakChanged` so the host suspends latency/stall recovery and chat sync during ads (program-date-time is unreliable then). Matches `CLASS="twitch-stitched-ad"` / `ID="stitched-ad-"` **and** the `X-TV-TWITCH-AD-*` attribute prefix (the durable signal streamlink/yt-dlp use) - Shared `VideoPlayerInterface` so WebView and native paths are interchangeable via settings toggle - `PlaybackAccessToken` model, `TwitchGqlApi` client ## Chat delay & send reliability - **Optimistic send-finalize**: Twitch acks a sent message with a per-PRIVMSG USERSTATE (not an echo), which it can intermittently drop — more so under a long chat delay. A missing ack no longer shows a false "message may not have been sent" error; the send is finalized optimistically (local echo rendered), and only genuine rejection NOTICEs surface an error. Ack timeout scaled by the chat delay. - **Per-line chat-delay bypass**: control/state lines (USERSTATE/ROOMSTATE/GLOBALUSERSTATE), rejection NOTICEs, the reconnect notice, and untagged server lines bypass the delay so send-acks and PONGs aren't stalled; only displayable chat content is delayed, staying in sync with delayed video. - **Measured chat bottom-bar height**: the message list reflows to the composer's real measured height, fixing the input overlapping messages when a long message expands it (replaces a fixed-constant estimate). - IRC tag parsing handles valueless and escaped tags per the IRCv3 message-tags spec (fixes a recent-messages RangeError on certain tags). ## Chat / multi-tab - Redesigned tab chips: unread dot indicator, chips dim until WebSocket connects - Animated tab options popover replacing `MenuAnchor` (no animation hook in Flutter 3.44) - Simplified `ChatTabs` from `StatefulWidget` to `StatelessWidget` - Focus-current-channel fade bump to 0.55; section-header alpha lifted to match the muted-label tier - `addTab` now calls `setActiveTab` to snapshot outgoing tab's `lastSeenMessageId` — fixes spurious unread dots after adding a tab - `onActivateSourceTab` threaded into `ChatUserModal` so Reply in merged mode switches to the correct source tab's composer ## Bug fixes and hardening - **Reverted the experimental iOS low-latency mode** (5s live-edge join + 1.05x catch-up): AVPlayer can't sustain <~18s on Twitch (declared `TARGETDURATION:6` paces playlist refreshes), and the offset starved the buffer into pause-on-launch. Default join distance restored. - Fork (Android): **cap `BEHIND_LIVE_WINDOW` recovery** so a stream repeatedly falling off the live window can't silently re-prepare forever; emits `error` on exhaustion so the host recovery ladder takes over - Guard all Android `setAutoPipMode` calls with `_autoPipAvailable` — prevents `PlatformException` on Android 8–11; check `_disposed` after `isAutoPipAvailable` await to prevent post-dispose auto-PiP re-enable - Remove `_isInPipMode` guard from `_onPaused` so `_paused` tracks actual state, fixing PiP play/pause toggle getting stuck - Tighten iOS cookie domain check to exact `twitch.tv` / `.twitch.tv` suffix - Invalidate the stored web session token when Twitch rejects it with a 401 (profile card flips back to unlinked; future loads skip the doomed authenticated request), and re-extract the cookie on launch when logged in without a linked session - Send `play_session_id` and `player_backend=mediaplayer` to Usher, matching the web client / streamlink - Fork (iOS): restore program-date-time latency measurement (a prior rev measured distance to the manifest edge, reading ~0s and silently disabling high-latency recovery / chat-delay auto-sync); release platform views on dispose (per-stream view + AVPlayerViewController leak), track the observed AVPlayerItem for KVO removal (sibling-view crash), main-thread seek results, resolve superseded load futures - Fork (Android): clean up method handlers orphaned by PiP-time view disposal (leaked audio-focus listeners), drop the live-offset re-anchoring seekTo on metadata updates (latency creep), restore pre-duck volume, respect user pause in the stall watchdog, resolve superseded load futures - Deep review pass: expire the quality-switch flag so stall recovery isn't disabled for the session, cap latency-driven recovery (clock-skew loop), generation-guard the error overlay, two-strike offline confirmation, controller null-safety on quality switch - Tighten `/me` local-echo match (no longer renders `/meow ...` as an action); clear pending send text on disconnect ## Web / docs - Remove stale Cloudflare Images binding from `wrangler.jsonc` (covered by `images.unoptimized: true`) - Correct `web/AGENTS.md` Cache Components claim (feature not enabled) - Repo and agent config cleanup ## Test plan - [x] `flutter analyze` — clean (frosty + plugin lib) - [x] `flutter test` — 319/319 pass (adds `ChatLatencySync`, `StreamInfoPoller`, video timing invariants, `PlaybackAccessToken`, IRC tag parsing) - [x] Android plugin Kotlin compiles against the bumped fork rev - [ ] Native player plays live streams on iOS and Android - [ ] Quality switching works and persists across channel reopens - [ ] PiP enters/exits correctly; pause/resume toggle in PiP window works - [ ] Audio-only mode does not crash on Android < API 31 - [ ] Sending under a long synced chat delay no longer shows a false "may not have been sent" error - [ ] Long composer text reflows the message list (no input/message overlap) - [ ] Multi-tab: adding a tab does not mark previous tab as unread - [ ] Merged chat: Reply from user modal targets the correct tab's composer 🤖 Generated with [Claude Code](https://claude.com/claude-code)
2026-06-13 17:06:24 -04:00
var remainingSeconds = _chatDelay.inSeconds;
v5 (#463) * migrate to dio * ignore folders * simplify twitch api headers handling * clean up main * simplify logs * optimize profile picture fetching fixes refetches on tab switch * update claude md * refactor irc.dart * update copilot instructions with essential commands and project structure details * implement message sending state management and UI updates * refactor notification handling and add copy-paste functionality in chat * refactor AlertMessage to support vertical layout and optional padding * refactor error messages for consistency and clarity across various components * refactor chat layout to use draggable divider and improve chat width settings * refactor Uptime widget to use SharedTimerService for synchronized updates * refactor search results components to handle null future states gracefully * refactor loading indicators to use skeleton loaders for improved user experience * refactor UI components for improved layout and responsiveness, enhance skeleton loaders, and streamline padding adjustments * refactor: replace manual blur effects with BlurredContainer for consistency and reusability * refactor: enhance JavaScript execution and error handling in WebView components * refactor: replace app bar with blurred container for improved UI consistency across screens * refactor: streamline video chat layout and enhance PiP drag gesture functionality * revert some app bar changes * refactor: implement Picture-in-Picture drag functionality in VideoChat * refactor: pass currentChannelId to IRCMessage and ChatMessage for improved context * fix large thubmnail width * chore: update Gradle and Kotlin plugin versions for improved compatibility * changes from v4.10.0 branch * feat: integrate AnimatedScrollBorder for improved UI responsiveness across various screens * refactor: update SectionHeader styling and improve theme management * feat: add pinned section to StreamsList and enhance skeleton loader padding * feat: add repository guidelines for project structure, coding style, testing, and security * feat: enhance StreamCard UI with BlurredContainer and adjust border width in theme * feat: implement unfocusInput and safeRequestFocus methods to manage text field focus behavior * feat: enhance Picture-in-Picture drag interactions with haptic feedback and smooth animations * refactor: improve code formatting and readability across multiple files * feat: implement picture-in-picture mode toggle and state management for video playback * feat: reset PiP mode state when pausing video playback * feat: add custom app bar with profile picture and stream info for video chat * feat: convert multiple settings screens to use StatefulWidget and add animated scroll borders * feat: update blur configuration for adaptive alpha based on theme * fix: adjust default font size in SectionHeader widget * feat: enhance PiP mode with drag overlay instruction and UI improvements * fix: improve badge rendering with consistent margin and border for current channel * refactor: replace BackdropFilter with BlurredContainer for improved clarity and maintainability * fix: reduce background transparency in Uptime widget for better visibility * feat: enhance photo view dialog with full resolution toggle and blurred background * fix: reset chat delay to 0 when auto sync is enabled and update settings title for clarity * fix: adjust border width in theme to improve consistency * feat: add forceDarkMode option to BlurredContainer for improved theme adaptability * feat: implement offline followed channels feature with UI integration and settings option * fix: increase font size and weight for offline status text for better readability * feat: remove offline pinned channels feature and update related UI components * feat: optimize offline channels loading behavior based on expansion state * fix: improve clarity and consistency in repository guidelines formatting * feat: update full resolution URL handling and button visibility logic * feat: replace app bar with blurred version in chat-only mode and add animated scroll border * feat: refactor video chat layout for improved chat and video display in landscape mode * feat: remove bottom bar visibility setting and adjust chat layout accordingly * fix: simplify condition for displaying offline channels section in following tab * feat: enhance reply thread display with indentation and reply icon * feat: implement showModalBottomSheetWithProperFocus for improved focus handling * feat: add gradient direction support to BlurredContainer for enhanced visual effects * feat: enhance NavigationBar and Theme settings for improved visual consistency * feat: add gradient direction support to BlurredContainer in VideoChat for enhanced visual effects * chore: update .gitignore to include .cursor file for better environment management * fix: update PiP drag gesture conditions to include video paused state for better user experience * refactor: replace ScrollController with SettingsPageLayout in settings screens for improved layout management * refactor: centralize orientation handling by introducing OrientationUtils for improved readability and maintainability * refactor: replace OrientationUtils with ContextExtensions for streamlined context-based access to theme, layout, and API dependencies * refactor: improve video chat UI by adjusting title layout and adding stream info tooltips for better user experience * refactor: adjust titleSpacing in theme and navigation components for improved layout consistency * refactor: update stream info timer handling and overlay management for improved UI responsiveness * refactor: enhance stream info timer logic and overlay visibility management for chat-only mode * refactor: enhance input decoration theme in FrostyThemes for improved visual consistency and responsiveness * refactor: adjust inputDecorationTheme padding in FrostyThemes for improved visual consistency * refactor: enhance video overlay management by including video preview overlay in hideElements for improved UI consistency * refactor: improve chat bottom bar padding and video chat layout for enhanced UI consistency * refactor: adjust chat padding to account for device bottom insets for improved layout consistency * refactor: update text styles in FrostyThemes for improved visual consistency across UI components * refactor: update iOS minimum deployment target to 13.0 for improved compatibility * refactor: adjust chat bottom padding based on emote menu visibility for improved layout consistency * refactor: adjust padding values in StreamsList for improved layout consistency * refactor: replace Padding with AnimatedPadding in Chat for smoother layout transitions refactor: replace Container with AnimatedContainer in BlurredContainer for smoother animations * refactor: remove unnecessary radius property from ProfilePicture in OfflineChannelCard for cleaner code * refactor: enhance chat bottom bar suffix icon to display message delay with tooltip for improved user experience * refactor: update hint text and tooltips in chat bottom bar and search for improved clarity * refactor: simplify notification display logic and enhance chat input behavior for improved user experience * refactor: enhance layout consistency by adjusting spacing in various components across the channel and home screens * refactor: introduce LiveIndicator widget and adjust spacing in channel and video components for improved layout consistency * refactor: remove monospace font family from chat bottom bar for improved text rendering * refactor: reduce notification animation duration and change dismiss direction for improved user experience * refactor: replace VideoBar with StreamInfoBar in video components for improved layout and consistency * refactor: adjust font sizes and spacing in StreamInfoBar for improved layout consistency * refactor: standardize font sizes and update gradient stops in video components for improved visual consistency * refactor: update tooltip padding and background color in theme for improved visual consistency * refactor: enhance tooltip behavior and standardize font sizes in StreamInfoBar and related components for improved visual consistency * refactor: add showThumbnail option to LargeStreamCardSkeletonLoader for improved layout flexibility * refactor: add StreamInfoBarSkeletonLoader for improved layout consistency in stream components * refactor: add shadow effects to icons and text in StreamInfoBar and VideoOverlay for improved visual depth * refactor: update defaultOverlayOpacity to 0.0 for improved overlay behavior * fix: correct stream info text color on overlay * refactor: implement a new color picker dialog with random color generation for enhanced user experience * refactor: adjust gradient colors and stops in VideoOverlay for improved visual consistency * refactor: refine gradient colors and stops in VideoOverlay for enhanced visual clarity * refactor: add isCompact parameter to StreamInfoBar for responsive text sizing * fix: update tooltip background color to use surface color for better contrast * feat: add shared chat mode support in chat store and update StreamInfoBar for visual indication * refactor: disable debug print for IRC messages to reduce log clutter * feat: implement chat color selection feature with user color management in chat settings * refactor: replace color adjustment logic with new contrast-aware utility for chat names * refactor: simplify chat details UI by replacing list tiles with action cards and removing unused clear dialog * refactor: enhance chat details UI by improving time formatting and adding label styling to action cards * refactor: update chat color terminology to 'Username color' for clarity in UI * refactor: enhance chat details UI by introducing active chat modes display and improving layout structure * refactor: improve chat details layout by replacing ListTile with Padding and adding a Divider for better visual separation * refactor: remove chat notifications positioning setting and adjust notification alignment in video chat * refactor: streamline StreamInfoBar component by consolidating offline handling and improving layout for better readability * refactor: enhance StreamInfoBar by adding tooltip for streamer name and improving text overflow handling * refactor: adjust tooltip display duration in StreamInfoBar and update theme configuration * refactor: adjust margin and padding in StreamCard for improved layout consistency * chore: update dependencies in pubspec.yaml and pubspec.lock for Firebase and other packages * template * chore: update iOS platform version to 15.0 and Firebase dependencies to 12.2.0 * refactor: simplify StreamInfoBar layout by reducing nested widgets and improving text color handling * format * feat: enhance Channel model and StreamInfoBar to support offline channel details * feat: add offline indicator and improve StreamInfoBar layout for better offline channel display * fix: adjust icon color opacity in StreamInfoBar for improved visibility * feat: enhance dismissal animation in FrostyPhotoViewDialog to track swipe direction * docs: update copilot instructions for clarity and additional error handling details * refactor: optimize latency tooltip layout and improve offline indicator styling in VideoOverlay * feat: implement shared chat asset fetching and participant management in ChatAssetsStore * refactor: replace Observer with Builder for improved widget rebuilding in VideoOverlay * refactor: update StreamInfoBar border styling and adjust layout in VideoOverlay for improved visual consistency * feat: add showTextShadows property to StreamInfoBar for customizable text shadow display * refactor: adjust layout in VideoOverlay by adding padding to improve spacing and visual consistency * refactor: enhance VideoOverlay gradients and layout for improved visual hierarchy and user experience * refactor: reduce vertical padding in VideoOverlay for improved layout consistency * refactor: remove overlay opacity settings from VideoSettings and SettingsStore for simplification * refactor: improve text overlay transition in VideoChat for better user experience * Revert "refactor: improve text overlay transition in VideoChat for better user experience" This reverts commit fd16ff5ec30ec266157e5c8a9d4a6090c91717f6. * refactor: wrap videoOverlay in ColoredBox for improved layout handling * refactor: optimize animation duration and transition curves in VideoChat for smoother interactions * refactor: dispose searchScrollController in HomeStoreBase to prevent memory leaks * refactor: simplify gradient definitions in VideoOverlay for improved readability and maintainability * refactor: remove 'Offline' text overlay from VideoOverlay for cleaner UI * refactor: add refresh functionality for assets in ChatDetails with loading indicators * refactor: update visibility conditions for uptime, viewer count, and category display in StreamInfoBar * refactor: replace AlertDialog with FrostyDialog for consistent dialog styling across the application * refactor: enhance layout handling in FrostyPageView to prevent overflow during height transitions * refactor: replace ColorPickerDialog with AccentColorPickerDialog for improved color selection experience * refactor: replace theme and accent color settings with dedicated components for improved modularity and readability * refactor: replace ElevatedButton with TextButton for consistent button styling across dialogs * refactor: integrate MobX Observer for reactive state management in settings widgets * refactor: update theme and dialog components for improved styling and consistency * refactor: enhance dialog styling with rounded corners and border in theme configuration * refactor: improve dialog messages for unauthorized access handling * refactor: update bodyLarge text style in theme configuration to include font weight * refactor: standardize Divider usage and adjust theme styles for improved consistency * refactor: adjust Divider properties and theme styles for enhanced visual consistency * chore: remove GEMINI.md file as it is no longer needed for project documentation * refactor: enhance token validation and reconnect logic in AuthBase for improved error handling * format * refactor: integrate landscape cutout settings into VideoChat layout for improved responsiveness * refactor: implement app lifecycle handling in VideoChat and enhance stream info update logic in VideoStore * refactor: update landscape cutout conditionals in VideoChat layout for improved responsiveness * update AGENTS.md * add scrollbar to search * fix scrolling exception * update CLAUDE.md * 5 auth reconnect attemps then log out * increase reply max lines to 2 * simplify and improve reply formatting * add prime icon * better draggable divider * support draggable divider in fullscreen overlay chat * add text shadow in fullscreen chat overlay mode * format * add landscape checks * video store optimization attempts * Dispose WebViewController and remove JavaScript channels properly * Track and cleanup all MutationObservers to prevent accumulation * Throttle latency updates to once per 5 seconds (reduces CPU load) * Add timeout protection and null checks for robustness * Prevent duplicate event listeners on page reloads * double tap divider to reset * Revert "video store optimization attempts" This reverts commit b1df7b0de473543283211a489dca698d9d241857. * optimize video store attempt 2 * Revert "double tap divider to reset" This reverts commit aeb26a433500ec71f822794835e927018ee59e1e. * optimize latency listener to open the menu and check every 20 secconds * more optimizations * hard refresh * abbreviate latency * fix lint * improve hide default overlay * fix chat no longer reconnecting with chat delay * refine chat alerts * fix historical message missing badges and emotes on initial connection * parallelize * revert * add reconnect button inline action * refactor: replace Scrollbar with FrostyScrollbar across chat and settings screens for consistent styling * tweak chat details menu * add scrollbar to release notes, renames for consistency * fix duplicate message case * fix chat delay alerts in auto sync mode * add regex for numeric strings and enhance display name formatting logic * exterminate borders * refactor: simplify active chat modes display in chat details screen * feat: enhance chat input button with delay notification and disable state * fix: wrap chat in SafeArea to prevent UI overflow issues * refactor: remove divider line from video chat and update draggable divider visibility logic * persist overlay in pip mode * fix: update chat delay handling and notifications in chat bottom bar * fix: update chat overlay visibility logic to respect fullscreen settings * tap to show deleted message * fix: prevent accidental chat scrolling when accessing system UI in landscape mode * show latency in portrait * fix: enhance chat delay notifications with dynamic delay time * docs: update CLAUDE.md for improved environment variable instructions and architecture overview * fix: improve chat delay countdown management and message handling * add preliminary release notes * remove agents.md * update lockfile * add initial multi chat feature * add option to persist multi chat tabs * add remove confirmation dialog * improve add chat design * lazy-load tabs * create global assets store to dedupe global asset fetching * improve tab design/styles * update notes * use frosty dialog * update claude md * tweak * add ability to reorder tabs * resolve conflict * merge cleanup * format * update release notes * add chat delay sync completion tracking to prevent countdown re-appearance * add tests * fix * update release notes * bump
2026-01-01 22:28:17 -05:00
// Create and store reference to the countdown message
_countdownMessage = IRCMessage.createNotice(
message: 'Chat will sync in ${remainingSeconds}s...',
);
_messages.add(_countdownMessage!);
// Update countdown every second
_chatDelayCountdownTimer = Timer.periodic(const Duration(seconds: 1), (
timer,
) {
remainingSeconds--;
// Use runInAction for proper MobX reactivity in async callbacks
runInAction(() {
// Check if countdown message still exists in the list
// (could be removed by message limit cleanup)
if (_countdownMessage == null ||
!_messages.contains(_countdownMessage)) {
timer.cancel();
_countdownMessage = null;
_chatDelayCountdownTimer = null;
return;
}
final index = _messages.indexOf(_countdownMessage!);
if (index != -1) {
if (remainingSeconds > 0) {
// Create new message and update reference
_countdownMessage = IRCMessage.createNotice(
message: 'Chat will sync in ${remainingSeconds}s...',
);
_messages[index] = _countdownMessage!;
} else {
// Remove countdown message when done
_messages.removeAt(index);
_countdownMessage = null;
_chatDelayCountdownTimer = null;
_chatDelaySyncCompleted = true;
timer.cancel();
}
} else {
_countdownMessage = null;
_chatDelayCountdownTimer = null;
timer.cancel();
}
});
});
}
/// Sends the given string message by the logged-in user and adds it to [_messages].
@action
void sendMessage(String message) {
// Do not send if the message is blank/empty.
if (message.isEmpty) return;
// Prevent double-sending while waiting for server acknowledgment
if (_isWaitingForAck) {
HapticFeedback.mediumImpact();
updateNotification('Please wait, sending previous message...');
return;
}
if (_channel == null || _channel?.closeCode != null) {
Update to Material 3/You and other changes/fixes (#280) * Use adaptive refresh indicators * Add new message count indicator in chat * Sync pubspec.lock * Initial migration to material 3 * Restore default bottom sheet style * Remove FrostyListTile and reset styles * Use "Clear" button for all search history * Add `require_trailing_commas` lint rule * Exclude generated files from linter * Use ListView for safe area support in bottom sheet * Add initial dark theme * Make sizing and units consistent * Update onbaording spacings & copy * Migrate to default material 3 buttons * Add headers to chat details bottom sheet * Simplify token log in method * Use bottom sheet for account options * Remove `AnimateScale` widget * Tweak search paddings * Update message spacing divisions * Upgrade packages * Update message spacing divisions * Regenerate splash screens * Update Inter & add google fonts * Add initial material 3 themes * Use adaptive alert dialogs * Revert to oultined inputs * Fix tooltip message * Revert add google_fonts * Improve themes and various styling * Convert categories grid to list * Tweak stream card thumbnail radii * Tweak settings headers * Left align floating snackbars * Tweak search header padding * Fix profile pics occasionally not rounded * Use profile pic for settings button if logged in * Redesign sleep timer * Use divider theme and reduce thickness * Use 0 letter spacing for tab bar titles * Redesign category streams list * Add border to tooltips * Increase category card font weight * Use outlined icon btton for chat user modal * Reduce profile pic radius in search results * Fix scrolll to top button safe area * Add support for reply threads * Reduce tooltip and snackbar border thickness * Rebuild reply threads on new messages * Upgrade packages (iOS) * Reduce font weight for all chat alerts * Use tabbars for pageview * Add dividers everywhere * Revert "Add dividers everywhere" This reverts commit 5f0d349fdbb0afad313cfb88e8c359714b3ea87a. * Remove fill from inputs * Add dividers to settings * Use segmented button for settings list * Add scrollbar to lists with scrollcontroller * Redesign badge/emote tooltip * Remove outline from chat user modal buttons * Remove divider from reply thread * Use tap for chatters list and increase font weight * Constrain emote tooltip width
2023-10-22 18:38:32 -04:00
messageBuffer.add(
IRCMessage.createNotice(
v5 (#463) * migrate to dio * ignore folders * simplify twitch api headers handling * clean up main * simplify logs * optimize profile picture fetching fixes refetches on tab switch * update claude md * refactor irc.dart * update copilot instructions with essential commands and project structure details * implement message sending state management and UI updates * refactor notification handling and add copy-paste functionality in chat * refactor AlertMessage to support vertical layout and optional padding * refactor error messages for consistency and clarity across various components * refactor chat layout to use draggable divider and improve chat width settings * refactor Uptime widget to use SharedTimerService for synchronized updates * refactor search results components to handle null future states gracefully * refactor loading indicators to use skeleton loaders for improved user experience * refactor UI components for improved layout and responsiveness, enhance skeleton loaders, and streamline padding adjustments * refactor: replace manual blur effects with BlurredContainer for consistency and reusability * refactor: enhance JavaScript execution and error handling in WebView components * refactor: replace app bar with blurred container for improved UI consistency across screens * refactor: streamline video chat layout and enhance PiP drag gesture functionality * revert some app bar changes * refactor: implement Picture-in-Picture drag functionality in VideoChat * refactor: pass currentChannelId to IRCMessage and ChatMessage for improved context * fix large thubmnail width * chore: update Gradle and Kotlin plugin versions for improved compatibility * changes from v4.10.0 branch * feat: integrate AnimatedScrollBorder for improved UI responsiveness across various screens * refactor: update SectionHeader styling and improve theme management * feat: add pinned section to StreamsList and enhance skeleton loader padding * feat: add repository guidelines for project structure, coding style, testing, and security * feat: enhance StreamCard UI with BlurredContainer and adjust border width in theme * feat: implement unfocusInput and safeRequestFocus methods to manage text field focus behavior * feat: enhance Picture-in-Picture drag interactions with haptic feedback and smooth animations * refactor: improve code formatting and readability across multiple files * feat: implement picture-in-picture mode toggle and state management for video playback * feat: reset PiP mode state when pausing video playback * feat: add custom app bar with profile picture and stream info for video chat * feat: convert multiple settings screens to use StatefulWidget and add animated scroll borders * feat: update blur configuration for adaptive alpha based on theme * fix: adjust default font size in SectionHeader widget * feat: enhance PiP mode with drag overlay instruction and UI improvements * fix: improve badge rendering with consistent margin and border for current channel * refactor: replace BackdropFilter with BlurredContainer for improved clarity and maintainability * fix: reduce background transparency in Uptime widget for better visibility * feat: enhance photo view dialog with full resolution toggle and blurred background * fix: reset chat delay to 0 when auto sync is enabled and update settings title for clarity * fix: adjust border width in theme to improve consistency * feat: add forceDarkMode option to BlurredContainer for improved theme adaptability * feat: implement offline followed channels feature with UI integration and settings option * fix: increase font size and weight for offline status text for better readability * feat: remove offline pinned channels feature and update related UI components * feat: optimize offline channels loading behavior based on expansion state * fix: improve clarity and consistency in repository guidelines formatting * feat: update full resolution URL handling and button visibility logic * feat: replace app bar with blurred version in chat-only mode and add animated scroll border * feat: refactor video chat layout for improved chat and video display in landscape mode * feat: remove bottom bar visibility setting and adjust chat layout accordingly * fix: simplify condition for displaying offline channels section in following tab * feat: enhance reply thread display with indentation and reply icon * feat: implement showModalBottomSheetWithProperFocus for improved focus handling * feat: add gradient direction support to BlurredContainer for enhanced visual effects * feat: enhance NavigationBar and Theme settings for improved visual consistency * feat: add gradient direction support to BlurredContainer in VideoChat for enhanced visual effects * chore: update .gitignore to include .cursor file for better environment management * fix: update PiP drag gesture conditions to include video paused state for better user experience * refactor: replace ScrollController with SettingsPageLayout in settings screens for improved layout management * refactor: centralize orientation handling by introducing OrientationUtils for improved readability and maintainability * refactor: replace OrientationUtils with ContextExtensions for streamlined context-based access to theme, layout, and API dependencies * refactor: improve video chat UI by adjusting title layout and adding stream info tooltips for better user experience * refactor: adjust titleSpacing in theme and navigation components for improved layout consistency * refactor: update stream info timer handling and overlay management for improved UI responsiveness * refactor: enhance stream info timer logic and overlay visibility management for chat-only mode * refactor: enhance input decoration theme in FrostyThemes for improved visual consistency and responsiveness * refactor: adjust inputDecorationTheme padding in FrostyThemes for improved visual consistency * refactor: enhance video overlay management by including video preview overlay in hideElements for improved UI consistency * refactor: improve chat bottom bar padding and video chat layout for enhanced UI consistency * refactor: adjust chat padding to account for device bottom insets for improved layout consistency * refactor: update text styles in FrostyThemes for improved visual consistency across UI components * refactor: update iOS minimum deployment target to 13.0 for improved compatibility * refactor: adjust chat bottom padding based on emote menu visibility for improved layout consistency * refactor: adjust padding values in StreamsList for improved layout consistency * refactor: replace Padding with AnimatedPadding in Chat for smoother layout transitions refactor: replace Container with AnimatedContainer in BlurredContainer for smoother animations * refactor: remove unnecessary radius property from ProfilePicture in OfflineChannelCard for cleaner code * refactor: enhance chat bottom bar suffix icon to display message delay with tooltip for improved user experience * refactor: update hint text and tooltips in chat bottom bar and search for improved clarity * refactor: simplify notification display logic and enhance chat input behavior for improved user experience * refactor: enhance layout consistency by adjusting spacing in various components across the channel and home screens * refactor: introduce LiveIndicator widget and adjust spacing in channel and video components for improved layout consistency * refactor: remove monospace font family from chat bottom bar for improved text rendering * refactor: reduce notification animation duration and change dismiss direction for improved user experience * refactor: replace VideoBar with StreamInfoBar in video components for improved layout and consistency * refactor: adjust font sizes and spacing in StreamInfoBar for improved layout consistency * refactor: standardize font sizes and update gradient stops in video components for improved visual consistency * refactor: update tooltip padding and background color in theme for improved visual consistency * refactor: enhance tooltip behavior and standardize font sizes in StreamInfoBar and related components for improved visual consistency * refactor: add showThumbnail option to LargeStreamCardSkeletonLoader for improved layout flexibility * refactor: add StreamInfoBarSkeletonLoader for improved layout consistency in stream components * refactor: add shadow effects to icons and text in StreamInfoBar and VideoOverlay for improved visual depth * refactor: update defaultOverlayOpacity to 0.0 for improved overlay behavior * fix: correct stream info text color on overlay * refactor: implement a new color picker dialog with random color generation for enhanced user experience * refactor: adjust gradient colors and stops in VideoOverlay for improved visual consistency * refactor: refine gradient colors and stops in VideoOverlay for enhanced visual clarity * refactor: add isCompact parameter to StreamInfoBar for responsive text sizing * fix: update tooltip background color to use surface color for better contrast * feat: add shared chat mode support in chat store and update StreamInfoBar for visual indication * refactor: disable debug print for IRC messages to reduce log clutter * feat: implement chat color selection feature with user color management in chat settings * refactor: replace color adjustment logic with new contrast-aware utility for chat names * refactor: simplify chat details UI by replacing list tiles with action cards and removing unused clear dialog * refactor: enhance chat details UI by improving time formatting and adding label styling to action cards * refactor: update chat color terminology to 'Username color' for clarity in UI * refactor: enhance chat details UI by introducing active chat modes display and improving layout structure * refactor: improve chat details layout by replacing ListTile with Padding and adding a Divider for better visual separation * refactor: remove chat notifications positioning setting and adjust notification alignment in video chat * refactor: streamline StreamInfoBar component by consolidating offline handling and improving layout for better readability * refactor: enhance StreamInfoBar by adding tooltip for streamer name and improving text overflow handling * refactor: adjust tooltip display duration in StreamInfoBar and update theme configuration * refactor: adjust margin and padding in StreamCard for improved layout consistency * chore: update dependencies in pubspec.yaml and pubspec.lock for Firebase and other packages * template * chore: update iOS platform version to 15.0 and Firebase dependencies to 12.2.0 * refactor: simplify StreamInfoBar layout by reducing nested widgets and improving text color handling * format * feat: enhance Channel model and StreamInfoBar to support offline channel details * feat: add offline indicator and improve StreamInfoBar layout for better offline channel display * fix: adjust icon color opacity in StreamInfoBar for improved visibility * feat: enhance dismissal animation in FrostyPhotoViewDialog to track swipe direction * docs: update copilot instructions for clarity and additional error handling details * refactor: optimize latency tooltip layout and improve offline indicator styling in VideoOverlay * feat: implement shared chat asset fetching and participant management in ChatAssetsStore * refactor: replace Observer with Builder for improved widget rebuilding in VideoOverlay * refactor: update StreamInfoBar border styling and adjust layout in VideoOverlay for improved visual consistency * feat: add showTextShadows property to StreamInfoBar for customizable text shadow display * refactor: adjust layout in VideoOverlay by adding padding to improve spacing and visual consistency * refactor: enhance VideoOverlay gradients and layout for improved visual hierarchy and user experience * refactor: reduce vertical padding in VideoOverlay for improved layout consistency * refactor: remove overlay opacity settings from VideoSettings and SettingsStore for simplification * refactor: improve text overlay transition in VideoChat for better user experience * Revert "refactor: improve text overlay transition in VideoChat for better user experience" This reverts commit fd16ff5ec30ec266157e5c8a9d4a6090c91717f6. * refactor: wrap videoOverlay in ColoredBox for improved layout handling * refactor: optimize animation duration and transition curves in VideoChat for smoother interactions * refactor: dispose searchScrollController in HomeStoreBase to prevent memory leaks * refactor: simplify gradient definitions in VideoOverlay for improved readability and maintainability * refactor: remove 'Offline' text overlay from VideoOverlay for cleaner UI * refactor: add refresh functionality for assets in ChatDetails with loading indicators * refactor: update visibility conditions for uptime, viewer count, and category display in StreamInfoBar * refactor: replace AlertDialog with FrostyDialog for consistent dialog styling across the application * refactor: enhance layout handling in FrostyPageView to prevent overflow during height transitions * refactor: replace ColorPickerDialog with AccentColorPickerDialog for improved color selection experience * refactor: replace theme and accent color settings with dedicated components for improved modularity and readability * refactor: replace ElevatedButton with TextButton for consistent button styling across dialogs * refactor: integrate MobX Observer for reactive state management in settings widgets * refactor: update theme and dialog components for improved styling and consistency * refactor: enhance dialog styling with rounded corners and border in theme configuration * refactor: improve dialog messages for unauthorized access handling * refactor: update bodyLarge text style in theme configuration to include font weight * refactor: standardize Divider usage and adjust theme styles for improved consistency * refactor: adjust Divider properties and theme styles for enhanced visual consistency * chore: remove GEMINI.md file as it is no longer needed for project documentation * refactor: enhance token validation and reconnect logic in AuthBase for improved error handling * format * refactor: integrate landscape cutout settings into VideoChat layout for improved responsiveness * refactor: implement app lifecycle handling in VideoChat and enhance stream info update logic in VideoStore * refactor: update landscape cutout conditionals in VideoChat layout for improved responsiveness * update AGENTS.md * add scrollbar to search * fix scrolling exception * update CLAUDE.md * 5 auth reconnect attemps then log out * increase reply max lines to 2 * simplify and improve reply formatting * add prime icon * better draggable divider * support draggable divider in fullscreen overlay chat * add text shadow in fullscreen chat overlay mode * format * add landscape checks * video store optimization attempts * Dispose WebViewController and remove JavaScript channels properly * Track and cleanup all MutationObservers to prevent accumulation * Throttle latency updates to once per 5 seconds (reduces CPU load) * Add timeout protection and null checks for robustness * Prevent duplicate event listeners on page reloads * double tap divider to reset * Revert "video store optimization attempts" This reverts commit b1df7b0de473543283211a489dca698d9d241857. * optimize video store attempt 2 * Revert "double tap divider to reset" This reverts commit aeb26a433500ec71f822794835e927018ee59e1e. * optimize latency listener to open the menu and check every 20 secconds * more optimizations * hard refresh * abbreviate latency * fix lint * improve hide default overlay * fix chat no longer reconnecting with chat delay * refine chat alerts * fix historical message missing badges and emotes on initial connection * parallelize * revert * add reconnect button inline action * refactor: replace Scrollbar with FrostyScrollbar across chat and settings screens for consistent styling * tweak chat details menu * add scrollbar to release notes, renames for consistency * fix duplicate message case * fix chat delay alerts in auto sync mode * add regex for numeric strings and enhance display name formatting logic * exterminate borders * refactor: simplify active chat modes display in chat details screen * feat: enhance chat input button with delay notification and disable state * fix: wrap chat in SafeArea to prevent UI overflow issues * refactor: remove divider line from video chat and update draggable divider visibility logic * persist overlay in pip mode * fix: update chat delay handling and notifications in chat bottom bar * fix: update chat overlay visibility logic to respect fullscreen settings * tap to show deleted message * fix: prevent accidental chat scrolling when accessing system UI in landscape mode * show latency in portrait * fix: enhance chat delay notifications with dynamic delay time * docs: update CLAUDE.md for improved environment variable instructions and architecture overview * fix: improve chat delay countdown management and message handling * add preliminary release notes * remove agents.md * update lockfile * add initial multi chat feature * add option to persist multi chat tabs * add remove confirmation dialog * improve add chat design * lazy-load tabs * create global assets store to dedupe global asset fetching * improve tab design/styles * update notes * use frosty dialog * update claude md * tweak * add ability to reorder tabs * resolve conflict * merge cleanup * format * update release notes * add chat delay sync completion tracking to prevent countdown re-appearance * add tests * fix * update release notes * bump
2026-01-01 22:28:17 -05:00
message:
'Cannot send message - chat is disconnected. Reconnecting...',
Update to Material 3/You and other changes/fixes (#280) * Use adaptive refresh indicators * Add new message count indicator in chat * Sync pubspec.lock * Initial migration to material 3 * Restore default bottom sheet style * Remove FrostyListTile and reset styles * Use "Clear" button for all search history * Add `require_trailing_commas` lint rule * Exclude generated files from linter * Use ListView for safe area support in bottom sheet * Add initial dark theme * Make sizing and units consistent * Update onbaording spacings & copy * Migrate to default material 3 buttons * Add headers to chat details bottom sheet * Simplify token log in method * Use bottom sheet for account options * Remove `AnimateScale` widget * Tweak search paddings * Update message spacing divisions * Upgrade packages * Update message spacing divisions * Regenerate splash screens * Update Inter & add google fonts * Add initial material 3 themes * Use adaptive alert dialogs * Revert to oultined inputs * Fix tooltip message * Revert add google_fonts * Improve themes and various styling * Convert categories grid to list * Tweak stream card thumbnail radii * Tweak settings headers * Left align floating snackbars * Tweak search header padding * Fix profile pics occasionally not rounded * Use profile pic for settings button if logged in * Redesign sleep timer * Use divider theme and reduce thickness * Use 0 letter spacing for tab bar titles * Redesign category streams list * Add border to tooltips * Increase category card font weight * Use outlined icon btton for chat user modal * Reduce profile pic radius in search results * Fix scrolll to top button safe area * Add support for reply threads * Reduce tooltip and snackbar border thickness * Rebuild reply threads on new messages * Upgrade packages (iOS) * Reduce font weight for all chat alerts * Use tabbars for pageview * Add dividers everywhere * Revert "Add dividers everywhere" This reverts commit 5f0d349fdbb0afad313cfb88e8c359714b3ea87a. * Remove fill from inputs * Add dividers to settings * Use segmented button for settings list * Add scrollbar to lists with scrollcontroller * Redesign badge/emote tooltip * Remove outline from chat user modal buttons * Remove divider from reply thread * Use tap for chatters list and increase font weight * Constrain emote tooltip width
2023-10-22 18:38:32 -04:00
),
);
return;
}
// Set waiting state for UI feedback
_isWaitingForAck = true;
// Send the message to the IRC chat room.
_channel?.sink.add(
'${replyingToMessage != null ? '@reply-parent-msg-id=${replyingToMessage!.tags['id']} ' : ''}PRIVMSG #$channelName :$message',
);
// Text field and reply state cleared on USERSTATE confirmation (not optimistically)
// to preserve message text if Twitch rejects it (e.g., slow mode)
feat(video,chat): native player, ad-break awareness, chat send/delay reliability, and tab redesign (#567) Squash-merge commit. Covers four areas: native video player, chat reliability, multi-tab, and hardening. ## Native video player - Direct HLS playback via `better_native_video_player` (forked from `plug-and-pay/flutter-native-video-player`, patched on `frosty-patches` branch) - Twitch GQL playback token fetching with platform cookie extraction (iOS Swift + Android Kotlin plugins) for authenticated streams - Quality selection (source, 720p, 480p, 360p, 160p, audio-only) persisted per channel - Picture-in-picture: iOS automatic inline PiP, Android auto-PiP on API 31+ guarded against older devices - Latency polling, chat latency sync, stall detection/recovery, startup auto-pause recovery, watchdog timers - **Twitch stitched-ad break detection** (HLS `EXT-X-DATERANGE`) on both platforms, emitting `adBreakChanged` so the host suspends latency/stall recovery and chat sync during ads (program-date-time is unreliable then). Matches `CLASS="twitch-stitched-ad"` / `ID="stitched-ad-"` **and** the `X-TV-TWITCH-AD-*` attribute prefix (the durable signal streamlink/yt-dlp use) - Shared `VideoPlayerInterface` so WebView and native paths are interchangeable via settings toggle - `PlaybackAccessToken` model, `TwitchGqlApi` client ## Chat delay & send reliability - **Optimistic send-finalize**: Twitch acks a sent message with a per-PRIVMSG USERSTATE (not an echo), which it can intermittently drop — more so under a long chat delay. A missing ack no longer shows a false "message may not have been sent" error; the send is finalized optimistically (local echo rendered), and only genuine rejection NOTICEs surface an error. Ack timeout scaled by the chat delay. - **Per-line chat-delay bypass**: control/state lines (USERSTATE/ROOMSTATE/GLOBALUSERSTATE), rejection NOTICEs, the reconnect notice, and untagged server lines bypass the delay so send-acks and PONGs aren't stalled; only displayable chat content is delayed, staying in sync with delayed video. - **Measured chat bottom-bar height**: the message list reflows to the composer's real measured height, fixing the input overlapping messages when a long message expands it (replaces a fixed-constant estimate). - IRC tag parsing handles valueless and escaped tags per the IRCv3 message-tags spec (fixes a recent-messages RangeError on certain tags). ## Chat / multi-tab - Redesigned tab chips: unread dot indicator, chips dim until WebSocket connects - Animated tab options popover replacing `MenuAnchor` (no animation hook in Flutter 3.44) - Simplified `ChatTabs` from `StatefulWidget` to `StatelessWidget` - Focus-current-channel fade bump to 0.55; section-header alpha lifted to match the muted-label tier - `addTab` now calls `setActiveTab` to snapshot outgoing tab's `lastSeenMessageId` — fixes spurious unread dots after adding a tab - `onActivateSourceTab` threaded into `ChatUserModal` so Reply in merged mode switches to the correct source tab's composer ## Bug fixes and hardening - **Reverted the experimental iOS low-latency mode** (5s live-edge join + 1.05x catch-up): AVPlayer can't sustain <~18s on Twitch (declared `TARGETDURATION:6` paces playlist refreshes), and the offset starved the buffer into pause-on-launch. Default join distance restored. - Fork (Android): **cap `BEHIND_LIVE_WINDOW` recovery** so a stream repeatedly falling off the live window can't silently re-prepare forever; emits `error` on exhaustion so the host recovery ladder takes over - Guard all Android `setAutoPipMode` calls with `_autoPipAvailable` — prevents `PlatformException` on Android 8–11; check `_disposed` after `isAutoPipAvailable` await to prevent post-dispose auto-PiP re-enable - Remove `_isInPipMode` guard from `_onPaused` so `_paused` tracks actual state, fixing PiP play/pause toggle getting stuck - Tighten iOS cookie domain check to exact `twitch.tv` / `.twitch.tv` suffix - Invalidate the stored web session token when Twitch rejects it with a 401 (profile card flips back to unlinked; future loads skip the doomed authenticated request), and re-extract the cookie on launch when logged in without a linked session - Send `play_session_id` and `player_backend=mediaplayer` to Usher, matching the web client / streamlink - Fork (iOS): restore program-date-time latency measurement (a prior rev measured distance to the manifest edge, reading ~0s and silently disabling high-latency recovery / chat-delay auto-sync); release platform views on dispose (per-stream view + AVPlayerViewController leak), track the observed AVPlayerItem for KVO removal (sibling-view crash), main-thread seek results, resolve superseded load futures - Fork (Android): clean up method handlers orphaned by PiP-time view disposal (leaked audio-focus listeners), drop the live-offset re-anchoring seekTo on metadata updates (latency creep), restore pre-duck volume, respect user pause in the stall watchdog, resolve superseded load futures - Deep review pass: expire the quality-switch flag so stall recovery isn't disabled for the session, cap latency-driven recovery (clock-skew loop), generation-guard the error overlay, two-strike offline confirmation, controller null-safety on quality switch - Tighten `/me` local-echo match (no longer renders `/meow ...` as an action); clear pending send text on disconnect ## Web / docs - Remove stale Cloudflare Images binding from `wrangler.jsonc` (covered by `images.unoptimized: true`) - Correct `web/AGENTS.md` Cache Components claim (feature not enabled) - Repo and agent config cleanup ## Test plan - [x] `flutter analyze` — clean (frosty + plugin lib) - [x] `flutter test` — 319/319 pass (adds `ChatLatencySync`, `StreamInfoPoller`, video timing invariants, `PlaybackAccessToken`, IRC tag parsing) - [x] Android plugin Kotlin compiles against the bumped fork rev - [ ] Native player plays live streams on iOS and Android - [ ] Quality switching works and persists across channel reopens - [ ] PiP enters/exits correctly; pause/resume toggle in PiP window works - [ ] Audio-only mode does not crash on Android < API 31 - [ ] Sending under a long synced chat delay no longer shows a false "may not have been sent" error - [ ] Long composer text reflows the message list (no input/message overlap) - [ ] Multi-tab: adding a tab does not mark previous tab as unread - [ ] Merged chat: Reply from user modal targets the correct tab's composer 🤖 Generated with [Claude Code](https://claude.com/claude-code)
2026-06-13 17:06:24 -04:00
// Fallback in case the confirming USERSTATE never arrives. Twitch can omit
// or drop the USERSTATE that acknowledges a send — intermittently, and more
// often under a long chat delay — even though the message was delivered.
// A missing ack is therefore NOT evidence of failure, so rather than cry
// wolf with a "may not have been sent" error (which pushes the user to
// resend and double-post), optimistically finalize the send: render the
// local echo and clear the pending state. Genuine rejections almost always
// arrive first — the rejection NOTICE bypasses the chat delay, so it lands
// well within this window and clears the pending send before the timeout. A
// rejection arriving after the timeout has finalized is treated as sent (the
// echo stays), an accepted edge given how early NOTICEs arrive. Scaled by
// the chat delay so a legitimately delayed USERSTATE is given time to land.
_sendingTimeoutTimer?.cancel();
feat(video,chat): native player, ad-break awareness, chat send/delay reliability, and tab redesign (#567) Squash-merge commit. Covers four areas: native video player, chat reliability, multi-tab, and hardening. ## Native video player - Direct HLS playback via `better_native_video_player` (forked from `plug-and-pay/flutter-native-video-player`, patched on `frosty-patches` branch) - Twitch GQL playback token fetching with platform cookie extraction (iOS Swift + Android Kotlin plugins) for authenticated streams - Quality selection (source, 720p, 480p, 360p, 160p, audio-only) persisted per channel - Picture-in-picture: iOS automatic inline PiP, Android auto-PiP on API 31+ guarded against older devices - Latency polling, chat latency sync, stall detection/recovery, startup auto-pause recovery, watchdog timers - **Twitch stitched-ad break detection** (HLS `EXT-X-DATERANGE`) on both platforms, emitting `adBreakChanged` so the host suspends latency/stall recovery and chat sync during ads (program-date-time is unreliable then). Matches `CLASS="twitch-stitched-ad"` / `ID="stitched-ad-"` **and** the `X-TV-TWITCH-AD-*` attribute prefix (the durable signal streamlink/yt-dlp use) - Shared `VideoPlayerInterface` so WebView and native paths are interchangeable via settings toggle - `PlaybackAccessToken` model, `TwitchGqlApi` client ## Chat delay & send reliability - **Optimistic send-finalize**: Twitch acks a sent message with a per-PRIVMSG USERSTATE (not an echo), which it can intermittently drop — more so under a long chat delay. A missing ack no longer shows a false "message may not have been sent" error; the send is finalized optimistically (local echo rendered), and only genuine rejection NOTICEs surface an error. Ack timeout scaled by the chat delay. - **Per-line chat-delay bypass**: control/state lines (USERSTATE/ROOMSTATE/GLOBALUSERSTATE), rejection NOTICEs, the reconnect notice, and untagged server lines bypass the delay so send-acks and PONGs aren't stalled; only displayable chat content is delayed, staying in sync with delayed video. - **Measured chat bottom-bar height**: the message list reflows to the composer's real measured height, fixing the input overlapping messages when a long message expands it (replaces a fixed-constant estimate). - IRC tag parsing handles valueless and escaped tags per the IRCv3 message-tags spec (fixes a recent-messages RangeError on certain tags). ## Chat / multi-tab - Redesigned tab chips: unread dot indicator, chips dim until WebSocket connects - Animated tab options popover replacing `MenuAnchor` (no animation hook in Flutter 3.44) - Simplified `ChatTabs` from `StatefulWidget` to `StatelessWidget` - Focus-current-channel fade bump to 0.55; section-header alpha lifted to match the muted-label tier - `addTab` now calls `setActiveTab` to snapshot outgoing tab's `lastSeenMessageId` — fixes spurious unread dots after adding a tab - `onActivateSourceTab` threaded into `ChatUserModal` so Reply in merged mode switches to the correct source tab's composer ## Bug fixes and hardening - **Reverted the experimental iOS low-latency mode** (5s live-edge join + 1.05x catch-up): AVPlayer can't sustain <~18s on Twitch (declared `TARGETDURATION:6` paces playlist refreshes), and the offset starved the buffer into pause-on-launch. Default join distance restored. - Fork (Android): **cap `BEHIND_LIVE_WINDOW` recovery** so a stream repeatedly falling off the live window can't silently re-prepare forever; emits `error` on exhaustion so the host recovery ladder takes over - Guard all Android `setAutoPipMode` calls with `_autoPipAvailable` — prevents `PlatformException` on Android 8–11; check `_disposed` after `isAutoPipAvailable` await to prevent post-dispose auto-PiP re-enable - Remove `_isInPipMode` guard from `_onPaused` so `_paused` tracks actual state, fixing PiP play/pause toggle getting stuck - Tighten iOS cookie domain check to exact `twitch.tv` / `.twitch.tv` suffix - Invalidate the stored web session token when Twitch rejects it with a 401 (profile card flips back to unlinked; future loads skip the doomed authenticated request), and re-extract the cookie on launch when logged in without a linked session - Send `play_session_id` and `player_backend=mediaplayer` to Usher, matching the web client / streamlink - Fork (iOS): restore program-date-time latency measurement (a prior rev measured distance to the manifest edge, reading ~0s and silently disabling high-latency recovery / chat-delay auto-sync); release platform views on dispose (per-stream view + AVPlayerViewController leak), track the observed AVPlayerItem for KVO removal (sibling-view crash), main-thread seek results, resolve superseded load futures - Fork (Android): clean up method handlers orphaned by PiP-time view disposal (leaked audio-focus listeners), drop the live-offset re-anchoring seekTo on metadata updates (latency creep), restore pre-duck volume, respect user pause in the stall watchdog, resolve superseded load futures - Deep review pass: expire the quality-switch flag so stall recovery isn't disabled for the session, cap latency-driven recovery (clock-skew loop), generation-guard the error overlay, two-strike offline confirmation, controller null-safety on quality switch - Tighten `/me` local-echo match (no longer renders `/meow ...` as an action); clear pending send text on disconnect ## Web / docs - Remove stale Cloudflare Images binding from `wrangler.jsonc` (covered by `images.unoptimized: true`) - Correct `web/AGENTS.md` Cache Components claim (feature not enabled) - Repo and agent config cleanup ## Test plan - [x] `flutter analyze` — clean (frosty + plugin lib) - [x] `flutter test` — 319/319 pass (adds `ChatLatencySync`, `StreamInfoPoller`, video timing invariants, `PlaybackAccessToken`, IRC tag parsing) - [x] Android plugin Kotlin compiles against the bumped fork rev - [ ] Native player plays live streams on iOS and Android - [ ] Quality switching works and persists across channel reopens - [ ] PiP enters/exits correctly; pause/resume toggle in PiP window works - [ ] Audio-only mode does not crash on Android < API 31 - [ ] Sending under a long synced chat delay no longer shows a false "may not have been sent" error - [ ] Long composer text reflows the message list (no input/message overlap) - [ ] Multi-tab: adding a tab does not mark previous tab as unread - [ ] Merged chat: Reply from user modal targets the correct tab's composer 🤖 Generated with [Claude Code](https://claude.com/claude-code)
2026-06-13 17:06:24 -04:00
_sendingTimeoutTimer = Timer(const Duration(seconds: 10) + _chatDelay, () {
if (_shouldDisconnect || !_isWaitingForAck) return;
runInAction(() => _finalizeSend(null));
});
feat(video,chat): native player, ad-break awareness, chat send/delay reliability, and tab redesign (#567) Squash-merge commit. Covers four areas: native video player, chat reliability, multi-tab, and hardening. ## Native video player - Direct HLS playback via `better_native_video_player` (forked from `plug-and-pay/flutter-native-video-player`, patched on `frosty-patches` branch) - Twitch GQL playback token fetching with platform cookie extraction (iOS Swift + Android Kotlin plugins) for authenticated streams - Quality selection (source, 720p, 480p, 360p, 160p, audio-only) persisted per channel - Picture-in-picture: iOS automatic inline PiP, Android auto-PiP on API 31+ guarded against older devices - Latency polling, chat latency sync, stall detection/recovery, startup auto-pause recovery, watchdog timers - **Twitch stitched-ad break detection** (HLS `EXT-X-DATERANGE`) on both platforms, emitting `adBreakChanged` so the host suspends latency/stall recovery and chat sync during ads (program-date-time is unreliable then). Matches `CLASS="twitch-stitched-ad"` / `ID="stitched-ad-"` **and** the `X-TV-TWITCH-AD-*` attribute prefix (the durable signal streamlink/yt-dlp use) - Shared `VideoPlayerInterface` so WebView and native paths are interchangeable via settings toggle - `PlaybackAccessToken` model, `TwitchGqlApi` client ## Chat delay & send reliability - **Optimistic send-finalize**: Twitch acks a sent message with a per-PRIVMSG USERSTATE (not an echo), which it can intermittently drop — more so under a long chat delay. A missing ack no longer shows a false "message may not have been sent" error; the send is finalized optimistically (local echo rendered), and only genuine rejection NOTICEs surface an error. Ack timeout scaled by the chat delay. - **Per-line chat-delay bypass**: control/state lines (USERSTATE/ROOMSTATE/GLOBALUSERSTATE), rejection NOTICEs, the reconnect notice, and untagged server lines bypass the delay so send-acks and PONGs aren't stalled; only displayable chat content is delayed, staying in sync with delayed video. - **Measured chat bottom-bar height**: the message list reflows to the composer's real measured height, fixing the input overlapping messages when a long message expands it (replaces a fixed-constant estimate). - IRC tag parsing handles valueless and escaped tags per the IRCv3 message-tags spec (fixes a recent-messages RangeError on certain tags). ## Chat / multi-tab - Redesigned tab chips: unread dot indicator, chips dim until WebSocket connects - Animated tab options popover replacing `MenuAnchor` (no animation hook in Flutter 3.44) - Simplified `ChatTabs` from `StatefulWidget` to `StatelessWidget` - Focus-current-channel fade bump to 0.55; section-header alpha lifted to match the muted-label tier - `addTab` now calls `setActiveTab` to snapshot outgoing tab's `lastSeenMessageId` — fixes spurious unread dots after adding a tab - `onActivateSourceTab` threaded into `ChatUserModal` so Reply in merged mode switches to the correct source tab's composer ## Bug fixes and hardening - **Reverted the experimental iOS low-latency mode** (5s live-edge join + 1.05x catch-up): AVPlayer can't sustain <~18s on Twitch (declared `TARGETDURATION:6` paces playlist refreshes), and the offset starved the buffer into pause-on-launch. Default join distance restored. - Fork (Android): **cap `BEHIND_LIVE_WINDOW` recovery** so a stream repeatedly falling off the live window can't silently re-prepare forever; emits `error` on exhaustion so the host recovery ladder takes over - Guard all Android `setAutoPipMode` calls with `_autoPipAvailable` — prevents `PlatformException` on Android 8–11; check `_disposed` after `isAutoPipAvailable` await to prevent post-dispose auto-PiP re-enable - Remove `_isInPipMode` guard from `_onPaused` so `_paused` tracks actual state, fixing PiP play/pause toggle getting stuck - Tighten iOS cookie domain check to exact `twitch.tv` / `.twitch.tv` suffix - Invalidate the stored web session token when Twitch rejects it with a 401 (profile card flips back to unlinked; future loads skip the doomed authenticated request), and re-extract the cookie on launch when logged in without a linked session - Send `play_session_id` and `player_backend=mediaplayer` to Usher, matching the web client / streamlink - Fork (iOS): restore program-date-time latency measurement (a prior rev measured distance to the manifest edge, reading ~0s and silently disabling high-latency recovery / chat-delay auto-sync); release platform views on dispose (per-stream view + AVPlayerViewController leak), track the observed AVPlayerItem for KVO removal (sibling-view crash), main-thread seek results, resolve superseded load futures - Fork (Android): clean up method handlers orphaned by PiP-time view disposal (leaked audio-focus listeners), drop the live-offset re-anchoring seekTo on metadata updates (latency creep), restore pre-duck volume, respect user pause in the stall watchdog, resolve superseded load futures - Deep review pass: expire the quality-switch flag so stall recovery isn't disabled for the session, cap latency-driven recovery (clock-skew loop), generation-guard the error overlay, two-strike offline confirmation, controller null-safety on quality switch - Tighten `/me` local-echo match (no longer renders `/meow ...` as an action); clear pending send text on disconnect ## Web / docs - Remove stale Cloudflare Images binding from `wrangler.jsonc` (covered by `images.unoptimized: true`) - Correct `web/AGENTS.md` Cache Components claim (feature not enabled) - Repo and agent config cleanup ## Test plan - [x] `flutter analyze` — clean (frosty + plugin lib) - [x] `flutter test` — 319/319 pass (adds `ChatLatencySync`, `StreamInfoPoller`, video timing invariants, `PlaybackAccessToken`, IRC tag parsing) - [x] Android plugin Kotlin compiles against the bumped fork rev - [ ] Native player plays live streams on iOS and Android - [ ] Quality switching works and persists across channel reopens - [ ] PiP enters/exits correctly; pause/resume toggle in PiP window works - [ ] Audio-only mode does not crash on Android < API 31 - [ ] Sending under a long synced chat delay no longer shows a false "may not have been sent" error - [ ] Long composer text reflows the message list (no input/message overlap) - [ ] Multi-tab: adding a tab does not mark previous tab as unread - [ ] Merged chat: Reply from user modal targets the correct tab's composer 🤖 Generated with [Claude Code](https://claude.com/claude-code)
2026-06-13 17:06:24 -04:00
// Build the optimistic local echo from the current USERSTATE. If the
// message is sent before this session's first USERSTATE arrives,
// _buildLocalEcho returns null and the echo is built later, when the
// confirming USERSTATE lands (see the Command.userState handler). The raw
// text is retained so that deferred build is possible.
_pendingSentMessageText = message;
toSend = _buildLocalEcho(message);
}
feat(video,chat): native player, ad-break awareness, chat send/delay reliability, and tab redesign (#567) Squash-merge commit. Covers four areas: native video player, chat reliability, multi-tab, and hardening. ## Native video player - Direct HLS playback via `better_native_video_player` (forked from `plug-and-pay/flutter-native-video-player`, patched on `frosty-patches` branch) - Twitch GQL playback token fetching with platform cookie extraction (iOS Swift + Android Kotlin plugins) for authenticated streams - Quality selection (source, 720p, 480p, 360p, 160p, audio-only) persisted per channel - Picture-in-picture: iOS automatic inline PiP, Android auto-PiP on API 31+ guarded against older devices - Latency polling, chat latency sync, stall detection/recovery, startup auto-pause recovery, watchdog timers - **Twitch stitched-ad break detection** (HLS `EXT-X-DATERANGE`) on both platforms, emitting `adBreakChanged` so the host suspends latency/stall recovery and chat sync during ads (program-date-time is unreliable then). Matches `CLASS="twitch-stitched-ad"` / `ID="stitched-ad-"` **and** the `X-TV-TWITCH-AD-*` attribute prefix (the durable signal streamlink/yt-dlp use) - Shared `VideoPlayerInterface` so WebView and native paths are interchangeable via settings toggle - `PlaybackAccessToken` model, `TwitchGqlApi` client ## Chat delay & send reliability - **Optimistic send-finalize**: Twitch acks a sent message with a per-PRIVMSG USERSTATE (not an echo), which it can intermittently drop — more so under a long chat delay. A missing ack no longer shows a false "message may not have been sent" error; the send is finalized optimistically (local echo rendered), and only genuine rejection NOTICEs surface an error. Ack timeout scaled by the chat delay. - **Per-line chat-delay bypass**: control/state lines (USERSTATE/ROOMSTATE/GLOBALUSERSTATE), rejection NOTICEs, the reconnect notice, and untagged server lines bypass the delay so send-acks and PONGs aren't stalled; only displayable chat content is delayed, staying in sync with delayed video. - **Measured chat bottom-bar height**: the message list reflows to the composer's real measured height, fixing the input overlapping messages when a long message expands it (replaces a fixed-constant estimate). - IRC tag parsing handles valueless and escaped tags per the IRCv3 message-tags spec (fixes a recent-messages RangeError on certain tags). ## Chat / multi-tab - Redesigned tab chips: unread dot indicator, chips dim until WebSocket connects - Animated tab options popover replacing `MenuAnchor` (no animation hook in Flutter 3.44) - Simplified `ChatTabs` from `StatefulWidget` to `StatelessWidget` - Focus-current-channel fade bump to 0.55; section-header alpha lifted to match the muted-label tier - `addTab` now calls `setActiveTab` to snapshot outgoing tab's `lastSeenMessageId` — fixes spurious unread dots after adding a tab - `onActivateSourceTab` threaded into `ChatUserModal` so Reply in merged mode switches to the correct source tab's composer ## Bug fixes and hardening - **Reverted the experimental iOS low-latency mode** (5s live-edge join + 1.05x catch-up): AVPlayer can't sustain <~18s on Twitch (declared `TARGETDURATION:6` paces playlist refreshes), and the offset starved the buffer into pause-on-launch. Default join distance restored. - Fork (Android): **cap `BEHIND_LIVE_WINDOW` recovery** so a stream repeatedly falling off the live window can't silently re-prepare forever; emits `error` on exhaustion so the host recovery ladder takes over - Guard all Android `setAutoPipMode` calls with `_autoPipAvailable` — prevents `PlatformException` on Android 8–11; check `_disposed` after `isAutoPipAvailable` await to prevent post-dispose auto-PiP re-enable - Remove `_isInPipMode` guard from `_onPaused` so `_paused` tracks actual state, fixing PiP play/pause toggle getting stuck - Tighten iOS cookie domain check to exact `twitch.tv` / `.twitch.tv` suffix - Invalidate the stored web session token when Twitch rejects it with a 401 (profile card flips back to unlinked; future loads skip the doomed authenticated request), and re-extract the cookie on launch when logged in without a linked session - Send `play_session_id` and `player_backend=mediaplayer` to Usher, matching the web client / streamlink - Fork (iOS): restore program-date-time latency measurement (a prior rev measured distance to the manifest edge, reading ~0s and silently disabling high-latency recovery / chat-delay auto-sync); release platform views on dispose (per-stream view + AVPlayerViewController leak), track the observed AVPlayerItem for KVO removal (sibling-view crash), main-thread seek results, resolve superseded load futures - Fork (Android): clean up method handlers orphaned by PiP-time view disposal (leaked audio-focus listeners), drop the live-offset re-anchoring seekTo on metadata updates (latency creep), restore pre-duck volume, respect user pause in the stall watchdog, resolve superseded load futures - Deep review pass: expire the quality-switch flag so stall recovery isn't disabled for the session, cap latency-driven recovery (clock-skew loop), generation-guard the error overlay, two-strike offline confirmation, controller null-safety on quality switch - Tighten `/me` local-echo match (no longer renders `/meow ...` as an action); clear pending send text on disconnect ## Web / docs - Remove stale Cloudflare Images binding from `wrangler.jsonc` (covered by `images.unoptimized: true`) - Correct `web/AGENTS.md` Cache Components claim (feature not enabled) - Repo and agent config cleanup ## Test plan - [x] `flutter analyze` — clean (frosty + plugin lib) - [x] `flutter test` — 319/319 pass (adds `ChatLatencySync`, `StreamInfoPoller`, video timing invariants, `PlaybackAccessToken`, IRC tag parsing) - [x] Android plugin Kotlin compiles against the bumped fork rev - [ ] Native player plays live streams on iOS and Android - [ ] Quality switching works and persists across channel reopens - [ ] PiP enters/exits correctly; pause/resume toggle in PiP window works - [ ] Audio-only mode does not crash on Android < API 31 - [ ] Sending under a long synced chat delay no longer shows a false "may not have been sent" error - [ ] Long composer text reflows the message list (no input/message overlap) - [ ] Multi-tab: adding a tab does not mark previous tab as unread - [ ] Merged chat: Reply from user modal targets the correct tab's composer 🤖 Generated with [Claude Code](https://claude.com/claude-code)
2026-06-13 17:06:24 -04:00
/// Renders the pending outgoing message's local echo (building it lazily if
/// it couldn't be built at send time) and clears all send-pending state.
/// Shared by the USERSTATE confirmation and the optimistic timeout fallback.
/// [serverMessageId] is the `id` tag from the confirming USERSTATE, or null
/// when finalizing optimistically without one.
void _finalizeSend(String? serverMessageId) {
toSend ??= _pendingSentMessageText != null
? _buildLocalEcho(_pendingSentMessageText!)
: null;
if (toSend != null) {
// Prefer the server id; fall back to any id already set, then a local one.
toSend!.tags['id'] =
serverMessageId ??
feat(video,chat): native player, ad-break awareness, chat send/delay reliability, and tab redesign (#567) Squash-merge commit. Covers four areas: native video player, chat reliability, multi-tab, and hardening. ## Native video player - Direct HLS playback via `better_native_video_player` (forked from `plug-and-pay/flutter-native-video-player`, patched on `frosty-patches` branch) - Twitch GQL playback token fetching with platform cookie extraction (iOS Swift + Android Kotlin plugins) for authenticated streams - Quality selection (source, 720p, 480p, 360p, 160p, audio-only) persisted per channel - Picture-in-picture: iOS automatic inline PiP, Android auto-PiP on API 31+ guarded against older devices - Latency polling, chat latency sync, stall detection/recovery, startup auto-pause recovery, watchdog timers - **Twitch stitched-ad break detection** (HLS `EXT-X-DATERANGE`) on both platforms, emitting `adBreakChanged` so the host suspends latency/stall recovery and chat sync during ads (program-date-time is unreliable then). Matches `CLASS="twitch-stitched-ad"` / `ID="stitched-ad-"` **and** the `X-TV-TWITCH-AD-*` attribute prefix (the durable signal streamlink/yt-dlp use) - Shared `VideoPlayerInterface` so WebView and native paths are interchangeable via settings toggle - `PlaybackAccessToken` model, `TwitchGqlApi` client ## Chat delay & send reliability - **Optimistic send-finalize**: Twitch acks a sent message with a per-PRIVMSG USERSTATE (not an echo), which it can intermittently drop — more so under a long chat delay. A missing ack no longer shows a false "message may not have been sent" error; the send is finalized optimistically (local echo rendered), and only genuine rejection NOTICEs surface an error. Ack timeout scaled by the chat delay. - **Per-line chat-delay bypass**: control/state lines (USERSTATE/ROOMSTATE/GLOBALUSERSTATE), rejection NOTICEs, the reconnect notice, and untagged server lines bypass the delay so send-acks and PONGs aren't stalled; only displayable chat content is delayed, staying in sync with delayed video. - **Measured chat bottom-bar height**: the message list reflows to the composer's real measured height, fixing the input overlapping messages when a long message expands it (replaces a fixed-constant estimate). - IRC tag parsing handles valueless and escaped tags per the IRCv3 message-tags spec (fixes a recent-messages RangeError on certain tags). ## Chat / multi-tab - Redesigned tab chips: unread dot indicator, chips dim until WebSocket connects - Animated tab options popover replacing `MenuAnchor` (no animation hook in Flutter 3.44) - Simplified `ChatTabs` from `StatefulWidget` to `StatelessWidget` - Focus-current-channel fade bump to 0.55; section-header alpha lifted to match the muted-label tier - `addTab` now calls `setActiveTab` to snapshot outgoing tab's `lastSeenMessageId` — fixes spurious unread dots after adding a tab - `onActivateSourceTab` threaded into `ChatUserModal` so Reply in merged mode switches to the correct source tab's composer ## Bug fixes and hardening - **Reverted the experimental iOS low-latency mode** (5s live-edge join + 1.05x catch-up): AVPlayer can't sustain <~18s on Twitch (declared `TARGETDURATION:6` paces playlist refreshes), and the offset starved the buffer into pause-on-launch. Default join distance restored. - Fork (Android): **cap `BEHIND_LIVE_WINDOW` recovery** so a stream repeatedly falling off the live window can't silently re-prepare forever; emits `error` on exhaustion so the host recovery ladder takes over - Guard all Android `setAutoPipMode` calls with `_autoPipAvailable` — prevents `PlatformException` on Android 8–11; check `_disposed` after `isAutoPipAvailable` await to prevent post-dispose auto-PiP re-enable - Remove `_isInPipMode` guard from `_onPaused` so `_paused` tracks actual state, fixing PiP play/pause toggle getting stuck - Tighten iOS cookie domain check to exact `twitch.tv` / `.twitch.tv` suffix - Invalidate the stored web session token when Twitch rejects it with a 401 (profile card flips back to unlinked; future loads skip the doomed authenticated request), and re-extract the cookie on launch when logged in without a linked session - Send `play_session_id` and `player_backend=mediaplayer` to Usher, matching the web client / streamlink - Fork (iOS): restore program-date-time latency measurement (a prior rev measured distance to the manifest edge, reading ~0s and silently disabling high-latency recovery / chat-delay auto-sync); release platform views on dispose (per-stream view + AVPlayerViewController leak), track the observed AVPlayerItem for KVO removal (sibling-view crash), main-thread seek results, resolve superseded load futures - Fork (Android): clean up method handlers orphaned by PiP-time view disposal (leaked audio-focus listeners), drop the live-offset re-anchoring seekTo on metadata updates (latency creep), restore pre-duck volume, respect user pause in the stall watchdog, resolve superseded load futures - Deep review pass: expire the quality-switch flag so stall recovery isn't disabled for the session, cap latency-driven recovery (clock-skew loop), generation-guard the error overlay, two-strike offline confirmation, controller null-safety on quality switch - Tighten `/me` local-echo match (no longer renders `/meow ...` as an action); clear pending send text on disconnect ## Web / docs - Remove stale Cloudflare Images binding from `wrangler.jsonc` (covered by `images.unoptimized: true`) - Correct `web/AGENTS.md` Cache Components claim (feature not enabled) - Repo and agent config cleanup ## Test plan - [x] `flutter analyze` — clean (frosty + plugin lib) - [x] `flutter test` — 319/319 pass (adds `ChatLatencySync`, `StreamInfoPoller`, video timing invariants, `PlaybackAccessToken`, IRC tag parsing) - [x] Android plugin Kotlin compiles against the bumped fork rev - [ ] Native player plays live streams on iOS and Android - [ ] Quality switching works and persists across channel reopens - [ ] PiP enters/exits correctly; pause/resume toggle in PiP window works - [ ] Audio-only mode does not crash on Android < API 31 - [ ] Sending under a long synced chat delay no longer shows a false "may not have been sent" error - [ ] Long composer text reflows the message list (no input/message overlap) - [ ] Multi-tab: adding a tab does not mark previous tab as unread - [ ] Merged chat: Reply from user modal targets the correct tab's composer 🤖 Generated with [Claude Code](https://claude.com/claude-code)
2026-06-13 17:06:24 -04:00
toSend!.tags['id'] ??
'local-${DateTime.now().millisecondsSinceEpoch}';
messageBuffer.add(toSend!);
toSend = null;
}
_pendingSentMessageText = null;
_sendingTimeoutTimer?.cancel();
_isWaitingForAck = false;
textController.clear();
replyingToMessage = null;
}
feat(video,chat): native player, ad-break awareness, chat send/delay reliability, and tab redesign (#567) Squash-merge commit. Covers four areas: native video player, chat reliability, multi-tab, and hardening. ## Native video player - Direct HLS playback via `better_native_video_player` (forked from `plug-and-pay/flutter-native-video-player`, patched on `frosty-patches` branch) - Twitch GQL playback token fetching with platform cookie extraction (iOS Swift + Android Kotlin plugins) for authenticated streams - Quality selection (source, 720p, 480p, 360p, 160p, audio-only) persisted per channel - Picture-in-picture: iOS automatic inline PiP, Android auto-PiP on API 31+ guarded against older devices - Latency polling, chat latency sync, stall detection/recovery, startup auto-pause recovery, watchdog timers - **Twitch stitched-ad break detection** (HLS `EXT-X-DATERANGE`) on both platforms, emitting `adBreakChanged` so the host suspends latency/stall recovery and chat sync during ads (program-date-time is unreliable then). Matches `CLASS="twitch-stitched-ad"` / `ID="stitched-ad-"` **and** the `X-TV-TWITCH-AD-*` attribute prefix (the durable signal streamlink/yt-dlp use) - Shared `VideoPlayerInterface` so WebView and native paths are interchangeable via settings toggle - `PlaybackAccessToken` model, `TwitchGqlApi` client ## Chat delay & send reliability - **Optimistic send-finalize**: Twitch acks a sent message with a per-PRIVMSG USERSTATE (not an echo), which it can intermittently drop — more so under a long chat delay. A missing ack no longer shows a false "message may not have been sent" error; the send is finalized optimistically (local echo rendered), and only genuine rejection NOTICEs surface an error. Ack timeout scaled by the chat delay. - **Per-line chat-delay bypass**: control/state lines (USERSTATE/ROOMSTATE/GLOBALUSERSTATE), rejection NOTICEs, the reconnect notice, and untagged server lines bypass the delay so send-acks and PONGs aren't stalled; only displayable chat content is delayed, staying in sync with delayed video. - **Measured chat bottom-bar height**: the message list reflows to the composer's real measured height, fixing the input overlapping messages when a long message expands it (replaces a fixed-constant estimate). - IRC tag parsing handles valueless and escaped tags per the IRCv3 message-tags spec (fixes a recent-messages RangeError on certain tags). ## Chat / multi-tab - Redesigned tab chips: unread dot indicator, chips dim until WebSocket connects - Animated tab options popover replacing `MenuAnchor` (no animation hook in Flutter 3.44) - Simplified `ChatTabs` from `StatefulWidget` to `StatelessWidget` - Focus-current-channel fade bump to 0.55; section-header alpha lifted to match the muted-label tier - `addTab` now calls `setActiveTab` to snapshot outgoing tab's `lastSeenMessageId` — fixes spurious unread dots after adding a tab - `onActivateSourceTab` threaded into `ChatUserModal` so Reply in merged mode switches to the correct source tab's composer ## Bug fixes and hardening - **Reverted the experimental iOS low-latency mode** (5s live-edge join + 1.05x catch-up): AVPlayer can't sustain <~18s on Twitch (declared `TARGETDURATION:6` paces playlist refreshes), and the offset starved the buffer into pause-on-launch. Default join distance restored. - Fork (Android): **cap `BEHIND_LIVE_WINDOW` recovery** so a stream repeatedly falling off the live window can't silently re-prepare forever; emits `error` on exhaustion so the host recovery ladder takes over - Guard all Android `setAutoPipMode` calls with `_autoPipAvailable` — prevents `PlatformException` on Android 8–11; check `_disposed` after `isAutoPipAvailable` await to prevent post-dispose auto-PiP re-enable - Remove `_isInPipMode` guard from `_onPaused` so `_paused` tracks actual state, fixing PiP play/pause toggle getting stuck - Tighten iOS cookie domain check to exact `twitch.tv` / `.twitch.tv` suffix - Invalidate the stored web session token when Twitch rejects it with a 401 (profile card flips back to unlinked; future loads skip the doomed authenticated request), and re-extract the cookie on launch when logged in without a linked session - Send `play_session_id` and `player_backend=mediaplayer` to Usher, matching the web client / streamlink - Fork (iOS): restore program-date-time latency measurement (a prior rev measured distance to the manifest edge, reading ~0s and silently disabling high-latency recovery / chat-delay auto-sync); release platform views on dispose (per-stream view + AVPlayerViewController leak), track the observed AVPlayerItem for KVO removal (sibling-view crash), main-thread seek results, resolve superseded load futures - Fork (Android): clean up method handlers orphaned by PiP-time view disposal (leaked audio-focus listeners), drop the live-offset re-anchoring seekTo on metadata updates (latency creep), restore pre-duck volume, respect user pause in the stall watchdog, resolve superseded load futures - Deep review pass: expire the quality-switch flag so stall recovery isn't disabled for the session, cap latency-driven recovery (clock-skew loop), generation-guard the error overlay, two-strike offline confirmation, controller null-safety on quality switch - Tighten `/me` local-echo match (no longer renders `/meow ...` as an action); clear pending send text on disconnect ## Web / docs - Remove stale Cloudflare Images binding from `wrangler.jsonc` (covered by `images.unoptimized: true`) - Correct `web/AGENTS.md` Cache Components claim (feature not enabled) - Repo and agent config cleanup ## Test plan - [x] `flutter analyze` — clean (frosty + plugin lib) - [x] `flutter test` — 319/319 pass (adds `ChatLatencySync`, `StreamInfoPoller`, video timing invariants, `PlaybackAccessToken`, IRC tag parsing) - [x] Android plugin Kotlin compiles against the bumped fork rev - [ ] Native player plays live streams on iOS and Android - [ ] Quality switching works and persists across channel reopens - [ ] PiP enters/exits correctly; pause/resume toggle in PiP window works - [ ] Audio-only mode does not crash on Android < API 31 - [ ] Sending under a long synced chat delay no longer shows a false "may not have been sent" error - [ ] Long composer text reflows the message list (no input/message overlap) - [ ] Multi-tab: adding a tab does not mark previous tab as unread - [ ] Merged chat: Reply from user modal targets the correct tab's composer 🤖 Generated with [Claude Code](https://claude.com/claude-code)
2026-06-13 17:06:24 -04:00
/// Builds the optimistic local echo of an outgoing [message] from the current
/// USERSTATE, or null if no USERSTATE has been received yet this session
/// (the echo can't be rendered without the user's badges/color/display-name).
IRCMessage? _buildLocalEcho(String message) {
var userStateString = _userState.raw;
if (userStateString == null) return null;
feat(video,chat): native player, ad-break awareness, chat send/delay reliability, and tab redesign (#567) Squash-merge commit. Covers four areas: native video player, chat reliability, multi-tab, and hardening. ## Native video player - Direct HLS playback via `better_native_video_player` (forked from `plug-and-pay/flutter-native-video-player`, patched on `frosty-patches` branch) - Twitch GQL playback token fetching with platform cookie extraction (iOS Swift + Android Kotlin plugins) for authenticated streams - Quality selection (source, 720p, 480p, 360p, 160p, audio-only) persisted per channel - Picture-in-picture: iOS automatic inline PiP, Android auto-PiP on API 31+ guarded against older devices - Latency polling, chat latency sync, stall detection/recovery, startup auto-pause recovery, watchdog timers - **Twitch stitched-ad break detection** (HLS `EXT-X-DATERANGE`) on both platforms, emitting `adBreakChanged` so the host suspends latency/stall recovery and chat sync during ads (program-date-time is unreliable then). Matches `CLASS="twitch-stitched-ad"` / `ID="stitched-ad-"` **and** the `X-TV-TWITCH-AD-*` attribute prefix (the durable signal streamlink/yt-dlp use) - Shared `VideoPlayerInterface` so WebView and native paths are interchangeable via settings toggle - `PlaybackAccessToken` model, `TwitchGqlApi` client ## Chat delay & send reliability - **Optimistic send-finalize**: Twitch acks a sent message with a per-PRIVMSG USERSTATE (not an echo), which it can intermittently drop — more so under a long chat delay. A missing ack no longer shows a false "message may not have been sent" error; the send is finalized optimistically (local echo rendered), and only genuine rejection NOTICEs surface an error. Ack timeout scaled by the chat delay. - **Per-line chat-delay bypass**: control/state lines (USERSTATE/ROOMSTATE/GLOBALUSERSTATE), rejection NOTICEs, the reconnect notice, and untagged server lines bypass the delay so send-acks and PONGs aren't stalled; only displayable chat content is delayed, staying in sync with delayed video. - **Measured chat bottom-bar height**: the message list reflows to the composer's real measured height, fixing the input overlapping messages when a long message expands it (replaces a fixed-constant estimate). - IRC tag parsing handles valueless and escaped tags per the IRCv3 message-tags spec (fixes a recent-messages RangeError on certain tags). ## Chat / multi-tab - Redesigned tab chips: unread dot indicator, chips dim until WebSocket connects - Animated tab options popover replacing `MenuAnchor` (no animation hook in Flutter 3.44) - Simplified `ChatTabs` from `StatefulWidget` to `StatelessWidget` - Focus-current-channel fade bump to 0.55; section-header alpha lifted to match the muted-label tier - `addTab` now calls `setActiveTab` to snapshot outgoing tab's `lastSeenMessageId` — fixes spurious unread dots after adding a tab - `onActivateSourceTab` threaded into `ChatUserModal` so Reply in merged mode switches to the correct source tab's composer ## Bug fixes and hardening - **Reverted the experimental iOS low-latency mode** (5s live-edge join + 1.05x catch-up): AVPlayer can't sustain <~18s on Twitch (declared `TARGETDURATION:6` paces playlist refreshes), and the offset starved the buffer into pause-on-launch. Default join distance restored. - Fork (Android): **cap `BEHIND_LIVE_WINDOW` recovery** so a stream repeatedly falling off the live window can't silently re-prepare forever; emits `error` on exhaustion so the host recovery ladder takes over - Guard all Android `setAutoPipMode` calls with `_autoPipAvailable` — prevents `PlatformException` on Android 8–11; check `_disposed` after `isAutoPipAvailable` await to prevent post-dispose auto-PiP re-enable - Remove `_isInPipMode` guard from `_onPaused` so `_paused` tracks actual state, fixing PiP play/pause toggle getting stuck - Tighten iOS cookie domain check to exact `twitch.tv` / `.twitch.tv` suffix - Invalidate the stored web session token when Twitch rejects it with a 401 (profile card flips back to unlinked; future loads skip the doomed authenticated request), and re-extract the cookie on launch when logged in without a linked session - Send `play_session_id` and `player_backend=mediaplayer` to Usher, matching the web client / streamlink - Fork (iOS): restore program-date-time latency measurement (a prior rev measured distance to the manifest edge, reading ~0s and silently disabling high-latency recovery / chat-delay auto-sync); release platform views on dispose (per-stream view + AVPlayerViewController leak), track the observed AVPlayerItem for KVO removal (sibling-view crash), main-thread seek results, resolve superseded load futures - Fork (Android): clean up method handlers orphaned by PiP-time view disposal (leaked audio-focus listeners), drop the live-offset re-anchoring seekTo on metadata updates (latency creep), restore pre-duck volume, respect user pause in the stall watchdog, resolve superseded load futures - Deep review pass: expire the quality-switch flag so stall recovery isn't disabled for the session, cap latency-driven recovery (clock-skew loop), generation-guard the error overlay, two-strike offline confirmation, controller null-safety on quality switch - Tighten `/me` local-echo match (no longer renders `/meow ...` as an action); clear pending send text on disconnect ## Web / docs - Remove stale Cloudflare Images binding from `wrangler.jsonc` (covered by `images.unoptimized: true`) - Correct `web/AGENTS.md` Cache Components claim (feature not enabled) - Repo and agent config cleanup ## Test plan - [x] `flutter analyze` — clean (frosty + plugin lib) - [x] `flutter test` — 319/319 pass (adds `ChatLatencySync`, `StreamInfoPoller`, video timing invariants, `PlaybackAccessToken`, IRC tag parsing) - [x] Android plugin Kotlin compiles against the bumped fork rev - [ ] Native player plays live streams on iOS and Android - [ ] Quality switching works and persists across channel reopens - [ ] PiP enters/exits correctly; pause/resume toggle in PiP window works - [ ] Audio-only mode does not crash on Android < API 31 - [ ] Sending under a long synced chat delay no longer shows a false "may not have been sent" error - [ ] Long composer text reflows the message list (no input/message overlap) - [ ] Multi-tab: adding a tab does not mark previous tab as unread - [ ] Merged chat: Reply from user modal targets the correct tab's composer 🤖 Generated with [Claude Code](https://claude.com/claude-code)
2026-06-13 17:06:24 -04:00
if (message == '/me' || message.startsWith('/me ')) {
userStateString +=
' :\x01ACTION ${message.replaceRange(0, 3, '').trim()}\x01';
} else {
userStateString +=
' :${replyingToMessage?.tags['display-name'] != null ? '@${replyingToMessage!.tags['display-name']} ' : ''}${message.trim()}';
}
feat(video,chat): native player, ad-break awareness, chat send/delay reliability, and tab redesign (#567) Squash-merge commit. Covers four areas: native video player, chat reliability, multi-tab, and hardening. ## Native video player - Direct HLS playback via `better_native_video_player` (forked from `plug-and-pay/flutter-native-video-player`, patched on `frosty-patches` branch) - Twitch GQL playback token fetching with platform cookie extraction (iOS Swift + Android Kotlin plugins) for authenticated streams - Quality selection (source, 720p, 480p, 360p, 160p, audio-only) persisted per channel - Picture-in-picture: iOS automatic inline PiP, Android auto-PiP on API 31+ guarded against older devices - Latency polling, chat latency sync, stall detection/recovery, startup auto-pause recovery, watchdog timers - **Twitch stitched-ad break detection** (HLS `EXT-X-DATERANGE`) on both platforms, emitting `adBreakChanged` so the host suspends latency/stall recovery and chat sync during ads (program-date-time is unreliable then). Matches `CLASS="twitch-stitched-ad"` / `ID="stitched-ad-"` **and** the `X-TV-TWITCH-AD-*` attribute prefix (the durable signal streamlink/yt-dlp use) - Shared `VideoPlayerInterface` so WebView and native paths are interchangeable via settings toggle - `PlaybackAccessToken` model, `TwitchGqlApi` client ## Chat delay & send reliability - **Optimistic send-finalize**: Twitch acks a sent message with a per-PRIVMSG USERSTATE (not an echo), which it can intermittently drop — more so under a long chat delay. A missing ack no longer shows a false "message may not have been sent" error; the send is finalized optimistically (local echo rendered), and only genuine rejection NOTICEs surface an error. Ack timeout scaled by the chat delay. - **Per-line chat-delay bypass**: control/state lines (USERSTATE/ROOMSTATE/GLOBALUSERSTATE), rejection NOTICEs, the reconnect notice, and untagged server lines bypass the delay so send-acks and PONGs aren't stalled; only displayable chat content is delayed, staying in sync with delayed video. - **Measured chat bottom-bar height**: the message list reflows to the composer's real measured height, fixing the input overlapping messages when a long message expands it (replaces a fixed-constant estimate). - IRC tag parsing handles valueless and escaped tags per the IRCv3 message-tags spec (fixes a recent-messages RangeError on certain tags). ## Chat / multi-tab - Redesigned tab chips: unread dot indicator, chips dim until WebSocket connects - Animated tab options popover replacing `MenuAnchor` (no animation hook in Flutter 3.44) - Simplified `ChatTabs` from `StatefulWidget` to `StatelessWidget` - Focus-current-channel fade bump to 0.55; section-header alpha lifted to match the muted-label tier - `addTab` now calls `setActiveTab` to snapshot outgoing tab's `lastSeenMessageId` — fixes spurious unread dots after adding a tab - `onActivateSourceTab` threaded into `ChatUserModal` so Reply in merged mode switches to the correct source tab's composer ## Bug fixes and hardening - **Reverted the experimental iOS low-latency mode** (5s live-edge join + 1.05x catch-up): AVPlayer can't sustain <~18s on Twitch (declared `TARGETDURATION:6` paces playlist refreshes), and the offset starved the buffer into pause-on-launch. Default join distance restored. - Fork (Android): **cap `BEHIND_LIVE_WINDOW` recovery** so a stream repeatedly falling off the live window can't silently re-prepare forever; emits `error` on exhaustion so the host recovery ladder takes over - Guard all Android `setAutoPipMode` calls with `_autoPipAvailable` — prevents `PlatformException` on Android 8–11; check `_disposed` after `isAutoPipAvailable` await to prevent post-dispose auto-PiP re-enable - Remove `_isInPipMode` guard from `_onPaused` so `_paused` tracks actual state, fixing PiP play/pause toggle getting stuck - Tighten iOS cookie domain check to exact `twitch.tv` / `.twitch.tv` suffix - Invalidate the stored web session token when Twitch rejects it with a 401 (profile card flips back to unlinked; future loads skip the doomed authenticated request), and re-extract the cookie on launch when logged in without a linked session - Send `play_session_id` and `player_backend=mediaplayer` to Usher, matching the web client / streamlink - Fork (iOS): restore program-date-time latency measurement (a prior rev measured distance to the manifest edge, reading ~0s and silently disabling high-latency recovery / chat-delay auto-sync); release platform views on dispose (per-stream view + AVPlayerViewController leak), track the observed AVPlayerItem for KVO removal (sibling-view crash), main-thread seek results, resolve superseded load futures - Fork (Android): clean up method handlers orphaned by PiP-time view disposal (leaked audio-focus listeners), drop the live-offset re-anchoring seekTo on metadata updates (latency creep), restore pre-duck volume, respect user pause in the stall watchdog, resolve superseded load futures - Deep review pass: expire the quality-switch flag so stall recovery isn't disabled for the session, cap latency-driven recovery (clock-skew loop), generation-guard the error overlay, two-strike offline confirmation, controller null-safety on quality switch - Tighten `/me` local-echo match (no longer renders `/meow ...` as an action); clear pending send text on disconnect ## Web / docs - Remove stale Cloudflare Images binding from `wrangler.jsonc` (covered by `images.unoptimized: true`) - Correct `web/AGENTS.md` Cache Components claim (feature not enabled) - Repo and agent config cleanup ## Test plan - [x] `flutter analyze` — clean (frosty + plugin lib) - [x] `flutter test` — 319/319 pass (adds `ChatLatencySync`, `StreamInfoPoller`, video timing invariants, `PlaybackAccessToken`, IRC tag parsing) - [x] Android plugin Kotlin compiles against the bumped fork rev - [ ] Native player plays live streams on iOS and Android - [ ] Quality switching works and persists across channel reopens - [ ] PiP enters/exits correctly; pause/resume toggle in PiP window works - [ ] Audio-only mode does not crash on Android < API 31 - [ ] Sending under a long synced chat delay no longer shows a false "may not have been sent" error - [ ] Long composer text reflows the message list (no input/message overlap) - [ ] Multi-tab: adding a tab does not mark previous tab as unread - [ ] Merged chat: Reply from user modal targets the correct tab's composer 🤖 Generated with [Claude Code](https://claude.com/claude-code)
2026-06-13 17:06:24 -04:00
final userChatMessage = IRCMessage.fromString(userStateString);
userChatMessage.localEmotes?.addAll(assetsStore.userEmoteToObject);
if (auth.isLoggedIn && auth.user.details != null) {
userChatMessage.tags['user-id'] = auth.user.details!.id;
}
feat(video,chat): native player, ad-break awareness, chat send/delay reliability, and tab redesign (#567) Squash-merge commit. Covers four areas: native video player, chat reliability, multi-tab, and hardening. ## Native video player - Direct HLS playback via `better_native_video_player` (forked from `plug-and-pay/flutter-native-video-player`, patched on `frosty-patches` branch) - Twitch GQL playback token fetching with platform cookie extraction (iOS Swift + Android Kotlin plugins) for authenticated streams - Quality selection (source, 720p, 480p, 360p, 160p, audio-only) persisted per channel - Picture-in-picture: iOS automatic inline PiP, Android auto-PiP on API 31+ guarded against older devices - Latency polling, chat latency sync, stall detection/recovery, startup auto-pause recovery, watchdog timers - **Twitch stitched-ad break detection** (HLS `EXT-X-DATERANGE`) on both platforms, emitting `adBreakChanged` so the host suspends latency/stall recovery and chat sync during ads (program-date-time is unreliable then). Matches `CLASS="twitch-stitched-ad"` / `ID="stitched-ad-"` **and** the `X-TV-TWITCH-AD-*` attribute prefix (the durable signal streamlink/yt-dlp use) - Shared `VideoPlayerInterface` so WebView and native paths are interchangeable via settings toggle - `PlaybackAccessToken` model, `TwitchGqlApi` client ## Chat delay & send reliability - **Optimistic send-finalize**: Twitch acks a sent message with a per-PRIVMSG USERSTATE (not an echo), which it can intermittently drop — more so under a long chat delay. A missing ack no longer shows a false "message may not have been sent" error; the send is finalized optimistically (local echo rendered), and only genuine rejection NOTICEs surface an error. Ack timeout scaled by the chat delay. - **Per-line chat-delay bypass**: control/state lines (USERSTATE/ROOMSTATE/GLOBALUSERSTATE), rejection NOTICEs, the reconnect notice, and untagged server lines bypass the delay so send-acks and PONGs aren't stalled; only displayable chat content is delayed, staying in sync with delayed video. - **Measured chat bottom-bar height**: the message list reflows to the composer's real measured height, fixing the input overlapping messages when a long message expands it (replaces a fixed-constant estimate). - IRC tag parsing handles valueless and escaped tags per the IRCv3 message-tags spec (fixes a recent-messages RangeError on certain tags). ## Chat / multi-tab - Redesigned tab chips: unread dot indicator, chips dim until WebSocket connects - Animated tab options popover replacing `MenuAnchor` (no animation hook in Flutter 3.44) - Simplified `ChatTabs` from `StatefulWidget` to `StatelessWidget` - Focus-current-channel fade bump to 0.55; section-header alpha lifted to match the muted-label tier - `addTab` now calls `setActiveTab` to snapshot outgoing tab's `lastSeenMessageId` — fixes spurious unread dots after adding a tab - `onActivateSourceTab` threaded into `ChatUserModal` so Reply in merged mode switches to the correct source tab's composer ## Bug fixes and hardening - **Reverted the experimental iOS low-latency mode** (5s live-edge join + 1.05x catch-up): AVPlayer can't sustain <~18s on Twitch (declared `TARGETDURATION:6` paces playlist refreshes), and the offset starved the buffer into pause-on-launch. Default join distance restored. - Fork (Android): **cap `BEHIND_LIVE_WINDOW` recovery** so a stream repeatedly falling off the live window can't silently re-prepare forever; emits `error` on exhaustion so the host recovery ladder takes over - Guard all Android `setAutoPipMode` calls with `_autoPipAvailable` — prevents `PlatformException` on Android 8–11; check `_disposed` after `isAutoPipAvailable` await to prevent post-dispose auto-PiP re-enable - Remove `_isInPipMode` guard from `_onPaused` so `_paused` tracks actual state, fixing PiP play/pause toggle getting stuck - Tighten iOS cookie domain check to exact `twitch.tv` / `.twitch.tv` suffix - Invalidate the stored web session token when Twitch rejects it with a 401 (profile card flips back to unlinked; future loads skip the doomed authenticated request), and re-extract the cookie on launch when logged in without a linked session - Send `play_session_id` and `player_backend=mediaplayer` to Usher, matching the web client / streamlink - Fork (iOS): restore program-date-time latency measurement (a prior rev measured distance to the manifest edge, reading ~0s and silently disabling high-latency recovery / chat-delay auto-sync); release platform views on dispose (per-stream view + AVPlayerViewController leak), track the observed AVPlayerItem for KVO removal (sibling-view crash), main-thread seek results, resolve superseded load futures - Fork (Android): clean up method handlers orphaned by PiP-time view disposal (leaked audio-focus listeners), drop the live-offset re-anchoring seekTo on metadata updates (latency creep), restore pre-duck volume, respect user pause in the stall watchdog, resolve superseded load futures - Deep review pass: expire the quality-switch flag so stall recovery isn't disabled for the session, cap latency-driven recovery (clock-skew loop), generation-guard the error overlay, two-strike offline confirmation, controller null-safety on quality switch - Tighten `/me` local-echo match (no longer renders `/meow ...` as an action); clear pending send text on disconnect ## Web / docs - Remove stale Cloudflare Images binding from `wrangler.jsonc` (covered by `images.unoptimized: true`) - Correct `web/AGENTS.md` Cache Components claim (feature not enabled) - Repo and agent config cleanup ## Test plan - [x] `flutter analyze` — clean (frosty + plugin lib) - [x] `flutter test` — 319/319 pass (adds `ChatLatencySync`, `StreamInfoPoller`, video timing invariants, `PlaybackAccessToken`, IRC tag parsing) - [x] Android plugin Kotlin compiles against the bumped fork rev - [ ] Native player plays live streams on iOS and Android - [ ] Quality switching works and persists across channel reopens - [ ] PiP enters/exits correctly; pause/resume toggle in PiP window works - [ ] Audio-only mode does not crash on Android < API 31 - [ ] Sending under a long synced chat delay no longer shows a false "may not have been sent" error - [ ] Long composer text reflows the message list (no input/message overlap) - [ ] Multi-tab: adding a tab does not mark previous tab as unread - [ ] Merged chat: Reply from user modal targets the correct tab's composer 🤖 Generated with [Claude Code](https://claude.com/claude-code)
2026-06-13 17:06:24 -04:00
if (replyingToMessage != null && replyingToMessage!.tags['id'] != null) {
userChatMessage.tags['reply-parent-msg-id'] =
replyingToMessage!.tags['id']!;
userChatMessage.tags['reply-parent-display-name'] =
replyingToMessage!.tags['display-name'] ?? '';
userChatMessage.tags['reply-parent-msg-body'] =
replyingToMessage!.message ?? '';
}
// Ensure a timestamp so merged-mode sorting works correctly.
userChatMessage.tags['tmi-sent-ts'] ??=
'${DateTime.now().millisecondsSinceEpoch}';
return userChatMessage;
}
/// Adds the given [emote] to the chat textfield.
@action
void addEmote(Emote emote, {bool autocompleteMode = false}) {
if (textController.text.isEmpty || textController.text.endsWith(' ')) {
textController.text += '${emote.name} ';
} else if (autocompleteMode &&
_showEmoteAutocomplete &&
textController.text.endsWith('')) {
final split = textController.text.split(' ')
..removeLast()
..add('${emote.name} ');
textController.text = split.join(' ');
} else {
textController.text += ' ${emote.name} ';
}
assetsStore.recentEmotes
Update to Material 3/You and other changes/fixes (#280) * Use adaptive refresh indicators * Add new message count indicator in chat * Sync pubspec.lock * Initial migration to material 3 * Restore default bottom sheet style * Remove FrostyListTile and reset styles * Use "Clear" button for all search history * Add `require_trailing_commas` lint rule * Exclude generated files from linter * Use ListView for safe area support in bottom sheet * Add initial dark theme * Make sizing and units consistent * Update onbaording spacings & copy * Migrate to default material 3 buttons * Add headers to chat details bottom sheet * Simplify token log in method * Use bottom sheet for account options * Remove `AnimateScale` widget * Tweak search paddings * Update message spacing divisions * Upgrade packages * Update message spacing divisions * Regenerate splash screens * Update Inter & add google fonts * Add initial material 3 themes * Use adaptive alert dialogs * Revert to oultined inputs * Fix tooltip message * Revert add google_fonts * Improve themes and various styling * Convert categories grid to list * Tweak stream card thumbnail radii * Tweak settings headers * Left align floating snackbars * Tweak search header padding * Fix profile pics occasionally not rounded * Use profile pic for settings button if logged in * Redesign sleep timer * Use divider theme and reduce thickness * Use 0 letter spacing for tab bar titles * Redesign category streams list * Add border to tooltips * Increase category card font weight * Use outlined icon btton for chat user modal * Reduce profile pic radius in search results * Fix scrolll to top button safe area * Add support for reply threads * Reduce tooltip and snackbar border thickness * Rebuild reply threads on new messages * Upgrade packages (iOS) * Reduce font weight for all chat alerts * Use tabbars for pageview * Add dividers everywhere * Revert "Add dividers everywhere" This reverts commit 5f0d349fdbb0afad313cfb88e8c359714b3ea87a. * Remove fill from inputs * Add dividers to settings * Use segmented button for settings list * Add scrollbar to lists with scrollcontroller * Redesign badge/emote tooltip * Remove outline from chat user modal buttons * Remove divider from reply thread * Use tap for chatters list and increase font weight * Constrain emote tooltip width
2023-10-22 18:38:32 -04:00
..removeWhere(
(recentEmote) =>
recentEmote.name == emote.name && recentEmote.type == emote.type,
)
..insert(0, emote);
textController.selection = TextSelection.fromPosition(
Update to Material 3/You and other changes/fixes (#280) * Use adaptive refresh indicators * Add new message count indicator in chat * Sync pubspec.lock * Initial migration to material 3 * Restore default bottom sheet style * Remove FrostyListTile and reset styles * Use "Clear" button for all search history * Add `require_trailing_commas` lint rule * Exclude generated files from linter * Use ListView for safe area support in bottom sheet * Add initial dark theme * Make sizing and units consistent * Update onbaording spacings & copy * Migrate to default material 3 buttons * Add headers to chat details bottom sheet * Simplify token log in method * Use bottom sheet for account options * Remove `AnimateScale` widget * Tweak search paddings * Update message spacing divisions * Upgrade packages * Update message spacing divisions * Regenerate splash screens * Update Inter & add google fonts * Add initial material 3 themes * Use adaptive alert dialogs * Revert to oultined inputs * Fix tooltip message * Revert add google_fonts * Improve themes and various styling * Convert categories grid to list * Tweak stream card thumbnail radii * Tweak settings headers * Left align floating snackbars * Tweak search header padding * Fix profile pics occasionally not rounded * Use profile pic for settings button if logged in * Redesign sleep timer * Use divider theme and reduce thickness * Use 0 letter spacing for tab bar titles * Redesign category streams list * Add border to tooltips * Increase category card font weight * Use outlined icon btton for chat user modal * Reduce profile pic radius in search results * Fix scrolll to top button safe area * Add support for reply threads * Reduce tooltip and snackbar border thickness * Rebuild reply threads on new messages * Upgrade packages (iOS) * Reduce font weight for all chat alerts * Use tabbars for pageview * Add dividers everywhere * Revert "Add dividers everywhere" This reverts commit 5f0d349fdbb0afad313cfb88e8c359714b3ea87a. * Remove fill from inputs * Add dividers to settings * Use segmented button for settings list * Add scrollbar to lists with scrollcontroller * Redesign badge/emote tooltip * Remove outline from chat user modal buttons * Remove divider from reply thread * Use tap for chatters list and increase font weight * Constrain emote tooltip width
2023-10-22 18:38:32 -04:00
TextPosition(offset: textController.text.length),
);
}
/// Cancels the previous notification/timer and creates a new one with the provided [notificationMessage].
@action
void updateNotification(String notificationMessage) {
// Cancel the previous notification to prevent the notification from phasing in and out
// when copying messages repeatedly.
_notificationTimer?.cancel();
v5 (#463) * migrate to dio * ignore folders * simplify twitch api headers handling * clean up main * simplify logs * optimize profile picture fetching fixes refetches on tab switch * update claude md * refactor irc.dart * update copilot instructions with essential commands and project structure details * implement message sending state management and UI updates * refactor notification handling and add copy-paste functionality in chat * refactor AlertMessage to support vertical layout and optional padding * refactor error messages for consistency and clarity across various components * refactor chat layout to use draggable divider and improve chat width settings * refactor Uptime widget to use SharedTimerService for synchronized updates * refactor search results components to handle null future states gracefully * refactor loading indicators to use skeleton loaders for improved user experience * refactor UI components for improved layout and responsiveness, enhance skeleton loaders, and streamline padding adjustments * refactor: replace manual blur effects with BlurredContainer for consistency and reusability * refactor: enhance JavaScript execution and error handling in WebView components * refactor: replace app bar with blurred container for improved UI consistency across screens * refactor: streamline video chat layout and enhance PiP drag gesture functionality * revert some app bar changes * refactor: implement Picture-in-Picture drag functionality in VideoChat * refactor: pass currentChannelId to IRCMessage and ChatMessage for improved context * fix large thubmnail width * chore: update Gradle and Kotlin plugin versions for improved compatibility * changes from v4.10.0 branch * feat: integrate AnimatedScrollBorder for improved UI responsiveness across various screens * refactor: update SectionHeader styling and improve theme management * feat: add pinned section to StreamsList and enhance skeleton loader padding * feat: add repository guidelines for project structure, coding style, testing, and security * feat: enhance StreamCard UI with BlurredContainer and adjust border width in theme * feat: implement unfocusInput and safeRequestFocus methods to manage text field focus behavior * feat: enhance Picture-in-Picture drag interactions with haptic feedback and smooth animations * refactor: improve code formatting and readability across multiple files * feat: implement picture-in-picture mode toggle and state management for video playback * feat: reset PiP mode state when pausing video playback * feat: add custom app bar with profile picture and stream info for video chat * feat: convert multiple settings screens to use StatefulWidget and add animated scroll borders * feat: update blur configuration for adaptive alpha based on theme * fix: adjust default font size in SectionHeader widget * feat: enhance PiP mode with drag overlay instruction and UI improvements * fix: improve badge rendering with consistent margin and border for current channel * refactor: replace BackdropFilter with BlurredContainer for improved clarity and maintainability * fix: reduce background transparency in Uptime widget for better visibility * feat: enhance photo view dialog with full resolution toggle and blurred background * fix: reset chat delay to 0 when auto sync is enabled and update settings title for clarity * fix: adjust border width in theme to improve consistency * feat: add forceDarkMode option to BlurredContainer for improved theme adaptability * feat: implement offline followed channels feature with UI integration and settings option * fix: increase font size and weight for offline status text for better readability * feat: remove offline pinned channels feature and update related UI components * feat: optimize offline channels loading behavior based on expansion state * fix: improve clarity and consistency in repository guidelines formatting * feat: update full resolution URL handling and button visibility logic * feat: replace app bar with blurred version in chat-only mode and add animated scroll border * feat: refactor video chat layout for improved chat and video display in landscape mode * feat: remove bottom bar visibility setting and adjust chat layout accordingly * fix: simplify condition for displaying offline channels section in following tab * feat: enhance reply thread display with indentation and reply icon * feat: implement showModalBottomSheetWithProperFocus for improved focus handling * feat: add gradient direction support to BlurredContainer for enhanced visual effects * feat: enhance NavigationBar and Theme settings for improved visual consistency * feat: add gradient direction support to BlurredContainer in VideoChat for enhanced visual effects * chore: update .gitignore to include .cursor file for better environment management * fix: update PiP drag gesture conditions to include video paused state for better user experience * refactor: replace ScrollController with SettingsPageLayout in settings screens for improved layout management * refactor: centralize orientation handling by introducing OrientationUtils for improved readability and maintainability * refactor: replace OrientationUtils with ContextExtensions for streamlined context-based access to theme, layout, and API dependencies * refactor: improve video chat UI by adjusting title layout and adding stream info tooltips for better user experience * refactor: adjust titleSpacing in theme and navigation components for improved layout consistency * refactor: update stream info timer handling and overlay management for improved UI responsiveness * refactor: enhance stream info timer logic and overlay visibility management for chat-only mode * refactor: enhance input decoration theme in FrostyThemes for improved visual consistency and responsiveness * refactor: adjust inputDecorationTheme padding in FrostyThemes for improved visual consistency * refactor: enhance video overlay management by including video preview overlay in hideElements for improved UI consistency * refactor: improve chat bottom bar padding and video chat layout for enhanced UI consistency * refactor: adjust chat padding to account for device bottom insets for improved layout consistency * refactor: update text styles in FrostyThemes for improved visual consistency across UI components * refactor: update iOS minimum deployment target to 13.0 for improved compatibility * refactor: adjust chat bottom padding based on emote menu visibility for improved layout consistency * refactor: adjust padding values in StreamsList for improved layout consistency * refactor: replace Padding with AnimatedPadding in Chat for smoother layout transitions refactor: replace Container with AnimatedContainer in BlurredContainer for smoother animations * refactor: remove unnecessary radius property from ProfilePicture in OfflineChannelCard for cleaner code * refactor: enhance chat bottom bar suffix icon to display message delay with tooltip for improved user experience * refactor: update hint text and tooltips in chat bottom bar and search for improved clarity * refactor: simplify notification display logic and enhance chat input behavior for improved user experience * refactor: enhance layout consistency by adjusting spacing in various components across the channel and home screens * refactor: introduce LiveIndicator widget and adjust spacing in channel and video components for improved layout consistency * refactor: remove monospace font family from chat bottom bar for improved text rendering * refactor: reduce notification animation duration and change dismiss direction for improved user experience * refactor: replace VideoBar with StreamInfoBar in video components for improved layout and consistency * refactor: adjust font sizes and spacing in StreamInfoBar for improved layout consistency * refactor: standardize font sizes and update gradient stops in video components for improved visual consistency * refactor: update tooltip padding and background color in theme for improved visual consistency * refactor: enhance tooltip behavior and standardize font sizes in StreamInfoBar and related components for improved visual consistency * refactor: add showThumbnail option to LargeStreamCardSkeletonLoader for improved layout flexibility * refactor: add StreamInfoBarSkeletonLoader for improved layout consistency in stream components * refactor: add shadow effects to icons and text in StreamInfoBar and VideoOverlay for improved visual depth * refactor: update defaultOverlayOpacity to 0.0 for improved overlay behavior * fix: correct stream info text color on overlay * refactor: implement a new color picker dialog with random color generation for enhanced user experience * refactor: adjust gradient colors and stops in VideoOverlay for improved visual consistency * refactor: refine gradient colors and stops in VideoOverlay for enhanced visual clarity * refactor: add isCompact parameter to StreamInfoBar for responsive text sizing * fix: update tooltip background color to use surface color for better contrast * feat: add shared chat mode support in chat store and update StreamInfoBar for visual indication * refactor: disable debug print for IRC messages to reduce log clutter * feat: implement chat color selection feature with user color management in chat settings * refactor: replace color adjustment logic with new contrast-aware utility for chat names * refactor: simplify chat details UI by replacing list tiles with action cards and removing unused clear dialog * refactor: enhance chat details UI by improving time formatting and adding label styling to action cards * refactor: update chat color terminology to 'Username color' for clarity in UI * refactor: enhance chat details UI by introducing active chat modes display and improving layout structure * refactor: improve chat details layout by replacing ListTile with Padding and adding a Divider for better visual separation * refactor: remove chat notifications positioning setting and adjust notification alignment in video chat * refactor: streamline StreamInfoBar component by consolidating offline handling and improving layout for better readability * refactor: enhance StreamInfoBar by adding tooltip for streamer name and improving text overflow handling * refactor: adjust tooltip display duration in StreamInfoBar and update theme configuration * refactor: adjust margin and padding in StreamCard for improved layout consistency * chore: update dependencies in pubspec.yaml and pubspec.lock for Firebase and other packages * template * chore: update iOS platform version to 15.0 and Firebase dependencies to 12.2.0 * refactor: simplify StreamInfoBar layout by reducing nested widgets and improving text color handling * format * feat: enhance Channel model and StreamInfoBar to support offline channel details * feat: add offline indicator and improve StreamInfoBar layout for better offline channel display * fix: adjust icon color opacity in StreamInfoBar for improved visibility * feat: enhance dismissal animation in FrostyPhotoViewDialog to track swipe direction * docs: update copilot instructions for clarity and additional error handling details * refactor: optimize latency tooltip layout and improve offline indicator styling in VideoOverlay * feat: implement shared chat asset fetching and participant management in ChatAssetsStore * refactor: replace Observer with Builder for improved widget rebuilding in VideoOverlay * refactor: update StreamInfoBar border styling and adjust layout in VideoOverlay for improved visual consistency * feat: add showTextShadows property to StreamInfoBar for customizable text shadow display * refactor: adjust layout in VideoOverlay by adding padding to improve spacing and visual consistency * refactor: enhance VideoOverlay gradients and layout for improved visual hierarchy and user experience * refactor: reduce vertical padding in VideoOverlay for improved layout consistency * refactor: remove overlay opacity settings from VideoSettings and SettingsStore for simplification * refactor: improve text overlay transition in VideoChat for better user experience * Revert "refactor: improve text overlay transition in VideoChat for better user experience" This reverts commit fd16ff5ec30ec266157e5c8a9d4a6090c91717f6. * refactor: wrap videoOverlay in ColoredBox for improved layout handling * refactor: optimize animation duration and transition curves in VideoChat for smoother interactions * refactor: dispose searchScrollController in HomeStoreBase to prevent memory leaks * refactor: simplify gradient definitions in VideoOverlay for improved readability and maintainability * refactor: remove 'Offline' text overlay from VideoOverlay for cleaner UI * refactor: add refresh functionality for assets in ChatDetails with loading indicators * refactor: update visibility conditions for uptime, viewer count, and category display in StreamInfoBar * refactor: replace AlertDialog with FrostyDialog for consistent dialog styling across the application * refactor: enhance layout handling in FrostyPageView to prevent overflow during height transitions * refactor: replace ColorPickerDialog with AccentColorPickerDialog for improved color selection experience * refactor: replace theme and accent color settings with dedicated components for improved modularity and readability * refactor: replace ElevatedButton with TextButton for consistent button styling across dialogs * refactor: integrate MobX Observer for reactive state management in settings widgets * refactor: update theme and dialog components for improved styling and consistency * refactor: enhance dialog styling with rounded corners and border in theme configuration * refactor: improve dialog messages for unauthorized access handling * refactor: update bodyLarge text style in theme configuration to include font weight * refactor: standardize Divider usage and adjust theme styles for improved consistency * refactor: adjust Divider properties and theme styles for enhanced visual consistency * chore: remove GEMINI.md file as it is no longer needed for project documentation * refactor: enhance token validation and reconnect logic in AuthBase for improved error handling * format * refactor: integrate landscape cutout settings into VideoChat layout for improved responsiveness * refactor: implement app lifecycle handling in VideoChat and enhance stream info update logic in VideoStore * refactor: update landscape cutout conditionals in VideoChat layout for improved responsiveness * update AGENTS.md * add scrollbar to search * fix scrolling exception * update CLAUDE.md * 5 auth reconnect attemps then log out * increase reply max lines to 2 * simplify and improve reply formatting * add prime icon * better draggable divider * support draggable divider in fullscreen overlay chat * add text shadow in fullscreen chat overlay mode * format * add landscape checks * video store optimization attempts * Dispose WebViewController and remove JavaScript channels properly * Track and cleanup all MutationObservers to prevent accumulation * Throttle latency updates to once per 5 seconds (reduces CPU load) * Add timeout protection and null checks for robustness * Prevent duplicate event listeners on page reloads * double tap divider to reset * Revert "video store optimization attempts" This reverts commit b1df7b0de473543283211a489dca698d9d241857. * optimize video store attempt 2 * Revert "double tap divider to reset" This reverts commit aeb26a433500ec71f822794835e927018ee59e1e. * optimize latency listener to open the menu and check every 20 secconds * more optimizations * hard refresh * abbreviate latency * fix lint * improve hide default overlay * fix chat no longer reconnecting with chat delay * refine chat alerts * fix historical message missing badges and emotes on initial connection * parallelize * revert * add reconnect button inline action * refactor: replace Scrollbar with FrostyScrollbar across chat and settings screens for consistent styling * tweak chat details menu * add scrollbar to release notes, renames for consistency * fix duplicate message case * fix chat delay alerts in auto sync mode * add regex for numeric strings and enhance display name formatting logic * exterminate borders * refactor: simplify active chat modes display in chat details screen * feat: enhance chat input button with delay notification and disable state * fix: wrap chat in SafeArea to prevent UI overflow issues * refactor: remove divider line from video chat and update draggable divider visibility logic * persist overlay in pip mode * fix: update chat delay handling and notifications in chat bottom bar * fix: update chat overlay visibility logic to respect fullscreen settings * tap to show deleted message * fix: prevent accidental chat scrolling when accessing system UI in landscape mode * show latency in portrait * fix: enhance chat delay notifications with dynamic delay time * docs: update CLAUDE.md for improved environment variable instructions and architecture overview * fix: improve chat delay countdown management and message handling * add preliminary release notes * remove agents.md * update lockfile * add initial multi chat feature * add option to persist multi chat tabs * add remove confirmation dialog * improve add chat design * lazy-load tabs * create global assets store to dedupe global asset fetching * improve tab design/styles * update notes * use frosty dialog * update claude md * tweak * add ability to reorder tabs * resolve conflict * merge cleanup * format * update release notes * add chat delay sync completion tracking to prevent countdown re-appearance * add tests * fix * update release notes * bump
2026-01-01 22:28:17 -05:00
// Set the new notification message and create a new timer that will dismiss it after 3 seconds.
_notification = notificationMessage;
v5 (#463) * migrate to dio * ignore folders * simplify twitch api headers handling * clean up main * simplify logs * optimize profile picture fetching fixes refetches on tab switch * update claude md * refactor irc.dart * update copilot instructions with essential commands and project structure details * implement message sending state management and UI updates * refactor notification handling and add copy-paste functionality in chat * refactor AlertMessage to support vertical layout and optional padding * refactor error messages for consistency and clarity across various components * refactor chat layout to use draggable divider and improve chat width settings * refactor Uptime widget to use SharedTimerService for synchronized updates * refactor search results components to handle null future states gracefully * refactor loading indicators to use skeleton loaders for improved user experience * refactor UI components for improved layout and responsiveness, enhance skeleton loaders, and streamline padding adjustments * refactor: replace manual blur effects with BlurredContainer for consistency and reusability * refactor: enhance JavaScript execution and error handling in WebView components * refactor: replace app bar with blurred container for improved UI consistency across screens * refactor: streamline video chat layout and enhance PiP drag gesture functionality * revert some app bar changes * refactor: implement Picture-in-Picture drag functionality in VideoChat * refactor: pass currentChannelId to IRCMessage and ChatMessage for improved context * fix large thubmnail width * chore: update Gradle and Kotlin plugin versions for improved compatibility * changes from v4.10.0 branch * feat: integrate AnimatedScrollBorder for improved UI responsiveness across various screens * refactor: update SectionHeader styling and improve theme management * feat: add pinned section to StreamsList and enhance skeleton loader padding * feat: add repository guidelines for project structure, coding style, testing, and security * feat: enhance StreamCard UI with BlurredContainer and adjust border width in theme * feat: implement unfocusInput and safeRequestFocus methods to manage text field focus behavior * feat: enhance Picture-in-Picture drag interactions with haptic feedback and smooth animations * refactor: improve code formatting and readability across multiple files * feat: implement picture-in-picture mode toggle and state management for video playback * feat: reset PiP mode state when pausing video playback * feat: add custom app bar with profile picture and stream info for video chat * feat: convert multiple settings screens to use StatefulWidget and add animated scroll borders * feat: update blur configuration for adaptive alpha based on theme * fix: adjust default font size in SectionHeader widget * feat: enhance PiP mode with drag overlay instruction and UI improvements * fix: improve badge rendering with consistent margin and border for current channel * refactor: replace BackdropFilter with BlurredContainer for improved clarity and maintainability * fix: reduce background transparency in Uptime widget for better visibility * feat: enhance photo view dialog with full resolution toggle and blurred background * fix: reset chat delay to 0 when auto sync is enabled and update settings title for clarity * fix: adjust border width in theme to improve consistency * feat: add forceDarkMode option to BlurredContainer for improved theme adaptability * feat: implement offline followed channels feature with UI integration and settings option * fix: increase font size and weight for offline status text for better readability * feat: remove offline pinned channels feature and update related UI components * feat: optimize offline channels loading behavior based on expansion state * fix: improve clarity and consistency in repository guidelines formatting * feat: update full resolution URL handling and button visibility logic * feat: replace app bar with blurred version in chat-only mode and add animated scroll border * feat: refactor video chat layout for improved chat and video display in landscape mode * feat: remove bottom bar visibility setting and adjust chat layout accordingly * fix: simplify condition for displaying offline channels section in following tab * feat: enhance reply thread display with indentation and reply icon * feat: implement showModalBottomSheetWithProperFocus for improved focus handling * feat: add gradient direction support to BlurredContainer for enhanced visual effects * feat: enhance NavigationBar and Theme settings for improved visual consistency * feat: add gradient direction support to BlurredContainer in VideoChat for enhanced visual effects * chore: update .gitignore to include .cursor file for better environment management * fix: update PiP drag gesture conditions to include video paused state for better user experience * refactor: replace ScrollController with SettingsPageLayout in settings screens for improved layout management * refactor: centralize orientation handling by introducing OrientationUtils for improved readability and maintainability * refactor: replace OrientationUtils with ContextExtensions for streamlined context-based access to theme, layout, and API dependencies * refactor: improve video chat UI by adjusting title layout and adding stream info tooltips for better user experience * refactor: adjust titleSpacing in theme and navigation components for improved layout consistency * refactor: update stream info timer handling and overlay management for improved UI responsiveness * refactor: enhance stream info timer logic and overlay visibility management for chat-only mode * refactor: enhance input decoration theme in FrostyThemes for improved visual consistency and responsiveness * refactor: adjust inputDecorationTheme padding in FrostyThemes for improved visual consistency * refactor: enhance video overlay management by including video preview overlay in hideElements for improved UI consistency * refactor: improve chat bottom bar padding and video chat layout for enhanced UI consistency * refactor: adjust chat padding to account for device bottom insets for improved layout consistency * refactor: update text styles in FrostyThemes for improved visual consistency across UI components * refactor: update iOS minimum deployment target to 13.0 for improved compatibility * refactor: adjust chat bottom padding based on emote menu visibility for improved layout consistency * refactor: adjust padding values in StreamsList for improved layout consistency * refactor: replace Padding with AnimatedPadding in Chat for smoother layout transitions refactor: replace Container with AnimatedContainer in BlurredContainer for smoother animations * refactor: remove unnecessary radius property from ProfilePicture in OfflineChannelCard for cleaner code * refactor: enhance chat bottom bar suffix icon to display message delay with tooltip for improved user experience * refactor: update hint text and tooltips in chat bottom bar and search for improved clarity * refactor: simplify notification display logic and enhance chat input behavior for improved user experience * refactor: enhance layout consistency by adjusting spacing in various components across the channel and home screens * refactor: introduce LiveIndicator widget and adjust spacing in channel and video components for improved layout consistency * refactor: remove monospace font family from chat bottom bar for improved text rendering * refactor: reduce notification animation duration and change dismiss direction for improved user experience * refactor: replace VideoBar with StreamInfoBar in video components for improved layout and consistency * refactor: adjust font sizes and spacing in StreamInfoBar for improved layout consistency * refactor: standardize font sizes and update gradient stops in video components for improved visual consistency * refactor: update tooltip padding and background color in theme for improved visual consistency * refactor: enhance tooltip behavior and standardize font sizes in StreamInfoBar and related components for improved visual consistency * refactor: add showThumbnail option to LargeStreamCardSkeletonLoader for improved layout flexibility * refactor: add StreamInfoBarSkeletonLoader for improved layout consistency in stream components * refactor: add shadow effects to icons and text in StreamInfoBar and VideoOverlay for improved visual depth * refactor: update defaultOverlayOpacity to 0.0 for improved overlay behavior * fix: correct stream info text color on overlay * refactor: implement a new color picker dialog with random color generation for enhanced user experience * refactor: adjust gradient colors and stops in VideoOverlay for improved visual consistency * refactor: refine gradient colors and stops in VideoOverlay for enhanced visual clarity * refactor: add isCompact parameter to StreamInfoBar for responsive text sizing * fix: update tooltip background color to use surface color for better contrast * feat: add shared chat mode support in chat store and update StreamInfoBar for visual indication * refactor: disable debug print for IRC messages to reduce log clutter * feat: implement chat color selection feature with user color management in chat settings * refactor: replace color adjustment logic with new contrast-aware utility for chat names * refactor: simplify chat details UI by replacing list tiles with action cards and removing unused clear dialog * refactor: enhance chat details UI by improving time formatting and adding label styling to action cards * refactor: update chat color terminology to 'Username color' for clarity in UI * refactor: enhance chat details UI by introducing active chat modes display and improving layout structure * refactor: improve chat details layout by replacing ListTile with Padding and adding a Divider for better visual separation * refactor: remove chat notifications positioning setting and adjust notification alignment in video chat * refactor: streamline StreamInfoBar component by consolidating offline handling and improving layout for better readability * refactor: enhance StreamInfoBar by adding tooltip for streamer name and improving text overflow handling * refactor: adjust tooltip display duration in StreamInfoBar and update theme configuration * refactor: adjust margin and padding in StreamCard for improved layout consistency * chore: update dependencies in pubspec.yaml and pubspec.lock for Firebase and other packages * template * chore: update iOS platform version to 15.0 and Firebase dependencies to 12.2.0 * refactor: simplify StreamInfoBar layout by reducing nested widgets and improving text color handling * format * feat: enhance Channel model and StreamInfoBar to support offline channel details * feat: add offline indicator and improve StreamInfoBar layout for better offline channel display * fix: adjust icon color opacity in StreamInfoBar for improved visibility * feat: enhance dismissal animation in FrostyPhotoViewDialog to track swipe direction * docs: update copilot instructions for clarity and additional error handling details * refactor: optimize latency tooltip layout and improve offline indicator styling in VideoOverlay * feat: implement shared chat asset fetching and participant management in ChatAssetsStore * refactor: replace Observer with Builder for improved widget rebuilding in VideoOverlay * refactor: update StreamInfoBar border styling and adjust layout in VideoOverlay for improved visual consistency * feat: add showTextShadows property to StreamInfoBar for customizable text shadow display * refactor: adjust layout in VideoOverlay by adding padding to improve spacing and visual consistency * refactor: enhance VideoOverlay gradients and layout for improved visual hierarchy and user experience * refactor: reduce vertical padding in VideoOverlay for improved layout consistency * refactor: remove overlay opacity settings from VideoSettings and SettingsStore for simplification * refactor: improve text overlay transition in VideoChat for better user experience * Revert "refactor: improve text overlay transition in VideoChat for better user experience" This reverts commit fd16ff5ec30ec266157e5c8a9d4a6090c91717f6. * refactor: wrap videoOverlay in ColoredBox for improved layout handling * refactor: optimize animation duration and transition curves in VideoChat for smoother interactions * refactor: dispose searchScrollController in HomeStoreBase to prevent memory leaks * refactor: simplify gradient definitions in VideoOverlay for improved readability and maintainability * refactor: remove 'Offline' text overlay from VideoOverlay for cleaner UI * refactor: add refresh functionality for assets in ChatDetails with loading indicators * refactor: update visibility conditions for uptime, viewer count, and category display in StreamInfoBar * refactor: replace AlertDialog with FrostyDialog for consistent dialog styling across the application * refactor: enhance layout handling in FrostyPageView to prevent overflow during height transitions * refactor: replace ColorPickerDialog with AccentColorPickerDialog for improved color selection experience * refactor: replace theme and accent color settings with dedicated components for improved modularity and readability * refactor: replace ElevatedButton with TextButton for consistent button styling across dialogs * refactor: integrate MobX Observer for reactive state management in settings widgets * refactor: update theme and dialog components for improved styling and consistency * refactor: enhance dialog styling with rounded corners and border in theme configuration * refactor: improve dialog messages for unauthorized access handling * refactor: update bodyLarge text style in theme configuration to include font weight * refactor: standardize Divider usage and adjust theme styles for improved consistency * refactor: adjust Divider properties and theme styles for enhanced visual consistency * chore: remove GEMINI.md file as it is no longer needed for project documentation * refactor: enhance token validation and reconnect logic in AuthBase for improved error handling * format * refactor: integrate landscape cutout settings into VideoChat layout for improved responsiveness * refactor: implement app lifecycle handling in VideoChat and enhance stream info update logic in VideoStore * refactor: update landscape cutout conditionals in VideoChat layout for improved responsiveness * update AGENTS.md * add scrollbar to search * fix scrolling exception * update CLAUDE.md * 5 auth reconnect attemps then log out * increase reply max lines to 2 * simplify and improve reply formatting * add prime icon * better draggable divider * support draggable divider in fullscreen overlay chat * add text shadow in fullscreen chat overlay mode * format * add landscape checks * video store optimization attempts * Dispose WebViewController and remove JavaScript channels properly * Track and cleanup all MutationObservers to prevent accumulation * Throttle latency updates to once per 5 seconds (reduces CPU load) * Add timeout protection and null checks for robustness * Prevent duplicate event listeners on page reloads * double tap divider to reset * Revert "video store optimization attempts" This reverts commit b1df7b0de473543283211a489dca698d9d241857. * optimize video store attempt 2 * Revert "double tap divider to reset" This reverts commit aeb26a433500ec71f822794835e927018ee59e1e. * optimize latency listener to open the menu and check every 20 secconds * more optimizations * hard refresh * abbreviate latency * fix lint * improve hide default overlay * fix chat no longer reconnecting with chat delay * refine chat alerts * fix historical message missing badges and emotes on initial connection * parallelize * revert * add reconnect button inline action * refactor: replace Scrollbar with FrostyScrollbar across chat and settings screens for consistent styling * tweak chat details menu * add scrollbar to release notes, renames for consistency * fix duplicate message case * fix chat delay alerts in auto sync mode * add regex for numeric strings and enhance display name formatting logic * exterminate borders * refactor: simplify active chat modes display in chat details screen * feat: enhance chat input button with delay notification and disable state * fix: wrap chat in SafeArea to prevent UI overflow issues * refactor: remove divider line from video chat and update draggable divider visibility logic * persist overlay in pip mode * fix: update chat delay handling and notifications in chat bottom bar * fix: update chat overlay visibility logic to respect fullscreen settings * tap to show deleted message * fix: prevent accidental chat scrolling when accessing system UI in landscape mode * show latency in portrait * fix: enhance chat delay notifications with dynamic delay time * docs: update CLAUDE.md for improved environment variable instructions and architecture overview * fix: improve chat delay countdown management and message handling * add preliminary release notes * remove agents.md * update lockfile * add initial multi chat feature * add option to persist multi chat tabs * add remove confirmation dialog * improve add chat design * lazy-load tabs * create global assets store to dedupe global asset fetching * improve tab design/styles * update notes * use frosty dialog * update claude md * tweak * add ability to reorder tabs * resolve conflict * merge cleanup * format * update release notes * add chat delay sync completion tracking to prevent countdown re-appearance * add tests * fix * update release notes * bump
2026-01-01 22:28:17 -05:00
_notificationTimer = Timer(
const Duration(seconds: 5),
() => _notification = null,
);
}
/// Clears the current notification immediately.
@action
void clearNotification() {
_notificationTimer?.cancel();
_notification = null;
}
Update to Material 3/You and other changes/fixes (#280) * Use adaptive refresh indicators * Add new message count indicator in chat * Sync pubspec.lock * Initial migration to material 3 * Restore default bottom sheet style * Remove FrostyListTile and reset styles * Use "Clear" button for all search history * Add `require_trailing_commas` lint rule * Exclude generated files from linter * Use ListView for safe area support in bottom sheet * Add initial dark theme * Make sizing and units consistent * Update onbaording spacings & copy * Migrate to default material 3 buttons * Add headers to chat details bottom sheet * Simplify token log in method * Use bottom sheet for account options * Remove `AnimateScale` widget * Tweak search paddings * Update message spacing divisions * Upgrade packages * Update message spacing divisions * Regenerate splash screens * Update Inter & add google fonts * Add initial material 3 themes * Use adaptive alert dialogs * Revert to oultined inputs * Fix tooltip message * Revert add google_fonts * Improve themes and various styling * Convert categories grid to list * Tweak stream card thumbnail radii * Tweak settings headers * Left align floating snackbars * Tweak search header padding * Fix profile pics occasionally not rounded * Use profile pic for settings button if logged in * Redesign sleep timer * Use divider theme and reduce thickness * Use 0 letter spacing for tab bar titles * Redesign category streams list * Add border to tooltips * Increase category card font weight * Use outlined icon btton for chat user modal * Reduce profile pic radius in search results * Fix scrolll to top button safe area * Add support for reply threads * Reduce tooltip and snackbar border thickness * Rebuild reply threads on new messages * Upgrade packages (iOS) * Reduce font weight for all chat alerts * Use tabbars for pageview * Add dividers everywhere * Revert "Add dividers everywhere" This reverts commit 5f0d349fdbb0afad313cfb88e8c359714b3ea87a. * Remove fill from inputs * Add dividers to settings * Use segmented button for settings list * Add scrollbar to lists with scrollcontroller * Redesign badge/emote tooltip * Remove outline from chat user modal buttons * Remove divider from reply thread * Use tap for chatters list and increase font weight * Constrain emote tooltip width
2023-10-22 18:38:32 -04:00
/// Updates the sleep timer with the given [duration].
/// Calls [onTimerFinished] when the sleep timer completes.
@action
Update to Material 3/You and other changes/fixes (#280) * Use adaptive refresh indicators * Add new message count indicator in chat * Sync pubspec.lock * Initial migration to material 3 * Restore default bottom sheet style * Remove FrostyListTile and reset styles * Use "Clear" button for all search history * Add `require_trailing_commas` lint rule * Exclude generated files from linter * Use ListView for safe area support in bottom sheet * Add initial dark theme * Make sizing and units consistent * Update onbaording spacings & copy * Migrate to default material 3 buttons * Add headers to chat details bottom sheet * Simplify token log in method * Use bottom sheet for account options * Remove `AnimateScale` widget * Tweak search paddings * Update message spacing divisions * Upgrade packages * Update message spacing divisions * Regenerate splash screens * Update Inter & add google fonts * Add initial material 3 themes * Use adaptive alert dialogs * Revert to oultined inputs * Fix tooltip message * Revert add google_fonts * Improve themes and various styling * Convert categories grid to list * Tweak stream card thumbnail radii * Tweak settings headers * Left align floating snackbars * Tweak search header padding * Fix profile pics occasionally not rounded * Use profile pic for settings button if logged in * Redesign sleep timer * Use divider theme and reduce thickness * Use 0 letter spacing for tab bar titles * Redesign category streams list * Add border to tooltips * Increase category card font weight * Use outlined icon btton for chat user modal * Reduce profile pic radius in search results * Fix scrolll to top button safe area * Add support for reply threads * Reduce tooltip and snackbar border thickness * Rebuild reply threads on new messages * Upgrade packages (iOS) * Reduce font weight for all chat alerts * Use tabbars for pageview * Add dividers everywhere * Revert "Add dividers everywhere" This reverts commit 5f0d349fdbb0afad313cfb88e8c359714b3ea87a. * Remove fill from inputs * Add dividers to settings * Use segmented button for settings list * Add scrollbar to lists with scrollcontroller * Redesign badge/emote tooltip * Remove outline from chat user modal buttons * Remove divider from reply thread * Use tap for chatters list and increase font weight * Constrain emote tooltip width
2023-10-22 18:38:32 -04:00
void updateSleepTimer({
required Duration duration,
required VoidCallback onTimerFinished,
}) {
// If there is an ongoing timer, cancel it since it'll be replaced.
if (sleepTimer != null) cancelSleepTimer();
// Update the new time remaining
Update to Material 3/You and other changes/fixes (#280) * Use adaptive refresh indicators * Add new message count indicator in chat * Sync pubspec.lock * Initial migration to material 3 * Restore default bottom sheet style * Remove FrostyListTile and reset styles * Use "Clear" button for all search history * Add `require_trailing_commas` lint rule * Exclude generated files from linter * Use ListView for safe area support in bottom sheet * Add initial dark theme * Make sizing and units consistent * Update onbaording spacings & copy * Migrate to default material 3 buttons * Add headers to chat details bottom sheet * Simplify token log in method * Use bottom sheet for account options * Remove `AnimateScale` widget * Tweak search paddings * Update message spacing divisions * Upgrade packages * Update message spacing divisions * Regenerate splash screens * Update Inter & add google fonts * Add initial material 3 themes * Use adaptive alert dialogs * Revert to oultined inputs * Fix tooltip message * Revert add google_fonts * Improve themes and various styling * Convert categories grid to list * Tweak stream card thumbnail radii * Tweak settings headers * Left align floating snackbars * Tweak search header padding * Fix profile pics occasionally not rounded * Use profile pic for settings button if logged in * Redesign sleep timer * Use divider theme and reduce thickness * Use 0 letter spacing for tab bar titles * Redesign category streams list * Add border to tooltips * Increase category card font weight * Use outlined icon btton for chat user modal * Reduce profile pic radius in search results * Fix scrolll to top button safe area * Add support for reply threads * Reduce tooltip and snackbar border thickness * Rebuild reply threads on new messages * Upgrade packages (iOS) * Reduce font weight for all chat alerts * Use tabbars for pageview * Add dividers everywhere * Revert "Add dividers everywhere" This reverts commit 5f0d349fdbb0afad313cfb88e8c359714b3ea87a. * Remove fill from inputs * Add dividers to settings * Use segmented button for settings list * Add scrollbar to lists with scrollcontroller * Redesign badge/emote tooltip * Remove outline from chat user modal buttons * Remove divider from reply thread * Use tap for chatters list and increase font weight * Constrain emote tooltip width
2023-10-22 18:38:32 -04:00
timeRemaining = duration;
// Set a periodic timer that will update the time remaining every second.
v5 (#463) * migrate to dio * ignore folders * simplify twitch api headers handling * clean up main * simplify logs * optimize profile picture fetching fixes refetches on tab switch * update claude md * refactor irc.dart * update copilot instructions with essential commands and project structure details * implement message sending state management and UI updates * refactor notification handling and add copy-paste functionality in chat * refactor AlertMessage to support vertical layout and optional padding * refactor error messages for consistency and clarity across various components * refactor chat layout to use draggable divider and improve chat width settings * refactor Uptime widget to use SharedTimerService for synchronized updates * refactor search results components to handle null future states gracefully * refactor loading indicators to use skeleton loaders for improved user experience * refactor UI components for improved layout and responsiveness, enhance skeleton loaders, and streamline padding adjustments * refactor: replace manual blur effects with BlurredContainer for consistency and reusability * refactor: enhance JavaScript execution and error handling in WebView components * refactor: replace app bar with blurred container for improved UI consistency across screens * refactor: streamline video chat layout and enhance PiP drag gesture functionality * revert some app bar changes * refactor: implement Picture-in-Picture drag functionality in VideoChat * refactor: pass currentChannelId to IRCMessage and ChatMessage for improved context * fix large thubmnail width * chore: update Gradle and Kotlin plugin versions for improved compatibility * changes from v4.10.0 branch * feat: integrate AnimatedScrollBorder for improved UI responsiveness across various screens * refactor: update SectionHeader styling and improve theme management * feat: add pinned section to StreamsList and enhance skeleton loader padding * feat: add repository guidelines for project structure, coding style, testing, and security * feat: enhance StreamCard UI with BlurredContainer and adjust border width in theme * feat: implement unfocusInput and safeRequestFocus methods to manage text field focus behavior * feat: enhance Picture-in-Picture drag interactions with haptic feedback and smooth animations * refactor: improve code formatting and readability across multiple files * feat: implement picture-in-picture mode toggle and state management for video playback * feat: reset PiP mode state when pausing video playback * feat: add custom app bar with profile picture and stream info for video chat * feat: convert multiple settings screens to use StatefulWidget and add animated scroll borders * feat: update blur configuration for adaptive alpha based on theme * fix: adjust default font size in SectionHeader widget * feat: enhance PiP mode with drag overlay instruction and UI improvements * fix: improve badge rendering with consistent margin and border for current channel * refactor: replace BackdropFilter with BlurredContainer for improved clarity and maintainability * fix: reduce background transparency in Uptime widget for better visibility * feat: enhance photo view dialog with full resolution toggle and blurred background * fix: reset chat delay to 0 when auto sync is enabled and update settings title for clarity * fix: adjust border width in theme to improve consistency * feat: add forceDarkMode option to BlurredContainer for improved theme adaptability * feat: implement offline followed channels feature with UI integration and settings option * fix: increase font size and weight for offline status text for better readability * feat: remove offline pinned channels feature and update related UI components * feat: optimize offline channels loading behavior based on expansion state * fix: improve clarity and consistency in repository guidelines formatting * feat: update full resolution URL handling and button visibility logic * feat: replace app bar with blurred version in chat-only mode and add animated scroll border * feat: refactor video chat layout for improved chat and video display in landscape mode * feat: remove bottom bar visibility setting and adjust chat layout accordingly * fix: simplify condition for displaying offline channels section in following tab * feat: enhance reply thread display with indentation and reply icon * feat: implement showModalBottomSheetWithProperFocus for improved focus handling * feat: add gradient direction support to BlurredContainer for enhanced visual effects * feat: enhance NavigationBar and Theme settings for improved visual consistency * feat: add gradient direction support to BlurredContainer in VideoChat for enhanced visual effects * chore: update .gitignore to include .cursor file for better environment management * fix: update PiP drag gesture conditions to include video paused state for better user experience * refactor: replace ScrollController with SettingsPageLayout in settings screens for improved layout management * refactor: centralize orientation handling by introducing OrientationUtils for improved readability and maintainability * refactor: replace OrientationUtils with ContextExtensions for streamlined context-based access to theme, layout, and API dependencies * refactor: improve video chat UI by adjusting title layout and adding stream info tooltips for better user experience * refactor: adjust titleSpacing in theme and navigation components for improved layout consistency * refactor: update stream info timer handling and overlay management for improved UI responsiveness * refactor: enhance stream info timer logic and overlay visibility management for chat-only mode * refactor: enhance input decoration theme in FrostyThemes for improved visual consistency and responsiveness * refactor: adjust inputDecorationTheme padding in FrostyThemes for improved visual consistency * refactor: enhance video overlay management by including video preview overlay in hideElements for improved UI consistency * refactor: improve chat bottom bar padding and video chat layout for enhanced UI consistency * refactor: adjust chat padding to account for device bottom insets for improved layout consistency * refactor: update text styles in FrostyThemes for improved visual consistency across UI components * refactor: update iOS minimum deployment target to 13.0 for improved compatibility * refactor: adjust chat bottom padding based on emote menu visibility for improved layout consistency * refactor: adjust padding values in StreamsList for improved layout consistency * refactor: replace Padding with AnimatedPadding in Chat for smoother layout transitions refactor: replace Container with AnimatedContainer in BlurredContainer for smoother animations * refactor: remove unnecessary radius property from ProfilePicture in OfflineChannelCard for cleaner code * refactor: enhance chat bottom bar suffix icon to display message delay with tooltip for improved user experience * refactor: update hint text and tooltips in chat bottom bar and search for improved clarity * refactor: simplify notification display logic and enhance chat input behavior for improved user experience * refactor: enhance layout consistency by adjusting spacing in various components across the channel and home screens * refactor: introduce LiveIndicator widget and adjust spacing in channel and video components for improved layout consistency * refactor: remove monospace font family from chat bottom bar for improved text rendering * refactor: reduce notification animation duration and change dismiss direction for improved user experience * refactor: replace VideoBar with StreamInfoBar in video components for improved layout and consistency * refactor: adjust font sizes and spacing in StreamInfoBar for improved layout consistency * refactor: standardize font sizes and update gradient stops in video components for improved visual consistency * refactor: update tooltip padding and background color in theme for improved visual consistency * refactor: enhance tooltip behavior and standardize font sizes in StreamInfoBar and related components for improved visual consistency * refactor: add showThumbnail option to LargeStreamCardSkeletonLoader for improved layout flexibility * refactor: add StreamInfoBarSkeletonLoader for improved layout consistency in stream components * refactor: add shadow effects to icons and text in StreamInfoBar and VideoOverlay for improved visual depth * refactor: update defaultOverlayOpacity to 0.0 for improved overlay behavior * fix: correct stream info text color on overlay * refactor: implement a new color picker dialog with random color generation for enhanced user experience * refactor: adjust gradient colors and stops in VideoOverlay for improved visual consistency * refactor: refine gradient colors and stops in VideoOverlay for enhanced visual clarity * refactor: add isCompact parameter to StreamInfoBar for responsive text sizing * fix: update tooltip background color to use surface color for better contrast * feat: add shared chat mode support in chat store and update StreamInfoBar for visual indication * refactor: disable debug print for IRC messages to reduce log clutter * feat: implement chat color selection feature with user color management in chat settings * refactor: replace color adjustment logic with new contrast-aware utility for chat names * refactor: simplify chat details UI by replacing list tiles with action cards and removing unused clear dialog * refactor: enhance chat details UI by improving time formatting and adding label styling to action cards * refactor: update chat color terminology to 'Username color' for clarity in UI * refactor: enhance chat details UI by introducing active chat modes display and improving layout structure * refactor: improve chat details layout by replacing ListTile with Padding and adding a Divider for better visual separation * refactor: remove chat notifications positioning setting and adjust notification alignment in video chat * refactor: streamline StreamInfoBar component by consolidating offline handling and improving layout for better readability * refactor: enhance StreamInfoBar by adding tooltip for streamer name and improving text overflow handling * refactor: adjust tooltip display duration in StreamInfoBar and update theme configuration * refactor: adjust margin and padding in StreamCard for improved layout consistency * chore: update dependencies in pubspec.yaml and pubspec.lock for Firebase and other packages * template * chore: update iOS platform version to 15.0 and Firebase dependencies to 12.2.0 * refactor: simplify StreamInfoBar layout by reducing nested widgets and improving text color handling * format * feat: enhance Channel model and StreamInfoBar to support offline channel details * feat: add offline indicator and improve StreamInfoBar layout for better offline channel display * fix: adjust icon color opacity in StreamInfoBar for improved visibility * feat: enhance dismissal animation in FrostyPhotoViewDialog to track swipe direction * docs: update copilot instructions for clarity and additional error handling details * refactor: optimize latency tooltip layout and improve offline indicator styling in VideoOverlay * feat: implement shared chat asset fetching and participant management in ChatAssetsStore * refactor: replace Observer with Builder for improved widget rebuilding in VideoOverlay * refactor: update StreamInfoBar border styling and adjust layout in VideoOverlay for improved visual consistency * feat: add showTextShadows property to StreamInfoBar for customizable text shadow display * refactor: adjust layout in VideoOverlay by adding padding to improve spacing and visual consistency * refactor: enhance VideoOverlay gradients and layout for improved visual hierarchy and user experience * refactor: reduce vertical padding in VideoOverlay for improved layout consistency * refactor: remove overlay opacity settings from VideoSettings and SettingsStore for simplification * refactor: improve text overlay transition in VideoChat for better user experience * Revert "refactor: improve text overlay transition in VideoChat for better user experience" This reverts commit fd16ff5ec30ec266157e5c8a9d4a6090c91717f6. * refactor: wrap videoOverlay in ColoredBox for improved layout handling * refactor: optimize animation duration and transition curves in VideoChat for smoother interactions * refactor: dispose searchScrollController in HomeStoreBase to prevent memory leaks * refactor: simplify gradient definitions in VideoOverlay for improved readability and maintainability * refactor: remove 'Offline' text overlay from VideoOverlay for cleaner UI * refactor: add refresh functionality for assets in ChatDetails with loading indicators * refactor: update visibility conditions for uptime, viewer count, and category display in StreamInfoBar * refactor: replace AlertDialog with FrostyDialog for consistent dialog styling across the application * refactor: enhance layout handling in FrostyPageView to prevent overflow during height transitions * refactor: replace ColorPickerDialog with AccentColorPickerDialog for improved color selection experience * refactor: replace theme and accent color settings with dedicated components for improved modularity and readability * refactor: replace ElevatedButton with TextButton for consistent button styling across dialogs * refactor: integrate MobX Observer for reactive state management in settings widgets * refactor: update theme and dialog components for improved styling and consistency * refactor: enhance dialog styling with rounded corners and border in theme configuration * refactor: improve dialog messages for unauthorized access handling * refactor: update bodyLarge text style in theme configuration to include font weight * refactor: standardize Divider usage and adjust theme styles for improved consistency * refactor: adjust Divider properties and theme styles for enhanced visual consistency * chore: remove GEMINI.md file as it is no longer needed for project documentation * refactor: enhance token validation and reconnect logic in AuthBase for improved error handling * format * refactor: integrate landscape cutout settings into VideoChat layout for improved responsiveness * refactor: implement app lifecycle handling in VideoChat and enhance stream info update logic in VideoStore * refactor: update landscape cutout conditionals in VideoChat layout for improved responsiveness * update AGENTS.md * add scrollbar to search * fix scrolling exception * update CLAUDE.md * 5 auth reconnect attemps then log out * increase reply max lines to 2 * simplify and improve reply formatting * add prime icon * better draggable divider * support draggable divider in fullscreen overlay chat * add text shadow in fullscreen chat overlay mode * format * add landscape checks * video store optimization attempts * Dispose WebViewController and remove JavaScript channels properly * Track and cleanup all MutationObservers to prevent accumulation * Throttle latency updates to once per 5 seconds (reduces CPU load) * Add timeout protection and null checks for robustness * Prevent duplicate event listeners on page reloads * double tap divider to reset * Revert "video store optimization attempts" This reverts commit b1df7b0de473543283211a489dca698d9d241857. * optimize video store attempt 2 * Revert "double tap divider to reset" This reverts commit aeb26a433500ec71f822794835e927018ee59e1e. * optimize latency listener to open the menu and check every 20 secconds * more optimizations * hard refresh * abbreviate latency * fix lint * improve hide default overlay * fix chat no longer reconnecting with chat delay * refine chat alerts * fix historical message missing badges and emotes on initial connection * parallelize * revert * add reconnect button inline action * refactor: replace Scrollbar with FrostyScrollbar across chat and settings screens for consistent styling * tweak chat details menu * add scrollbar to release notes, renames for consistency * fix duplicate message case * fix chat delay alerts in auto sync mode * add regex for numeric strings and enhance display name formatting logic * exterminate borders * refactor: simplify active chat modes display in chat details screen * feat: enhance chat input button with delay notification and disable state * fix: wrap chat in SafeArea to prevent UI overflow issues * refactor: remove divider line from video chat and update draggable divider visibility logic * persist overlay in pip mode * fix: update chat delay handling and notifications in chat bottom bar * fix: update chat overlay visibility logic to respect fullscreen settings * tap to show deleted message * fix: prevent accidental chat scrolling when accessing system UI in landscape mode * show latency in portrait * fix: enhance chat delay notifications with dynamic delay time * docs: update CLAUDE.md for improved environment variable instructions and architecture overview * fix: improve chat delay countdown management and message handling * add preliminary release notes * remove agents.md * update lockfile * add initial multi chat feature * add option to persist multi chat tabs * add remove confirmation dialog * improve add chat design * lazy-load tabs * create global assets store to dedupe global asset fetching * improve tab design/styles * update notes * use frosty dialog * update claude md * tweak * add ability to reorder tabs * resolve conflict * merge cleanup * format * update release notes * add chat delay sync completion tracking to prevent countdown re-appearance * add tests * fix * update release notes * bump
2026-01-01 22:28:17 -05:00
sleepTimer = Timer.periodic(const Duration(seconds: 1), (timer) {
// If the timer is up, cancel the timer and exit the app.
if (timeRemaining.inSeconds == 0) {
timer.cancel();
onTimerFinished();
return;
}
v5 (#463) * migrate to dio * ignore folders * simplify twitch api headers handling * clean up main * simplify logs * optimize profile picture fetching fixes refetches on tab switch * update claude md * refactor irc.dart * update copilot instructions with essential commands and project structure details * implement message sending state management and UI updates * refactor notification handling and add copy-paste functionality in chat * refactor AlertMessage to support vertical layout and optional padding * refactor error messages for consistency and clarity across various components * refactor chat layout to use draggable divider and improve chat width settings * refactor Uptime widget to use SharedTimerService for synchronized updates * refactor search results components to handle null future states gracefully * refactor loading indicators to use skeleton loaders for improved user experience * refactor UI components for improved layout and responsiveness, enhance skeleton loaders, and streamline padding adjustments * refactor: replace manual blur effects with BlurredContainer for consistency and reusability * refactor: enhance JavaScript execution and error handling in WebView components * refactor: replace app bar with blurred container for improved UI consistency across screens * refactor: streamline video chat layout and enhance PiP drag gesture functionality * revert some app bar changes * refactor: implement Picture-in-Picture drag functionality in VideoChat * refactor: pass currentChannelId to IRCMessage and ChatMessage for improved context * fix large thubmnail width * chore: update Gradle and Kotlin plugin versions for improved compatibility * changes from v4.10.0 branch * feat: integrate AnimatedScrollBorder for improved UI responsiveness across various screens * refactor: update SectionHeader styling and improve theme management * feat: add pinned section to StreamsList and enhance skeleton loader padding * feat: add repository guidelines for project structure, coding style, testing, and security * feat: enhance StreamCard UI with BlurredContainer and adjust border width in theme * feat: implement unfocusInput and safeRequestFocus methods to manage text field focus behavior * feat: enhance Picture-in-Picture drag interactions with haptic feedback and smooth animations * refactor: improve code formatting and readability across multiple files * feat: implement picture-in-picture mode toggle and state management for video playback * feat: reset PiP mode state when pausing video playback * feat: add custom app bar with profile picture and stream info for video chat * feat: convert multiple settings screens to use StatefulWidget and add animated scroll borders * feat: update blur configuration for adaptive alpha based on theme * fix: adjust default font size in SectionHeader widget * feat: enhance PiP mode with drag overlay instruction and UI improvements * fix: improve badge rendering with consistent margin and border for current channel * refactor: replace BackdropFilter with BlurredContainer for improved clarity and maintainability * fix: reduce background transparency in Uptime widget for better visibility * feat: enhance photo view dialog with full resolution toggle and blurred background * fix: reset chat delay to 0 when auto sync is enabled and update settings title for clarity * fix: adjust border width in theme to improve consistency * feat: add forceDarkMode option to BlurredContainer for improved theme adaptability * feat: implement offline followed channels feature with UI integration and settings option * fix: increase font size and weight for offline status text for better readability * feat: remove offline pinned channels feature and update related UI components * feat: optimize offline channels loading behavior based on expansion state * fix: improve clarity and consistency in repository guidelines formatting * feat: update full resolution URL handling and button visibility logic * feat: replace app bar with blurred version in chat-only mode and add animated scroll border * feat: refactor video chat layout for improved chat and video display in landscape mode * feat: remove bottom bar visibility setting and adjust chat layout accordingly * fix: simplify condition for displaying offline channels section in following tab * feat: enhance reply thread display with indentation and reply icon * feat: implement showModalBottomSheetWithProperFocus for improved focus handling * feat: add gradient direction support to BlurredContainer for enhanced visual effects * feat: enhance NavigationBar and Theme settings for improved visual consistency * feat: add gradient direction support to BlurredContainer in VideoChat for enhanced visual effects * chore: update .gitignore to include .cursor file for better environment management * fix: update PiP drag gesture conditions to include video paused state for better user experience * refactor: replace ScrollController with SettingsPageLayout in settings screens for improved layout management * refactor: centralize orientation handling by introducing OrientationUtils for improved readability and maintainability * refactor: replace OrientationUtils with ContextExtensions for streamlined context-based access to theme, layout, and API dependencies * refactor: improve video chat UI by adjusting title layout and adding stream info tooltips for better user experience * refactor: adjust titleSpacing in theme and navigation components for improved layout consistency * refactor: update stream info timer handling and overlay management for improved UI responsiveness * refactor: enhance stream info timer logic and overlay visibility management for chat-only mode * refactor: enhance input decoration theme in FrostyThemes for improved visual consistency and responsiveness * refactor: adjust inputDecorationTheme padding in FrostyThemes for improved visual consistency * refactor: enhance video overlay management by including video preview overlay in hideElements for improved UI consistency * refactor: improve chat bottom bar padding and video chat layout for enhanced UI consistency * refactor: adjust chat padding to account for device bottom insets for improved layout consistency * refactor: update text styles in FrostyThemes for improved visual consistency across UI components * refactor: update iOS minimum deployment target to 13.0 for improved compatibility * refactor: adjust chat bottom padding based on emote menu visibility for improved layout consistency * refactor: adjust padding values in StreamsList for improved layout consistency * refactor: replace Padding with AnimatedPadding in Chat for smoother layout transitions refactor: replace Container with AnimatedContainer in BlurredContainer for smoother animations * refactor: remove unnecessary radius property from ProfilePicture in OfflineChannelCard for cleaner code * refactor: enhance chat bottom bar suffix icon to display message delay with tooltip for improved user experience * refactor: update hint text and tooltips in chat bottom bar and search for improved clarity * refactor: simplify notification display logic and enhance chat input behavior for improved user experience * refactor: enhance layout consistency by adjusting spacing in various components across the channel and home screens * refactor: introduce LiveIndicator widget and adjust spacing in channel and video components for improved layout consistency * refactor: remove monospace font family from chat bottom bar for improved text rendering * refactor: reduce notification animation duration and change dismiss direction for improved user experience * refactor: replace VideoBar with StreamInfoBar in video components for improved layout and consistency * refactor: adjust font sizes and spacing in StreamInfoBar for improved layout consistency * refactor: standardize font sizes and update gradient stops in video components for improved visual consistency * refactor: update tooltip padding and background color in theme for improved visual consistency * refactor: enhance tooltip behavior and standardize font sizes in StreamInfoBar and related components for improved visual consistency * refactor: add showThumbnail option to LargeStreamCardSkeletonLoader for improved layout flexibility * refactor: add StreamInfoBarSkeletonLoader for improved layout consistency in stream components * refactor: add shadow effects to icons and text in StreamInfoBar and VideoOverlay for improved visual depth * refactor: update defaultOverlayOpacity to 0.0 for improved overlay behavior * fix: correct stream info text color on overlay * refactor: implement a new color picker dialog with random color generation for enhanced user experience * refactor: adjust gradient colors and stops in VideoOverlay for improved visual consistency * refactor: refine gradient colors and stops in VideoOverlay for enhanced visual clarity * refactor: add isCompact parameter to StreamInfoBar for responsive text sizing * fix: update tooltip background color to use surface color for better contrast * feat: add shared chat mode support in chat store and update StreamInfoBar for visual indication * refactor: disable debug print for IRC messages to reduce log clutter * feat: implement chat color selection feature with user color management in chat settings * refactor: replace color adjustment logic with new contrast-aware utility for chat names * refactor: simplify chat details UI by replacing list tiles with action cards and removing unused clear dialog * refactor: enhance chat details UI by improving time formatting and adding label styling to action cards * refactor: update chat color terminology to 'Username color' for clarity in UI * refactor: enhance chat details UI by introducing active chat modes display and improving layout structure * refactor: improve chat details layout by replacing ListTile with Padding and adding a Divider for better visual separation * refactor: remove chat notifications positioning setting and adjust notification alignment in video chat * refactor: streamline StreamInfoBar component by consolidating offline handling and improving layout for better readability * refactor: enhance StreamInfoBar by adding tooltip for streamer name and improving text overflow handling * refactor: adjust tooltip display duration in StreamInfoBar and update theme configuration * refactor: adjust margin and padding in StreamCard for improved layout consistency * chore: update dependencies in pubspec.yaml and pubspec.lock for Firebase and other packages * template * chore: update iOS platform version to 15.0 and Firebase dependencies to 12.2.0 * refactor: simplify StreamInfoBar layout by reducing nested widgets and improving text color handling * format * feat: enhance Channel model and StreamInfoBar to support offline channel details * feat: add offline indicator and improve StreamInfoBar layout for better offline channel display * fix: adjust icon color opacity in StreamInfoBar for improved visibility * feat: enhance dismissal animation in FrostyPhotoViewDialog to track swipe direction * docs: update copilot instructions for clarity and additional error handling details * refactor: optimize latency tooltip layout and improve offline indicator styling in VideoOverlay * feat: implement shared chat asset fetching and participant management in ChatAssetsStore * refactor: replace Observer with Builder for improved widget rebuilding in VideoOverlay * refactor: update StreamInfoBar border styling and adjust layout in VideoOverlay for improved visual consistency * feat: add showTextShadows property to StreamInfoBar for customizable text shadow display * refactor: adjust layout in VideoOverlay by adding padding to improve spacing and visual consistency * refactor: enhance VideoOverlay gradients and layout for improved visual hierarchy and user experience * refactor: reduce vertical padding in VideoOverlay for improved layout consistency * refactor: remove overlay opacity settings from VideoSettings and SettingsStore for simplification * refactor: improve text overlay transition in VideoChat for better user experience * Revert "refactor: improve text overlay transition in VideoChat for better user experience" This reverts commit fd16ff5ec30ec266157e5c8a9d4a6090c91717f6. * refactor: wrap videoOverlay in ColoredBox for improved layout handling * refactor: optimize animation duration and transition curves in VideoChat for smoother interactions * refactor: dispose searchScrollController in HomeStoreBase to prevent memory leaks * refactor: simplify gradient definitions in VideoOverlay for improved readability and maintainability * refactor: remove 'Offline' text overlay from VideoOverlay for cleaner UI * refactor: add refresh functionality for assets in ChatDetails with loading indicators * refactor: update visibility conditions for uptime, viewer count, and category display in StreamInfoBar * refactor: replace AlertDialog with FrostyDialog for consistent dialog styling across the application * refactor: enhance layout handling in FrostyPageView to prevent overflow during height transitions * refactor: replace ColorPickerDialog with AccentColorPickerDialog for improved color selection experience * refactor: replace theme and accent color settings with dedicated components for improved modularity and readability * refactor: replace ElevatedButton with TextButton for consistent button styling across dialogs * refactor: integrate MobX Observer for reactive state management in settings widgets * refactor: update theme and dialog components for improved styling and consistency * refactor: enhance dialog styling with rounded corners and border in theme configuration * refactor: improve dialog messages for unauthorized access handling * refactor: update bodyLarge text style in theme configuration to include font weight * refactor: standardize Divider usage and adjust theme styles for improved consistency * refactor: adjust Divider properties and theme styles for enhanced visual consistency * chore: remove GEMINI.md file as it is no longer needed for project documentation * refactor: enhance token validation and reconnect logic in AuthBase for improved error handling * format * refactor: integrate landscape cutout settings into VideoChat layout for improved responsiveness * refactor: implement app lifecycle handling in VideoChat and enhance stream info update logic in VideoStore * refactor: update landscape cutout conditionals in VideoChat layout for improved responsiveness * update AGENTS.md * add scrollbar to search * fix scrolling exception * update CLAUDE.md * 5 auth reconnect attemps then log out * increase reply max lines to 2 * simplify and improve reply formatting * add prime icon * better draggable divider * support draggable divider in fullscreen overlay chat * add text shadow in fullscreen chat overlay mode * format * add landscape checks * video store optimization attempts * Dispose WebViewController and remove JavaScript channels properly * Track and cleanup all MutationObservers to prevent accumulation * Throttle latency updates to once per 5 seconds (reduces CPU load) * Add timeout protection and null checks for robustness * Prevent duplicate event listeners on page reloads * double tap divider to reset * Revert "video store optimization attempts" This reverts commit b1df7b0de473543283211a489dca698d9d241857. * optimize video store attempt 2 * Revert "double tap divider to reset" This reverts commit aeb26a433500ec71f822794835e927018ee59e1e. * optimize latency listener to open the menu and check every 20 secconds * more optimizations * hard refresh * abbreviate latency * fix lint * improve hide default overlay * fix chat no longer reconnecting with chat delay * refine chat alerts * fix historical message missing badges and emotes on initial connection * parallelize * revert * add reconnect button inline action * refactor: replace Scrollbar with FrostyScrollbar across chat and settings screens for consistent styling * tweak chat details menu * add scrollbar to release notes, renames for consistency * fix duplicate message case * fix chat delay alerts in auto sync mode * add regex for numeric strings and enhance display name formatting logic * exterminate borders * refactor: simplify active chat modes display in chat details screen * feat: enhance chat input button with delay notification and disable state * fix: wrap chat in SafeArea to prevent UI overflow issues * refactor: remove divider line from video chat and update draggable divider visibility logic * persist overlay in pip mode * fix: update chat delay handling and notifications in chat bottom bar * fix: update chat overlay visibility logic to respect fullscreen settings * tap to show deleted message * fix: prevent accidental chat scrolling when accessing system UI in landscape mode * show latency in portrait * fix: enhance chat delay notifications with dynamic delay time * docs: update CLAUDE.md for improved environment variable instructions and architecture overview * fix: improve chat delay countdown management and message handling * add preliminary release notes * remove agents.md * update lockfile * add initial multi chat feature * add option to persist multi chat tabs * add remove confirmation dialog * improve add chat design * lazy-load tabs * create global assets store to dedupe global asset fetching * improve tab design/styles * update notes * use frosty dialog * update claude md * tweak * add ability to reorder tabs * resolve conflict * merge cleanup * format * update release notes * add chat delay sync completion tracking to prevent countdown re-appearance * add tests * fix * update release notes * bump
2026-01-01 22:28:17 -05:00
// Decrement the time remaining.
timeRemaining = Duration(seconds: timeRemaining.inSeconds - 1);
});
}
/// Cancels the sleep timer and resets the time remaining.
@action
void cancelSleepTimer() {
sleepTimer?.cancel();
timeRemaining = const Duration();
}
@action
Future<void> getRecentMessage() async {
try {
final recentMessages = await twitchApi.getRecentMessages(
userLogin: channelName,
);
for (final message in recentMessages) {
_handleIRCData(message);
}
} catch (e) {
debugPrint('Failed to fetch recent messages: $e');
}
}
/// Closes and disposes all the channels and controllers used by the store.
void dispose() {
_shouldDisconnect = true;
_interactionPause.reset();
_clearPendingDelayedCallbacks();
_messageBufferTimer?.cancel();
_notificationTimer?.cancel();
_sendingTimeoutTimer?.cancel();
v5 (#463) * migrate to dio * ignore folders * simplify twitch api headers handling * clean up main * simplify logs * optimize profile picture fetching fixes refetches on tab switch * update claude md * refactor irc.dart * update copilot instructions with essential commands and project structure details * implement message sending state management and UI updates * refactor notification handling and add copy-paste functionality in chat * refactor AlertMessage to support vertical layout and optional padding * refactor error messages for consistency and clarity across various components * refactor chat layout to use draggable divider and improve chat width settings * refactor Uptime widget to use SharedTimerService for synchronized updates * refactor search results components to handle null future states gracefully * refactor loading indicators to use skeleton loaders for improved user experience * refactor UI components for improved layout and responsiveness, enhance skeleton loaders, and streamline padding adjustments * refactor: replace manual blur effects with BlurredContainer for consistency and reusability * refactor: enhance JavaScript execution and error handling in WebView components * refactor: replace app bar with blurred container for improved UI consistency across screens * refactor: streamline video chat layout and enhance PiP drag gesture functionality * revert some app bar changes * refactor: implement Picture-in-Picture drag functionality in VideoChat * refactor: pass currentChannelId to IRCMessage and ChatMessage for improved context * fix large thubmnail width * chore: update Gradle and Kotlin plugin versions for improved compatibility * changes from v4.10.0 branch * feat: integrate AnimatedScrollBorder for improved UI responsiveness across various screens * refactor: update SectionHeader styling and improve theme management * feat: add pinned section to StreamsList and enhance skeleton loader padding * feat: add repository guidelines for project structure, coding style, testing, and security * feat: enhance StreamCard UI with BlurredContainer and adjust border width in theme * feat: implement unfocusInput and safeRequestFocus methods to manage text field focus behavior * feat: enhance Picture-in-Picture drag interactions with haptic feedback and smooth animations * refactor: improve code formatting and readability across multiple files * feat: implement picture-in-picture mode toggle and state management for video playback * feat: reset PiP mode state when pausing video playback * feat: add custom app bar with profile picture and stream info for video chat * feat: convert multiple settings screens to use StatefulWidget and add animated scroll borders * feat: update blur configuration for adaptive alpha based on theme * fix: adjust default font size in SectionHeader widget * feat: enhance PiP mode with drag overlay instruction and UI improvements * fix: improve badge rendering with consistent margin and border for current channel * refactor: replace BackdropFilter with BlurredContainer for improved clarity and maintainability * fix: reduce background transparency in Uptime widget for better visibility * feat: enhance photo view dialog with full resolution toggle and blurred background * fix: reset chat delay to 0 when auto sync is enabled and update settings title for clarity * fix: adjust border width in theme to improve consistency * feat: add forceDarkMode option to BlurredContainer for improved theme adaptability * feat: implement offline followed channels feature with UI integration and settings option * fix: increase font size and weight for offline status text for better readability * feat: remove offline pinned channels feature and update related UI components * feat: optimize offline channels loading behavior based on expansion state * fix: improve clarity and consistency in repository guidelines formatting * feat: update full resolution URL handling and button visibility logic * feat: replace app bar with blurred version in chat-only mode and add animated scroll border * feat: refactor video chat layout for improved chat and video display in landscape mode * feat: remove bottom bar visibility setting and adjust chat layout accordingly * fix: simplify condition for displaying offline channels section in following tab * feat: enhance reply thread display with indentation and reply icon * feat: implement showModalBottomSheetWithProperFocus for improved focus handling * feat: add gradient direction support to BlurredContainer for enhanced visual effects * feat: enhance NavigationBar and Theme settings for improved visual consistency * feat: add gradient direction support to BlurredContainer in VideoChat for enhanced visual effects * chore: update .gitignore to include .cursor file for better environment management * fix: update PiP drag gesture conditions to include video paused state for better user experience * refactor: replace ScrollController with SettingsPageLayout in settings screens for improved layout management * refactor: centralize orientation handling by introducing OrientationUtils for improved readability and maintainability * refactor: replace OrientationUtils with ContextExtensions for streamlined context-based access to theme, layout, and API dependencies * refactor: improve video chat UI by adjusting title layout and adding stream info tooltips for better user experience * refactor: adjust titleSpacing in theme and navigation components for improved layout consistency * refactor: update stream info timer handling and overlay management for improved UI responsiveness * refactor: enhance stream info timer logic and overlay visibility management for chat-only mode * refactor: enhance input decoration theme in FrostyThemes for improved visual consistency and responsiveness * refactor: adjust inputDecorationTheme padding in FrostyThemes for improved visual consistency * refactor: enhance video overlay management by including video preview overlay in hideElements for improved UI consistency * refactor: improve chat bottom bar padding and video chat layout for enhanced UI consistency * refactor: adjust chat padding to account for device bottom insets for improved layout consistency * refactor: update text styles in FrostyThemes for improved visual consistency across UI components * refactor: update iOS minimum deployment target to 13.0 for improved compatibility * refactor: adjust chat bottom padding based on emote menu visibility for improved layout consistency * refactor: adjust padding values in StreamsList for improved layout consistency * refactor: replace Padding with AnimatedPadding in Chat for smoother layout transitions refactor: replace Container with AnimatedContainer in BlurredContainer for smoother animations * refactor: remove unnecessary radius property from ProfilePicture in OfflineChannelCard for cleaner code * refactor: enhance chat bottom bar suffix icon to display message delay with tooltip for improved user experience * refactor: update hint text and tooltips in chat bottom bar and search for improved clarity * refactor: simplify notification display logic and enhance chat input behavior for improved user experience * refactor: enhance layout consistency by adjusting spacing in various components across the channel and home screens * refactor: introduce LiveIndicator widget and adjust spacing in channel and video components for improved layout consistency * refactor: remove monospace font family from chat bottom bar for improved text rendering * refactor: reduce notification animation duration and change dismiss direction for improved user experience * refactor: replace VideoBar with StreamInfoBar in video components for improved layout and consistency * refactor: adjust font sizes and spacing in StreamInfoBar for improved layout consistency * refactor: standardize font sizes and update gradient stops in video components for improved visual consistency * refactor: update tooltip padding and background color in theme for improved visual consistency * refactor: enhance tooltip behavior and standardize font sizes in StreamInfoBar and related components for improved visual consistency * refactor: add showThumbnail option to LargeStreamCardSkeletonLoader for improved layout flexibility * refactor: add StreamInfoBarSkeletonLoader for improved layout consistency in stream components * refactor: add shadow effects to icons and text in StreamInfoBar and VideoOverlay for improved visual depth * refactor: update defaultOverlayOpacity to 0.0 for improved overlay behavior * fix: correct stream info text color on overlay * refactor: implement a new color picker dialog with random color generation for enhanced user experience * refactor: adjust gradient colors and stops in VideoOverlay for improved visual consistency * refactor: refine gradient colors and stops in VideoOverlay for enhanced visual clarity * refactor: add isCompact parameter to StreamInfoBar for responsive text sizing * fix: update tooltip background color to use surface color for better contrast * feat: add shared chat mode support in chat store and update StreamInfoBar for visual indication * refactor: disable debug print for IRC messages to reduce log clutter * feat: implement chat color selection feature with user color management in chat settings * refactor: replace color adjustment logic with new contrast-aware utility for chat names * refactor: simplify chat details UI by replacing list tiles with action cards and removing unused clear dialog * refactor: enhance chat details UI by improving time formatting and adding label styling to action cards * refactor: update chat color terminology to 'Username color' for clarity in UI * refactor: enhance chat details UI by introducing active chat modes display and improving layout structure * refactor: improve chat details layout by replacing ListTile with Padding and adding a Divider for better visual separation * refactor: remove chat notifications positioning setting and adjust notification alignment in video chat * refactor: streamline StreamInfoBar component by consolidating offline handling and improving layout for better readability * refactor: enhance StreamInfoBar by adding tooltip for streamer name and improving text overflow handling * refactor: adjust tooltip display duration in StreamInfoBar and update theme configuration * refactor: adjust margin and padding in StreamCard for improved layout consistency * chore: update dependencies in pubspec.yaml and pubspec.lock for Firebase and other packages * template * chore: update iOS platform version to 15.0 and Firebase dependencies to 12.2.0 * refactor: simplify StreamInfoBar layout by reducing nested widgets and improving text color handling * format * feat: enhance Channel model and StreamInfoBar to support offline channel details * feat: add offline indicator and improve StreamInfoBar layout for better offline channel display * fix: adjust icon color opacity in StreamInfoBar for improved visibility * feat: enhance dismissal animation in FrostyPhotoViewDialog to track swipe direction * docs: update copilot instructions for clarity and additional error handling details * refactor: optimize latency tooltip layout and improve offline indicator styling in VideoOverlay * feat: implement shared chat asset fetching and participant management in ChatAssetsStore * refactor: replace Observer with Builder for improved widget rebuilding in VideoOverlay * refactor: update StreamInfoBar border styling and adjust layout in VideoOverlay for improved visual consistency * feat: add showTextShadows property to StreamInfoBar for customizable text shadow display * refactor: adjust layout in VideoOverlay by adding padding to improve spacing and visual consistency * refactor: enhance VideoOverlay gradients and layout for improved visual hierarchy and user experience * refactor: reduce vertical padding in VideoOverlay for improved layout consistency * refactor: remove overlay opacity settings from VideoSettings and SettingsStore for simplification * refactor: improve text overlay transition in VideoChat for better user experience * Revert "refactor: improve text overlay transition in VideoChat for better user experience" This reverts commit fd16ff5ec30ec266157e5c8a9d4a6090c91717f6. * refactor: wrap videoOverlay in ColoredBox for improved layout handling * refactor: optimize animation duration and transition curves in VideoChat for smoother interactions * refactor: dispose searchScrollController in HomeStoreBase to prevent memory leaks * refactor: simplify gradient definitions in VideoOverlay for improved readability and maintainability * refactor: remove 'Offline' text overlay from VideoOverlay for cleaner UI * refactor: add refresh functionality for assets in ChatDetails with loading indicators * refactor: update visibility conditions for uptime, viewer count, and category display in StreamInfoBar * refactor: replace AlertDialog with FrostyDialog for consistent dialog styling across the application * refactor: enhance layout handling in FrostyPageView to prevent overflow during height transitions * refactor: replace ColorPickerDialog with AccentColorPickerDialog for improved color selection experience * refactor: replace theme and accent color settings with dedicated components for improved modularity and readability * refactor: replace ElevatedButton with TextButton for consistent button styling across dialogs * refactor: integrate MobX Observer for reactive state management in settings widgets * refactor: update theme and dialog components for improved styling and consistency * refactor: enhance dialog styling with rounded corners and border in theme configuration * refactor: improve dialog messages for unauthorized access handling * refactor: update bodyLarge text style in theme configuration to include font weight * refactor: standardize Divider usage and adjust theme styles for improved consistency * refactor: adjust Divider properties and theme styles for enhanced visual consistency * chore: remove GEMINI.md file as it is no longer needed for project documentation * refactor: enhance token validation and reconnect logic in AuthBase for improved error handling * format * refactor: integrate landscape cutout settings into VideoChat layout for improved responsiveness * refactor: implement app lifecycle handling in VideoChat and enhance stream info update logic in VideoStore * refactor: update landscape cutout conditionals in VideoChat layout for improved responsiveness * update AGENTS.md * add scrollbar to search * fix scrolling exception * update CLAUDE.md * 5 auth reconnect attemps then log out * increase reply max lines to 2 * simplify and improve reply formatting * add prime icon * better draggable divider * support draggable divider in fullscreen overlay chat * add text shadow in fullscreen chat overlay mode * format * add landscape checks * video store optimization attempts * Dispose WebViewController and remove JavaScript channels properly * Track and cleanup all MutationObservers to prevent accumulation * Throttle latency updates to once per 5 seconds (reduces CPU load) * Add timeout protection and null checks for robustness * Prevent duplicate event listeners on page reloads * double tap divider to reset * Revert "video store optimization attempts" This reverts commit b1df7b0de473543283211a489dca698d9d241857. * optimize video store attempt 2 * Revert "double tap divider to reset" This reverts commit aeb26a433500ec71f822794835e927018ee59e1e. * optimize latency listener to open the menu and check every 20 secconds * more optimizations * hard refresh * abbreviate latency * fix lint * improve hide default overlay * fix chat no longer reconnecting with chat delay * refine chat alerts * fix historical message missing badges and emotes on initial connection * parallelize * revert * add reconnect button inline action * refactor: replace Scrollbar with FrostyScrollbar across chat and settings screens for consistent styling * tweak chat details menu * add scrollbar to release notes, renames for consistency * fix duplicate message case * fix chat delay alerts in auto sync mode * add regex for numeric strings and enhance display name formatting logic * exterminate borders * refactor: simplify active chat modes display in chat details screen * feat: enhance chat input button with delay notification and disable state * fix: wrap chat in SafeArea to prevent UI overflow issues * refactor: remove divider line from video chat and update draggable divider visibility logic * persist overlay in pip mode * fix: update chat delay handling and notifications in chat bottom bar * fix: update chat overlay visibility logic to respect fullscreen settings * tap to show deleted message * fix: prevent accidental chat scrolling when accessing system UI in landscape mode * show latency in portrait * fix: enhance chat delay notifications with dynamic delay time * docs: update CLAUDE.md for improved environment variable instructions and architecture overview * fix: improve chat delay countdown management and message handling * add preliminary release notes * remove agents.md * update lockfile * add initial multi chat feature * add option to persist multi chat tabs * add remove confirmation dialog * improve add chat design * lazy-load tabs * create global assets store to dedupe global asset fetching * improve tab design/styles * update notes * use frosty dialog * update claude md * tweak * add ability to reorder tabs * resolve conflict * merge cleanup * format * update release notes * add chat delay sync completion tracking to prevent countdown re-appearance * add tests * fix * update release notes * bump
2026-01-01 22:28:17 -05:00
_cancelChatDelayCountdown();
sleepTimer?.cancel();
2025-03-23 22:11:09 -07:00
// Cancel WebSocket subscriptions
_channelListener?.cancel();
_sevenTVChannelListener?.cancel();
// Close WebSocket channels
2024-08-09 21:28:59 -07:00
_channel?.sink.close(1000);
2025-03-23 22:11:09 -07:00
_sevenTVChannel?.sink.close(1000);
for (final reactionDisposer in reactions) {
reactionDisposer();
}
textFieldFocusNode.dispose();
2021-11-14 04:25:33 -05:00
textController.dispose();
scrollController.dispose();
assetsStore.dispose();
chatDetailsStore.dispose();
v5 (#463) * migrate to dio * ignore folders * simplify twitch api headers handling * clean up main * simplify logs * optimize profile picture fetching fixes refetches on tab switch * update claude md * refactor irc.dart * update copilot instructions with essential commands and project structure details * implement message sending state management and UI updates * refactor notification handling and add copy-paste functionality in chat * refactor AlertMessage to support vertical layout and optional padding * refactor error messages for consistency and clarity across various components * refactor chat layout to use draggable divider and improve chat width settings * refactor Uptime widget to use SharedTimerService for synchronized updates * refactor search results components to handle null future states gracefully * refactor loading indicators to use skeleton loaders for improved user experience * refactor UI components for improved layout and responsiveness, enhance skeleton loaders, and streamline padding adjustments * refactor: replace manual blur effects with BlurredContainer for consistency and reusability * refactor: enhance JavaScript execution and error handling in WebView components * refactor: replace app bar with blurred container for improved UI consistency across screens * refactor: streamline video chat layout and enhance PiP drag gesture functionality * revert some app bar changes * refactor: implement Picture-in-Picture drag functionality in VideoChat * refactor: pass currentChannelId to IRCMessage and ChatMessage for improved context * fix large thubmnail width * chore: update Gradle and Kotlin plugin versions for improved compatibility * changes from v4.10.0 branch * feat: integrate AnimatedScrollBorder for improved UI responsiveness across various screens * refactor: update SectionHeader styling and improve theme management * feat: add pinned section to StreamsList and enhance skeleton loader padding * feat: add repository guidelines for project structure, coding style, testing, and security * feat: enhance StreamCard UI with BlurredContainer and adjust border width in theme * feat: implement unfocusInput and safeRequestFocus methods to manage text field focus behavior * feat: enhance Picture-in-Picture drag interactions with haptic feedback and smooth animations * refactor: improve code formatting and readability across multiple files * feat: implement picture-in-picture mode toggle and state management for video playback * feat: reset PiP mode state when pausing video playback * feat: add custom app bar with profile picture and stream info for video chat * feat: convert multiple settings screens to use StatefulWidget and add animated scroll borders * feat: update blur configuration for adaptive alpha based on theme * fix: adjust default font size in SectionHeader widget * feat: enhance PiP mode with drag overlay instruction and UI improvements * fix: improve badge rendering with consistent margin and border for current channel * refactor: replace BackdropFilter with BlurredContainer for improved clarity and maintainability * fix: reduce background transparency in Uptime widget for better visibility * feat: enhance photo view dialog with full resolution toggle and blurred background * fix: reset chat delay to 0 when auto sync is enabled and update settings title for clarity * fix: adjust border width in theme to improve consistency * feat: add forceDarkMode option to BlurredContainer for improved theme adaptability * feat: implement offline followed channels feature with UI integration and settings option * fix: increase font size and weight for offline status text for better readability * feat: remove offline pinned channels feature and update related UI components * feat: optimize offline channels loading behavior based on expansion state * fix: improve clarity and consistency in repository guidelines formatting * feat: update full resolution URL handling and button visibility logic * feat: replace app bar with blurred version in chat-only mode and add animated scroll border * feat: refactor video chat layout for improved chat and video display in landscape mode * feat: remove bottom bar visibility setting and adjust chat layout accordingly * fix: simplify condition for displaying offline channels section in following tab * feat: enhance reply thread display with indentation and reply icon * feat: implement showModalBottomSheetWithProperFocus for improved focus handling * feat: add gradient direction support to BlurredContainer for enhanced visual effects * feat: enhance NavigationBar and Theme settings for improved visual consistency * feat: add gradient direction support to BlurredContainer in VideoChat for enhanced visual effects * chore: update .gitignore to include .cursor file for better environment management * fix: update PiP drag gesture conditions to include video paused state for better user experience * refactor: replace ScrollController with SettingsPageLayout in settings screens for improved layout management * refactor: centralize orientation handling by introducing OrientationUtils for improved readability and maintainability * refactor: replace OrientationUtils with ContextExtensions for streamlined context-based access to theme, layout, and API dependencies * refactor: improve video chat UI by adjusting title layout and adding stream info tooltips for better user experience * refactor: adjust titleSpacing in theme and navigation components for improved layout consistency * refactor: update stream info timer handling and overlay management for improved UI responsiveness * refactor: enhance stream info timer logic and overlay visibility management for chat-only mode * refactor: enhance input decoration theme in FrostyThemes for improved visual consistency and responsiveness * refactor: adjust inputDecorationTheme padding in FrostyThemes for improved visual consistency * refactor: enhance video overlay management by including video preview overlay in hideElements for improved UI consistency * refactor: improve chat bottom bar padding and video chat layout for enhanced UI consistency * refactor: adjust chat padding to account for device bottom insets for improved layout consistency * refactor: update text styles in FrostyThemes for improved visual consistency across UI components * refactor: update iOS minimum deployment target to 13.0 for improved compatibility * refactor: adjust chat bottom padding based on emote menu visibility for improved layout consistency * refactor: adjust padding values in StreamsList for improved layout consistency * refactor: replace Padding with AnimatedPadding in Chat for smoother layout transitions refactor: replace Container with AnimatedContainer in BlurredContainer for smoother animations * refactor: remove unnecessary radius property from ProfilePicture in OfflineChannelCard for cleaner code * refactor: enhance chat bottom bar suffix icon to display message delay with tooltip for improved user experience * refactor: update hint text and tooltips in chat bottom bar and search for improved clarity * refactor: simplify notification display logic and enhance chat input behavior for improved user experience * refactor: enhance layout consistency by adjusting spacing in various components across the channel and home screens * refactor: introduce LiveIndicator widget and adjust spacing in channel and video components for improved layout consistency * refactor: remove monospace font family from chat bottom bar for improved text rendering * refactor: reduce notification animation duration and change dismiss direction for improved user experience * refactor: replace VideoBar with StreamInfoBar in video components for improved layout and consistency * refactor: adjust font sizes and spacing in StreamInfoBar for improved layout consistency * refactor: standardize font sizes and update gradient stops in video components for improved visual consistency * refactor: update tooltip padding and background color in theme for improved visual consistency * refactor: enhance tooltip behavior and standardize font sizes in StreamInfoBar and related components for improved visual consistency * refactor: add showThumbnail option to LargeStreamCardSkeletonLoader for improved layout flexibility * refactor: add StreamInfoBarSkeletonLoader for improved layout consistency in stream components * refactor: add shadow effects to icons and text in StreamInfoBar and VideoOverlay for improved visual depth * refactor: update defaultOverlayOpacity to 0.0 for improved overlay behavior * fix: correct stream info text color on overlay * refactor: implement a new color picker dialog with random color generation for enhanced user experience * refactor: adjust gradient colors and stops in VideoOverlay for improved visual consistency * refactor: refine gradient colors and stops in VideoOverlay for enhanced visual clarity * refactor: add isCompact parameter to StreamInfoBar for responsive text sizing * fix: update tooltip background color to use surface color for better contrast * feat: add shared chat mode support in chat store and update StreamInfoBar for visual indication * refactor: disable debug print for IRC messages to reduce log clutter * feat: implement chat color selection feature with user color management in chat settings * refactor: replace color adjustment logic with new contrast-aware utility for chat names * refactor: simplify chat details UI by replacing list tiles with action cards and removing unused clear dialog * refactor: enhance chat details UI by improving time formatting and adding label styling to action cards * refactor: update chat color terminology to 'Username color' for clarity in UI * refactor: enhance chat details UI by introducing active chat modes display and improving layout structure * refactor: improve chat details layout by replacing ListTile with Padding and adding a Divider for better visual separation * refactor: remove chat notifications positioning setting and adjust notification alignment in video chat * refactor: streamline StreamInfoBar component by consolidating offline handling and improving layout for better readability * refactor: enhance StreamInfoBar by adding tooltip for streamer name and improving text overflow handling * refactor: adjust tooltip display duration in StreamInfoBar and update theme configuration * refactor: adjust margin and padding in StreamCard for improved layout consistency * chore: update dependencies in pubspec.yaml and pubspec.lock for Firebase and other packages * template * chore: update iOS platform version to 15.0 and Firebase dependencies to 12.2.0 * refactor: simplify StreamInfoBar layout by reducing nested widgets and improving text color handling * format * feat: enhance Channel model and StreamInfoBar to support offline channel details * feat: add offline indicator and improve StreamInfoBar layout for better offline channel display * fix: adjust icon color opacity in StreamInfoBar for improved visibility * feat: enhance dismissal animation in FrostyPhotoViewDialog to track swipe direction * docs: update copilot instructions for clarity and additional error handling details * refactor: optimize latency tooltip layout and improve offline indicator styling in VideoOverlay * feat: implement shared chat asset fetching and participant management in ChatAssetsStore * refactor: replace Observer with Builder for improved widget rebuilding in VideoOverlay * refactor: update StreamInfoBar border styling and adjust layout in VideoOverlay for improved visual consistency * feat: add showTextShadows property to StreamInfoBar for customizable text shadow display * refactor: adjust layout in VideoOverlay by adding padding to improve spacing and visual consistency * refactor: enhance VideoOverlay gradients and layout for improved visual hierarchy and user experience * refactor: reduce vertical padding in VideoOverlay for improved layout consistency * refactor: remove overlay opacity settings from VideoSettings and SettingsStore for simplification * refactor: improve text overlay transition in VideoChat for better user experience * Revert "refactor: improve text overlay transition in VideoChat for better user experience" This reverts commit fd16ff5ec30ec266157e5c8a9d4a6090c91717f6. * refactor: wrap videoOverlay in ColoredBox for improved layout handling * refactor: optimize animation duration and transition curves in VideoChat for smoother interactions * refactor: dispose searchScrollController in HomeStoreBase to prevent memory leaks * refactor: simplify gradient definitions in VideoOverlay for improved readability and maintainability * refactor: remove 'Offline' text overlay from VideoOverlay for cleaner UI * refactor: add refresh functionality for assets in ChatDetails with loading indicators * refactor: update visibility conditions for uptime, viewer count, and category display in StreamInfoBar * refactor: replace AlertDialog with FrostyDialog for consistent dialog styling across the application * refactor: enhance layout handling in FrostyPageView to prevent overflow during height transitions * refactor: replace ColorPickerDialog with AccentColorPickerDialog for improved color selection experience * refactor: replace theme and accent color settings with dedicated components for improved modularity and readability * refactor: replace ElevatedButton with TextButton for consistent button styling across dialogs * refactor: integrate MobX Observer for reactive state management in settings widgets * refactor: update theme and dialog components for improved styling and consistency * refactor: enhance dialog styling with rounded corners and border in theme configuration * refactor: improve dialog messages for unauthorized access handling * refactor: update bodyLarge text style in theme configuration to include font weight * refactor: standardize Divider usage and adjust theme styles for improved consistency * refactor: adjust Divider properties and theme styles for enhanced visual consistency * chore: remove GEMINI.md file as it is no longer needed for project documentation * refactor: enhance token validation and reconnect logic in AuthBase for improved error handling * format * refactor: integrate landscape cutout settings into VideoChat layout for improved responsiveness * refactor: implement app lifecycle handling in VideoChat and enhance stream info update logic in VideoStore * refactor: update landscape cutout conditionals in VideoChat layout for improved responsiveness * update AGENTS.md * add scrollbar to search * fix scrolling exception * update CLAUDE.md * 5 auth reconnect attemps then log out * increase reply max lines to 2 * simplify and improve reply formatting * add prime icon * better draggable divider * support draggable divider in fullscreen overlay chat * add text shadow in fullscreen chat overlay mode * format * add landscape checks * video store optimization attempts * Dispose WebViewController and remove JavaScript channels properly * Track and cleanup all MutationObservers to prevent accumulation * Throttle latency updates to once per 5 seconds (reduces CPU load) * Add timeout protection and null checks for robustness * Prevent duplicate event listeners on page reloads * double tap divider to reset * Revert "video store optimization attempts" This reverts commit b1df7b0de473543283211a489dca698d9d241857. * optimize video store attempt 2 * Revert "double tap divider to reset" This reverts commit aeb26a433500ec71f822794835e927018ee59e1e. * optimize latency listener to open the menu and check every 20 secconds * more optimizations * hard refresh * abbreviate latency * fix lint * improve hide default overlay * fix chat no longer reconnecting with chat delay * refine chat alerts * fix historical message missing badges and emotes on initial connection * parallelize * revert * add reconnect button inline action * refactor: replace Scrollbar with FrostyScrollbar across chat and settings screens for consistent styling * tweak chat details menu * add scrollbar to release notes, renames for consistency * fix duplicate message case * fix chat delay alerts in auto sync mode * add regex for numeric strings and enhance display name formatting logic * exterminate borders * refactor: simplify active chat modes display in chat details screen * feat: enhance chat input button with delay notification and disable state * fix: wrap chat in SafeArea to prevent UI overflow issues * refactor: remove divider line from video chat and update draggable divider visibility logic * persist overlay in pip mode * fix: update chat delay handling and notifications in chat bottom bar * fix: update chat overlay visibility logic to respect fullscreen settings * tap to show deleted message * fix: prevent accidental chat scrolling when accessing system UI in landscape mode * show latency in portrait * fix: enhance chat delay notifications with dynamic delay time * docs: update CLAUDE.md for improved environment variable instructions and architecture overview * fix: improve chat delay countdown management and message handling * add preliminary release notes * remove agents.md * update lockfile * add initial multi chat feature * add option to persist multi chat tabs * add remove confirmation dialog * improve add chat design * lazy-load tabs * create global assets store to dedupe global asset fetching * improve tab design/styles * update notes * use frosty dialog * update claude md * tweak * add ability to reorder tabs * resolve conflict * merge cleanup * format * update release notes * add chat delay sync completion tracking to prevent countdown re-appearance * add tests * fix * update release notes * bump
2026-01-01 22:28:17 -05:00
}
2022-07-27 20:04:02 -04:00
v5 (#463) * migrate to dio * ignore folders * simplify twitch api headers handling * clean up main * simplify logs * optimize profile picture fetching fixes refetches on tab switch * update claude md * refactor irc.dart * update copilot instructions with essential commands and project structure details * implement message sending state management and UI updates * refactor notification handling and add copy-paste functionality in chat * refactor AlertMessage to support vertical layout and optional padding * refactor error messages for consistency and clarity across various components * refactor chat layout to use draggable divider and improve chat width settings * refactor Uptime widget to use SharedTimerService for synchronized updates * refactor search results components to handle null future states gracefully * refactor loading indicators to use skeleton loaders for improved user experience * refactor UI components for improved layout and responsiveness, enhance skeleton loaders, and streamline padding adjustments * refactor: replace manual blur effects with BlurredContainer for consistency and reusability * refactor: enhance JavaScript execution and error handling in WebView components * refactor: replace app bar with blurred container for improved UI consistency across screens * refactor: streamline video chat layout and enhance PiP drag gesture functionality * revert some app bar changes * refactor: implement Picture-in-Picture drag functionality in VideoChat * refactor: pass currentChannelId to IRCMessage and ChatMessage for improved context * fix large thubmnail width * chore: update Gradle and Kotlin plugin versions for improved compatibility * changes from v4.10.0 branch * feat: integrate AnimatedScrollBorder for improved UI responsiveness across various screens * refactor: update SectionHeader styling and improve theme management * feat: add pinned section to StreamsList and enhance skeleton loader padding * feat: add repository guidelines for project structure, coding style, testing, and security * feat: enhance StreamCard UI with BlurredContainer and adjust border width in theme * feat: implement unfocusInput and safeRequestFocus methods to manage text field focus behavior * feat: enhance Picture-in-Picture drag interactions with haptic feedback and smooth animations * refactor: improve code formatting and readability across multiple files * feat: implement picture-in-picture mode toggle and state management for video playback * feat: reset PiP mode state when pausing video playback * feat: add custom app bar with profile picture and stream info for video chat * feat: convert multiple settings screens to use StatefulWidget and add animated scroll borders * feat: update blur configuration for adaptive alpha based on theme * fix: adjust default font size in SectionHeader widget * feat: enhance PiP mode with drag overlay instruction and UI improvements * fix: improve badge rendering with consistent margin and border for current channel * refactor: replace BackdropFilter with BlurredContainer for improved clarity and maintainability * fix: reduce background transparency in Uptime widget for better visibility * feat: enhance photo view dialog with full resolution toggle and blurred background * fix: reset chat delay to 0 when auto sync is enabled and update settings title for clarity * fix: adjust border width in theme to improve consistency * feat: add forceDarkMode option to BlurredContainer for improved theme adaptability * feat: implement offline followed channels feature with UI integration and settings option * fix: increase font size and weight for offline status text for better readability * feat: remove offline pinned channels feature and update related UI components * feat: optimize offline channels loading behavior based on expansion state * fix: improve clarity and consistency in repository guidelines formatting * feat: update full resolution URL handling and button visibility logic * feat: replace app bar with blurred version in chat-only mode and add animated scroll border * feat: refactor video chat layout for improved chat and video display in landscape mode * feat: remove bottom bar visibility setting and adjust chat layout accordingly * fix: simplify condition for displaying offline channels section in following tab * feat: enhance reply thread display with indentation and reply icon * feat: implement showModalBottomSheetWithProperFocus for improved focus handling * feat: add gradient direction support to BlurredContainer for enhanced visual effects * feat: enhance NavigationBar and Theme settings for improved visual consistency * feat: add gradient direction support to BlurredContainer in VideoChat for enhanced visual effects * chore: update .gitignore to include .cursor file for better environment management * fix: update PiP drag gesture conditions to include video paused state for better user experience * refactor: replace ScrollController with SettingsPageLayout in settings screens for improved layout management * refactor: centralize orientation handling by introducing OrientationUtils for improved readability and maintainability * refactor: replace OrientationUtils with ContextExtensions for streamlined context-based access to theme, layout, and API dependencies * refactor: improve video chat UI by adjusting title layout and adding stream info tooltips for better user experience * refactor: adjust titleSpacing in theme and navigation components for improved layout consistency * refactor: update stream info timer handling and overlay management for improved UI responsiveness * refactor: enhance stream info timer logic and overlay visibility management for chat-only mode * refactor: enhance input decoration theme in FrostyThemes for improved visual consistency and responsiveness * refactor: adjust inputDecorationTheme padding in FrostyThemes for improved visual consistency * refactor: enhance video overlay management by including video preview overlay in hideElements for improved UI consistency * refactor: improve chat bottom bar padding and video chat layout for enhanced UI consistency * refactor: adjust chat padding to account for device bottom insets for improved layout consistency * refactor: update text styles in FrostyThemes for improved visual consistency across UI components * refactor: update iOS minimum deployment target to 13.0 for improved compatibility * refactor: adjust chat bottom padding based on emote menu visibility for improved layout consistency * refactor: adjust padding values in StreamsList for improved layout consistency * refactor: replace Padding with AnimatedPadding in Chat for smoother layout transitions refactor: replace Container with AnimatedContainer in BlurredContainer for smoother animations * refactor: remove unnecessary radius property from ProfilePicture in OfflineChannelCard for cleaner code * refactor: enhance chat bottom bar suffix icon to display message delay with tooltip for improved user experience * refactor: update hint text and tooltips in chat bottom bar and search for improved clarity * refactor: simplify notification display logic and enhance chat input behavior for improved user experience * refactor: enhance layout consistency by adjusting spacing in various components across the channel and home screens * refactor: introduce LiveIndicator widget and adjust spacing in channel and video components for improved layout consistency * refactor: remove monospace font family from chat bottom bar for improved text rendering * refactor: reduce notification animation duration and change dismiss direction for improved user experience * refactor: replace VideoBar with StreamInfoBar in video components for improved layout and consistency * refactor: adjust font sizes and spacing in StreamInfoBar for improved layout consistency * refactor: standardize font sizes and update gradient stops in video components for improved visual consistency * refactor: update tooltip padding and background color in theme for improved visual consistency * refactor: enhance tooltip behavior and standardize font sizes in StreamInfoBar and related components for improved visual consistency * refactor: add showThumbnail option to LargeStreamCardSkeletonLoader for improved layout flexibility * refactor: add StreamInfoBarSkeletonLoader for improved layout consistency in stream components * refactor: add shadow effects to icons and text in StreamInfoBar and VideoOverlay for improved visual depth * refactor: update defaultOverlayOpacity to 0.0 for improved overlay behavior * fix: correct stream info text color on overlay * refactor: implement a new color picker dialog with random color generation for enhanced user experience * refactor: adjust gradient colors and stops in VideoOverlay for improved visual consistency * refactor: refine gradient colors and stops in VideoOverlay for enhanced visual clarity * refactor: add isCompact parameter to StreamInfoBar for responsive text sizing * fix: update tooltip background color to use surface color for better contrast * feat: add shared chat mode support in chat store and update StreamInfoBar for visual indication * refactor: disable debug print for IRC messages to reduce log clutter * feat: implement chat color selection feature with user color management in chat settings * refactor: replace color adjustment logic with new contrast-aware utility for chat names * refactor: simplify chat details UI by replacing list tiles with action cards and removing unused clear dialog * refactor: enhance chat details UI by improving time formatting and adding label styling to action cards * refactor: update chat color terminology to 'Username color' for clarity in UI * refactor: enhance chat details UI by introducing active chat modes display and improving layout structure * refactor: improve chat details layout by replacing ListTile with Padding and adding a Divider for better visual separation * refactor: remove chat notifications positioning setting and adjust notification alignment in video chat * refactor: streamline StreamInfoBar component by consolidating offline handling and improving layout for better readability * refactor: enhance StreamInfoBar by adding tooltip for streamer name and improving text overflow handling * refactor: adjust tooltip display duration in StreamInfoBar and update theme configuration * refactor: adjust margin and padding in StreamCard for improved layout consistency * chore: update dependencies in pubspec.yaml and pubspec.lock for Firebase and other packages * template * chore: update iOS platform version to 15.0 and Firebase dependencies to 12.2.0 * refactor: simplify StreamInfoBar layout by reducing nested widgets and improving text color handling * format * feat: enhance Channel model and StreamInfoBar to support offline channel details * feat: add offline indicator and improve StreamInfoBar layout for better offline channel display * fix: adjust icon color opacity in StreamInfoBar for improved visibility * feat: enhance dismissal animation in FrostyPhotoViewDialog to track swipe direction * docs: update copilot instructions for clarity and additional error handling details * refactor: optimize latency tooltip layout and improve offline indicator styling in VideoOverlay * feat: implement shared chat asset fetching and participant management in ChatAssetsStore * refactor: replace Observer with Builder for improved widget rebuilding in VideoOverlay * refactor: update StreamInfoBar border styling and adjust layout in VideoOverlay for improved visual consistency * feat: add showTextShadows property to StreamInfoBar for customizable text shadow display * refactor: adjust layout in VideoOverlay by adding padding to improve spacing and visual consistency * refactor: enhance VideoOverlay gradients and layout for improved visual hierarchy and user experience * refactor: reduce vertical padding in VideoOverlay for improved layout consistency * refactor: remove overlay opacity settings from VideoSettings and SettingsStore for simplification * refactor: improve text overlay transition in VideoChat for better user experience * Revert "refactor: improve text overlay transition in VideoChat for better user experience" This reverts commit fd16ff5ec30ec266157e5c8a9d4a6090c91717f6. * refactor: wrap videoOverlay in ColoredBox for improved layout handling * refactor: optimize animation duration and transition curves in VideoChat for smoother interactions * refactor: dispose searchScrollController in HomeStoreBase to prevent memory leaks * refactor: simplify gradient definitions in VideoOverlay for improved readability and maintainability * refactor: remove 'Offline' text overlay from VideoOverlay for cleaner UI * refactor: add refresh functionality for assets in ChatDetails with loading indicators * refactor: update visibility conditions for uptime, viewer count, and category display in StreamInfoBar * refactor: replace AlertDialog with FrostyDialog for consistent dialog styling across the application * refactor: enhance layout handling in FrostyPageView to prevent overflow during height transitions * refactor: replace ColorPickerDialog with AccentColorPickerDialog for improved color selection experience * refactor: replace theme and accent color settings with dedicated components for improved modularity and readability * refactor: replace ElevatedButton with TextButton for consistent button styling across dialogs * refactor: integrate MobX Observer for reactive state management in settings widgets * refactor: update theme and dialog components for improved styling and consistency * refactor: enhance dialog styling with rounded corners and border in theme configuration * refactor: improve dialog messages for unauthorized access handling * refactor: update bodyLarge text style in theme configuration to include font weight * refactor: standardize Divider usage and adjust theme styles for improved consistency * refactor: adjust Divider properties and theme styles for enhanced visual consistency * chore: remove GEMINI.md file as it is no longer needed for project documentation * refactor: enhance token validation and reconnect logic in AuthBase for improved error handling * format * refactor: integrate landscape cutout settings into VideoChat layout for improved responsiveness * refactor: implement app lifecycle handling in VideoChat and enhance stream info update logic in VideoStore * refactor: update landscape cutout conditionals in VideoChat layout for improved responsiveness * update AGENTS.md * add scrollbar to search * fix scrolling exception * update CLAUDE.md * 5 auth reconnect attemps then log out * increase reply max lines to 2 * simplify and improve reply formatting * add prime icon * better draggable divider * support draggable divider in fullscreen overlay chat * add text shadow in fullscreen chat overlay mode * format * add landscape checks * video store optimization attempts * Dispose WebViewController and remove JavaScript channels properly * Track and cleanup all MutationObservers to prevent accumulation * Throttle latency updates to once per 5 seconds (reduces CPU load) * Add timeout protection and null checks for robustness * Prevent duplicate event listeners on page reloads * double tap divider to reset * Revert "video store optimization attempts" This reverts commit b1df7b0de473543283211a489dca698d9d241857. * optimize video store attempt 2 * Revert "double tap divider to reset" This reverts commit aeb26a433500ec71f822794835e927018ee59e1e. * optimize latency listener to open the menu and check every 20 secconds * more optimizations * hard refresh * abbreviate latency * fix lint * improve hide default overlay * fix chat no longer reconnecting with chat delay * refine chat alerts * fix historical message missing badges and emotes on initial connection * parallelize * revert * add reconnect button inline action * refactor: replace Scrollbar with FrostyScrollbar across chat and settings screens for consistent styling * tweak chat details menu * add scrollbar to release notes, renames for consistency * fix duplicate message case * fix chat delay alerts in auto sync mode * add regex for numeric strings and enhance display name formatting logic * exterminate borders * refactor: simplify active chat modes display in chat details screen * feat: enhance chat input button with delay notification and disable state * fix: wrap chat in SafeArea to prevent UI overflow issues * refactor: remove divider line from video chat and update draggable divider visibility logic * persist overlay in pip mode * fix: update chat delay handling and notifications in chat bottom bar * fix: update chat overlay visibility logic to respect fullscreen settings * tap to show deleted message * fix: prevent accidental chat scrolling when accessing system UI in landscape mode * show latency in portrait * fix: enhance chat delay notifications with dynamic delay time * docs: update CLAUDE.md for improved environment variable instructions and architecture overview * fix: improve chat delay countdown management and message handling * add preliminary release notes * remove agents.md * update lockfile * add initial multi chat feature * add option to persist multi chat tabs * add remove confirmation dialog * improve add chat design * lazy-load tabs * create global assets store to dedupe global asset fetching * improve tab design/styles * update notes * use frosty dialog * update claude md * tweak * add ability to reorder tabs * resolve conflict * merge cleanup * format * update release notes * add chat delay sync completion tracking to prevent countdown re-appearance * add tests * fix * update release notes * bump
2026-01-01 22:28:17 -05:00
/// Unfocuses the text field.
@action
void unfocusInput() {
textFieldFocusNode.unfocus();
}
/// Requests focus for the text field.
@action
void safeRequestFocus() {
textFieldFocusNode.requestFocus();
}
}
class _DelayedCallback {
_DelayedCallback({required this.releaseAt, required this.callback});
final DateTime releaseAt;
final void Function() callback;
}