main.py 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. """
  2. [App documentation here]
  3. @author:[author], [year]
  4. """
  5. import sys
  6. import yaml
  7. from PyQt5.Qt import QApplication
  8. from PyQt5.QtWidgets import QMessageBox
  9. from core import db
  10. from core.constants import SETTING_PATH, SETTING_DIST_PATH
  11. from core.indexer import Indexer
  12. from core.logging_ import Logger
  13. from ui.window import MainWindow
  14. try:
  15. # Necessary to ensure that stacktraces are printed when using PyQt5
  16. # Tough, could make pythonw.exe crash
  17. import ipdb # @UnusedImport
  18. except:
  19. pass
  20. logger = Logger.get()
  21. main_window = None
  22. # Configure how errors are processed
  23. sys_err = sys.excepthook
  24. def err_handler(typ, value, trace):
  25. QApplication.restoreOverrideCursor()
  26. if main_window:
  27. QMessageBox.critical(main_window, "Erreur: {}".format(typ.__name__), """{}""".format(value))
  28. sys_err(typ, value, trace)
  29. sys.excepthook = err_handler
  30. # create settings file
  31. if not SETTING_PATH.exists():
  32. SETTING_DIST_PATH.copy(SETTING_PATH)
  33. settings = yaml.load(SETTING_PATH.text(), Loader=yaml.FullLoader)
  34. # Create db if not existing
  35. try:
  36. db.create()
  37. except FileExistsError:
  38. pass
  39. # Start UI
  40. logger.info("-- Start --")
  41. app = QApplication(sys.argv)
  42. indexer = Indexer()
  43. indexer.start()
  44. main_window = MainWindow(settings)
  45. # connect indexer signals
  46. indexer.emitter.filesIndexed.connect(main_window.filesIndexed)
  47. indexer.emitter.musicFolderStatusChanged.connect(main_window.musicFolderStatusChanged)
  48. main_window.show()
  49. try:
  50. r = app.exec_()
  51. finally:
  52. indexer.stop()
  53. try:
  54. settings = main_window.currentSettings()
  55. with open(SETTING_PATH, 'w') as f:
  56. yaml.dump(settings, f)
  57. finally:
  58. db.close()
  59. logger.info("-- Closed --")
  60. sys.exit(r)