2021-12-13 02:19:06 -05:00
|
|
|
import 'dart:async';
|
2023-11-28 03:21:05 -05:00
|
|
|
import 'dart:convert';
|
2021-12-13 02:19:06 -05:00
|
|
|
|
2026-03-08 00:16:13 -08:00
|
|
|
import 'package:firebase_crashlytics/firebase_crashlytics.dart';
|
2021-10-23 02:28:20 -04:00
|
|
|
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';
|
2024-08-12 00:01:45 -07:00
|
|
|
import 'package:frosty/apis/twitch_api.dart';
|
2024-12-30 20:10:15 -05:00
|
|
|
import 'package:frosty/models/badges.dart';
|
2022-01-15 15:46:46 -05:00
|
|
|
import 'package:frosty/models/emotes.dart';
|
2023-11-28 03:21:05 -05:00
|
|
|
import 'package:frosty/models/events.dart';
|
2022-01-16 12:39:20 -05:00
|
|
|
import 'package:frosty/models/irc.dart';
|
2022-08-31 14:11:45 -04:00
|
|
|
import 'package:frosty/screens/channel/chat/details/chat_details_store.dart';
|
|
|
|
|
import 'package:frosty/screens/channel/chat/stores/chat_assets_store.dart';
|
|
|
|
|
import 'package:frosty/screens/settings/stores/auth_store.dart';
|
2022-01-04 02:58:02 -05:00
|
|
|
import 'package:frosty/screens/settings/stores/settings_store.dart';
|
2023-11-28 03:21:05 -05:00
|
|
|
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';
|
2021-09-03 02:14:17 -04:00
|
|
|
import 'package:web_socket_channel/web_socket_channel.dart';
|
|
|
|
|
|
2021-10-01 00:08:19 -04:00
|
|
|
part 'chat_store.g.dart';
|
|
|
|
|
|
2021-10-26 01:06:57 -04:00
|
|
|
/// The store and view-model for chat-related activities.
|
2022-05-12 04:58:03 -04:00
|
|
|
class ChatStore = ChatStoreBase with _$ChatStore;
|
2021-10-01 00:08:19 -04:00
|
|
|
|
2022-05-12 04:58:03 -04:00
|
|
|
abstract class ChatStoreBase with Store {
|
2022-07-28 15:30:23 -04:00
|
|
|
/// The total maximum amount of messages in chat.
|
2022-09-06 14:54:04 -04:00
|
|
|
static const _messageLimit = 5000;
|
2022-01-06 03:42:55 -05:00
|
|
|
|
2022-09-07 11:16:35 -04:00
|
|
|
/// The maximum ammount of messages to render when autoscroll is enabled.
|
|
|
|
|
static const _renderMessageLimit = 100;
|
|
|
|
|
|
2026-01-04 17:49:44 -05:00
|
|
|
/// IRC commands that should bypass chat delay.
|
|
|
|
|
/// These are confirmations/state updates rather than chat messages to sync.
|
|
|
|
|
static const _delayBypassCommands = {
|
|
|
|
|
'USERSTATE',
|
|
|
|
|
'GLOBALUSERSTATE',
|
|
|
|
|
'ROOMSTATE',
|
2026-01-06 16:59:16 -05:00
|
|
|
'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',
|
2026-01-04 17:49:44 -05:00
|
|
|
};
|
|
|
|
|
|
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].
|
2026-01-04 20:36:53 -05:00
|
|
|
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]);
|
2026-01-04 17:49:44 -05:00
|
|
|
}
|
|
|
|
|
|
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
|
|
|
Duration get _chatDelay => Duration(
|
|
|
|
|
milliseconds: (settings.effectiveChatDelay * 1000).round(),
|
|
|
|
|
);
|
2026-03-07 00:11:42 -08:00
|
|
|
|
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
|
|
|
bool get _hasActiveChatDelay => settings.showVideo && _chatDelay > Duration.zero;
|
2026-03-07 00:11:42 -08:00
|
|
|
|
2024-08-12 00:01:45 -07:00
|
|
|
final TwitchApi twitchApi;
|
|
|
|
|
|
2022-08-07 01:00:51 -04:00
|
|
|
/// The amount of messages to free (remove) when the [_messageLimit] is reached.
|
|
|
|
|
final _messagesToRemove = (_messageLimit * 0.2).toInt();
|
|
|
|
|
|
2021-12-27 21:13:46 -05:00
|
|
|
/// The provided auth store to determine login status, get the token, and use the headers for requests.
|
|
|
|
|
final AuthStore auth;
|
2021-12-22 18:25:56 -05:00
|
|
|
|
2021-12-27 21:13:46 -05:00
|
|
|
/// The provided setting store to account for any user-defined behaviors.
|
|
|
|
|
final SettingsStore settings;
|
2021-12-22 18:25:56 -05:00
|
|
|
|
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();
|
|
|
|
|
|
2021-12-27 21:13:46 -05:00
|
|
|
/// 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;
|
|
|
|
|
|
2024-08-11 17:31:32 -07:00
|
|
|
var _shouldDisconnect = false;
|
|
|
|
|
|
2021-12-27 21:13:46 -05:00
|
|
|
/// The Twitch IRC WebSocket channel.
|
2022-01-04 22:45:59 -05:00
|
|
|
WebSocketChannel? _channel;
|
|
|
|
|
|
2022-08-07 18:46:05 -04:00
|
|
|
/// The subscription that handles the WebSocket connection.
|
|
|
|
|
StreamSubscription? _channelListener;
|
|
|
|
|
|
2023-11-28 03:21:05 -05:00
|
|
|
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);
|
|
|
|
|
|
2022-01-04 22:45:59 -05:00
|
|
|
// 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
|
|
|
|
2026-01-06 18:22:21 -05:00
|
|
|
// Reference to the reconnect message for in-place updates.
|
|
|
|
|
IRCMessage? _reconnectMessage;
|
|
|
|
|
|
|
|
|
|
// Timestamp when reconnection started, for calculating elapsed time.
|
|
|
|
|
DateTime? _reconnectStartTime;
|
|
|
|
|
|
2021-10-26 01:06:57 -04:00
|
|
|
/// The scroll controller that controls auto-scroll and resume-scroll behavior.
|
2021-11-14 04:25:33 -05:00
|
|
|
final scrollController = ScrollController();
|
2021-10-16 19:11:35 -04:00
|
|
|
|
2021-10-26 01:06:57 -04:00
|
|
|
/// 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
|
|
|
|
2021-12-27 21:13:46 -05:00
|
|
|
/// The chat details store responsible for the chat modes and users in chat.
|
2022-01-14 14:56:54 -05:00
|
|
|
final ChatDetailsStore chatDetailsStore;
|
2021-10-17 17:56:16 -04:00
|
|
|
|
2021-12-27 21:13:46 -05:00
|
|
|
/// The assets store responsible for badges, emotes, and the emote menu.
|
2022-01-14 14:56:54 -05:00
|
|
|
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.
|
2021-11-23 00:47:21 -05:00
|
|
|
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;
|
|
|
|
|
|
2022-07-28 15:30:23 -04:00
|
|
|
/// 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.
|
2024-08-12 00:01:45 -07:00
|
|
|
Timer? _messageBufferTimer;
|
2022-07-28 15:30:23 -04:00
|
|
|
|
2022-07-31 19:46:40 -04:00
|
|
|
/// 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.
|
2023-10-22 18:38:32 -04:00
|
|
|
final messageBuffer = ObservableList<IRCMessage>();
|
2022-07-31 19:46:40 -04:00
|
|
|
|
2026-03-07 00:11:42 -08:00
|
|
|
/// 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>();
|
|
|
|
|
|
|
|
|
|
@action
|
|
|
|
|
void revealMessage(String id) {
|
|
|
|
|
revealedMessageIds.add(id);
|
|
|
|
|
}
|
|
|
|
|
|
2022-08-06 19:53:56 -04:00
|
|
|
/// Timer used for dismissing the notification.
|
|
|
|
|
Timer? _notificationTimer;
|
|
|
|
|
|
2026-01-06 16:59:16 -05:00
|
|
|
/// 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;
|
|
|
|
|
|
2023-01-18 05:34:54 -05:00
|
|
|
/// The current timer for the sleep timer if active.
|
|
|
|
|
Timer? sleepTimer;
|
|
|
|
|
|
|
|
|
|
/// The time remaining for the sleep timer.
|
|
|
|
|
@observable
|
|
|
|
|
var timeRemaining = const Duration();
|
|
|
|
|
|
2022-08-06 19:53:56 -04:00
|
|
|
/// A notification message to display above the chat.
|
|
|
|
|
@readonly
|
|
|
|
|
String? _notification;
|
|
|
|
|
|
2022-07-31 19:46:40 -04:00
|
|
|
/// The list of chat messages to render and display.
|
|
|
|
|
@readonly
|
|
|
|
|
var _messages = ObservableList<IRCMessage>();
|
|
|
|
|
|
2022-09-07 11:16:35 -04:00
|
|
|
/// 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 index error with sublist.
|
2023-04-29 11:34:28 -04:00
|
|
|
if (!_autoScroll || _messages.length < _renderMessageLimit) {
|
|
|
|
|
return _messages;
|
|
|
|
|
}
|
2022-09-07 11:16:35 -04:00
|
|
|
|
|
|
|
|
// When autoscroll is enabled, only show the first [_renderMessageLimit] messages.
|
|
|
|
|
// This will improve performance by only rendering a limited amount of messages
|
|
|
|
|
// instead of the entire history at all times.
|
|
|
|
|
return _messages.sublist(_messages.length - _renderMessageLimit);
|
|
|
|
|
}
|
|
|
|
|
|
2021-10-26 01:06:57 -04:00
|
|
|
/// If the chat should automatically scroll/jump to the latest message.
|
|
|
|
|
@readonly
|
|
|
|
|
var _autoScroll = true;
|
|
|
|
|
|
2023-06-02 20:12:28 -04:00
|
|
|
@readonly
|
|
|
|
|
var _inputText = '';
|
|
|
|
|
|
2022-07-02 02:46:20 -04:00
|
|
|
@readonly
|
|
|
|
|
var _showSendButton = false;
|
|
|
|
|
|
2022-04-01 16:30:35 -04:00
|
|
|
@readonly
|
2022-06-09 22:24:02 -04:00
|
|
|
var _showEmoteAutocomplete = false;
|
|
|
|
|
|
|
|
|
|
@readonly
|
|
|
|
|
var _showMentionAutocomplete = false;
|
2022-04-01 16:30:35 -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
|
|
|
/// Whether the chat is currently in shared chat mode (based on source-room-id tag presence).
|
|
|
|
|
@readonly
|
|
|
|
|
var _isInSharedChatMode = false;
|
|
|
|
|
|
2026-01-06 16:59:16 -05:00
|
|
|
/// Whether we're waiting for server acknowledgment of a sent message.
|
|
|
|
|
@readonly
|
|
|
|
|
var _isWaitingForAck = false;
|
|
|
|
|
|
2026-01-06 19:42:09 -05:00
|
|
|
/// 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;
|
|
|
|
|
|
2021-12-12 18:51:18 -05:00
|
|
|
/// The logged-in user's appearance in chat.
|
|
|
|
|
@readonly
|
|
|
|
|
var _userState = const USERSTATE();
|
|
|
|
|
|
2022-05-23 22:12:56 -04:00
|
|
|
@observable
|
|
|
|
|
var expandChat = false;
|
|
|
|
|
|
2023-11-24 20:36:59 +01:00
|
|
|
@observable
|
|
|
|
|
IRCMessage? replyingToMessage;
|
|
|
|
|
|
2026-01-04 20:36:53 -05:00
|
|
|
/// 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();
|
2026-01-04 20:36:53 -05:00
|
|
|
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);
|
2026-01-04 20:36:53 -05:00
|
|
|
|
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);
|
2026-01-04 20:36:53 -05:00
|
|
|
}
|
|
|
|
|
|
2022-05-12 04:58:03 -04:00
|
|
|
ChatStoreBase({
|
2024-08-12 00:01:45 -07:00
|
|
|
required this.twitchApi,
|
2021-11-23 04:15:13 -05:00
|
|
|
required this.auth,
|
2022-01-14 14:56:54 -05:00
|
|
|
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
|
|
|
}) {
|
2022-01-26 15:42:37 -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.
|
2022-07-28 21:44:28 -04:00
|
|
|
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)),
|
2022-07-28 21:44:28 -04:00
|
|
|
);
|
|
|
|
|
|
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,
|
|
|
|
|
),
|
|
|
|
|
);
|
|
|
|
|
|
2024-08-10 20:22:57 -07: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) {
|
2026-03-07 00:11:42 -08:00
|
|
|
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) {
|
2026-03-07 00:11:42 -08:00
|
|
|
_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;
|
|
|
|
|
}
|
|
|
|
|
}),
|
|
|
|
|
);
|
2024-08-03 15:00:31 -07: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
|
|
|
// Start chat delay countdown when chatDelay is set (for auto sync mode)
|
|
|
|
|
// Cancel countdown if delay becomes 0
|
2024-06-04 19:47:06 -07:00
|
|
|
reactions.add(
|
2026-03-07 00:11:42 -08:00
|
|
|
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) {
|
2026-03-07 00:11:42 -08:00
|
|
|
_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();
|
|
|
|
|
}
|
|
|
|
|
}),
|
2024-06-04 19:47:06 -07:00
|
|
|
);
|
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...'));
|
|
|
|
|
|
2024-08-12 00:01:45 -07:00
|
|
|
if (settings.showRecentMessages) {
|
|
|
|
|
getRecentMessage().then((_) => connectToChat());
|
|
|
|
|
} else {
|
|
|
|
|
connectToChat();
|
|
|
|
|
}
|
2021-12-13 02:19:06 -05:00
|
|
|
|
2021-10-26 01:06:57 -04:00
|
|
|
// Tell the scrollController to determine when auto-scroll should be enabled or disabled.
|
2021-11-14 04:25:33 -05:00
|
|
|
scrollController.addListener(() {
|
2022-07-26 23:23:53 -04:00
|
|
|
// 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
|
|
|
}
|
|
|
|
|
});
|
2022-01-23 14:01:16 -05:00
|
|
|
|
|
|
|
|
textFieldFocusNode.addListener(() {
|
2022-06-10 16:16:55 -04:00
|
|
|
if (textFieldFocusNode.hasFocus) {
|
|
|
|
|
// Hide the emote menu if it is currently shown.
|
|
|
|
|
if (assetsStore.showEmoteMenu) assetsStore.showEmoteMenu = false;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Un-expand the chat when unfocusing.
|
2022-05-23 22:12:56 -04:00
|
|
|
if (!textFieldFocusNode.hasFocus) expandChat = false;
|
2022-01-23 14:01:16 -05:00
|
|
|
});
|
2022-04-01 16:30:35 -04:00
|
|
|
|
|
|
|
|
// 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.
|
2022-07-02 02:46:20 -04:00
|
|
|
textController.addListener(() {
|
2023-06-02 20:12:28 -04:00
|
|
|
_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 &&
|
2023-06-02 20:12:28 -04:00
|
|
|
textFieldFocusNode.hasFocus &&
|
|
|
|
|
textController.text.split(' ').last.isNotEmpty;
|
|
|
|
|
|
2022-07-02 02:46:20 -04:00
|
|
|
_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 &&
|
2023-04-29 11:34:28 -04:00
|
|
|
textController.text.split(' ').last.startsWith('@');
|
2022-07-02 02:46:20 -04:00
|
|
|
});
|
2021-09-03 02:14:17 -04:00
|
|
|
}
|
|
|
|
|
|
2026-03-07 00:11:42 -08:00
|
|
|
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),
|
2026-03-07 00:11:42 -08:00
|
|
|
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();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2021-10-26 01:06:57 -04:00
|
|
|
/// 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.
|
2021-10-22 02:46:06 -04:00
|
|
|
@action
|
2021-10-26 01:06:57 -04:00
|
|
|
void _handleIRCData(String data) {
|
|
|
|
|
// The IRC data can contain more than one message separated by CRLF.
|
2021-11-02 03:51:34 -04:00
|
|
|
// To account for this, split by CRLF, then loop and process each message.
|
|
|
|
|
for (final message in data.trimRight().split('\r\n')) {
|
2022-07-28 15:30:23 -04:00
|
|
|
// 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('@')) {
|
2026-06-08 21:53:53 -07:00
|
|
|
// 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;
|
|
|
|
|
}
|
2021-10-16 19:11:35 -04:00
|
|
|
|
2023-04-29 22:49:50 -04:00
|
|
|
if (parsedIRCMessage.user != null) {
|
|
|
|
|
chatDetailsStore.chatUsers.add(parsedIRCMessage.user!);
|
|
|
|
|
}
|
|
|
|
|
|
2021-12-11 15:51:30 -05:00
|
|
|
// Filter messages from any blocked users if not a moderator or not the channel owner.
|
2021-12-11 00:45:44 -05:00
|
|
|
if (!_userState.mod &&
|
2021-12-22 18:25:56 -05:00
|
|
|
channelName != auth.user.details?.login &&
|
2023-04-29 11:34:28 -04:00
|
|
|
auth.user.blockedUsers
|
2023-10-22 18:38:32 -04:00
|
|
|
.where(
|
|
|
|
|
(blockedUser) =>
|
|
|
|
|
blockedUser.userLogin == parsedIRCMessage.user,
|
|
|
|
|
)
|
2023-04-29 11:34:28 -04:00
|
|
|
.isNotEmpty) {
|
2023-01-18 05:34:54 -05:00
|
|
|
continue;
|
|
|
|
|
}
|
2021-12-11 00:45:44 -05:00
|
|
|
|
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),
|
|
|
|
|
);
|
|
|
|
|
if (muted) continue;
|
2024-11-13 03:42:33 +01:00
|
|
|
}
|
|
|
|
|
|
2021-10-17 02:15:51 -04:00
|
|
|
switch (parsedIRCMessage.command) {
|
2021-10-24 03:53:08 -04:00
|
|
|
case Command.privateMessage:
|
2022-07-26 23:23:53 -04:00
|
|
|
case Command.notice:
|
|
|
|
|
case Command.userNotice:
|
2026-01-06 16:59:16 -05:00
|
|
|
// 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;
|
2026-01-06 16:59:16 -05:00
|
|
|
|
|
|
|
|
// Show notification with Twitch's rejection message
|
|
|
|
|
if (parsedIRCMessage.message != null) {
|
2026-03-07 17:46:24 -08:00
|
|
|
HapticFeedback.heavyImpact();
|
2026-01-06 16:59:16 -05:00
|
|
|
updateNotification(parsedIRCMessage.message!);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
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 shared chat mode based on source-room-id tag presence
|
|
|
|
|
final wasShared = _isInSharedChatMode;
|
|
|
|
|
_isInSharedChatMode = parsedIRCMessage.tags.containsKey(
|
|
|
|
|
'source-room-id',
|
|
|
|
|
);
|
|
|
|
|
// 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 <ChatBadge>[];
|
|
|
|
|
},
|
|
|
|
|
showTwitchEmotes: settings.showTwitchEmotes,
|
|
|
|
|
showTwitchBadges: settings.showTwitchBadges,
|
|
|
|
|
show7TVEmotes: settings.show7TVEmotes,
|
|
|
|
|
showBTTVEmotes: settings.showBTTVEmotes,
|
|
|
|
|
showFFZEmotes: settings.showFFZEmotes,
|
|
|
|
|
showFFZBadges: settings.showFFZBadges,
|
|
|
|
|
);
|
2026-06-08 22:42:37 -07:00
|
|
|
} 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
|
|
|
}
|
2023-10-22 18:38:32 -04:00
|
|
|
messageBuffer.add(parsedIRCMessage);
|
2021-10-20 05:12:15 -04:00
|
|
|
break;
|
2021-10-24 03:53:08 -04:00
|
|
|
case Command.clearChat:
|
2022-07-27 16:25:34 -04:00
|
|
|
IRCMessage.clearChat(
|
2022-07-31 19:46:40 -04:00
|
|
|
messages: _messages,
|
2023-10-22 18:38:32 -04:00
|
|
|
bufferedMessages: messageBuffer,
|
2022-07-27 16:25:34 -04:00
|
|
|
ircMessage: parsedIRCMessage,
|
|
|
|
|
);
|
2021-10-20 05:12:15 -04:00
|
|
|
break;
|
2021-10-24 03:53:08 -04:00
|
|
|
case Command.clearMessage:
|
2022-07-27 16:25:34 -04:00
|
|
|
IRCMessage.clearMessage(
|
2022-07-31 19:46:40 -04:00
|
|
|
messages: _messages,
|
2023-10-22 18:38:32 -04:00
|
|
|
bufferedMessages: messageBuffer,
|
2022-07-27 16:25:34 -04:00
|
|
|
ircMessage: parsedIRCMessage,
|
|
|
|
|
);
|
2021-10-22 02:46:06 -04:00
|
|
|
break;
|
2021-10-24 03:53:08 -04:00
|
|
|
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);
|
2021-11-23 00:47:21 -05:00
|
|
|
continue;
|
2021-10-24 03:53:08 -04:00
|
|
|
case Command.userState:
|
2021-12-17 20:43:03 -05:00
|
|
|
_userState = _userState.fromIRCMessage(parsedIRCMessage);
|
2022-07-28 22:35:29 -04:00
|
|
|
|
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']);
|
2021-11-23 00:47:21 -05:00
|
|
|
}
|
2021-10-22 02:46:06 -04:00
|
|
|
break;
|
2021-10-24 03:53:08 -04:00
|
|
|
case Command.globalUserState:
|
2021-12-22 18:25:56 -05:00
|
|
|
final setIds = parsedIRCMessage.tags['emote-sets']?.split(',');
|
2022-01-06 21:27:40 -05:00
|
|
|
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>[];
|
|
|
|
|
},
|
|
|
|
|
);
|
2022-01-06 21:27:40 -05:00
|
|
|
}
|
2021-11-23 00:47:21 -05:00
|
|
|
continue;
|
|
|
|
|
case Command.none:
|
2021-10-24 03:53:08 -04:00
|
|
|
debugPrint('Unknown command: ${parsedIRCMessage.command}');
|
2021-11-23 00:47:21 -05:00
|
|
|
continue;
|
2021-10-16 19:11:35 -04:00
|
|
|
}
|
2021-11-25 22:01:02 -05:00
|
|
|
|
2022-08-07 01:00:51 -04:00
|
|
|
if (!_autoScroll) {
|
|
|
|
|
// While autoscroll is disabled, occasionally move messages from the buffer to the messages to prevent a memory leak.
|
2023-10-22 18:38:32 -04:00
|
|
|
if (messageBuffer.length >= _messagesToRemove) {
|
|
|
|
|
_messages.addAll(messageBuffer);
|
|
|
|
|
messageBuffer.clear();
|
2022-08-07 01:00:51 -04:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// If the message limit is reached, remove the oldest messages.
|
2023-04-29 11:34:28 -04:00
|
|
|
if (_messages.length >= _messageLimit) {
|
|
|
|
|
_messages = _messages.sublist(_messagesToRemove).asObservable();
|
|
|
|
|
}
|
2021-10-22 02:46:06 -04:00
|
|
|
} else if (message == 'PING :tmi.twitch.tv') {
|
2022-01-04 22:45:59 -05:00
|
|
|
_channel?.sink.add('PONG :tmi.twitch.tv');
|
2021-10-17 17:56:16 -04:00
|
|
|
return;
|
2022-01-04 22:45:59 -05:00
|
|
|
} else if (message.contains('Welcome, GLHF!')) {
|
2023-10-22 18:38:32 -04:00
|
|
|
messageBuffer.add(
|
|
|
|
|
IRCMessage.createNotice(
|
2023-01-18 05:34:54 -05:00
|
|
|
message:
|
2024-08-12 00:01:45 -07:00
|
|
|
"Welcome to ${getReadableName(displayName, channelName)}'s chat!",
|
2023-10-22 18:38:32 -04:00
|
|
|
),
|
|
|
|
|
);
|
2022-01-04 22:45:59 -05:00
|
|
|
|
2024-08-12 00:01:45 -07: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();
|
2024-08-12 00:01:45 -07:00
|
|
|
// 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) {
|
2024-08-10 20:22:57 -07:00
|
|
|
final emoteSetId = assetsStore.sevenTvEmoteSetId;
|
2024-08-11 17:31:32 -07:00
|
|
|
if (emoteSetId != null && !_shouldDisconnect) {
|
2024-08-10 20:22:57 -07:00
|
|
|
listenToSevenTVEmoteSet(emoteSetId: emoteSetId);
|
2023-11-28 03:21:05 -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
|
|
|
}
|
2022-07-03 06:31:07 -04:00
|
|
|
|
2026-01-06 18:22:21 -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;
|
2026-01-06 18:22:21 -05:00
|
|
|
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;
|
|
|
|
|
|
2022-01-04 22:45:59 -05:00
|
|
|
// Reset exponential backoff if successfully connected.
|
|
|
|
|
_retries = 0;
|
|
|
|
|
_backoffTime = 0;
|
2026-01-06 19:42:09 -05:00
|
|
|
|
|
|
|
|
// Mark connection as established for UI
|
|
|
|
|
_isConnected = true;
|
|
|
|
|
_hasConnected = true;
|
2021-10-17 17:56:16 -04:00
|
|
|
}
|
|
|
|
|
}
|
2021-10-24 03:53:08 -04:00
|
|
|
}
|
|
|
|
|
|
2022-07-03 06:31:07 -04:00
|
|
|
// 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>[];
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
List<ChatBadge> onBadgeError(dynamic error) {
|
|
|
|
|
debugPrint(error.toString());
|
|
|
|
|
return <ChatBadge>[];
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
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(
|
2022-07-03 06:31:07 -04:00
|
|
|
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,
|
2024-08-10 20:22:57 -07:00
|
|
|
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,
|
2022-07-03 06:31:07 -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
|
|
|
await Future.wait([baseAssets, sharedAssets]);
|
|
|
|
|
} else {
|
|
|
|
|
await baseAssets;
|
|
|
|
|
}
|
|
|
|
|
}
|
2022-07-03 06:31:07 -04:00
|
|
|
|
2021-10-26 01:06:57 -04:00
|
|
|
/// Re-enables [_autoScroll] and jumps to the latest message.
|
|
|
|
|
@action
|
|
|
|
|
void resumeScroll() {
|
|
|
|
|
_autoScroll = true;
|
|
|
|
|
|
|
|
|
|
// Jump to the latest message (bottom of the list/chat).
|
2022-07-26 23:23:53 -04:00
|
|
|
scrollController.jumpTo(0);
|
2022-07-27 18:07:17 -04:00
|
|
|
|
|
|
|
|
// Add a post frame callback in the event a messages is added at the same time.
|
|
|
|
|
WidgetsBinding.instance.addPostFrameCallback((_) {
|
|
|
|
|
scrollController.jumpTo(0);
|
|
|
|
|
});
|
2021-10-26 01:06:57 -04:00
|
|
|
}
|
|
|
|
|
|
2023-11-28 03:21:05 -05:00
|
|
|
@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);
|
2026-03-07 00:11:42 -08:00
|
|
|
_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
|
|
|
);
|
|
|
|
|
|
2024-08-12 00:01:45 -07:00
|
|
|
void listener(dynamic data) {
|
|
|
|
|
// debugPrint(data);
|
|
|
|
|
final decoded = jsonDecode(data);
|
2023-11-28 03:21:05 -05:00
|
|
|
|
2024-08-12 00:01:45 -07:00
|
|
|
final event = SevenTVEvent.fromJson(decoded);
|
2023-11-28 03:21:05 -05:00
|
|
|
|
2024-08-12 00:01:45 -07:00
|
|
|
final body = event.d.body;
|
|
|
|
|
if (event.d.type != 'emote_set.update' || body == null) return;
|
2023-11-28 03:21:05 -05:00
|
|
|
|
2024-08-12 00:01:45 -07:00
|
|
|
if (body.pushed != null) {
|
|
|
|
|
final pushedEmote = body.pushed?.first.value;
|
2023-11-28 03:21:05 -05:00
|
|
|
|
2024-08-12 00:01:45 -07:00
|
|
|
if (pushedEmote == null) return;
|
2023-11-28 03:21:05 -05:00
|
|
|
|
2024-08-12 00:01:45 -07:00
|
|
|
final emote = Emote.from7TV(pushedEmote, EmoteType.sevenTVChannel);
|
2023-11-28 03:21:05 -05:00
|
|
|
|
2026-02-08 20:34:49 -08:00
|
|
|
assetsStore.addChannelEmote(emote);
|
2023-11-28 03:21:05 -05:00
|
|
|
|
2024-08-12 00:01:45 -07:00
|
|
|
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;
|
2023-11-28 03:21:05 -05:00
|
|
|
|
2024-08-12 00:01:45 -07:00
|
|
|
if (pulledEmote == null) return;
|
2023-11-28 03:21:05 -05:00
|
|
|
|
2026-02-08 20:34:49 -08:00
|
|
|
assetsStore.removeChannelEmote(pulledEmote.name);
|
2023-11-28 03:21:05 -05:00
|
|
|
|
2024-08-12 00:01:45 -07:00
|
|
|
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(
|
2024-08-12 00:01:45 -07:00
|
|
|
(data) {
|
2026-03-07 00:11:42 -08:00
|
|
|
if (!_hasActiveChatDelay) {
|
2024-08-12 00:01:45 -07:00
|
|
|
listener(data);
|
|
|
|
|
} else {
|
2026-03-07 00:11:42 -08:00
|
|
|
_enqueueDelayedCallback(
|
|
|
|
|
_pendingSevenTVCallbacks,
|
|
|
|
|
() => listener(data),
|
|
|
|
|
);
|
2024-08-12 00:01:45 -07:00
|
|
|
}
|
|
|
|
|
},
|
2026-03-08 00:16:13 -08:00
|
|
|
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: () {
|
2026-03-07 00:11:42 -08:00
|
|
|
_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');
|
|
|
|
|
},
|
2023-11-28 03:21:05 -05:00
|
|
|
);
|
|
|
|
|
|
|
|
|
|
_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 {
|
2026-03-08 00:16:13 -08:00
|
|
|
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
|
2026-03-07 20:46:40 -08:00
|
|
|
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();
|
2026-03-07 00:11:42 -08:00
|
|
|
_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
|
2026-03-07 00:11:42 -08:00
|
|
|
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();
|
|
|
|
|
}
|
|
|
|
|
|
2022-01-04 22:45:59 -05:00
|
|
|
// Listen for new messages and forward them to the handler.
|
2022-08-07 18:46:05 -04:00
|
|
|
_channelListener = _channel?.stream.listen(
|
2024-08-12 00:01:45 -07:00
|
|
|
(data) {
|
2026-01-04 17:49:44 -05:00
|
|
|
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) {
|
2026-01-04 17:49:44 -05:00
|
|
|
_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),
|
|
|
|
|
);
|
|
|
|
|
}
|
2024-08-12 00:01:45 -07:00
|
|
|
}
|
|
|
|
|
},
|
2026-03-08 00:16:13 -08:00
|
|
|
onError: (error) {
|
|
|
|
|
debugPrint('Chat error: ${error.toString()}');
|
|
|
|
|
FirebaseCrashlytics.instance.recordError(
|
|
|
|
|
error,
|
|
|
|
|
StackTrace.current,
|
|
|
|
|
reason: 'IRC WebSocket error, channel=$channelName',
|
|
|
|
|
);
|
|
|
|
|
},
|
2022-01-04 22:45:59 -05:00
|
|
|
onDone: () async {
|
2026-03-07 00:11:42 -08:00
|
|
|
_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
|
|
|
|
2026-01-06 19:42:09 -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;
|
|
|
|
|
|
2024-08-11 17:31:32 -07:00
|
|
|
if (_shouldDisconnect) {
|
|
|
|
|
_sevenTVChannel?.sink.close(1000);
|
|
|
|
|
return;
|
|
|
|
|
}
|
2022-01-04 22:45:59 -05:00
|
|
|
|
2023-11-28 04:13:53 -05:00
|
|
|
if (_retries >= _maxRetries) {
|
2026-03-08 00:16:13 -08:00
|
|
|
FirebaseCrashlytics.instance.log(
|
|
|
|
|
'WebSocket reconnection failed after $_maxRetries attempts, channel=$channelName',
|
|
|
|
|
);
|
2026-01-06 18:22:21 -05:00
|
|
|
// 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;
|
|
|
|
|
}
|
|
|
|
|
|
2026-01-06 18:22:21 -05:00
|
|
|
// Increment the retry count.
|
|
|
|
|
_retries++;
|
2026-03-08 00:16:13 -08:00
|
|
|
FirebaseCrashlytics.instance.log(
|
|
|
|
|
'WebSocket reconnecting: attempt $_retries/$_maxRetries, channel=$channelName',
|
|
|
|
|
);
|
2026-01-06 18:22:21 -05:00
|
|
|
|
|
|
|
|
// 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
|
2026-01-06 18:22:21 -05:00
|
|
|
_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)
|
2022-01-06 21:27:40 -05:00
|
|
|
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;
|
2026-01-06 18:22:21 -05:00
|
|
|
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
|
|
|
);
|
2022-01-06 21:27:40 -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));
|
|
|
|
|
|
2026-01-06 18:22:21 -05:00
|
|
|
// 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
|
|
|
|
2026-01-06 18:22:21 -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
|
|
|
|
|
}
|
2026-01-06 18:22:21 -05:00
|
|
|
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
|
|
|
});
|
2022-01-04 22:45:59 -05:00
|
|
|
|
2026-01-06 18:22:21 -05:00
|
|
|
// Don't proceed with reconnection if disposed
|
|
|
|
|
if (_shouldDisconnect) return;
|
|
|
|
|
}
|
2022-01-04 22:45:59 -05:00
|
|
|
|
2026-01-06 18:22:21 -05:00
|
|
|
// Attempting phase - update same message, no add/remove
|
|
|
|
|
updateReconnectMessage(
|
|
|
|
|
'Reconnecting... (attempt $_retries of $_maxRetries)',
|
2023-10-22 18:38:32 -04:00
|
|
|
);
|
2026-01-06 18:22:21 -05:00
|
|
|
|
2022-08-07 18:46:05 -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);
|
2022-01-04 22:45:59 -05:00
|
|
|
},
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
// 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);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2022-07-28 15:30:23 -04:00
|
|
|
@action
|
|
|
|
|
void addMessages() {
|
2026-03-07 00:11:42 -08:00
|
|
|
_flushDueDelayedCallbacks();
|
|
|
|
|
|
2023-10-22 18:38:32 -04:00
|
|
|
if (!_autoScroll || messageBuffer.isEmpty) return;
|
2022-07-28 15:30:23 -04:00
|
|
|
|
2023-10-22 18:38:32 -04:00
|
|
|
_messages.addAll(messageBuffer);
|
|
|
|
|
messageBuffer.clear();
|
2022-07-28 15:30:23 -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
|
|
|
/// 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();
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
|
2021-12-15 23:54:06 -05:00
|
|
|
/// Sends the given string message by the logged-in user and adds it to [_messages].
|
2022-01-23 14:01:16 -05:00
|
|
|
@action
|
2021-11-25 22:01:02 -05:00
|
|
|
void sendMessage(String message) {
|
|
|
|
|
// Do not send if the message is blank/empty.
|
2022-01-04 22:45:59 -05:00
|
|
|
if (message.isEmpty) return;
|
|
|
|
|
|
2026-01-06 16:59:16 -05:00
|
|
|
// Prevent double-sending while waiting for server acknowledgment
|
|
|
|
|
if (_isWaitingForAck) {
|
2026-03-07 17:46:24 -08:00
|
|
|
HapticFeedback.mediumImpact();
|
2026-01-06 16:59:16 -05:00
|
|
|
updateNotification('Please wait, sending previous message...');
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
2022-01-04 22:45:59 -05:00
|
|
|
if (_channel == null || _channel?.closeCode != null) {
|
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...',
|
2023-10-22 18:38:32 -04:00
|
|
|
),
|
|
|
|
|
);
|
2026-01-04 17:49:44 -05:00
|
|
|
return;
|
|
|
|
|
}
|
2022-04-08 22:50:40 -04:00
|
|
|
|
2026-01-06 16:59:16 -05:00
|
|
|
// Set waiting state for UI feedback
|
|
|
|
|
_isWaitingForAck = true;
|
|
|
|
|
|
2026-01-04 17:49:44 -05:00
|
|
|
// Send the message to the IRC chat room.
|
|
|
|
|
_channel?.sink.add(
|
|
|
|
|
'${replyingToMessage != null ? '@reply-parent-msg-id=${replyingToMessage!.tags['id']} ' : ''}PRIVMSG #$channelName :$message',
|
|
|
|
|
);
|
2021-11-25 22:01:02 -05:00
|
|
|
|
2026-01-06 16:59:16 -05:00
|
|
|
// 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.
|
2026-01-06 16:59:16 -05:00
|
|
|
_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));
|
2026-01-06 16:59:16 -05:00
|
|
|
});
|
2026-01-04 17:49:44 -05:00
|
|
|
|
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);
|
|
|
|
|
}
|
2021-11-25 22:01:02 -05:00
|
|
|
|
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 ??
|
|
|
|
|
toSend!.tags['id'] ??
|
|
|
|
|
'local-${DateTime.now().millisecondsSinceEpoch}';
|
|
|
|
|
messageBuffer.add(toSend!);
|
|
|
|
|
toSend = null;
|
|
|
|
|
}
|
|
|
|
|
_pendingSentMessageText = null;
|
|
|
|
|
_sendingTimeoutTimer?.cancel();
|
|
|
|
|
_isWaitingForAck = false;
|
|
|
|
|
textController.clear();
|
|
|
|
|
replyingToMessage = null;
|
|
|
|
|
}
|
2023-11-24 20:36:59 +01:00
|
|
|
|
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;
|
2026-01-04 17:49:44 -05:00
|
|
|
|
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()}';
|
|
|
|
|
}
|
2026-03-07 17:00:03 -08:00
|
|
|
|
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;
|
2021-11-25 22:01:02 -05:00
|
|
|
}
|
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;
|
2021-11-25 22:01:02 -05:00
|
|
|
}
|
|
|
|
|
|
2022-04-01 16:30:35 -04:00
|
|
|
/// Adds the given [emote] to the chat textfield.
|
|
|
|
|
@action
|
|
|
|
|
void addEmote(Emote emote, {bool autocompleteMode = false}) {
|
|
|
|
|
if (textController.text.isEmpty || textController.text.endsWith(' ')) {
|
2022-05-12 04:58:03 -04:00
|
|
|
textController.text += '${emote.name} ';
|
2023-04-29 11:34:28 -04:00
|
|
|
} else if (autocompleteMode &&
|
|
|
|
|
_showEmoteAutocomplete &&
|
|
|
|
|
textController.text.endsWith('')) {
|
2022-04-01 16:30:35 -04:00
|
|
|
final split = textController.text.split(' ')
|
|
|
|
|
..removeLast()
|
2022-05-12 04:58:03 -04:00
|
|
|
..add('${emote.name} ');
|
2022-04-01 16:30:35 -04:00
|
|
|
|
|
|
|
|
textController.text = split.join(' ');
|
|
|
|
|
} else {
|
2022-05-12 04:58:03 -04:00
|
|
|
textController.text += ' ${emote.name} ';
|
2022-04-01 16:30:35 -04:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
assetsStore.recentEmotes
|
2023-10-22 18:38:32 -04:00
|
|
|
..removeWhere(
|
|
|
|
|
(recentEmote) =>
|
|
|
|
|
recentEmote.name == emote.name && recentEmote.type == emote.type,
|
|
|
|
|
)
|
2022-04-01 16:30:35 -04:00
|
|
|
..insert(0, emote);
|
|
|
|
|
|
2023-04-29 11:34:28 -04:00
|
|
|
textController.selection = TextSelection.fromPosition(
|
2023-10-22 18:38:32 -04:00
|
|
|
TextPosition(offset: textController.text.length),
|
|
|
|
|
);
|
2022-04-01 16:30:35 -04:00
|
|
|
}
|
|
|
|
|
|
2022-08-06 19:53:56 -04:00
|
|
|
/// 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.
|
2022-08-06 19:53:56 -04:00
|
|
|
_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;
|
2022-08-06 19:53:56 -04:00
|
|
|
}
|
|
|
|
|
|
2023-10-22 18:38:32 -04:00
|
|
|
/// Updates the sleep timer with the given [duration].
|
2023-01-18 05:34:54 -05:00
|
|
|
/// Calls [onTimerFinished] when the sleep timer completes.
|
|
|
|
|
@action
|
2023-10-22 18:38:32 -04:00
|
|
|
void updateSleepTimer({
|
|
|
|
|
required Duration duration,
|
|
|
|
|
required VoidCallback onTimerFinished,
|
|
|
|
|
}) {
|
2023-01-18 05:34:54 -05:00
|
|
|
// If there is an ongoing timer, cancel it since it'll be replaced.
|
|
|
|
|
if (sleepTimer != null) cancelSleepTimer();
|
|
|
|
|
|
|
|
|
|
// Update the new time remaining
|
2023-10-22 18:38:32 -04:00
|
|
|
timeRemaining = duration;
|
2023-01-18 05:34:54 -05:00
|
|
|
|
|
|
|
|
// 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;
|
|
|
|
|
}
|
2023-01-18 05:34:54 -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
|
|
|
// Decrement the time remaining.
|
|
|
|
|
timeRemaining = Duration(seconds: timeRemaining.inSeconds - 1);
|
|
|
|
|
});
|
2023-01-18 05:34:54 -05:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/// Cancels the sleep timer and resets the time remaining.
|
|
|
|
|
@action
|
|
|
|
|
void cancelSleepTimer() {
|
|
|
|
|
sleepTimer?.cancel();
|
|
|
|
|
timeRemaining = const Duration();
|
|
|
|
|
}
|
|
|
|
|
|
2024-08-12 00:01:45 -07:00
|
|
|
@action
|
|
|
|
|
Future<void> getRecentMessage() async {
|
2026-03-07 20:46:40 -08:00
|
|
|
try {
|
|
|
|
|
final recentMessages = await twitchApi.getRecentMessages(
|
|
|
|
|
userLogin: channelName,
|
|
|
|
|
);
|
2024-08-12 00:01:45 -07:00
|
|
|
|
2026-03-07 20:46:40 -08:00
|
|
|
for (final message in recentMessages) {
|
|
|
|
|
_handleIRCData(message);
|
|
|
|
|
}
|
|
|
|
|
} catch (e) {
|
|
|
|
|
debugPrint('Failed to fetch recent messages: $e');
|
2024-08-12 00:01:45 -07:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2021-10-26 01:06:57 -04:00
|
|
|
/// Closes and disposes all the channels and controllers used by the store.
|
2021-10-17 17:56:16 -04:00
|
|
|
void dispose() {
|
2024-08-11 17:31:32 -07:00
|
|
|
_shouldDisconnect = true;
|
|
|
|
|
|
2026-03-07 00:11:42 -08:00
|
|
|
_clearPendingDelayedCallbacks();
|
|
|
|
|
|
2024-08-12 00:01:45 -07:00
|
|
|
_messageBufferTimer?.cancel();
|
2022-08-06 19:53:56 -04:00
|
|
|
_notificationTimer?.cancel();
|
2026-01-06 16:59:16 -05:00
|
|
|
_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();
|
2023-01-18 05:34:54 -05:00
|
|
|
sleepTimer?.cancel();
|
2022-07-28 15:30:23 -04:00
|
|
|
|
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);
|
2022-01-04 22:45:59 -05:00
|
|
|
|
2022-01-24 16:03:17 -05:00
|
|
|
for (final reactionDisposer in reactions) {
|
|
|
|
|
reactionDisposer();
|
|
|
|
|
}
|
|
|
|
|
|
2022-01-26 15:42:37 -05:00
|
|
|
textFieldFocusNode.dispose();
|
2021-11-14 04:25:33 -05:00
|
|
|
textController.dispose();
|
|
|
|
|
scrollController.dispose();
|
2022-07-01 17:15:07 -04:00
|
|
|
|
2022-01-19 23:01:31 -05:00
|
|
|
assetsStore.dispose();
|
2022-07-01 17:15:07 -04:00
|
|
|
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();
|
2021-10-17 17:56:16 -04:00
|
|
|
}
|
2021-09-03 02:14:17 -04:00
|
|
|
}
|
2026-03-07 00:11:42 -08:00
|
|
|
|
|
|
|
|
class _DelayedCallback {
|
|
|
|
|
_DelayedCallback({required this.releaseAt, required this.callback});
|
|
|
|
|
|
|
|
|
|
final DateTime releaseAt;
|
|
|
|
|
final void Function() callback;
|
|
|
|
|
}
|