Update sync.py
This commit is contained in:
parent
1ba7d74d9c
commit
41bb4d5745
1 changed files with 61 additions and 33 deletions
|
|
@ -38,15 +38,25 @@ class EllipsisLabel(QLabel):
|
||||||
def setText(self, text):
|
def setText(self, text):
|
||||||
self.full_text = text
|
self.full_text = text
|
||||||
# Set elided text with ellipsis
|
# Set elided text with ellipsis
|
||||||
fm = self.fontMetrics()
|
try:
|
||||||
elided_text = fm.elidedText(text, Qt.TextElideMode.ElideRight, self.width() - 10)
|
fm = self.fontMetrics()
|
||||||
super().setText(elided_text)
|
widget_width = self.width()
|
||||||
|
# Use a minimum width if widget isn't sized yet
|
||||||
# Set tooltip to show full text if it's elided
|
if widget_width <= 0:
|
||||||
if elided_text != text:
|
widget_width = 200 # Default fallback width
|
||||||
|
elided_text = fm.elidedText(text, Qt.TextElideMode.ElideRight, widget_width - 10)
|
||||||
|
super().setText(elided_text)
|
||||||
|
|
||||||
|
# Set tooltip to show full text if it's elided
|
||||||
|
if elided_text != text:
|
||||||
|
self.setToolTip(text)
|
||||||
|
else:
|
||||||
|
self.setToolTip("") # Clear tooltip if text fits
|
||||||
|
except Exception as e:
|
||||||
|
# Fallback to just setting the text if ellipsis calculation fails
|
||||||
|
logger.debug(f"EllipsisLabel setText error: {e}")
|
||||||
|
super().setText(text)
|
||||||
self.setToolTip(text)
|
self.setToolTip(text)
|
||||||
else:
|
|
||||||
self.setToolTip("") # Clear tooltip if text fits
|
|
||||||
|
|
||||||
def resizeEvent(self, event):
|
def resizeEvent(self, event):
|
||||||
"""Handle resize events to recalculate ellipsis"""
|
"""Handle resize events to recalculate ellipsis"""
|
||||||
|
|
@ -1924,31 +1934,49 @@ class PlaylistDetailsModal(QDialog):
|
||||||
# Populate table with limited tracks
|
# Populate table with limited tracks
|
||||||
logger.info(f"Populating track table with {len(tracks_to_show)} tracks")
|
logger.info(f"Populating track table with {len(tracks_to_show)} tracks")
|
||||||
for row, track in enumerate(tracks_to_show):
|
for row, track in enumerate(tracks_to_show):
|
||||||
# Track name with ellipsis label
|
try:
|
||||||
track_label = EllipsisLabel(track.name)
|
logger.debug(f"Processing track {row+1}/{len(tracks_to_show)}: {track.name} by {', '.join(track.artists) if track.artists else 'Unknown'}")
|
||||||
track_label.setFont(QFont("SF Pro Text", 11, QFont.Weight.Medium))
|
|
||||||
track_label.setStyleSheet("color: #ffffff; background: transparent; border: none;")
|
# Track name with ellipsis label
|
||||||
self.track_table.setCellWidget(row, 0, track_label)
|
track_label = EllipsisLabel(track.name)
|
||||||
|
track_label.setFont(QFont("SF Pro Text", 11, QFont.Weight.Medium))
|
||||||
# Artist(s) with ellipsis label
|
track_label.setStyleSheet("color: #ffffff; background: transparent; border: none;")
|
||||||
artists = ", ".join(track.artists)
|
self.track_table.setCellWidget(row, 0, track_label)
|
||||||
artist_label = EllipsisLabel(artists)
|
logger.debug(f"Set track name widget for row {row}")
|
||||||
artist_label.setFont(QFont("SF Pro Text", 11))
|
|
||||||
artist_label.setStyleSheet("color: #ffffff; background: transparent; border: none;")
|
# Artist(s) with ellipsis label
|
||||||
self.track_table.setCellWidget(row, 1, artist_label)
|
artists = ", ".join(track.artists) if track.artists else "Unknown Artist"
|
||||||
|
artist_label = EllipsisLabel(artists)
|
||||||
# Album with ellipsis label
|
artist_label.setFont(QFont("SF Pro Text", 11))
|
||||||
album_label = EllipsisLabel(track.album)
|
artist_label.setStyleSheet("color: #ffffff; background: transparent; border: none;")
|
||||||
album_label.setFont(QFont("SF Pro Text", 11))
|
self.track_table.setCellWidget(row, 1, artist_label)
|
||||||
album_label.setStyleSheet("color: #ffffff; background: transparent; border: none;")
|
logger.debug(f"Set artist widget for row {row}")
|
||||||
self.track_table.setCellWidget(row, 2, album_label)
|
|
||||||
|
# Album with ellipsis label
|
||||||
# Duration with standard item (doesn't need scrolling)
|
album_name = track.album if track.album else "Unknown Album"
|
||||||
duration = self.format_duration(track.duration_ms)
|
album_label = EllipsisLabel(album_name)
|
||||||
duration_item = QTableWidgetItem(duration)
|
album_label.setFont(QFont("SF Pro Text", 11))
|
||||||
duration_item.setFlags(duration_item.flags() & ~Qt.ItemFlag.ItemIsEditable)
|
album_label.setStyleSheet("color: #ffffff; background: transparent; border: none;")
|
||||||
duration_item.setFont(QFont("SF Mono", 10))
|
self.track_table.setCellWidget(row, 2, album_label)
|
||||||
self.track_table.setItem(row, 3, duration_item)
|
logger.debug(f"Set album widget for row {row}")
|
||||||
|
|
||||||
|
# Duration with standard item (doesn't need scrolling)
|
||||||
|
duration = self.format_duration(track.duration_ms)
|
||||||
|
duration_item = QTableWidgetItem(duration)
|
||||||
|
duration_item.setFlags(duration_item.flags() & ~Qt.ItemFlag.ItemIsEditable)
|
||||||
|
duration_item.setFont(QFont("SF Mono", 10))
|
||||||
|
self.track_table.setItem(row, 3, duration_item)
|
||||||
|
logger.debug(f"Set duration item for row {row}")
|
||||||
|
|
||||||
|
logger.debug(f"Completed track {row+1}/{len(tracks_to_show)}")
|
||||||
|
|
||||||
|
except Exception as e:
|
||||||
|
logger.error(f"Error processing track {row+1}: {e}")
|
||||||
|
logger.error(f"Track data: name='{track.name if hasattr(track, 'name') else 'N/A'}', artists='{track.artists if hasattr(track, 'artists') else 'N/A'}', album='{track.album if hasattr(track, 'album') else 'N/A'}'")
|
||||||
|
# Continue with next track rather than failing completely
|
||||||
|
continue
|
||||||
|
|
||||||
|
logger.info(f"Finished populating all {len(tracks_to_show)} tracks")
|
||||||
|
|
||||||
# Add info message if tracks were limited
|
# Add info message if tracks were limited
|
||||||
if total_tracks > display_limit:
|
if total_tracks > display_limit:
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue