CI / Build & Quality Checks (pull_request) Successful in 2m46s
CI / Trigger Desktop Build (pull_request) Skipped
CI / Docker image build & smoke test (pull_request) Skipped
CI / Secret scan (gitleaks) (pull_request) Successful in 7s
CI / Playwright smoke (e2e) (pull_request) Successful in 18m56s
The fork reports what actually runs as io.lotus.denoise_state, but the
host never listened ("unsupported action"), so a failed ML denoiser
silently published the raw mic. Handle it: toast when ML did not start
or fell back to another model. Remove LotusDenoiseFeature, which waited
for a postMessage nothing sends any more and accepted it from any frame.
Refs #260
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_017PCb59uY3UKqDqt7B6hzd5
30 lines
1.1 KiB
TypeScript
30 lines
1.1 KiB
TypeScript
/**
|
|
* [Gitea #260] The fork reports what noise suppression actually runs as
|
|
* `io.lotus.denoise_state { active, model, error? }`. Pure: the toast text for
|
|
* a report, or undefined when what runs is what the user picked.
|
|
*/
|
|
export type DenoiseStateReport = { active?: unknown; model?: unknown; error?: unknown };
|
|
|
|
const MODEL_NAMES: Record<string, string> = {
|
|
rnnoise: 'RNNoise',
|
|
speex: 'Speex',
|
|
dtln: 'DTLN',
|
|
deepfilternet: 'DeepFilterNet 3',
|
|
};
|
|
const modelName = (m: unknown): string =>
|
|
typeof m === 'string' ? (MODEL_NAMES[m] ?? m) : 'the selected model';
|
|
|
|
export function denoiseNotice(
|
|
requestedModel: string,
|
|
report: DenoiseStateReport | undefined,
|
|
): string | undefined {
|
|
if (!report || typeof report.active !== 'boolean') return undefined;
|
|
if (!report.active) {
|
|
return `ML noise suppression couldn't start, so your microphone is sending unfiltered audio. You can pick another model in Settings → Calls.`;
|
|
}
|
|
if (typeof report.model === 'string' && report.model !== requestedModel) {
|
|
return `${modelName(requestedModel)} couldn't start, so noise suppression is using ${modelName(report.model)} instead.`;
|
|
}
|
|
return undefined;
|
|
}
|