99 lines
3.1 KiB
Python
Executable File
99 lines
3.1 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
|
|
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)
|
|
d = Definition(w)
|
|
self.setWidget(d)
|
|
self.setWidgetResizable(True)
|
|
self.setVerticalScrollBarPolicy(Qt.ScrollBarPolicy.ScrollBarAlwaysOn)
|
|
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())
|