Add primitive mac support

master
Talon 2022-03-05 16:11:48 +01:00
parent fdec231e49
commit a83e1a79a1
2 changed files with 102 additions and 0 deletions

View File

@ -22,6 +22,12 @@ namespace stardew_access.ScreenReader
ScreenReader = screenReaderLinux;
}
else if (RuntimeInformation.IsOSPlatform(OSPlatform.OSX)) {
var reader = new ScreenReaderMac();
reader.InitializeScreenReader();
ScreenReader = reader;
}
else
{
ScreenReader.InitializeScreenReader();

View File

@ -0,0 +1,96 @@
using System;
using System.Diagnostics;
using System.IO;
namespace stardew_access.ScreenReader
{
public class ScreenReaderMac : IScreenReader
{
private Process? _speakProcess;
public string PrevTextTile
{
get;
set;
}
public string prevText = "", prevTextTile = " ", prevChatText = "", prevMenuText = "";
public void InitializeScreenReader()
{
MainClass.GetMonitor().Log("Screen reader initialized");
Speak("Mac screen reader ready", true);
}
public void CloseScreenReader()
{
MainClass.GetMonitor().Log("Screen reader closed");
}
public void Say(string text, bool interrupt)
{
if (text == null) return;
MainClass.GetMonitor().Log($"{text}");
Speak(text, interrupt);
}
public void SayWithChecker(string text, bool interrupt)
{
if (text == null) return;
MainClass.GetMonitor().Log($"{text}");
if (text != prevText) {
Speak(text, interrupt);
prevText = text;
}
}
public void SayWithMenuChecker(string text, bool interrupt)
{
if (text == null) return;
MainClass.GetMonitor().Log($"{text}");
if (text != prevMenuText) {
Speak(text, interrupt);
prevMenuText = text;
}
}
public void SayWithChatChecker(string text, bool interrupt)
{
if (text == null) return;
MainClass.GetMonitor().Log($"{text}");
if (text != prevChatText) {
Speak(text, interrupt);
prevChatText = text;
}
}
public void SayWithTileQuery(string text, int x, int y, bool interrupt)
{
if (text == null) return;
MainClass.GetMonitor().Log($"{text}");
if (text != prevTextTile) {
Speak(text, interrupt);
prevTextTile = text;
}
}
private void Speak(string text, bool interupt) {
if (interupt) {
if (_speakProcess != null) {
_speakProcess.Kill();
_speakProcess = null;
}
}
if (_speakProcess == null) {
_speakProcess = new Process();
_speakProcess.StartInfo.FileName = "say";
_speakProcess.StartInfo.Verb = "say";
_speakProcess.StartInfo.RedirectStandardInput = true;
_speakProcess.StartInfo.Arguments = text;
_speakProcess.Start();
}
}
}
}