from PyQt5.QtWidgets import QTreeWidget, QTreeWidgetItem from core.logging_ import Logger from core.repositories import TrackRepository logger = Logger.get() class ExplorerTable(QTreeWidget): def __init__(self, parent): super(QTreeWidget, self).__init__(parent) def populate(self): track_repo = TrackRepository() self.clear() artist_folders = {} album_folders = {} orphans = [] tracks = track_repo.get_all() logger.info(".. start populating explorer table - 1") for track in tracks: # list artists if track.artist and track.artist not in artist_folders: item = QTreeWidgetItem([track.artist]) artist_folders[track.artist] = item for track in tracks: # list albums with artists if track.artist and track.album and (track.artist, track.album) not in album_folders: item = QTreeWidgetItem([track.album]) album_folders[(track.artist, track.album)] = item for track in tracks: # list tracks if track.artist and track.album: parent = album_folders[(track.artist, track.album)] elif track.artist: parent = artist_folders[track.artist] else: orphans.append(QTreeWidgetItem([track.title])) self.setUpdatesEnabled(False) self.insertTopLevelItems(0, orphans) self.insertTopLevelItems(0, artist_folders.values()) self.setUpdatesEnabled(True) logger.info(".. explorer table populated")