Files
lgtv_audio_cap/package.json
T
Rene KievitsandClaude Opus 5 d3e4cb6410 Restrict the brightness sink to one app, picked by name not typed
Confirmed the brightness command applies globally, not per-LED
(serverinfo showed exactly one adjustment object, "id": "default",
covering the whole string), so no LED-count configuration is needed
for this at all -- that question resolved itself once the mechanism
was actually inspected instead of assumed.

For "only react while Spotify is running": only one app can be in the
foreground on webOS at a time, so a "capture the current app" button
in this app's own UI can never work -- pressing it means this app is
foreground, not Spotify. The only workable UI is picking a target from
every *installed* app by name, regardless of what's currently running.

That needed a new native capability this service never had: calling
OUT to another Luna service, not just being called. Two additions:

  foreground_app.c   subscribes once, at startup, to
                      com.webos.applicationManager/getForegroundAppInfo
                      and keeps a thread-safe cache the audio thread can
                      read without a blocking Luna call
  service.c           new listApps method, bridging to
                      com.webos.applicationManager/listApps so the
                      frontend never has to call another service
                      directly -- same rule as everywhere else here

Until the subscription has delivered at least one reply, a restricted
sink treats the target app as inactive, not active -- reacting to
audio when the user explicitly restricted it to one app would be the
wrong failure mode. Verified end to end on the host: engine_smoke.c
opens the sink with a restriction set, confirms it reports itself
correctly inactive against the stub Luna bus (which always "fails" to
call out, exactly like a real host with no bus).

Needed real, linkable stub bodies for LSCall/LSCallOneReply/
LSCallCancel/LSMessageGetPayload/LSErrorInit/LSErrorFree
(test/stubs/luna-service2/lunaservice_stub.c) since foreground_app.c
is the first source file here that's actually linked into a host test
binary rather than only syntax-checked -- service.c/main.c's existing
stub declarations were never called, only compiled against. Confirmed
those really are the correct symbol names by cross-compiling clean
against the real webOS SDK's actual libluna-service2, not just the
stub.

Bumped to 1.0.5.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-26 15:46:09 +02:00

36 lines
1.0 KiB
JSON

{
"name": "lgtv-audio-cap",
"version": "1.0.5",
"private": true,
"description": "Captures audio on an LG webOS 5/6 TV and streams it out \u2014 HyperHDR first, plus raw UDP, TCP and HTTP.",
"keywords": [
"webos",
"lgtv",
"hyperhdr",
"hyperion",
"audio",
"webosbrew"
],
"license": "MIT",
"scripts": {
"build": "tools/build.sh",
"native": "tools/build.sh native",
"docker": "tools/docker-build.sh",
"stage": "tools/build.sh stage",
"package": "tools/build.sh package",
"deploy": "tools/build.sh install && tools/build.sh launch",
"install-tv": "tools/build.sh install",
"launch": "tools/build.sh launch",
"logs": "tools/build.sh logs",
"clean": "tools/build.sh clean",
"test": "test/run-tests.sh",
"assets": "python3 tools/make-assets.py",
"manifest": "python3 tools/make-manifest.py",
"serve": "python3 -m http.server 8000 --directory frontend"
},
"devDependencies": {
"@webosose/ares-cli": "^2.4.0",
"jsdom": "^24.0.0"
}
}