|
|
@@ -20,43 +20,53 @@ class ExplorerTable(QTreeWidget):
|
|
|
self.setColumnWidth(0, 54)
|
|
|
self.hideColumn(2)
|
|
|
self.itemDoubleClicked.connect(self._itemDoubleClicked)
|
|
|
+ self.artist_items, self.album_items, self.track_items = {}, {}, {}
|
|
|
|
|
|
def populate(self):
|
|
|
session = db.Session()
|
|
|
track_repo = TrackRepository(session)
|
|
|
self.clear()
|
|
|
|
|
|
- artist_folders = {}
|
|
|
- album_folders = {}
|
|
|
+ self.artist_items, self.album_items, self.track_items = {}, {}, {}
|
|
|
+
|
|
|
tracks = track_repo.get_all()
|
|
|
|
|
|
self.setUpdatesEnabled(False)
|
|
|
+ self.update_with(tracks)
|
|
|
+ self.setUpdatesEnabled(True)
|
|
|
+ self.trackSelected.emit(None)
|
|
|
+
|
|
|
+ def update_with(self, tracks):
|
|
|
|
|
|
for track in tracks:
|
|
|
- if track.artist and track.artist not in artist_folders:
|
|
|
+ if track.artist and track.artist not in self.artist_items:
|
|
|
item = QTreeWidgetItem(self)
|
|
|
item.setIcon(0, QIcon(":/img/rsc/artist.png"))
|
|
|
item.setText(1, track.artist)
|
|
|
- artist_folders[track.artist] = item
|
|
|
+ self.artist_items[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(artist_folders[track.artist])
|
|
|
+ if track.artist and track.album and (track.artist, track.album) not in self.album_items:
|
|
|
+ item = QTreeWidgetItem(self.artist_items[track.artist])
|
|
|
item.setIcon(0, QIcon(":/img/rsc/album.png"))
|
|
|
item.setText(1, track.album)
|
|
|
- album_folders[(track.artist, track.album)] = item
|
|
|
+ self.album_items[(track.artist, track.album)] = item
|
|
|
|
|
|
for track in tracks:
|
|
|
- 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)
|
|
|
- item.setIcon(0, QIcon(":/img/rsc/music.png"))
|
|
|
+ if track.id not in self.track_items:
|
|
|
+ if track.artist and track.album:
|
|
|
+ parent = self.album_items[(track.artist, track.album)]
|
|
|
+ elif track.artist:
|
|
|
+ parent = self.artist_items[track.artist]
|
|
|
+ else:
|
|
|
+ parent = self
|
|
|
+
|
|
|
+ item = QTreeWidgetItem(parent)
|
|
|
+ item.setIcon(0, QIcon(":/img/rsc/music.png"))
|
|
|
+ item.setData(2, 0, track.id)
|
|
|
+ self.track_items[track.id] = item
|
|
|
|
|
|
if track.status != track.STATUS_UNAVAILABLE:
|
|
|
title = track.title
|
|
|
@@ -65,18 +75,9 @@ class ExplorerTable(QTreeWidget):
|
|
|
title = f"[Introuvable] {track.title}"
|
|
|
color = QColor(200, 20, 20)
|
|
|
|
|
|
- item.setText(1, title)
|
|
|
- item.setForeground(0, QBrush(color))
|
|
|
- item.setForeground(1, QBrush(color))
|
|
|
- item.setData(2, 0, track.id)
|
|
|
-
|
|
|
- self.setUpdatesEnabled(True)
|
|
|
- self.trackSelected.emit(None)
|
|
|
-
|
|
|
- def update_tracks(self, tracks):
|
|
|
- # for track in tracks:
|
|
|
- # pass
|
|
|
- self.populate()
|
|
|
+ self.track_items[track.id].setText(1, title)
|
|
|
+ self.track_items[track.id].setForeground(0, QBrush(color))
|
|
|
+ self.track_items[track.id].setForeground(1, QBrush(color))
|
|
|
|
|
|
def selected_track(self):
|
|
|
track_id = self.selectionModel().selection().indexes()[2].data(2)
|