window.py 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142
  1. """
  2. [Module documentaion here]
  3. @author:[author], [year]
  4. """
  5. import re
  6. from PyQt5.QtCore import Qt
  7. from PyQt5.QtSql import QSqlDatabase, QSqlTableModel, QSqlQueryModel
  8. from path import Path
  9. from PyQt5.QtGui import QIcon
  10. from PyQt5.QtWidgets import QMainWindow, QListWidgetItem, QTableWidgetItem, QFileDialog, QDialog, QMessageBox, \
  11. QTreeWidgetItem
  12. from core import constants
  13. from core.file_utilities import is_subdir_of
  14. from core.indexer import Indexer
  15. from core.models import MusicFolder
  16. from core.repositories import MusicFolderRepository, TrackRepository
  17. from ui.qt.main_ui import Ui_mainWindow
  18. class MainWindow(QMainWindow):
  19. def __init__(self):
  20. super(MainWindow, self).__init__()
  21. # db
  22. self.qdb = QSqlDatabase.addDatabase("QSQLITE")
  23. self.qdb.setDatabaseName(constants.DB_PATH)
  24. self.qdb.open()
  25. self.createWidgets()
  26. def createWidgets(self):
  27. self.ui = Ui_mainWindow()
  28. self.ui.setupUi(self)
  29. # Stack and menus
  30. self.ui.stack.setCurrentIndex(0)
  31. menu_items = [
  32. (':/img/rsc/dancing.png', 'Ma séance'),
  33. (':/img/rsc/writing-tool.png', 'Préparer'),
  34. (':/img/rsc/map.png', 'Explorer'),
  35. (':/img/rsc/calendar.png', 'Agenda'),
  36. (':/img/rsc/settings.png', 'Paramètres'),
  37. ]
  38. for i, item in enumerate(menu_items):
  39. icon, lbl = item
  40. item = QListWidgetItem(QIcon(icon), lbl)
  41. item.index = i
  42. self.ui.menu.addItem(item)
  43. # Menu item clicked
  44. self.ui.menu.itemClicked.connect(self.menu_item_selected)
  45. # Page 3 - explorer
  46. self.ui.explorerTable.populate()
  47. self.ui.btnExplorerRefresh.clicked.connect(self.refresh_explorer_tree)
  48. # Page 5 - settings
  49. self.ui.musicFoldersTable.setColumnHidden(0, 1)
  50. self.ui.musicFoldersAddButton.clicked.connect(self.add_music_folder)
  51. self.ui.musicFoldersRemoveButton.clicked.connect(self.remove_music_folder)
  52. self.populate_music_folders_table()
  53. def menu_item_selected(self, e):
  54. self.ui.stack.setCurrentIndex(e.index)
  55. def indexation_started(self):
  56. self.ui.statusbar.setStatusTip("Indexation en cours...")
  57. def indexation_ended(self):
  58. self.ui.statusbar.setStatusTip("Indexation terminée.")
  59. def refresh_explorer_tree(self):
  60. self.track_model.query()
  61. def explorer_tree_selection_changed(self, model_index):
  62. track_id = model_index.indexes()[0].data(0)
  63. track = TrackRepository().get_by_id(int(track_id))
  64. self.ui.lblTrackTitle.setText(track.title)
  65. self.ui.lblTrackArtist.setText(track.artist)
  66. self.ui.lblTrackAlbum.setText(track.album)
  67. self.ui.lblTrackNumber.setText(str(track.track_num))
  68. # self.ui.lblTrackPath.setText(track.path)
  69. def populate_music_folders_table(self):
  70. music_folders = MusicFolderRepository().get_all()
  71. self.ui.musicFoldersTable.setRowCount(0)
  72. self.ui.musicFoldersTable.setRowCount(len(music_folders))
  73. music_folder_statuses = [
  74. ('Inconnu', 'status_unknown.png'),
  75. ('Valide', 'status_found.png'),
  76. ('Inaccessible', 'status_unavailable.png')
  77. ]
  78. for i, music_folder in enumerate(music_folders):
  79. self.ui.musicFoldersTable.setItem(i, 0, QTableWidgetItem(music_folder.id))
  80. status_lbl, status_pic = music_folder_statuses[music_folder.status]
  81. self.ui.musicFoldersTable.setItem(i, 1, QTableWidgetItem(QIcon(status_pic), status_lbl))
  82. self.ui.musicFoldersTable.setItem(i, 2, QTableWidgetItem(music_folder.path))
  83. def add_music_folder(self):
  84. path = QFileDialog.getExistingDirectory(self, "Sélectionnez le dossier à ajouter")
  85. if not path:
  86. return
  87. path = Path(path)
  88. repo = MusicFolderRepository()
  89. music_folders = repo.get_all()
  90. # for folder in music_folders:
  91. # if path == Path(folder.path):
  92. # QMessageBox.warning(self, "Ajout invalide", "Ce dossier a déjà été ajouté")
  93. # return
  94. #
  95. # if is_subdir_of(path, Path(folder.path)):
  96. # QMessageBox.warning(self, "Ajout invalide", "Ce dossier est contenu dans un dossier existant")
  97. # return
  98. folder = MusicFolder(path=path)
  99. repo.create(folder, True)
  100. self.populate_music_folders_table()
  101. def remove_music_folder(self):
  102. pass
  103. def run(self):
  104. pass
  105. def __del__(self):
  106. if self.qdb.isOpen():
  107. self.qdb.close()
  108. super().__del__()