Release v4.3: speak status line (Tolk) + Logging tab with housekeeping
- New screen-reader hotkey "Speak the RemSound status information" (issue #13): reads the status line aloud through the active screen reader via Tolk, fires from anywhere (system-wide), unset by default. Built behind an IScreenReaderOutput seam so a future build can swap Tolk for Prism on Windows 10+ without touching callers. Tolk DLLs vendored under tolk/ and shipped next to the exe. - New Logging tab in Preferences: Enable logs + Write logs now moved there, plus opt-in startup "warn if logs folder exceeds N MB" and "delete logs older than N days", and a "Delete all logs" button (Yes/No confirm). New LogMaintenance helper + AppConfig settings drive it. - Manual (readme.html + regenerated MANUAL.md), About changelog and RELEASE_NOTES updated in plain English; csproj <Version> bumped to 4.3. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 4.8
parent
034a7de632
commit
fd5c31740a
@@ -0,0 +1,24 @@
|
||||
namespace RemSound.App;
|
||||
|
||||
/// <summary>
|
||||
/// Abstraction over a screen-reader speech backend, so RemSound can speak text straight to whatever
|
||||
/// screen reader is running (NVDA, JAWS, SAPI, ...). Needed for feedback the screen reader can't
|
||||
/// otherwise observe — most importantly a GLOBAL hotkey firing while RemSound isn't focused, where
|
||||
/// NVDA reads nothing on its own.
|
||||
///
|
||||
/// Kept as an interface purely so the concrete backend can be swapped later without touching callers.
|
||||
/// Today the only implementation is <see cref="TolkScreenReaderOutput"/>, which works on every
|
||||
/// Windows version RemSound supports (including Windows 7). Prism (evaluated 2026-06-19) is the more
|
||||
/// modern option but hard-requires Windows 10+, so it can't replace Tolk while Win7 is supported — if
|
||||
/// that changes, add a PrismScreenReaderOutput and pick it per-OS in <see cref="ScreenReader"/>.
|
||||
/// </summary>
|
||||
internal interface IScreenReaderOutput
|
||||
{
|
||||
/// <summary>Speak <paramref name="text"/> through the active screen reader. <paramref name="interrupt"/>
|
||||
/// true cuts off whatever it's currently saying. Returns true if the text was handed to a screen
|
||||
/// reader, false if none is available. Best-effort — never throws.</summary>
|
||||
bool Speak(string text, bool interrupt = true);
|
||||
|
||||
/// <summary>Release the backend. Safe to call more than once.</summary>
|
||||
void Shutdown();
|
||||
}
|
||||
Reference in New Issue
Block a user