explorertable.py 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. from PyQt5.QtWidgets import QTreeWidget, QTreeWidgetItem
  2. from core.logging_ import Logger
  3. from core.repositories import TrackRepository
  4. logger = Logger.get()
  5. class ExplorerTable(QTreeWidget):
  6. def __init__(self, parent):
  7. super(QTreeWidget, self).__init__(parent)
  8. def populate(self):
  9. track_repo = TrackRepository()
  10. self.clear()
  11. artist_folders = {}
  12. album_folders = {}
  13. orphans = []
  14. tracks = track_repo.get_all()
  15. logger.info(".. start populating explorer table - 1")
  16. for track in tracks:
  17. # list artists
  18. if track.artist and track.artist not in artist_folders:
  19. item = QTreeWidgetItem([track.artist])
  20. artist_folders[track.artist] = item
  21. for track in tracks:
  22. # list albums with artists
  23. if track.artist and track.album and (track.artist, track.album) not in album_folders:
  24. item = QTreeWidgetItem([track.album])
  25. album_folders[(track.artist, track.album)] = item
  26. for track in tracks:
  27. # list tracks
  28. if track.artist and track.album:
  29. parent = album_folders[(track.artist, track.album)]
  30. elif track.artist:
  31. parent = artist_folders[track.artist]
  32. else:
  33. orphans.append(QTreeWidgetItem([track.title]))
  34. self.setUpdatesEnabled(False)
  35. self.insertTopLevelItems(0, orphans)
  36. self.insertTopLevelItems(0, artist_folders.values())
  37. self.setUpdatesEnabled(True)
  38. logger.info(".. explorer table populated")