diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 121af97..e9f8f15 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -28,7 +28,9 @@ jobs: - name: 👨‍🔧 Setup .NET Core SDK uses: actions/setup-dotnet@v3 with: - dotnet-version: 6.x + dotnet-version: | + 6.x + 8.x - name: 🔍 Enable problem matchers run: echo "::add-matcher::.github/matchers/dotnet.json" @@ -75,7 +77,9 @@ jobs: - name: 👨‍🔧 Setup .NET Core SDK uses: actions/setup-dotnet@v3 with: - dotnet-version: 6.x + dotnet-version: | + 6.x + 8.x - name: 🔍 Enable problem matchers run: echo "::add-matcher::.github/matchers/dotnet.json" diff --git a/README.md b/README.md index a4b3b28..fa71b10 100644 --- a/README.md +++ b/README.md @@ -26,8 +26,8 @@ Always wanted to control sonos speakers right from your dotnet application? I've Currently this library is not at version one, these are the planned features that need to be build before this can be called a version one. - [X] All sonos services generated from service discovery -- [ ] Event subscriptions -- [ ] Dynamic metadata generation based on [these docs](https://svrooij.io/sonos-api-docs/metadata.html) +- [X] Event subscriptions +- [X] Dynamic metadata generation based on [these docs](https://svrooij.io/sonos-api-docs/metadata.html) - [ ] SonosManager class that keeps track of speaker groups - [ ] Device discovery, though it hardly works diff --git a/src/Sonos.Base.Events.Http/Sonos.Base.Events.Http.csproj b/src/Sonos.Base.Events.Http/Sonos.Base.Events.Http.csproj index 3647148..55b7459 100644 --- a/src/Sonos.Base.Events.Http/Sonos.Base.Events.Http.csproj +++ b/src/Sonos.Base.Events.Http/Sonos.Base.Events.Http.csproj @@ -1,7 +1,7 @@  - net7.0;net6.0 + net8.0;net7.0;net6.0 enable enable 10.0 @@ -29,17 +29,11 @@ - - - - + - - - - - + + diff --git a/src/Sonos.Base.Events.Http/packages.lock.json b/src/Sonos.Base.Events.Http/packages.lock.json index ef39ee9..223e5ee 100644 --- a/src/Sonos.Base.Events.Http/packages.lock.json +++ b/src/Sonos.Base.Events.Http/packages.lock.json @@ -4,94 +4,107 @@ "net6.0": { "Microsoft.Extensions.Hosting.Abstractions": { "type": "Direct", - "requested": "[6.0.0, )", - "resolved": "6.0.0", - "contentHash": "GcT5l2CYXL6Sa27KCSh0TixsRfADUgth+ojQSD5EkzisZxmGFh7CwzkcYuGwvmXLjr27uWRNrJ2vuuEjMhU05Q==", + "requested": "[8.0.0, )", + "resolved": "8.0.0", + "contentHash": "AG7HWwVRdCHlaA++1oKDxLsXIBxmDpMPb3VoyOoAghEWnkUvEAdYQUwnV4jJbAaa/nMYNiEh5ByoLauZBEiovg==", "dependencies": { - "Microsoft.Extensions.Configuration.Abstractions": "6.0.0", - "Microsoft.Extensions.DependencyInjection.Abstractions": "6.0.0", - "Microsoft.Extensions.FileProviders.Abstractions": "6.0.0" + "Microsoft.Extensions.Configuration.Abstractions": "8.0.0", + "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.0", + "Microsoft.Extensions.Diagnostics.Abstractions": "8.0.0", + "Microsoft.Extensions.FileProviders.Abstractions": "8.0.0", + "Microsoft.Extensions.Logging.Abstractions": "8.0.0" } }, "Microsoft.Extensions.Configuration.Abstractions": { "type": "Transitive", - "resolved": "6.0.0", - "contentHash": "qWzV9o+ZRWq+pGm+1dF+R7qTgTYoXvbyowRoBxQJGfqTpqDun2eteerjRQhq5PQ/14S+lqto3Ft4gYaRyl4rdQ==", + "resolved": "8.0.0", + "contentHash": "3lE/iLSutpgX1CC0NOW70FJoGARRHbyKmG7dc0klnUZ9Dd9hS6N/POPWhKhMLCEuNN5nXEY5agmlFtH562vqhQ==", "dependencies": { - "Microsoft.Extensions.Primitives": "6.0.0" + "Microsoft.Extensions.Primitives": "8.0.0" } }, "Microsoft.Extensions.DependencyInjection": { "type": "Transitive", - "resolved": "6.0.0", - "contentHash": "k6PWQMuoBDGGHOQTtyois2u4AwyVcIwL2LaSLlTZQm2CYcJ1pxbt6jfAnpWmzENA/wfrYRI/X9DTLoUkE4AsLw==", + "resolved": "8.0.0", + "contentHash": "V8S3bsm50ig6JSyrbcJJ8bW2b9QLGouz+G1miK3UTaOWmMtFwNNNzUf4AleyDWUmTrWMLNnFSLEQtxmxgNQnNQ==", "dependencies": { - "Microsoft.Extensions.DependencyInjection.Abstractions": "6.0.0", - "System.Runtime.CompilerServices.Unsafe": "6.0.0" + "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.0" } }, "Microsoft.Extensions.DependencyInjection.Abstractions": { "type": "Transitive", - "resolved": "6.0.0", - "contentHash": "xlzi2IYREJH3/m6+lUrQlujzX8wDitm4QGnUu6kUXTQAWPuZY8i+ticFJbzfqaetLA6KR/rO6Ew/HuYD+bxifg==" + "resolved": "8.0.0", + "contentHash": "cjWrLkJXK0rs4zofsK4bSdg+jhDLTaxrkXu4gS6Y7MAlCvRyNNgwY/lJi5RDlQOnSZweHqoyvgvbdvQsRIW+hg==" + }, + "Microsoft.Extensions.Diagnostics.Abstractions": { + "type": "Transitive", + "resolved": "8.0.0", + "contentHash": "JHYCQG7HmugNYUhOl368g+NMxYE/N/AiclCYRNlgCY9eVyiBkOHMwK4x60RYMxv9EL3+rmj1mqHvdCiPpC+D4Q==", + "dependencies": { + "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.0", + "Microsoft.Extensions.Options": "8.0.0", + "System.Diagnostics.DiagnosticSource": "8.0.0" + } }, "Microsoft.Extensions.FileProviders.Abstractions": { "type": "Transitive", - "resolved": "6.0.0", - "contentHash": "0pd4/fho0gC12rQswaGQxbU34jOS1TPS8lZPpkFCH68ppQjHNHYle9iRuHeev1LhrJ94YPvzcRd8UmIuFk23Qw==", + "resolved": "8.0.0", + "contentHash": "ZbaMlhJlpisjuWbvXr4LdAst/1XxH3vZ6A0BsgTphZ2L4PGuxRLz7Jr/S7mkAAnOn78Vu0fKhEgNF5JO3zfjqQ==", "dependencies": { - "Microsoft.Extensions.Primitives": "6.0.0" + "Microsoft.Extensions.Primitives": "8.0.0" } }, "Microsoft.Extensions.Http": { "type": "Transitive", - "resolved": "6.0.0", - "contentHash": "15+pa2G0bAMHbHewaQIdr/y6ag2H3yh4rd9hTXavtWDzQBkvpe2RMqFg8BxDpcQWssmjmBApGPcw93QRz6YcMg==", + "resolved": "8.0.0", + "contentHash": "cWz4caHwvx0emoYe7NkHPxII/KkTI8R/LC9qdqJqnKv2poTJ4e2qqPGQqvRoQ5kaSA4FU5IV3qFAuLuOhoqULQ==", "dependencies": { - "Microsoft.Extensions.DependencyInjection.Abstractions": "6.0.0", - "Microsoft.Extensions.Logging": "6.0.0", - "Microsoft.Extensions.Logging.Abstractions": "6.0.0", - "Microsoft.Extensions.Options": "6.0.0" + "Microsoft.Extensions.Configuration.Abstractions": "8.0.0", + "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.0", + "Microsoft.Extensions.Logging": "8.0.0", + "Microsoft.Extensions.Logging.Abstractions": "8.0.0", + "Microsoft.Extensions.Options": "8.0.0" } }, "Microsoft.Extensions.Logging": { "type": "Transitive", - "resolved": "6.0.0", - "contentHash": "eIbyj40QDg1NDz0HBW0S5f3wrLVnKWnDJ/JtZ+yJDFnDj90VoPuoPmFkeaXrtu+0cKm5GRAwoDf+dBWXK0TUdg==", + "resolved": "8.0.0", + "contentHash": "tvRkov9tAJ3xP51LCv3FJ2zINmv1P8Hi8lhhtcKGqM+ImiTCC84uOPEI4z8Cdq2C3o9e+Aa0Gw0rmrsJD77W+w==", "dependencies": { - "Microsoft.Extensions.DependencyInjection": "6.0.0", - "Microsoft.Extensions.DependencyInjection.Abstractions": "6.0.0", - "Microsoft.Extensions.Logging.Abstractions": "6.0.0", - "Microsoft.Extensions.Options": "6.0.0", - "System.Diagnostics.DiagnosticSource": "6.0.0" + "Microsoft.Extensions.DependencyInjection": "8.0.0", + "Microsoft.Extensions.Logging.Abstractions": "8.0.0", + "Microsoft.Extensions.Options": "8.0.0" } }, "Microsoft.Extensions.Logging.Abstractions": { "type": "Transitive", - "resolved": "6.0.0", - "contentHash": "/HggWBbTwy8TgebGSX5DBZ24ndhzi93sHUBDvP1IxbZD7FDokYzdAr6+vbWGjw2XAfR2EJ1sfKUotpjHnFWPxA==" + "resolved": "8.0.0", + "contentHash": "arDBqTgFCyS0EvRV7O3MZturChstm50OJ0y9bDJvAcmEPJm0FFpFyjU/JLYyStNGGey081DvnQYlncNX5SJJGA==", + "dependencies": { + "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.0" + } }, "Microsoft.Extensions.Options": { "type": "Transitive", - "resolved": "6.0.0", - "contentHash": "dzXN0+V1AyjOe2xcJ86Qbo233KHuLEY0njf/P2Kw8SfJU+d45HNS2ctJdnEnrWbM9Ye2eFgaC5Mj9otRMU6IsQ==", + "resolved": "8.0.0", + "contentHash": "JOVOfqpnqlVLUzINQ2fox8evY2SKLYJ3BV8QDe/Jyp21u1T7r45x/R/5QdteURMR5r01GxeJSBBUOCOyaNXA3g==", "dependencies": { - "Microsoft.Extensions.DependencyInjection.Abstractions": "6.0.0", - "Microsoft.Extensions.Primitives": "6.0.0" + "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.0", + "Microsoft.Extensions.Primitives": "8.0.0" } }, "Microsoft.Extensions.Primitives": { "type": "Transitive", - "resolved": "6.0.0", - "contentHash": "9+PnzmQFfEFNR9J2aDTfJGGupShHjOuGw4VUv+JB044biSHrnmCIMD+mJHmb2H7YryrfBEXDurxQ47gJZdCKNQ==", + "resolved": "8.0.0", + "contentHash": "bXJEZrW9ny8vjMF1JV253WeLhpEVzFo1lyaZu1vQ4ZxWUlVvknZ/+ftFgVheLubb4eZPSwwxBeqS1JkCOjxd8g==", "dependencies": { "System.Runtime.CompilerServices.Unsafe": "6.0.0" } }, "System.Diagnostics.DiagnosticSource": { "type": "Transitive", - "resolved": "6.0.0", - "contentHash": "frQDfv0rl209cKm1lnwTgFPzNigy2EKk1BS3uAvHvlBVKe5cymGyHO+Sj+NLv5VF/AhHsqPIUUwya5oV4CHMUw==", + "resolved": "8.0.0", + "contentHash": "c9xLpVz6PL9lp/djOWtk5KPDZq3cSYpmXoJQY524EOtuFl5z9ZtsotpsyrDW40U1DRnQSYvcPKEUV0X//u6gkQ==", "dependencies": { "System.Runtime.CompilerServices.Unsafe": "6.0.0" } @@ -104,98 +117,268 @@ "sonos.base": { "type": "Project", "dependencies": { - "Microsoft.Extensions.Http": "[6.0.0, )", - "Microsoft.Extensions.Logging.Abstractions": "[6.0.0, )" + "Microsoft.Extensions.Http": "[8.0.0, )", + "Microsoft.Extensions.Logging.Abstractions": "[8.0.0, )" } } }, "net7.0": { "Microsoft.Extensions.Hosting.Abstractions": { "type": "Direct", - "requested": "[7.0.0, )", - "resolved": "7.0.0", - "contentHash": "43n9Je09z0p/7ViPxfRqs5BUItRLNVh5b6JH40F2Agkh2NBsY/jpNYTtbCcxrHCsA3oRmbR6RJBzUutB4VZvNQ==", + "requested": "[8.0.0, )", + "resolved": "8.0.0", + "contentHash": "AG7HWwVRdCHlaA++1oKDxLsXIBxmDpMPb3VoyOoAghEWnkUvEAdYQUwnV4jJbAaa/nMYNiEh5ByoLauZBEiovg==", + "dependencies": { + "Microsoft.Extensions.Configuration.Abstractions": "8.0.0", + "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.0", + "Microsoft.Extensions.Diagnostics.Abstractions": "8.0.0", + "Microsoft.Extensions.FileProviders.Abstractions": "8.0.0", + "Microsoft.Extensions.Logging.Abstractions": "8.0.0" + } + }, + "Microsoft.Extensions.Configuration.Abstractions": { + "type": "Transitive", + "resolved": "8.0.0", + "contentHash": "3lE/iLSutpgX1CC0NOW70FJoGARRHbyKmG7dc0klnUZ9Dd9hS6N/POPWhKhMLCEuNN5nXEY5agmlFtH562vqhQ==", + "dependencies": { + "Microsoft.Extensions.Primitives": "8.0.0" + } + }, + "Microsoft.Extensions.DependencyInjection": { + "type": "Transitive", + "resolved": "8.0.0", + "contentHash": "V8S3bsm50ig6JSyrbcJJ8bW2b9QLGouz+G1miK3UTaOWmMtFwNNNzUf4AleyDWUmTrWMLNnFSLEQtxmxgNQnNQ==", + "dependencies": { + "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.0" + } + }, + "Microsoft.Extensions.DependencyInjection.Abstractions": { + "type": "Transitive", + "resolved": "8.0.0", + "contentHash": "cjWrLkJXK0rs4zofsK4bSdg+jhDLTaxrkXu4gS6Y7MAlCvRyNNgwY/lJi5RDlQOnSZweHqoyvgvbdvQsRIW+hg==" + }, + "Microsoft.Extensions.Diagnostics.Abstractions": { + "type": "Transitive", + "resolved": "8.0.0", + "contentHash": "JHYCQG7HmugNYUhOl368g+NMxYE/N/AiclCYRNlgCY9eVyiBkOHMwK4x60RYMxv9EL3+rmj1mqHvdCiPpC+D4Q==", + "dependencies": { + "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.0", + "Microsoft.Extensions.Options": "8.0.0", + "System.Diagnostics.DiagnosticSource": "8.0.0" + } + }, + "Microsoft.Extensions.FileProviders.Abstractions": { + "type": "Transitive", + "resolved": "8.0.0", + "contentHash": "ZbaMlhJlpisjuWbvXr4LdAst/1XxH3vZ6A0BsgTphZ2L4PGuxRLz7Jr/S7mkAAnOn78Vu0fKhEgNF5JO3zfjqQ==", + "dependencies": { + "Microsoft.Extensions.Primitives": "8.0.0" + } + }, + "Microsoft.Extensions.Http": { + "type": "Transitive", + "resolved": "8.0.0", + "contentHash": "cWz4caHwvx0emoYe7NkHPxII/KkTI8R/LC9qdqJqnKv2poTJ4e2qqPGQqvRoQ5kaSA4FU5IV3qFAuLuOhoqULQ==", + "dependencies": { + "Microsoft.Extensions.Configuration.Abstractions": "8.0.0", + "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.0", + "Microsoft.Extensions.Logging": "8.0.0", + "Microsoft.Extensions.Logging.Abstractions": "8.0.0", + "Microsoft.Extensions.Options": "8.0.0" + } + }, + "Microsoft.Extensions.Logging": { + "type": "Transitive", + "resolved": "8.0.0", + "contentHash": "tvRkov9tAJ3xP51LCv3FJ2zINmv1P8Hi8lhhtcKGqM+ImiTCC84uOPEI4z8Cdq2C3o9e+Aa0Gw0rmrsJD77W+w==", + "dependencies": { + "Microsoft.Extensions.DependencyInjection": "8.0.0", + "Microsoft.Extensions.Logging.Abstractions": "8.0.0", + "Microsoft.Extensions.Options": "8.0.0" + } + }, + "Microsoft.Extensions.Logging.Abstractions": { + "type": "Transitive", + "resolved": "8.0.0", + "contentHash": "arDBqTgFCyS0EvRV7O3MZturChstm50OJ0y9bDJvAcmEPJm0FFpFyjU/JLYyStNGGey081DvnQYlncNX5SJJGA==", + "dependencies": { + "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.0" + } + }, + "Microsoft.Extensions.Options": { + "type": "Transitive", + "resolved": "8.0.0", + "contentHash": "JOVOfqpnqlVLUzINQ2fox8evY2SKLYJ3BV8QDe/Jyp21u1T7r45x/R/5QdteURMR5r01GxeJSBBUOCOyaNXA3g==", + "dependencies": { + "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.0", + "Microsoft.Extensions.Primitives": "8.0.0" + } + }, + "Microsoft.Extensions.Primitives": { + "type": "Transitive", + "resolved": "8.0.0", + "contentHash": "bXJEZrW9ny8vjMF1JV253WeLhpEVzFo1lyaZu1vQ4ZxWUlVvknZ/+ftFgVheLubb4eZPSwwxBeqS1JkCOjxd8g==" + }, + "System.Diagnostics.DiagnosticSource": { + "type": "Transitive", + "resolved": "8.0.0", + "contentHash": "c9xLpVz6PL9lp/djOWtk5KPDZq3cSYpmXoJQY524EOtuFl5z9ZtsotpsyrDW40U1DRnQSYvcPKEUV0X//u6gkQ==" + }, + "sonos.base": { + "type": "Project", + "dependencies": { + "Microsoft.Extensions.Http": "[8.0.0, )", + "Microsoft.Extensions.Logging.Abstractions": "[8.0.0, )" + } + } + }, + "net8.0": { + "Microsoft.Extensions.Hosting.Abstractions": { + "type": "Direct", + "requested": "[8.0.0, )", + "resolved": "8.0.0", + "contentHash": "AG7HWwVRdCHlaA++1oKDxLsXIBxmDpMPb3VoyOoAghEWnkUvEAdYQUwnV4jJbAaa/nMYNiEh5ByoLauZBEiovg==", "dependencies": { - "Microsoft.Extensions.Configuration.Abstractions": "7.0.0", - "Microsoft.Extensions.DependencyInjection.Abstractions": "7.0.0", - "Microsoft.Extensions.FileProviders.Abstractions": "7.0.0" + "Microsoft.Extensions.Configuration.Abstractions": "8.0.0", + "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.0", + "Microsoft.Extensions.Diagnostics.Abstractions": "8.0.0", + "Microsoft.Extensions.FileProviders.Abstractions": "8.0.0", + "Microsoft.Extensions.Logging.Abstractions": "8.0.0" + } + }, + "Microsoft.Extensions.Configuration": { + "type": "Transitive", + "resolved": "8.0.0", + "contentHash": "0J/9YNXTMWSZP2p2+nvl8p71zpSwokZXZuJW+VjdErkegAnFdO1XlqtA62SJtgVYHdKu3uPxJHcMR/r35HwFBA==", + "dependencies": { + "Microsoft.Extensions.Configuration.Abstractions": "8.0.0", + "Microsoft.Extensions.Primitives": "8.0.0" } }, "Microsoft.Extensions.Configuration.Abstractions": { "type": "Transitive", - "resolved": "7.0.0", - "contentHash": "f34u2eaqIjNO9YLHBz8rozVZ+TcFiFs0F3r7nUJd7FRkVSxk8u4OpoK226mi49MwexHOR2ibP9MFvRUaLilcQQ==", + "resolved": "8.0.0", + "contentHash": "3lE/iLSutpgX1CC0NOW70FJoGARRHbyKmG7dc0klnUZ9Dd9hS6N/POPWhKhMLCEuNN5nXEY5agmlFtH562vqhQ==", "dependencies": { - "Microsoft.Extensions.Primitives": "7.0.0" + "Microsoft.Extensions.Primitives": "8.0.0" + } + }, + "Microsoft.Extensions.Configuration.Binder": { + "type": "Transitive", + "resolved": "8.0.0", + "contentHash": "mBMoXLsr5s1y2zOHWmKsE9veDcx8h1x/c3rz4baEdQKTeDcmQAPNbB54Pi/lhFO3K431eEq6PFbMgLaa6PHFfA==", + "dependencies": { + "Microsoft.Extensions.Configuration.Abstractions": "8.0.0" } }, "Microsoft.Extensions.DependencyInjection": { "type": "Transitive", - "resolved": "7.0.0", - "contentHash": "elNeOmkeX3eDVG6pYVeV82p29hr+UKDaBhrZyWvWLw/EVZSYEkZlQdkp0V39k/Xehs2Qa0mvoCvkVj3eQxNQ1Q==", + "resolved": "8.0.0", + "contentHash": "V8S3bsm50ig6JSyrbcJJ8bW2b9QLGouz+G1miK3UTaOWmMtFwNNNzUf4AleyDWUmTrWMLNnFSLEQtxmxgNQnNQ==", "dependencies": { - "Microsoft.Extensions.DependencyInjection.Abstractions": "7.0.0" + "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.0" } }, "Microsoft.Extensions.DependencyInjection.Abstractions": { "type": "Transitive", - "resolved": "7.0.0", - "contentHash": "h3j/QfmFN4S0w4C2A6X7arXij/M/OVw3uQHSOFxnND4DyAzO1F9eMX7Eti7lU/OkSthEE0WzRsfT/Dmx86jzCw==" + "resolved": "8.0.0", + "contentHash": "cjWrLkJXK0rs4zofsK4bSdg+jhDLTaxrkXu4gS6Y7MAlCvRyNNgwY/lJi5RDlQOnSZweHqoyvgvbdvQsRIW+hg==" + }, + "Microsoft.Extensions.Diagnostics": { + "type": "Transitive", + "resolved": "8.0.0", + "contentHash": "3PZp/YSkIXrF7QK7PfC1bkyRYwqOHpWFad8Qx+4wkuumAeXo1NHaxpS9LboNA9OvNSAu+QOVlXbMyoY+pHSqcw==", + "dependencies": { + "Microsoft.Extensions.Configuration": "8.0.0", + "Microsoft.Extensions.Diagnostics.Abstractions": "8.0.0", + "Microsoft.Extensions.Options.ConfigurationExtensions": "8.0.0" + } + }, + "Microsoft.Extensions.Diagnostics.Abstractions": { + "type": "Transitive", + "resolved": "8.0.0", + "contentHash": "JHYCQG7HmugNYUhOl368g+NMxYE/N/AiclCYRNlgCY9eVyiBkOHMwK4x60RYMxv9EL3+rmj1mqHvdCiPpC+D4Q==", + "dependencies": { + "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.0", + "Microsoft.Extensions.Options": "8.0.0", + "System.Diagnostics.DiagnosticSource": "8.0.0" + } }, "Microsoft.Extensions.FileProviders.Abstractions": { "type": "Transitive", - "resolved": "7.0.0", - "contentHash": "NyawiW9ZT/liQb34k9YqBSNPLuuPkrjMgQZ24Y/xXX1RoiBkLUdPMaQTmxhZ5TYu8ZKZ9qayzil75JX95vGQUg==", + "resolved": "8.0.0", + "contentHash": "ZbaMlhJlpisjuWbvXr4LdAst/1XxH3vZ6A0BsgTphZ2L4PGuxRLz7Jr/S7mkAAnOn78Vu0fKhEgNF5JO3zfjqQ==", "dependencies": { - "Microsoft.Extensions.Primitives": "7.0.0" + "Microsoft.Extensions.Primitives": "8.0.0" } }, "Microsoft.Extensions.Http": { "type": "Transitive", - "resolved": "7.0.0", - "contentHash": "9Pq9f/CvOSz0t9yQa6g1uWpxa2sm13daLFm8EZwy9MaQUjKXWdNUXQwIxwhmba5N83UIqURiPHSNqGK1vfWF2w==", + "resolved": "8.0.0", + "contentHash": "cWz4caHwvx0emoYe7NkHPxII/KkTI8R/LC9qdqJqnKv2poTJ4e2qqPGQqvRoQ5kaSA4FU5IV3qFAuLuOhoqULQ==", "dependencies": { - "Microsoft.Extensions.DependencyInjection.Abstractions": "7.0.0", - "Microsoft.Extensions.Logging": "7.0.0", - "Microsoft.Extensions.Logging.Abstractions": "7.0.0", - "Microsoft.Extensions.Options": "7.0.0" + "Microsoft.Extensions.Configuration.Abstractions": "8.0.0", + "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.0", + "Microsoft.Extensions.Diagnostics": "8.0.0", + "Microsoft.Extensions.Logging": "8.0.0", + "Microsoft.Extensions.Logging.Abstractions": "8.0.0", + "Microsoft.Extensions.Options": "8.0.0" } }, "Microsoft.Extensions.Logging": { "type": "Transitive", - "resolved": "7.0.0", - "contentHash": "Nw2muoNrOG5U5qa2ZekXwudUn2BJcD41e65zwmDHb1fQegTX66UokLWZkJRpqSSHXDOWZ5V0iqhbxOEky91atA==", + "resolved": "8.0.0", + "contentHash": "tvRkov9tAJ3xP51LCv3FJ2zINmv1P8Hi8lhhtcKGqM+ImiTCC84uOPEI4z8Cdq2C3o9e+Aa0Gw0rmrsJD77W+w==", "dependencies": { - "Microsoft.Extensions.DependencyInjection": "7.0.0", - "Microsoft.Extensions.DependencyInjection.Abstractions": "7.0.0", - "Microsoft.Extensions.Logging.Abstractions": "7.0.0", - "Microsoft.Extensions.Options": "7.0.0" + "Microsoft.Extensions.DependencyInjection": "8.0.0", + "Microsoft.Extensions.Logging.Abstractions": "8.0.0", + "Microsoft.Extensions.Options": "8.0.0" } }, "Microsoft.Extensions.Logging.Abstractions": { "type": "Transitive", - "resolved": "7.0.1", - "contentHash": "pkeBFx0vqMW/A3aUVHh7MPu3WkBhaVlezhSZeb1c9XD0vUReYH1TLFSy5MxJgZfmz5LZzYoErMorlYZiwpOoNA==" + "resolved": "8.0.0", + "contentHash": "arDBqTgFCyS0EvRV7O3MZturChstm50OJ0y9bDJvAcmEPJm0FFpFyjU/JLYyStNGGey081DvnQYlncNX5SJJGA==", + "dependencies": { + "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.0" + } }, "Microsoft.Extensions.Options": { "type": "Transitive", - "resolved": "7.0.0", - "contentHash": "lP1yBnTTU42cKpMozuafbvNtQ7QcBjr/CcK3bYOGEMH55Fjt+iecXjT6chR7vbgCMqy3PG3aNQSZgo/EuY/9qQ==", + "resolved": "8.0.0", + "contentHash": "JOVOfqpnqlVLUzINQ2fox8evY2SKLYJ3BV8QDe/Jyp21u1T7r45x/R/5QdteURMR5r01GxeJSBBUOCOyaNXA3g==", + "dependencies": { + "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.0", + "Microsoft.Extensions.Primitives": "8.0.0" + } + }, + "Microsoft.Extensions.Options.ConfigurationExtensions": { + "type": "Transitive", + "resolved": "8.0.0", + "contentHash": "0f4DMRqEd50zQh+UyJc+/HiBsZ3vhAQALgdkcQEalSH1L2isdC7Yj54M3cyo5e+BeO5fcBQ7Dxly8XiBBcvRgw==", "dependencies": { - "Microsoft.Extensions.DependencyInjection.Abstractions": "7.0.0", - "Microsoft.Extensions.Primitives": "7.0.0" + "Microsoft.Extensions.Configuration.Abstractions": "8.0.0", + "Microsoft.Extensions.Configuration.Binder": "8.0.0", + "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.0", + "Microsoft.Extensions.Options": "8.0.0", + "Microsoft.Extensions.Primitives": "8.0.0" } }, "Microsoft.Extensions.Primitives": { "type": "Transitive", - "resolved": "7.0.0", - "contentHash": "um1KU5kxcRp3CNuI8o/GrZtD4AIOXDk+RLsytjZ9QPok3ttLUelLKpilVPuaFT3TFjOhSibUAso0odbOaCDj3Q==" + "resolved": "8.0.0", + "contentHash": "bXJEZrW9ny8vjMF1JV253WeLhpEVzFo1lyaZu1vQ4ZxWUlVvknZ/+ftFgVheLubb4eZPSwwxBeqS1JkCOjxd8g==" + }, + "System.Diagnostics.DiagnosticSource": { + "type": "Transitive", + "resolved": "8.0.0", + "contentHash": "c9xLpVz6PL9lp/djOWtk5KPDZq3cSYpmXoJQY524EOtuFl5z9ZtsotpsyrDW40U1DRnQSYvcPKEUV0X//u6gkQ==" }, "sonos.base": { "type": "Project", "dependencies": { - "Microsoft.Extensions.Http": "[7.0.0, )", - "Microsoft.Extensions.Logging.Abstractions": "[7.0.1, )" + "Microsoft.Extensions.Http": "[8.0.0, )", + "Microsoft.Extensions.Logging.Abstractions": "[8.0.0, )" } } } diff --git a/src/Sonos.Base/Internal/SonosWebSocket.cs b/src/Sonos.Base/Internal/SonosWebSocket.cs index 26aadc6..8acf59a 100644 --- a/src/Sonos.Base/Internal/SonosWebSocket.cs +++ b/src/Sonos.Base/Internal/SonosWebSocket.cs @@ -17,13 +17,14 @@ internal SonosWebSocket(SonosServiceOptions serviceOptions) { this.webSocket = new ClientWebSocket(); this.options = serviceOptions; + + webSocket.Options.AddSubProtocol(SubProtocol); + webSocket.Options.SetRequestHeader("X-Sonos-Api-Key", ApiKey); #if NET6_0_OR_GREATER webSocket.Options.RemoteCertificateValidationCallback = (sender, certificate, chain, sslPolicyErrors) => true; #else throw new NotImplementedException("Sonos has a Self-Signed certificate for the websocket, and RemoteCertificateValidationCallback is unavailable on your platform"); #endif - webSocket.Options.AddSubProtocol(SubProtocol); - webSocket.Options.SetRequestHeader("X-Sonos-Api-Key", ApiKey); } internal Task ConnectAsync(CancellationToken cancellationToken) diff --git a/src/Sonos.Base/Models/DeviceDescription.cs b/src/Sonos.Base/Models/DeviceDescription.cs new file mode 100644 index 0000000..1440268 --- /dev/null +++ b/src/Sonos.Base/Models/DeviceDescription.cs @@ -0,0 +1,1361 @@ +namespace Sonos.Base.Models; + + +// NOTE: Generated code may require at least .NET Framework 4.5 or .NET Core/Standard 2.0. +/// +[System.Serializable()] +[System.ComponentModel.DesignerCategory("code")] +[System.Xml.Serialization.XmlType("root", AnonymousType = true, Namespace = "urn:schemas-upnp-org:device-1-0")] +[System.Xml.Serialization.XmlRoot("root", Namespace = "urn:schemas-upnp-org:device-1-0", IsNullable = false)] +public partial class SonosDeviceDescription +{ + + private rootSpecVersion specVersionField; + + private rootDevice deviceField; + + /// + public rootSpecVersion specVersion + { + get + { + return this.specVersionField; + } + set + { + this.specVersionField = value; + } + } + + /// + public rootDevice device + { + get + { + return this.deviceField; + } + set + { + this.deviceField = value; + } + } +} + +/// +[System.Serializable()] +[System.ComponentModel.DesignerCategory("code")] +[System.Xml.Serialization.XmlType(AnonymousType = true, Namespace = "urn:schemas-upnp-org:device-1-0")] +public partial class rootSpecVersion +{ + + private byte majorField; + + private byte minorField; + + /// + public byte major + { + get + { + return this.majorField; + } + set + { + this.majorField = value; + } + } + + /// + public byte minor + { + get + { + return this.minorField; + } + set + { + this.minorField = value; + } + } +} + +/// +[System.Serializable()] +[System.ComponentModel.DesignerCategory("code")] +[System.Xml.Serialization.XmlType(AnonymousType = true, Namespace = "urn:schemas-upnp-org:device-1-0")] +public partial class rootDevice +{ + + private string deviceTypeField; + + private string friendlyNameField; + + private string manufacturerField; + + private string manufacturerURLField; + + private string modelNumberField; + + private string modelDescriptionField; + + private string modelNameField; + + private string modelURLField; + + private string softwareVersionField; + + private byte swGenField; + + private string hardwareVersionField; + + private string serialNumField; + + private string mACAddressField; + + private string uDNField; + + private rootDeviceIconList iconListField; + + private string minCompatibleVersionField; + + private string legacyCompatibleVersionField; + + private string apiVersionField; + + private string minApiVersionField; + + private decimal displayVersionField; + + private object extraVersionField; + + private byte nsVersionField; + + private string roomNameField; + + private string displayNameField; + + private byte zoneTypeField; + + private string feature1Field; + + private string feature2Field; + + private string feature3Field; + + private string seriesidField; + + private byte variantField; + + private byte internalSpeakerSizeField; + + private ushort memoryField; + + private ushort flashField; + + private int ampOnTimeField; + + private int retailModeField; + + private ushort sSLPortField; + + private ushort securehhSSLPortField; + + private rootDeviceService[] serviceListField; + + private rootDeviceDevice[] deviceListField; + + /// + public string deviceType + { + get + { + return this.deviceTypeField; + } + set + { + this.deviceTypeField = value; + } + } + + /// + public string friendlyName + { + get + { + return this.friendlyNameField; + } + set + { + this.friendlyNameField = value; + } + } + + /// + public string manufacturer + { + get + { + return this.manufacturerField; + } + set + { + this.manufacturerField = value; + } + } + + /// + public string manufacturerURL + { + get + { + return this.manufacturerURLField; + } + set + { + this.manufacturerURLField = value; + } + } + + /// + public string modelNumber + { + get + { + return this.modelNumberField; + } + set + { + this.modelNumberField = value; + } + } + + /// + public string modelDescription + { + get + { + return this.modelDescriptionField; + } + set + { + this.modelDescriptionField = value; + } + } + + /// + public string modelName + { + get + { + return this.modelNameField; + } + set + { + this.modelNameField = value; + } + } + + /// + public string modelURL + { + get + { + return this.modelURLField; + } + set + { + this.modelURLField = value; + } + } + + /// + public string softwareVersion + { + get + { + return this.softwareVersionField; + } + set + { + this.softwareVersionField = value; + } + } + + /// + public byte swGen + { + get + { + return this.swGenField; + } + set + { + this.swGenField = value; + } + } + + /// + public string hardwareVersion + { + get + { + return this.hardwareVersionField; + } + set + { + this.hardwareVersionField = value; + } + } + + /// + public string serialNum + { + get + { + return this.serialNumField; + } + set + { + this.serialNumField = value; + } + } + + /// + public string MACAddress + { + get + { + return this.mACAddressField; + } + set + { + this.mACAddressField = value; + } + } + + /// + public string UDN + { + get + { + return this.uDNField; + } + set + { + this.uDNField = value; + } + } + + /// + public rootDeviceIconList iconList + { + get + { + return this.iconListField; + } + set + { + this.iconListField = value; + } + } + + /// + public string minCompatibleVersion + { + get + { + return this.minCompatibleVersionField; + } + set + { + this.minCompatibleVersionField = value; + } + } + + /// + public string legacyCompatibleVersion + { + get + { + return this.legacyCompatibleVersionField; + } + set + { + this.legacyCompatibleVersionField = value; + } + } + + /// + public string apiVersion + { + get + { + return this.apiVersionField; + } + set + { + this.apiVersionField = value; + } + } + + /// + public string minApiVersion + { + get + { + return this.minApiVersionField; + } + set + { + this.minApiVersionField = value; + } + } + + /// + public decimal displayVersion + { + get + { + return this.displayVersionField; + } + set + { + this.displayVersionField = value; + } + } + + /// + public object extraVersion + { + get + { + return this.extraVersionField; + } + set + { + this.extraVersionField = value; + } + } + + /// + public byte nsVersion + { + get + { + return this.nsVersionField; + } + set + { + this.nsVersionField = value; + } + } + + /// + public string roomName + { + get + { + return this.roomNameField; + } + set + { + this.roomNameField = value; + } + } + + /// + public string displayName + { + get + { + return this.displayNameField; + } + set + { + this.displayNameField = value; + } + } + + /// + public byte zoneType + { + get + { + return this.zoneTypeField; + } + set + { + this.zoneTypeField = value; + } + } + + /// + public string feature1 + { + get + { + return this.feature1Field; + } + set + { + this.feature1Field = value; + } + } + + /// + public string feature2 + { + get + { + return this.feature2Field; + } + set + { + this.feature2Field = value; + } + } + + /// + public string feature3 + { + get + { + return this.feature3Field; + } + set + { + this.feature3Field = value; + } + } + + /// + public string seriesid + { + get + { + return this.seriesidField; + } + set + { + this.seriesidField = value; + } + } + + /// + public byte variant + { + get + { + return this.variantField; + } + set + { + this.variantField = value; + } + } + + /// + public byte internalSpeakerSize + { + get + { + return this.internalSpeakerSizeField; + } + set + { + this.internalSpeakerSizeField = value; + } + } + + /// + public ushort memory + { + get + { + return this.memoryField; + } + set + { + this.memoryField = value; + } + } + + /// + public ushort flash + { + get + { + return this.flashField; + } + set + { + this.flashField = value; + } + } + + /// + public int ampOnTime + { + get + { + return this.ampOnTimeField; + } + set + { + this.ampOnTimeField = value; + } + } + + /// + public int retailMode + { + get + { + return this.retailModeField; + } + set + { + this.retailModeField = value; + } + } + + /// + public ushort SSLPort + { + get + { + return this.sSLPortField; + } + set + { + this.sSLPortField = value; + } + } + + /// + public ushort securehhSSLPort + { + get + { + return this.securehhSSLPortField; + } + set + { + this.securehhSSLPortField = value; + } + } + + /// + [System.Xml.Serialization.XmlArrayItem("service", IsNullable = false)] + public rootDeviceService[] serviceList + { + get + { + return this.serviceListField; + } + set + { + this.serviceListField = value; + } + } + + /// + [System.Xml.Serialization.XmlArrayItem("device", IsNullable = false)] + public rootDeviceDevice[] deviceList + { + get + { + return this.deviceListField; + } + set + { + this.deviceListField = value; + } + } +} + +/// +[System.Serializable()] +[System.ComponentModel.DesignerCategory("code")] +[System.Xml.Serialization.XmlType(AnonymousType = true, Namespace = "urn:schemas-upnp-org:device-1-0")] +public partial class rootDeviceIconList +{ + + private rootDeviceIconListIcon iconField; + + /// + public rootDeviceIconListIcon icon + { + get + { + return this.iconField; + } + set + { + this.iconField = value; + } + } +} + +/// +[System.Serializable()] +[System.ComponentModel.DesignerCategory("code")] +[System.Xml.Serialization.XmlType(AnonymousType = true, Namespace = "urn:schemas-upnp-org:device-1-0")] +public partial class rootDeviceIconListIcon +{ + + private byte idField; + + private string mimetypeField; + + private byte widthField; + + private byte heightField; + + private byte depthField; + + private string urlField; + + /// + public byte id + { + get + { + return this.idField; + } + set + { + this.idField = value; + } + } + + /// + public string mimetype + { + get + { + return this.mimetypeField; + } + set + { + this.mimetypeField = value; + } + } + + /// + public byte width + { + get + { + return this.widthField; + } + set + { + this.widthField = value; + } + } + + /// + public byte height + { + get + { + return this.heightField; + } + set + { + this.heightField = value; + } + } + + /// + public byte depth + { + get + { + return this.depthField; + } + set + { + this.depthField = value; + } + } + + /// + public string url + { + get + { + return this.urlField; + } + set + { + this.urlField = value; + } + } +} + +/// +[System.Serializable()] +[System.ComponentModel.DesignerCategory("code")] +[System.Xml.Serialization.XmlType(AnonymousType = true, Namespace = "urn:schemas-upnp-org:device-1-0")] +public partial class rootDeviceService +{ + + private string serviceTypeField; + + private string serviceIdField; + + private string controlURLField; + + private string eventSubURLField; + + private string sCPDURLField; + + /// + public string serviceType + { + get + { + return this.serviceTypeField; + } + set + { + this.serviceTypeField = value; + } + } + + /// + public string serviceId + { + get + { + return this.serviceIdField; + } + set + { + this.serviceIdField = value; + } + } + + /// + public string controlURL + { + get + { + return this.controlURLField; + } + set + { + this.controlURLField = value; + } + } + + /// + public string eventSubURL + { + get + { + return this.eventSubURLField; + } + set + { + this.eventSubURLField = value; + } + } + + /// + public string SCPDURL + { + get + { + return this.sCPDURLField; + } + set + { + this.sCPDURLField = value; + } + } +} + +/// +[System.Serializable()] +[System.ComponentModel.DesignerCategory("code")] +[System.Xml.Serialization.XmlType(AnonymousType = true, Namespace = "urn:schemas-upnp-org:device-1-0")] +public partial class rootDeviceDevice +{ + + private string deviceTypeField; + + private string friendlyNameField; + + private string manufacturerField; + + private string manufacturerURLField; + + private string modelNumberField; + + private string modelDescriptionField; + + private string modelNameField; + + private string modelURLField; + + private string uDNField; + + private rootDeviceDeviceService[] serviceListField; + + private X_RhapsodyExtension x_RhapsodyExtensionField; + + private string x_QPlay_SoftwareCapabilityField; + + private rootDeviceDeviceIconList iconListField; + + /// + public string deviceType + { + get + { + return this.deviceTypeField; + } + set + { + this.deviceTypeField = value; + } + } + + /// + public string friendlyName + { + get + { + return this.friendlyNameField; + } + set + { + this.friendlyNameField = value; + } + } + + /// + public string manufacturer + { + get + { + return this.manufacturerField; + } + set + { + this.manufacturerField = value; + } + } + + /// + public string manufacturerURL + { + get + { + return this.manufacturerURLField; + } + set + { + this.manufacturerURLField = value; + } + } + + /// + public string modelNumber + { + get + { + return this.modelNumberField; + } + set + { + this.modelNumberField = value; + } + } + + /// + public string modelDescription + { + get + { + return this.modelDescriptionField; + } + set + { + this.modelDescriptionField = value; + } + } + + /// + public string modelName + { + get + { + return this.modelNameField; + } + set + { + this.modelNameField = value; + } + } + + /// + public string modelURL + { + get + { + return this.modelURLField; + } + set + { + this.modelURLField = value; + } + } + + /// + public string UDN + { + get + { + return this.uDNField; + } + set + { + this.uDNField = value; + } + } + + /// + [System.Xml.Serialization.XmlArrayItem("service", IsNullable = false)] + public rootDeviceDeviceService[] serviceList + { + get + { + return this.serviceListField; + } + set + { + this.serviceListField = value; + } + } + + /// + [System.Xml.Serialization.XmlElement("X_Rhapsody-Extension", Namespace = "http://www.real.com/rhapsody/xmlns/upnp-1-0")] + public X_RhapsodyExtension X_RhapsodyExtension + { + get + { + return this.x_RhapsodyExtensionField; + } + set + { + this.x_RhapsodyExtensionField = value; + } + } + + /// + [System.Xml.Serialization.XmlElement(Namespace = "http://www.tencent.com")] + public string X_QPlay_SoftwareCapability + { + get + { + return this.x_QPlay_SoftwareCapabilityField; + } + set + { + this.x_QPlay_SoftwareCapabilityField = value; + } + } + + /// + public rootDeviceDeviceIconList iconList + { + get + { + return this.iconListField; + } + set + { + this.iconListField = value; + } + } +} + +/// +[System.Serializable()] +[System.ComponentModel.DesignerCategory("code")] +[System.Xml.Serialization.XmlType(AnonymousType = true, Namespace = "urn:schemas-upnp-org:device-1-0")] +public partial class rootDeviceDeviceService +{ + + private string serviceTypeField; + + private string serviceIdField; + + private string controlURLField; + + private string eventSubURLField; + + private string sCPDURLField; + + /// + public string serviceType + { + get + { + return this.serviceTypeField; + } + set + { + this.serviceTypeField = value; + } + } + + /// + public string serviceId + { + get + { + return this.serviceIdField; + } + set + { + this.serviceIdField = value; + } + } + + /// + public string controlURL + { + get + { + return this.controlURLField; + } + set + { + this.controlURLField = value; + } + } + + /// + public string eventSubURL + { + get + { + return this.eventSubURLField; + } + set + { + this.eventSubURLField = value; + } + } + + /// + public string SCPDURL + { + get + { + return this.sCPDURLField; + } + set + { + this.sCPDURLField = value; + } + } +} + +/// +[System.Serializable()] +[System.ComponentModel.DesignerCategory("code")] +[System.Xml.Serialization.XmlType(AnonymousType = true, Namespace = "http://www.real.com/rhapsody/xmlns/upnp-1-0")] +[System.Xml.Serialization.XmlRoot("X_Rhapsody-Extension", Namespace = "http://www.real.com/rhapsody/xmlns/upnp-1-0", IsNullable = false)] +public partial class X_RhapsodyExtension +{ + + private string deviceIDField; + + private X_RhapsodyExtensionDeviceCapabilities deviceCapabilitiesField; + + /// + public string deviceID + { + get + { + return this.deviceIDField; + } + set + { + this.deviceIDField = value; + } + } + + /// + public X_RhapsodyExtensionDeviceCapabilities deviceCapabilities + { + get + { + return this.deviceCapabilitiesField; + } + set + { + this.deviceCapabilitiesField = value; + } + } +} + +/// +[System.Serializable()] +[System.ComponentModel.DesignerCategory("code")] +[System.Xml.Serialization.XmlType(AnonymousType = true, Namespace = "http://www.real.com/rhapsody/xmlns/upnp-1-0")] +public partial class X_RhapsodyExtensionDeviceCapabilities +{ + + private X_RhapsodyExtensionDeviceCapabilitiesInteractionPattern interactionPatternField; + + /// + public X_RhapsodyExtensionDeviceCapabilitiesInteractionPattern interactionPattern + { + get + { + return this.interactionPatternField; + } + set + { + this.interactionPatternField = value; + } + } +} + +/// +[System.Serializable()] +[System.ComponentModel.DesignerCategory("code")] +[System.Xml.Serialization.XmlType(AnonymousType = true, Namespace = "http://www.real.com/rhapsody/xmlns/upnp-1-0")] +public partial class X_RhapsodyExtensionDeviceCapabilitiesInteractionPattern +{ + + private string typeField; + + /// + [System.Xml.Serialization.XmlAttribute()] + public string type + { + get + { + return this.typeField; + } + set + { + this.typeField = value; + } + } +} + +/// +[System.Serializable()] +[System.ComponentModel.DesignerCategory("code")] +[System.Xml.Serialization.XmlType(AnonymousType = true, Namespace = "urn:schemas-upnp-org:device-1-0")] +public partial class rootDeviceDeviceIconList +{ + + private rootDeviceDeviceIconListIcon iconField; + + /// + public rootDeviceDeviceIconListIcon icon + { + get + { + return this.iconField; + } + set + { + this.iconField = value; + } + } +} + +/// +[System.Serializable()] +[System.ComponentModel.DesignerCategory("code")] +[System.Xml.Serialization.XmlType(AnonymousType = true, Namespace = "urn:schemas-upnp-org:device-1-0")] +public partial class rootDeviceDeviceIconListIcon +{ + + private string mimetypeField; + + private byte widthField; + + private byte heightField; + + private byte depthField; + + private string urlField; + + /// + public string mimetype + { + get + { + return this.mimetypeField; + } + set + { + this.mimetypeField = value; + } + } + + /// + public byte width + { + get + { + return this.widthField; + } + set + { + this.widthField = value; + } + } + + /// + public byte height + { + get + { + return this.heightField; + } + set + { + this.heightField = value; + } + } + + /// + public byte depth + { + get + { + return this.depthField; + } + set + { + this.depthField = value; + } + } + + /// + public string url + { + get + { + return this.urlField; + } + set + { + this.urlField = value; + } + } +} + diff --git a/src/Sonos.Base/Services/AVTransportService.cs b/src/Sonos.Base/Services/AVTransportService.cs index 36f02ca..04334ee 100644 --- a/src/Sonos.Base/Services/AVTransportService.cs +++ b/src/Sonos.Base/Services/AVTransportService.cs @@ -8,6 +8,10 @@ namespace Sonos.Base.Services { public partial class AVTransportService { - public Task Play(CancellationToken cancellationToken = default) => Play(new PlayRequest { Speed = "1" }, cancellationToken); + public Task PlayAsync(CancellationToken cancellationToken = default) => PlayAsync(new PlayRequest { Speed = "1" }, cancellationToken); + + [Obsolete("Use PlayAsync instead")] + [System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)] + public Task Play(CancellationToken cancellationToken = default) => PlayAsync(cancellationToken); } } diff --git a/src/Sonos.Base/Services/AVTransportService.gen.cs b/src/Sonos.Base/Services/AVTransportService.gen.cs index c4673d6..dbc8714 100644 --- a/src/Sonos.Base/Services/AVTransportService.gen.cs +++ b/src/Sonos.Base/Services/AVTransportService.gen.cs @@ -38,337 +38,337 @@ public AVTransportService(SonosServiceOptions options) : base(SonosService.AVTra /// /// AddMultipleURIsToQueue /// - /// Body payload - /// CancellationToken + /// payload + /// /// AddMultipleURIsToQueueResponse - public Task AddMultipleURIsToQueue(AddMultipleURIsToQueueRequest request, CancellationToken cancellationToken = default) => ExecuteRequest(request, cancellationToken); + public Task AddMultipleURIsToQueueAsync(AddMultipleURIsToQueueRequest request, CancellationToken cancellationToken = default) => ExecuteRequestAsync(request, cancellationToken, "AddMultipleURIsToQueue"); /// /// Adds songs to the SONOS queue /// - /// Body payload - /// CancellationToken + /// payload + /// /// In NORMAL play mode the songs are added prior to the specified `DesiredFirstTrackNumberEnqueued`. /// AddURIToQueueResponse - public Task AddURIToQueue(AddURIToQueueRequest request, CancellationToken cancellationToken = default) => ExecuteRequest(request, cancellationToken); + public Task AddURIToQueueAsync(AddURIToQueueRequest request, CancellationToken cancellationToken = default) => ExecuteRequestAsync(request, cancellationToken, "AddURIToQueue"); /// /// AddURIToSavedQueue /// - /// Body payload - /// CancellationToken + /// payload + /// /// AddURIToSavedQueueResponse - public Task AddURIToSavedQueue(AddURIToSavedQueueRequest request, CancellationToken cancellationToken = default) => ExecuteRequest(request, cancellationToken); + public Task AddURIToSavedQueueAsync(AddURIToSavedQueueRequest request, CancellationToken cancellationToken = default) => ExecuteRequestAsync(request, cancellationToken, "AddURIToSavedQueue"); /// /// BackupQueue /// - /// CancellationToken + /// /// Success boolean - public Task BackupQueue(CancellationToken cancellationToken = default) => ExecuteRequest(new BackupQueueRequest(), cancellationToken); + public Task BackupQueueAsync(CancellationToken cancellationToken = default) => ExecuteRequestAsync(new BackupQueueRequest(), cancellationToken, "BackupQueue"); /// /// Leave the current group and revert to a single player. /// - /// CancellationToken + /// /// BecomeCoordinatorOfStandaloneGroupResponse - public Task BecomeCoordinatorOfStandaloneGroup(CancellationToken cancellationToken = default) => ExecuteRequest(new BecomeCoordinatorOfStandaloneGroupRequest(), cancellationToken); + public Task BecomeCoordinatorOfStandaloneGroupAsync(CancellationToken cancellationToken = default) => ExecuteRequestAsync(new BecomeCoordinatorOfStandaloneGroupRequest(), cancellationToken, "BecomeCoordinatorOfStandaloneGroup"); /// /// BecomeGroupCoordinator /// - /// Body payload - /// CancellationToken + /// payload + /// /// Success boolean - public Task BecomeGroupCoordinator(BecomeGroupCoordinatorRequest request, CancellationToken cancellationToken = default) => ExecuteRequest(request, cancellationToken); + public Task BecomeGroupCoordinatorAsync(BecomeGroupCoordinatorRequest request, CancellationToken cancellationToken = default) => ExecuteRequestAsync(request, cancellationToken, "BecomeGroupCoordinator"); /// /// BecomeGroupCoordinatorAndSource /// - /// Body payload - /// CancellationToken + /// payload + /// /// Success boolean - public Task BecomeGroupCoordinatorAndSource(BecomeGroupCoordinatorAndSourceRequest request, CancellationToken cancellationToken = default) => ExecuteRequest(request, cancellationToken); + public Task BecomeGroupCoordinatorAndSourceAsync(BecomeGroupCoordinatorAndSourceRequest request, CancellationToken cancellationToken = default) => ExecuteRequestAsync(request, cancellationToken, "BecomeGroupCoordinatorAndSource"); /// /// ChangeCoordinator /// - /// Body payload - /// CancellationToken + /// payload + /// /// Success boolean - public Task ChangeCoordinator(ChangeCoordinatorRequest request, CancellationToken cancellationToken = default) => ExecuteRequest(request, cancellationToken); + public Task ChangeCoordinatorAsync(ChangeCoordinatorRequest request, CancellationToken cancellationToken = default) => ExecuteRequestAsync(request, cancellationToken, "ChangeCoordinator"); /// /// ChangeTransportSettings /// - /// Body payload - /// CancellationToken + /// payload + /// /// Success boolean - public Task ChangeTransportSettings(ChangeTransportSettingsRequest request, CancellationToken cancellationToken = default) => ExecuteRequest(request, cancellationToken); + public Task ChangeTransportSettingsAsync(ChangeTransportSettingsRequest request, CancellationToken cancellationToken = default) => ExecuteRequestAsync(request, cancellationToken, "ChangeTransportSettings"); /// /// Stop playing after set sleep timer or cancel /// - /// Body payload - /// CancellationToken + /// payload + /// /// Send to non-coordinator returns error code 800 /// Success boolean - public Task ConfigureSleepTimer(ConfigureSleepTimerRequest request, CancellationToken cancellationToken = default) => ExecuteRequest(request, cancellationToken); + public Task ConfigureSleepTimerAsync(ConfigureSleepTimerRequest request, CancellationToken cancellationToken = default) => ExecuteRequestAsync(request, cancellationToken, "ConfigureSleepTimer"); /// /// CreateSavedQueue /// - /// Body payload - /// CancellationToken + /// payload + /// /// CreateSavedQueueResponse - public Task CreateSavedQueue(CreateSavedQueueRequest request, CancellationToken cancellationToken = default) => ExecuteRequest(request, cancellationToken); + public Task CreateSavedQueueAsync(CreateSavedQueueRequest request, CancellationToken cancellationToken = default) => ExecuteRequestAsync(request, cancellationToken, "CreateSavedQueue"); /// /// Delegates the coordinator role to another player in the same group /// - /// Body payload - /// CancellationToken + /// payload + /// /// Send to non-coordinator has no results - should be avoided. /// Success boolean - public Task DelegateGroupCoordinationTo(DelegateGroupCoordinationToRequest request, CancellationToken cancellationToken = default) => ExecuteRequest(request, cancellationToken); + public Task DelegateGroupCoordinationToAsync(DelegateGroupCoordinationToRequest request, CancellationToken cancellationToken = default) => ExecuteRequestAsync(request, cancellationToken, "DelegateGroupCoordinationTo"); /// /// EndDirectControlSession /// - /// CancellationToken + /// /// Success boolean - public Task EndDirectControlSession(CancellationToken cancellationToken = default) => ExecuteRequest(new EndDirectControlSessionRequest(), cancellationToken); + public Task EndDirectControlSessionAsync(CancellationToken cancellationToken = default) => ExecuteRequestAsync(new EndDirectControlSessionRequest(), cancellationToken, "EndDirectControlSession"); /// /// Get crossfade mode /// - /// CancellationToken + /// /// Send to non-coordinator may return wrong value as only the coordinator value in a group /// GetCrossfadeModeResponse - public Task GetCrossfadeMode(CancellationToken cancellationToken = default) => ExecuteRequest(new GetCrossfadeModeRequest(), cancellationToken); + public Task GetCrossfadeModeAsync(CancellationToken cancellationToken = default) => ExecuteRequestAsync(new GetCrossfadeModeRequest(), cancellationToken, "GetCrossfadeMode"); /// /// Get current transport actions such as Set, Stop, Pause, Play, X_DLNA_SeekTime, Next, X_DLNA_SeekTrackNr /// - /// CancellationToken + /// /// Send to non-coordinator returns only `Start` and `Stop` since it cannot control the stream. /// GetCurrentTransportActionsResponse - public Task GetCurrentTransportActions(CancellationToken cancellationToken = default) => ExecuteRequest(new GetCurrentTransportActionsRequest(), cancellationToken); + public Task GetCurrentTransportActionsAsync(CancellationToken cancellationToken = default) => ExecuteRequestAsync(new GetCurrentTransportActionsRequest(), cancellationToken, "GetCurrentTransportActions"); /// /// GetDeviceCapabilities /// - /// CancellationToken + /// /// GetDeviceCapabilitiesResponse - public Task GetDeviceCapabilities(CancellationToken cancellationToken = default) => ExecuteRequest(new GetDeviceCapabilitiesRequest(), cancellationToken); + public Task GetDeviceCapabilitiesAsync(CancellationToken cancellationToken = default) => ExecuteRequestAsync(new GetDeviceCapabilitiesRequest(), cancellationToken, "GetDeviceCapabilities"); /// /// Get information about the current playing media (queue) /// - /// CancellationToken + /// /// GetMediaInfoResponse - public Task GetMediaInfo(CancellationToken cancellationToken = default) => ExecuteRequest(new GetMediaInfoRequest(), cancellationToken); + public Task GetMediaInfoAsync(CancellationToken cancellationToken = default) => ExecuteRequestAsync(new GetMediaInfoRequest(), cancellationToken, "GetMediaInfo"); /// /// Get information about current position (position in queue and time in current song) /// - /// CancellationToken + /// /// GetPositionInfoResponse - public Task GetPositionInfo(CancellationToken cancellationToken = default) => ExecuteRequest(new GetPositionInfoRequest(), cancellationToken); + public Task GetPositionInfoAsync(CancellationToken cancellationToken = default) => ExecuteRequestAsync(new GetPositionInfoRequest(), cancellationToken, "GetPositionInfo"); /// /// Get time left on sleeptimer. /// - /// CancellationToken + /// /// Send to non-coordinator returns error code 800 /// GetRemainingSleepTimerDurationResponse - public Task GetRemainingSleepTimerDuration(CancellationToken cancellationToken = default) => ExecuteRequest(new GetRemainingSleepTimerDurationRequest(), cancellationToken); + public Task GetRemainingSleepTimerDurationAsync(CancellationToken cancellationToken = default) => ExecuteRequestAsync(new GetRemainingSleepTimerDurationRequest(), cancellationToken, "GetRemainingSleepTimerDuration"); /// /// GetRunningAlarmProperties /// - /// CancellationToken + /// /// GetRunningAlarmPropertiesResponse - public Task GetRunningAlarmProperties(CancellationToken cancellationToken = default) => ExecuteRequest(new GetRunningAlarmPropertiesRequest(), cancellationToken); + public Task GetRunningAlarmPropertiesAsync(CancellationToken cancellationToken = default) => ExecuteRequestAsync(new GetRunningAlarmPropertiesRequest(), cancellationToken, "GetRunningAlarmProperties"); /// /// Get current transport status, speed and state such as PLAYING, STOPPED, PLAYING, PAUSED_PLAYBACK, TRANSITIONING, NO_MEDIA_PRESENT /// - /// CancellationToken + /// /// Send to non-coordinator always returns PLAYING /// GetTransportInfoResponse - public Task GetTransportInfo(CancellationToken cancellationToken = default) => ExecuteRequest(new GetTransportInfoRequest(), cancellationToken); + public Task GetTransportInfoAsync(CancellationToken cancellationToken = default) => ExecuteRequestAsync(new GetTransportInfoRequest(), cancellationToken, "GetTransportInfo"); /// /// Get transport settings /// - /// CancellationToken + /// /// Send to non-coordinator returns the settings of it's queue /// GetTransportSettingsResponse - public Task GetTransportSettings(CancellationToken cancellationToken = default) => ExecuteRequest(new GetTransportSettingsRequest(), cancellationToken); + public Task GetTransportSettingsAsync(CancellationToken cancellationToken = default) => ExecuteRequestAsync(new GetTransportSettingsRequest(), cancellationToken, "GetTransportSettings"); /// /// Go to next song /// - /// CancellationToken + /// /// Possibly not supported at the moment see GetCurrentTransportActions /// Success boolean - public Task Next(CancellationToken cancellationToken = default) => ExecuteRequest(new NextRequest(), cancellationToken); + public Task NextAsync(CancellationToken cancellationToken = default) => ExecuteRequestAsync(new NextRequest(), cancellationToken, "Next"); /// /// NotifyDeletedURI /// - /// Body payload - /// CancellationToken + /// payload + /// /// Success boolean - public Task NotifyDeletedURI(NotifyDeletedURIRequest request, CancellationToken cancellationToken = default) => ExecuteRequest(request, cancellationToken); + public Task NotifyDeletedURIAsync(NotifyDeletedURIRequest request, CancellationToken cancellationToken = default) => ExecuteRequestAsync(request, cancellationToken, "NotifyDeletedURI"); /// /// Pause playback /// - /// CancellationToken + /// /// Success boolean - public Task Pause(CancellationToken cancellationToken = default) => ExecuteRequest(new PauseRequest(), cancellationToken); + public Task PauseAsync(CancellationToken cancellationToken = default) => ExecuteRequestAsync(new PauseRequest(), cancellationToken, "Pause"); /// /// Start playing the set TransportURI /// - /// Body payload - /// CancellationToken + /// payload + /// /// Success boolean - public Task Play(PlayRequest request, CancellationToken cancellationToken = default) => ExecuteRequest(request, cancellationToken); + public Task PlayAsync(PlayRequest request, CancellationToken cancellationToken = default) => ExecuteRequestAsync(request, cancellationToken, "Play"); /// /// Go to previous song /// - /// CancellationToken + /// /// Possibly not supported at the moment see GetCurrentTransportActions /// Success boolean - public Task Previous(CancellationToken cancellationToken = default) => ExecuteRequest(new PreviousRequest(), cancellationToken); + public Task PreviousAsync(CancellationToken cancellationToken = default) => ExecuteRequestAsync(new PreviousRequest(), cancellationToken, "Previous"); /// /// Flushes the SONOS queue. /// - /// CancellationToken + /// /// If queue is already empty it throw error 804. Send to non-coordinator returns error code 800. /// Success boolean - public Task RemoveAllTracksFromQueue(CancellationToken cancellationToken = default) => ExecuteRequest(new RemoveAllTracksFromQueueRequest(), cancellationToken); + public Task RemoveAllTracksFromQueueAsync(CancellationToken cancellationToken = default) => ExecuteRequestAsync(new RemoveAllTracksFromQueueRequest(), cancellationToken, "RemoveAllTracksFromQueue"); /// /// RemoveTrackFromQueue /// - /// Body payload - /// CancellationToken + /// payload + /// /// Success boolean - public Task RemoveTrackFromQueue(RemoveTrackFromQueueRequest request, CancellationToken cancellationToken = default) => ExecuteRequest(request, cancellationToken); + public Task RemoveTrackFromQueueAsync(RemoveTrackFromQueueRequest request, CancellationToken cancellationToken = default) => ExecuteRequestAsync(request, cancellationToken, "RemoveTrackFromQueue"); /// /// Removes the specified range of songs from the SONOS queue. /// - /// Body payload - /// CancellationToken + /// payload + /// /// RemoveTrackRangeFromQueueResponse - public Task RemoveTrackRangeFromQueue(RemoveTrackRangeFromQueueRequest request, CancellationToken cancellationToken = default) => ExecuteRequest(request, cancellationToken); + public Task RemoveTrackRangeFromQueueAsync(RemoveTrackRangeFromQueueRequest request, CancellationToken cancellationToken = default) => ExecuteRequestAsync(request, cancellationToken, "RemoveTrackRangeFromQueue"); /// /// ReorderTracksInQueue /// - /// Body payload - /// CancellationToken + /// payload + /// /// Success boolean - public Task ReorderTracksInQueue(ReorderTracksInQueueRequest request, CancellationToken cancellationToken = default) => ExecuteRequest(request, cancellationToken); + public Task ReorderTracksInQueueAsync(ReorderTracksInQueueRequest request, CancellationToken cancellationToken = default) => ExecuteRequestAsync(request, cancellationToken, "ReorderTracksInQueue"); /// /// ReorderTracksInSavedQueue /// - /// Body payload - /// CancellationToken + /// payload + /// /// ReorderTracksInSavedQueueResponse - public Task ReorderTracksInSavedQueue(ReorderTracksInSavedQueueRequest request, CancellationToken cancellationToken = default) => ExecuteRequest(request, cancellationToken); + public Task ReorderTracksInSavedQueueAsync(ReorderTracksInSavedQueueRequest request, CancellationToken cancellationToken = default) => ExecuteRequestAsync(request, cancellationToken, "ReorderTracksInSavedQueue"); /// /// RunAlarm /// - /// Body payload - /// CancellationToken + /// payload + /// /// Success boolean - public Task RunAlarm(RunAlarmRequest request, CancellationToken cancellationToken = default) => ExecuteRequest(request, cancellationToken); + public Task RunAlarmAsync(RunAlarmRequest request, CancellationToken cancellationToken = default) => ExecuteRequestAsync(request, cancellationToken, "RunAlarm"); /// /// Saves the current SONOS queue as a SONOS playlist and outputs objectID /// - /// Body payload - /// CancellationToken + /// payload + /// /// Send to non-coordinator returns error code 800 /// SaveQueueResponse - public Task SaveQueue(SaveQueueRequest request, CancellationToken cancellationToken = default) => ExecuteRequest(request, cancellationToken); + public Task SaveQueueAsync(SaveQueueRequest request, CancellationToken cancellationToken = default) => ExecuteRequestAsync(request, cancellationToken, "SaveQueue"); /// /// Seek track in queue, time delta or absolute time in song /// - /// Body payload - /// CancellationToken + /// payload + /// /// Returns error code 701 in case that content does not support Seek or send to non-coordinator /// Success boolean - public Task Seek(SeekRequest request, CancellationToken cancellationToken = default) => ExecuteRequest(request, cancellationToken); + public Task SeekAsync(SeekRequest request, CancellationToken cancellationToken = default) => ExecuteRequestAsync(request, cancellationToken, "Seek"); /// /// Set the transport URI to a song, a stream, the queue, another player-rincon and a lot more /// - /// Body payload - /// CancellationToken + /// payload + /// /// If set to another player RINCON, the player is grouped with that one. /// Success boolean - public Task SetAVTransportURI(SetAVTransportURIRequest request, CancellationToken cancellationToken = default) => ExecuteRequest(request, cancellationToken); + public Task SetAVTransportURIAsync(SetAVTransportURIRequest request, CancellationToken cancellationToken = default) => ExecuteRequestAsync(request, cancellationToken, "SetAVTransportURI"); /// /// Set crossfade mode /// - /// Body payload - /// CancellationToken + /// payload + /// /// Send to non-coordinator returns error code 800. Same for content, which does not support crossfade mode. /// Success boolean - public Task SetCrossfadeMode(SetCrossfadeModeRequest request, CancellationToken cancellationToken = default) => ExecuteRequest(request, cancellationToken); + public Task SetCrossfadeModeAsync(SetCrossfadeModeRequest request, CancellationToken cancellationToken = default) => ExecuteRequestAsync(request, cancellationToken, "SetCrossfadeMode"); /// /// SetNextAVTransportURI /// - /// Body payload - /// CancellationToken + /// payload + /// /// Success boolean - public Task SetNextAVTransportURI(SetNextAVTransportURIRequest request, CancellationToken cancellationToken = default) => ExecuteRequest(request, cancellationToken); + public Task SetNextAVTransportURIAsync(SetNextAVTransportURIRequest request, CancellationToken cancellationToken = default) => ExecuteRequestAsync(request, cancellationToken, "SetNextAVTransportURI"); /// /// Set the PlayMode /// - /// Body payload - /// CancellationToken + /// payload + /// /// Send to non-coordinator returns error code 712. If SONOS queue is not activated returns error code 712. /// Success boolean - public Task SetPlayMode(SetPlayModeRequest request, CancellationToken cancellationToken = default) => ExecuteRequest(request, cancellationToken); + public Task SetPlayModeAsync(SetPlayModeRequest request, CancellationToken cancellationToken = default) => ExecuteRequestAsync(request, cancellationToken, "SetPlayMode"); /// /// Snooze the current alarm for some time. /// - /// Body payload - /// CancellationToken + /// payload + /// /// Success boolean - public Task SnoozeAlarm(SnoozeAlarmRequest request, CancellationToken cancellationToken = default) => ExecuteRequest(request, cancellationToken); + public Task SnoozeAlarmAsync(SnoozeAlarmRequest request, CancellationToken cancellationToken = default) => ExecuteRequestAsync(request, cancellationToken, "SnoozeAlarm"); /// /// StartAutoplay /// - /// Body payload - /// CancellationToken + /// payload + /// /// Success boolean - public Task StartAutoplay(StartAutoplayRequest request, CancellationToken cancellationToken = default) => ExecuteRequest(request, cancellationToken); + public Task StartAutoplayAsync(StartAutoplayRequest request, CancellationToken cancellationToken = default) => ExecuteRequestAsync(request, cancellationToken, "StartAutoplay"); /// /// Stop playback /// - /// CancellationToken + /// /// Success boolean - public Task Stop(CancellationToken cancellationToken = default) => ExecuteRequest(new StopRequest(), cancellationToken); + public Task StopAsync(CancellationToken cancellationToken = default) => ExecuteRequestAsync(new StopRequest(), cancellationToken, "Stop"); [System.Xml.Serialization.XmlRoot(Namespace = "")] [SonosServiceRequest("/MediaRenderer/AVTransport/Control", "AVTransport")] @@ -1624,4 +1624,423 @@ public partial interface IAVTransportEvent : IServiceEvent public string? TransportStatus { get; } } + + /// + /// AddMultipleURIsToQueue + /// + /// Body payload + /// CancellationToken + /// AddMultipleURIsToQueueResponse + [Obsolete("This method is obsolete. Use AddMultipleURIsToQueueAsync instead.")] + [System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)] + public Task AddMultipleURIsToQueue(AddMultipleURIsToQueueRequest request, CancellationToken cancellationToken = default) => AddMultipleURIsToQueueAsync(request, cancellationToken); + + /// + /// Adds songs to the SONOS queue + /// + /// Body payload + /// CancellationToken + /// In NORMAL play mode the songs are added prior to the specified `DesiredFirstTrackNumberEnqueued`. + /// AddURIToQueueResponse + [Obsolete("This method is obsolete. Use AddURIToQueueAsync instead.")] + [System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)] + public Task AddURIToQueue(AddURIToQueueRequest request, CancellationToken cancellationToken = default) => AddURIToQueueAsync(request, cancellationToken); + + /// + /// AddURIToSavedQueue + /// + /// Body payload + /// CancellationToken + /// AddURIToSavedQueueResponse + [Obsolete("This method is obsolete. Use AddURIToSavedQueueAsync instead.")] + [System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)] + public Task AddURIToSavedQueue(AddURIToSavedQueueRequest request, CancellationToken cancellationToken = default) => AddURIToSavedQueueAsync(request, cancellationToken); + + /// + /// BackupQueue + /// + /// CancellationToken + /// Success boolean + [Obsolete("This method is obsolete. Use BackupQueueAsync instead.")] + [System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)] + public Task BackupQueue(CancellationToken cancellationToken = default) => BackupQueueAsync(cancellationToken); + + /// + /// Leave the current group and revert to a single player. + /// + /// CancellationToken + /// BecomeCoordinatorOfStandaloneGroupResponse + [Obsolete("This method is obsolete. Use BecomeCoordinatorOfStandaloneGroupAsync instead.")] + [System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)] + public Task BecomeCoordinatorOfStandaloneGroup(CancellationToken cancellationToken = default) => BecomeCoordinatorOfStandaloneGroupAsync(cancellationToken); + + /// + /// BecomeGroupCoordinator + /// + /// Body payload + /// CancellationToken + /// Success boolean + [Obsolete("This method is obsolete. Use BecomeGroupCoordinatorAsync instead.")] + [System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)] + public Task BecomeGroupCoordinator(BecomeGroupCoordinatorRequest request, CancellationToken cancellationToken = default) => BecomeGroupCoordinatorAsync(request, cancellationToken); + + /// + /// BecomeGroupCoordinatorAndSource + /// + /// Body payload + /// CancellationToken + /// Success boolean + [Obsolete("This method is obsolete. Use BecomeGroupCoordinatorAndSourceAsync instead.")] + [System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)] + public Task BecomeGroupCoordinatorAndSource(BecomeGroupCoordinatorAndSourceRequest request, CancellationToken cancellationToken = default) => BecomeGroupCoordinatorAndSourceAsync(request, cancellationToken); + + /// + /// ChangeCoordinator + /// + /// Body payload + /// CancellationToken + /// Success boolean + [Obsolete("This method is obsolete. Use ChangeCoordinatorAsync instead.")] + [System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)] + public Task ChangeCoordinator(ChangeCoordinatorRequest request, CancellationToken cancellationToken = default) => ChangeCoordinatorAsync(request, cancellationToken); + + /// + /// ChangeTransportSettings + /// + /// Body payload + /// CancellationToken + /// Success boolean + [Obsolete("This method is obsolete. Use ChangeTransportSettingsAsync instead.")] + [System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)] + public Task ChangeTransportSettings(ChangeTransportSettingsRequest request, CancellationToken cancellationToken = default) => ChangeTransportSettingsAsync(request, cancellationToken); + + /// + /// Stop playing after set sleep timer or cancel + /// + /// Body payload + /// CancellationToken + /// Send to non-coordinator returns error code 800 + /// Success boolean + [Obsolete("This method is obsolete. Use ConfigureSleepTimerAsync instead.")] + [System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)] + public Task ConfigureSleepTimer(ConfigureSleepTimerRequest request, CancellationToken cancellationToken = default) => ConfigureSleepTimerAsync(request, cancellationToken); + + /// + /// CreateSavedQueue + /// + /// Body payload + /// CancellationToken + /// CreateSavedQueueResponse + [Obsolete("This method is obsolete. Use CreateSavedQueueAsync instead.")] + [System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)] + public Task CreateSavedQueue(CreateSavedQueueRequest request, CancellationToken cancellationToken = default) => CreateSavedQueueAsync(request, cancellationToken); + + /// + /// Delegates the coordinator role to another player in the same group + /// + /// Body payload + /// CancellationToken + /// Send to non-coordinator has no results - should be avoided. + /// Success boolean + [Obsolete("This method is obsolete. Use DelegateGroupCoordinationToAsync instead.")] + [System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)] + public Task DelegateGroupCoordinationTo(DelegateGroupCoordinationToRequest request, CancellationToken cancellationToken = default) => DelegateGroupCoordinationToAsync(request, cancellationToken); + + /// + /// EndDirectControlSession + /// + /// CancellationToken + /// Success boolean + [Obsolete("This method is obsolete. Use EndDirectControlSessionAsync instead.")] + [System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)] + public Task EndDirectControlSession(CancellationToken cancellationToken = default) => EndDirectControlSessionAsync(cancellationToken); + + /// + /// Get crossfade mode + /// + /// CancellationToken + /// Send to non-coordinator may return wrong value as only the coordinator value in a group + /// GetCrossfadeModeResponse + [Obsolete("This method is obsolete. Use GetCrossfadeModeAsync instead.")] + [System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)] + public Task GetCrossfadeMode(CancellationToken cancellationToken = default) => GetCrossfadeModeAsync(cancellationToken); + + /// + /// Get current transport actions such as Set, Stop, Pause, Play, X_DLNA_SeekTime, Next, X_DLNA_SeekTrackNr + /// + /// CancellationToken + /// Send to non-coordinator returns only `Start` and `Stop` since it cannot control the stream. + /// GetCurrentTransportActionsResponse + [Obsolete("This method is obsolete. Use GetCurrentTransportActionsAsync instead.")] + [System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)] + public Task GetCurrentTransportActions(CancellationToken cancellationToken = default) => GetCurrentTransportActionsAsync(cancellationToken); + + /// + /// GetDeviceCapabilities + /// + /// CancellationToken + /// GetDeviceCapabilitiesResponse + [Obsolete("This method is obsolete. Use GetDeviceCapabilitiesAsync instead.")] + [System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)] + public Task GetDeviceCapabilities(CancellationToken cancellationToken = default) => GetDeviceCapabilitiesAsync(cancellationToken); + + /// + /// Get information about the current playing media (queue) + /// + /// CancellationToken + /// GetMediaInfoResponse + [Obsolete("This method is obsolete. Use GetMediaInfoAsync instead.")] + [System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)] + public Task GetMediaInfo(CancellationToken cancellationToken = default) => GetMediaInfoAsync(cancellationToken); + + /// + /// Get information about current position (position in queue and time in current song) + /// + /// CancellationToken + /// GetPositionInfoResponse + [Obsolete("This method is obsolete. Use GetPositionInfoAsync instead.")] + [System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)] + public Task GetPositionInfo(CancellationToken cancellationToken = default) => GetPositionInfoAsync(cancellationToken); + + /// + /// Get time left on sleeptimer. + /// + /// CancellationToken + /// Send to non-coordinator returns error code 800 + /// GetRemainingSleepTimerDurationResponse + [Obsolete("This method is obsolete. Use GetRemainingSleepTimerDurationAsync instead.")] + [System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)] + public Task GetRemainingSleepTimerDuration(CancellationToken cancellationToken = default) => GetRemainingSleepTimerDurationAsync(cancellationToken); + + /// + /// GetRunningAlarmProperties + /// + /// CancellationToken + /// GetRunningAlarmPropertiesResponse + [Obsolete("This method is obsolete. Use GetRunningAlarmPropertiesAsync instead.")] + [System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)] + public Task GetRunningAlarmProperties(CancellationToken cancellationToken = default) => GetRunningAlarmPropertiesAsync(cancellationToken); + + /// + /// Get current transport status, speed and state such as PLAYING, STOPPED, PLAYING, PAUSED_PLAYBACK, TRANSITIONING, NO_MEDIA_PRESENT + /// + /// CancellationToken + /// Send to non-coordinator always returns PLAYING + /// GetTransportInfoResponse + [Obsolete("This method is obsolete. Use GetTransportInfoAsync instead.")] + [System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)] + public Task GetTransportInfo(CancellationToken cancellationToken = default) => GetTransportInfoAsync(cancellationToken); + + /// + /// Get transport settings + /// + /// CancellationToken + /// Send to non-coordinator returns the settings of it's queue + /// GetTransportSettingsResponse + [Obsolete("This method is obsolete. Use GetTransportSettingsAsync instead.")] + [System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)] + public Task GetTransportSettings(CancellationToken cancellationToken = default) => GetTransportSettingsAsync(cancellationToken); + + /// + /// Go to next song + /// + /// CancellationToken + /// Possibly not supported at the moment see GetCurrentTransportActions + /// Success boolean + [Obsolete("This method is obsolete. Use NextAsync instead.")] + [System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)] + public Task Next(CancellationToken cancellationToken = default) => NextAsync(cancellationToken); + + /// + /// NotifyDeletedURI + /// + /// Body payload + /// CancellationToken + /// Success boolean + [Obsolete("This method is obsolete. Use NotifyDeletedURIAsync instead.")] + [System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)] + public Task NotifyDeletedURI(NotifyDeletedURIRequest request, CancellationToken cancellationToken = default) => NotifyDeletedURIAsync(request, cancellationToken); + + /// + /// Pause playback + /// + /// CancellationToken + /// Success boolean + [Obsolete("This method is obsolete. Use PauseAsync instead.")] + [System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)] + public Task Pause(CancellationToken cancellationToken = default) => PauseAsync(cancellationToken); + + /// + /// Start playing the set TransportURI + /// + /// Body payload + /// CancellationToken + /// Success boolean + [Obsolete("This method is obsolete. Use PlayAsync instead.")] + [System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)] + public Task Play(PlayRequest request, CancellationToken cancellationToken = default) => PlayAsync(request, cancellationToken); + + /// + /// Go to previous song + /// + /// CancellationToken + /// Possibly not supported at the moment see GetCurrentTransportActions + /// Success boolean + [Obsolete("This method is obsolete. Use PreviousAsync instead.")] + [System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)] + public Task Previous(CancellationToken cancellationToken = default) => PreviousAsync(cancellationToken); + + /// + /// Flushes the SONOS queue. + /// + /// CancellationToken + /// If queue is already empty it throw error 804. Send to non-coordinator returns error code 800. + /// Success boolean + [Obsolete("This method is obsolete. Use RemoveAllTracksFromQueueAsync instead.")] + [System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)] + public Task RemoveAllTracksFromQueue(CancellationToken cancellationToken = default) => RemoveAllTracksFromQueueAsync(cancellationToken); + + /// + /// RemoveTrackFromQueue + /// + /// Body payload + /// CancellationToken + /// Success boolean + [Obsolete("This method is obsolete. Use RemoveTrackFromQueueAsync instead.")] + [System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)] + public Task RemoveTrackFromQueue(RemoveTrackFromQueueRequest request, CancellationToken cancellationToken = default) => RemoveTrackFromQueueAsync(request, cancellationToken); + + /// + /// Removes the specified range of songs from the SONOS queue. + /// + /// Body payload + /// CancellationToken + /// RemoveTrackRangeFromQueueResponse + [Obsolete("This method is obsolete. Use RemoveTrackRangeFromQueueAsync instead.")] + [System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)] + public Task RemoveTrackRangeFromQueue(RemoveTrackRangeFromQueueRequest request, CancellationToken cancellationToken = default) => RemoveTrackRangeFromQueueAsync(request, cancellationToken); + + /// + /// ReorderTracksInQueue + /// + /// Body payload + /// CancellationToken + /// Success boolean + [Obsolete("This method is obsolete. Use ReorderTracksInQueueAsync instead.")] + [System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)] + public Task ReorderTracksInQueue(ReorderTracksInQueueRequest request, CancellationToken cancellationToken = default) => ReorderTracksInQueueAsync(request, cancellationToken); + + /// + /// ReorderTracksInSavedQueue + /// + /// Body payload + /// CancellationToken + /// ReorderTracksInSavedQueueResponse + [Obsolete("This method is obsolete. Use ReorderTracksInSavedQueueAsync instead.")] + [System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)] + public Task ReorderTracksInSavedQueue(ReorderTracksInSavedQueueRequest request, CancellationToken cancellationToken = default) => ReorderTracksInSavedQueueAsync(request, cancellationToken); + + /// + /// RunAlarm + /// + /// Body payload + /// CancellationToken + /// Success boolean + [Obsolete("This method is obsolete. Use RunAlarmAsync instead.")] + [System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)] + public Task RunAlarm(RunAlarmRequest request, CancellationToken cancellationToken = default) => RunAlarmAsync(request, cancellationToken); + + /// + /// Saves the current SONOS queue as a SONOS playlist and outputs objectID + /// + /// Body payload + /// CancellationToken + /// Send to non-coordinator returns error code 800 + /// SaveQueueResponse + [Obsolete("This method is obsolete. Use SaveQueueAsync instead.")] + [System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)] + public Task SaveQueue(SaveQueueRequest request, CancellationToken cancellationToken = default) => SaveQueueAsync(request, cancellationToken); + + /// + /// Seek track in queue, time delta or absolute time in song + /// + /// Body payload + /// CancellationToken + /// Returns error code 701 in case that content does not support Seek or send to non-coordinator + /// Success boolean + [Obsolete("This method is obsolete. Use SeekAsync instead.")] + [System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)] + public Task Seek(SeekRequest request, CancellationToken cancellationToken = default) => SeekAsync(request, cancellationToken); + + /// + /// Set the transport URI to a song, a stream, the queue, another player-rincon and a lot more + /// + /// Body payload + /// CancellationToken + /// If set to another player RINCON, the player is grouped with that one. + /// Success boolean + [Obsolete("This method is obsolete. Use SetAVTransportURIAsync instead.")] + [System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)] + public Task SetAVTransportURI(SetAVTransportURIRequest request, CancellationToken cancellationToken = default) => SetAVTransportURIAsync(request, cancellationToken); + + /// + /// Set crossfade mode + /// + /// Body payload + /// CancellationToken + /// Send to non-coordinator returns error code 800. Same for content, which does not support crossfade mode. + /// Success boolean + [Obsolete("This method is obsolete. Use SetCrossfadeModeAsync instead.")] + [System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)] + public Task SetCrossfadeMode(SetCrossfadeModeRequest request, CancellationToken cancellationToken = default) => SetCrossfadeModeAsync(request, cancellationToken); + + /// + /// SetNextAVTransportURI + /// + /// Body payload + /// CancellationToken + /// Success boolean + [Obsolete("This method is obsolete. Use SetNextAVTransportURIAsync instead.")] + [System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)] + public Task SetNextAVTransportURI(SetNextAVTransportURIRequest request, CancellationToken cancellationToken = default) => SetNextAVTransportURIAsync(request, cancellationToken); + + /// + /// Set the PlayMode + /// + /// Body payload + /// CancellationToken + /// Send to non-coordinator returns error code 712. If SONOS queue is not activated returns error code 712. + /// Success boolean + [Obsolete("This method is obsolete. Use SetPlayModeAsync instead.")] + [System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)] + public Task SetPlayMode(SetPlayModeRequest request, CancellationToken cancellationToken = default) => SetPlayModeAsync(request, cancellationToken); + + /// + /// Snooze the current alarm for some time. + /// + /// Body payload + /// CancellationToken + /// Success boolean + [Obsolete("This method is obsolete. Use SnoozeAlarmAsync instead.")] + [System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)] + public Task SnoozeAlarm(SnoozeAlarmRequest request, CancellationToken cancellationToken = default) => SnoozeAlarmAsync(request, cancellationToken); + + /// + /// StartAutoplay + /// + /// Body payload + /// CancellationToken + /// Success boolean + [Obsolete("This method is obsolete. Use StartAutoplayAsync instead.")] + [System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)] + public Task StartAutoplay(StartAutoplayRequest request, CancellationToken cancellationToken = default) => StartAutoplayAsync(request, cancellationToken); + + /// + /// Stop playback + /// + /// CancellationToken + /// Success boolean + [Obsolete("This method is obsolete. Use StopAsync instead.")] + [System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)] + public Task Stop(CancellationToken cancellationToken = default) => StopAsync(cancellationToken); } diff --git a/src/Sonos.Base/Services/AlarmClockService.cs b/src/Sonos.Base/Services/AlarmClockService.cs index d9fe8ea..b0cbf39 100644 --- a/src/Sonos.Base/Services/AlarmClockService.cs +++ b/src/Sonos.Base/Services/AlarmClockService.cs @@ -41,9 +41,9 @@ public Alarm[] Alarms } } - public async Task PatchAlarm(PatchAlarmRequest request, CancellationToken cancellationToken = default) + public async Task PatchAlarmAsync(PatchAlarmRequest request, CancellationToken cancellationToken = default) { - var alarm = (await this.ListAlarms(cancellationToken)).Alarms?.FirstOrDefault(a => a.ID == request.ID); + var alarm = (await this.ListAlarmsAsync(cancellationToken)).Alarms?.FirstOrDefault(a => a.ID == request.ID); if (alarm is null) { throw new SonosException("Alarm not found"); @@ -64,7 +64,7 @@ public async Task PatchAlarm(PatchAlarmRequest request, CancellationToken IncludeLinkedZones = request.IncludeLinkedZones ?? alarm.IncludeLinkedZones == 1 }; - return await this.UpdateAlarm(updateRequest, cancellationToken); + return await this.UpdateAlarmAsync(updateRequest, cancellationToken); } diff --git a/src/Sonos.Base/Services/AlarmClockService.gen.cs b/src/Sonos.Base/Services/AlarmClockService.gen.cs index 74cf08d..4b82a6a 100644 --- a/src/Sonos.Base/Services/AlarmClockService.gen.cs +++ b/src/Sonos.Base/Services/AlarmClockService.gen.cs @@ -38,133 +38,133 @@ public AlarmClockService(SonosServiceOptions options) : base(SonosService.AlarmC /// /// Create a single alarm, all properties are required /// - /// Body payload - /// CancellationToken + /// payload + /// /// CreateAlarmResponse - public Task CreateAlarm(CreateAlarmRequest request, CancellationToken cancellationToken = default) => ExecuteRequest(request, cancellationToken); + public Task CreateAlarmAsync(CreateAlarmRequest request, CancellationToken cancellationToken = default) => ExecuteRequestAsync(request, cancellationToken, "CreateAlarm"); /// /// Delete an alarm /// - /// Body payload - /// CancellationToken + /// payload + /// /// Success boolean - public Task DestroyAlarm(DestroyAlarmRequest request, CancellationToken cancellationToken = default) => ExecuteRequest(request, cancellationToken); + public Task DestroyAlarmAsync(DestroyAlarmRequest request, CancellationToken cancellationToken = default) => ExecuteRequestAsync(request, cancellationToken, "DestroyAlarm"); /// /// GetDailyIndexRefreshTime /// - /// CancellationToken + /// /// GetDailyIndexRefreshTimeResponse - public Task GetDailyIndexRefreshTime(CancellationToken cancellationToken = default) => ExecuteRequest(new BaseRequest(), cancellationToken); + public Task GetDailyIndexRefreshTimeAsync(CancellationToken cancellationToken = default) => ExecuteRequestAsync(new BaseRequest(), cancellationToken, "GetDailyIndexRefreshTime"); /// /// GetFormat /// - /// CancellationToken + /// /// GetFormatResponse - public Task GetFormat(CancellationToken cancellationToken = default) => ExecuteRequest(new BaseRequest(), cancellationToken); + public Task GetFormatAsync(CancellationToken cancellationToken = default) => ExecuteRequestAsync(new BaseRequest(), cancellationToken, "GetFormat"); /// /// GetHouseholdTimeAtStamp /// - /// Body payload - /// CancellationToken + /// payload + /// /// GetHouseholdTimeAtStampResponse - public Task GetHouseholdTimeAtStamp(GetHouseholdTimeAtStampRequest request, CancellationToken cancellationToken = default) => ExecuteRequest(request, cancellationToken); + public Task GetHouseholdTimeAtStampAsync(GetHouseholdTimeAtStampRequest request, CancellationToken cancellationToken = default) => ExecuteRequestAsync(request, cancellationToken, "GetHouseholdTimeAtStamp"); /// /// GetTimeNow /// - /// CancellationToken + /// /// GetTimeNowResponse - public Task GetTimeNow(CancellationToken cancellationToken = default) => ExecuteRequest(new BaseRequest(), cancellationToken); + public Task GetTimeNowAsync(CancellationToken cancellationToken = default) => ExecuteRequestAsync(new BaseRequest(), cancellationToken, "GetTimeNow"); /// /// GetTimeServer /// - /// CancellationToken + /// /// GetTimeServerResponse - public Task GetTimeServer(CancellationToken cancellationToken = default) => ExecuteRequest(new BaseRequest(), cancellationToken); + public Task GetTimeServerAsync(CancellationToken cancellationToken = default) => ExecuteRequestAsync(new BaseRequest(), cancellationToken, "GetTimeServer"); /// /// GetTimeZone /// - /// CancellationToken + /// /// GetTimeZoneResponse - public Task GetTimeZone(CancellationToken cancellationToken = default) => ExecuteRequest(new BaseRequest(), cancellationToken); + public Task GetTimeZoneAsync(CancellationToken cancellationToken = default) => ExecuteRequestAsync(new BaseRequest(), cancellationToken, "GetTimeZone"); /// /// GetTimeZoneAndRule /// - /// CancellationToken + /// /// GetTimeZoneAndRuleResponse - public Task GetTimeZoneAndRule(CancellationToken cancellationToken = default) => ExecuteRequest(new BaseRequest(), cancellationToken); + public Task GetTimeZoneAndRuleAsync(CancellationToken cancellationToken = default) => ExecuteRequestAsync(new BaseRequest(), cancellationToken, "GetTimeZoneAndRule"); /// /// GetTimeZoneRule /// - /// Body payload - /// CancellationToken + /// payload + /// /// GetTimeZoneRuleResponse - public Task GetTimeZoneRule(GetTimeZoneRuleRequest request, CancellationToken cancellationToken = default) => ExecuteRequest(request, cancellationToken); + public Task GetTimeZoneRuleAsync(GetTimeZoneRuleRequest request, CancellationToken cancellationToken = default) => ExecuteRequestAsync(request, cancellationToken, "GetTimeZoneRule"); /// /// Get the AlarmList as XML /// - /// CancellationToken + /// /// Some libraries also provide a ListAndParseAlarms where the alarm list xml is parsed /// ListAlarmsResponse - public Task ListAlarms(CancellationToken cancellationToken = default) => ExecuteRequest(new BaseRequest(), cancellationToken); + public Task ListAlarmsAsync(CancellationToken cancellationToken = default) => ExecuteRequestAsync(new BaseRequest(), cancellationToken, "ListAlarms"); /// /// SetDailyIndexRefreshTime /// - /// Body payload - /// CancellationToken + /// payload + /// /// Success boolean - public Task SetDailyIndexRefreshTime(SetDailyIndexRefreshTimeRequest request, CancellationToken cancellationToken = default) => ExecuteRequest(request, cancellationToken); + public Task SetDailyIndexRefreshTimeAsync(SetDailyIndexRefreshTimeRequest request, CancellationToken cancellationToken = default) => ExecuteRequestAsync(request, cancellationToken, "SetDailyIndexRefreshTime"); /// /// SetFormat /// - /// Body payload - /// CancellationToken + /// payload + /// /// Success boolean - public Task SetFormat(SetFormatRequest request, CancellationToken cancellationToken = default) => ExecuteRequest(request, cancellationToken); + public Task SetFormatAsync(SetFormatRequest request, CancellationToken cancellationToken = default) => ExecuteRequestAsync(request, cancellationToken, "SetFormat"); /// /// SetTimeNow /// - /// Body payload - /// CancellationToken + /// payload + /// /// Success boolean - public Task SetTimeNow(SetTimeNowRequest request, CancellationToken cancellationToken = default) => ExecuteRequest(request, cancellationToken); + public Task SetTimeNowAsync(SetTimeNowRequest request, CancellationToken cancellationToken = default) => ExecuteRequestAsync(request, cancellationToken, "SetTimeNow"); /// /// SetTimeServer /// - /// Body payload - /// CancellationToken + /// payload + /// /// Success boolean - public Task SetTimeServer(SetTimeServerRequest request, CancellationToken cancellationToken = default) => ExecuteRequest(request, cancellationToken); + public Task SetTimeServerAsync(SetTimeServerRequest request, CancellationToken cancellationToken = default) => ExecuteRequestAsync(request, cancellationToken, "SetTimeServer"); /// /// SetTimeZone /// - /// Body payload - /// CancellationToken + /// payload + /// /// Success boolean - public Task SetTimeZone(SetTimeZoneRequest request, CancellationToken cancellationToken = default) => ExecuteRequest(request, cancellationToken); + public Task SetTimeZoneAsync(SetTimeZoneRequest request, CancellationToken cancellationToken = default) => ExecuteRequestAsync(request, cancellationToken, "SetTimeZone"); /// /// Update an alarm, all parameters are required. /// - /// Body payload - /// CancellationToken + /// payload + /// /// Some libraries support PatchAlarm where you can update a single parameter /// Success boolean - public Task UpdateAlarm(UpdateAlarmRequest request, CancellationToken cancellationToken = default) => ExecuteRequest(request, cancellationToken); + public Task UpdateAlarmAsync(UpdateAlarmRequest request, CancellationToken cancellationToken = default) => ExecuteRequestAsync(request, cancellationToken, "UpdateAlarm"); [System.Xml.Serialization.XmlRoot(Namespace = "")] [SonosServiceRequest("/AlarmClock/Control", "AlarmClock")] @@ -522,4 +522,169 @@ public partial interface IAlarmClockEvent : IServiceEvent public string? TimeZone { get; } } + + /// + /// Create a single alarm, all properties are required + /// + /// Body payload + /// CancellationToken + /// CreateAlarmResponse + [Obsolete("This method is obsolete. Use CreateAlarmAsync instead.")] + [System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)] + public Task CreateAlarm(CreateAlarmRequest request, CancellationToken cancellationToken = default) => CreateAlarmAsync(request, cancellationToken); + + /// + /// Delete an alarm + /// + /// Body payload + /// CancellationToken + /// Success boolean + [Obsolete("This method is obsolete. Use DestroyAlarmAsync instead.")] + [System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)] + public Task DestroyAlarm(DestroyAlarmRequest request, CancellationToken cancellationToken = default) => DestroyAlarmAsync(request, cancellationToken); + + /// + /// GetDailyIndexRefreshTime + /// + /// CancellationToken + /// GetDailyIndexRefreshTimeResponse + [Obsolete("This method is obsolete. Use GetDailyIndexRefreshTimeAsync instead.")] + [System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)] + public Task GetDailyIndexRefreshTime(CancellationToken cancellationToken = default) => GetDailyIndexRefreshTimeAsync(cancellationToken); + + /// + /// GetFormat + /// + /// CancellationToken + /// GetFormatResponse + [Obsolete("This method is obsolete. Use GetFormatAsync instead.")] + [System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)] + public Task GetFormat(CancellationToken cancellationToken = default) => GetFormatAsync(cancellationToken); + + /// + /// GetHouseholdTimeAtStamp + /// + /// Body payload + /// CancellationToken + /// GetHouseholdTimeAtStampResponse + [Obsolete("This method is obsolete. Use GetHouseholdTimeAtStampAsync instead.")] + [System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)] + public Task GetHouseholdTimeAtStamp(GetHouseholdTimeAtStampRequest request, CancellationToken cancellationToken = default) => GetHouseholdTimeAtStampAsync(request, cancellationToken); + + /// + /// GetTimeNow + /// + /// CancellationToken + /// GetTimeNowResponse + [Obsolete("This method is obsolete. Use GetTimeNowAsync instead.")] + [System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)] + public Task GetTimeNow(CancellationToken cancellationToken = default) => GetTimeNowAsync(cancellationToken); + + /// + /// GetTimeServer + /// + /// CancellationToken + /// GetTimeServerResponse + [Obsolete("This method is obsolete. Use GetTimeServerAsync instead.")] + [System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)] + public Task GetTimeServer(CancellationToken cancellationToken = default) => GetTimeServerAsync(cancellationToken); + + /// + /// GetTimeZone + /// + /// CancellationToken + /// GetTimeZoneResponse + [Obsolete("This method is obsolete. Use GetTimeZoneAsync instead.")] + [System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)] + public Task GetTimeZone(CancellationToken cancellationToken = default) => GetTimeZoneAsync(cancellationToken); + + /// + /// GetTimeZoneAndRule + /// + /// CancellationToken + /// GetTimeZoneAndRuleResponse + [Obsolete("This method is obsolete. Use GetTimeZoneAndRuleAsync instead.")] + [System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)] + public Task GetTimeZoneAndRule(CancellationToken cancellationToken = default) => GetTimeZoneAndRuleAsync(cancellationToken); + + /// + /// GetTimeZoneRule + /// + /// Body payload + /// CancellationToken + /// GetTimeZoneRuleResponse + [Obsolete("This method is obsolete. Use GetTimeZoneRuleAsync instead.")] + [System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)] + public Task GetTimeZoneRule(GetTimeZoneRuleRequest request, CancellationToken cancellationToken = default) => GetTimeZoneRuleAsync(request, cancellationToken); + + /// + /// Get the AlarmList as XML + /// + /// CancellationToken + /// Some libraries also provide a ListAndParseAlarms where the alarm list xml is parsed + /// ListAlarmsResponse + [Obsolete("This method is obsolete. Use ListAlarmsAsync instead.")] + [System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)] + public Task ListAlarms(CancellationToken cancellationToken = default) => ListAlarmsAsync(cancellationToken); + + /// + /// SetDailyIndexRefreshTime + /// + /// Body payload + /// CancellationToken + /// Success boolean + [Obsolete("This method is obsolete. Use SetDailyIndexRefreshTimeAsync instead.")] + [System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)] + public Task SetDailyIndexRefreshTime(SetDailyIndexRefreshTimeRequest request, CancellationToken cancellationToken = default) => SetDailyIndexRefreshTimeAsync(request, cancellationToken); + + /// + /// SetFormat + /// + /// Body payload + /// CancellationToken + /// Success boolean + [Obsolete("This method is obsolete. Use SetFormatAsync instead.")] + [System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)] + public Task SetFormat(SetFormatRequest request, CancellationToken cancellationToken = default) => SetFormatAsync(request, cancellationToken); + + /// + /// SetTimeNow + /// + /// Body payload + /// CancellationToken + /// Success boolean + [Obsolete("This method is obsolete. Use SetTimeNowAsync instead.")] + [System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)] + public Task SetTimeNow(SetTimeNowRequest request, CancellationToken cancellationToken = default) => SetTimeNowAsync(request, cancellationToken); + + /// + /// SetTimeServer + /// + /// Body payload + /// CancellationToken + /// Success boolean + [Obsolete("This method is obsolete. Use SetTimeServerAsync instead.")] + [System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)] + public Task SetTimeServer(SetTimeServerRequest request, CancellationToken cancellationToken = default) => SetTimeServerAsync(request, cancellationToken); + + /// + /// SetTimeZone + /// + /// Body payload + /// CancellationToken + /// Success boolean + [Obsolete("This method is obsolete. Use SetTimeZoneAsync instead.")] + [System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)] + public Task SetTimeZone(SetTimeZoneRequest request, CancellationToken cancellationToken = default) => SetTimeZoneAsync(request, cancellationToken); + + /// + /// Update an alarm, all parameters are required. + /// + /// Body payload + /// CancellationToken + /// Some libraries support PatchAlarm where you can update a single parameter + /// Success boolean + [Obsolete("This method is obsolete. Use UpdateAlarmAsync instead.")] + [System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)] + public Task UpdateAlarm(UpdateAlarmRequest request, CancellationToken cancellationToken = default) => UpdateAlarmAsync(request, cancellationToken); } diff --git a/src/Sonos.Base/Services/AudioInService.gen.cs b/src/Sonos.Base/Services/AudioInService.gen.cs index fc4c88c..c78026b 100644 --- a/src/Sonos.Base/Services/AudioInService.gen.cs +++ b/src/Sonos.Base/Services/AudioInService.gen.cs @@ -38,56 +38,56 @@ public AudioInService(SonosServiceOptions options) : base(SonosService.AudioIn, /// /// GetAudioInputAttributes /// - /// CancellationToken + /// /// GetAudioInputAttributesResponse - public Task GetAudioInputAttributes(CancellationToken cancellationToken = default) => ExecuteRequest(new BaseRequest(), cancellationToken); + public Task GetAudioInputAttributesAsync(CancellationToken cancellationToken = default) => ExecuteRequestAsync(new BaseRequest(), cancellationToken, "GetAudioInputAttributes"); /// /// GetLineInLevel /// - /// CancellationToken + /// /// GetLineInLevelResponse - public Task GetLineInLevel(CancellationToken cancellationToken = default) => ExecuteRequest(new BaseRequest(), cancellationToken); + public Task GetLineInLevelAsync(CancellationToken cancellationToken = default) => ExecuteRequestAsync(new BaseRequest(), cancellationToken, "GetLineInLevel"); /// /// SelectAudio /// - /// Body payload - /// CancellationToken + /// payload + /// /// Success boolean - public Task SelectAudio(SelectAudioRequest request, CancellationToken cancellationToken = default) => ExecuteRequest(request, cancellationToken); + public Task SelectAudioAsync(SelectAudioRequest request, CancellationToken cancellationToken = default) => ExecuteRequestAsync(request, cancellationToken, "SelectAudio"); /// /// SetAudioInputAttributes /// - /// Body payload - /// CancellationToken + /// payload + /// /// Success boolean - public Task SetAudioInputAttributes(SetAudioInputAttributesRequest request, CancellationToken cancellationToken = default) => ExecuteRequest(request, cancellationToken); + public Task SetAudioInputAttributesAsync(SetAudioInputAttributesRequest request, CancellationToken cancellationToken = default) => ExecuteRequestAsync(request, cancellationToken, "SetAudioInputAttributes"); /// /// SetLineInLevel /// - /// Body payload - /// CancellationToken + /// payload + /// /// Success boolean - public Task SetLineInLevel(SetLineInLevelRequest request, CancellationToken cancellationToken = default) => ExecuteRequest(request, cancellationToken); + public Task SetLineInLevelAsync(SetLineInLevelRequest request, CancellationToken cancellationToken = default) => ExecuteRequestAsync(request, cancellationToken, "SetLineInLevel"); /// /// StartTransmissionToGroup /// - /// Body payload - /// CancellationToken + /// payload + /// /// StartTransmissionToGroupResponse - public Task StartTransmissionToGroup(StartTransmissionToGroupRequest request, CancellationToken cancellationToken = default) => ExecuteRequest(request, cancellationToken); + public Task StartTransmissionToGroupAsync(StartTransmissionToGroupRequest request, CancellationToken cancellationToken = default) => ExecuteRequestAsync(request, cancellationToken, "StartTransmissionToGroup"); /// /// StopTransmissionToGroup /// - /// Body payload - /// CancellationToken + /// payload + /// /// Success boolean - public Task StopTransmissionToGroup(StopTransmissionToGroupRequest request, CancellationToken cancellationToken = default) => ExecuteRequest(request, cancellationToken); + public Task StopTransmissionToGroupAsync(StopTransmissionToGroupRequest request, CancellationToken cancellationToken = default) => ExecuteRequestAsync(request, cancellationToken, "StopTransmissionToGroup"); [System.Xml.Serialization.XmlRoot(Namespace = "")] [SonosServiceRequest("/AudioIn/Control", "AudioIn")] @@ -189,4 +189,72 @@ public partial interface IAudioInEvent : IServiceEvent public int? RightLineInLevel { get; } } + + /// + /// GetAudioInputAttributes + /// + /// CancellationToken + /// GetAudioInputAttributesResponse + [Obsolete("This method is obsolete. Use GetAudioInputAttributesAsync instead.")] + [System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)] + public Task GetAudioInputAttributes(CancellationToken cancellationToken = default) => GetAudioInputAttributesAsync(cancellationToken); + + /// + /// GetLineInLevel + /// + /// CancellationToken + /// GetLineInLevelResponse + [Obsolete("This method is obsolete. Use GetLineInLevelAsync instead.")] + [System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)] + public Task GetLineInLevel(CancellationToken cancellationToken = default) => GetLineInLevelAsync(cancellationToken); + + /// + /// SelectAudio + /// + /// Body payload + /// CancellationToken + /// Success boolean + [Obsolete("This method is obsolete. Use SelectAudioAsync instead.")] + [System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)] + public Task SelectAudio(SelectAudioRequest request, CancellationToken cancellationToken = default) => SelectAudioAsync(request, cancellationToken); + + /// + /// SetAudioInputAttributes + /// + /// Body payload + /// CancellationToken + /// Success boolean + [Obsolete("This method is obsolete. Use SetAudioInputAttributesAsync instead.")] + [System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)] + public Task SetAudioInputAttributes(SetAudioInputAttributesRequest request, CancellationToken cancellationToken = default) => SetAudioInputAttributesAsync(request, cancellationToken); + + /// + /// SetLineInLevel + /// + /// Body payload + /// CancellationToken + /// Success boolean + [Obsolete("This method is obsolete. Use SetLineInLevelAsync instead.")] + [System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)] + public Task SetLineInLevel(SetLineInLevelRequest request, CancellationToken cancellationToken = default) => SetLineInLevelAsync(request, cancellationToken); + + /// + /// StartTransmissionToGroup + /// + /// Body payload + /// CancellationToken + /// StartTransmissionToGroupResponse + [Obsolete("This method is obsolete. Use StartTransmissionToGroupAsync instead.")] + [System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)] + public Task StartTransmissionToGroup(StartTransmissionToGroupRequest request, CancellationToken cancellationToken = default) => StartTransmissionToGroupAsync(request, cancellationToken); + + /// + /// StopTransmissionToGroup + /// + /// Body payload + /// CancellationToken + /// Success boolean + [Obsolete("This method is obsolete. Use StopTransmissionToGroupAsync instead.")] + [System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)] + public Task StopTransmissionToGroup(StopTransmissionToGroupRequest request, CancellationToken cancellationToken = default) => StopTransmissionToGroupAsync(request, cancellationToken); } diff --git a/src/Sonos.Base/Services/ConnectionManagerService.gen.cs b/src/Sonos.Base/Services/ConnectionManagerService.gen.cs index 9dde7be..8fde2f4 100644 --- a/src/Sonos.Base/Services/ConnectionManagerService.gen.cs +++ b/src/Sonos.Base/Services/ConnectionManagerService.gen.cs @@ -38,24 +38,24 @@ public ConnectionManagerService(SonosServiceOptions options) : base(SonosService /// /// GetCurrentConnectionIDs /// - /// CancellationToken + /// /// GetCurrentConnectionIDsResponse - public Task GetCurrentConnectionIDs(CancellationToken cancellationToken = default) => ExecuteRequest(new BaseRequest(), cancellationToken); + public Task GetCurrentConnectionIDsAsync(CancellationToken cancellationToken = default) => ExecuteRequestAsync(new BaseRequest(), cancellationToken, "GetCurrentConnectionIDs"); /// /// GetCurrentConnectionInfo /// - /// Body payload - /// CancellationToken + /// payload + /// /// GetCurrentConnectionInfoResponse - public Task GetCurrentConnectionInfo(GetCurrentConnectionInfoRequest request, CancellationToken cancellationToken = default) => ExecuteRequest(request, cancellationToken); + public Task GetCurrentConnectionInfoAsync(GetCurrentConnectionInfoRequest request, CancellationToken cancellationToken = default) => ExecuteRequestAsync(request, cancellationToken, "GetCurrentConnectionInfo"); /// /// GetProtocolInfo /// - /// CancellationToken + /// /// GetProtocolInfoResponse - public Task GetProtocolInfo(CancellationToken cancellationToken = default) => ExecuteRequest(new BaseRequest(), cancellationToken); + public Task GetProtocolInfoAsync(CancellationToken cancellationToken = default) => ExecuteRequestAsync(new BaseRequest(), cancellationToken, "GetProtocolInfo"); [System.Xml.Serialization.XmlRoot(Namespace = "")] [SonosServiceRequest("/MediaRenderer/ConnectionManager/Control", "ConnectionManager")] @@ -130,4 +130,32 @@ public partial interface IConnectionManagerEvent : IServiceEvent public string? SourceProtocolInfo { get; } } + + /// + /// GetCurrentConnectionIDs + /// + /// CancellationToken + /// GetCurrentConnectionIDsResponse + [Obsolete("This method is obsolete. Use GetCurrentConnectionIDsAsync instead.")] + [System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)] + public Task GetCurrentConnectionIDs(CancellationToken cancellationToken = default) => GetCurrentConnectionIDsAsync(cancellationToken); + + /// + /// GetCurrentConnectionInfo + /// + /// Body payload + /// CancellationToken + /// GetCurrentConnectionInfoResponse + [Obsolete("This method is obsolete. Use GetCurrentConnectionInfoAsync instead.")] + [System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)] + public Task GetCurrentConnectionInfo(GetCurrentConnectionInfoRequest request, CancellationToken cancellationToken = default) => GetCurrentConnectionInfoAsync(request, cancellationToken); + + /// + /// GetProtocolInfo + /// + /// CancellationToken + /// GetProtocolInfoResponse + [Obsolete("This method is obsolete. Use GetProtocolInfoAsync instead.")] + [System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)] + public Task GetProtocolInfo(CancellationToken cancellationToken = default) => GetProtocolInfoAsync(cancellationToken); } diff --git a/src/Sonos.Base/Services/ContentDirectoryService.cs b/src/Sonos.Base/Services/ContentDirectoryService.cs index 12ce59c..e7c609e 100644 --- a/src/Sonos.Base/Services/ContentDirectoryService.cs +++ b/src/Sonos.Base/Services/ContentDirectoryService.cs @@ -35,9 +35,9 @@ public partial class ContentDirectoryService /// CancellationToken /// (1) If the title contains an apostrophe the returned uri will contain a `'`. (2) Some libraries support a BrowseAndParse, so you don't have to parse the xml. /// BrowseResponse - public Task Browse(string ObjectID, string BrowseFlag = "BrowseDirectChildren", string Filter = "*", int StartingIndex = 0, int Count = 0, string SortCriteria = "", CancellationToken cancellationToken = default) + public Task BrowseAsync(string ObjectID, string BrowseFlag = "BrowseDirectChildren", string Filter = "*", int StartingIndex = 0, int Count = 0, string SortCriteria = "", CancellationToken cancellationToken = default) { - return Browse(new BrowseRequest + return BrowseAsync(new BrowseRequest { ObjectID = ObjectID, BrowseFlag = BrowseFlag, @@ -54,7 +54,7 @@ public Task Browse(string ObjectID, string BrowseFlag = "BrowseD /// Number of items to load /// /// - public Task CurrentQueue(int count = 100, CancellationToken cancellationToken = default) => Browse("Q:0", Count: count, cancellationToken: cancellationToken); + public Task CurrentQueueAsync(int count = 100, CancellationToken cancellationToken = default) => BrowseAsync("Q:0", Count: count, cancellationToken: cancellationToken); /// /// Browse the favorite radio shows @@ -62,7 +62,7 @@ public Task Browse(string ObjectID, string BrowseFlag = "BrowseD /// /// /// - public Task FavoriteRadioShows(int count = 100, CancellationToken cancellationToken = default) => Browse("R:0/1", Count: count, cancellationToken: cancellationToken); + public Task FavoriteRadioShowsAsync(int count = 100, CancellationToken cancellationToken = default) => BrowseAsync("R:0/1", Count: count, cancellationToken: cancellationToken); /// /// Browse the favorite radio stations @@ -70,7 +70,7 @@ public Task Browse(string ObjectID, string BrowseFlag = "BrowseD /// Number of items to load /// /// - public Task FavoriteRadioStations(int count = 100, CancellationToken cancellationToken = default) => Browse("R:0/0", Count: count, cancellationToken: cancellationToken); + public Task FavoriteRadioStationsAsync(int count = 100, CancellationToken cancellationToken = default) => BrowseAsync("R:0/0", Count: count, cancellationToken: cancellationToken); /// /// Browse favorites @@ -78,7 +78,7 @@ public Task Browse(string ObjectID, string BrowseFlag = "BrowseD /// Number of items to load /// /// - public Task Favorites(int count = 100, CancellationToken cancellationToken = default) => Browse("FV:2", Count: count, cancellationToken: cancellationToken); + public Task FavoritesAsync(int count = 100, CancellationToken cancellationToken = default) => BrowseAsync("FV:2", Count: count, cancellationToken: cancellationToken); public partial class BrowseResponse { diff --git a/src/Sonos.Base/Services/ContentDirectoryService.gen.cs b/src/Sonos.Base/Services/ContentDirectoryService.gen.cs index b868642..83fefac 100644 --- a/src/Sonos.Base/Services/ContentDirectoryService.gen.cs +++ b/src/Sonos.Base/Services/ContentDirectoryService.gen.cs @@ -38,124 +38,124 @@ public ContentDirectoryService(SonosServiceOptions options) : base(SonosService. /// /// Browse for content: Music library (A), share(S:), Sonos playlists(SQ:), Sonos favorites(FV:2), radio stations(R:0/0), radio shows(R:0/1), queue(Q:)). Recommendation: Send one request, check the `TotalMatches` and - if necessary - do additional requests with higher `StartingIndex`. In case of duplicates only the first is returned! Example: albums with same title, even if artists are different /// - /// Body payload - /// CancellationToken + /// payload + /// /// (1) If the title contains an apostrophe the returned uri will contain a `'`. (2) Some libraries support a BrowseAndParse, so you don't have to parse the xml. /// BrowseResponse - public Task Browse(BrowseRequest request, CancellationToken cancellationToken = default) => ExecuteRequest(request, cancellationToken); + public Task BrowseAsync(BrowseRequest request, CancellationToken cancellationToken = default) => ExecuteRequestAsync(request, cancellationToken, "Browse"); /// /// CreateObject /// - /// Body payload - /// CancellationToken + /// payload + /// /// CreateObjectResponse - public Task CreateObject(CreateObjectRequest request, CancellationToken cancellationToken = default) => ExecuteRequest(request, cancellationToken); + public Task CreateObjectAsync(CreateObjectRequest request, CancellationToken cancellationToken = default) => ExecuteRequestAsync(request, cancellationToken, "CreateObject"); /// /// DestroyObject /// - /// Body payload - /// CancellationToken + /// payload + /// /// Success boolean - public Task DestroyObject(DestroyObjectRequest request, CancellationToken cancellationToken = default) => ExecuteRequest(request, cancellationToken); + public Task DestroyObjectAsync(DestroyObjectRequest request, CancellationToken cancellationToken = default) => ExecuteRequestAsync(request, cancellationToken, "DestroyObject"); /// /// FindPrefix /// - /// Body payload - /// CancellationToken + /// payload + /// /// FindPrefixResponse - public Task FindPrefix(FindPrefixRequest request, CancellationToken cancellationToken = default) => ExecuteRequest(request, cancellationToken); + public Task FindPrefixAsync(FindPrefixRequest request, CancellationToken cancellationToken = default) => ExecuteRequestAsync(request, cancellationToken, "FindPrefix"); /// /// Get the current album art display option such as `WMP`, `ITUNES` or `NONE` /// - /// CancellationToken + /// /// GetAlbumArtistDisplayOptionResponse - public Task GetAlbumArtistDisplayOption(CancellationToken cancellationToken = default) => ExecuteRequest(new BaseRequest(), cancellationToken); + public Task GetAlbumArtistDisplayOptionAsync(CancellationToken cancellationToken = default) => ExecuteRequestAsync(new BaseRequest(), cancellationToken, "GetAlbumArtistDisplayOption"); /// /// GetAllPrefixLocations /// - /// Body payload - /// CancellationToken + /// payload + /// /// GetAllPrefixLocationsResponse - public Task GetAllPrefixLocations(GetAllPrefixLocationsRequest request, CancellationToken cancellationToken = default) => ExecuteRequest(request, cancellationToken); + public Task GetAllPrefixLocationsAsync(GetAllPrefixLocationsRequest request, CancellationToken cancellationToken = default) => ExecuteRequestAsync(request, cancellationToken, "GetAllPrefixLocations"); /// /// GetBrowseable /// - /// CancellationToken + /// /// GetBrowseableResponse - public Task GetBrowseable(CancellationToken cancellationToken = default) => ExecuteRequest(new BaseRequest(), cancellationToken); + public Task GetBrowseableAsync(CancellationToken cancellationToken = default) => ExecuteRequestAsync(new BaseRequest(), cancellationToken, "GetBrowseable"); /// /// GetLastIndexChange /// - /// CancellationToken + /// /// GetLastIndexChangeResponse - public Task GetLastIndexChange(CancellationToken cancellationToken = default) => ExecuteRequest(new BaseRequest(), cancellationToken); + public Task GetLastIndexChangeAsync(CancellationToken cancellationToken = default) => ExecuteRequestAsync(new BaseRequest(), cancellationToken, "GetLastIndexChange"); /// /// GetSearchCapabilities /// - /// CancellationToken + /// /// GetSearchCapabilitiesResponse - public Task GetSearchCapabilities(CancellationToken cancellationToken = default) => ExecuteRequest(new BaseRequest(), cancellationToken); + public Task GetSearchCapabilitiesAsync(CancellationToken cancellationToken = default) => ExecuteRequestAsync(new BaseRequest(), cancellationToken, "GetSearchCapabilities"); /// /// GetShareIndexInProgress /// - /// CancellationToken + /// /// GetShareIndexInProgressResponse - public Task GetShareIndexInProgress(CancellationToken cancellationToken = default) => ExecuteRequest(new BaseRequest(), cancellationToken); + public Task GetShareIndexInProgressAsync(CancellationToken cancellationToken = default) => ExecuteRequestAsync(new BaseRequest(), cancellationToken, "GetShareIndexInProgress"); /// /// GetSortCapabilities /// - /// CancellationToken + /// /// GetSortCapabilitiesResponse - public Task GetSortCapabilities(CancellationToken cancellationToken = default) => ExecuteRequest(new BaseRequest(), cancellationToken); + public Task GetSortCapabilitiesAsync(CancellationToken cancellationToken = default) => ExecuteRequestAsync(new BaseRequest(), cancellationToken, "GetSortCapabilities"); /// /// GetSystemUpdateID /// - /// CancellationToken + /// /// GetSystemUpdateIDResponse - public Task GetSystemUpdateID(CancellationToken cancellationToken = default) => ExecuteRequest(new BaseRequest(), cancellationToken); + public Task GetSystemUpdateIDAsync(CancellationToken cancellationToken = default) => ExecuteRequestAsync(new BaseRequest(), cancellationToken, "GetSystemUpdateID"); /// /// Updates the music library (share) index /// - /// Body payload - /// CancellationToken + /// payload + /// /// Success boolean - public Task RefreshShareIndex(RefreshShareIndexRequest request, CancellationToken cancellationToken = default) => ExecuteRequest(request, cancellationToken); + public Task RefreshShareIndexAsync(RefreshShareIndexRequest request, CancellationToken cancellationToken = default) => ExecuteRequestAsync(request, cancellationToken, "RefreshShareIndex"); /// /// RequestResort /// - /// Body payload - /// CancellationToken + /// payload + /// /// Success boolean - public Task RequestResort(RequestResortRequest request, CancellationToken cancellationToken = default) => ExecuteRequest(request, cancellationToken); + public Task RequestResortAsync(RequestResortRequest request, CancellationToken cancellationToken = default) => ExecuteRequestAsync(request, cancellationToken, "RequestResort"); /// /// SetBrowseable /// - /// Body payload - /// CancellationToken + /// payload + /// /// Success boolean - public Task SetBrowseable(SetBrowseableRequest request, CancellationToken cancellationToken = default) => ExecuteRequest(request, cancellationToken); + public Task SetBrowseableAsync(SetBrowseableRequest request, CancellationToken cancellationToken = default) => ExecuteRequestAsync(request, cancellationToken, "SetBrowseable"); /// /// UpdateObject /// - /// Body payload - /// CancellationToken + /// payload + /// /// Success boolean - public Task UpdateObject(UpdateObjectRequest request, CancellationToken cancellationToken = default) => ExecuteRequest(request, cancellationToken); + public Task UpdateObjectAsync(UpdateObjectRequest request, CancellationToken cancellationToken = default) => ExecuteRequestAsync(request, cancellationToken, "UpdateObject"); [System.Xml.Serialization.XmlRoot(Namespace = "")] [SonosServiceRequest("/MediaServer/ContentDirectory/Control", "ContentDirectory")] @@ -448,4 +448,158 @@ public partial interface IContentDirectoryEvent : IServiceEvent public string? UserRadioUpdateID { get; } } + + /// + /// Browse for content: Music library (A), share(S:), Sonos playlists(SQ:), Sonos favorites(FV:2), radio stations(R:0/0), radio shows(R:0/1), queue(Q:)). Recommendation: Send one request, check the `TotalMatches` and - if necessary - do additional requests with higher `StartingIndex`. In case of duplicates only the first is returned! Example: albums with same title, even if artists are different + /// + /// Body payload + /// CancellationToken + /// (1) If the title contains an apostrophe the returned uri will contain a `'`. (2) Some libraries support a BrowseAndParse, so you don't have to parse the xml. + /// BrowseResponse + [Obsolete("This method is obsolete. Use BrowseAsync instead.")] + [System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)] + public Task Browse(BrowseRequest request, CancellationToken cancellationToken = default) => BrowseAsync(request, cancellationToken); + + /// + /// CreateObject + /// + /// Body payload + /// CancellationToken + /// CreateObjectResponse + [Obsolete("This method is obsolete. Use CreateObjectAsync instead.")] + [System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)] + public Task CreateObject(CreateObjectRequest request, CancellationToken cancellationToken = default) => CreateObjectAsync(request, cancellationToken); + + /// + /// DestroyObject + /// + /// Body payload + /// CancellationToken + /// Success boolean + [Obsolete("This method is obsolete. Use DestroyObjectAsync instead.")] + [System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)] + public Task DestroyObject(DestroyObjectRequest request, CancellationToken cancellationToken = default) => DestroyObjectAsync(request, cancellationToken); + + /// + /// FindPrefix + /// + /// Body payload + /// CancellationToken + /// FindPrefixResponse + [Obsolete("This method is obsolete. Use FindPrefixAsync instead.")] + [System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)] + public Task FindPrefix(FindPrefixRequest request, CancellationToken cancellationToken = default) => FindPrefixAsync(request, cancellationToken); + + /// + /// Get the current album art display option such as `WMP`, `ITUNES` or `NONE` + /// + /// CancellationToken + /// GetAlbumArtistDisplayOptionResponse + [Obsolete("This method is obsolete. Use GetAlbumArtistDisplayOptionAsync instead.")] + [System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)] + public Task GetAlbumArtistDisplayOption(CancellationToken cancellationToken = default) => GetAlbumArtistDisplayOptionAsync(cancellationToken); + + /// + /// GetAllPrefixLocations + /// + /// Body payload + /// CancellationToken + /// GetAllPrefixLocationsResponse + [Obsolete("This method is obsolete. Use GetAllPrefixLocationsAsync instead.")] + [System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)] + public Task GetAllPrefixLocations(GetAllPrefixLocationsRequest request, CancellationToken cancellationToken = default) => GetAllPrefixLocationsAsync(request, cancellationToken); + + /// + /// GetBrowseable + /// + /// CancellationToken + /// GetBrowseableResponse + [Obsolete("This method is obsolete. Use GetBrowseableAsync instead.")] + [System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)] + public Task GetBrowseable(CancellationToken cancellationToken = default) => GetBrowseableAsync(cancellationToken); + + /// + /// GetLastIndexChange + /// + /// CancellationToken + /// GetLastIndexChangeResponse + [Obsolete("This method is obsolete. Use GetLastIndexChangeAsync instead.")] + [System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)] + public Task GetLastIndexChange(CancellationToken cancellationToken = default) => GetLastIndexChangeAsync(cancellationToken); + + /// + /// GetSearchCapabilities + /// + /// CancellationToken + /// GetSearchCapabilitiesResponse + [Obsolete("This method is obsolete. Use GetSearchCapabilitiesAsync instead.")] + [System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)] + public Task GetSearchCapabilities(CancellationToken cancellationToken = default) => GetSearchCapabilitiesAsync(cancellationToken); + + /// + /// GetShareIndexInProgress + /// + /// CancellationToken + /// GetShareIndexInProgressResponse + [Obsolete("This method is obsolete. Use GetShareIndexInProgressAsync instead.")] + [System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)] + public Task GetShareIndexInProgress(CancellationToken cancellationToken = default) => GetShareIndexInProgressAsync(cancellationToken); + + /// + /// GetSortCapabilities + /// + /// CancellationToken + /// GetSortCapabilitiesResponse + [Obsolete("This method is obsolete. Use GetSortCapabilitiesAsync instead.")] + [System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)] + public Task GetSortCapabilities(CancellationToken cancellationToken = default) => GetSortCapabilitiesAsync(cancellationToken); + + /// + /// GetSystemUpdateID + /// + /// CancellationToken + /// GetSystemUpdateIDResponse + [Obsolete("This method is obsolete. Use GetSystemUpdateIDAsync instead.")] + [System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)] + public Task GetSystemUpdateID(CancellationToken cancellationToken = default) => GetSystemUpdateIDAsync(cancellationToken); + + /// + /// Updates the music library (share) index + /// + /// Body payload + /// CancellationToken + /// Success boolean + [Obsolete("This method is obsolete. Use RefreshShareIndexAsync instead.")] + [System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)] + public Task RefreshShareIndex(RefreshShareIndexRequest request, CancellationToken cancellationToken = default) => RefreshShareIndexAsync(request, cancellationToken); + + /// + /// RequestResort + /// + /// Body payload + /// CancellationToken + /// Success boolean + [Obsolete("This method is obsolete. Use RequestResortAsync instead.")] + [System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)] + public Task RequestResort(RequestResortRequest request, CancellationToken cancellationToken = default) => RequestResortAsync(request, cancellationToken); + + /// + /// SetBrowseable + /// + /// Body payload + /// CancellationToken + /// Success boolean + [Obsolete("This method is obsolete. Use SetBrowseableAsync instead.")] + [System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)] + public Task SetBrowseable(SetBrowseableRequest request, CancellationToken cancellationToken = default) => SetBrowseableAsync(request, cancellationToken); + + /// + /// UpdateObject + /// + /// Body payload + /// CancellationToken + /// Success boolean + [Obsolete("This method is obsolete. Use UpdateObjectAsync instead.")] + [System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)] + public Task UpdateObject(UpdateObjectRequest request, CancellationToken cancellationToken = default) => UpdateObjectAsync(request, cancellationToken); } diff --git a/src/Sonos.Base/Services/DevicePropertiesService.gen.cs b/src/Sonos.Base/Services/DevicePropertiesService.gen.cs index b8cc5e4..9907005 100644 --- a/src/Sonos.Base/Services/DevicePropertiesService.gen.cs +++ b/src/Sonos.Base/Services/DevicePropertiesService.gen.cs @@ -38,223 +38,223 @@ public DevicePropertiesService(SonosServiceOptions options) : base(SonosService. /// /// AddBondedZones /// - /// Body payload - /// CancellationToken + /// payload + /// /// Success boolean - public Task AddBondedZones(AddBondedZonesRequest request, CancellationToken cancellationToken = default) => ExecuteRequest(request, cancellationToken); + public Task AddBondedZonesAsync(AddBondedZonesRequest request, CancellationToken cancellationToken = default) => ExecuteRequestAsync(request, cancellationToken, "AddBondedZones"); /// /// Adds satellites and/or a sub woofer to a (main) player. The satellites become hidden. The main player RINCON_* is mandatory. RR: right - rear, LF: left - front, SW: subwoofer /// - /// Body payload - /// CancellationToken + /// payload + /// /// Not all speakers support satellites or sub woofer. Satellites should be of same type (e.g. Play:1) /// Success boolean - public Task AddHTSatellite(AddHTSatelliteRequest request, CancellationToken cancellationToken = default) => ExecuteRequest(request, cancellationToken); + public Task AddHTSatelliteAsync(AddHTSatelliteRequest request, CancellationToken cancellationToken = default) => ExecuteRequestAsync(request, cancellationToken, "AddHTSatellite"); /// /// Create a stereo pair (left, right speakers), right one becomes hidden /// - /// Body payload - /// CancellationToken + /// payload + /// /// Not all speakers support StereoPairs /// Success boolean - public Task CreateStereoPair(CreateStereoPairRequest request, CancellationToken cancellationToken = default) => ExecuteRequest(request, cancellationToken); + public Task CreateStereoPairAsync(CreateStereoPairRequest request, CancellationToken cancellationToken = default) => ExecuteRequestAsync(request, cancellationToken, "CreateStereoPair"); /// /// EnterConfigMode /// - /// Body payload - /// CancellationToken + /// payload + /// /// EnterConfigModeResponse - public Task EnterConfigMode(EnterConfigModeRequest request, CancellationToken cancellationToken = default) => ExecuteRequest(request, cancellationToken); + public Task EnterConfigModeAsync(EnterConfigModeRequest request, CancellationToken cancellationToken = default) => ExecuteRequestAsync(request, cancellationToken, "EnterConfigMode"); /// /// ExitConfigMode /// - /// Body payload - /// CancellationToken + /// payload + /// /// Success boolean - public Task ExitConfigMode(ExitConfigModeRequest request, CancellationToken cancellationToken = default) => ExecuteRequest(request, cancellationToken); + public Task ExitConfigModeAsync(ExitConfigModeRequest request, CancellationToken cancellationToken = default) => ExecuteRequestAsync(request, cancellationToken, "ExitConfigMode"); /// /// GetAutoplayLinkedZones /// - /// Body payload - /// CancellationToken + /// payload + /// /// GetAutoplayLinkedZonesResponse - public Task GetAutoplayLinkedZones(GetAutoplayLinkedZonesRequest request, CancellationToken cancellationToken = default) => ExecuteRequest(request, cancellationToken); + public Task GetAutoplayLinkedZonesAsync(GetAutoplayLinkedZonesRequest request, CancellationToken cancellationToken = default) => ExecuteRequestAsync(request, cancellationToken, "GetAutoplayLinkedZones"); /// /// GetAutoplayRoomUUID /// - /// Body payload - /// CancellationToken + /// payload + /// /// GetAutoplayRoomUUIDResponse - public Task GetAutoplayRoomUUID(GetAutoplayRoomUUIDRequest request, CancellationToken cancellationToken = default) => ExecuteRequest(request, cancellationToken); + public Task GetAutoplayRoomUUIDAsync(GetAutoplayRoomUUIDRequest request, CancellationToken cancellationToken = default) => ExecuteRequestAsync(request, cancellationToken, "GetAutoplayRoomUUID"); /// /// GetAutoplayVolume /// - /// Body payload - /// CancellationToken + /// payload + /// /// GetAutoplayVolumeResponse - public Task GetAutoplayVolume(GetAutoplayVolumeRequest request, CancellationToken cancellationToken = default) => ExecuteRequest(request, cancellationToken); + public Task GetAutoplayVolumeAsync(GetAutoplayVolumeRequest request, CancellationToken cancellationToken = default) => ExecuteRequestAsync(request, cancellationToken, "GetAutoplayVolume"); /// /// Get the current button lock state /// - /// CancellationToken + /// /// GetButtonLockStateResponse - public Task GetButtonLockState(CancellationToken cancellationToken = default) => ExecuteRequest(new BaseRequest(), cancellationToken); + public Task GetButtonLockStateAsync(CancellationToken cancellationToken = default) => ExecuteRequestAsync(new BaseRequest(), cancellationToken, "GetButtonLockState"); /// /// GetButtonState /// - /// CancellationToken + /// /// GetButtonStateResponse - public Task GetButtonState(CancellationToken cancellationToken = default) => ExecuteRequest(new BaseRequest(), cancellationToken); + public Task GetButtonStateAsync(CancellationToken cancellationToken = default) => ExecuteRequestAsync(new BaseRequest(), cancellationToken, "GetButtonState"); /// /// GetHouseholdID /// - /// CancellationToken + /// /// GetHouseholdIDResponse - public Task GetHouseholdID(CancellationToken cancellationToken = default) => ExecuteRequest(new BaseRequest(), cancellationToken); + public Task GetHouseholdIDAsync(CancellationToken cancellationToken = default) => ExecuteRequestAsync(new BaseRequest(), cancellationToken, "GetHouseholdID"); /// /// GetHTForwardState /// - /// CancellationToken + /// /// GetHTForwardStateResponse - public Task GetHTForwardState(CancellationToken cancellationToken = default) => ExecuteRequest(new BaseRequest(), cancellationToken); + public Task GetHTForwardStateAsync(CancellationToken cancellationToken = default) => ExecuteRequestAsync(new BaseRequest(), cancellationToken, "GetHTForwardState"); /// /// Get the current LED state /// - /// CancellationToken + /// /// GetLEDStateResponse - public Task GetLEDState(CancellationToken cancellationToken = default) => ExecuteRequest(new BaseRequest(), cancellationToken); + public Task GetLEDStateAsync(CancellationToken cancellationToken = default) => ExecuteRequestAsync(new BaseRequest(), cancellationToken, "GetLEDState"); /// /// GetUseAutoplayVolume /// - /// Body payload - /// CancellationToken + /// payload + /// /// GetUseAutoplayVolumeResponse - public Task GetUseAutoplayVolume(GetUseAutoplayVolumeRequest request, CancellationToken cancellationToken = default) => ExecuteRequest(request, cancellationToken); + public Task GetUseAutoplayVolumeAsync(GetUseAutoplayVolumeRequest request, CancellationToken cancellationToken = default) => ExecuteRequestAsync(request, cancellationToken, "GetUseAutoplayVolume"); /// /// GetZoneAttributes /// - /// CancellationToken + /// /// GetZoneAttributesResponse - public Task GetZoneAttributes(CancellationToken cancellationToken = default) => ExecuteRequest(new BaseRequest(), cancellationToken); + public Task GetZoneAttributesAsync(CancellationToken cancellationToken = default) => ExecuteRequestAsync(new BaseRequest(), cancellationToken, "GetZoneAttributes"); /// /// Get information about this specific speaker /// - /// CancellationToken + /// /// GetZoneInfoResponse - public Task GetZoneInfo(CancellationToken cancellationToken = default) => ExecuteRequest(new BaseRequest(), cancellationToken); + public Task GetZoneInfoAsync(CancellationToken cancellationToken = default) => ExecuteRequestAsync(new BaseRequest(), cancellationToken, "GetZoneInfo"); /// /// RemoveBondedZones /// - /// Body payload - /// CancellationToken + /// payload + /// /// Success boolean - public Task RemoveBondedZones(RemoveBondedZonesRequest request, CancellationToken cancellationToken = default) => ExecuteRequest(request, cancellationToken); + public Task RemoveBondedZonesAsync(RemoveBondedZonesRequest request, CancellationToken cancellationToken = default) => ExecuteRequestAsync(request, cancellationToken, "RemoveBondedZones"); /// /// Removes a satellite or a sub woofer from (main) player. The satellite becomes visible. /// - /// Body payload - /// CancellationToken + /// payload + /// /// Not all speakers support satellites or sub woofer. Multiples RINCON_* are not allowed. /// Success boolean - public Task RemoveHTSatellite(RemoveHTSatelliteRequest request, CancellationToken cancellationToken = default) => ExecuteRequest(request, cancellationToken); + public Task RemoveHTSatelliteAsync(RemoveHTSatelliteRequest request, CancellationToken cancellationToken = default) => ExecuteRequestAsync(request, cancellationToken, "RemoveHTSatellite"); /// /// RoomDetectionStartChirping /// - /// Body payload - /// CancellationToken + /// payload + /// /// RoomDetectionStartChirpingResponse - public Task RoomDetectionStartChirping(RoomDetectionStartChirpingRequest request, CancellationToken cancellationToken = default) => ExecuteRequest(request, cancellationToken); + public Task RoomDetectionStartChirpingAsync(RoomDetectionStartChirpingRequest request, CancellationToken cancellationToken = default) => ExecuteRequestAsync(request, cancellationToken, "RoomDetectionStartChirping"); /// /// RoomDetectionStopChirping /// - /// Body payload - /// CancellationToken + /// payload + /// /// Success boolean - public Task RoomDetectionStopChirping(RoomDetectionStopChirpingRequest request, CancellationToken cancellationToken = default) => ExecuteRequest(request, cancellationToken); + public Task RoomDetectionStopChirpingAsync(RoomDetectionStopChirpingRequest request, CancellationToken cancellationToken = default) => ExecuteRequestAsync(request, cancellationToken, "RoomDetectionStopChirping"); /// /// Separate a stereo pair /// - /// Body payload - /// CancellationToken + /// payload + /// /// Not all speakers support StereoPairs /// Success boolean - public Task SeparateStereoPair(SeparateStereoPairRequest request, CancellationToken cancellationToken = default) => ExecuteRequest(request, cancellationToken); + public Task SeparateStereoPairAsync(SeparateStereoPairRequest request, CancellationToken cancellationToken = default) => ExecuteRequestAsync(request, cancellationToken, "SeparateStereoPair"); /// /// SetAutoplayLinkedZones /// - /// Body payload - /// CancellationToken + /// payload + /// /// Success boolean - public Task SetAutoplayLinkedZones(SetAutoplayLinkedZonesRequest request, CancellationToken cancellationToken = default) => ExecuteRequest(request, cancellationToken); + public Task SetAutoplayLinkedZonesAsync(SetAutoplayLinkedZonesRequest request, CancellationToken cancellationToken = default) => ExecuteRequestAsync(request, cancellationToken, "SetAutoplayLinkedZones"); /// /// SetAutoplayRoomUUID /// - /// Body payload - /// CancellationToken + /// payload + /// /// Success boolean - public Task SetAutoplayRoomUUID(SetAutoplayRoomUUIDRequest request, CancellationToken cancellationToken = default) => ExecuteRequest(request, cancellationToken); + public Task SetAutoplayRoomUUIDAsync(SetAutoplayRoomUUIDRequest request, CancellationToken cancellationToken = default) => ExecuteRequestAsync(request, cancellationToken, "SetAutoplayRoomUUID"); /// /// SetAutoplayVolume /// - /// Body payload - /// CancellationToken + /// payload + /// /// Success boolean - public Task SetAutoplayVolume(SetAutoplayVolumeRequest request, CancellationToken cancellationToken = default) => ExecuteRequest(request, cancellationToken); + public Task SetAutoplayVolumeAsync(SetAutoplayVolumeRequest request, CancellationToken cancellationToken = default) => ExecuteRequestAsync(request, cancellationToken, "SetAutoplayVolume"); /// /// Set the button lock state /// - /// Body payload - /// CancellationToken + /// payload + /// /// Success boolean - public Task SetButtonLockState(SetButtonLockStateRequest request, CancellationToken cancellationToken = default) => ExecuteRequest(request, cancellationToken); + public Task SetButtonLockStateAsync(SetButtonLockStateRequest request, CancellationToken cancellationToken = default) => ExecuteRequestAsync(request, cancellationToken, "SetButtonLockState"); /// /// Set the LED state /// - /// Body payload - /// CancellationToken + /// payload + /// /// Success boolean - public Task SetLEDState(SetLEDStateRequest request, CancellationToken cancellationToken = default) => ExecuteRequest(request, cancellationToken); + public Task SetLEDStateAsync(SetLEDStateRequest request, CancellationToken cancellationToken = default) => ExecuteRequestAsync(request, cancellationToken, "SetLEDState"); /// /// SetUseAutoplayVolume /// - /// Body payload - /// CancellationToken + /// payload + /// /// Success boolean - public Task SetUseAutoplayVolume(SetUseAutoplayVolumeRequest request, CancellationToken cancellationToken = default) => ExecuteRequest(request, cancellationToken); + public Task SetUseAutoplayVolumeAsync(SetUseAutoplayVolumeRequest request, CancellationToken cancellationToken = default) => ExecuteRequestAsync(request, cancellationToken, "SetUseAutoplayVolume"); /// /// SetZoneAttributes /// - /// Body payload - /// CancellationToken + /// payload + /// /// Success boolean - public Task SetZoneAttributes(SetZoneAttributesRequest request, CancellationToken cancellationToken = default) => ExecuteRequest(request, cancellationToken); + public Task SetZoneAttributesAsync(SetZoneAttributesRequest request, CancellationToken cancellationToken = default) => ExecuteRequestAsync(request, cancellationToken, "SetZoneAttributes"); [System.Xml.Serialization.XmlRoot(Namespace = "")] [SonosServiceRequest("/DeviceProperties/Control", "DeviceProperties")] @@ -723,4 +723,281 @@ public partial interface IDevicePropertiesEvent : IServiceEvent public string? ZoneName { get; } } + + /// + /// AddBondedZones + /// + /// Body payload + /// CancellationToken + /// Success boolean + [Obsolete("This method is obsolete. Use AddBondedZonesAsync instead.")] + [System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)] + public Task AddBondedZones(AddBondedZonesRequest request, CancellationToken cancellationToken = default) => AddBondedZonesAsync(request, cancellationToken); + + /// + /// Adds satellites and/or a sub woofer to a (main) player. The satellites become hidden. The main player RINCON_* is mandatory. RR: right - rear, LF: left - front, SW: subwoofer + /// + /// Body payload + /// CancellationToken + /// Not all speakers support satellites or sub woofer. Satellites should be of same type (e.g. Play:1) + /// Success boolean + [Obsolete("This method is obsolete. Use AddHTSatelliteAsync instead.")] + [System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)] + public Task AddHTSatellite(AddHTSatelliteRequest request, CancellationToken cancellationToken = default) => AddHTSatelliteAsync(request, cancellationToken); + + /// + /// Create a stereo pair (left, right speakers), right one becomes hidden + /// + /// Body payload + /// CancellationToken + /// Not all speakers support StereoPairs + /// Success boolean + [Obsolete("This method is obsolete. Use CreateStereoPairAsync instead.")] + [System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)] + public Task CreateStereoPair(CreateStereoPairRequest request, CancellationToken cancellationToken = default) => CreateStereoPairAsync(request, cancellationToken); + + /// + /// EnterConfigMode + /// + /// Body payload + /// CancellationToken + /// EnterConfigModeResponse + [Obsolete("This method is obsolete. Use EnterConfigModeAsync instead.")] + [System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)] + public Task EnterConfigMode(EnterConfigModeRequest request, CancellationToken cancellationToken = default) => EnterConfigModeAsync(request, cancellationToken); + + /// + /// ExitConfigMode + /// + /// Body payload + /// CancellationToken + /// Success boolean + [Obsolete("This method is obsolete. Use ExitConfigModeAsync instead.")] + [System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)] + public Task ExitConfigMode(ExitConfigModeRequest request, CancellationToken cancellationToken = default) => ExitConfigModeAsync(request, cancellationToken); + + /// + /// GetAutoplayLinkedZones + /// + /// Body payload + /// CancellationToken + /// GetAutoplayLinkedZonesResponse + [Obsolete("This method is obsolete. Use GetAutoplayLinkedZonesAsync instead.")] + [System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)] + public Task GetAutoplayLinkedZones(GetAutoplayLinkedZonesRequest request, CancellationToken cancellationToken = default) => GetAutoplayLinkedZonesAsync(request, cancellationToken); + + /// + /// GetAutoplayRoomUUID + /// + /// Body payload + /// CancellationToken + /// GetAutoplayRoomUUIDResponse + [Obsolete("This method is obsolete. Use GetAutoplayRoomUUIDAsync instead.")] + [System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)] + public Task GetAutoplayRoomUUID(GetAutoplayRoomUUIDRequest request, CancellationToken cancellationToken = default) => GetAutoplayRoomUUIDAsync(request, cancellationToken); + + /// + /// GetAutoplayVolume + /// + /// Body payload + /// CancellationToken + /// GetAutoplayVolumeResponse + [Obsolete("This method is obsolete. Use GetAutoplayVolumeAsync instead.")] + [System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)] + public Task GetAutoplayVolume(GetAutoplayVolumeRequest request, CancellationToken cancellationToken = default) => GetAutoplayVolumeAsync(request, cancellationToken); + + /// + /// Get the current button lock state + /// + /// CancellationToken + /// GetButtonLockStateResponse + [Obsolete("This method is obsolete. Use GetButtonLockStateAsync instead.")] + [System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)] + public Task GetButtonLockState(CancellationToken cancellationToken = default) => GetButtonLockStateAsync(cancellationToken); + + /// + /// GetButtonState + /// + /// CancellationToken + /// GetButtonStateResponse + [Obsolete("This method is obsolete. Use GetButtonStateAsync instead.")] + [System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)] + public Task GetButtonState(CancellationToken cancellationToken = default) => GetButtonStateAsync(cancellationToken); + + /// + /// GetHouseholdID + /// + /// CancellationToken + /// GetHouseholdIDResponse + [Obsolete("This method is obsolete. Use GetHouseholdIDAsync instead.")] + [System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)] + public Task GetHouseholdID(CancellationToken cancellationToken = default) => GetHouseholdIDAsync(cancellationToken); + + /// + /// GetHTForwardState + /// + /// CancellationToken + /// GetHTForwardStateResponse + [Obsolete("This method is obsolete. Use GetHTForwardStateAsync instead.")] + [System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)] + public Task GetHTForwardState(CancellationToken cancellationToken = default) => GetHTForwardStateAsync(cancellationToken); + + /// + /// Get the current LED state + /// + /// CancellationToken + /// GetLEDStateResponse + [Obsolete("This method is obsolete. Use GetLEDStateAsync instead.")] + [System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)] + public Task GetLEDState(CancellationToken cancellationToken = default) => GetLEDStateAsync(cancellationToken); + + /// + /// GetUseAutoplayVolume + /// + /// Body payload + /// CancellationToken + /// GetUseAutoplayVolumeResponse + [Obsolete("This method is obsolete. Use GetUseAutoplayVolumeAsync instead.")] + [System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)] + public Task GetUseAutoplayVolume(GetUseAutoplayVolumeRequest request, CancellationToken cancellationToken = default) => GetUseAutoplayVolumeAsync(request, cancellationToken); + + /// + /// GetZoneAttributes + /// + /// CancellationToken + /// GetZoneAttributesResponse + [Obsolete("This method is obsolete. Use GetZoneAttributesAsync instead.")] + [System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)] + public Task GetZoneAttributes(CancellationToken cancellationToken = default) => GetZoneAttributesAsync(cancellationToken); + + /// + /// Get information about this specific speaker + /// + /// CancellationToken + /// GetZoneInfoResponse + [Obsolete("This method is obsolete. Use GetZoneInfoAsync instead.")] + [System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)] + public Task GetZoneInfo(CancellationToken cancellationToken = default) => GetZoneInfoAsync(cancellationToken); + + /// + /// RemoveBondedZones + /// + /// Body payload + /// CancellationToken + /// Success boolean + [Obsolete("This method is obsolete. Use RemoveBondedZonesAsync instead.")] + [System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)] + public Task RemoveBondedZones(RemoveBondedZonesRequest request, CancellationToken cancellationToken = default) => RemoveBondedZonesAsync(request, cancellationToken); + + /// + /// Removes a satellite or a sub woofer from (main) player. The satellite becomes visible. + /// + /// Body payload + /// CancellationToken + /// Not all speakers support satellites or sub woofer. Multiples RINCON_* are not allowed. + /// Success boolean + [Obsolete("This method is obsolete. Use RemoveHTSatelliteAsync instead.")] + [System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)] + public Task RemoveHTSatellite(RemoveHTSatelliteRequest request, CancellationToken cancellationToken = default) => RemoveHTSatelliteAsync(request, cancellationToken); + + /// + /// RoomDetectionStartChirping + /// + /// Body payload + /// CancellationToken + /// RoomDetectionStartChirpingResponse + [Obsolete("This method is obsolete. Use RoomDetectionStartChirpingAsync instead.")] + [System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)] + public Task RoomDetectionStartChirping(RoomDetectionStartChirpingRequest request, CancellationToken cancellationToken = default) => RoomDetectionStartChirpingAsync(request, cancellationToken); + + /// + /// RoomDetectionStopChirping + /// + /// Body payload + /// CancellationToken + /// Success boolean + [Obsolete("This method is obsolete. Use RoomDetectionStopChirpingAsync instead.")] + [System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)] + public Task RoomDetectionStopChirping(RoomDetectionStopChirpingRequest request, CancellationToken cancellationToken = default) => RoomDetectionStopChirpingAsync(request, cancellationToken); + + /// + /// Separate a stereo pair + /// + /// Body payload + /// CancellationToken + /// Not all speakers support StereoPairs + /// Success boolean + [Obsolete("This method is obsolete. Use SeparateStereoPairAsync instead.")] + [System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)] + public Task SeparateStereoPair(SeparateStereoPairRequest request, CancellationToken cancellationToken = default) => SeparateStereoPairAsync(request, cancellationToken); + + /// + /// SetAutoplayLinkedZones + /// + /// Body payload + /// CancellationToken + /// Success boolean + [Obsolete("This method is obsolete. Use SetAutoplayLinkedZonesAsync instead.")] + [System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)] + public Task SetAutoplayLinkedZones(SetAutoplayLinkedZonesRequest request, CancellationToken cancellationToken = default) => SetAutoplayLinkedZonesAsync(request, cancellationToken); + + /// + /// SetAutoplayRoomUUID + /// + /// Body payload + /// CancellationToken + /// Success boolean + [Obsolete("This method is obsolete. Use SetAutoplayRoomUUIDAsync instead.")] + [System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)] + public Task SetAutoplayRoomUUID(SetAutoplayRoomUUIDRequest request, CancellationToken cancellationToken = default) => SetAutoplayRoomUUIDAsync(request, cancellationToken); + + /// + /// SetAutoplayVolume + /// + /// Body payload + /// CancellationToken + /// Success boolean + [Obsolete("This method is obsolete. Use SetAutoplayVolumeAsync instead.")] + [System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)] + public Task SetAutoplayVolume(SetAutoplayVolumeRequest request, CancellationToken cancellationToken = default) => SetAutoplayVolumeAsync(request, cancellationToken); + + /// + /// Set the button lock state + /// + /// Body payload + /// CancellationToken + /// Success boolean + [Obsolete("This method is obsolete. Use SetButtonLockStateAsync instead.")] + [System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)] + public Task SetButtonLockState(SetButtonLockStateRequest request, CancellationToken cancellationToken = default) => SetButtonLockStateAsync(request, cancellationToken); + + /// + /// Set the LED state + /// + /// Body payload + /// CancellationToken + /// Success boolean + [Obsolete("This method is obsolete. Use SetLEDStateAsync instead.")] + [System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)] + public Task SetLEDState(SetLEDStateRequest request, CancellationToken cancellationToken = default) => SetLEDStateAsync(request, cancellationToken); + + /// + /// SetUseAutoplayVolume + /// + /// Body payload + /// CancellationToken + /// Success boolean + [Obsolete("This method is obsolete. Use SetUseAutoplayVolumeAsync instead.")] + [System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)] + public Task SetUseAutoplayVolume(SetUseAutoplayVolumeRequest request, CancellationToken cancellationToken = default) => SetUseAutoplayVolumeAsync(request, cancellationToken); + + /// + /// SetZoneAttributes + /// + /// Body payload + /// CancellationToken + /// Success boolean + [Obsolete("This method is obsolete. Use SetZoneAttributesAsync instead.")] + [System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)] + public Task SetZoneAttributes(SetZoneAttributesRequest request, CancellationToken cancellationToken = default) => SetZoneAttributesAsync(request, cancellationToken); } diff --git a/src/Sonos.Base/Services/GroupManagementService.gen.cs b/src/Sonos.Base/Services/GroupManagementService.gen.cs index 3cc1efd..4e90e10 100644 --- a/src/Sonos.Base/Services/GroupManagementService.gen.cs +++ b/src/Sonos.Base/Services/GroupManagementService.gen.cs @@ -38,34 +38,34 @@ public GroupManagementService(SonosServiceOptions options) : base(SonosService.G /// /// AddMember /// - /// Body payload - /// CancellationToken + /// payload + /// /// AddMemberResponse - public Task AddMember(AddMemberRequest request, CancellationToken cancellationToken = default) => ExecuteRequest(request, cancellationToken); + public Task AddMemberAsync(AddMemberRequest request, CancellationToken cancellationToken = default) => ExecuteRequestAsync(request, cancellationToken, "AddMember"); /// /// RemoveMember /// - /// Body payload - /// CancellationToken + /// payload + /// /// Success boolean - public Task RemoveMember(RemoveMemberRequest request, CancellationToken cancellationToken = default) => ExecuteRequest(request, cancellationToken); + public Task RemoveMemberAsync(RemoveMemberRequest request, CancellationToken cancellationToken = default) => ExecuteRequestAsync(request, cancellationToken, "RemoveMember"); /// /// ReportTrackBufferingResult /// - /// Body payload - /// CancellationToken + /// payload + /// /// Success boolean - public Task ReportTrackBufferingResult(ReportTrackBufferingResultRequest request, CancellationToken cancellationToken = default) => ExecuteRequest(request, cancellationToken); + public Task ReportTrackBufferingResultAsync(ReportTrackBufferingResultRequest request, CancellationToken cancellationToken = default) => ExecuteRequestAsync(request, cancellationToken, "ReportTrackBufferingResult"); /// /// SetSourceAreaIds /// - /// Body payload - /// CancellationToken + /// payload + /// /// Success boolean - public Task SetSourceAreaIds(SetSourceAreaIdsRequest request, CancellationToken cancellationToken = default) => ExecuteRequest(request, cancellationToken); + public Task SetSourceAreaIdsAsync(SetSourceAreaIdsRequest request, CancellationToken cancellationToken = default) => ExecuteRequestAsync(request, cancellationToken, "SetSourceAreaIds"); [System.Xml.Serialization.XmlRoot(Namespace = "")] [SonosServiceRequest("/GroupManagement/Control", "GroupManagement")] @@ -149,4 +149,44 @@ public partial interface IGroupManagementEvent : IServiceEvent public string? VolumeAVTransportURI { get; } } + + /// + /// AddMember + /// + /// Body payload + /// CancellationToken + /// AddMemberResponse + [Obsolete("This method is obsolete. Use AddMemberAsync instead.")] + [System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)] + public Task AddMember(AddMemberRequest request, CancellationToken cancellationToken = default) => AddMemberAsync(request, cancellationToken); + + /// + /// RemoveMember + /// + /// Body payload + /// CancellationToken + /// Success boolean + [Obsolete("This method is obsolete. Use RemoveMemberAsync instead.")] + [System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)] + public Task RemoveMember(RemoveMemberRequest request, CancellationToken cancellationToken = default) => RemoveMemberAsync(request, cancellationToken); + + /// + /// ReportTrackBufferingResult + /// + /// Body payload + /// CancellationToken + /// Success boolean + [Obsolete("This method is obsolete. Use ReportTrackBufferingResultAsync instead.")] + [System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)] + public Task ReportTrackBufferingResult(ReportTrackBufferingResultRequest request, CancellationToken cancellationToken = default) => ReportTrackBufferingResultAsync(request, cancellationToken); + + /// + /// SetSourceAreaIds + /// + /// Body payload + /// CancellationToken + /// Success boolean + [Obsolete("This method is obsolete. Use SetSourceAreaIdsAsync instead.")] + [System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)] + public Task SetSourceAreaIds(SetSourceAreaIdsRequest request, CancellationToken cancellationToken = default) => SetSourceAreaIdsAsync(request, cancellationToken); } diff --git a/src/Sonos.Base/Services/GroupRenderingControlService.gen.cs b/src/Sonos.Base/Services/GroupRenderingControlService.gen.cs index 62f07e9..6dac9ee 100644 --- a/src/Sonos.Base/Services/GroupRenderingControlService.gen.cs +++ b/src/Sonos.Base/Services/GroupRenderingControlService.gen.cs @@ -38,53 +38,53 @@ public GroupRenderingControlService(SonosServiceOptions options) : base(SonosSer /// /// Get the group mute state. /// - /// CancellationToken + /// /// Should be send to coordinator only /// GetGroupMuteResponse - public Task GetGroupMute(CancellationToken cancellationToken = default) => ExecuteRequest(new GetGroupMuteRequest(), cancellationToken); + public Task GetGroupMuteAsync(CancellationToken cancellationToken = default) => ExecuteRequestAsync(new GetGroupMuteRequest(), cancellationToken, "GetGroupMute"); /// /// Get the group volume. /// - /// CancellationToken + /// /// Should be send to coordinator only /// GetGroupVolumeResponse - public Task GetGroupVolume(CancellationToken cancellationToken = default) => ExecuteRequest(new GetGroupVolumeRequest(), cancellationToken); + public Task GetGroupVolumeAsync(CancellationToken cancellationToken = default) => ExecuteRequestAsync(new GetGroupVolumeRequest(), cancellationToken, "GetGroupVolume"); /// /// (Un-/)Mute the entire group /// - /// Body payload - /// CancellationToken + /// payload + /// /// Should be send to coordinator only /// Success boolean - public Task SetGroupMute(SetGroupMuteRequest request, CancellationToken cancellationToken = default) => ExecuteRequest(request, cancellationToken); + public Task SetGroupMuteAsync(SetGroupMuteRequest request, CancellationToken cancellationToken = default) => ExecuteRequestAsync(request, cancellationToken, "SetGroupMute"); /// /// Change group volume. Players volume will be changed proportionally based on last snapshot /// - /// Body payload - /// CancellationToken + /// payload + /// /// Should be send to coordinator only /// Success boolean - public Task SetGroupVolume(SetGroupVolumeRequest request, CancellationToken cancellationToken = default) => ExecuteRequest(request, cancellationToken); + public Task SetGroupVolumeAsync(SetGroupVolumeRequest request, CancellationToken cancellationToken = default) => ExecuteRequestAsync(request, cancellationToken, "SetGroupVolume"); /// /// Relatively change group volume - returns final group volume. Players volume will be changed proportionally based on last snapshot /// - /// Body payload - /// CancellationToken + /// payload + /// /// Should be send to coordinator only /// SetRelativeGroupVolumeResponse - public Task SetRelativeGroupVolume(SetRelativeGroupVolumeRequest request, CancellationToken cancellationToken = default) => ExecuteRequest(request, cancellationToken); + public Task SetRelativeGroupVolumeAsync(SetRelativeGroupVolumeRequest request, CancellationToken cancellationToken = default) => ExecuteRequestAsync(request, cancellationToken, "SetRelativeGroupVolume"); /// /// Creates a new group volume snapshot, the volume ratio between all players. It is used by SetGroupVolume and SetRelativeGroupVolume /// - /// CancellationToken + /// /// Should be send to coordinator only /// Success boolean - public Task SnapshotGroupVolume(CancellationToken cancellationToken = default) => ExecuteRequest(new SnapshotGroupVolumeRequest(), cancellationToken); + public Task SnapshotGroupVolumeAsync(CancellationToken cancellationToken = default) => ExecuteRequestAsync(new SnapshotGroupVolumeRequest(), cancellationToken, "SnapshotGroupVolume"); [System.Xml.Serialization.XmlRoot(Namespace = "")] [SonosServiceRequest("/MediaRenderer/GroupRenderingControl/Control", "GroupRenderingControl")] @@ -214,4 +214,67 @@ public partial interface IGroupRenderingControlEvent : IServiceEvent public bool? GroupVolumeChangeable { get; } } + + /// + /// Get the group mute state. + /// + /// CancellationToken + /// Should be send to coordinator only + /// GetGroupMuteResponse + [Obsolete("This method is obsolete. Use GetGroupMuteAsync instead.")] + [System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)] + public Task GetGroupMute(CancellationToken cancellationToken = default) => GetGroupMuteAsync(cancellationToken); + + /// + /// Get the group volume. + /// + /// CancellationToken + /// Should be send to coordinator only + /// GetGroupVolumeResponse + [Obsolete("This method is obsolete. Use GetGroupVolumeAsync instead.")] + [System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)] + public Task GetGroupVolume(CancellationToken cancellationToken = default) => GetGroupVolumeAsync(cancellationToken); + + /// + /// (Un-/)Mute the entire group + /// + /// Body payload + /// CancellationToken + /// Should be send to coordinator only + /// Success boolean + [Obsolete("This method is obsolete. Use SetGroupMuteAsync instead.")] + [System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)] + public Task SetGroupMute(SetGroupMuteRequest request, CancellationToken cancellationToken = default) => SetGroupMuteAsync(request, cancellationToken); + + /// + /// Change group volume. Players volume will be changed proportionally based on last snapshot + /// + /// Body payload + /// CancellationToken + /// Should be send to coordinator only + /// Success boolean + [Obsolete("This method is obsolete. Use SetGroupVolumeAsync instead.")] + [System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)] + public Task SetGroupVolume(SetGroupVolumeRequest request, CancellationToken cancellationToken = default) => SetGroupVolumeAsync(request, cancellationToken); + + /// + /// Relatively change group volume - returns final group volume. Players volume will be changed proportionally based on last snapshot + /// + /// Body payload + /// CancellationToken + /// Should be send to coordinator only + /// SetRelativeGroupVolumeResponse + [Obsolete("This method is obsolete. Use SetRelativeGroupVolumeAsync instead.")] + [System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)] + public Task SetRelativeGroupVolume(SetRelativeGroupVolumeRequest request, CancellationToken cancellationToken = default) => SetRelativeGroupVolumeAsync(request, cancellationToken); + + /// + /// Creates a new group volume snapshot, the volume ratio between all players. It is used by SetGroupVolume and SetRelativeGroupVolume + /// + /// CancellationToken + /// Should be send to coordinator only + /// Success boolean + [Obsolete("This method is obsolete. Use SnapshotGroupVolumeAsync instead.")] + [System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)] + public Task SnapshotGroupVolume(CancellationToken cancellationToken = default) => SnapshotGroupVolumeAsync(cancellationToken); } diff --git a/src/Sonos.Base/Services/HTControlService.gen.cs b/src/Sonos.Base/Services/HTControlService.gen.cs index 13360b0..c9b0d0f 100644 --- a/src/Sonos.Base/Services/HTControlService.gen.cs +++ b/src/Sonos.Base/Services/HTControlService.gen.cs @@ -38,63 +38,63 @@ public HTControlService(SonosServiceOptions options) : base(SonosService.HTContr /// /// CommitLearnedIRCodes /// - /// Body payload - /// CancellationToken + /// payload + /// /// Success boolean - public Task CommitLearnedIRCodes(CommitLearnedIRCodesRequest request, CancellationToken cancellationToken = default) => ExecuteRequest(request, cancellationToken); + public Task CommitLearnedIRCodesAsync(CommitLearnedIRCodesRequest request, CancellationToken cancellationToken = default) => ExecuteRequestAsync(request, cancellationToken, "CommitLearnedIRCodes"); /// /// GetIRRepeaterState /// - /// CancellationToken + /// /// GetIRRepeaterStateResponse - public Task GetIRRepeaterState(CancellationToken cancellationToken = default) => ExecuteRequest(new BaseRequest(), cancellationToken); + public Task GetIRRepeaterStateAsync(CancellationToken cancellationToken = default) => ExecuteRequestAsync(new BaseRequest(), cancellationToken, "GetIRRepeaterState"); /// /// GetLEDFeedbackState /// - /// CancellationToken + /// /// GetLEDFeedbackStateResponse - public Task GetLEDFeedbackState(CancellationToken cancellationToken = default) => ExecuteRequest(new BaseRequest(), cancellationToken); + public Task GetLEDFeedbackStateAsync(CancellationToken cancellationToken = default) => ExecuteRequestAsync(new BaseRequest(), cancellationToken, "GetLEDFeedbackState"); /// /// IdentifyIRRemote /// - /// Body payload - /// CancellationToken + /// payload + /// /// Success boolean - public Task IdentifyIRRemote(IdentifyIRRemoteRequest request, CancellationToken cancellationToken = default) => ExecuteRequest(request, cancellationToken); + public Task IdentifyIRRemoteAsync(IdentifyIRRemoteRequest request, CancellationToken cancellationToken = default) => ExecuteRequestAsync(request, cancellationToken, "IdentifyIRRemote"); /// /// IsRemoteConfigured /// - /// CancellationToken + /// /// IsRemoteConfiguredResponse - public Task IsRemoteConfigured(CancellationToken cancellationToken = default) => ExecuteRequest(new BaseRequest(), cancellationToken); + public Task IsRemoteConfiguredAsync(CancellationToken cancellationToken = default) => ExecuteRequestAsync(new BaseRequest(), cancellationToken, "IsRemoteConfigured"); /// /// LearnIRCode /// - /// Body payload - /// CancellationToken + /// payload + /// /// Success boolean - public Task LearnIRCode(LearnIRCodeRequest request, CancellationToken cancellationToken = default) => ExecuteRequest(request, cancellationToken); + public Task LearnIRCodeAsync(LearnIRCodeRequest request, CancellationToken cancellationToken = default) => ExecuteRequestAsync(request, cancellationToken, "LearnIRCode"); /// /// SetIRRepeaterState /// - /// Body payload - /// CancellationToken + /// payload + /// /// Success boolean - public Task SetIRRepeaterState(SetIRRepeaterStateRequest request, CancellationToken cancellationToken = default) => ExecuteRequest(request, cancellationToken); + public Task SetIRRepeaterStateAsync(SetIRRepeaterStateRequest request, CancellationToken cancellationToken = default) => ExecuteRequestAsync(request, cancellationToken, "SetIRRepeaterState"); /// /// SetLEDFeedbackState /// - /// Body payload - /// CancellationToken + /// payload + /// /// Success boolean - public Task SetLEDFeedbackState(SetLEDFeedbackStateRequest request, CancellationToken cancellationToken = default) => ExecuteRequest(request, cancellationToken); + public Task SetLEDFeedbackStateAsync(SetLEDFeedbackStateRequest request, CancellationToken cancellationToken = default) => ExecuteRequestAsync(request, cancellationToken, "SetLEDFeedbackState"); [System.Xml.Serialization.XmlRoot(Namespace = "")] [SonosServiceRequest("/HTControl/Control", "HTControl")] @@ -184,4 +184,81 @@ public partial interface IHTControlEvent : IServiceEvent public bool? TOSLinkConnected { get; } } + + /// + /// CommitLearnedIRCodes + /// + /// Body payload + /// CancellationToken + /// Success boolean + [Obsolete("This method is obsolete. Use CommitLearnedIRCodesAsync instead.")] + [System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)] + public Task CommitLearnedIRCodes(CommitLearnedIRCodesRequest request, CancellationToken cancellationToken = default) => CommitLearnedIRCodesAsync(request, cancellationToken); + + /// + /// GetIRRepeaterState + /// + /// CancellationToken + /// GetIRRepeaterStateResponse + [Obsolete("This method is obsolete. Use GetIRRepeaterStateAsync instead.")] + [System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)] + public Task GetIRRepeaterState(CancellationToken cancellationToken = default) => GetIRRepeaterStateAsync(cancellationToken); + + /// + /// GetLEDFeedbackState + /// + /// CancellationToken + /// GetLEDFeedbackStateResponse + [Obsolete("This method is obsolete. Use GetLEDFeedbackStateAsync instead.")] + [System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)] + public Task GetLEDFeedbackState(CancellationToken cancellationToken = default) => GetLEDFeedbackStateAsync(cancellationToken); + + /// + /// IdentifyIRRemote + /// + /// Body payload + /// CancellationToken + /// Success boolean + [Obsolete("This method is obsolete. Use IdentifyIRRemoteAsync instead.")] + [System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)] + public Task IdentifyIRRemote(IdentifyIRRemoteRequest request, CancellationToken cancellationToken = default) => IdentifyIRRemoteAsync(request, cancellationToken); + + /// + /// IsRemoteConfigured + /// + /// CancellationToken + /// IsRemoteConfiguredResponse + [Obsolete("This method is obsolete. Use IsRemoteConfiguredAsync instead.")] + [System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)] + public Task IsRemoteConfigured(CancellationToken cancellationToken = default) => IsRemoteConfiguredAsync(cancellationToken); + + /// + /// LearnIRCode + /// + /// Body payload + /// CancellationToken + /// Success boolean + [Obsolete("This method is obsolete. Use LearnIRCodeAsync instead.")] + [System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)] + public Task LearnIRCode(LearnIRCodeRequest request, CancellationToken cancellationToken = default) => LearnIRCodeAsync(request, cancellationToken); + + /// + /// SetIRRepeaterState + /// + /// Body payload + /// CancellationToken + /// Success boolean + [Obsolete("This method is obsolete. Use SetIRRepeaterStateAsync instead.")] + [System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)] + public Task SetIRRepeaterState(SetIRRepeaterStateRequest request, CancellationToken cancellationToken = default) => SetIRRepeaterStateAsync(request, cancellationToken); + + /// + /// SetLEDFeedbackState + /// + /// Body payload + /// CancellationToken + /// Success boolean + [Obsolete("This method is obsolete. Use SetLEDFeedbackStateAsync instead.")] + [System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)] + public Task SetLEDFeedbackState(SetLEDFeedbackStateRequest request, CancellationToken cancellationToken = default) => SetLEDFeedbackStateAsync(request, cancellationToken); } diff --git a/src/Sonos.Base/Services/MusicServicesService.gen.cs b/src/Sonos.Base/Services/MusicServicesService.gen.cs index ad12f58..11f6982 100644 --- a/src/Sonos.Base/Services/MusicServicesService.gen.cs +++ b/src/Sonos.Base/Services/MusicServicesService.gen.cs @@ -38,25 +38,25 @@ public MusicServicesService(SonosServiceOptions options) : base(SonosService.Mus /// /// GetSessionId /// - /// Body payload - /// CancellationToken + /// payload + /// /// GetSessionIdResponse - public Task GetSessionId(GetSessionIdRequest request, CancellationToken cancellationToken = default) => ExecuteRequest(request, cancellationToken); + public Task GetSessionIdAsync(GetSessionIdRequest request, CancellationToken cancellationToken = default) => ExecuteRequestAsync(request, cancellationToken, "GetSessionId"); /// /// Load music service list as xml /// - /// CancellationToken + /// /// Some libraries also support ListAndParseAvailableServices /// ListAvailableServicesResponse - public Task ListAvailableServices(CancellationToken cancellationToken = default) => ExecuteRequest(new BaseRequest(), cancellationToken); + public Task ListAvailableServicesAsync(CancellationToken cancellationToken = default) => ExecuteRequestAsync(new BaseRequest(), cancellationToken, "ListAvailableServices"); /// /// UpdateAvailableServices /// - /// CancellationToken + /// /// Success boolean - public Task UpdateAvailableServices(CancellationToken cancellationToken = default) => ExecuteRequest(new BaseRequest(), cancellationToken); + public Task UpdateAvailableServicesAsync(CancellationToken cancellationToken = default) => ExecuteRequestAsync(new BaseRequest(), cancellationToken, "UpdateAvailableServices"); [System.Xml.Serialization.XmlRoot(Namespace = "")] [SonosServiceRequest("/MusicServices/Control", "MusicServices")] @@ -112,4 +112,33 @@ public partial interface IMusicServicesEvent : IServiceEvent public string? Username { get; } } + + /// + /// GetSessionId + /// + /// Body payload + /// CancellationToken + /// GetSessionIdResponse + [Obsolete("This method is obsolete. Use GetSessionIdAsync instead.")] + [System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)] + public Task GetSessionId(GetSessionIdRequest request, CancellationToken cancellationToken = default) => GetSessionIdAsync(request, cancellationToken); + + /// + /// Load music service list as xml + /// + /// CancellationToken + /// Some libraries also support ListAndParseAvailableServices + /// ListAvailableServicesResponse + [Obsolete("This method is obsolete. Use ListAvailableServicesAsync instead.")] + [System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)] + public Task ListAvailableServices(CancellationToken cancellationToken = default) => ListAvailableServicesAsync(cancellationToken); + + /// + /// UpdateAvailableServices + /// + /// CancellationToken + /// Success boolean + [Obsolete("This method is obsolete. Use UpdateAvailableServicesAsync instead.")] + [System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)] + public Task UpdateAvailableServices(CancellationToken cancellationToken = default) => UpdateAvailableServicesAsync(cancellationToken); } diff --git a/src/Sonos.Base/Services/QPlayService.gen.cs b/src/Sonos.Base/Services/QPlayService.gen.cs index 6fe594c..563d30c 100644 --- a/src/Sonos.Base/Services/QPlayService.gen.cs +++ b/src/Sonos.Base/Services/QPlayService.gen.cs @@ -38,10 +38,10 @@ public QPlayService(SonosServiceOptions options) : base(SonosService.QPlay, "/QP /// /// QPlayAuth /// - /// Body payload - /// CancellationToken + /// payload + /// /// QPlayAuthResponse - public Task QPlayAuth(QPlayAuthRequest request, CancellationToken cancellationToken = default) => ExecuteRequest(request, cancellationToken); + public Task QPlayAuthAsync(QPlayAuthRequest request, CancellationToken cancellationToken = default) => ExecuteRequestAsync(request, cancellationToken, "QPlayAuth"); [System.Xml.Serialization.XmlRoot(Namespace = "")] [SonosServiceRequest("/QPlay/Control", "QPlay")] @@ -73,4 +73,14 @@ public partial class QPlayAuthResponse [System.Xml.Serialization.XmlElement(Namespace = "")] public string DID { get; set; } } + + /// + /// QPlayAuth + /// + /// Body payload + /// CancellationToken + /// QPlayAuthResponse + [Obsolete("This method is obsolete. Use QPlayAuthAsync instead.")] + [System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)] + public Task QPlayAuth(QPlayAuthRequest request, CancellationToken cancellationToken = default) => QPlayAuthAsync(request, cancellationToken); } diff --git a/src/Sonos.Base/Services/QueueService.gen.cs b/src/Sonos.Base/Services/QueueService.gen.cs index 6fb6078..a01b461 100644 --- a/src/Sonos.Base/Services/QueueService.gen.cs +++ b/src/Sonos.Base/Services/QueueService.gen.cs @@ -38,89 +38,89 @@ public QueueService(SonosServiceOptions options) : base(SonosService.Queue, "/Me /// /// AddMultipleURIs /// - /// Body payload - /// CancellationToken + /// payload + /// /// AddMultipleURIsResponse - public Task AddMultipleURIs(AddMultipleURIsRequest request, CancellationToken cancellationToken = default) => ExecuteRequest(request, cancellationToken); + public Task AddMultipleURIsAsync(AddMultipleURIsRequest request, CancellationToken cancellationToken = default) => ExecuteRequestAsync(request, cancellationToken, "AddMultipleURIs"); /// /// AddURI /// - /// Body payload - /// CancellationToken + /// payload + /// /// AddURIResponse - public Task AddURI(AddURIRequest request, CancellationToken cancellationToken = default) => ExecuteRequest(request, cancellationToken); + public Task AddURIAsync(AddURIRequest request, CancellationToken cancellationToken = default) => ExecuteRequestAsync(request, cancellationToken, "AddURI"); /// /// AttachQueue /// - /// Body payload - /// CancellationToken + /// payload + /// /// AttachQueueResponse - public Task AttachQueue(AttachQueueRequest request, CancellationToken cancellationToken = default) => ExecuteRequest(request, cancellationToken); + public Task AttachQueueAsync(AttachQueueRequest request, CancellationToken cancellationToken = default) => ExecuteRequestAsync(request, cancellationToken, "AttachQueue"); /// /// Backup /// - /// CancellationToken + /// /// Success boolean - public Task Backup(CancellationToken cancellationToken = default) => ExecuteRequest(new BaseRequest(), cancellationToken); + public Task BackupAsync(CancellationToken cancellationToken = default) => ExecuteRequestAsync(new BaseRequest(), cancellationToken, "Backup"); /// /// Browse /// - /// Body payload - /// CancellationToken + /// payload + /// /// BrowseResponse - public Task Browse(BrowseRequest request, CancellationToken cancellationToken = default) => ExecuteRequest(request, cancellationToken); + public Task BrowseAsync(BrowseRequest request, CancellationToken cancellationToken = default) => ExecuteRequestAsync(request, cancellationToken, "Browse"); /// /// CreateQueue /// - /// Body payload - /// CancellationToken + /// payload + /// /// CreateQueueResponse - public Task CreateQueue(CreateQueueRequest request, CancellationToken cancellationToken = default) => ExecuteRequest(request, cancellationToken); + public Task CreateQueueAsync(CreateQueueRequest request, CancellationToken cancellationToken = default) => ExecuteRequestAsync(request, cancellationToken, "CreateQueue"); /// /// RemoveAllTracks /// - /// Body payload - /// CancellationToken + /// payload + /// /// RemoveAllTracksResponse - public Task RemoveAllTracks(RemoveAllTracksRequest request, CancellationToken cancellationToken = default) => ExecuteRequest(request, cancellationToken); + public Task RemoveAllTracksAsync(RemoveAllTracksRequest request, CancellationToken cancellationToken = default) => ExecuteRequestAsync(request, cancellationToken, "RemoveAllTracks"); /// /// RemoveTrackRange /// - /// Body payload - /// CancellationToken + /// payload + /// /// RemoveTrackRangeResponse - public Task RemoveTrackRange(RemoveTrackRangeRequest request, CancellationToken cancellationToken = default) => ExecuteRequest(request, cancellationToken); + public Task RemoveTrackRangeAsync(RemoveTrackRangeRequest request, CancellationToken cancellationToken = default) => ExecuteRequestAsync(request, cancellationToken, "RemoveTrackRange"); /// /// ReorderTracks /// - /// Body payload - /// CancellationToken + /// payload + /// /// ReorderTracksResponse - public Task ReorderTracks(ReorderTracksRequest request, CancellationToken cancellationToken = default) => ExecuteRequest(request, cancellationToken); + public Task ReorderTracksAsync(ReorderTracksRequest request, CancellationToken cancellationToken = default) => ExecuteRequestAsync(request, cancellationToken, "ReorderTracks"); /// /// ReplaceAllTracks /// - /// Body payload - /// CancellationToken + /// payload + /// /// ReplaceAllTracksResponse - public Task ReplaceAllTracks(ReplaceAllTracksRequest request, CancellationToken cancellationToken = default) => ExecuteRequest(request, cancellationToken); + public Task ReplaceAllTracksAsync(ReplaceAllTracksRequest request, CancellationToken cancellationToken = default) => ExecuteRequestAsync(request, cancellationToken, "ReplaceAllTracks"); /// /// SaveAsSonosPlaylist /// - /// Body payload - /// CancellationToken + /// payload + /// /// SaveAsSonosPlaylistResponse - public Task SaveAsSonosPlaylist(SaveAsSonosPlaylistRequest request, CancellationToken cancellationToken = default) => ExecuteRequest(request, cancellationToken); + public Task SaveAsSonosPlaylistAsync(SaveAsSonosPlaylistRequest request, CancellationToken cancellationToken = default) => ExecuteRequestAsync(request, cancellationToken, "SaveAsSonosPlaylist"); [System.Xml.Serialization.XmlRoot(Namespace = "")] [SonosServiceRequest("/MediaRenderer/Queue/Control", "Queue")] @@ -456,4 +456,113 @@ public partial interface IQueueEvent : IServiceEvent public int? UpdateID { get; } } + + /// + /// AddMultipleURIs + /// + /// Body payload + /// CancellationToken + /// AddMultipleURIsResponse + [Obsolete("This method is obsolete. Use AddMultipleURIsAsync instead.")] + [System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)] + public Task AddMultipleURIs(AddMultipleURIsRequest request, CancellationToken cancellationToken = default) => AddMultipleURIsAsync(request, cancellationToken); + + /// + /// AddURI + /// + /// Body payload + /// CancellationToken + /// AddURIResponse + [Obsolete("This method is obsolete. Use AddURIAsync instead.")] + [System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)] + public Task AddURI(AddURIRequest request, CancellationToken cancellationToken = default) => AddURIAsync(request, cancellationToken); + + /// + /// AttachQueue + /// + /// Body payload + /// CancellationToken + /// AttachQueueResponse + [Obsolete("This method is obsolete. Use AttachQueueAsync instead.")] + [System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)] + public Task AttachQueue(AttachQueueRequest request, CancellationToken cancellationToken = default) => AttachQueueAsync(request, cancellationToken); + + /// + /// Backup + /// + /// CancellationToken + /// Success boolean + [Obsolete("This method is obsolete. Use BackupAsync instead.")] + [System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)] + public Task Backup(CancellationToken cancellationToken = default) => BackupAsync(cancellationToken); + + /// + /// Browse + /// + /// Body payload + /// CancellationToken + /// BrowseResponse + [Obsolete("This method is obsolete. Use BrowseAsync instead.")] + [System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)] + public Task Browse(BrowseRequest request, CancellationToken cancellationToken = default) => BrowseAsync(request, cancellationToken); + + /// + /// CreateQueue + /// + /// Body payload + /// CancellationToken + /// CreateQueueResponse + [Obsolete("This method is obsolete. Use CreateQueueAsync instead.")] + [System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)] + public Task CreateQueue(CreateQueueRequest request, CancellationToken cancellationToken = default) => CreateQueueAsync(request, cancellationToken); + + /// + /// RemoveAllTracks + /// + /// Body payload + /// CancellationToken + /// RemoveAllTracksResponse + [Obsolete("This method is obsolete. Use RemoveAllTracksAsync instead.")] + [System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)] + public Task RemoveAllTracks(RemoveAllTracksRequest request, CancellationToken cancellationToken = default) => RemoveAllTracksAsync(request, cancellationToken); + + /// + /// RemoveTrackRange + /// + /// Body payload + /// CancellationToken + /// RemoveTrackRangeResponse + [Obsolete("This method is obsolete. Use RemoveTrackRangeAsync instead.")] + [System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)] + public Task RemoveTrackRange(RemoveTrackRangeRequest request, CancellationToken cancellationToken = default) => RemoveTrackRangeAsync(request, cancellationToken); + + /// + /// ReorderTracks + /// + /// Body payload + /// CancellationToken + /// ReorderTracksResponse + [Obsolete("This method is obsolete. Use ReorderTracksAsync instead.")] + [System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)] + public Task ReorderTracks(ReorderTracksRequest request, CancellationToken cancellationToken = default) => ReorderTracksAsync(request, cancellationToken); + + /// + /// ReplaceAllTracks + /// + /// Body payload + /// CancellationToken + /// ReplaceAllTracksResponse + [Obsolete("This method is obsolete. Use ReplaceAllTracksAsync instead.")] + [System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)] + public Task ReplaceAllTracks(ReplaceAllTracksRequest request, CancellationToken cancellationToken = default) => ReplaceAllTracksAsync(request, cancellationToken); + + /// + /// SaveAsSonosPlaylist + /// + /// Body payload + /// CancellationToken + /// SaveAsSonosPlaylistResponse + [Obsolete("This method is obsolete. Use SaveAsSonosPlaylistAsync instead.")] + [System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)] + public Task SaveAsSonosPlaylist(SaveAsSonosPlaylistRequest request, CancellationToken cancellationToken = default) => SaveAsSonosPlaylistAsync(request, cancellationToken); } diff --git a/src/Sonos.Base/Services/RenderingControlService.cs b/src/Sonos.Base/Services/RenderingControlService.cs index 2b52c5d..ab326ad 100644 --- a/src/Sonos.Base/Services/RenderingControlService.cs +++ b/src/Sonos.Base/Services/RenderingControlService.cs @@ -8,9 +8,9 @@ namespace Sonos.Base.Services { public partial class RenderingControlService { - public async Task GetVolume(string channel = "Master", CancellationToken cancellationToken = default) + public async Task GetVolumeAsync(string channel = "Master", CancellationToken cancellationToken = default) { - var resp = await GetVolume(new GetVolumeRequest { InstanceID = 0, Channel = channel }, cancellationToken); + var resp = await GetVolumeAsync(new GetVolumeRequest { InstanceID = 0, Channel = channel }, cancellationToken); return resp.CurrentVolume; } } diff --git a/src/Sonos.Base/Services/RenderingControlService.gen.cs b/src/Sonos.Base/Services/RenderingControlService.gen.cs index fa3a68f..38e0d7c 100644 --- a/src/Sonos.Base/Services/RenderingControlService.gen.cs +++ b/src/Sonos.Base/Services/RenderingControlService.gen.cs @@ -38,221 +38,221 @@ public RenderingControlService(SonosServiceOptions options) : base(SonosService. /// /// Get bass level between -10 and 10 /// - /// CancellationToken + /// /// GetBassResponse - public Task GetBass(CancellationToken cancellationToken = default) => ExecuteRequest(new GetBassRequest(), cancellationToken); + public Task GetBassAsync(CancellationToken cancellationToken = default) => ExecuteRequestAsync(new GetBassRequest(), cancellationToken, "GetBass"); /// /// Get equalizer value /// - /// Body payload - /// CancellationToken + /// payload + /// /// Not all EQ types are available on every speaker /// GetEQResponse - public Task GetEQ(GetEQRequest request, CancellationToken cancellationToken = default) => ExecuteRequest(request, cancellationToken); + public Task GetEQAsync(GetEQRequest request, CancellationToken cancellationToken = default) => ExecuteRequestAsync(request, cancellationToken, "GetEQ"); /// /// GetHeadphoneConnected /// - /// CancellationToken + /// /// GetHeadphoneConnectedResponse - public Task GetHeadphoneConnected(CancellationToken cancellationToken = default) => ExecuteRequest(new GetHeadphoneConnectedRequest(), cancellationToken); + public Task GetHeadphoneConnectedAsync(CancellationToken cancellationToken = default) => ExecuteRequestAsync(new GetHeadphoneConnectedRequest(), cancellationToken, "GetHeadphoneConnected"); /// /// Whether or not Loudness is on /// - /// Body payload - /// CancellationToken + /// payload + /// /// GetLoudnessResponse - public Task GetLoudness(GetLoudnessRequest request, CancellationToken cancellationToken = default) => ExecuteRequest(request, cancellationToken); + public Task GetLoudnessAsync(GetLoudnessRequest request, CancellationToken cancellationToken = default) => ExecuteRequestAsync(request, cancellationToken, "GetLoudness"); /// /// GetMute /// - /// Body payload - /// CancellationToken + /// payload + /// /// GetMuteResponse - public Task GetMute(GetMuteRequest request, CancellationToken cancellationToken = default) => ExecuteRequest(request, cancellationToken); + public Task GetMuteAsync(GetMuteRequest request, CancellationToken cancellationToken = default) => ExecuteRequestAsync(request, cancellationToken, "GetMute"); /// /// GetOutputFixed /// - /// CancellationToken + /// /// GetOutputFixedResponse - public Task GetOutputFixed(CancellationToken cancellationToken = default) => ExecuteRequest(new GetOutputFixedRequest(), cancellationToken); + public Task GetOutputFixedAsync(CancellationToken cancellationToken = default) => ExecuteRequestAsync(new GetOutputFixedRequest(), cancellationToken, "GetOutputFixed"); /// /// GetRoomCalibrationStatus /// - /// CancellationToken + /// /// GetRoomCalibrationStatusResponse - public Task GetRoomCalibrationStatus(CancellationToken cancellationToken = default) => ExecuteRequest(new GetRoomCalibrationStatusRequest(), cancellationToken); + public Task GetRoomCalibrationStatusAsync(CancellationToken cancellationToken = default) => ExecuteRequestAsync(new GetRoomCalibrationStatusRequest(), cancellationToken, "GetRoomCalibrationStatus"); /// /// GetSupportsOutputFixed /// - /// CancellationToken + /// /// GetSupportsOutputFixedResponse - public Task GetSupportsOutputFixed(CancellationToken cancellationToken = default) => ExecuteRequest(new GetSupportsOutputFixedRequest(), cancellationToken); + public Task GetSupportsOutputFixedAsync(CancellationToken cancellationToken = default) => ExecuteRequestAsync(new GetSupportsOutputFixedRequest(), cancellationToken, "GetSupportsOutputFixed"); /// /// Get treble /// - /// CancellationToken + /// /// GetTrebleResponse - public Task GetTreble(CancellationToken cancellationToken = default) => ExecuteRequest(new GetTrebleRequest(), cancellationToken); + public Task GetTrebleAsync(CancellationToken cancellationToken = default) => ExecuteRequestAsync(new GetTrebleRequest(), cancellationToken, "GetTreble"); /// /// Get volume /// - /// Body payload - /// CancellationToken + /// payload + /// /// GetVolumeResponse - public Task GetVolume(GetVolumeRequest request, CancellationToken cancellationToken = default) => ExecuteRequest(request, cancellationToken); + public Task GetVolumeAsync(GetVolumeRequest request, CancellationToken cancellationToken = default) => ExecuteRequestAsync(request, cancellationToken, "GetVolume"); /// /// GetVolumeDB /// - /// Body payload - /// CancellationToken + /// payload + /// /// GetVolumeDBResponse - public Task GetVolumeDB(GetVolumeDBRequest request, CancellationToken cancellationToken = default) => ExecuteRequest(request, cancellationToken); + public Task GetVolumeDBAsync(GetVolumeDBRequest request, CancellationToken cancellationToken = default) => ExecuteRequestAsync(request, cancellationToken, "GetVolumeDB"); /// /// GetVolumeDBRange /// - /// Body payload - /// CancellationToken + /// payload + /// /// GetVolumeDBRangeResponse - public Task GetVolumeDBRange(GetVolumeDBRangeRequest request, CancellationToken cancellationToken = default) => ExecuteRequest(request, cancellationToken); + public Task GetVolumeDBRangeAsync(GetVolumeDBRangeRequest request, CancellationToken cancellationToken = default) => ExecuteRequestAsync(request, cancellationToken, "GetVolumeDBRange"); /// /// RampToVolume /// - /// Body payload - /// CancellationToken + /// payload + /// /// RampToVolumeResponse - public Task RampToVolume(RampToVolumeRequest request, CancellationToken cancellationToken = default) => ExecuteRequest(request, cancellationToken); + public Task RampToVolumeAsync(RampToVolumeRequest request, CancellationToken cancellationToken = default) => ExecuteRequestAsync(request, cancellationToken, "RampToVolume"); /// /// ResetBasicEQ /// - /// CancellationToken + /// /// ResetBasicEQResponse - public Task ResetBasicEQ(CancellationToken cancellationToken = default) => ExecuteRequest(new ResetBasicEQRequest(), cancellationToken); + public Task ResetBasicEQAsync(CancellationToken cancellationToken = default) => ExecuteRequestAsync(new ResetBasicEQRequest(), cancellationToken, "ResetBasicEQ"); /// /// ResetExtEQ /// - /// Body payload - /// CancellationToken + /// payload + /// /// Success boolean - public Task ResetExtEQ(ResetExtEQRequest request, CancellationToken cancellationToken = default) => ExecuteRequest(request, cancellationToken); + public Task ResetExtEQAsync(ResetExtEQRequest request, CancellationToken cancellationToken = default) => ExecuteRequestAsync(request, cancellationToken, "ResetExtEQ"); /// /// RestoreVolumePriorToRamp /// - /// Body payload - /// CancellationToken + /// payload + /// /// Success boolean - public Task RestoreVolumePriorToRamp(RestoreVolumePriorToRampRequest request, CancellationToken cancellationToken = default) => ExecuteRequest(request, cancellationToken); + public Task RestoreVolumePriorToRampAsync(RestoreVolumePriorToRampRequest request, CancellationToken cancellationToken = default) => ExecuteRequestAsync(request, cancellationToken, "RestoreVolumePriorToRamp"); /// /// Set bass level, between -10 and 10 /// - /// Body payload - /// CancellationToken + /// payload + /// /// Success boolean - public Task SetBass(SetBassRequest request, CancellationToken cancellationToken = default) => ExecuteRequest(request, cancellationToken); + public Task SetBassAsync(SetBassRequest request, CancellationToken cancellationToken = default) => ExecuteRequestAsync(request, cancellationToken, "SetBass"); /// /// SetChannelMap /// - /// Body payload - /// CancellationToken + /// payload + /// /// Success boolean - public Task SetChannelMap(SetChannelMapRequest request, CancellationToken cancellationToken = default) => ExecuteRequest(request, cancellationToken); + public Task SetChannelMapAsync(SetChannelMapRequest request, CancellationToken cancellationToken = default) => ExecuteRequestAsync(request, cancellationToken, "SetChannelMap"); /// /// Set equalizer value for different types /// - /// Body payload - /// CancellationToken + /// payload + /// /// Not supported by all speakers, TV related /// Success boolean - public Task SetEQ(SetEQRequest request, CancellationToken cancellationToken = default) => ExecuteRequest(request, cancellationToken); + public Task SetEQAsync(SetEQRequest request, CancellationToken cancellationToken = default) => ExecuteRequestAsync(request, cancellationToken, "SetEQ"); /// /// Set loudness on / off /// - /// Body payload - /// CancellationToken + /// payload + /// /// Success boolean - public Task SetLoudness(SetLoudnessRequest request, CancellationToken cancellationToken = default) => ExecuteRequest(request, cancellationToken); + public Task SetLoudnessAsync(SetLoudnessRequest request, CancellationToken cancellationToken = default) => ExecuteRequestAsync(request, cancellationToken, "SetLoudness"); /// /// SetMute /// - /// Body payload - /// CancellationToken + /// payload + /// /// Success boolean - public Task SetMute(SetMuteRequest request, CancellationToken cancellationToken = default) => ExecuteRequest(request, cancellationToken); + public Task SetMuteAsync(SetMuteRequest request, CancellationToken cancellationToken = default) => ExecuteRequestAsync(request, cancellationToken, "SetMute"); /// /// SetOutputFixed /// - /// Body payload - /// CancellationToken + /// payload + /// /// Success boolean - public Task SetOutputFixed(SetOutputFixedRequest request, CancellationToken cancellationToken = default) => ExecuteRequest(request, cancellationToken); + public Task SetOutputFixedAsync(SetOutputFixedRequest request, CancellationToken cancellationToken = default) => ExecuteRequestAsync(request, cancellationToken, "SetOutputFixed"); /// /// SetRelativeVolume /// - /// Body payload - /// CancellationToken + /// payload + /// /// SetRelativeVolumeResponse - public Task SetRelativeVolume(SetRelativeVolumeRequest request, CancellationToken cancellationToken = default) => ExecuteRequest(request, cancellationToken); + public Task SetRelativeVolumeAsync(SetRelativeVolumeRequest request, CancellationToken cancellationToken = default) => ExecuteRequestAsync(request, cancellationToken, "SetRelativeVolume"); /// /// SetRoomCalibrationStatus /// - /// Body payload - /// CancellationToken + /// payload + /// /// Success boolean - public Task SetRoomCalibrationStatus(SetRoomCalibrationStatusRequest request, CancellationToken cancellationToken = default) => ExecuteRequest(request, cancellationToken); + public Task SetRoomCalibrationStatusAsync(SetRoomCalibrationStatusRequest request, CancellationToken cancellationToken = default) => ExecuteRequestAsync(request, cancellationToken, "SetRoomCalibrationStatus"); /// /// SetRoomCalibrationX /// - /// Body payload - /// CancellationToken + /// payload + /// /// Success boolean - public Task SetRoomCalibrationX(SetRoomCalibrationXRequest request, CancellationToken cancellationToken = default) => ExecuteRequest(request, cancellationToken); + public Task SetRoomCalibrationXAsync(SetRoomCalibrationXRequest request, CancellationToken cancellationToken = default) => ExecuteRequestAsync(request, cancellationToken, "SetRoomCalibrationX"); /// /// Set treble level /// - /// Body payload - /// CancellationToken + /// payload + /// /// Success boolean - public Task SetTreble(SetTrebleRequest request, CancellationToken cancellationToken = default) => ExecuteRequest(request, cancellationToken); + public Task SetTrebleAsync(SetTrebleRequest request, CancellationToken cancellationToken = default) => ExecuteRequestAsync(request, cancellationToken, "SetTreble"); /// /// SetVolume /// - /// Body payload - /// CancellationToken + /// payload + /// /// Success boolean - public Task SetVolume(SetVolumeRequest request, CancellationToken cancellationToken = default) => ExecuteRequest(request, cancellationToken); + public Task SetVolumeAsync(SetVolumeRequest request, CancellationToken cancellationToken = default) => ExecuteRequestAsync(request, cancellationToken, "SetVolume"); /// /// SetVolumeDB /// - /// Body payload - /// CancellationToken + /// payload + /// /// Success boolean - public Task SetVolumeDB(SetVolumeDBRequest request, CancellationToken cancellationToken = default) => ExecuteRequest(request, cancellationToken); + public Task SetVolumeDBAsync(SetVolumeDBRequest request, CancellationToken cancellationToken = default) => ExecuteRequestAsync(request, cancellationToken, "SetVolumeDB"); [System.Xml.Serialization.XmlRoot(Namespace = "")] [SonosServiceRequest("/MediaRenderer/RenderingControl/Control", "RenderingControl")] @@ -865,4 +865,279 @@ public partial interface IRenderingControlEvent : IServiceEvent public int? VolumeDB { get; } } + + /// + /// Get bass level between -10 and 10 + /// + /// CancellationToken + /// GetBassResponse + [Obsolete("This method is obsolete. Use GetBassAsync instead.")] + [System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)] + public Task GetBass(CancellationToken cancellationToken = default) => GetBassAsync(cancellationToken); + + /// + /// Get equalizer value + /// + /// Body payload + /// CancellationToken + /// Not all EQ types are available on every speaker + /// GetEQResponse + [Obsolete("This method is obsolete. Use GetEQAsync instead.")] + [System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)] + public Task GetEQ(GetEQRequest request, CancellationToken cancellationToken = default) => GetEQAsync(request, cancellationToken); + + /// + /// GetHeadphoneConnected + /// + /// CancellationToken + /// GetHeadphoneConnectedResponse + [Obsolete("This method is obsolete. Use GetHeadphoneConnectedAsync instead.")] + [System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)] + public Task GetHeadphoneConnected(CancellationToken cancellationToken = default) => GetHeadphoneConnectedAsync(cancellationToken); + + /// + /// Whether or not Loudness is on + /// + /// Body payload + /// CancellationToken + /// GetLoudnessResponse + [Obsolete("This method is obsolete. Use GetLoudnessAsync instead.")] + [System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)] + public Task GetLoudness(GetLoudnessRequest request, CancellationToken cancellationToken = default) => GetLoudnessAsync(request, cancellationToken); + + /// + /// GetMute + /// + /// Body payload + /// CancellationToken + /// GetMuteResponse + [Obsolete("This method is obsolete. Use GetMuteAsync instead.")] + [System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)] + public Task GetMute(GetMuteRequest request, CancellationToken cancellationToken = default) => GetMuteAsync(request, cancellationToken); + + /// + /// GetOutputFixed + /// + /// CancellationToken + /// GetOutputFixedResponse + [Obsolete("This method is obsolete. Use GetOutputFixedAsync instead.")] + [System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)] + public Task GetOutputFixed(CancellationToken cancellationToken = default) => GetOutputFixedAsync(cancellationToken); + + /// + /// GetRoomCalibrationStatus + /// + /// CancellationToken + /// GetRoomCalibrationStatusResponse + [Obsolete("This method is obsolete. Use GetRoomCalibrationStatusAsync instead.")] + [System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)] + public Task GetRoomCalibrationStatus(CancellationToken cancellationToken = default) => GetRoomCalibrationStatusAsync(cancellationToken); + + /// + /// GetSupportsOutputFixed + /// + /// CancellationToken + /// GetSupportsOutputFixedResponse + [Obsolete("This method is obsolete. Use GetSupportsOutputFixedAsync instead.")] + [System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)] + public Task GetSupportsOutputFixed(CancellationToken cancellationToken = default) => GetSupportsOutputFixedAsync(cancellationToken); + + /// + /// Get treble + /// + /// CancellationToken + /// GetTrebleResponse + [Obsolete("This method is obsolete. Use GetTrebleAsync instead.")] + [System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)] + public Task GetTreble(CancellationToken cancellationToken = default) => GetTrebleAsync(cancellationToken); + + /// + /// Get volume + /// + /// Body payload + /// CancellationToken + /// GetVolumeResponse + [Obsolete("This method is obsolete. Use GetVolumeAsync instead.")] + [System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)] + public Task GetVolume(GetVolumeRequest request, CancellationToken cancellationToken = default) => GetVolumeAsync(request, cancellationToken); + + /// + /// GetVolumeDB + /// + /// Body payload + /// CancellationToken + /// GetVolumeDBResponse + [Obsolete("This method is obsolete. Use GetVolumeDBAsync instead.")] + [System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)] + public Task GetVolumeDB(GetVolumeDBRequest request, CancellationToken cancellationToken = default) => GetVolumeDBAsync(request, cancellationToken); + + /// + /// GetVolumeDBRange + /// + /// Body payload + /// CancellationToken + /// GetVolumeDBRangeResponse + [Obsolete("This method is obsolete. Use GetVolumeDBRangeAsync instead.")] + [System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)] + public Task GetVolumeDBRange(GetVolumeDBRangeRequest request, CancellationToken cancellationToken = default) => GetVolumeDBRangeAsync(request, cancellationToken); + + /// + /// RampToVolume + /// + /// Body payload + /// CancellationToken + /// RampToVolumeResponse + [Obsolete("This method is obsolete. Use RampToVolumeAsync instead.")] + [System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)] + public Task RampToVolume(RampToVolumeRequest request, CancellationToken cancellationToken = default) => RampToVolumeAsync(request, cancellationToken); + + /// + /// ResetBasicEQ + /// + /// CancellationToken + /// ResetBasicEQResponse + [Obsolete("This method is obsolete. Use ResetBasicEQAsync instead.")] + [System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)] + public Task ResetBasicEQ(CancellationToken cancellationToken = default) => ResetBasicEQAsync(cancellationToken); + + /// + /// ResetExtEQ + /// + /// Body payload + /// CancellationToken + /// Success boolean + [Obsolete("This method is obsolete. Use ResetExtEQAsync instead.")] + [System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)] + public Task ResetExtEQ(ResetExtEQRequest request, CancellationToken cancellationToken = default) => ResetExtEQAsync(request, cancellationToken); + + /// + /// RestoreVolumePriorToRamp + /// + /// Body payload + /// CancellationToken + /// Success boolean + [Obsolete("This method is obsolete. Use RestoreVolumePriorToRampAsync instead.")] + [System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)] + public Task RestoreVolumePriorToRamp(RestoreVolumePriorToRampRequest request, CancellationToken cancellationToken = default) => RestoreVolumePriorToRampAsync(request, cancellationToken); + + /// + /// Set bass level, between -10 and 10 + /// + /// Body payload + /// CancellationToken + /// Success boolean + [Obsolete("This method is obsolete. Use SetBassAsync instead.")] + [System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)] + public Task SetBass(SetBassRequest request, CancellationToken cancellationToken = default) => SetBassAsync(request, cancellationToken); + + /// + /// SetChannelMap + /// + /// Body payload + /// CancellationToken + /// Success boolean + [Obsolete("This method is obsolete. Use SetChannelMapAsync instead.")] + [System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)] + public Task SetChannelMap(SetChannelMapRequest request, CancellationToken cancellationToken = default) => SetChannelMapAsync(request, cancellationToken); + + /// + /// Set equalizer value for different types + /// + /// Body payload + /// CancellationToken + /// Not supported by all speakers, TV related + /// Success boolean + [Obsolete("This method is obsolete. Use SetEQAsync instead.")] + [System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)] + public Task SetEQ(SetEQRequest request, CancellationToken cancellationToken = default) => SetEQAsync(request, cancellationToken); + + /// + /// Set loudness on / off + /// + /// Body payload + /// CancellationToken + /// Success boolean + [Obsolete("This method is obsolete. Use SetLoudnessAsync instead.")] + [System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)] + public Task SetLoudness(SetLoudnessRequest request, CancellationToken cancellationToken = default) => SetLoudnessAsync(request, cancellationToken); + + /// + /// SetMute + /// + /// Body payload + /// CancellationToken + /// Success boolean + [Obsolete("This method is obsolete. Use SetMuteAsync instead.")] + [System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)] + public Task SetMute(SetMuteRequest request, CancellationToken cancellationToken = default) => SetMuteAsync(request, cancellationToken); + + /// + /// SetOutputFixed + /// + /// Body payload + /// CancellationToken + /// Success boolean + [Obsolete("This method is obsolete. Use SetOutputFixedAsync instead.")] + [System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)] + public Task SetOutputFixed(SetOutputFixedRequest request, CancellationToken cancellationToken = default) => SetOutputFixedAsync(request, cancellationToken); + + /// + /// SetRelativeVolume + /// + /// Body payload + /// CancellationToken + /// SetRelativeVolumeResponse + [Obsolete("This method is obsolete. Use SetRelativeVolumeAsync instead.")] + [System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)] + public Task SetRelativeVolume(SetRelativeVolumeRequest request, CancellationToken cancellationToken = default) => SetRelativeVolumeAsync(request, cancellationToken); + + /// + /// SetRoomCalibrationStatus + /// + /// Body payload + /// CancellationToken + /// Success boolean + [Obsolete("This method is obsolete. Use SetRoomCalibrationStatusAsync instead.")] + [System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)] + public Task SetRoomCalibrationStatus(SetRoomCalibrationStatusRequest request, CancellationToken cancellationToken = default) => SetRoomCalibrationStatusAsync(request, cancellationToken); + + /// + /// SetRoomCalibrationX + /// + /// Body payload + /// CancellationToken + /// Success boolean + [Obsolete("This method is obsolete. Use SetRoomCalibrationXAsync instead.")] + [System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)] + public Task SetRoomCalibrationX(SetRoomCalibrationXRequest request, CancellationToken cancellationToken = default) => SetRoomCalibrationXAsync(request, cancellationToken); + + /// + /// Set treble level + /// + /// Body payload + /// CancellationToken + /// Success boolean + [Obsolete("This method is obsolete. Use SetTrebleAsync instead.")] + [System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)] + public Task SetTreble(SetTrebleRequest request, CancellationToken cancellationToken = default) => SetTrebleAsync(request, cancellationToken); + + /// + /// SetVolume + /// + /// Body payload + /// CancellationToken + /// Success boolean + [Obsolete("This method is obsolete. Use SetVolumeAsync instead.")] + [System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)] + public Task SetVolume(SetVolumeRequest request, CancellationToken cancellationToken = default) => SetVolumeAsync(request, cancellationToken); + + /// + /// SetVolumeDB + /// + /// Body payload + /// CancellationToken + /// Success boolean + [Obsolete("This method is obsolete. Use SetVolumeDBAsync instead.")] + [System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)] + public Task SetVolumeDB(SetVolumeDBRequest request, CancellationToken cancellationToken = default) => SetVolumeDBAsync(request, cancellationToken); } diff --git a/src/Sonos.Base/Services/SonosBaseService.cs b/src/Sonos.Base/Services/SonosBaseService.cs index 9f993f6..2dece7e 100644 --- a/src/Sonos.Base/Services/SonosBaseService.cs +++ b/src/Sonos.Base/Services/SonosBaseService.cs @@ -49,33 +49,33 @@ internal SonosBaseService(SonosService serviceName, string controlPath, string e } - internal async Task ExecuteRequest(TPayload payload, CancellationToken cancellationToken, [CallerMemberName] string? caller = null) where TPayload : class + internal async Task ExecuteRequestAsync(TPayload payload, CancellationToken cancellationToken, string action) where TPayload : class { - LogExecuteRequestStarted(uuid, ServiceName, caller); - var request = SoapFactory.CreateRequest(BaseUri, ControlPath, payload, caller); + LogExecuteRequestStarted(uuid, ServiceName, action); + var request = SoapFactory.CreateRequest(BaseUri, ControlPath, payload, action); var response = await httpClient.SendAsync(request, cancellationToken); if (!response.IsSuccessStatusCode) { - await HandleErrorResponse(response, cancellationToken, caller); + await HandleErrorResponseAsync(response, cancellationToken, action); } return true; } - internal async Task ExecuteRequest(TPayload payload, CancellationToken cancellationToken, [CallerMemberName] string? caller = null) where TPayload : class where TOut : class + internal async Task ExecuteRequestAsync(TPayload payload, CancellationToken cancellationToken, string action) where TPayload : class where TOut : class { - LogExecuteRequestStarted(uuid, ServiceName, caller); - var request = SoapFactory.CreateRequest(BaseUri, ControlPath, payload, caller); + LogExecuteRequestStarted(uuid, ServiceName, action); + var request = SoapFactory.CreateRequest(BaseUri, ControlPath, payload, action); var response = await httpClient.SendAsync(request, cancellationToken); if (!response.IsSuccessStatusCode) { - await HandleErrorResponse(response, cancellationToken, caller); + await HandleErrorResponseAsync(response, cancellationToken, action); } - return await ParseResponse(response, cancellationToken, caller); + return await ParseResponseAsync(response, cancellationToken, action); } - internal async Task HandleErrorResponse(HttpResponseMessage response, CancellationToken cancellationToken, string? caller = null) + internal async Task HandleErrorResponseAsync(HttpResponseMessage response, CancellationToken cancellationToken, string action) { - LogHandleErrorResponseStarted(this.uuid, ServiceName, caller); + LogHandleErrorResponseStarted(this.uuid, ServiceName, action); // TODO HandleErrorResponse needs implementation // var errorContent = await response.Content.ReadAsStringAsync(cancellationToken); @@ -86,15 +86,15 @@ internal async Task HandleErrorResponse(HttpResponseMessage response, Cancellati var code = error.UpnpErrorCode; string? message = (code is not null && ServiceErrors.ContainsKey((int)code)) ? ServiceErrors[(int)code].Message : null; var ex = new SonosServiceException(error.FaultCode, error.FaultString, code, message); - LogHandleErrorResponse(ex, uuid, ServiceName, caller); + LogHandleErrorResponse(ex, uuid, ServiceName, action); throw ex; } throw new Exception(); } - internal async Task ParseResponse(HttpResponseMessage response, CancellationToken cancellationToken, string? caller = null) where TOut : class + internal async Task ParseResponseAsync(HttpResponseMessage response, CancellationToken cancellationToken, string action) where TOut : class { - LogParseResponseStarted(uuid, ServiceName, caller); + LogParseResponseStarted(uuid, ServiceName, action); using var xml = await response.Content.ReadAsStreamAsync(cancellationToken); return SoapFactory.ParseXml(ServiceName.ToString(), xml); } diff --git a/src/Sonos.Base/Services/SystemPropertiesService.gen.cs b/src/Sonos.Base/Services/SystemPropertiesService.gen.cs index 187a2f5..0008f6f 100644 --- a/src/Sonos.Base/Services/SystemPropertiesService.gen.cs +++ b/src/Sonos.Base/Services/SystemPropertiesService.gen.cs @@ -38,138 +38,138 @@ public SystemPropertiesService(SonosServiceOptions options) : base(SonosService. /// /// AddAccountX /// - /// Body payload - /// CancellationToken + /// payload + /// /// AddAccountXResponse - public Task AddAccountX(AddAccountXRequest request, CancellationToken cancellationToken = default) => ExecuteRequest(request, cancellationToken); + public Task AddAccountXAsync(AddAccountXRequest request, CancellationToken cancellationToken = default) => ExecuteRequestAsync(request, cancellationToken, "AddAccountX"); /// /// AddOAuthAccountX /// - /// Body payload - /// CancellationToken + /// payload + /// /// AddOAuthAccountXResponse - public Task AddOAuthAccountX(AddOAuthAccountXRequest request, CancellationToken cancellationToken = default) => ExecuteRequest(request, cancellationToken); + public Task AddOAuthAccountXAsync(AddOAuthAccountXRequest request, CancellationToken cancellationToken = default) => ExecuteRequestAsync(request, cancellationToken, "AddOAuthAccountX"); /// /// DoPostUpdateTasks /// - /// CancellationToken + /// /// Success boolean - public Task DoPostUpdateTasks(CancellationToken cancellationToken = default) => ExecuteRequest(new BaseRequest(), cancellationToken); + public Task DoPostUpdateTasksAsync(CancellationToken cancellationToken = default) => ExecuteRequestAsync(new BaseRequest(), cancellationToken, "DoPostUpdateTasks"); /// /// EditAccountMd /// - /// Body payload - /// CancellationToken + /// payload + /// /// Success boolean - public Task EditAccountMd(EditAccountMdRequest request, CancellationToken cancellationToken = default) => ExecuteRequest(request, cancellationToken); + public Task EditAccountMdAsync(EditAccountMdRequest request, CancellationToken cancellationToken = default) => ExecuteRequestAsync(request, cancellationToken, "EditAccountMd"); /// /// EditAccountPasswordX /// - /// Body payload - /// CancellationToken + /// payload + /// /// Success boolean - public Task EditAccountPasswordX(EditAccountPasswordXRequest request, CancellationToken cancellationToken = default) => ExecuteRequest(request, cancellationToken); + public Task EditAccountPasswordXAsync(EditAccountPasswordXRequest request, CancellationToken cancellationToken = default) => ExecuteRequestAsync(request, cancellationToken, "EditAccountPasswordX"); /// /// EnableRDM /// - /// Body payload - /// CancellationToken + /// payload + /// /// Success boolean - public Task EnableRDM(EnableRDMRequest request, CancellationToken cancellationToken = default) => ExecuteRequest(request, cancellationToken); + public Task EnableRDMAsync(EnableRDMRequest request, CancellationToken cancellationToken = default) => ExecuteRequestAsync(request, cancellationToken, "EnableRDM"); /// /// GetRDM /// - /// CancellationToken + /// /// GetRDMResponse - public Task GetRDM(CancellationToken cancellationToken = default) => ExecuteRequest(new BaseRequest(), cancellationToken); + public Task GetRDMAsync(CancellationToken cancellationToken = default) => ExecuteRequestAsync(new BaseRequest(), cancellationToken, "GetRDM"); /// /// Get a saved string. /// - /// Body payload - /// CancellationToken + /// payload + /// /// Strings are saved in the system with SetString, every speaker should return the same data. Will error when not existing /// GetStringResponse - public Task GetString(GetStringRequest request, CancellationToken cancellationToken = default) => ExecuteRequest(request, cancellationToken); + public Task GetStringAsync(GetStringRequest request, CancellationToken cancellationToken = default) => ExecuteRequestAsync(request, cancellationToken, "GetString"); /// /// GetWebCode /// - /// Body payload - /// CancellationToken + /// payload + /// /// GetWebCodeResponse - public Task GetWebCode(GetWebCodeRequest request, CancellationToken cancellationToken = default) => ExecuteRequest(request, cancellationToken); + public Task GetWebCodeAsync(GetWebCodeRequest request, CancellationToken cancellationToken = default) => ExecuteRequestAsync(request, cancellationToken, "GetWebCode"); /// /// ProvisionCredentialedTrialAccountX /// - /// Body payload - /// CancellationToken + /// payload + /// /// ProvisionCredentialedTrialAccountXResponse - public Task ProvisionCredentialedTrialAccountX(ProvisionCredentialedTrialAccountXRequest request, CancellationToken cancellationToken = default) => ExecuteRequest(request, cancellationToken); + public Task ProvisionCredentialedTrialAccountXAsync(ProvisionCredentialedTrialAccountXRequest request, CancellationToken cancellationToken = default) => ExecuteRequestAsync(request, cancellationToken, "ProvisionCredentialedTrialAccountX"); /// /// RefreshAccountCredentialsX /// - /// Body payload - /// CancellationToken + /// payload + /// /// Success boolean - public Task RefreshAccountCredentialsX(RefreshAccountCredentialsXRequest request, CancellationToken cancellationToken = default) => ExecuteRequest(request, cancellationToken); + public Task RefreshAccountCredentialsXAsync(RefreshAccountCredentialsXRequest request, CancellationToken cancellationToken = default) => ExecuteRequestAsync(request, cancellationToken, "RefreshAccountCredentialsX"); /// /// Remove a saved string /// - /// Body payload - /// CancellationToken + /// payload + /// /// Not sure what happens if you call this with a VariableName that doesn't exists. /// Success boolean - public Task Remove(RemoveRequest request, CancellationToken cancellationToken = default) => ExecuteRequest(request, cancellationToken); + public Task RemoveAsync(RemoveRequest request, CancellationToken cancellationToken = default) => ExecuteRequestAsync(request, cancellationToken, "Remove"); /// /// RemoveAccount /// - /// Body payload - /// CancellationToken + /// payload + /// /// Success boolean - public Task RemoveAccount(RemoveAccountRequest request, CancellationToken cancellationToken = default) => ExecuteRequest(request, cancellationToken); + public Task RemoveAccountAsync(RemoveAccountRequest request, CancellationToken cancellationToken = default) => ExecuteRequestAsync(request, cancellationToken, "RemoveAccount"); /// /// ReplaceAccountX /// - /// Body payload - /// CancellationToken + /// payload + /// /// ReplaceAccountXResponse - public Task ReplaceAccountX(ReplaceAccountXRequest request, CancellationToken cancellationToken = default) => ExecuteRequest(request, cancellationToken); + public Task ReplaceAccountXAsync(ReplaceAccountXRequest request, CancellationToken cancellationToken = default) => ExecuteRequestAsync(request, cancellationToken, "ReplaceAccountX"); /// /// ResetThirdPartyCredentials /// - /// CancellationToken + /// /// Success boolean - public Task ResetThirdPartyCredentials(CancellationToken cancellationToken = default) => ExecuteRequest(new BaseRequest(), cancellationToken); + public Task ResetThirdPartyCredentialsAsync(CancellationToken cancellationToken = default) => ExecuteRequestAsync(new BaseRequest(), cancellationToken, "ResetThirdPartyCredentials"); /// /// SetAccountNicknameX /// - /// Body payload - /// CancellationToken + /// payload + /// /// Success boolean - public Task SetAccountNicknameX(SetAccountNicknameXRequest request, CancellationToken cancellationToken = default) => ExecuteRequest(request, cancellationToken); + public Task SetAccountNicknameXAsync(SetAccountNicknameXRequest request, CancellationToken cancellationToken = default) => ExecuteRequestAsync(request, cancellationToken, "SetAccountNicknameX"); /// /// Save a string in the system /// - /// Body payload - /// CancellationToken + /// payload + /// /// Strings are saved in the system, retrieve values with GetString. /// Success boolean - public Task SetString(SetStringRequest request, CancellationToken cancellationToken = default) => ExecuteRequest(request, cancellationToken); + public Task SetStringAsync(SetStringRequest request, CancellationToken cancellationToken = default) => ExecuteRequestAsync(request, cancellationToken, "SetString"); [System.Xml.Serialization.XmlRoot(Namespace = "")] [SonosServiceRequest("/SystemProperties/Control", "SystemProperties")] @@ -430,4 +430,174 @@ public partial interface ISystemPropertiesEvent : IServiceEvent public int? VoiceUpdateID { get; } } + + /// + /// AddAccountX + /// + /// Body payload + /// CancellationToken + /// AddAccountXResponse + [Obsolete("This method is obsolete. Use AddAccountXAsync instead.")] + [System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)] + public Task AddAccountX(AddAccountXRequest request, CancellationToken cancellationToken = default) => AddAccountXAsync(request, cancellationToken); + + /// + /// AddOAuthAccountX + /// + /// Body payload + /// CancellationToken + /// AddOAuthAccountXResponse + [Obsolete("This method is obsolete. Use AddOAuthAccountXAsync instead.")] + [System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)] + public Task AddOAuthAccountX(AddOAuthAccountXRequest request, CancellationToken cancellationToken = default) => AddOAuthAccountXAsync(request, cancellationToken); + + /// + /// DoPostUpdateTasks + /// + /// CancellationToken + /// Success boolean + [Obsolete("This method is obsolete. Use DoPostUpdateTasksAsync instead.")] + [System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)] + public Task DoPostUpdateTasks(CancellationToken cancellationToken = default) => DoPostUpdateTasksAsync(cancellationToken); + + /// + /// EditAccountMd + /// + /// Body payload + /// CancellationToken + /// Success boolean + [Obsolete("This method is obsolete. Use EditAccountMdAsync instead.")] + [System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)] + public Task EditAccountMd(EditAccountMdRequest request, CancellationToken cancellationToken = default) => EditAccountMdAsync(request, cancellationToken); + + /// + /// EditAccountPasswordX + /// + /// Body payload + /// CancellationToken + /// Success boolean + [Obsolete("This method is obsolete. Use EditAccountPasswordXAsync instead.")] + [System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)] + public Task EditAccountPasswordX(EditAccountPasswordXRequest request, CancellationToken cancellationToken = default) => EditAccountPasswordXAsync(request, cancellationToken); + + /// + /// EnableRDM + /// + /// Body payload + /// CancellationToken + /// Success boolean + [Obsolete("This method is obsolete. Use EnableRDMAsync instead.")] + [System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)] + public Task EnableRDM(EnableRDMRequest request, CancellationToken cancellationToken = default) => EnableRDMAsync(request, cancellationToken); + + /// + /// GetRDM + /// + /// CancellationToken + /// GetRDMResponse + [Obsolete("This method is obsolete. Use GetRDMAsync instead.")] + [System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)] + public Task GetRDM(CancellationToken cancellationToken = default) => GetRDMAsync(cancellationToken); + + /// + /// Get a saved string. + /// + /// Body payload + /// CancellationToken + /// Strings are saved in the system with SetString, every speaker should return the same data. Will error when not existing + /// GetStringResponse + [Obsolete("This method is obsolete. Use GetStringAsync instead.")] + [System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)] + public Task GetString(GetStringRequest request, CancellationToken cancellationToken = default) => GetStringAsync(request, cancellationToken); + + /// + /// GetWebCode + /// + /// Body payload + /// CancellationToken + /// GetWebCodeResponse + [Obsolete("This method is obsolete. Use GetWebCodeAsync instead.")] + [System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)] + public Task GetWebCode(GetWebCodeRequest request, CancellationToken cancellationToken = default) => GetWebCodeAsync(request, cancellationToken); + + /// + /// ProvisionCredentialedTrialAccountX + /// + /// Body payload + /// CancellationToken + /// ProvisionCredentialedTrialAccountXResponse + [Obsolete("This method is obsolete. Use ProvisionCredentialedTrialAccountXAsync instead.")] + [System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)] + public Task ProvisionCredentialedTrialAccountX(ProvisionCredentialedTrialAccountXRequest request, CancellationToken cancellationToken = default) => ProvisionCredentialedTrialAccountXAsync(request, cancellationToken); + + /// + /// RefreshAccountCredentialsX + /// + /// Body payload + /// CancellationToken + /// Success boolean + [Obsolete("This method is obsolete. Use RefreshAccountCredentialsXAsync instead.")] + [System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)] + public Task RefreshAccountCredentialsX(RefreshAccountCredentialsXRequest request, CancellationToken cancellationToken = default) => RefreshAccountCredentialsXAsync(request, cancellationToken); + + /// + /// Remove a saved string + /// + /// Body payload + /// CancellationToken + /// Not sure what happens if you call this with a VariableName that doesn't exists. + /// Success boolean + [Obsolete("This method is obsolete. Use RemoveAsync instead.")] + [System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)] + public Task Remove(RemoveRequest request, CancellationToken cancellationToken = default) => RemoveAsync(request, cancellationToken); + + /// + /// RemoveAccount + /// + /// Body payload + /// CancellationToken + /// Success boolean + [Obsolete("This method is obsolete. Use RemoveAccountAsync instead.")] + [System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)] + public Task RemoveAccount(RemoveAccountRequest request, CancellationToken cancellationToken = default) => RemoveAccountAsync(request, cancellationToken); + + /// + /// ReplaceAccountX + /// + /// Body payload + /// CancellationToken + /// ReplaceAccountXResponse + [Obsolete("This method is obsolete. Use ReplaceAccountXAsync instead.")] + [System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)] + public Task ReplaceAccountX(ReplaceAccountXRequest request, CancellationToken cancellationToken = default) => ReplaceAccountXAsync(request, cancellationToken); + + /// + /// ResetThirdPartyCredentials + /// + /// CancellationToken + /// Success boolean + [Obsolete("This method is obsolete. Use ResetThirdPartyCredentialsAsync instead.")] + [System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)] + public Task ResetThirdPartyCredentials(CancellationToken cancellationToken = default) => ResetThirdPartyCredentialsAsync(cancellationToken); + + /// + /// SetAccountNicknameX + /// + /// Body payload + /// CancellationToken + /// Success boolean + [Obsolete("This method is obsolete. Use SetAccountNicknameXAsync instead.")] + [System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)] + public Task SetAccountNicknameX(SetAccountNicknameXRequest request, CancellationToken cancellationToken = default) => SetAccountNicknameXAsync(request, cancellationToken); + + /// + /// Save a string in the system + /// + /// Body payload + /// CancellationToken + /// Strings are saved in the system, retrieve values with GetString. + /// Success boolean + [Obsolete("This method is obsolete. Use SetStringAsync instead.")] + [System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)] + public Task SetString(SetStringRequest request, CancellationToken cancellationToken = default) => SetStringAsync(request, cancellationToken); } diff --git a/src/Sonos.Base/Services/VirtualLineInService.gen.cs b/src/Sonos.Base/Services/VirtualLineInService.gen.cs index 3b9ba5a..4d4db3b 100644 --- a/src/Sonos.Base/Services/VirtualLineInService.gen.cs +++ b/src/Sonos.Base/Services/VirtualLineInService.gen.cs @@ -38,62 +38,62 @@ public VirtualLineInService(SonosServiceOptions options) : base(SonosService.Vir /// /// Next /// - /// CancellationToken + /// /// Success boolean - public Task Next(CancellationToken cancellationToken = default) => ExecuteRequest(new NextRequest(), cancellationToken); + public Task NextAsync(CancellationToken cancellationToken = default) => ExecuteRequestAsync(new NextRequest(), cancellationToken, "Next"); /// /// Pause /// - /// CancellationToken + /// /// Success boolean - public Task Pause(CancellationToken cancellationToken = default) => ExecuteRequest(new PauseRequest(), cancellationToken); + public Task PauseAsync(CancellationToken cancellationToken = default) => ExecuteRequestAsync(new PauseRequest(), cancellationToken, "Pause"); /// /// Play /// - /// Body payload - /// CancellationToken + /// payload + /// /// Success boolean - public Task Play(PlayRequest request, CancellationToken cancellationToken = default) => ExecuteRequest(request, cancellationToken); + public Task PlayAsync(PlayRequest request, CancellationToken cancellationToken = default) => ExecuteRequestAsync(request, cancellationToken, "Play"); /// /// Previous /// - /// CancellationToken + /// /// Success boolean - public Task Previous(CancellationToken cancellationToken = default) => ExecuteRequest(new PreviousRequest(), cancellationToken); + public Task PreviousAsync(CancellationToken cancellationToken = default) => ExecuteRequestAsync(new PreviousRequest(), cancellationToken, "Previous"); /// /// SetVolume /// - /// Body payload - /// CancellationToken + /// payload + /// /// Success boolean - public Task SetVolume(SetVolumeRequest request, CancellationToken cancellationToken = default) => ExecuteRequest(request, cancellationToken); + public Task SetVolumeAsync(SetVolumeRequest request, CancellationToken cancellationToken = default) => ExecuteRequestAsync(request, cancellationToken, "SetVolume"); /// /// StartTransmission /// - /// Body payload - /// CancellationToken + /// payload + /// /// StartTransmissionResponse - public Task StartTransmission(StartTransmissionRequest request, CancellationToken cancellationToken = default) => ExecuteRequest(request, cancellationToken); + public Task StartTransmissionAsync(StartTransmissionRequest request, CancellationToken cancellationToken = default) => ExecuteRequestAsync(request, cancellationToken, "StartTransmission"); /// /// Stop /// - /// CancellationToken + /// /// Success boolean - public Task Stop(CancellationToken cancellationToken = default) => ExecuteRequest(new StopRequest(), cancellationToken); + public Task StopAsync(CancellationToken cancellationToken = default) => ExecuteRequestAsync(new StopRequest(), cancellationToken, "Stop"); /// /// StopTransmission /// - /// Body payload - /// CancellationToken + /// payload + /// /// Success boolean - public Task StopTransmission(StopTransmissionRequest request, CancellationToken cancellationToken = default) => ExecuteRequest(request, cancellationToken); + public Task StopTransmissionAsync(StopTransmissionRequest request, CancellationToken cancellationToken = default) => ExecuteRequestAsync(request, cancellationToken, "StopTransmission"); [System.Xml.Serialization.XmlRoot(Namespace = "")] [SonosServiceRequest("/MediaRenderer/VirtualLineIn/Control", "VirtualLineIn")] @@ -214,4 +214,80 @@ public partial interface IVirtualLineInEvent : IServiceEvent public string? LastChange { get; } } + + /// + /// Next + /// + /// CancellationToken + /// Success boolean + [Obsolete("This method is obsolete. Use NextAsync instead.")] + [System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)] + public Task Next(CancellationToken cancellationToken = default) => NextAsync(cancellationToken); + + /// + /// Pause + /// + /// CancellationToken + /// Success boolean + [Obsolete("This method is obsolete. Use PauseAsync instead.")] + [System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)] + public Task Pause(CancellationToken cancellationToken = default) => PauseAsync(cancellationToken); + + /// + /// Play + /// + /// Body payload + /// CancellationToken + /// Success boolean + [Obsolete("This method is obsolete. Use PlayAsync instead.")] + [System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)] + public Task Play(PlayRequest request, CancellationToken cancellationToken = default) => PlayAsync(request, cancellationToken); + + /// + /// Previous + /// + /// CancellationToken + /// Success boolean + [Obsolete("This method is obsolete. Use PreviousAsync instead.")] + [System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)] + public Task Previous(CancellationToken cancellationToken = default) => PreviousAsync(cancellationToken); + + /// + /// SetVolume + /// + /// Body payload + /// CancellationToken + /// Success boolean + [Obsolete("This method is obsolete. Use SetVolumeAsync instead.")] + [System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)] + public Task SetVolume(SetVolumeRequest request, CancellationToken cancellationToken = default) => SetVolumeAsync(request, cancellationToken); + + /// + /// StartTransmission + /// + /// Body payload + /// CancellationToken + /// StartTransmissionResponse + [Obsolete("This method is obsolete. Use StartTransmissionAsync instead.")] + [System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)] + public Task StartTransmission(StartTransmissionRequest request, CancellationToken cancellationToken = default) => StartTransmissionAsync(request, cancellationToken); + + /// + /// Stop + /// + /// CancellationToken + /// Success boolean + [Obsolete("This method is obsolete. Use StopAsync instead.")] + [System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)] + public Task Stop(CancellationToken cancellationToken = default) => StopAsync(cancellationToken); + + /// + /// StopTransmission + /// + /// Body payload + /// CancellationToken + /// Success boolean + [Obsolete("This method is obsolete. Use StopTransmissionAsync instead.")] + [System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)] + public Task StopTransmission(StopTransmissionRequest request, CancellationToken cancellationToken = default) => StopTransmissionAsync(request, cancellationToken); } diff --git a/src/Sonos.Base/Services/ZoneGroupTopologyService.gen.cs b/src/Sonos.Base/Services/ZoneGroupTopologyService.gen.cs index 7399869..dda5478 100644 --- a/src/Sonos.Base/Services/ZoneGroupTopologyService.gen.cs +++ b/src/Sonos.Base/Services/ZoneGroupTopologyService.gen.cs @@ -38,64 +38,64 @@ public ZoneGroupTopologyService(SonosServiceOptions options) : base(SonosService /// /// BeginSoftwareUpdate /// - /// Body payload - /// CancellationToken + /// payload + /// /// Success boolean - public Task BeginSoftwareUpdate(BeginSoftwareUpdateRequest request, CancellationToken cancellationToken = default) => ExecuteRequest(request, cancellationToken); + public Task BeginSoftwareUpdateAsync(BeginSoftwareUpdateRequest request, CancellationToken cancellationToken = default) => ExecuteRequestAsync(request, cancellationToken, "BeginSoftwareUpdate"); /// /// CheckForUpdate /// - /// Body payload - /// CancellationToken + /// payload + /// /// CheckForUpdateResponse - public Task CheckForUpdate(CheckForUpdateRequest request, CancellationToken cancellationToken = default) => ExecuteRequest(request, cancellationToken); + public Task CheckForUpdateAsync(CheckForUpdateRequest request, CancellationToken cancellationToken = default) => ExecuteRequestAsync(request, cancellationToken, "CheckForUpdate"); /// /// Get information about the current Zone /// - /// CancellationToken + /// /// GetZoneGroupAttributesResponse - public Task GetZoneGroupAttributes(CancellationToken cancellationToken = default) => ExecuteRequest(new BaseRequest(), cancellationToken); + public Task GetZoneGroupAttributesAsync(CancellationToken cancellationToken = default) => ExecuteRequestAsync(new BaseRequest(), cancellationToken, "GetZoneGroupAttributes"); /// /// Get all the Sonos groups, (as XML) /// - /// CancellationToken + /// /// Some libraries also support GetParsedZoneGroupState that parses the xml for you. /// GetZoneGroupStateResponse - public Task GetZoneGroupState(CancellationToken cancellationToken = default) => ExecuteRequest(new BaseRequest(), cancellationToken); + public Task GetZoneGroupStateAsync(CancellationToken cancellationToken = default) => ExecuteRequestAsync(new BaseRequest(), cancellationToken, "GetZoneGroupState"); /// /// RegisterMobileDevice /// - /// Body payload - /// CancellationToken + /// payload + /// /// Success boolean - public Task RegisterMobileDevice(RegisterMobileDeviceRequest request, CancellationToken cancellationToken = default) => ExecuteRequest(request, cancellationToken); + public Task RegisterMobileDeviceAsync(RegisterMobileDeviceRequest request, CancellationToken cancellationToken = default) => ExecuteRequestAsync(request, cancellationToken, "RegisterMobileDevice"); /// /// ReportAlarmStartedRunning /// - /// CancellationToken + /// /// Success boolean - public Task ReportAlarmStartedRunning(CancellationToken cancellationToken = default) => ExecuteRequest(new BaseRequest(), cancellationToken); + public Task ReportAlarmStartedRunningAsync(CancellationToken cancellationToken = default) => ExecuteRequestAsync(new BaseRequest(), cancellationToken, "ReportAlarmStartedRunning"); /// /// ReportUnresponsiveDevice /// - /// Body payload - /// CancellationToken + /// payload + /// /// Success boolean - public Task ReportUnresponsiveDevice(ReportUnresponsiveDeviceRequest request, CancellationToken cancellationToken = default) => ExecuteRequest(request, cancellationToken); + public Task ReportUnresponsiveDeviceAsync(ReportUnresponsiveDeviceRequest request, CancellationToken cancellationToken = default) => ExecuteRequestAsync(request, cancellationToken, "ReportUnresponsiveDevice"); /// /// SubmitDiagnostics /// - /// Body payload - /// CancellationToken + /// payload + /// /// SubmitDiagnosticsResponse - public Task SubmitDiagnostics(SubmitDiagnosticsRequest request, CancellationToken cancellationToken = default) => ExecuteRequest(request, cancellationToken); + public Task SubmitDiagnosticsAsync(SubmitDiagnosticsRequest request, CancellationToken cancellationToken = default) => ExecuteRequestAsync(request, cancellationToken, "SubmitDiagnostics"); [System.Xml.Serialization.XmlRoot(Namespace = "")] [SonosServiceRequest("/ZoneGroupTopology/Control", "ZoneGroupTopology")] @@ -235,4 +235,82 @@ public partial interface IZoneGroupTopologyEvent : IServiceEvent public string? ZonePlayerUUIDsInGroup { get; } } + + /// + /// BeginSoftwareUpdate + /// + /// Body payload + /// CancellationToken + /// Success boolean + [Obsolete("This method is obsolete. Use BeginSoftwareUpdateAsync instead.")] + [System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)] + public Task BeginSoftwareUpdate(BeginSoftwareUpdateRequest request, CancellationToken cancellationToken = default) => BeginSoftwareUpdateAsync(request, cancellationToken); + + /// + /// CheckForUpdate + /// + /// Body payload + /// CancellationToken + /// CheckForUpdateResponse + [Obsolete("This method is obsolete. Use CheckForUpdateAsync instead.")] + [System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)] + public Task CheckForUpdate(CheckForUpdateRequest request, CancellationToken cancellationToken = default) => CheckForUpdateAsync(request, cancellationToken); + + /// + /// Get information about the current Zone + /// + /// CancellationToken + /// GetZoneGroupAttributesResponse + [Obsolete("This method is obsolete. Use GetZoneGroupAttributesAsync instead.")] + [System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)] + public Task GetZoneGroupAttributes(CancellationToken cancellationToken = default) => GetZoneGroupAttributesAsync(cancellationToken); + + /// + /// Get all the Sonos groups, (as XML) + /// + /// CancellationToken + /// Some libraries also support GetParsedZoneGroupState that parses the xml for you. + /// GetZoneGroupStateResponse + [Obsolete("This method is obsolete. Use GetZoneGroupStateAsync instead.")] + [System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)] + public Task GetZoneGroupState(CancellationToken cancellationToken = default) => GetZoneGroupStateAsync(cancellationToken); + + /// + /// RegisterMobileDevice + /// + /// Body payload + /// CancellationToken + /// Success boolean + [Obsolete("This method is obsolete. Use RegisterMobileDeviceAsync instead.")] + [System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)] + public Task RegisterMobileDevice(RegisterMobileDeviceRequest request, CancellationToken cancellationToken = default) => RegisterMobileDeviceAsync(request, cancellationToken); + + /// + /// ReportAlarmStartedRunning + /// + /// CancellationToken + /// Success boolean + [Obsolete("This method is obsolete. Use ReportAlarmStartedRunningAsync instead.")] + [System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)] + public Task ReportAlarmStartedRunning(CancellationToken cancellationToken = default) => ReportAlarmStartedRunningAsync(cancellationToken); + + /// + /// ReportUnresponsiveDevice + /// + /// Body payload + /// CancellationToken + /// Success boolean + [Obsolete("This method is obsolete. Use ReportUnresponsiveDeviceAsync instead.")] + [System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)] + public Task ReportUnresponsiveDevice(ReportUnresponsiveDeviceRequest request, CancellationToken cancellationToken = default) => ReportUnresponsiveDeviceAsync(request, cancellationToken); + + /// + /// SubmitDiagnostics + /// + /// Body payload + /// CancellationToken + /// SubmitDiagnosticsResponse + [Obsolete("This method is obsolete. Use SubmitDiagnosticsAsync instead.")] + [System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)] + public Task SubmitDiagnostics(SubmitDiagnosticsRequest request, CancellationToken cancellationToken = default) => SubmitDiagnosticsAsync(request, cancellationToken); } diff --git a/src/Sonos.Base/Sonos.Base.csproj b/src/Sonos.Base/Sonos.Base.csproj index 6009245..f498357 100644 --- a/src/Sonos.Base/Sonos.Base.csproj +++ b/src/Sonos.Base/Sonos.Base.csproj @@ -1,6 +1,6 @@  - net7.0;net6.0;netstandard2.0 + net8.0;net7.0;net6.0;netstandard2.0 enable enable true @@ -31,15 +31,11 @@ <_Parameter1>Sonos.Base.Tests - - - - - - - + + + - + diff --git a/src/Sonos.Base/SonosDevice.cs b/src/Sonos.Base/SonosDevice.cs index d76e024..6a2513f 100644 --- a/src/Sonos.Base/SonosDevice.cs +++ b/src/Sonos.Base/SonosDevice.cs @@ -22,6 +22,7 @@ namespace Sonos.Base; using Sonos.Base.Services; using Sonos.Base.Internal; using System.Threading.Tasks; +using System.Xml.Serialization; public partial class SonosDevice : IDisposable, IAsyncDisposable { @@ -56,23 +57,55 @@ public SonosDevice(SonosDeviceOptions options) internal SonosServiceOptions ServiceOptions { get; private set; } - public async Task LoadUuid(CancellationToken cancellationToken = default) + /// + /// Gets the device properties service. + /// + /// + /// + /// SonosDeviceDescription is generated with Paste XML as Classes + public async Task GetDeviceDescriptionAsync(CancellationToken cancellationToken = default) + { + var uri = new Uri(ServiceOptions.DeviceUri, "/xml/device_description.xml"); + var response = await ServiceOptions.ServiceProvider.GetHttpClient().GetAsync(uri, cancellationToken); + response.EnsureSuccessStatusCode(); + + var serializer = new XmlSerializer(typeof(Models.SonosDeviceDescription)); + using (var reader = new StreamReader(await response.Content.ReadAsStreamAsync(cancellationToken))) + { + var deviceDescription = (Models.SonosDeviceDescription)serializer.Deserialize(reader)!; + return deviceDescription; + } + } + + /// + /// Loads the uuid from the device if it is not set. + /// + /// + public async Task LoadUuidAsync(CancellationToken cancellationToken = default) { if (!Uuid.StartsWith("RINCON")) { - var attributes = await DevicePropertiesService.GetZoneInfo(); + var attributes = await DevicePropertiesService.GetZoneInfoAsync(cancellationToken); Uuid = $"RINCON_{attributes.MACAddress.Replace(":","")}0{this.ServiceOptions.DeviceUri.Port}"; } } - public async Task QueueNotification(NotificationOptions notificationOptions, CancellationToken cancellationToken = default) + /// + /// Send a notification to the speaker. + /// + /// + /// + /// + /// Throws when volume is not between 1 and 100 + /// This method is using the native Sonos notification system, which is only available on S2 devices. + public async Task QueueNotificationAsync(NotificationOptions notificationOptions, CancellationToken cancellationToken = default) { //TODO Check if speaker is playing else skip if (notificationOptions.Volume < 1 || notificationOptions.Volume > 100) { throw new ArgumentOutOfRangeException(nameof(NotificationOptions.Volume), "Volume must be between 1 and 100"); } - await LoadUuid(cancellationToken); + await LoadUuidAsync(cancellationToken); if (SonosWebSocket is null) { SonosWebSocket = new SonosWebSocket(ServiceOptions); @@ -83,15 +116,35 @@ public async Task QueueNotification(NotificationOptions notificationOption #region Shortcuts - public Task Next(CancellationToken cancellationToken = default) => Coordinator.AVTransportService.Next(cancellationToken); - - public Task Pause(CancellationToken cancellationToken = default) => Coordinator.AVTransportService.Pause(cancellationToken); - - public Task Play(CancellationToken cancellationToken = default) => Coordinator.AVTransportService.Play(cancellationToken); - - public Task Previous(CancellationToken cancellationToken = default) => Coordinator.AVTransportService.Previous(cancellationToken); - - public Task Stop(CancellationToken cancellationToken = default) => Coordinator.AVTransportService.Stop(cancellationToken); + /// + /// Shortcut to , on the coordinator. + /// + /// + public Task NextAsync(CancellationToken cancellationToken = default) => Coordinator.AVTransportService.NextAsync(cancellationToken); + + /// + /// Shortcut to , on the coordinator. + /// + /// + public Task PauseAsync(CancellationToken cancellationToken = default) => Coordinator.AVTransportService.PauseAsync(cancellationToken); + + /// + /// Shortcut to , on the coordinator. + /// + /// + public Task PlayAsync(CancellationToken cancellationToken = default) => Coordinator.AVTransportService.PlayAsync(cancellationToken); + + /// + /// Shortcut to , on the coordinator. + /// + /// + public Task PreviousAsync(CancellationToken cancellationToken = default) => Coordinator.AVTransportService.PreviousAsync(cancellationToken); + + /// + /// Shortcut to , on the coordinator. + /// + /// + public Task StopAsync(CancellationToken cancellationToken = default) => Coordinator.AVTransportService.StopAsync(cancellationToken); #endregion Shortcuts diff --git a/src/Sonos.Base/SonosManager.cs b/src/Sonos.Base/SonosManager.cs index e01c8a1..dcc76dc 100644 --- a/src/Sonos.Base/SonosManager.cs +++ b/src/Sonos.Base/SonosManager.cs @@ -35,14 +35,17 @@ public SonosManager(ISonosServiceProvider provider, ILogger? logge this.provider = provider; this.logger = logger ?? provider.CreateLogger(); } - - public async Task InitializeFromDevice(Uri deviceUri, CancellationToken cancellationToken = default) + + [Obsolete("This method is obsolete. Use InitializeFromDeviceAsync instead.")] + [System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)] + public Task InitializeFromDevice(Uri deviceUri, CancellationToken cancellationToken = default) => InitializeFromDeviceAsync(deviceUri, cancellationToken); + public async Task InitializeFromDeviceAsync(Uri deviceUri, CancellationToken cancellationToken = default) { logger?.LogDebug("Initialize manager from device {deviceUri}", deviceUri); if (zoneGroupTopologyService == null) { zoneGroupTopologyService = new ZoneGroupTopologyService(new SonosServiceOptions(deviceUri, provider)); - var zoneState = await zoneGroupTopologyService.GetZoneGroupState(cancellationToken); + var zoneState = await zoneGroupTopologyService.GetZoneGroupStateAsync(cancellationToken); if (zoneState is null || zoneState.ParsedState is null) { diff --git a/src/Sonos.Base/packages.lock.json b/src/Sonos.Base/packages.lock.json index 2b4c406..fcfcb51 100644 --- a/src/Sonos.Base/packages.lock.json +++ b/src/Sonos.Base/packages.lock.json @@ -4,22 +4,24 @@ ".NETStandard,Version=v2.0": { "Microsoft.Extensions.Http": { "type": "Direct", - "requested": "[7.0.0, )", - "resolved": "7.0.0", - "contentHash": "9Pq9f/CvOSz0t9yQa6g1uWpxa2sm13daLFm8EZwy9MaQUjKXWdNUXQwIxwhmba5N83UIqURiPHSNqGK1vfWF2w==", + "requested": "[8.0.0, )", + "resolved": "8.0.0", + "contentHash": "cWz4caHwvx0emoYe7NkHPxII/KkTI8R/LC9qdqJqnKv2poTJ4e2qqPGQqvRoQ5kaSA4FU5IV3qFAuLuOhoqULQ==", "dependencies": { - "Microsoft.Extensions.DependencyInjection.Abstractions": "7.0.0", - "Microsoft.Extensions.Logging": "7.0.0", - "Microsoft.Extensions.Logging.Abstractions": "7.0.0", - "Microsoft.Extensions.Options": "7.0.0" + "Microsoft.Extensions.Configuration.Abstractions": "8.0.0", + "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.0", + "Microsoft.Extensions.Logging": "8.0.0", + "Microsoft.Extensions.Logging.Abstractions": "8.0.0", + "Microsoft.Extensions.Options": "8.0.0" } }, "Microsoft.Extensions.Logging.Abstractions": { "type": "Direct", - "requested": "[7.0.1, )", - "resolved": "7.0.1", - "contentHash": "pkeBFx0vqMW/A3aUVHh7MPu3WkBhaVlezhSZeb1c9XD0vUReYH1TLFSy5MxJgZfmz5LZzYoErMorlYZiwpOoNA==", + "requested": "[8.0.0, )", + "resolved": "8.0.0", + "contentHash": "arDBqTgFCyS0EvRV7O3MZturChstm50OJ0y9bDJvAcmEPJm0FFpFyjU/JLYyStNGGey081DvnQYlncNX5SJJGA==", "dependencies": { + "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.0", "System.Buffers": "4.5.1", "System.Memory": "4.5.5" } @@ -35,73 +37,79 @@ }, "System.Text.Json": { "type": "Direct", - "requested": "[7.0.3, )", - "resolved": "7.0.3", - "contentHash": "AyjhwXN1zTFeIibHimfJn6eAsZ7rTBib79JQpzg8WAuR/HKDu9JGNHTuu3nbbXQ/bgI+U4z6HtZmCHNXB1QXrQ==", + "requested": "[8.0.0, )", + "resolved": "8.0.0", + "contentHash": "OdrZO2WjkiEG6ajEFRABTRCi/wuXQPxeV6g8xvUJqdxMvvuCCEk86zPla8UiIQJz3durtUEbNyY/3lIhS0yZvQ==", "dependencies": { - "Microsoft.Bcl.AsyncInterfaces": "7.0.0", + "Microsoft.Bcl.AsyncInterfaces": "8.0.0", "System.Buffers": "4.5.1", "System.Memory": "4.5.5", - "System.Numerics.Vectors": "4.5.0", "System.Runtime.CompilerServices.Unsafe": "6.0.0", - "System.Text.Encodings.Web": "7.0.0", + "System.Text.Encodings.Web": "8.0.0", "System.Threading.Tasks.Extensions": "4.5.4" } }, "Microsoft.Bcl.AsyncInterfaces": { "type": "Transitive", - "resolved": "7.0.0", - "contentHash": "3aeMZ1N0lJoSyzqiP03hqemtb1BijhsJADdobn/4nsMJ8V1H+CrpuduUe4hlRdx+ikBQju1VGjMD1GJ3Sk05Eg==", + "resolved": "8.0.0", + "contentHash": "3WA9q9yVqJp222P3x1wYIGDAkpjAku0TMUaaQV22g6L67AI0LdOIrVS7Ht2vJfLHGSPVuqN94vIr15qn+HEkHw==", "dependencies": { "System.Threading.Tasks.Extensions": "4.5.4" } }, + "Microsoft.Extensions.Configuration.Abstractions": { + "type": "Transitive", + "resolved": "8.0.0", + "contentHash": "3lE/iLSutpgX1CC0NOW70FJoGARRHbyKmG7dc0klnUZ9Dd9hS6N/POPWhKhMLCEuNN5nXEY5agmlFtH562vqhQ==", + "dependencies": { + "Microsoft.Extensions.Primitives": "8.0.0" + } + }, "Microsoft.Extensions.DependencyInjection": { "type": "Transitive", - "resolved": "7.0.0", - "contentHash": "elNeOmkeX3eDVG6pYVeV82p29hr+UKDaBhrZyWvWLw/EVZSYEkZlQdkp0V39k/Xehs2Qa0mvoCvkVj3eQxNQ1Q==", + "resolved": "8.0.0", + "contentHash": "V8S3bsm50ig6JSyrbcJJ8bW2b9QLGouz+G1miK3UTaOWmMtFwNNNzUf4AleyDWUmTrWMLNnFSLEQtxmxgNQnNQ==", "dependencies": { - "Microsoft.Bcl.AsyncInterfaces": "7.0.0", - "Microsoft.Extensions.DependencyInjection.Abstractions": "7.0.0", + "Microsoft.Bcl.AsyncInterfaces": "8.0.0", + "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.0", "System.Threading.Tasks.Extensions": "4.5.4" } }, "Microsoft.Extensions.DependencyInjection.Abstractions": { "type": "Transitive", - "resolved": "7.0.0", - "contentHash": "h3j/QfmFN4S0w4C2A6X7arXij/M/OVw3uQHSOFxnND4DyAzO1F9eMX7Eti7lU/OkSthEE0WzRsfT/Dmx86jzCw==", + "resolved": "8.0.0", + "contentHash": "cjWrLkJXK0rs4zofsK4bSdg+jhDLTaxrkXu4gS6Y7MAlCvRyNNgwY/lJi5RDlQOnSZweHqoyvgvbdvQsRIW+hg==", "dependencies": { - "Microsoft.Bcl.AsyncInterfaces": "7.0.0", + "Microsoft.Bcl.AsyncInterfaces": "8.0.0", "System.Threading.Tasks.Extensions": "4.5.4" } }, "Microsoft.Extensions.Logging": { "type": "Transitive", - "resolved": "7.0.0", - "contentHash": "Nw2muoNrOG5U5qa2ZekXwudUn2BJcD41e65zwmDHb1fQegTX66UokLWZkJRpqSSHXDOWZ5V0iqhbxOEky91atA==", + "resolved": "8.0.0", + "contentHash": "tvRkov9tAJ3xP51LCv3FJ2zINmv1P8Hi8lhhtcKGqM+ImiTCC84uOPEI4z8Cdq2C3o9e+Aa0Gw0rmrsJD77W+w==", "dependencies": { - "Microsoft.Bcl.AsyncInterfaces": "7.0.0", - "Microsoft.Extensions.DependencyInjection": "7.0.0", - "Microsoft.Extensions.DependencyInjection.Abstractions": "7.0.0", - "Microsoft.Extensions.Logging.Abstractions": "7.0.0", - "Microsoft.Extensions.Options": "7.0.0", - "System.Diagnostics.DiagnosticSource": "7.0.0" + "Microsoft.Bcl.AsyncInterfaces": "8.0.0", + "Microsoft.Extensions.DependencyInjection": "8.0.0", + "Microsoft.Extensions.Logging.Abstractions": "8.0.0", + "Microsoft.Extensions.Options": "8.0.0", + "System.Diagnostics.DiagnosticSource": "8.0.0" } }, "Microsoft.Extensions.Options": { "type": "Transitive", - "resolved": "7.0.0", - "contentHash": "lP1yBnTTU42cKpMozuafbvNtQ7QcBjr/CcK3bYOGEMH55Fjt+iecXjT6chR7vbgCMqy3PG3aNQSZgo/EuY/9qQ==", + "resolved": "8.0.0", + "contentHash": "JOVOfqpnqlVLUzINQ2fox8evY2SKLYJ3BV8QDe/Jyp21u1T7r45x/R/5QdteURMR5r01GxeJSBBUOCOyaNXA3g==", "dependencies": { - "Microsoft.Extensions.DependencyInjection.Abstractions": "7.0.0", - "Microsoft.Extensions.Primitives": "7.0.0", + "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.0", + "Microsoft.Extensions.Primitives": "8.0.0", "System.ComponentModel.Annotations": "5.0.0" } }, "Microsoft.Extensions.Primitives": { "type": "Transitive", - "resolved": "7.0.0", - "contentHash": "um1KU5kxcRp3CNuI8o/GrZtD4AIOXDk+RLsytjZ9QPok3ttLUelLKpilVPuaFT3TFjOhSibUAso0odbOaCDj3Q==", + "resolved": "8.0.0", + "contentHash": "bXJEZrW9ny8vjMF1JV253WeLhpEVzFo1lyaZu1vQ4ZxWUlVvknZ/+ftFgVheLubb4eZPSwwxBeqS1JkCOjxd8g==", "dependencies": { "System.Memory": "4.5.5", "System.Runtime.CompilerServices.Unsafe": "6.0.0" @@ -124,8 +132,8 @@ }, "System.Diagnostics.DiagnosticSource": { "type": "Transitive", - "resolved": "7.0.0", - "contentHash": "9W0ewWDuAyDqS2PigdTxk6jDKonfgscY/hP8hm7VpxYhNHZHKvZTdRckberlFk3VnCmr3xBUyMBut12Q+T2aOw==", + "resolved": "8.0.0", + "contentHash": "c9xLpVz6PL9lp/djOWtk5KPDZq3cSYpmXoJQY524EOtuFl5z9ZtsotpsyrDW40U1DRnQSYvcPKEUV0X//u6gkQ==", "dependencies": { "System.Memory": "4.5.5", "System.Runtime.CompilerServices.Unsafe": "6.0.0" @@ -143,8 +151,8 @@ }, "System.Numerics.Vectors": { "type": "Transitive", - "resolved": "4.5.0", - "contentHash": "QQTlPTl06J/iiDbJCiepZ4H//BVraReU4O4EoRw1U02H5TLUIT7xn3GnDp9AXPSlJUDyFs4uWjWafNX6WrAojQ==" + "resolved": "4.4.0", + "contentHash": "UiLzLW+Lw6HLed1Hcg+8jSRttrbuXv7DANVj0DkL9g6EnnzbL75EB7EWsw5uRbhxd/4YdG8li5XizGWepmG3PQ==" }, "System.Runtime.CompilerServices.Unsafe": { "type": "Transitive", @@ -153,8 +161,8 @@ }, "System.Text.Encodings.Web": { "type": "Transitive", - "resolved": "7.0.0", - "contentHash": "OP6umVGxc0Z0MvZQBVigj4/U31Pw72ITihDWP9WiWDm+q5aoe0GaJivsfYGq53o6dxH7DcXWiCTl7+0o2CGdmg==", + "resolved": "8.0.0", + "contentHash": "yev/k9GHAEGx2Rg3/tU6MQh4HGBXJs70y7j1LaM1i/ER9po+6nnQ6RRqTJn1E7Xu0fbIFK80Nh5EoODxrbxwBQ==", "dependencies": { "System.Buffers": "4.5.1", "System.Memory": "4.5.5", @@ -173,135 +181,271 @@ "net6.0": { "Microsoft.Extensions.Http": { "type": "Direct", - "requested": "[6.0.0, )", - "resolved": "6.0.0", - "contentHash": "15+pa2G0bAMHbHewaQIdr/y6ag2H3yh4rd9hTXavtWDzQBkvpe2RMqFg8BxDpcQWssmjmBApGPcw93QRz6YcMg==", + "requested": "[8.0.0, )", + "resolved": "8.0.0", + "contentHash": "cWz4caHwvx0emoYe7NkHPxII/KkTI8R/LC9qdqJqnKv2poTJ4e2qqPGQqvRoQ5kaSA4FU5IV3qFAuLuOhoqULQ==", "dependencies": { - "Microsoft.Extensions.DependencyInjection.Abstractions": "6.0.0", - "Microsoft.Extensions.Logging": "6.0.0", - "Microsoft.Extensions.Logging.Abstractions": "6.0.0", - "Microsoft.Extensions.Options": "6.0.0" + "Microsoft.Extensions.Configuration.Abstractions": "8.0.0", + "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.0", + "Microsoft.Extensions.Logging": "8.0.0", + "Microsoft.Extensions.Logging.Abstractions": "8.0.0", + "Microsoft.Extensions.Options": "8.0.0" } }, "Microsoft.Extensions.Logging.Abstractions": { "type": "Direct", - "requested": "[6.0.0, )", - "resolved": "6.0.0", - "contentHash": "/HggWBbTwy8TgebGSX5DBZ24ndhzi93sHUBDvP1IxbZD7FDokYzdAr6+vbWGjw2XAfR2EJ1sfKUotpjHnFWPxA==" + "requested": "[8.0.0, )", + "resolved": "8.0.0", + "contentHash": "arDBqTgFCyS0EvRV7O3MZturChstm50OJ0y9bDJvAcmEPJm0FFpFyjU/JLYyStNGGey081DvnQYlncNX5SJJGA==", + "dependencies": { + "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.0" + } + }, + "Microsoft.Extensions.Configuration.Abstractions": { + "type": "Transitive", + "resolved": "8.0.0", + "contentHash": "3lE/iLSutpgX1CC0NOW70FJoGARRHbyKmG7dc0klnUZ9Dd9hS6N/POPWhKhMLCEuNN5nXEY5agmlFtH562vqhQ==", + "dependencies": { + "Microsoft.Extensions.Primitives": "8.0.0" + } }, "Microsoft.Extensions.DependencyInjection": { "type": "Transitive", - "resolved": "6.0.0", - "contentHash": "k6PWQMuoBDGGHOQTtyois2u4AwyVcIwL2LaSLlTZQm2CYcJ1pxbt6jfAnpWmzENA/wfrYRI/X9DTLoUkE4AsLw==", + "resolved": "8.0.0", + "contentHash": "V8S3bsm50ig6JSyrbcJJ8bW2b9QLGouz+G1miK3UTaOWmMtFwNNNzUf4AleyDWUmTrWMLNnFSLEQtxmxgNQnNQ==", "dependencies": { - "Microsoft.Extensions.DependencyInjection.Abstractions": "6.0.0", - "System.Runtime.CompilerServices.Unsafe": "6.0.0" + "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.0" } }, "Microsoft.Extensions.DependencyInjection.Abstractions": { "type": "Transitive", - "resolved": "6.0.0", - "contentHash": "xlzi2IYREJH3/m6+lUrQlujzX8wDitm4QGnUu6kUXTQAWPuZY8i+ticFJbzfqaetLA6KR/rO6Ew/HuYD+bxifg==" + "resolved": "8.0.0", + "contentHash": "cjWrLkJXK0rs4zofsK4bSdg+jhDLTaxrkXu4gS6Y7MAlCvRyNNgwY/lJi5RDlQOnSZweHqoyvgvbdvQsRIW+hg==" }, "Microsoft.Extensions.Logging": { "type": "Transitive", - "resolved": "6.0.0", - "contentHash": "eIbyj40QDg1NDz0HBW0S5f3wrLVnKWnDJ/JtZ+yJDFnDj90VoPuoPmFkeaXrtu+0cKm5GRAwoDf+dBWXK0TUdg==", + "resolved": "8.0.0", + "contentHash": "tvRkov9tAJ3xP51LCv3FJ2zINmv1P8Hi8lhhtcKGqM+ImiTCC84uOPEI4z8Cdq2C3o9e+Aa0Gw0rmrsJD77W+w==", "dependencies": { - "Microsoft.Extensions.DependencyInjection": "6.0.0", - "Microsoft.Extensions.DependencyInjection.Abstractions": "6.0.0", - "Microsoft.Extensions.Logging.Abstractions": "6.0.0", - "Microsoft.Extensions.Options": "6.0.0", - "System.Diagnostics.DiagnosticSource": "6.0.0" + "Microsoft.Extensions.DependencyInjection": "8.0.0", + "Microsoft.Extensions.Logging.Abstractions": "8.0.0", + "Microsoft.Extensions.Options": "8.0.0" } }, "Microsoft.Extensions.Options": { "type": "Transitive", - "resolved": "6.0.0", - "contentHash": "dzXN0+V1AyjOe2xcJ86Qbo233KHuLEY0njf/P2Kw8SfJU+d45HNS2ctJdnEnrWbM9Ye2eFgaC5Mj9otRMU6IsQ==", + "resolved": "8.0.0", + "contentHash": "JOVOfqpnqlVLUzINQ2fox8evY2SKLYJ3BV8QDe/Jyp21u1T7r45x/R/5QdteURMR5r01GxeJSBBUOCOyaNXA3g==", "dependencies": { - "Microsoft.Extensions.DependencyInjection.Abstractions": "6.0.0", - "Microsoft.Extensions.Primitives": "6.0.0" + "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.0", + "Microsoft.Extensions.Primitives": "8.0.0" } }, "Microsoft.Extensions.Primitives": { "type": "Transitive", - "resolved": "6.0.0", - "contentHash": "9+PnzmQFfEFNR9J2aDTfJGGupShHjOuGw4VUv+JB044biSHrnmCIMD+mJHmb2H7YryrfBEXDurxQ47gJZdCKNQ==", + "resolved": "8.0.0", + "contentHash": "bXJEZrW9ny8vjMF1JV253WeLhpEVzFo1lyaZu1vQ4ZxWUlVvknZ/+ftFgVheLubb4eZPSwwxBeqS1JkCOjxd8g==", "dependencies": { "System.Runtime.CompilerServices.Unsafe": "6.0.0" } }, - "System.Diagnostics.DiagnosticSource": { + "System.Runtime.CompilerServices.Unsafe": { "type": "Transitive", "resolved": "6.0.0", - "contentHash": "frQDfv0rl209cKm1lnwTgFPzNigy2EKk1BS3uAvHvlBVKe5cymGyHO+Sj+NLv5VF/AhHsqPIUUwya5oV4CHMUw==", + "contentHash": "/iUeP3tq1S0XdNNoMz5C9twLSrM/TH+qElHkXWaPvuNOt+99G75NrV0OS2EqHx5wMN7popYjpc8oTjC1y16DLg==" + } + }, + "net7.0": { + "Microsoft.Extensions.Http": { + "type": "Direct", + "requested": "[8.0.0, )", + "resolved": "8.0.0", + "contentHash": "cWz4caHwvx0emoYe7NkHPxII/KkTI8R/LC9qdqJqnKv2poTJ4e2qqPGQqvRoQ5kaSA4FU5IV3qFAuLuOhoqULQ==", "dependencies": { - "System.Runtime.CompilerServices.Unsafe": "6.0.0" + "Microsoft.Extensions.Configuration.Abstractions": "8.0.0", + "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.0", + "Microsoft.Extensions.Logging": "8.0.0", + "Microsoft.Extensions.Logging.Abstractions": "8.0.0", + "Microsoft.Extensions.Options": "8.0.0" } }, - "System.Runtime.CompilerServices.Unsafe": { + "Microsoft.Extensions.Logging.Abstractions": { + "type": "Direct", + "requested": "[8.0.0, )", + "resolved": "8.0.0", + "contentHash": "arDBqTgFCyS0EvRV7O3MZturChstm50OJ0y9bDJvAcmEPJm0FFpFyjU/JLYyStNGGey081DvnQYlncNX5SJJGA==", + "dependencies": { + "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.0" + } + }, + "Microsoft.Extensions.Configuration.Abstractions": { "type": "Transitive", - "resolved": "6.0.0", - "contentHash": "/iUeP3tq1S0XdNNoMz5C9twLSrM/TH+qElHkXWaPvuNOt+99G75NrV0OS2EqHx5wMN7popYjpc8oTjC1y16DLg==" + "resolved": "8.0.0", + "contentHash": "3lE/iLSutpgX1CC0NOW70FJoGARRHbyKmG7dc0klnUZ9Dd9hS6N/POPWhKhMLCEuNN5nXEY5agmlFtH562vqhQ==", + "dependencies": { + "Microsoft.Extensions.Primitives": "8.0.0" + } + }, + "Microsoft.Extensions.DependencyInjection": { + "type": "Transitive", + "resolved": "8.0.0", + "contentHash": "V8S3bsm50ig6JSyrbcJJ8bW2b9QLGouz+G1miK3UTaOWmMtFwNNNzUf4AleyDWUmTrWMLNnFSLEQtxmxgNQnNQ==", + "dependencies": { + "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.0" + } + }, + "Microsoft.Extensions.DependencyInjection.Abstractions": { + "type": "Transitive", + "resolved": "8.0.0", + "contentHash": "cjWrLkJXK0rs4zofsK4bSdg+jhDLTaxrkXu4gS6Y7MAlCvRyNNgwY/lJi5RDlQOnSZweHqoyvgvbdvQsRIW+hg==" + }, + "Microsoft.Extensions.Logging": { + "type": "Transitive", + "resolved": "8.0.0", + "contentHash": "tvRkov9tAJ3xP51LCv3FJ2zINmv1P8Hi8lhhtcKGqM+ImiTCC84uOPEI4z8Cdq2C3o9e+Aa0Gw0rmrsJD77W+w==", + "dependencies": { + "Microsoft.Extensions.DependencyInjection": "8.0.0", + "Microsoft.Extensions.Logging.Abstractions": "8.0.0", + "Microsoft.Extensions.Options": "8.0.0" + } + }, + "Microsoft.Extensions.Options": { + "type": "Transitive", + "resolved": "8.0.0", + "contentHash": "JOVOfqpnqlVLUzINQ2fox8evY2SKLYJ3BV8QDe/Jyp21u1T7r45x/R/5QdteURMR5r01GxeJSBBUOCOyaNXA3g==", + "dependencies": { + "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.0", + "Microsoft.Extensions.Primitives": "8.0.0" + } + }, + "Microsoft.Extensions.Primitives": { + "type": "Transitive", + "resolved": "8.0.0", + "contentHash": "bXJEZrW9ny8vjMF1JV253WeLhpEVzFo1lyaZu1vQ4ZxWUlVvknZ/+ftFgVheLubb4eZPSwwxBeqS1JkCOjxd8g==" } }, - "net7.0": { + "net8.0": { "Microsoft.Extensions.Http": { "type": "Direct", - "requested": "[7.0.0, )", - "resolved": "7.0.0", - "contentHash": "9Pq9f/CvOSz0t9yQa6g1uWpxa2sm13daLFm8EZwy9MaQUjKXWdNUXQwIxwhmba5N83UIqURiPHSNqGK1vfWF2w==", + "requested": "[8.0.0, )", + "resolved": "8.0.0", + "contentHash": "cWz4caHwvx0emoYe7NkHPxII/KkTI8R/LC9qdqJqnKv2poTJ4e2qqPGQqvRoQ5kaSA4FU5IV3qFAuLuOhoqULQ==", "dependencies": { - "Microsoft.Extensions.DependencyInjection.Abstractions": "7.0.0", - "Microsoft.Extensions.Logging": "7.0.0", - "Microsoft.Extensions.Logging.Abstractions": "7.0.0", - "Microsoft.Extensions.Options": "7.0.0" + "Microsoft.Extensions.Configuration.Abstractions": "8.0.0", + "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.0", + "Microsoft.Extensions.Diagnostics": "8.0.0", + "Microsoft.Extensions.Logging": "8.0.0", + "Microsoft.Extensions.Logging.Abstractions": "8.0.0", + "Microsoft.Extensions.Options": "8.0.0" } }, "Microsoft.Extensions.Logging.Abstractions": { "type": "Direct", - "requested": "[7.0.1, )", - "resolved": "7.0.1", - "contentHash": "pkeBFx0vqMW/A3aUVHh7MPu3WkBhaVlezhSZeb1c9XD0vUReYH1TLFSy5MxJgZfmz5LZzYoErMorlYZiwpOoNA==" + "requested": "[8.0.0, )", + "resolved": "8.0.0", + "contentHash": "arDBqTgFCyS0EvRV7O3MZturChstm50OJ0y9bDJvAcmEPJm0FFpFyjU/JLYyStNGGey081DvnQYlncNX5SJJGA==", + "dependencies": { + "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.0" + } + }, + "Microsoft.Extensions.Configuration": { + "type": "Transitive", + "resolved": "8.0.0", + "contentHash": "0J/9YNXTMWSZP2p2+nvl8p71zpSwokZXZuJW+VjdErkegAnFdO1XlqtA62SJtgVYHdKu3uPxJHcMR/r35HwFBA==", + "dependencies": { + "Microsoft.Extensions.Configuration.Abstractions": "8.0.0", + "Microsoft.Extensions.Primitives": "8.0.0" + } + }, + "Microsoft.Extensions.Configuration.Abstractions": { + "type": "Transitive", + "resolved": "8.0.0", + "contentHash": "3lE/iLSutpgX1CC0NOW70FJoGARRHbyKmG7dc0klnUZ9Dd9hS6N/POPWhKhMLCEuNN5nXEY5agmlFtH562vqhQ==", + "dependencies": { + "Microsoft.Extensions.Primitives": "8.0.0" + } + }, + "Microsoft.Extensions.Configuration.Binder": { + "type": "Transitive", + "resolved": "8.0.0", + "contentHash": "mBMoXLsr5s1y2zOHWmKsE9veDcx8h1x/c3rz4baEdQKTeDcmQAPNbB54Pi/lhFO3K431eEq6PFbMgLaa6PHFfA==", + "dependencies": { + "Microsoft.Extensions.Configuration.Abstractions": "8.0.0" + } }, "Microsoft.Extensions.DependencyInjection": { "type": "Transitive", - "resolved": "7.0.0", - "contentHash": "elNeOmkeX3eDVG6pYVeV82p29hr+UKDaBhrZyWvWLw/EVZSYEkZlQdkp0V39k/Xehs2Qa0mvoCvkVj3eQxNQ1Q==", + "resolved": "8.0.0", + "contentHash": "V8S3bsm50ig6JSyrbcJJ8bW2b9QLGouz+G1miK3UTaOWmMtFwNNNzUf4AleyDWUmTrWMLNnFSLEQtxmxgNQnNQ==", "dependencies": { - "Microsoft.Extensions.DependencyInjection.Abstractions": "7.0.0" + "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.0" } }, "Microsoft.Extensions.DependencyInjection.Abstractions": { "type": "Transitive", - "resolved": "7.0.0", - "contentHash": "h3j/QfmFN4S0w4C2A6X7arXij/M/OVw3uQHSOFxnND4DyAzO1F9eMX7Eti7lU/OkSthEE0WzRsfT/Dmx86jzCw==" + "resolved": "8.0.0", + "contentHash": "cjWrLkJXK0rs4zofsK4bSdg+jhDLTaxrkXu4gS6Y7MAlCvRyNNgwY/lJi5RDlQOnSZweHqoyvgvbdvQsRIW+hg==" + }, + "Microsoft.Extensions.Diagnostics": { + "type": "Transitive", + "resolved": "8.0.0", + "contentHash": "3PZp/YSkIXrF7QK7PfC1bkyRYwqOHpWFad8Qx+4wkuumAeXo1NHaxpS9LboNA9OvNSAu+QOVlXbMyoY+pHSqcw==", + "dependencies": { + "Microsoft.Extensions.Configuration": "8.0.0", + "Microsoft.Extensions.Diagnostics.Abstractions": "8.0.0", + "Microsoft.Extensions.Options.ConfigurationExtensions": "8.0.0" + } + }, + "Microsoft.Extensions.Diagnostics.Abstractions": { + "type": "Transitive", + "resolved": "8.0.0", + "contentHash": "JHYCQG7HmugNYUhOl368g+NMxYE/N/AiclCYRNlgCY9eVyiBkOHMwK4x60RYMxv9EL3+rmj1mqHvdCiPpC+D4Q==", + "dependencies": { + "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.0", + "Microsoft.Extensions.Options": "8.0.0", + "System.Diagnostics.DiagnosticSource": "8.0.0" + } }, "Microsoft.Extensions.Logging": { "type": "Transitive", - "resolved": "7.0.0", - "contentHash": "Nw2muoNrOG5U5qa2ZekXwudUn2BJcD41e65zwmDHb1fQegTX66UokLWZkJRpqSSHXDOWZ5V0iqhbxOEky91atA==", + "resolved": "8.0.0", + "contentHash": "tvRkov9tAJ3xP51LCv3FJ2zINmv1P8Hi8lhhtcKGqM+ImiTCC84uOPEI4z8Cdq2C3o9e+Aa0Gw0rmrsJD77W+w==", "dependencies": { - "Microsoft.Extensions.DependencyInjection": "7.0.0", - "Microsoft.Extensions.DependencyInjection.Abstractions": "7.0.0", - "Microsoft.Extensions.Logging.Abstractions": "7.0.0", - "Microsoft.Extensions.Options": "7.0.0" + "Microsoft.Extensions.DependencyInjection": "8.0.0", + "Microsoft.Extensions.Logging.Abstractions": "8.0.0", + "Microsoft.Extensions.Options": "8.0.0" } }, "Microsoft.Extensions.Options": { "type": "Transitive", - "resolved": "7.0.0", - "contentHash": "lP1yBnTTU42cKpMozuafbvNtQ7QcBjr/CcK3bYOGEMH55Fjt+iecXjT6chR7vbgCMqy3PG3aNQSZgo/EuY/9qQ==", + "resolved": "8.0.0", + "contentHash": "JOVOfqpnqlVLUzINQ2fox8evY2SKLYJ3BV8QDe/Jyp21u1T7r45x/R/5QdteURMR5r01GxeJSBBUOCOyaNXA3g==", "dependencies": { - "Microsoft.Extensions.DependencyInjection.Abstractions": "7.0.0", - "Microsoft.Extensions.Primitives": "7.0.0" + "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.0", + "Microsoft.Extensions.Primitives": "8.0.0" + } + }, + "Microsoft.Extensions.Options.ConfigurationExtensions": { + "type": "Transitive", + "resolved": "8.0.0", + "contentHash": "0f4DMRqEd50zQh+UyJc+/HiBsZ3vhAQALgdkcQEalSH1L2isdC7Yj54M3cyo5e+BeO5fcBQ7Dxly8XiBBcvRgw==", + "dependencies": { + "Microsoft.Extensions.Configuration.Abstractions": "8.0.0", + "Microsoft.Extensions.Configuration.Binder": "8.0.0", + "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.0", + "Microsoft.Extensions.Options": "8.0.0", + "Microsoft.Extensions.Primitives": "8.0.0" } }, "Microsoft.Extensions.Primitives": { "type": "Transitive", - "resolved": "7.0.0", - "contentHash": "um1KU5kxcRp3CNuI8o/GrZtD4AIOXDk+RLsytjZ9QPok3ttLUelLKpilVPuaFT3TFjOhSibUAso0odbOaCDj3Q==" + "resolved": "8.0.0", + "contentHash": "bXJEZrW9ny8vjMF1JV253WeLhpEVzFo1lyaZu1vQ4ZxWUlVvknZ/+ftFgVheLubb4eZPSwwxBeqS1JkCOjxd8g==" + }, + "System.Diagnostics.DiagnosticSource": { + "type": "Transitive", + "resolved": "8.0.0", + "contentHash": "c9xLpVz6PL9lp/djOWtk5KPDZq3cSYpmXoJQY524EOtuFl5z9ZtsotpsyrDW40U1DRnQSYvcPKEUV0X//u6gkQ==" } } } diff --git a/src/Sonos.Cli/Commands/AlarmsCommand.cs b/src/Sonos.Cli/Commands/AlarmsCommand.cs index 1b24e4a..252dedb 100644 --- a/src/Sonos.Cli/Commands/AlarmsCommand.cs +++ b/src/Sonos.Cli/Commands/AlarmsCommand.cs @@ -22,7 +22,7 @@ private static async Task Run(BaseOptions options, IHost host) var logger = host.Services.GetRequiredService>(); logger.LogDebug("Execute alarms command {host}", options.Host); var sonos = host.CreateSonosDeviceWithOptions(options); - var response = await sonos.AlarmClockService.ListAlarms(); + var response = await sonos.AlarmClockService.ListAlarmsAsync(); CommandHelpers.WriteJson(response.Alarms); } } diff --git a/src/Sonos.Cli/Commands/ControlCommand.cs b/src/Sonos.Cli/Commands/ControlCommand.cs index 40e3cee..d62fc2b 100644 --- a/src/Sonos.Cli/Commands/ControlCommand.cs +++ b/src/Sonos.Cli/Commands/ControlCommand.cs @@ -36,23 +36,23 @@ private static async Task Run(ControlCommandOptions options, IHost host) switch (options.Action) { case ControlAction.Stop: - await sonos.Stop(); + await sonos.StopAsync(); break; case ControlAction.Play: - await sonos.Play(); + await sonos.PlayAsync(); break; case ControlAction.Pause: - await sonos.Pause(); + await sonos.PauseAsync(); break; case ControlAction.Next: - await sonos.Next(); + await sonos.NextAsync(); break; case ControlAction.Previous: - await sonos.Previous(); + await sonos.PreviousAsync(); break; } } diff --git a/src/Sonos.Cli/Commands/InfoCommand.cs b/src/Sonos.Cli/Commands/InfoCommand.cs index 04bcb4e..e9c1d4e 100644 --- a/src/Sonos.Cli/Commands/InfoCommand.cs +++ b/src/Sonos.Cli/Commands/InfoCommand.cs @@ -12,9 +12,9 @@ public enum SonosInfo { Position = 1, Transport = 2, - //Volume = 3, Media = 4, + DeviceDescription = 5, } public static Command GetCommand() @@ -35,17 +35,20 @@ private static async Task Run(InfoCommandOptions options, IHost host) switch (options.Info) { case SonosInfo.Position: - CommandHelpers.WriteJson(await sonos.AVTransportService.GetPositionInfo()); + CommandHelpers.WriteJson(await sonos.AVTransportService.GetPositionInfoAsync()); break; case SonosInfo.Transport: - CommandHelpers.WriteJson(await sonos.AVTransportService.GetTransportInfo()); + CommandHelpers.WriteJson(await sonos.AVTransportService.GetTransportInfoAsync()); break; //case SonosInfo.Volume: - //CommandHelpers.WriteJson(await sonos.RenderingControlService.GetVolume()); + //CommandHelpers.WriteJson(await sonos.RenderingControlService.Async()); //break; case SonosInfo.Media: - CommandHelpers.WriteJson(await sonos.AVTransportService.GetMediaInfo()); + CommandHelpers.WriteJson(await sonos.AVTransportService.GetMediaInfoAsync()); + break; + case SonosInfo.DeviceDescription: + CommandHelpers.WriteJson(await sonos.GetDeviceDescriptionAsync()); break; } } diff --git a/src/Sonos.Cli/Commands/NotifyCommand.cs b/src/Sonos.Cli/Commands/NotifyCommand.cs index 71ccd1d..5b10a57 100644 --- a/src/Sonos.Cli/Commands/NotifyCommand.cs +++ b/src/Sonos.Cli/Commands/NotifyCommand.cs @@ -26,12 +26,12 @@ private static async Task Run(NotifyCommandOptions options, IHost host) logger.LogDebug("Play notification on {ip} {sound}", options.Host, options.Sound); var sonos = host.CreateSonosDeviceWithOptions(options); - await sonos.QueueNotification(new Base.NotificationOptions(options.Sound, options.Volume)); + await sonos.QueueNotificationAsync(new Base.NotificationOptions(options.Sound!, options.Volume)); } public class NotifyCommandOptions : BaseOptions { - public Uri Sound { get; set; } + public Uri? Sound { get; set; } public int Volume { get; set; } = 25; } } \ No newline at end of file diff --git a/src/Sonos.Cli/Commands/VolumeCommand.cs b/src/Sonos.Cli/Commands/VolumeCommand.cs index ba55a64..f09e81f 100644 --- a/src/Sonos.Cli/Commands/VolumeCommand.cs +++ b/src/Sonos.Cli/Commands/VolumeCommand.cs @@ -26,12 +26,12 @@ private static async Task Run(VolumeCommandOptions options, IHost host) var sonos = host.CreateSonosDeviceWithOptions(options); if (options.NewVolume.HasValue) { - await sonos.RenderingControlService.SetVolume(new Base.Services.RenderingControlService.SetVolumeRequest { Channel = options.Channel, DesiredVolume = options.NewVolume.Value, InstanceID = 0 }); + await sonos.RenderingControlService.SetVolumeAsync(new Base.Services.RenderingControlService.SetVolumeRequest { Channel = options.Channel, DesiredVolume = options.NewVolume.Value, InstanceID = 0 }); CommandHelpers.WriteJson(options.NewVolume.Value); } else { - CommandHelpers.WriteJson(await sonos.RenderingControlService.GetVolume(options.Channel)); + CommandHelpers.WriteJson(await sonos.RenderingControlService.GetVolumeAsync(options.Channel)); } } diff --git a/src/Sonos.Cli/Commands/ZonesCommand.cs b/src/Sonos.Cli/Commands/ZonesCommand.cs index 2738f90..ddf3f2e 100644 --- a/src/Sonos.Cli/Commands/ZonesCommand.cs +++ b/src/Sonos.Cli/Commands/ZonesCommand.cs @@ -24,7 +24,7 @@ private static async Task RunListZones(BaseOptions options, IHost host) var logger = host.Services.GetRequiredService>(); logger.LogDebug("Execute List Zones {host}", options.Host); var sonos = host.CreateSonosDeviceWithOptions(options); - CommandHelpers.WriteJson((await sonos.ZoneGroupTopologyService.GetZoneGroupState())?.ParsedState?.ZoneGroups); + CommandHelpers.WriteJson((await sonos.ZoneGroupTopologyService.GetZoneGroupStateAsync())?.ParsedState?.ZoneGroups); } } } \ No newline at end of file diff --git a/src/Sonos.Cli/Sonos.Cli.csproj b/src/Sonos.Cli/Sonos.Cli.csproj index 65639d9..c80ec67 100644 --- a/src/Sonos.Cli/Sonos.Cli.csproj +++ b/src/Sonos.Cli/Sonos.Cli.csproj @@ -1,14 +1,14 @@  Exe - net7.0 + net8.0 enable enable true - - + + diff --git a/src/Sonos.Cli/packages.lock.json b/src/Sonos.Cli/packages.lock.json index 1d4fbea..9c229b1 100644 --- a/src/Sonos.Cli/packages.lock.json +++ b/src/Sonos.Cli/packages.lock.json @@ -1,47 +1,49 @@ { "version": 1, "dependencies": { - "net7.0": { + "net8.0": { "Microsoft.Extensions.Hosting": { "type": "Direct", - "requested": "[7.0.1, )", - "resolved": "7.0.1", - "contentHash": "aoeMou6XSW84wiqd895OdaGyO9PfH6nohQJ0XBcshRDafbdIU6PQIVl8TpOCssPYq3ciRseP5064hbFyCR9J9w==", + "requested": "[8.0.0, )", + "resolved": "8.0.0", + "contentHash": "ItYHpdqVp5/oFLT5QqbopnkKlyFG9EW/9nhM6/yfObeKt6Su0wkBio6AizgRHGNwhJuAtlE5VIjow5JOTrip6w==", "dependencies": { - "Microsoft.Extensions.Configuration": "7.0.0", - "Microsoft.Extensions.Configuration.Abstractions": "7.0.0", - "Microsoft.Extensions.Configuration.Binder": "7.0.3", - "Microsoft.Extensions.Configuration.CommandLine": "7.0.0", - "Microsoft.Extensions.Configuration.EnvironmentVariables": "7.0.0", - "Microsoft.Extensions.Configuration.FileExtensions": "7.0.0", - "Microsoft.Extensions.Configuration.Json": "7.0.0", - "Microsoft.Extensions.Configuration.UserSecrets": "7.0.0", - "Microsoft.Extensions.DependencyInjection": "7.0.0", - "Microsoft.Extensions.DependencyInjection.Abstractions": "7.0.0", - "Microsoft.Extensions.FileProviders.Abstractions": "7.0.0", - "Microsoft.Extensions.FileProviders.Physical": "7.0.0", - "Microsoft.Extensions.Hosting.Abstractions": "7.0.0", - "Microsoft.Extensions.Logging": "7.0.0", - "Microsoft.Extensions.Logging.Abstractions": "7.0.0", - "Microsoft.Extensions.Logging.Configuration": "7.0.0", - "Microsoft.Extensions.Logging.Console": "7.0.0", - "Microsoft.Extensions.Logging.Debug": "7.0.0", - "Microsoft.Extensions.Logging.EventLog": "7.0.0", - "Microsoft.Extensions.Logging.EventSource": "7.0.0", - "Microsoft.Extensions.Options": "7.0.1", - "System.Diagnostics.DiagnosticSource": "7.0.1" + "Microsoft.Extensions.Configuration": "8.0.0", + "Microsoft.Extensions.Configuration.Abstractions": "8.0.0", + "Microsoft.Extensions.Configuration.Binder": "8.0.0", + "Microsoft.Extensions.Configuration.CommandLine": "8.0.0", + "Microsoft.Extensions.Configuration.EnvironmentVariables": "8.0.0", + "Microsoft.Extensions.Configuration.FileExtensions": "8.0.0", + "Microsoft.Extensions.Configuration.Json": "8.0.0", + "Microsoft.Extensions.Configuration.UserSecrets": "8.0.0", + "Microsoft.Extensions.DependencyInjection": "8.0.0", + "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.0", + "Microsoft.Extensions.Diagnostics": "8.0.0", + "Microsoft.Extensions.FileProviders.Abstractions": "8.0.0", + "Microsoft.Extensions.FileProviders.Physical": "8.0.0", + "Microsoft.Extensions.Hosting.Abstractions": "8.0.0", + "Microsoft.Extensions.Logging": "8.0.0", + "Microsoft.Extensions.Logging.Abstractions": "8.0.0", + "Microsoft.Extensions.Logging.Configuration": "8.0.0", + "Microsoft.Extensions.Logging.Console": "8.0.0", + "Microsoft.Extensions.Logging.Debug": "8.0.0", + "Microsoft.Extensions.Logging.EventLog": "8.0.0", + "Microsoft.Extensions.Logging.EventSource": "8.0.0", + "Microsoft.Extensions.Options": "8.0.0" } }, "Microsoft.Extensions.Http": { "type": "Direct", - "requested": "[7.0.0, )", - "resolved": "7.0.0", - "contentHash": "9Pq9f/CvOSz0t9yQa6g1uWpxa2sm13daLFm8EZwy9MaQUjKXWdNUXQwIxwhmba5N83UIqURiPHSNqGK1vfWF2w==", + "requested": "[8.0.0, )", + "resolved": "8.0.0", + "contentHash": "cWz4caHwvx0emoYe7NkHPxII/KkTI8R/LC9qdqJqnKv2poTJ4e2qqPGQqvRoQ5kaSA4FU5IV3qFAuLuOhoqULQ==", "dependencies": { - "Microsoft.Extensions.DependencyInjection.Abstractions": "7.0.0", - "Microsoft.Extensions.Logging": "7.0.0", - "Microsoft.Extensions.Logging.Abstractions": "7.0.0", - "Microsoft.Extensions.Options": "7.0.0" + "Microsoft.Extensions.Configuration.Abstractions": "8.0.0", + "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.0", + "Microsoft.Extensions.Diagnostics": "8.0.0", + "Microsoft.Extensions.Logging": "8.0.0", + "Microsoft.Extensions.Logging.Abstractions": "8.0.0", + "Microsoft.Extensions.Options": "8.0.0" } }, "System.CommandLine.Hosting": { @@ -57,232 +59,256 @@ }, "Microsoft.Extensions.Configuration": { "type": "Transitive", - "resolved": "7.0.0", - "contentHash": "tldQUBWt/xeH2K7/hMPPo5g8zuLc3Ro9I5d4o/XrxvxOCA2EZBtW7bCHHTc49fcBtvB8tLAb/Qsmfrq+2SJ4vA==", + "resolved": "8.0.0", + "contentHash": "0J/9YNXTMWSZP2p2+nvl8p71zpSwokZXZuJW+VjdErkegAnFdO1XlqtA62SJtgVYHdKu3uPxJHcMR/r35HwFBA==", "dependencies": { - "Microsoft.Extensions.Configuration.Abstractions": "7.0.0", - "Microsoft.Extensions.Primitives": "7.0.0" + "Microsoft.Extensions.Configuration.Abstractions": "8.0.0", + "Microsoft.Extensions.Primitives": "8.0.0" } }, "Microsoft.Extensions.Configuration.Abstractions": { "type": "Transitive", - "resolved": "7.0.0", - "contentHash": "f34u2eaqIjNO9YLHBz8rozVZ+TcFiFs0F3r7nUJd7FRkVSxk8u4OpoK226mi49MwexHOR2ibP9MFvRUaLilcQQ==", + "resolved": "8.0.0", + "contentHash": "3lE/iLSutpgX1CC0NOW70FJoGARRHbyKmG7dc0klnUZ9Dd9hS6N/POPWhKhMLCEuNN5nXEY5agmlFtH562vqhQ==", "dependencies": { - "Microsoft.Extensions.Primitives": "7.0.0" + "Microsoft.Extensions.Primitives": "8.0.0" } }, "Microsoft.Extensions.Configuration.Binder": { "type": "Transitive", - "resolved": "7.0.3", - "contentHash": "1eRFwJBrkkncTpvh6mivB8zg4uBVm6+Y6stEJERrVEqZZc8Hvf+N1iIgj2ySYDUQko4J1Gw1rLf1M8bG83F0eA==", + "resolved": "8.0.0", + "contentHash": "mBMoXLsr5s1y2zOHWmKsE9veDcx8h1x/c3rz4baEdQKTeDcmQAPNbB54Pi/lhFO3K431eEq6PFbMgLaa6PHFfA==", "dependencies": { - "Microsoft.Extensions.Configuration.Abstractions": "7.0.0" + "Microsoft.Extensions.Configuration.Abstractions": "8.0.0" } }, "Microsoft.Extensions.Configuration.CommandLine": { "type": "Transitive", - "resolved": "7.0.0", - "contentHash": "a8Iq8SCw5m8W5pZJcPCgBpBO4E89+NaObPng+ApIhrGSv9X4JPrcFAaGM4sDgR0X83uhLgsNJq8VnGP/wqhr8A==", + "resolved": "8.0.0", + "contentHash": "NZuZMz3Q8Z780nKX3ifV1fE7lS+6pynDHK71OfU4OZ1ItgvDOhyOC7E6z+JMZrAj63zRpwbdldYFk499t3+1dQ==", "dependencies": { - "Microsoft.Extensions.Configuration": "7.0.0", - "Microsoft.Extensions.Configuration.Abstractions": "7.0.0" + "Microsoft.Extensions.Configuration": "8.0.0", + "Microsoft.Extensions.Configuration.Abstractions": "8.0.0" } }, "Microsoft.Extensions.Configuration.EnvironmentVariables": { "type": "Transitive", - "resolved": "7.0.0", - "contentHash": "RIkfqCkvrAogirjsqSrG1E1FxgrLsOZU2nhRbl07lrajnxzSU2isj2lwQah0CtCbLWo/pOIukQzM1GfneBUnxA==", + "resolved": "8.0.0", + "contentHash": "plvZ0ZIpq+97gdPNNvhwvrEZ92kNml9hd1pe3idMA7svR0PztdzVLkoWLcRFgySYXUJc3kSM3Xw3mNFMo/bxRA==", "dependencies": { - "Microsoft.Extensions.Configuration": "7.0.0", - "Microsoft.Extensions.Configuration.Abstractions": "7.0.0" + "Microsoft.Extensions.Configuration": "8.0.0", + "Microsoft.Extensions.Configuration.Abstractions": "8.0.0" } }, "Microsoft.Extensions.Configuration.FileExtensions": { "type": "Transitive", - "resolved": "7.0.0", - "contentHash": "xk2lRJ1RDuqe57BmgvRPyCt6zyePKUmvT6iuXqiHR+/OIIgWVR8Ff5k2p6DwmqY8a17hx/OnrekEhziEIeQP6Q==", + "resolved": "8.0.0", + "contentHash": "McP+Lz/EKwvtCv48z0YImw+L1gi1gy5rHhNaNIY2CrjloV+XY8gydT8DjMR6zWeL13AFK+DioVpppwAuO1Gi1w==", "dependencies": { - "Microsoft.Extensions.Configuration": "7.0.0", - "Microsoft.Extensions.Configuration.Abstractions": "7.0.0", - "Microsoft.Extensions.FileProviders.Abstractions": "7.0.0", - "Microsoft.Extensions.FileProviders.Physical": "7.0.0", - "Microsoft.Extensions.Primitives": "7.0.0" + "Microsoft.Extensions.Configuration": "8.0.0", + "Microsoft.Extensions.Configuration.Abstractions": "8.0.0", + "Microsoft.Extensions.FileProviders.Abstractions": "8.0.0", + "Microsoft.Extensions.FileProviders.Physical": "8.0.0", + "Microsoft.Extensions.Primitives": "8.0.0" } }, "Microsoft.Extensions.Configuration.Json": { "type": "Transitive", - "resolved": "7.0.0", - "contentHash": "LDNYe3uw76W35Jci+be4LDf2lkQZe0A7EEYQVChFbc509CpZ4Iupod8li4PUXPBhEUOFI/rlQNf5xkzJRQGvtA==", + "resolved": "8.0.0", + "contentHash": "C2wqUoh9OmRL1akaCcKSTmRU8z0kckfImG7zLNI8uyi47Lp+zd5LWAD17waPQEqCz3ioWOCrFUo+JJuoeZLOBw==", "dependencies": { - "Microsoft.Extensions.Configuration": "7.0.0", - "Microsoft.Extensions.Configuration.Abstractions": "7.0.0", - "Microsoft.Extensions.Configuration.FileExtensions": "7.0.0", - "Microsoft.Extensions.FileProviders.Abstractions": "7.0.0", - "System.Text.Json": "7.0.0" + "Microsoft.Extensions.Configuration": "8.0.0", + "Microsoft.Extensions.Configuration.Abstractions": "8.0.0", + "Microsoft.Extensions.Configuration.FileExtensions": "8.0.0", + "Microsoft.Extensions.FileProviders.Abstractions": "8.0.0", + "System.Text.Json": "8.0.0" } }, "Microsoft.Extensions.Configuration.UserSecrets": { "type": "Transitive", - "resolved": "7.0.0", - "contentHash": "33HPW1PmB2RS0ietBQyvOxjp4O3wlt+4tIs8KPyMn1kqp04goiZGa7+3mc69NRLv6bphkLDy0YR7Uw3aZyf8Zw==", + "resolved": "8.0.0", + "contentHash": "ihDHu2dJYQird9pl2CbdwuNDfvCZdOS0S7SPlNfhPt0B81UTT+yyZKz2pimFZGUp3AfuBRnqUCxB2SjsZKHVUw==", "dependencies": { - "Microsoft.Extensions.Configuration.Abstractions": "7.0.0", - "Microsoft.Extensions.Configuration.Json": "7.0.0", - "Microsoft.Extensions.FileProviders.Abstractions": "7.0.0", - "Microsoft.Extensions.FileProviders.Physical": "7.0.0" + "Microsoft.Extensions.Configuration.Abstractions": "8.0.0", + "Microsoft.Extensions.Configuration.Json": "8.0.0", + "Microsoft.Extensions.FileProviders.Abstractions": "8.0.0", + "Microsoft.Extensions.FileProviders.Physical": "8.0.0" } }, "Microsoft.Extensions.DependencyInjection": { "type": "Transitive", - "resolved": "7.0.0", - "contentHash": "elNeOmkeX3eDVG6pYVeV82p29hr+UKDaBhrZyWvWLw/EVZSYEkZlQdkp0V39k/Xehs2Qa0mvoCvkVj3eQxNQ1Q==", + "resolved": "8.0.0", + "contentHash": "V8S3bsm50ig6JSyrbcJJ8bW2b9QLGouz+G1miK3UTaOWmMtFwNNNzUf4AleyDWUmTrWMLNnFSLEQtxmxgNQnNQ==", "dependencies": { - "Microsoft.Extensions.DependencyInjection.Abstractions": "7.0.0" + "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.0" } }, "Microsoft.Extensions.DependencyInjection.Abstractions": { "type": "Transitive", - "resolved": "7.0.0", - "contentHash": "h3j/QfmFN4S0w4C2A6X7arXij/M/OVw3uQHSOFxnND4DyAzO1F9eMX7Eti7lU/OkSthEE0WzRsfT/Dmx86jzCw==" + "resolved": "8.0.0", + "contentHash": "cjWrLkJXK0rs4zofsK4bSdg+jhDLTaxrkXu4gS6Y7MAlCvRyNNgwY/lJi5RDlQOnSZweHqoyvgvbdvQsRIW+hg==" + }, + "Microsoft.Extensions.Diagnostics": { + "type": "Transitive", + "resolved": "8.0.0", + "contentHash": "3PZp/YSkIXrF7QK7PfC1bkyRYwqOHpWFad8Qx+4wkuumAeXo1NHaxpS9LboNA9OvNSAu+QOVlXbMyoY+pHSqcw==", + "dependencies": { + "Microsoft.Extensions.Configuration": "8.0.0", + "Microsoft.Extensions.Diagnostics.Abstractions": "8.0.0", + "Microsoft.Extensions.Options.ConfigurationExtensions": "8.0.0" + } + }, + "Microsoft.Extensions.Diagnostics.Abstractions": { + "type": "Transitive", + "resolved": "8.0.0", + "contentHash": "JHYCQG7HmugNYUhOl368g+NMxYE/N/AiclCYRNlgCY9eVyiBkOHMwK4x60RYMxv9EL3+rmj1mqHvdCiPpC+D4Q==", + "dependencies": { + "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.0", + "Microsoft.Extensions.Options": "8.0.0", + "System.Diagnostics.DiagnosticSource": "8.0.0" + } }, "Microsoft.Extensions.FileProviders.Abstractions": { "type": "Transitive", - "resolved": "7.0.0", - "contentHash": "NyawiW9ZT/liQb34k9YqBSNPLuuPkrjMgQZ24Y/xXX1RoiBkLUdPMaQTmxhZ5TYu8ZKZ9qayzil75JX95vGQUg==", + "resolved": "8.0.0", + "contentHash": "ZbaMlhJlpisjuWbvXr4LdAst/1XxH3vZ6A0BsgTphZ2L4PGuxRLz7Jr/S7mkAAnOn78Vu0fKhEgNF5JO3zfjqQ==", "dependencies": { - "Microsoft.Extensions.Primitives": "7.0.0" + "Microsoft.Extensions.Primitives": "8.0.0" } }, "Microsoft.Extensions.FileProviders.Physical": { "type": "Transitive", - "resolved": "7.0.0", - "contentHash": "K8D2MTR+EtzkbZ8z80LrG7Ur64R7ZZdRLt1J5cgpc/pUWl0C6IkAUapPuK28oionHueCPELUqq0oYEvZfalNdg==", + "resolved": "8.0.0", + "contentHash": "UboiXxpPUpwulHvIAVE36Knq0VSHaAmfrFkegLyBZeaADuKezJ/AIXYAW8F5GBlGk/VaibN2k/Zn1ca8YAfVdA==", "dependencies": { - "Microsoft.Extensions.FileProviders.Abstractions": "7.0.0", - "Microsoft.Extensions.FileSystemGlobbing": "7.0.0", - "Microsoft.Extensions.Primitives": "7.0.0" + "Microsoft.Extensions.FileProviders.Abstractions": "8.0.0", + "Microsoft.Extensions.FileSystemGlobbing": "8.0.0", + "Microsoft.Extensions.Primitives": "8.0.0" } }, "Microsoft.Extensions.FileSystemGlobbing": { "type": "Transitive", - "resolved": "7.0.0", - "contentHash": "2jONjKHiF+E92ynz2ZFcr9OvxIw+rTGMPEH+UZGeHTEComVav93jQUWGkso8yWwVBcEJGcNcZAaqY01FFJcj7w==" + "resolved": "8.0.0", + "contentHash": "OK+670i7esqlQrPjdIKRbsyMCe9g5kSLpRRQGSr4Q58AOYEe/hCnfLZprh7viNisSUUQZmMrbbuDaIrP+V1ebQ==" }, "Microsoft.Extensions.Hosting.Abstractions": { "type": "Transitive", - "resolved": "7.0.0", - "contentHash": "43n9Je09z0p/7ViPxfRqs5BUItRLNVh5b6JH40F2Agkh2NBsY/jpNYTtbCcxrHCsA3oRmbR6RJBzUutB4VZvNQ==", + "resolved": "8.0.0", + "contentHash": "AG7HWwVRdCHlaA++1oKDxLsXIBxmDpMPb3VoyOoAghEWnkUvEAdYQUwnV4jJbAaa/nMYNiEh5ByoLauZBEiovg==", "dependencies": { - "Microsoft.Extensions.Configuration.Abstractions": "7.0.0", - "Microsoft.Extensions.DependencyInjection.Abstractions": "7.0.0", - "Microsoft.Extensions.FileProviders.Abstractions": "7.0.0" + "Microsoft.Extensions.Configuration.Abstractions": "8.0.0", + "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.0", + "Microsoft.Extensions.Diagnostics.Abstractions": "8.0.0", + "Microsoft.Extensions.FileProviders.Abstractions": "8.0.0", + "Microsoft.Extensions.Logging.Abstractions": "8.0.0" } }, "Microsoft.Extensions.Logging": { "type": "Transitive", - "resolved": "7.0.0", - "contentHash": "Nw2muoNrOG5U5qa2ZekXwudUn2BJcD41e65zwmDHb1fQegTX66UokLWZkJRpqSSHXDOWZ5V0iqhbxOEky91atA==", + "resolved": "8.0.0", + "contentHash": "tvRkov9tAJ3xP51LCv3FJ2zINmv1P8Hi8lhhtcKGqM+ImiTCC84uOPEI4z8Cdq2C3o9e+Aa0Gw0rmrsJD77W+w==", "dependencies": { - "Microsoft.Extensions.DependencyInjection": "7.0.0", - "Microsoft.Extensions.DependencyInjection.Abstractions": "7.0.0", - "Microsoft.Extensions.Logging.Abstractions": "7.0.0", - "Microsoft.Extensions.Options": "7.0.0" + "Microsoft.Extensions.DependencyInjection": "8.0.0", + "Microsoft.Extensions.Logging.Abstractions": "8.0.0", + "Microsoft.Extensions.Options": "8.0.0" } }, "Microsoft.Extensions.Logging.Abstractions": { "type": "Transitive", - "resolved": "7.0.1", - "contentHash": "pkeBFx0vqMW/A3aUVHh7MPu3WkBhaVlezhSZeb1c9XD0vUReYH1TLFSy5MxJgZfmz5LZzYoErMorlYZiwpOoNA==" + "resolved": "8.0.0", + "contentHash": "arDBqTgFCyS0EvRV7O3MZturChstm50OJ0y9bDJvAcmEPJm0FFpFyjU/JLYyStNGGey081DvnQYlncNX5SJJGA==", + "dependencies": { + "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.0" + } }, "Microsoft.Extensions.Logging.Configuration": { "type": "Transitive", - "resolved": "7.0.0", - "contentHash": "FLDA0HcffKA8ycoDQLJuCNGIE42cLWPxgdQGRBaSzZrYTkMBjnf9zrr8pGT06psLq9Q+RKWmmZczQ9bCrXEBcA==", + "resolved": "8.0.0", + "contentHash": "ixXXV0G/12g6MXK65TLngYN9V5hQQRuV+fZi882WIoVJT7h5JvoYoxTEwCgdqwLjSneqh1O+66gM8sMr9z/rsQ==", "dependencies": { - "Microsoft.Extensions.Configuration": "7.0.0", - "Microsoft.Extensions.Configuration.Abstractions": "7.0.0", - "Microsoft.Extensions.Configuration.Binder": "7.0.0", - "Microsoft.Extensions.DependencyInjection.Abstractions": "7.0.0", - "Microsoft.Extensions.Logging": "7.0.0", - "Microsoft.Extensions.Logging.Abstractions": "7.0.0", - "Microsoft.Extensions.Options": "7.0.0", - "Microsoft.Extensions.Options.ConfigurationExtensions": "7.0.0" + "Microsoft.Extensions.Configuration": "8.0.0", + "Microsoft.Extensions.Configuration.Abstractions": "8.0.0", + "Microsoft.Extensions.Configuration.Binder": "8.0.0", + "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.0", + "Microsoft.Extensions.Logging": "8.0.0", + "Microsoft.Extensions.Logging.Abstractions": "8.0.0", + "Microsoft.Extensions.Options": "8.0.0", + "Microsoft.Extensions.Options.ConfigurationExtensions": "8.0.0" } }, "Microsoft.Extensions.Logging.Console": { "type": "Transitive", - "resolved": "7.0.0", - "contentHash": "qt5n8bHLZPUfuRnFxJKW5q9ZwOTncdh96rtWzWpX3Y/064MlxzCSw2ELF5Jlwdo+Y4wK3I47NmUTFsV7Sg8rqg==", + "resolved": "8.0.0", + "contentHash": "e+48o7DztoYog+PY430lPxrM4mm3PbA6qucvQtUDDwVo4MO+ejMw7YGc/o2rnxbxj4isPxdfKFzTxvXMwAz83A==", "dependencies": { - "Microsoft.Extensions.DependencyInjection.Abstractions": "7.0.0", - "Microsoft.Extensions.Logging": "7.0.0", - "Microsoft.Extensions.Logging.Abstractions": "7.0.0", - "Microsoft.Extensions.Logging.Configuration": "7.0.0", - "Microsoft.Extensions.Options": "7.0.0", - "System.Text.Json": "7.0.0" + "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.0", + "Microsoft.Extensions.Logging": "8.0.0", + "Microsoft.Extensions.Logging.Abstractions": "8.0.0", + "Microsoft.Extensions.Logging.Configuration": "8.0.0", + "Microsoft.Extensions.Options": "8.0.0", + "System.Text.Json": "8.0.0" } }, "Microsoft.Extensions.Logging.Debug": { "type": "Transitive", - "resolved": "7.0.0", - "contentHash": "tFGGyPDpJ8ZdQdeckCArP7nZuoY3am9zJWuvp4OD1bHq65S0epW9BNHzAWeaIO4eYwWnGm1jRNt3vRciH8H6MA==", + "resolved": "8.0.0", + "contentHash": "dt0x21qBdudHLW/bjMJpkixv858RRr8eSomgVbU8qljOyfrfDGi1JQvpF9w8S7ziRPtRKisuWaOwFxJM82GxeA==", "dependencies": { - "Microsoft.Extensions.DependencyInjection.Abstractions": "7.0.0", - "Microsoft.Extensions.Logging": "7.0.0", - "Microsoft.Extensions.Logging.Abstractions": "7.0.0" + "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.0", + "Microsoft.Extensions.Logging": "8.0.0", + "Microsoft.Extensions.Logging.Abstractions": "8.0.0" } }, "Microsoft.Extensions.Logging.EventLog": { "type": "Transitive", - "resolved": "7.0.0", - "contentHash": "Rp7cYL9xQRVTgjMl77H5YDxszAaO+mlA+KT0BnLSVhuCoKQQOOs1sSK2/x8BK2dZ/lKeAC/CVF+20Ef2dpKXwg==", + "resolved": "8.0.0", + "contentHash": "3X9D3sl7EmOu7vQp5MJrmIJBl5XSdOhZPYXUeFfYa6Nnm9+tok8x3t3IVPLhm7UJtPOU61ohFchw8rNm9tIYOQ==", "dependencies": { - "Microsoft.Extensions.DependencyInjection.Abstractions": "7.0.0", - "Microsoft.Extensions.Logging": "7.0.0", - "Microsoft.Extensions.Logging.Abstractions": "7.0.0", - "Microsoft.Extensions.Options": "7.0.0", - "System.Diagnostics.EventLog": "7.0.0" + "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.0", + "Microsoft.Extensions.Logging": "8.0.0", + "Microsoft.Extensions.Logging.Abstractions": "8.0.0", + "Microsoft.Extensions.Options": "8.0.0", + "System.Diagnostics.EventLog": "8.0.0" } }, "Microsoft.Extensions.Logging.EventSource": { "type": "Transitive", - "resolved": "7.0.0", - "contentHash": "MxQXndQFviIyOPqyMeLNshXnmqcfzEHE2wWcr7BF1unSisJgouZ3tItnq+aJLGPojrW8OZSC/ZdRoR6wAq+c7w==", + "resolved": "8.0.0", + "contentHash": "oKcPMrw+luz2DUAKhwFXrmFikZWnyc8l2RKoQwqU3KIZZjcfoJE0zRHAnqATfhRZhtcbjl/QkiY2Xjxp0xu+6w==", "dependencies": { - "Microsoft.Extensions.DependencyInjection.Abstractions": "7.0.0", - "Microsoft.Extensions.Logging": "7.0.0", - "Microsoft.Extensions.Logging.Abstractions": "7.0.0", - "Microsoft.Extensions.Options": "7.0.0", - "Microsoft.Extensions.Primitives": "7.0.0", - "System.Text.Json": "7.0.0" + "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.0", + "Microsoft.Extensions.Logging": "8.0.0", + "Microsoft.Extensions.Logging.Abstractions": "8.0.0", + "Microsoft.Extensions.Options": "8.0.0", + "Microsoft.Extensions.Primitives": "8.0.0", + "System.Text.Json": "8.0.0" } }, "Microsoft.Extensions.Options": { "type": "Transitive", - "resolved": "7.0.1", - "contentHash": "pZRDYdN1FpepOIfHU62QoBQ6zdAoTvnjxFfqAzEd9Jhb2dfhA5i6jeTdgGgcgTWFRC7oT0+3XrbQu4LjvgX1Nw==", + "resolved": "8.0.0", + "contentHash": "JOVOfqpnqlVLUzINQ2fox8evY2SKLYJ3BV8QDe/Jyp21u1T7r45x/R/5QdteURMR5r01GxeJSBBUOCOyaNXA3g==", "dependencies": { - "Microsoft.Extensions.DependencyInjection.Abstractions": "7.0.0", - "Microsoft.Extensions.Primitives": "7.0.0" + "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.0", + "Microsoft.Extensions.Primitives": "8.0.0" } }, "Microsoft.Extensions.Options.ConfigurationExtensions": { "type": "Transitive", - "resolved": "7.0.0", - "contentHash": "95UnxZkkFdXxF6vSrtJsMHCzkDeSMuUWGs2hDT54cX+U5eVajrCJ3qLyQRW+CtpTt5OJ8bmTvpQVHu1DLhH+cA==", + "resolved": "8.0.0", + "contentHash": "0f4DMRqEd50zQh+UyJc+/HiBsZ3vhAQALgdkcQEalSH1L2isdC7Yj54M3cyo5e+BeO5fcBQ7Dxly8XiBBcvRgw==", "dependencies": { - "Microsoft.Extensions.Configuration.Abstractions": "7.0.0", - "Microsoft.Extensions.Configuration.Binder": "7.0.0", - "Microsoft.Extensions.DependencyInjection.Abstractions": "7.0.0", - "Microsoft.Extensions.Options": "7.0.0", - "Microsoft.Extensions.Primitives": "7.0.0" + "Microsoft.Extensions.Configuration.Abstractions": "8.0.0", + "Microsoft.Extensions.Configuration.Binder": "8.0.0", + "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.0", + "Microsoft.Extensions.Options": "8.0.0", + "Microsoft.Extensions.Primitives": "8.0.0" } }, "Microsoft.Extensions.Primitives": { "type": "Transitive", - "resolved": "7.0.0", - "contentHash": "um1KU5kxcRp3CNuI8o/GrZtD4AIOXDk+RLsytjZ9QPok3ttLUelLKpilVPuaFT3TFjOhSibUAso0odbOaCDj3Q==" + "resolved": "8.0.0", + "contentHash": "bXJEZrW9ny8vjMF1JV253WeLhpEVzFo1lyaZu1vQ4ZxWUlVvknZ/+ftFgVheLubb4eZPSwwxBeqS1JkCOjxd8g==" }, "System.CommandLine": { "type": "Transitive", @@ -299,38 +325,38 @@ }, "System.Diagnostics.DiagnosticSource": { "type": "Transitive", - "resolved": "7.0.1", - "contentHash": "T9SLFxzDp0SreCffRDXSAS5G+lq6E8qP4knHS2IBjwCdx2KEvGnGZsq7gFpselYOda7l6gXsJMD93TQsFj/URA==" + "resolved": "8.0.0", + "contentHash": "c9xLpVz6PL9lp/djOWtk5KPDZq3cSYpmXoJQY524EOtuFl5z9ZtsotpsyrDW40U1DRnQSYvcPKEUV0X//u6gkQ==" }, "System.Diagnostics.EventLog": { "type": "Transitive", - "resolved": "7.0.0", - "contentHash": "eUDP47obqQm3SFJfP6z+Fx2nJ4KKTQbXB4Q9Uesnzw9SbYdhjyoGXuvDn/gEmFY6N5Z3bFFbpAQGA7m6hrYJCw==" + "resolved": "8.0.0", + "contentHash": "fdYxcRjQqTTacKId/2IECojlDSFvp7LP5N78+0z/xH7v/Tuw5ZAxu23Y6PTCRinqyu2ePx+Gn1098NC6jM6d+A==" }, "System.Text.Encodings.Web": { "type": "Transitive", - "resolved": "7.0.0", - "contentHash": "OP6umVGxc0Z0MvZQBVigj4/U31Pw72ITihDWP9WiWDm+q5aoe0GaJivsfYGq53o6dxH7DcXWiCTl7+0o2CGdmg==" + "resolved": "8.0.0", + "contentHash": "yev/k9GHAEGx2Rg3/tU6MQh4HGBXJs70y7j1LaM1i/ER9po+6nnQ6RRqTJn1E7Xu0fbIFK80Nh5EoODxrbxwBQ==" }, "System.Text.Json": { "type": "Transitive", - "resolved": "7.0.0", - "contentHash": "DaGSsVqKsn/ia6RG8frjwmJonfos0srquhw09TlT8KRw5I43E+4gs+/bZj4K0vShJ5H9imCuXupb4RmS+dBy3w==", + "resolved": "8.0.0", + "contentHash": "OdrZO2WjkiEG6ajEFRABTRCi/wuXQPxeV6g8xvUJqdxMvvuCCEk86zPla8UiIQJz3durtUEbNyY/3lIhS0yZvQ==", "dependencies": { - "System.Text.Encodings.Web": "7.0.0" + "System.Text.Encodings.Web": "8.0.0" } }, "sonos.base": { "type": "Project", "dependencies": { - "Microsoft.Extensions.Http": "[7.0.0, )", - "Microsoft.Extensions.Logging.Abstractions": "[7.0.1, )" + "Microsoft.Extensions.Http": "[8.0.0, )", + "Microsoft.Extensions.Logging.Abstractions": "[8.0.0, )" } }, "sonos.base.events.http": { "type": "Project", "dependencies": { - "Microsoft.Extensions.Hosting.Abstractions": "[7.0.0, )", + "Microsoft.Extensions.Hosting.Abstractions": "[8.0.0, )", "Sonos.Base": "[1.0.0, )" } } diff --git a/src/sonos-net-template/README.md b/src/sonos-net-template/README.md index 46ddfe2..808d33c 100644 --- a/src/sonos-net-template/README.md +++ b/src/sonos-net-template/README.md @@ -10,3 +10,12 @@ ## Generator See the generator documentation [here](https://github.com/svrooij/sonos-api-docs/tree/main/generator/sonos-docs). + +## Regenerate services + +```Shell +# Once to generate the template json locally +npx @svrooij/sonos-docs combine --docsUrl=https://sonos.svrooij.io/documentation.json + +npx @svrooij/sonos-docs generate ./src/sonos-net-template/ ./src/ +``` diff --git a/src/sonos-net-template/Service.hbs b/src/sonos-net-template/Service.hbs index 8ec832f..5f6e0bb 100644 --- a/src/sonos-net-template/Service.hbs +++ b/src/sonos-net-template/Service.hbs @@ -43,15 +43,15 @@ public partial class {{serviceName}} : SonosBaseService /// /// {{#if description}}{{{description}}}{{else}}{{name}}{{/if}} /// {{#if inputs}}{{#unless (sonos_if_only_instance_id inputs 'true')}} - /// Body payload{{/unless}}{{/if}} - /// CancellationToken{{#if remarks}} + /// payload{{/unless}}{{/if}} + /// {{#if remarks}} /// {{{remarks}}}{{/if}} /// {{#if outputs}}{{name}}Response{{else}}Success boolean{{/if}} - public Task<{{#if outputs}}{{name}}Response{{else}}bool{{/if}}> {{name}}({{#if inputs}}{{#if (sonos_if_only_instance_id inputs 'true')}}{{else}}{{name}}Request request, {{/if}}{{/if}}CancellationToken cancellationToken = default) => + public Task<{{#if outputs}}{{name}}Response{{else}}bool{{/if}}> {{name}}Async({{#if inputs}}{{#if (sonos_if_only_instance_id inputs 'true')}}{{else}}{{name}}Request request, {{/if}}{{/if}}CancellationToken cancellationToken = default) => {{~#if outputs}} - {{#if inputs}}ExecuteRequest<{{name}}Request, {{name}}Response>({{#if (sonos_if_only_instance_id inputs 'true')}}new {{name}}Request(){{else}}request{{/if}}, cancellationToken);{{else}}ExecuteRequest(new BaseRequest(), cancellationToken);{{/if}} + {{#if inputs}}ExecuteRequestAsync<{{name}}Request, {{name}}Response>({{#if (sonos_if_only_instance_id inputs 'true')}}new {{name}}Request(){{else}}request{{/if}}, cancellationToken, "{{name}}");{{else}}ExecuteRequestAsync(new BaseRequest(), cancellationToken, "{{name}}");{{/if}} {{else}} - {{#if inputs}}ExecuteRequest({{#if (sonos_if_only_instance_id inputs 'true')}}new {{name}}Request(){{else}}request{{/if}}, cancellationToken);{{else}}ExecuteRequest(new BaseRequest(), cancellationToken);{{/if}} + {{#if inputs}}ExecuteRequestAsync({{#if (sonos_if_only_instance_id inputs 'true')}}new {{name}}Request(){{else}}request{{/if}}, cancellationToken, "{{name}}");{{else}}ExecuteRequestAsync(new BaseRequest(), cancellationToken, "{{name}}");{{/if}} {{/if}} {{/each}} @@ -163,4 +163,22 @@ public partial class {{serviceName}} : SonosBaseService {{/each}} } {{/if}} + {{#each actions}} + + /// + /// {{#if description}}{{{description}}}{{else}}{{name}}{{/if}} + /// {{#if inputs}}{{#unless (sonos_if_only_instance_id inputs 'true')}} + /// Body payload{{/unless}}{{/if}} + /// CancellationToken{{#if remarks}} + /// {{{remarks}}}{{/if}} + /// {{#if outputs}}{{name}}Response{{else}}Success boolean{{/if}} + [Obsolete("This method is obsolete. Use {{name}}Async instead.")] + [System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)] + public Task<{{#if outputs}}{{name}}Response{{else}}bool{{/if}}> {{name}}({{#if inputs}}{{#if (sonos_if_only_instance_id inputs 'true')}}{{else}}{{name}}Request request, {{/if}}{{/if}}CancellationToken cancellationToken = default) => +{{~#if outputs}} + {{#if inputs}}{{name}}Async({{#if (sonos_if_only_instance_id inputs 'true')}}{{else}}request, {{/if}}cancellationToken);{{else}}{{name}}Async(cancellationToken);{{/if}} +{{else}} + {{#if inputs}}{{name}}Async({{#if (sonos_if_only_instance_id inputs 'true')}}{{else}}request, {{/if}}cancellationToken);{{else}}{{name}}Async(cancellationToken);{{/if}} +{{/if}} + {{/each}} } diff --git a/src/sonos-net-template/template.json b/src/sonos-net-template/template.json index ec9c9a2..2244e47 100644 --- a/src/sonos-net-template/template.json +++ b/src/sonos-net-template/template.json @@ -1,5 +1,5 @@ { - "$schema": "https://svrooij.io/sonos-api-docs/schema/template.json", + "$schema": "https://sonos.svrooij.io/schema/template.json", "name": "Sonos net", "slug": "net", "repository": "https://github.com/svrooij/sonos-net/", diff --git a/tests/Sonos.Base.Events.Http.Tests/Sonos.Base.Events.Http.Tests.csproj b/tests/Sonos.Base.Events.Http.Tests/Sonos.Base.Events.Http.Tests.csproj index a59b350..34adb5e 100644 --- a/tests/Sonos.Base.Events.Http.Tests/Sonos.Base.Events.Http.Tests.csproj +++ b/tests/Sonos.Base.Events.Http.Tests/Sonos.Base.Events.Http.Tests.csproj @@ -1,7 +1,7 @@  - net6.0 + net8.0 enable enable @@ -9,10 +9,10 @@ - + - - + + runtime; build; native; contentfiles; analyzers; buildtransitive all @@ -24,7 +24,7 @@ runtime; build; native; contentfiles; analyzers; buildtransitive all - + all runtime; build; native; contentfiles; analyzers; buildtransitive diff --git a/tests/Sonos.Base.Tests/FakeData.cs b/tests/Sonos.Base.Tests/FakeData.cs new file mode 100644 index 0000000..0541830 --- /dev/null +++ b/tests/Sonos.Base.Tests/FakeData.cs @@ -0,0 +1,429 @@ +namespace Sonos.Base.Tests; +internal class FakeData +{ + public const string S1DeviceDescription = @" + + + 1 + 0 + + + urn:schemas-upnp-org:device:ZonePlayer:1 + 192.168.x.x - Sonos Play:5 + Sonos, Inc. + http://www.sonos.com + S5 + Sonos Play:5 + Sonos Play:5 + http://www.sonos.com/products/zoneplayers/S5 + 57.19-46310 + 1 + 1.16.4.1-2.0 + 00-0E-58-00-00-00:A + 00:0E:58:00:00:00 + uuid:RINCON_000E5800000001400 + + + 0 + image/png + 48 + 48 + 24 + /img/icon-S5.png + + + 56.0-00000 + 36.0-00000 + 1.18.10 + 1.1.0 + 11.12 + OTP: 1.1.1(1-16-4-zp5s-0.5) + Werkkamer Stephan + Play:5 + 5 + 0x02000002 + 0x00006172 + 0x0003102a + P100 + 0 + 3 + 0.000 + 0.000 + 32 + 32 + #DEACTIVATION_STATE_TAG_AND_VALUE# + #DEACTIVATION_TTL_TAG_AND_VALUE# + #DEACTIVATION_DATE_TIME_TAG_AND_VALUE# + 1 + 425 + 0 + + + urn:schemas-upnp-org:service:AlarmClock:1 + urn:upnp-org:serviceId:AlarmClock + /AlarmClock/Control + /AlarmClock/Event + /xml/AlarmClock1.xml + + + urn:schemas-upnp-org:service:MusicServices:1 + urn:upnp-org:serviceId:MusicServices + /MusicServices/Control + /MusicServices/Event + /xml/MusicServices1.xml + + + urn:schemas-upnp-org:service:AudioIn:1 + urn:upnp-org:serviceId:AudioIn + /AudioIn/Control + /AudioIn/Event + /xml/AudioIn1.xml + + + urn:schemas-upnp-org:service:DeviceProperties:1 + urn:upnp-org:serviceId:DeviceProperties + /DeviceProperties/Control + /DeviceProperties/Event + /xml/DeviceProperties1.xml + + + urn:schemas-upnp-org:service:SystemProperties:1 + urn:upnp-org:serviceId:SystemProperties + /SystemProperties/Control + /SystemProperties/Event + /xml/SystemProperties1.xml + + + urn:schemas-upnp-org:service:ZoneGroupTopology:1 + urn:upnp-org:serviceId:ZoneGroupTopology + /ZoneGroupTopology/Control + /ZoneGroupTopology/Event + /xml/ZoneGroupTopology1.xml + + + urn:schemas-upnp-org:service:GroupManagement:1 + urn:upnp-org:serviceId:GroupManagement + /GroupManagement/Control + /GroupManagement/Event + /xml/GroupManagement1.xml + + + urn:schemas-tencent-com:service:QPlay:1 + urn:tencent-com:serviceId:QPlay + /QPlay/Control + /QPlay/Event + /xml/QPlay1.xml + + + + + urn:schemas-upnp-org:device:MediaServer:1 + 192.168.x.x - Sonos Play:5 Media Server + Sonos, Inc. + http://www.sonos.com + S5 + Sonos Play:5 Media Server + Sonos Play:5 + http://www.sonos.com/products/zoneplayers/S5 + uuid:RINCON_000E5800000001400_MS + + + urn:schemas-upnp-org:service:ContentDirectory:1 + urn:upnp-org:serviceId:ContentDirectory + /MediaServer/ContentDirectory/Control + /MediaServer/ContentDirectory/Event + /xml/ContentDirectory1.xml + + + urn:schemas-upnp-org:service:ConnectionManager:1 + urn:upnp-org:serviceId:ConnectionManager + /MediaServer/ConnectionManager/Control + /MediaServer/ConnectionManager/Event + /xml/ConnectionManager1.xml + + + + + urn:schemas-upnp-org:device:MediaRenderer:1 + Werkkamer Stephan - Sonos Play:5 Media Renderer + Sonos, Inc. + http://www.sonos.com + S5 + Sonos Play:5 Media Renderer + Sonos Play:5 + http://www.sonos.com/products/zoneplayers/S5 + uuid:RINCON_000E5800000001400_MR + + + urn:schemas-upnp-org:service:RenderingControl:1 + urn:upnp-org:serviceId:RenderingControl + /MediaRenderer/RenderingControl/Control + /MediaRenderer/RenderingControl/Event + /xml/RenderingControl1.xml + + + urn:schemas-upnp-org:service:ConnectionManager:1 + urn:upnp-org:serviceId:ConnectionManager + /MediaRenderer/ConnectionManager/Control + /MediaRenderer/ConnectionManager/Event + /xml/ConnectionManager1.xml + + + urn:schemas-upnp-org:service:AVTransport:1 + urn:upnp-org:serviceId:AVTransport + /MediaRenderer/AVTransport/Control + /MediaRenderer/AVTransport/Event + /xml/AVTransport1.xml + + + urn:schemas-sonos-com:service:Queue:1 + urn:sonos-com:serviceId:Queue + /MediaRenderer/Queue/Control + /MediaRenderer/Queue/Event + /xml/Queue1.xml + + + urn:schemas-upnp-org:service:GroupRenderingControl:1 + urn:upnp-org:serviceId:GroupRenderingControl + /MediaRenderer/GroupRenderingControl/Control + /MediaRenderer/GroupRenderingControl/Event + /xml/GroupRenderingControl1.xml + + + urn:schemas-upnp-org:service:VirtualLineIn:1 + urn:upnp-org:serviceId:VirtualLineIn + /MediaRenderer/VirtualLineIn/Control + /MediaRenderer/VirtualLineIn/Event + /xml/VirtualLineIn1.xml + + + + urn:rhapsody-real-com:device-id-1-0:sonos_1:RINCON_000E5800000001400 + + + + + QPlay:2 + + + image/png + 48 + 48 + 24 + /img/icon-S5.png + + + + + + +"; + + public const string S2DeviceDescription = @" + + + 1 + 0 + + + urn:schemas-upnp-org:device:ZonePlayer:1 + 192.168.1.10 - Sonos One + Sonos, Inc. + http://www.sonos.com + S18 + Sonos One + Sonos One + http://www.sonos.com/products/zoneplayers/S18 + 76.2-47142 + 2 + 1.26.1.7-2.1 + 54-2A-1B-AA-AA-AA:C + 54:2A:1B:AA:AA:AA + uuid:RINCON_000E58000BB001400 + + + 0 + image/png + 48 + 48 + 24 + /img/icon-S18.png + + + 75.0-00000 + 58.0-00000 + 1.37.0 + 1.1.0 + 15.10 + + 35 + Badkamer + One + 20 + 0x00000000 + 0x05c18332 + 0x0541580e + A201 + 1 + 5 + 1024 + 1024 + 20 + 0 + 1443 + 1843 + + + urn:schemas-upnp-org:service:AlarmClock:1 + urn:upnp-org:serviceId:AlarmClock + /AlarmClock/Control + /AlarmClock/Event + /xml/AlarmClock1.xml + + + urn:schemas-upnp-org:service:MusicServices:1 + urn:upnp-org:serviceId:MusicServices + /MusicServices/Control + /MusicServices/Event + /xml/MusicServices1.xml + + + urn:schemas-upnp-org:service:DeviceProperties:1 + urn:upnp-org:serviceId:DeviceProperties + /DeviceProperties/Control + /DeviceProperties/Event + /xml/DeviceProperties1.xml + + + urn:schemas-upnp-org:service:SystemProperties:1 + urn:upnp-org:serviceId:SystemProperties + /SystemProperties/Control + /SystemProperties/Event + /xml/SystemProperties1.xml + + + urn:schemas-upnp-org:service:ZoneGroupTopology:1 + urn:upnp-org:serviceId:ZoneGroupTopology + /ZoneGroupTopology/Control + /ZoneGroupTopology/Event + /xml/ZoneGroupTopology1.xml + + + urn:schemas-upnp-org:service:GroupManagement:1 + urn:upnp-org:serviceId:GroupManagement + /GroupManagement/Control + /GroupManagement/Event + /xml/GroupManagement1.xml + + + urn:schemas-tencent-com:service:QPlay:1 + urn:tencent-com:serviceId:QPlay + /QPlay/Control + /QPlay/Event + /xml/QPlay1.xml + + + + + urn:schemas-upnp-org:device:MediaServer:1 + 192.168.1.10 - Sonos One Media Server + Sonos, Inc. + http://www.sonos.com + S18 + Sonos One Media Server + Sonos One + http://www.sonos.com/products/zoneplayers/S18 + uuid:RINCON_000E58000BB001400_MS + + + urn:schemas-upnp-org:service:ContentDirectory:1 + urn:upnp-org:serviceId:ContentDirectory + /MediaServer/ContentDirectory/Control + /MediaServer/ContentDirectory/Event + /xml/ContentDirectory1.xml + + + urn:schemas-upnp-org:service:ConnectionManager:1 + urn:upnp-org:serviceId:ConnectionManager + /MediaServer/ConnectionManager/Control + /MediaServer/ConnectionManager/Event + /xml/ConnectionManager1.xml + + + + + urn:schemas-upnp-org:device:MediaRenderer:1 + Badkamer - Sonos One Media Renderer + Sonos, Inc. + http://www.sonos.com + S18 + Sonos One Media Renderer + Sonos One + http://www.sonos.com/products/zoneplayers/S18 + uuid:RINCON_000E58000BB001400_MR + + + urn:schemas-upnp-org:service:RenderingControl:1 + urn:upnp-org:serviceId:RenderingControl + /MediaRenderer/RenderingControl/Control + /MediaRenderer/RenderingControl/Event + /xml/RenderingControl1.xml + + + urn:schemas-upnp-org:service:ConnectionManager:1 + urn:upnp-org:serviceId:ConnectionManager + /MediaRenderer/ConnectionManager/Control + /MediaRenderer/ConnectionManager/Event + /xml/ConnectionManager1.xml + + + urn:schemas-upnp-org:service:AVTransport:1 + urn:upnp-org:serviceId:AVTransport + /MediaRenderer/AVTransport/Control + /MediaRenderer/AVTransport/Event + /xml/AVTransport1.xml + + + urn:schemas-sonos-com:service:Queue:1 + urn:sonos-com:serviceId:Queue + /MediaRenderer/Queue/Control + /MediaRenderer/Queue/Event + /xml/Queue1.xml + + + urn:schemas-upnp-org:service:GroupRenderingControl:1 + urn:upnp-org:serviceId:GroupRenderingControl + /MediaRenderer/GroupRenderingControl/Control + /MediaRenderer/GroupRenderingControl/Event + /xml/GroupRenderingControl1.xml + + + urn:schemas-upnp-org:service:VirtualLineIn:1 + urn:upnp-org:serviceId:VirtualLineIn + /MediaRenderer/VirtualLineIn/Control + /MediaRenderer/VirtualLineIn/Event + /xml/VirtualLineIn1.xml + + + + urn:rhapsody-real-com:device-id-1-0:sonos_1:RINCON_000E58000BB001400 + + + + + QPlay:2 + + + image/png + 48 + 48 + 24 + /img/icon-S18.png + + + + + + +"; +} \ No newline at end of file diff --git a/tests/Sonos.Base.Tests/Services/AlarmClockServiceTests.cs b/tests/Sonos.Base.Tests/Services/AlarmClockServiceTests.cs index 2e983b2..eaee422 100644 --- a/tests/Sonos.Base.Tests/Services/AlarmClockServiceTests.cs +++ b/tests/Sonos.Base.Tests/Services/AlarmClockServiceTests.cs @@ -81,7 +81,7 @@ public async Task ListAlarms_ParsesAlarmList() var sonos = new SonosDevice(new SonosDeviceOptions(TestHelpers.DefaultUri, new StaticSonosServiceProvider(mockedHandler.Object))); - var alarmsResponse = await sonos.AlarmClockService.ListAlarms(); + var alarmsResponse = await sonos.AlarmClockService.ListAlarmsAsync(); Assert.NotNull(alarmsResponse?.Alarms); var firstAlarm = alarmsResponse?.Alarms[0]; Assert.NotNull(firstAlarm); diff --git a/tests/Sonos.Base.Tests/Sonos.Base.Tests.csproj b/tests/Sonos.Base.Tests/Sonos.Base.Tests.csproj index 98fa090..2adac3b 100644 --- a/tests/Sonos.Base.Tests/Sonos.Base.Tests.csproj +++ b/tests/Sonos.Base.Tests/Sonos.Base.Tests.csproj @@ -1,17 +1,17 @@ - net6.0 + net8.0 enable false - + - - + + runtime; build; native; contentfiles; analyzers; buildtransitive all @@ -23,7 +23,7 @@ runtime; build; native; contentfiles; analyzers; buildtransitive all - + all runtime; build; native; contentfiles; analyzers; buildtransitive diff --git a/tests/Sonos.Base.Tests/SonosDeviceTests.cs b/tests/Sonos.Base.Tests/SonosDeviceTests.cs index 5d67393..d211d64 100644 --- a/tests/Sonos.Base.Tests/SonosDeviceTests.cs +++ b/tests/Sonos.Base.Tests/SonosDeviceTests.cs @@ -33,7 +33,7 @@ public async Task Next_ExecutesCorrectCommand() mockedHandler.MockSonosRequest(nameof(Services.SonosService.AVTransport), nameof(Services.AVTransportService.Next), "0"); var sonos = new SonosDevice(new SonosDeviceOptions(TestHelpers.DefaultUri, new StaticSonosServiceProvider(mockedHandler.Object))); - var result = await sonos.Next(); + var result = await sonos.NextAsync(); Assert.True(result); } @@ -44,7 +44,7 @@ public async Task Pause_ExecutesCorrectCommand() mockedHandler.MockSonosRequest(nameof(Services.SonosService.AVTransport), nameof(Services.AVTransportService.Pause), "0"); var sonos = new SonosDevice(new SonosDeviceOptions(TestHelpers.DefaultUri, new StaticSonosServiceProvider(mockedHandler.Object))); - var result = await sonos.Pause(); + var result = await sonos.PauseAsync(); Assert.True(result); } @@ -55,7 +55,7 @@ public async Task Play_ExecutesCorrectCommand() mockedHandler.MockSonosRequest(nameof(Services.SonosService.AVTransport), nameof(Services.AVTransportService.Play), "01"); var sonos = new SonosDevice(new SonosDeviceOptions(TestHelpers.DefaultUri, new StaticSonosServiceProvider(mockedHandler.Object))); - var result = await sonos.Play(); + var result = await sonos.PlayAsync(); Assert.True(result); } @@ -66,7 +66,7 @@ public async Task Previous_ExecutesCorrectCommand() mockedHandler.MockSonosRequest(nameof(Services.SonosService.AVTransport), nameof(Services.AVTransportService.Previous), "0"); var sonos = new SonosDevice(new SonosDeviceOptions(TestHelpers.DefaultUri, new StaticSonosServiceProvider(mockedHandler.Object))); - var result = await sonos.Previous(); + var result = await sonos.PreviousAsync(); Assert.True(result); } @@ -77,8 +77,23 @@ public async Task Stop_ExecutesCorrectCommand() mockedHandler.MockSonosRequest(nameof(Services.SonosService.AVTransport), nameof(Services.AVTransportService.Stop), "0"); var sonos = new SonosDevice(new SonosDeviceOptions(TestHelpers.DefaultUri, new StaticSonosServiceProvider(mockedHandler.Object))); - var result = await sonos.Stop(); + var result = await sonos.StopAsync(); Assert.True(result); } + + + [Theory] + [InlineData(FakeData.S1DeviceDescription, "192.168.x.x - Sonos Play:5")] + [InlineData(FakeData.S2DeviceDescription, "192.168.1.10 - Sonos One")] + + public async Task GetDeviceDescriptionAsync_ParsesDeviceDescription(string xml, string name) + { + var mockedHelper = new Mock(); + mockedHelper.MockDeviceDescription(deviceDescription: xml); + var sonos = new SonosDevice(new SonosDeviceOptions(TestHelpers.DefaultUri, new StaticSonosServiceProvider(mockedHelper.Object))); + var description = await sonos.GetDeviceDescriptionAsync(); + Assert.NotNull(description); + Assert.Equal(name, description.device.friendlyName); + } } } \ No newline at end of file diff --git a/tests/Sonos.Base.Tests/SonosManagerTests.cs b/tests/Sonos.Base.Tests/SonosManagerTests.cs index 8ea76ce..4aafbb3 100644 --- a/tests/Sonos.Base.Tests/SonosManagerTests.cs +++ b/tests/Sonos.Base.Tests/SonosManagerTests.cs @@ -35,7 +35,7 @@ public async Task InitializeFromDevice_WorksAsExpected() mockedHandler.MockSonosRequest("ZoneGroupTopology", nameof(Services.ZoneGroupTopologyService.GetZoneGroupState), responseBody: ZoneTopologyResponse); var sonosManager = new SonosManager(new StaticSonosServiceProvider(mockedHandler.Object)); - await sonosManager.InitializeFromDevice(TestHelpers.DefaultUri); + await sonosManager.InitializeFromDeviceAsync(TestHelpers.DefaultUri); var groups = sonosManager.GetGroups(); diff --git a/tests/Sonos.Base.Tests/TestHelpers.cs b/tests/Sonos.Base.Tests/TestHelpers.cs index dd176f3..bca6f6e 100644 --- a/tests/Sonos.Base.Tests/TestHelpers.cs +++ b/tests/Sonos.Base.Tests/TestHelpers.cs @@ -19,6 +19,7 @@ using Microsoft.Extensions.DependencyInjection; using Moq; using Moq.Protected; +using Sonos.Base.Tests; using System; using System.Linq; using System.Net.Http; @@ -34,6 +35,22 @@ public static class TestHelpers private const string SoapActionHeader = "soapaction"; private const string SoapResponseFormat = @"{2}"; + public static Mock MockDeviceDescription(this Mock mock, string deviceDescription, string baseUrl = defaultUri) + { + mock + .Protected() + .Setup>("SendAsync", + ItExpr.Is(m => m.RequestUri == new Uri(new Uri(baseUrl), "/xml/device_description.xml")), + ItExpr.IsAny() + ).ReturnsAsync(new HttpResponseMessage + { + StatusCode = System.Net.HttpStatusCode.OK, + Content = new StringContent(deviceDescription) + }); + + return mock; + } + /// /// Mock a specific request to sonos speakers. ///