#!/usr/bin/env python3 import faulthandler import os import signal import sys from typing import cast from PyQt6.QtCore import QResource, QSettings from PyQt6.QtGui import QFontDatabase from PyQt6.QtSql import QSqlDatabase, QSqlQuery from PyQt6.QtWidgets import QApplication from lib import DefinitionArea, Word from lib.sounds import SoundOff from lib.utils import query_error from lib.words import Definition def monkeyClose(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("cowbell") snd = SoundOff() DefinitionArea.closeEvent = monkeyClose widget = DefinitionArea(word) # xnoqa: F841 settings = QSettings("Troglodite", "esl_reader") widget.restoreGeometry(settings.value("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) sys.exit(main())