Files
esl-reader/deftest.py
Christopher T. Johnson 7c65b466f1 Mostly working!
2024-05-10 12:08:21 -04:00

107 lines
3.4 KiB
Python
Executable File

#!/usr/bin/env python3
import faulthandler
import os
import signal
import sys
from typing import Any, cast
from PyQt6.QtCore import QResource, QSettings, Qt, pyqtSlot
from PyQt6.QtGui import QFontDatabase
from PyQt6.QtSql import QSqlDatabase, QSqlQuery
from PyQt6.QtWidgets import QApplication, QScrollArea
from lib import Word
from lib.sounds import SoundOff
from lib.utils import query_error
from lib.words import Definition
class DefinitionArea(QScrollArea):
def __init__(self, w: Word, *args: Any, **kwargs: Any) -> None:
super(DefinitionArea, self).__init__(*args, *kwargs)
self.definition = Definition(w)
self.setWidget(self.definition)
self.setWidgetResizable(True)
self.setVerticalScrollBarPolicy(Qt.ScrollBarPolicy.ScrollBarAlwaysOn)
self.definition.newWord.connect(self.newWord)
return
@pyqtSlot(str)
def newWord(self, word:str) -> None:
print(f"newWord: {word}")
w = Word(word)
self.definition.setWord(w)
return
def closeEvent(self, event):
settings = QSettings("Troglodite", "esl_reader")
settings.setValue("geometry", self.saveGeometry())
super(DefinitionArea, self).closeEvent(event)
return
def main() -> int:
db = QSqlDatabase()
db = db.addDatabase("QSQLITE")
db.setDatabaseName("test.db")
if not db.open():
raise Exception(db.lastError())
app = QApplication(sys.argv)
#
# Set Default settings
#
settings = QSettings("Troglodite", "esl_reader")
settings.beginGroup("font")
if not settings.contains("display/url"):
settings.setValue(
"display/url", ":/fonts/opendyslexic/OpenDyslexic-Regular.otf"
)
if not settings.contains("display/name"):
settings.setValue("display/name", "OpenDyslexic")
if not settings.contains("phonic/name"):
settings.setValue("phonic/name", "Gentium")
settings.endGroup()
if not settings.contains("keys/mw-api"):
settings.setValue("keys/mw-api", "51d9df34-ee13-489e-8656-478c215e846c")
#
# Setup resources
#
if not QResource.registerResource(
os.path.join(os.path.dirname(__file__), "ui/resources.rcc"), "/"
):
raise Exception("Unable to register resources.rcc")
settings.beginGroup("font")
for name in settings.childGroups():
if settings.contains(f"{name}/url"):
QFontDatabase.addApplicationFont(settings.value(f"{name}/url"))
settings.endGroup()
query = QSqlQuery()
if not query.exec(
"CREATE TABLE IF NOT EXISTS words "
"(word_id INTEGER PRIMARY KEY AUTOINCREMENT, "
"word TEXT, source TEXT, definition TEXT)"
):
query_error(query)
word = Word("lower")
snd = SoundOff()
print("Pre widget")
widget = DefinitionArea(word) # xnoqa: F841
print("post widget")
settings = QSettings("Troglodite", "esl_reader")
geometry = settings.value("geometry")
if geometry is not None:
widget.restoreGeometry(geometry)
d = cast(Definition, widget.widget())
assert d is not None
d.pronounce.connect(snd.playSound)
widget.show()
return app.exec()
if __name__ == "__main__":
faulthandler.register(signal.Signals.SIGUSR1)
faulthandler.register(signal.Signals.SIGTERM)
faulthandler.register(signal.Signals.SIGHUP)
faulthandler.enable()
sys.exit(main())