Beta#652
Merged
Merged
Conversation
translation fix?
tiktok standard tweaks
- Implement logic in `dock.html` to detect TikTok `fans_badge` and `grade_badge` within `chatbadges`. - Assign "SUPER FAN" or "TEAM LEVEL X" membership status to TikTok users based on these badges when the `tiktokfans` URL parameter is active. - Introduce a new checkbox setting in `popup.html` to enable treating TikTok fan/team badges as members in the dock overlay. - Add associated translation keys for the new UI option. [auto-enhanced]
Delete the `package.json` file from the `electron_app_reference` directory. This action signals the deprecation or removal of this Electron-based component, streamlining the project structure. This cleanup is part of the ongoing architectural refinement on the `beta` branch, particularly in light of recent "major websocket changes" (a8cd0d0). It focuses the project on its primary Python, Gstreamer, and WebRTC (VDO.Ninja) streaming solution, consolidating efforts away from auxiliary Electron components. [auto-enhanced]
This commit delivers significant UI enhancements and underlying messaging infrastructure improvements. - Add `sampleoverlay_reverse.html`, a new chat overlay featuring a reverse-scroll mechanism. This overlay supports message reception via WebRTC data channels and WebSocket connections, handling dynamic message display, styling, and message trimming. - Integrate a new live chat feed into the `sources/websocket/kick.html` control panel. This includes comprehensive CSS for styling chat lines, user avatars, names, badges, and messages, providing real-time chat visibility. - Update `sources/websocket/kick.js` with new constants (`CHAT_FEED_LIMIT`, `CHAT_SCROLL_THRESHOLD_PX`) and state management to power the new Kick live chat. - Refactor `service_worker.js` by inlining message forwarding logic and removing legacy direct message handling. This streamlines the `toBackground` message flow and standardizes message payloads, improving robustness for inter-component communication, especially relevant for new websocket-driven features like these overlays. This work continues the "major websocket changes" initiative on the `beta` branch, enhancing both user-facing features and the underlying messaging backbone. [auto-enhanced]
Add `docs/css/settings.css` to define a new design system for user settings and configuration interfaces. This stylesheet provides unified styling for: - Layout and structural elements (`settings-intro`, `settings-controls`, `settings-grid`, `settings-empty`). - Interactive form controls (`setting-search`, `group-select`, `refresh-button`). - Informational displays, including cards, titles, descriptions, metadata, and status badges. - Consistent visual presentation with support for dark mode. Minor updates were made to `docs/features.html` and `docs/guides.html` to normalize file endings. [auto-enhanced]
Complete the removal of the `electron_app_reference` component. This commit deletes `index.html`, `libs.js`, `main.js`, `preload.js`, and other related files, continuing the work from the previous commit that removed `package.json`. Additionally, this commit enhances the TikTok chat badge processing in `dock.html`: - TikTok fan badges (`fans_badge`) are now correctly identified and assign "SUPER FAN" membership. - TikTok grade badges (`grade_badge`) are identified, and "TEAM LEVEL X" membership is assigned based on the detected level. - This logic has been moved to ensure TikTok memberships are established before general supporter filtering is applied. [auto-enhanced]
This commit introduces several improvements across chat functionality, UI styling, and general maintenance.
- **Chat Enhancements:**
- **YouTube (`sources/youtube.js`):** Improve `focusChat` functionality by targeting contenteditable input fields. Now automatically clears existing text content and dispatches an input event when focusing, providing a cleaner user experience.
- **Twitch (`sources/twitch.js`):** Refactor the chat watcher (`checkReady` into `startChatWatcher`) to enhance robustness. Implements a retry mechanism to handle cases where chat elements may not be immediately available or become disconnected.
- **UI/Styling:**
- **Settings UI (`docs/css/settings.css`):** Apply a darker background to setting cards specifically in dark mode, ensuring visual consistency and adhering to recent styling updates.
- **Maintenance:**
- **Version Bump (`manifest.json`):** Increment the application version from `3.35.0` to `3.36.0`.
[auto-enhanced]
* Delete a large block of commented-out or unused HTML related to Twitch chat messages and user notices from `sources/twitch.js`. * This cleanup streamlines the Twitch module by removing dead code that defined various UI components like chat lines, user notices, channel points, timestamps, and badges. * Continues the refinement of Twitch chat interactions and UI consistency on the `beta` branch. [auto-enhanced]
- Introduce `findTikTokChatComposer` to reliably locate the TikTok chat input field using an array of robust CSS selectors, addressing potential UI variations. - Implement `clearTikTokChatComposer` to programmatically clear the input field's `textContent` and `innerHTML`, and dispatch `InputEvent` and `ChangeEvent`s to ensure the UI state updates correctly. - Integrate these functions into the `chrome.runtime.onMessage` listener within `sources/tiktok.js`, enabling automatic clearing of the TikTok chat composer when a "clear" action is requested. - Ensure the `pokeMe` interval is restarted after successfully interacting with and clearing the chat composer, maintaining continuous background operations. - This change provides a more robust and centralized solution for clearing the TikTok chat input compared to previous ad-hoc methods. [auto-enhanced]
- Update `manifest.json` permissions and match patterns to include all
Shareplay.tv subdomains and paths, ensuring the extension loads
consistently across the platform (e.g., `https://*.shareplay.tv/*`).
- Refactor `sources/shareplay.js` to align with recent Shareplay.tv HTML
structure updates for reliable chat message extraction.
- Adjusted DOM selectors for message name, content, and user avatar
(e.g., `[type="message"] p`, `img[src][data-nuxt-img]`).
- Replaced specific class-based selectors with more robust
attribute-based ones (e.g., `[streamer-info]`, `[createdat]`).
- Expanded `MutationObserver` to watch for `subtree: true` to
capture newly added chat messages more effectively regardless of
their exact DOM depth.
[auto-enhanced]
Establishes a comprehensive, canonical reference for event payloads across supported streaming platforms. This provides a single source of truth for developers, facilitating consistent event handling, integration, and UI alignment. - Add `docs/event-reference.html` page to document event structures and field definitions (e.g., `data.event`, `data.membership`, `data.subtitle`, `data.meta`). - Include platform-specific payload details for YouTube, Twitch, TikTok, Kick, Facebook, and Rumble. - Implement dedicated styling for the event reference page via `docs/css/events.css`. - Update `sources/*` modules (e.g., `sources/youtube.js`, `sources/kick.js`, `sources/tiktok.js`, `sources/twitch.js`, `sources/rumble.js`, `sources/facebook.js`, `sources/websocket/index.js`, `sources/websocket/tts.js`) to align emitted event data with the new canonical specification. - Add necessary localization strings to `_locales/en/messages.json`. - Make minor adjustments to `docs/guides.html` and `js/main.js` for integration and navigation. This change is crucial for standardizing the event bus and supporting future extensions and integrations, continuing the work on enhancing chat interactions and UI consistency from previous commits on the `beta` branch. [auto-enhanced]
…iability This commit refines the Microsoft Teams integration for broader compatibility and increased robustness. * Consolidate `teams.js` content script entries in `manifest.json` and expand `matches` to cover `https://teams.live.com/*`, `https://teams.cloud.microsoft/*`, and `https://teams.microsoft.com/*` for comprehensive domain support. * Refactor `sources/teams.js` to improve iframe detection and script injection reliability. * Implement `try-catch` blocks for cross-origin iframe access, preventing errors and ensuring script execution in valid contexts. * Add logic to mark processed viewports, preventing redundant listener initialization. * Adjust `setTimeout` duration for `chat-pane-list` processing to enhance stability (from 3000ms to 4000ms). * Update the logo image reference in `docs/event-reference.html` from an inline SVG to a local PNG asset (`../media/logo.png`) for consistency. [auto-enhanced]
This commit fully removes the client-side logic responsible for detecting, parsing, and displaying reply messages within YouTube live chat in `sources/youtube.js`. Specifically, it removes: - `stripHtmlContent`, `repliesAreExcluded`, and `extractReplyDetails` helper functions. - The conditional message formatting that prepended reply labels to chat messages. - The population of `data.initial`, `data.reply`, and `data.meta.reply` for detected replies in the processed chat data. This change simplifies the YouTube source module by removing a feature that was likely experimental or causing undesired behavior within the `beta` environment. [auto-enhanced]
- Prevent duplicate chat messages from being processed by tracking message `dataset.index` values using a `Set`. - Update DOM selectors in `sources/webinargeek.js` to adapt to recent WebinarGeek UI changes, specifically targeting the new `#sect-chats:not([hidden]) [aria-label='Message list']` container. - Enhance initial processing of existing chat messages when the element is first detected to ensure all present messages are added to the history. This addresses issues with chat message ingestion stability and helps maintain parity with external platform updates, consistent with other integration fixes on the `beta` branch. [auto-enhanced]
Add a "Quick Feature Availability" table to `docs/event-reference.html` providing a concise overview of supported alert types across various platform capture methods. This update includes: - A new table detailing event support (subs, follows, donations, counts) for YouTube, Twitch (DOM/EventSub), TikTok, Kick (DOM/Websocket), Facebook, and Rumble. - Refinements to platform-specific event notes for YouTube and Kick DOM capture, clarifying viewer count polling and event limitations. - An added link in `popup.html` to guide users to the updated event reference. - Improved documentation footer layout and navigation links for better discoverability of project resources. [auto-enhanced]
Introduces a robust mechanism to prevent browser-imposed background throttling for the YouTube chat module in `sources/websocket/youtube.html`.
- Adds `isElectronEnvironment` to conditionally apply background management, preventing conflicts in dedicated Electron applications.
- Implements `enableBackgroundKeepAlive`, which:
- Establishes a self-connected WebRTC DataChannel to send continuous `KEEPALIVE` messages, signaling active network usage and preventing network activity pauses.
- Actively overrides `document.hidden`, `document.visibilityState`, and suppresses `visibilitychange`/`blur` events to trick the browser into perceiving the page as continuously visible.
- Modifies the `fetchChatMessages` polling logic to ensure that the next poll is always scheduled, even when the page is in the background, rather than canceling it.
- These changes enhance the reliability and responsiveness of YouTube chat streaming, ensuring continuous message reception when the page is in a background tab or the browser loses focus.
[auto-enhanced]
Abstracts YouTube live chat connection management into a new reusable service and centralizes related utilities. This significantly simplifies plugin logic and enhances maintainability. - Introduces `providers/youtube/liveChat.js` to encapsulate both polling and streaming logic for YouTube live chat. - Refactors `YoutubeStreamingPlugin` to utilize the new `liveChat` service, removing its complex internal stream buffer and reconnection handling. - Adds `providers/youtube/contextResolver.js` for robust API-based resolution of live chat IDs and stream details from video or channel identifiers. - Moves chat message transformation logic from `YoutubePlugin.transformAndPublish` to `providers/youtube/messageNormalizer.js` for a unified processing pipeline. - Centralizes `safeHtml` and `htmlToText` utility functions into `shared/utils/html.js`, importing them where needed (e.g., `lite/utils/helpers.js`). This refactoring aims to improve code organization, reduce complexity within the plugin layer, and provide a more robust foundation for YouTube live chat features. [auto-enhanced]
Corrects path transformations within `sources/rumble.js` to improve navigation and resolution of live stream pages, particularly when encountering 404 errors. - Transforms `/user/` paths to `/` for the channel root on Rumble. - Transforms `/c/` paths to `/user/` for consistent channel navigation. - These corrections are applied when a 404 (indicated by the astronaut image) is detected on a `/live` URL, aiming to guide users to the correct active stream page. [auto-enhanced]
Refines the chat input focusing mechanism within `sources/velora.js`. - Replaces `document.querySelector` with `document.querySelectorAll` to gather all potential chat input fields. - Focuses on the last identified chat input field, addressing potential issues in layouts with multiple inputs or when the primary input is not the first on the page. - Adds a null-check to prevent errors if no chat input element is found, improving resilience. - Continues the refinement of Velora.tv integration for better user experience. [auto-enhanced]
…lists
- Update the shared profanity list (`shared/data/badwords.json`) by merging the legacy vocabulary with the MIT-licensed MauriceButler corpus.
- Introduce distinct blocking functionality for profanity-containing messages (`settings.blacklistblockmessages`), preventing them from being relayed. Messages are now fully dropped if this setting is enabled, differentiating it from simple redaction.
- Increase the maximum capacity for profanity word lists and total variations in `background.js` to support larger lexicons.
- Add comprehensive documentation to `README.md`, detailing:
- The profanity filtering and blocking mechanism.
- Toggles for redaction (`blacklist`), message blocking (`blacklistblockmessages`), and username scrubbing (`blacklistname`).
- The option to upload custom `badwords.txt` lists.
- Testing instructions for the profanity filter.
- Ensure profanity toggles are consistently exposed through `shared/config/settingsMetadata.js` for remote configuration.
[auto-enhanced]
Deletes the 'spotify-setup.js' file as it is no longer required. Its functionality has likely been integrated or superseded by other parts of the Spotify module, contributing to a cleaner and more consolidated codebase. This change aligns with ongoing refinement and stabilization efforts for the Spotify feature on the 'beta' branch. [auto-enhanced]
This commit introduces a comprehensive loyalty points system with administrative controls and real-time leaderboard display. - Adds `manageUserPoints` and `resetAllPoints` commands to `background.js`, enabling administrators to add, subtract, set, or reset user points via the extension's backend. - Enhances `leaderboard.html` to support displaying loyalty points, allowing the leaderboard to rank users by 'loyalty' and process real-time `points_leaderboard` snapshots. - Updates `points.js` with helper functions for better settings integration and implements broadcast mechanisms to send immediate leaderboard updates after point modifications (e.g., spending points, manual awards, reprocessing history). [auto-enhanced]
- Increased indentation level for the event listener blocks related to the points leaderboard button (`viewPointsLeaderboardBtn`) and the reset points button (`resetPointsBtn`) in `popup.js`. - This change improves code readability and consistency for the points management UI, building on the recent `feat(points)` implementation. [auto-enhanced]
Updates all Spotify authentication callback references from `spotify_callback.html` to `spotify.html`. This change streamlines the Spotify authentication flow by consolidating the redirect URI to a single, main Spotify page, improving consistency and reducing file clutter. - Updates the internal `browserRedirectUri` configuration in `spotify.js`. - Adjusts the console log example for `completeSpotifyAuth` in `spotify-auth-helper.js`. - Modifies the recommended redirect URI for user setup in the `spotify.html` instructions. - Continues the simplification and consolidation efforts for the Spotify integration. [auto-enhanced]
Refactor constant and helper naming, and improve points system initialization within the points and points actions modules. - Rename `MS_PER_MINUTE` and `MS_PER_HOUR` to `POINTS_MS_PER_MINUTE` and `POINTS_MS_PER_HOUR` respectively in `points.js`. This provides clearer scoping for these time constants to the points module, reducing potential naming conflicts. - Rename `pointsSettingsHelpers` to `pointsActionsSettingsHelpers` in `pointsactions.js` for improved clarity, explicitly tying the helper to the actions module context. - Introduce a robust `initialPointsSystem` lookup within `pointsactions.js` to ensure the `PointsActions` system correctly references the `PointsSystem` instance, accommodating various loading orders or environments. - Wrap the `window.pointsActions` API export in `pointsactions.js` with a `typeof window !== 'undefined'` check for better environment safety, preventing errors in non-browser contexts. [auto-enhanced]
The default profanity word list is now hardcoded as `DEFAULT_BAD_WORDS` within `libs/objects.js`, eliminating the need to load it dynamically from `shared/data/badwords.json`. This refactoring: - Simplifies deployment by removing `shared/data/badwords.json` as a separate asset to host. - Ensures a consistent profanity list across all application surfaces (extension, Electron, Lite embeds) without external fetching. - Updates relevant documentation in `README.md` and `lite/README.md`. - Removes `"shared/data/badwords.json"` from `manifest.json`'s `web_accessible_resources`. Additionally, in `service_worker.js`: - Improve inter-component messaging robustness by adding a fallback from `chrome.tabs.sendMessage` to `chrome.runtime.sendMessage` in case tab messaging fails. [auto-enhanced]
…tion Implement an automatic fallback mechanism for Spotify OAuth, enhancing robustness against local server port conflicts. This change refactors the Spotify OAuth handling within `electron-spotify-handler.js`: - Introduces `runLoopbackOAuthSession` and `runInterceptOAuthFlow` to encapsulate the two primary authentication methods. - The `setupSpotifyOAuthWithLocalServer` now attempts the preferred local loopback server method first. - If the loopback server port (`127.0.0.1:8888`) is already in use (`EADDRINUSE`) or inaccessible (`EACCES`), the system will gracefully fall back to the intercept navigation method. - Enhances error handling and logging for the OAuth flow. - Standardizes redirect URI handling within the intercept flow to support both custom and default loopback redirects. This ensures a more reliable and user-friendly authentication experience, even in environments with potential port contention. [auto-enhanced]
Default the `fallbackToIntercept` option in `setupSpotifyOAuthWithLocalServer` to `false`. This change ensures that Spotify OAuth loopback handler failures (e.g., port conflicts) are explicitly surfaced as errors by default, rather than silently falling back to the intercept method. - **Disable automatic fallback:** The system will now throw an error if the local HTTP server cannot be started, requiring explicit configuration to enable the intercept fallback. This prevents masking underlying port or configuration issues. - **Enhance error diagnostics:** Improved error wrapping for loopback failures provides more detailed `code` and `cause` properties in exceptions from `electron-spotify-handler.js`, aiding in quicker debugging and resolution. [auto-enhanced]
…feedback
Restructures the Spotify OAuth process in Electron to enhance reliability, error handling, and user experience.
- **spotify.js**:
- Refactors the `startAuthFlow` to initiate the Electron OAuth asynchronously via new `launchElectronOAuthFlow` method.
- Introduces `launchElectronOAuthFlow`, `processElectronOAuthResult`, and `handleElectronOAuthError` for clearer separation of concerns in the Electron authentication lifecycle.
- Enables asynchronous processing of OAuth results, preventing the main flow from blocking.
- Improves error handling for Electron-based authentication attempts, including clearer messages and automatic fallback to manual URL generation on error.
- **popup.js**:
- Enhances UI feedback for Spotify authentication states by handling `waitingForManualCallback`, `waitingForCallback`, `manualAuthUrl`, and general `message` properties from the background process.
- Provides real-time updates to the user regarding the authorization status, including disabling the connect button, displaying manual link options, and showing relevant status messages.
This continues the ongoing work on the `beta` branch to stabilize and enhance the Spotify integration and user authentication experience.
[auto-enhanced]
Introduces helper functions for more robust and explicit handling of URL
parameters within `poll.html`. This change improves the reliability of
poll settings and enhances debuggability.
- **Improved Parameter Normalization:**
- `normalizeBoolean`: Consistently parses boolean values from various string, number, or boolean inputs, preventing issues with ambiguous truthy/falsy strings (e.g., "false" now correctly evaluates to `false`). Applied to `pollEnabled`, `pollSpam`, `pollTally`.
- `normalizeNumber`: Ensures integer parsing with fallback for invalid or non-positive numerical inputs.
- `normalizeOptionsList`: Processes comma-separated strings or arrays into a clean list of poll options.
- **Enhanced Debuggability:**
- Implemented a `debugMode` check based on URL parameters.
- Added a `debugLog` utility to provide conditional console output for key poll events and incoming data, aiding in development and troubleshooting.
- **Voter ID Integration:** Updated the `queueVote` function call in `processInput` to include a new `extractVoterId(data)` argument, paving the way for more precise voter identification.
[auto-enhanced]
Adds functionality to capture and display user-provided messages when they join the waitlist. This enhances interactivity and provides streamers with additional context from participants. - **`background.js`**: Implements `extractWaitlistMessage` to parse messages following the join command (e.g., "!join My message"). Stores this message in the waitlist entry data. - **`popup.html`**: Introduces a new toggle setting, "Show join message next to each entry", to control the display of these messages. - **`waitlist.html`**: Updates CSS (`.waitlist-message`, `--waitlist-message-scale`) and JavaScript (`formatWaitlistEntryText`, `getJoinMessage`) to render the custom messages alongside usernames. - Supports `messagesize` URL parameter for adjusting the displayed message's scale. - Includes `escapeRegex` utility for robust command parsing. - Bumps `manifest.json` version to `3.36.3`. [auto-enhanced]
…ction - Add logic to detect and extract donation amounts from Velora chat messages based on specific DOM elements (SVG icon). - Enhance CSS selectors for user names and chat messages within `velora.js` to accommodate new UI variations. - Clean up smart quotes (`“`, `”`) from chat messages when a donation is present, ensuring consistent display. - Re-enable debug logging for incoming Velora chat elements (`console.log(ele)`). [auto-enhanced]
Enhances the Velora integration to reliably detect and parse chat messages within the dedicated popout chat window. - Modifies the `onElementInserted` function to dynamically configure the `MutationObserver`'s `subtree` option, allowing for deeper DOM observation. - Implements a fallback to observe the `body` element and explicitly enables `subtree: true` for the `MutationObserver` when on the Velora popout chat URL (`https://velora.tv/dashboard/stream/popout?panels=chat`). - This ensures consistent detection and processing of new chat elements, addressing scenarios where the standard chat container is not found or structured differently in the popout interface. [auto-enhanced]
The `checkViewers` function's primary DOM selector was unable to locate the viewer count element when using the `velora.tv` dashboard's `popout?panels=chat` window. This commit introduces an alternative DOM query selector specifically tailored for this popout URL, allowing the correct identification and parsing of the viewer count. This enhances Velora integration, ensuring the viewer count is displayed accurately across different panel configurations. [auto-enhanced]
Refactor viewer count detection logic in `sources/velora.js`. - Explicitly checks `window.location.href` to determine if the current page is the Velora dashboard or the popout chat panel. - Ensures the correct DOM selector is applied based on the page context, preventing inconsistent viewer count retrieval. - Addresses potential issues where the previous logic might not reliably locate the viewer span. [auto-enhanced]
Rename the `img` loop variable to `svgEl` within the `svgs.forEach` block in `emotes.html`. This change improves code readability and maintainability by explicitly identifying the processed elements as SVG elements, aligning the variable name with its type and usage. [auto-enhanced]
- Introduce detection and classification for incoming Rumble raid events.
- Enhance chat parsing to extract raid-specific data, including:
- Raid owner name and avatar.
- Raid message content from dedicated elements.
- Background images associated with raids.
- Refine and consolidate CSS selectors within `sources/rumble.js` for improved reliability and reduced redundancy when extracting user avatars, names, and message content across standard chat, rants, and new raid event structures.
[auto-enhanced]
- Restructure the logic for extracting user `name` and `nameColor` within `processMessage`. - Separate parsing paths for different chat element types (e.g., standard username vs. rant username). - Introduce an explicit check to ensure elements are processed only if they belong to the main `chat-history-list`, preventing misinterpretation of unrelated DOM nodes. - Add an early return if no valid username element is found, improving efficiency and robustness. - This clarifies and makes the message processing more reliable, building on recent `rumble` improvements. [auto-enhanced]
Enhances the 'setProperty' action within the EventFlowEditor by introducing a broader range of configurable properties. - Added new property categories: styling, message basics, media, event metadata, and status flags. - Introduced properties like `type`, `sourceName`, `userid`, `contentimg`, `title`, `subtitle`, `membership`, `hasDonation`, and `event`. - Included new boolean flags for event states: `host`, `admin`, `question`, `private`, and `textonly`. - Updated existing property labels for improved clarity (e.g., 'Username (chatname)', 'Avatar URL (chatimg)'). - Revised the help section within `EventFlowEditor.js` to provide examples for the new event metadata properties. This provides users with greater control and flexibility when dynamically modifying event data and styling within their custom action flows. [auto-enhanced]
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
No description provided.