Skip to content

V2 - #342

Closed
GeneralKakyoin wants to merge 5 commits into
AlchemyViewer:developfrom
GeneralKakyoin:v2
Closed

V2#342
GeneralKakyoin wants to merge 5 commits into
AlchemyViewer:developfrom
GeneralKakyoin:v2

Conversation

@GeneralKakyoin

Copy link
Copy Markdown

Description

Related Issues

  • Please link to a relevant GitHub issue for additional context.
    • Bug Fix: Link to an issue that includes reproduction steps and testing guidance.
    • Feature/Enhancement: Link to an issue with a write-up, rationale, and requirements.

Issue Link:


Checklist

Please ensure the following before requesting review:

  • I have provided a clear title and detailed description for this pull request.
  • If useful, I have included media such as screenshots and video to show off my changes.
  • I have tested the changes locally and verified they work as intended.
  • All new and existing tests pass.
  • Code follows the project's style guidelines.
  • Documentation has been updated if needed.
  • Any dependent changes have been merged and published in downstream modules
  • I have reviewed the contributing guidelines.

Additional Notes

@coderabbitai

coderabbitai Bot commented Jul 5, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

Caution

Review failed

The pull request is closed.

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Repository UI

Review profile: CHILL

Plan: Pro

Run ID: 0d0413af-eb58-46be-ad6d-aa6d83cd4af1

📥 Commits

Reviewing files that changed from the base of the PR and between 7295b41 and 41540a4.

📒 Files selected for processing (61)
  • configure_alchemy.bat
  • doc/ALCHEMY_CUSTOM_FEATURES.md
  • doc/RLV_CUSTOM_ADDITIONS.md
  • indra/lib/python/indra/util/llmanifest.py
  • indra/llaudio/llaudioengine_fmodstudio.cpp
  • indra/llaudio/llaudioengine_fmodstudio.h
  • indra/llui/llflatlistview.h
  • indra/llui/llfloaterreg.cpp
  • indra/llui/lltoolbar.cpp
  • indra/llui/llui.cpp
  • indra/llxml/llcontrol.cpp
  • indra/llxml/tests/llcontrol_test.cpp
  • indra/newview/CMakeLists.txt
  • indra/newview/alavataractions.cpp
  • indra/newview/alfloaterprofilelegacy.cpp
  • indra/newview/alfloatersceneexplorer.cpp
  • indra/newview/alfloaterwebprofile.cpp
  • indra/newview/app_settings/commands.xml
  • indra/newview/app_settings/settings_alchemy.xml
  • indra/newview/llagentcamera.cpp
  • indra/newview/llappviewer.cpp
  • indra/newview/llavataractions.cpp
  • indra/newview/llestimrlvhandler.cpp
  • indra/newview/llestimrlvhandler.h
  • indra/newview/llestimwsmgr.cpp
  • indra/newview/llestimwsmgr.h
  • indra/newview/llfloaterestim.cpp
  • indra/newview/llfloaterestim.h
  • indra/newview/llfloaterimsessiontab.h
  • indra/newview/llfloaterpreference.cpp
  • indra/newview/llfloaterprofile.cpp
  • indra/newview/llpanelcontents.cpp
  • indra/newview/llpanelcontents.h
  • indra/newview/llpanelgrouproles.cpp
  • indra/newview/llpanelobjectinventory.cpp
  • indra/newview/llpanelpeople.cpp
  • indra/newview/llpanelpeople.h
  • indra/newview/llpreviewscript.cpp
  • indra/newview/llpreviewscript.h
  • indra/newview/llstartup.cpp
  • indra/newview/lltoolmgr.cpp
  • indra/newview/llviewerdisplay.cpp
  • indra/newview/llviewerfloaterreg.cpp
  • indra/newview/llviewermenu.cpp
  • indra/newview/llviewerwindow.cpp
  • indra/newview/rlvactions.cpp
  • indra/newview/rlvcommon.cpp
  • indra/newview/rlvcommon.h
  • indra/newview/rlvdefines.h
  • indra/newview/rlvhandler.cpp
  • indra/newview/rlvhandler.h
  • indra/newview/rlvhelper.cpp
  • indra/newview/rlvui.cpp
  • indra/newview/rlvui.h
  • indra/newview/skins/default/xui/en/floater_tools.xml
  • indra/newview/skins/default/xui/en/llfloaterestim.xml
  • indra/newview/skins/default/xui/en/menu_viewer.xml
  • indra/newview/skins/default/xui/en/notifications.xml
  • indra/newview/skins/default/xui/en/rlva_strings.xml
  • indra/newview/skins/default/xui/ja/notifications.xml
  • indra/newview/skins/default/xui/ja/rlva_strings.xml

📝 Walkthrough

Summary by CodeRabbit

  • New Features

    • Added an E-Stim control window with status, safety, sliders, test actions, trigger/sensor lists, and a panic stop.
    • Added a new “Edit All” option for opening script assets in an external editor.
    • Introduced startup lock, shutdown countdown, and new menu/notification support for restricted states.
  • Bug Fixes

    • Improved viewer blocking behavior for profiles, build tools, camera, conversations, preferences, and friends lists.
    • Refined audio/telemetry and settings loading so related features behave more reliably.

Walkthrough

This PR adds an RLV-driven UI restriction system with a startup lock overlay, a native e-stim/telemetry WebSocket integration bridged through RLV commands with FMOD FFT audio sync and a control floater, an "Edit All Scripts" external-editor workflow, extensive documentation, plus unrelated build/UI fixes for settings includes, floater validation, and skin loading.

Changes

Build & Tooling Updates

Layer / File(s) Summary
Build configuration and packaging
configure_alchemy.bat, indra/lib/python/indra/util/llmanifest.py, indra/newview/CMakeLists.txt
Adds a Windows configure script, renames package_file to package_name in the manifest packager, and updates viewer source/header lists and Windows copy_input_dependencies target.

RLV Behavior & UI Restriction System

Layer / File(s) Summary
Behaviour definitions and dictionary
indra/newview/rlvdefines.h, indra/newview/rlvhelper.cpp
Updates ERlvBehaviour enum and blocked-string keys, and registers new toggle/force/reply behaviours including shutdown and lockmouselook/lockrlv.
RlvHandler core, startup gating, shutdown
indra/newview/rlvhandler.cpp, indra/newview/rlvhandler.h
Adds command-time tracking, startup-lock command gating, expanded toggle handlers (@showfriends, @hideui, generic show* blocking), and a @shutdown countdown timer.
RlvStrings/RlvUtil helpers
indra/newview/rlvcommon.cpp, indra/newview/rlvcommon.h, indra/newview/rlvactions.cpp
Adds getViewerName(), simplifies filterNames, adds rlvMenuMainToggleEnabled, removes canShowNearbyAgents.
Generic filter silent mode
indra/newview/rlvui.cpp, indra/newview/rlvui.h
Adds panel-generic filter connection and respects an LLSD silent flag before notifying blocked actions.
Viewer UI wiring
indra/newview/alavataractions.cpp, alfloaterprofilelegacy.cpp, alfloatersceneexplorer.cpp, alfloaterwebprofile.cpp, llavataractions.cpp, llagentcamera.cpp, lltoolmgr.cpp, llviewerdisplay.cpp, llviewermenu.cpp, llpanelgrouproles.cpp, llpanelpeople.cpp, llpanelpeople.h, llfloaterimsessiontab.h, llfloaterprofile.cpp, app_settings/commands.xml, menu_viewer.xml
Applies RLV behaviour checks to profiles, camera lock, build tools, menus, and the people panel; adjusts command enablement.
Startup lock overlay
llstartup.cpp, llviewerwindow.cpp, settings_alchemy.xml
Adds startup lock settings, blocks input during lock, and renders an overlay in draw().
Restriction localization
notifications.xml (en/ja), rlva_strings.xml (en/ja)
Adds blocked-feature notifications and strings for search, people, conversation, appearance, build, destinations, camera, preferences, friends/recent.
RLV documentation
doc/ALCHEMY_CUSTOM_FEATURES.md, doc/RLV_CUSTOM_ADDITIONS.md
Documents startup lock, UI graying, contact/profile blocking, shutdown, and the LSL RLV dialog system/folder monitor.

Native E-Stim Device Integration

Layer / File(s) Summary
Settings and commands
settings_alchemy.xml, commands.xml, menu_viewer.xml
Adds intensity cap/port settings and estim_panic/estim_toggle commands/menu items.
WebSocket server core
llestimwsmgr.cpp, llestimwsmgr.h
Implements connection lifecycle, RPC methods, stim/shock/pulse senders, and trigger/notification rule evaluation.
RLV command bridge
llestimrlvhandler.cpp, llestimrlvhandler.h, rlvhandler.cpp, rlvhelper.cpp
Adds LLEstimRLVHandler for estim_* RLV commands and registers/classifies them.
FFT audio sync
llaudioengine_fmodstudio.cpp, llaudioengine_fmodstudio.h
Adds FFT DSP creation/teardown and an idle() callback feeding spectrum data.
Control floater UI
llfloaterestim.cpp, llfloaterestim.h, llfloaterestim.xml, llviewerfloaterreg.cpp
Adds the LLFloaterEstim UI with sliders, lists, and panic/test/clear controls.
Startup wiring & notifications
llappviewer.cpp, notifications.xml
Starts the server on configured port and adds disconnect/low-battery notifications.
E-Stim documentation
doc/ALCHEMY_CUSTOM_FEATURES.md, doc/RLV_CUSTOM_ADDITIONS.md
Documents the WebSocket API, trigger engine, safety rules, and Coyote/PawPrint integration.

Edit All Scripts in External Editor

Layer / File(s) Summary
Panel wiring
llpanelcontents.cpp, llpanelcontents.h, llpanelobjectinventory.cpp
Adds updateButtons()/onClickEditAll() gated on LSL script presence.
Preview/upload flow
llpreviewscript.cpp, llpreviewscript.h
Adds auto-open-external-editor flag and simplifies finishLSLUpload.
UI layout
floater_tools.xml
Adds the "Edit All" button and adjusts adjacent control sizing.

Unrelated Build/UI Fixes

Layer / File(s) Summary
Deferred Include loading
llcontrol.cpp, llcontrol_test.cpp
Collects Include entries and loads them after the main settings iteration; adds a covering test.
Floater access validation
llfloaterreg.cpp, lltoolbar.cpp, llui.cpp
Adds canShowInstance guards and updates enable-callback resolution/registration.
Skin/cursor fixes
llflatlistview.h, llfloaterpreference.cpp, llappviewer.cpp, llviewerwindow.cpp
Cleans stale comments, switches skin enumeration path, removes yield gating, adjusts cursor intersection check.

Estimated code review effort: 5 (Critical) | ~150 minutes

Sequence Diagram(s)

sequenceDiagram
  participant Sensor as PawPrint Sensor
  participant LLEstimWSConnection
  participant LLEstimWSServer
  participant CoyoteDevice as Coyote Device

  Sensor->>LLEstimWSConnection: sensor_update(sensor, axis, value)
  LLEstimWSConnection->>LLEstimWSServer: handleSensorUpdate
  LLEstimWSServer->>LLEstimWSServer: evaluateSensorInput(triggers)
  LLEstimWSServer->>CoyoteDevice: sendStimCommand(channel, intensity)
Loading
sequenceDiagram
  participant Object as Scripted Object
  participant RlvHandler
  participant LLViewerWindow
  participant LLAppViewer

  Object->>RlvHandler: `@shutdown`:seconds=force
  RlvHandler->>RlvHandler: start countdown notifications
  RlvHandler->>LLAppViewer: requestQuit at zero
  LLViewerWindow->>RlvHandler: isStartupLockActive() during draw/input
  RlvHandler-->>LLViewerWindow: overlay rendered / input blocked
Loading

Possibly related PRs

  • AlchemyViewer/Alchemy#324: Related Scene Explorer object cost/inspection changes overlap with the Scene Explorer reconcile() modifications in this PR.
  • AlchemyViewer/Alchemy#334: Directly overlaps with the CEF accelerated-paint interop/receiver removal in indra/newview/CMakeLists.txt.

Suggested labels: llplugin, llwindow, llfilesystem

Poem

A rabbit taps keys through the night so late,
Locks the screen, sets triggers, seals the gate. 🐰🔒
Coyote hums, sensors sing in code,
Scripts fly open on the editor's road.
Hop, hop, hooray — the burrow ships tonight! 🥕✨

Warning

There were issues while running some tools. Please review the errors and either fix the tool's configuration or disable the tool if it's a critical failure.

🔧 Cppcheck (2.21.0)
indra/newview/llviewerwindow.cpp

Checking indra/newview/llviewerwindow.cpp ...
indra/newview/llmeshrepository.h:89:9:performance:useInitializationList:Variable 'mRetries' is assigned in constructor body. Consider performing initialization in initialization list.
indra/newview/llmeshrepository.h:106:9:performance:useInitializationList:Variable 'mRetries' is assigned in constructor body. Consider performing initialization in initialization list.
indra/newview/llmeshrepository.h:112:9:performance:useInitializationList:Variable 'mRetries' is assigned in constructor body. Consider performing initialization in initialization list.
indra/newview/llchannelmanager.h:61:13:performance:useInitializationList:Variable 'id' is assigned in constructor body. Consider performing initialization in initialization list.
indra/newview/llchannelmanager.h:62:13:performance:useInitializationList:Variable 'channel' is assigned in constructor body. Consider performing initialization in initialization list.
indra/llui/llcommandmanager.h:55:9:pe

... [truncated 13157 characters] ...

of the string is assigned to itself. Use resize() or pop_back() instead.
Checking indra/newview/llviewerwindow.cpp: LIB_NDOF...
Checking indra/newview/llviewerwindow.cpp: LIB_NDOF;LL_DARWIN...
Checking indra/newview/llviewerwindow.cpp: LL_CLANG...
Checking indra/newview/llviewerwindow.cpp: LL_DARWIN...
Checking indra/newview/llviewerwindow.cpp: LL_DISCORD=LL_DISCORD...
Checking indra/newview/llviewerwindow.cpp: LL_GNUC...
Checking indra/newview/llviewerwindow.cpp: LL_OCTREE_PARANOIA_CHECK...
Checking indra/newview/llviewerwindow.cpp: LL_PROFILER_ENABLE_RENDER_DOC...
Checking indra/newview/llviewerwindow.cpp: LL_RELEASE_FOR_DOWNLOAD=0...
Checking indra/newview/llviewerwindow.cpp: LL_RELEASE_FOR_DOWNLOAD=LL_RELEASE_FOR_DOWNLOAD...
Checking indra/newview/llviewerwindow.cpp: LL_SDL_WINDOW...


Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

Warning

⚠️ This pull request shows signs of AI-generated slop (description_diff_mismatch, ai_padded_prose). It has been flagged by CodeRabbit slop detection and should be reviewed carefully.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant