Du kannst nicht mehr als 25 Themen auswählen Themen müssen entweder mit einem Buchstaben oder einer Ziffer beginnen. Sie können Bindestriche („-“) enthalten und bis zu 35 Zeichen lang sein.
 
 
 
 
 
 

90 Zeilen
2.6 KiB

  1. #!/usr/bin/python3
  2. # Copyright 2017 Virgil Dupras
  3. #
  4. # This software is licensed under the "GPLv3" License as described in the "LICENSE" file,
  5. # which should be included with this package. The terms are also available at
  6. # http://www.gnu.org/licenses/gpl-3.0.html
  7. import sys
  8. import os.path as op
  9. import gc
  10. from PyQt5.QtCore import QCoreApplication
  11. from PyQt5.QtGui import QIcon, QPixmap
  12. from PyQt5.QtWidgets import QApplication
  13. from hscommon.trans import install_gettext_trans_under_qt
  14. from qtlib.error_report_dialog import install_excepthook
  15. from qtlib.util import setupQtLogging
  16. from qtlib.preferences import createQSettings
  17. from qt import dg_rc # noqa: F401
  18. from qt.platform import BASE_PATH
  19. from core import __version__, __appname__
  20. # SIGQUIT is not defined on Windows
  21. if sys.platform == "win32":
  22. from signal import signal, SIGINT, SIGTERM
  23. SIGQUIT = SIGTERM
  24. else:
  25. from signal import signal, SIGINT, SIGTERM, SIGQUIT
  26. global dgapp
  27. dgapp = None
  28. def signalHandler(sig, frame):
  29. global dgapp
  30. if dgapp is None:
  31. return
  32. if sig in (SIGINT, SIGTERM, SIGQUIT):
  33. dgapp.SIGTERM.emit()
  34. def setUpSignals():
  35. signal(SIGINT, signalHandler)
  36. signal(SIGTERM, signalHandler)
  37. signal(SIGQUIT, signalHandler)
  38. def main():
  39. app = QApplication(sys.argv)
  40. QCoreApplication.setOrganizationName("Hardcoded Software")
  41. QCoreApplication.setApplicationName(__appname__)
  42. QCoreApplication.setApplicationVersion(__version__)
  43. setupQtLogging()
  44. settings = createQSettings()
  45. lang = settings.value("Language")
  46. locale_folder = op.join(BASE_PATH, "locale")
  47. install_gettext_trans_under_qt(locale_folder, lang)
  48. # Handle OS signals
  49. setUpSignals()
  50. # Let the Python interpreter runs every 500ms to handle signals. This is
  51. # required because Python cannot handle signals while the Qt event loop is
  52. # running.
  53. from PyQt5.QtCore import QTimer
  54. timer = QTimer()
  55. timer.start(500)
  56. timer.timeout.connect(lambda: None)
  57. # Many strings are translated at import time, so this is why we only import after the translator
  58. # has been installed
  59. from qt.app import DupeGuru
  60. app.setWindowIcon(QIcon(QPixmap(":/{0}".format(DupeGuru.LOGO_NAME))))
  61. global dgapp
  62. dgapp = DupeGuru()
  63. install_excepthook("https://github.com/hsoft/dupeguru/issues")
  64. result = app.exec()
  65. # I was getting weird crashes when quitting under Windows, and manually deleting main app
  66. # references with gc.collect() in between seems to fix the problem.
  67. del dgapp
  68. gc.collect()
  69. del app
  70. gc.collect()
  71. return result
  72. if __name__ == "__main__":
  73. sys.exit(main())