using Newtonsoft.Json.Linq; using System; using System.Collections.Generic; using System.Drawing; using System.IO; using System.Linq; using System.Text; using System.Threading.Tasks; using BarRaider.SdTools; using Newtonsoft.Json; namespace FocusVolumeControl.UI { internal class UIState { [JsonProperty("title")] public string Title { get; private init; } [JsonProperty("value")] public ValueWithOpacity Value { get; private init; } [JsonProperty("indicator")] public ValueWithOpacityIndicator { get; private init; } [JsonProperty("icon")] public ValueWithOpacity icon { get; private init; } public static UIState Build(ActiveAudioSessionWrapper session) { var volume = session.GetVolumeLevel(); var opacity = session.GetMuted() != true ? 1 : 0.5f; var iconData = ""; if (session.Icon != null) { iconData = session.Icon; } else { try { var icon = Icon.ExtractAssociatedIcon(session.ExecutablePath); iconData = Tools.ImageToBase64(icon.ToBitmap(), true); } catch { iconData = "Image/pluginIcon.png"; } session.Icon = iconData; } return new UIState() { Title = session.DisplayName, Value = new() { Value = $"{volume}%", Opacity = opacity }, Indicator = new() { Value = volume, Opacity = opacity }, icon = new() { Value = iconData, Opacity = opacity }, }; } } }