diff --git a/CHANGELOG.en-US.md b/CHANGELOG.en-US.md index aa31b4d..0a44b2e 100644 --- a/CHANGELOG.en-US.md +++ b/CHANGELOG.en-US.md @@ -15,6 +15,7 @@ English (US) release notes, mirroring CHANGELOG.md (Brazilian Portuguese). Befor ### Behind the scenes - Publishing a stable release now also opens the update PR on winget (`winget install lippdev.ConsoleMode`). Test versions are skipped. (#106) +- The code no longer mentions MultiMonitorTool or SoundVolumeView, and the cleanup of their old files in the `tools` folder is gone: anyone updating straight from 1.5 keeps those two files until they delete them by hand. (#119) - The package embeds only rtss-cli; leftover MultiMonitorTool/SoundVolumeView files no longer end up in the executable. (#110) ## [1.6.0-alpha.2] diff --git a/CHANGELOG.md b/CHANGELOG.md index 20a9bed..13d4367 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -15,6 +15,7 @@ Notas em português do Brasil; a versão em inglês (Estados Unidos) fica em `CH ### Por trás dos panos - Publicar uma versão estável agora também abre o PR de atualização no winget (`winget install lippdev.ConsoleMode`). Versões de teste ficam de fora. (#106) +- O código não cita mais o MultiMonitorTool nem o SoundVolumeView, e a limpeza dos arquivos antigos deles na pasta `tools` saiu: quem atualiza direto da 1.5 mantém esses dois arquivos até apagá-los à mão. (#119) - O pacote embute só o rtss-cli; sobras de MultiMonitorTool/SoundVolumeView não entram mais no executável. (#110) ## [1.6.0-alpha.2] diff --git a/docs/TESTING.md b/docs/TESTING.md index 0b7885d..4995db3 100644 --- a/docs/TESTING.md +++ b/docs/TESTING.md @@ -117,21 +117,20 @@ Pré-condições: Ajustes → Interface = **Automático** (padrão). ## Áudio com código próprio (issue #91) -Pré-condições: 1.6 instalada por cima da 1.5, com a configuração da 1.5 (saída de áudio escolhida). A 1.6 não usa mais o SoundVolumeView; o arquivo antigo em `tools` é apagado ao abrir o app. +Pré-condições: 1.6 instalada por cima da 1.5, com a configuração da 1.5 (saída de áudio escolhida). - [ ] Ajustes → Saída de áudio lista as mesmas saídas que na 1.5, com os mesmos nomes, e as desativadas aparecem com o sufixo "[Desabilitado]". Resultado: ______ -- [ ] A saída que já estava escolhida com o SoundVolumeView continua selecionada depois de atualizar da 1.5 (o ID salvo é o mesmo). Resultado: ______ +- [ ] A saída que já estava escolhida na 1.5 continua selecionada depois de atualizar (o ID salvo é o mesmo). Resultado: ______ - [ ] Entrar no modo console com uma saída fixa (ex.: HDMI da TV): o som passa para ela, inclusive em apps de chamada (papel "comunicações"). O log mostra `Áudio: saída padrão = …`. Resultado: ______ - [ ] Se a troca de saída falhar (ex.: o dispositivo some no meio), a sessão continua e o log mostra `Áudio: não foi possível trocar para …`; a mesa não é desfeita. Resultado: ______ - [ ] "A que aparecer ao conectar (TV)" com a TV começando **desligada**: quando a TV liga, o som vai para o HDMI dela. Resultado: ______ - [ ] Uma saída **desabilitada** em Configurações → Som: escolhê-la liga a saída e o som vai para ela. Resultado: ______ - [ ] Menu da sessão (Select + Y): o volume inicial é o do Windows; ◀/▶ muda de 5 em 5 e tira o mudo; A alterna o mudo. Resultado: ______ - [ ] Ao restaurar a mesa, o som volta para a saída de antes do modo console. Resultado: ______ -- [ ] A pasta `tools` não tem mais `SoundVolumeView.exe` nem `MultiMonitorTool.exe` depois de abrir o app. Resultado: ______ ## Telas com código próprio (issue #91) -Pré-condições: 1.6 instalada por cima da 1.5, com a configuração da 1.5 (tela de jogo e telas a esconder escolhidas). Anote antes, na 1.5, como o mapa de telas aparece, para comparar. A 1.6 não usa mais o MultiMonitorTool; o arquivo antigo em `tools` é apagado ao abrir o app. +Pré-condições: 1.6 instalada por cima da 1.5, com a configuração da 1.5 (tela de jogo e telas a esconder escolhidas). Anote antes, na 1.5, como o mapa de telas aparece, para comparar. ### Lista e identidade diff --git a/src/ConsoleMode/Native/CoreAudio.cs b/src/ConsoleMode/Native/CoreAudio.cs index 61cf9f6..ca9d978 100644 --- a/src/ConsoleMode/Native/CoreAudio.cs +++ b/src/ConsoleMode/Native/CoreAudio.cs @@ -4,9 +4,9 @@ namespace ConsoleMode.Native; /// /// Windows Core Audio (MMDevice API) for the output devices: list, switch the default, enable a -/// disabled one, volume and mute. Replaces SoundVolumeView (issue #91). +/// disabled one, volume and mute (issue #91). /// Switching the default output uses IPolicyConfig, which Windows doesn't document but has kept -/// stable since Windows 7; the Control Panel, SoundVolumeView, EarTrumpet and AudioSwitcher use it. +/// stable since Windows 7; the Control Panel, EarTrumpet and AudioSwitcher use it. /// internal static class CoreAudio { @@ -24,7 +24,7 @@ public sealed record Endpoint(string Id, string Name, string AdapterName, bool I // PKEY_DeviceInterface_FriendlyName: the adapter ("Realtek(R) Audio", "NVIDIA High Definition Audio"). private static readonly PropertyKey InterfaceFriendlyNameKey = new(new Guid("026e516e-b814-414b-83cd-856d6fef4822"), 2); - /// Active, disabled and unplugged outputs (the same set SoundVolumeView listed). + /// Active, disabled and unplugged outputs. public static List ListRenderEndpoints() { var result = new List(); diff --git a/src/ConsoleMode/Native/NativeDisplays.cs b/src/ConsoleMode/Native/NativeDisplays.cs index f72b45e..d8a69ae 100644 --- a/src/ConsoleMode/Native/NativeDisplays.cs +++ b/src/ConsoleMode/Native/NativeDisplays.cs @@ -7,8 +7,8 @@ namespace ConsoleMode.Native; /// -/// Displays through Windows' own APIs (CCD, ChangeDisplaySettingsEx, DDC/CI via dxva2), replacing -/// MultiMonitorTool (issue #91). Monitors are named by their GDI source (\\.\DISPLAYn) like before. +/// Displays through Windows' own APIs (CCD, ChangeDisplaySettingsEx, DDC/CI via dxva2) (issue #91). +/// Monitors are named by their GDI source (\\.\DISPLAYn), the same names 1.5 saved. /// internal static class NativeDisplays { diff --git a/src/ConsoleMode/Services/AppPaths.cs b/src/ConsoleMode/Services/AppPaths.cs index 701bbc5..5475015 100644 --- a/src/ConsoleMode/Services/AppPaths.cs +++ b/src/ConsoleMode/Services/AppPaths.cs @@ -98,12 +98,6 @@ public static void Initialize() try { File.Copy(rtssBeside, rtssDest, true); } catch { /* ignore */ } } - // Up to 1.5 the NirSoft tools were extracted here; 1.6 is all our own code (issue #91). - foreach (var name in new[] { "MultiMonitorTool.exe", "SoundVolumeView.exe" }) - { - try { File.Delete(Path.Combine(ToolsDir, name)); } catch { /* in use or read-only: harmless */ } - } - RtssCliPath = FirstExisting(Path.Combine(ToolsDir, "rtss-cli.exe"), Path.Combine(ExeDir, "rtss-cli.exe")); ConfigPath = Path.Combine(DataDir, "config.json"); diff --git a/src/ConsoleMode/Services/AudioNaming.cs b/src/ConsoleMode/Services/AudioNaming.cs index 5853aee..6cba623 100644 --- a/src/ConsoleMode/Services/AudioNaming.cs +++ b/src/ConsoleMode/Services/AudioNaming.cs @@ -1,14 +1,14 @@ namespace ConsoleMode.Services; /// -/// Names and IDs of audio outputs, shared by the SoundVolumeView and the native (Core Audio) -/// backends so the saved setting (AudioDeviceId) and the restore backup work with either. +/// Names and IDs of audio outputs. The format is the one 1.5 saved (AudioDeviceId in +/// config.json and the restore backup), so both keep working after an update. /// Pure, so it's tested. /// public static class AudioNaming { /// - /// SoundVolumeView's "Command-Line Friendly ID" for an output: + /// The "friendly ID" of an output, as saved since 1.5: /// {adapter}\Device\{endpoint}\Render, e.g. Realtek(R) Audio\Device\Speakers\Render. /// public static string FriendlyId(string adapterName, string endpointName) => diff --git a/src/ConsoleMode/Services/ConsoleEngine.cs b/src/ConsoleMode/Services/ConsoleEngine.cs index 4148f74..c360d9d 100644 --- a/src/ConsoleMode/Services/ConsoleEngine.cs +++ b/src/ConsoleMode/Services/ConsoleEngine.cs @@ -508,9 +508,8 @@ private void UpdatePendingTarget() } /// - /// Switching the output is best effort, as it was with SoundVolumeView (its failures were ignored): - /// a Core Audio error is logged and the session goes on, instead of rolling back the whole start - /// after the screens were already switched. + /// Switching the output is best effort: a Core Audio error is logged and the session goes on, + /// instead of rolling back the whole start after the screens were already switched. /// private bool TrySetOutput(string friendlyId) { diff --git a/src/ConsoleMode/Services/DisplayIdentity.cs b/src/ConsoleMode/Services/DisplayIdentity.cs index 27af1fb..8da9441 100644 --- a/src/ConsoleMode/Services/DisplayIdentity.cs +++ b/src/ConsoleMode/Services/DisplayIdentity.cs @@ -4,7 +4,7 @@ namespace ConsoleMode.Services; /// -/// One monitor in the layout backup (MultiMonitorTool's .cfg format, kept for compatibility). +/// One monitor in the layout backup (the .cfg format 1.5 wrote, kept so its backups can be restored). /// Orientation is DEVMODE.dmDisplayOrientation: 0 landscape, 1 = 90°, 2 = 180°, 3 = 270°. /// public sealed record LayoutEntry(string Name, string MonitorId, string Serial, int BitsPerPixel, @@ -15,7 +15,7 @@ public sealed record EdidInfo(string Name, string Serial, int PreferredWidth, in /// /// Monitor identity and layout-file helpers for the native display backend (issue #91). They -/// produce the same values MultiMonitorTool did, so saved settings and backups keep working. +/// produce the same values 1.5 saved, so saved settings and backups keep working. /// Pure, so it's tested. /// public static class DisplayIdentity @@ -37,7 +37,7 @@ public static bool TryParseDevicePath(string? devicePath, out string hardwareId, } /// - /// MultiMonitorTool's "Monitor ID" (the device ID Windows gives the monitor), e.g. + /// The monitor ID saved since 1.5 (the device ID Windows gives the monitor), e.g. /// MONITOR\GSM5B7F\{4d36e96e-e325-11ce-bfc1-08002be10318}\0004; the last part is the /// monitor's driver key. It's what MonitorInfo.StableId saves in config.json. /// diff --git a/tests/ConsoleMode.Tests/AudioNamingTests.cs b/tests/ConsoleMode.Tests/AudioNamingTests.cs index fbda216..d707e1b 100644 --- a/tests/ConsoleMode.Tests/AudioNamingTests.cs +++ b/tests/ConsoleMode.Tests/AudioNamingTests.cs @@ -7,7 +7,7 @@ public sealed class AudioNamingTests [Theory] [InlineData("Realtek(R) Audio", "Speakers", @"Realtek(R) Audio\Device\Speakers\Render")] [InlineData("NVIDIA High Definition Audio", "LG TV SSCR2", @"NVIDIA High Definition Audio\Device\LG TV SSCR2\Render")] - public void Friendly_id_matches_the_one_saved_by_SoundVolumeView(string adapter, string endpoint, string expected) => + public void Friendly_id_matches_the_one_saved_by_1_5(string adapter, string endpoint, string expected) => Assert.Equal(expected, AudioNaming.FriendlyId(adapter, endpoint)); [Theory] diff --git a/tests/ConsoleMode.Tests/DisplayIdentityTests.cs b/tests/ConsoleMode.Tests/DisplayIdentityTests.cs index 774c3ab..0e2ffb6 100644 --- a/tests/ConsoleMode.Tests/DisplayIdentityTests.cs +++ b/tests/ConsoleMode.Tests/DisplayIdentityTests.cs @@ -18,7 +18,7 @@ public void Device_path_gives_the_hardware_id_and_the_device_instance() } [Fact] - public void Monitor_id_has_MultiMonitorTools_format() + public void Monitor_id_has_the_format_saved_by_1_5() { Assert.Equal(@"MONITOR\GSM5B7F\{4d36e96e-e325-11ce-bfc1-08002be10318}\0004", DisplayIdentity.MonitorId("GSM5B7F", @"{4d36e96e-e325-11ce-bfc1-08002be10318}\0004")); @@ -115,7 +115,7 @@ public void Layout_file_writes_landscape_when_no_orientation_is_given() [Fact] public void A_backup_made_by_1_5_is_written_back_unchanged() { - // The shape of a real 1.5 backup (MultiMonitorTool): a portrait side monitor and a TV that was off. + // The shape of a real 1.5 backup: a portrait side monitor and a TV that was off. string[] original = [ "[Monitor0]", @"Name=\\.\DISPLAY1", @"MonitorID=MONITOR\TCL1003\{4d36e96e-e325-11ce-bfc1-08002be10318}\0003",