from PyQt5.QtWidgets import QTreeWidget, QTreeWidgetItem from core.repositories import TrackRepository class ExplorerTable(QTreeWidget): def __init__(self, parent): super(QTreeWidget, self).__init__(parent) def populate(self): track_repo = TrackRepository() artist_folders = {} album_folders = {} tracks = track_repo.get_all() for track in tracks: if track.artist and track.artist not in artist_folders: item = QTreeWidgetItem(self, [track.artist]) artist_folders[track.artist] = item if track.artist and track.album and (track.artist, track.album) not in album_folders: item = QTreeWidgetItem(artist_folders[track.artist], [track.album]) album_folders[(track.artist, track.album)] = item if track.artist and track.album: parent = album_folders[(track.artist, track.album)] elif track.artist: parent = artist_folders[track.artist] else: parent = self item = QTreeWidgetItem(parent, [track.title])