music_folders_table.py 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. from path import Path
  2. from PyQt5.QtGui import QIcon
  3. from PyQt5.QtWidgets import QTableWidget, QTableWidgetItem, QFileDialog, QMessageBox
  4. from core.file_utilities import is_subdir_of
  5. from core.models import MusicFolder
  6. from core.repositories import MusicFolderRepository
  7. class MusicFoldersTable(QTableWidget):
  8. music_folder_statuses = [
  9. ('Inconnu', ':/img/rsc/unknown.png'),
  10. ('Valide', ':/img/rsc/valid.png'),
  11. ('Inaccessible', ':/img/rsc/invalid.png')
  12. ]
  13. def populate(self):
  14. self.hideColumn(0)
  15. music_folders = MusicFolderRepository().get_all()
  16. self.clear()
  17. row = 0
  18. for music_folder in music_folders:
  19. self.insertRow(row)
  20. item = QTableWidgetItem()
  21. item.setData(0, music_folder.id)
  22. self.setItem(row, 0, item)
  23. status_lbl, status_pic = self.music_folder_statuses[music_folder.status]
  24. self.setItem(row, 1, QTableWidgetItem(QIcon(status_pic), status_lbl))
  25. self.setItem(row, 2, QTableWidgetItem(music_folder.path))
  26. row += 1
  27. def selected_music_folder(self):
  28. music_folder_id = self.item(self.currentRow(), 0).data(0)
  29. if not music_folder_id:
  30. return None
  31. return MusicFolderRepository().get_by_id(int(music_folder_id))
  32. def add_music_folder(self):
  33. path = QFileDialog.getExistingDirectory(self, "Sélectionnez le dossier à ajouter")
  34. if not path:
  35. return
  36. path = Path(path)
  37. repo = MusicFolderRepository()
  38. if repo.exists("path", str(path)):
  39. QMessageBox.warning(self, "Ajout invalide", "Ce dossier a déjà été ajouté")
  40. return
  41. folder = MusicFolder(path=path)
  42. repo.create(folder, True)
  43. self.populate()
  44. def remove_music_folder(self):
  45. music_folder = self.selected_music_folder()
  46. if music_folder is None:
  47. return
  48. if QMessageBox.question(
  49. self,
  50. "Confirmer",
  51. "Êtes-vous sûr(e) de vouloir supprimer ce dossier de la liste des dossiers à analyser?"
  52. ) != QMessageBox.Yes:
  53. return
  54. repo = MusicFolderRepository()
  55. repo.delete(music_folder, True)
  56. self.populate()