Latest changes.
This commit is contained in:
@@ -1,66 +0,0 @@
|
||||
#!/usr/bin/env python3
|
||||
|
||||
import time
|
||||
|
||||
from fenrirscreenreader.core.i18n import _
|
||||
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
# Fenrir TTY screen reader
|
||||
# By Chrys, Storm Dragon, and contributors.
|
||||
|
||||
|
||||
class command:
|
||||
def __init__(self):
|
||||
pass
|
||||
|
||||
def initialize(self, environment):
|
||||
self.env = environment
|
||||
|
||||
def shutdown(self):
|
||||
pass
|
||||
|
||||
def get_description(self):
|
||||
return "No Description found"
|
||||
|
||||
def run(self):
|
||||
if not self.env["runtime"]["SettingsManager"].get_setting_as_bool(
|
||||
"promote", "enabled"
|
||||
):
|
||||
return
|
||||
if (
|
||||
self.env["runtime"]["SettingsManager"]
|
||||
.get_setting("promote", "list")
|
||||
.strip(" \t\n")
|
||||
== ""
|
||||
):
|
||||
return
|
||||
if int(time.time() - self.env["input"]["last_input_time"]) < self.env[
|
||||
"runtime"
|
||||
]["SettingsManager"].get_setting_as_int(
|
||||
"promote", "inactive_timeout_sec"
|
||||
):
|
||||
return
|
||||
if (
|
||||
len(
|
||||
self.env["runtime"]["SettingsManager"].get_setting(
|
||||
"promote", "list"
|
||||
)
|
||||
)
|
||||
== 0
|
||||
):
|
||||
return
|
||||
for promote in (
|
||||
self.env["runtime"]["SettingsManager"]
|
||||
.get_setting("promote", "list")
|
||||
.split(",")
|
||||
):
|
||||
if promote in self.env["screen"]["new_delta"]:
|
||||
self.env["runtime"]["OutputManager"].play_sound_icon(
|
||||
"PromotedText"
|
||||
)
|
||||
self.env["input"]["last_input_time"] = time.time()
|
||||
return
|
||||
|
||||
def set_callback(self, callback):
|
||||
pass
|
||||
@@ -17,8 +17,7 @@ from fenrirscreenreader.core.eventData import FenrirEventType
|
||||
class EventManager:
|
||||
def __init__(self):
|
||||
self.running = Value(c_bool, True)
|
||||
# Bounded queue to prevent memory exhaustion
|
||||
self._eventQueue = Queue(maxsize=100)
|
||||
self._eventQueue = Queue()
|
||||
self.clean_event_queue()
|
||||
|
||||
def initialize(self, environment):
|
||||
@@ -107,23 +106,5 @@ class EventManager:
|
||||
return False
|
||||
if event == FenrirEventType.ignore:
|
||||
return False
|
||||
# Use bounded queue - if full, this will block briefly or drop older
|
||||
# events
|
||||
try:
|
||||
self._eventQueue.put({"Type": event, "data": data}, timeout=0.1)
|
||||
except Exception as e:
|
||||
# Queue full - drop oldest event and add new one for critical
|
||||
# events
|
||||
if event in [
|
||||
FenrirEventType.screen_update,
|
||||
FenrirEventType.keyboard_input,
|
||||
]:
|
||||
try:
|
||||
self._eventQueue.get_nowait() # Remove oldest
|
||||
self._eventQueue.put(
|
||||
{"Type": event, "data": data}, timeout=0.1
|
||||
)
|
||||
except BaseException:
|
||||
pass # If still can't add, drop the event
|
||||
# For non-critical events, just drop them if queue is full
|
||||
self._eventQueue.put({"Type": event, "data": data})
|
||||
return True
|
||||
|
||||
@@ -65,13 +65,31 @@ class OutputManager:
|
||||
return
|
||||
if (len(text) > 1) and (text.strip(string.whitespace) == ""):
|
||||
return
|
||||
to_announce_capital = announce_capital and text[0].isupper()
|
||||
if to_announce_capital:
|
||||
if self.play_sound_icon("capital", False):
|
||||
to_announce_capital = False
|
||||
is_capital = announce_capital and text[0].isupper()
|
||||
use_pitch_for_capital = False
|
||||
|
||||
if is_capital:
|
||||
indicator = self.env["runtime"]["SettingsManager"].get_setting(
|
||||
"speech", "capital_indicator"
|
||||
).lower()
|
||||
|
||||
if indicator == "none":
|
||||
pass # No indication
|
||||
elif indicator == "beep":
|
||||
# Play beep with interrupt=True to fix stacking
|
||||
self.play_sound_icon("capital", True)
|
||||
elif indicator == "pitch":
|
||||
use_pitch_for_capital = True
|
||||
elif indicator == "both":
|
||||
self.play_sound_icon("capital", True)
|
||||
use_pitch_for_capital = True
|
||||
else:
|
||||
# Default to pitch for unknown values
|
||||
use_pitch_for_capital = True
|
||||
|
||||
self.last_echo = text
|
||||
self.speak_text(
|
||||
text, interrupt, ignore_punctuation, to_announce_capital, flush
|
||||
text, interrupt, ignore_punctuation, use_pitch_for_capital, flush
|
||||
)
|
||||
|
||||
def get_last_echo(self):
|
||||
|
||||
@@ -23,6 +23,7 @@ settings_data = {
|
||||
"rate": 0.75,
|
||||
"pitch": 0.5,
|
||||
"capital_pitch": 0.8,
|
||||
"capital_indicator": "pitch",
|
||||
"volume": 1.0,
|
||||
"module": "",
|
||||
"voice": "en-us",
|
||||
@@ -97,11 +98,6 @@ settings_data = {
|
||||
"vmenu_path": "",
|
||||
"quick_menu": "speech#rate;speech#pitch;speech#volume",
|
||||
},
|
||||
"promote": {
|
||||
"enabled": True,
|
||||
"inactive_timeout_sec": 120,
|
||||
"list": "",
|
||||
},
|
||||
"time": {
|
||||
"enabled": False,
|
||||
"present_time": True,
|
||||
|
||||
@@ -4,5 +4,5 @@
|
||||
# Fenrir TTY screen reader
|
||||
# By Chrys, Storm Dragon, and contributors.
|
||||
|
||||
version = "2025.12.20"
|
||||
version = "2025.12.30"
|
||||
code_name = "master"
|
||||
|
||||
Reference in New Issue
Block a user