- #!/usr/bin/python3
- # Copyright 2017 Virgil Dupras
- #
- # This software is licensed under the "GPLv3" License as described in the "LICENSE" file,
- # which should be included with this package. The terms are also available at
- # http://www.gnu.org/licenses/gpl-3.0.html
-
- import sys
- import os.path as op
- import gc
-
- from PyQt5.QtCore import QCoreApplication
- from PyQt5.QtGui import QIcon, QPixmap
- from PyQt5.QtWidgets import QApplication
-
- from hscommon.trans import install_gettext_trans_under_qt
- from qtlib.error_report_dialog import install_excepthook
- from qtlib.util import setupQtLogging
- from qtlib.preferences import createQSettings
- from qt import dg_rc # noqa: F401
- from qt.platform import BASE_PATH
- from core import __version__, __appname__
-
- # SIGQUIT is not defined on Windows
- if sys.platform == "win32":
- from signal import signal, SIGINT, SIGTERM
-
- SIGQUIT = SIGTERM
- else:
- from signal import signal, SIGINT, SIGTERM, SIGQUIT
-
- global dgapp
- dgapp = None
-
-
- def signalHandler(sig, frame):
- global dgapp
- if dgapp is None:
- return
- if sig in (SIGINT, SIGTERM, SIGQUIT):
- dgapp.SIGTERM.emit()
-
-
- def setUpSignals():
- signal(SIGINT, signalHandler)
- signal(SIGTERM, signalHandler)
- signal(SIGQUIT, signalHandler)
-
-
- def main():
- app = QApplication(sys.argv)
- QCoreApplication.setOrganizationName("Hardcoded Software")
- QCoreApplication.setApplicationName(__appname__)
- QCoreApplication.setApplicationVersion(__version__)
- setupQtLogging()
- settings = createQSettings()
- lang = settings.value("Language")
- locale_folder = op.join(BASE_PATH, "locale")
- install_gettext_trans_under_qt(locale_folder, lang)
- # Handle OS signals
- setUpSignals()
- # Let the Python interpreter runs every 500ms to handle signals. This is
- # required because Python cannot handle signals while the Qt event loop is
- # running.
- from PyQt5.QtCore import QTimer
-
- timer = QTimer()
- timer.start(500)
- timer.timeout.connect(lambda: None)
- # Many strings are translated at import time, so this is why we only import after the translator
- # has been installed
- from qt.app import DupeGuru
-
- app.setWindowIcon(QIcon(QPixmap(":/{0}".format(DupeGuru.LOGO_NAME))))
- global dgapp
- dgapp = DupeGuru()
- install_excepthook("https://github.com/hsoft/dupeguru/issues")
- result = app.exec()
- # I was getting weird crashes when quitting under Windows, and manually deleting main app
- # references with gc.collect() in between seems to fix the problem.
- del dgapp
- gc.collect()
- del app
- gc.collect()
- return result
-
-
- if __name__ == "__main__":
- sys.exit(main())
|