2
0
mirror of https://github.com/9ParsonsB/Pulsar.git synced 2025-04-05 17:39:39 -04:00
pulsar/ObservatoryHerald/HeraldNotifier.cs
2024-01-21 13:35:03 -03:30

109 lines
3.8 KiB
C#

using Observatory.Framework;
using Observatory.Framework.Interfaces;
using System.Text.Json;
namespace Observatory.Herald
{
public class HeraldNotifier : IObservatoryNotifier
{
public HeraldNotifier()
{
heraldSettings = DefaultSettings;
}
private static HeraldSettings DefaultSettings
{
get => new HeraldSettings()
{
SelectedVoice = "American - Christopher",
SelectedRate = "Default",
Volume = 75,
Enabled = false,
ApiEndpoint = "https://api.observatory.xjph.net/AzureVoice",
CacheSize = 100
};
}
public string Name => "Observatory Herald";
public string ShortName => "Herald";
public bool OverrideAudioNotifications => true;
public string Version => typeof(HeraldNotifier).Assembly.GetName().Version.ToString();
public PluginUI PluginUI => new (PluginUI.UIType.None, null);
public object Settings
{
get => heraldSettings;
set
{
// Need to perform migration here, older
// version settings object not fully compatible.
var savedSettings = (HeraldSettings)value;
if (string.IsNullOrWhiteSpace(savedSettings.SelectedRate))
{
heraldSettings.SelectedVoice = savedSettings.SelectedVoice;
heraldSettings.Enabled = savedSettings.Enabled;
}
else
{
heraldSettings = savedSettings;
}
}
}
public void Load(IObservatoryCore observatoryCore)
{
var speechManager = new SpeechRequestManager(
heraldSettings, observatoryCore.HttpClient, observatoryCore.PluginStorageFolder, observatoryCore.GetPluginErrorLogger(this));
heraldSpeech = new HeraldQueue(speechManager, observatoryCore.GetPluginErrorLogger(this), observatoryCore);
heraldSettings.Test = TestVoice;
}
private void TestVoice()
{
heraldSpeech.Enqueue(
new NotificationArgs()
{
Title = "Herald voice testing",
Detail = $"This is {heraldSettings.SelectedVoice.Split(" - ")[1]}."
},
GetAzureNameFromSetting(heraldSettings.SelectedVoice),
GetAzureStyleNameFromSetting(heraldSettings.SelectedVoice),
heraldSettings.Rate[heraldSettings.SelectedRate].ToString(),
heraldSettings.Volume);
}
public void OnNotificationEvent(NotificationArgs notificationEventArgs)
{
if (heraldSettings.Enabled)
heraldSpeech.Enqueue(
notificationEventArgs,
GetAzureNameFromSetting(heraldSettings.SelectedVoice),
GetAzureStyleNameFromSetting(heraldSettings.SelectedVoice),
heraldSettings.Rate[heraldSettings.SelectedRate].ToString(),
heraldSettings.Volume);
}
private string GetAzureNameFromSetting(string settingName)
{
var voiceInfo = (JsonElement)heraldSettings.Voices[settingName];
return voiceInfo.GetProperty("ShortName").GetString();
}
private string GetAzureStyleNameFromSetting(string settingName)
{
string[] settingParts = settingName.Split(" - ");
if (settingParts.Length == 3)
return settingParts[2];
else
return string.Empty;
}
private HeraldSettings heraldSettings;
private HeraldQueue heraldSpeech;
}
}