nixos-configs/devices/homie/modules/home-assistant/netdaemon/apps/Spotify/PlaySong/PlaySong.cs
matt1432 0f109a9a69
All checks were successful
Discord / discord commits (push) Has been skipped
feat(hass): add PlaySong voice command and some netd fixes
2024-10-09 11:01:53 -04:00

61 lines
1.9 KiB
C#

namespace Spotify;
using HomeAssistantGenerated;
using NetDaemon.AppModel;
using NetDaemon.HassModel;
using NetDaemon.HassModel.Integration;
using System.Text.Json;
record PlaySongData(string? artist, string? song);
[NetDaemonApp]
public class PlaySong
{
// Snake-case json options
private readonly JsonSerializerOptions _jsonOptions = new JsonSerializerOptions
{
PropertyNamingPolicy = JsonNamingPolicy.SnakeCaseLower
};
public PlaySong(IHaContext ha)
{
ha.RegisterServiceCallBack<PlaySongData>(
"spotify_play_song",
async (e) =>
{
var result = (await ha.CallServiceWithResponseAsync(
"spotifyplus",
"search_tracks",
data: new SpotifyplusSearchTracksParameters
{
Criteria = $"{e?.artist} {e?.song}",
LimitTotal = 1,
EntityId = Global.DEFAULT_ENTITY_ID,
// My Defaults
Market = "CA",
IncludeExternal = "audio",
}
)).Value.Deserialize<SpotifyplusSearchTracksResponse>(_jsonOptions);
string? uri = result?.Result?.Items?[0]?.Uri;
if (uri is not null)
{
ha.CallService(
"spotifyplus",
"player_media_play_tracks",
data: new SpotifyplusPlayerMediaPlayTracksParameters
{
Uris = uri,
EntityId = Global.DEFAULT_ENTITY_ID,
DeviceId = Global.DEFAULT_DEV_ID,
// My Defaults
PositionMs = 0,
Delay = 0.50,
}
);
}
}
);
}
}