Add primitive mac support
parent
fdec231e49
commit
a83e1a79a1
|
@ -22,6 +22,12 @@ namespace stardew_access.ScreenReader
|
||||||
|
|
||||||
ScreenReader = screenReaderLinux;
|
ScreenReader = screenReaderLinux;
|
||||||
}
|
}
|
||||||
|
else if (RuntimeInformation.IsOSPlatform(OSPlatform.OSX)) {
|
||||||
|
var reader = new ScreenReaderMac();
|
||||||
|
reader.InitializeScreenReader();
|
||||||
|
|
||||||
|
ScreenReader = reader;
|
||||||
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
ScreenReader.InitializeScreenReader();
|
ScreenReader.InitializeScreenReader();
|
||||||
|
|
|
@ -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();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue