diff --git a/app/musicmuster.py b/app/musicmuster.py index 6e5f86f..19729ba 100755 --- a/app/musicmuster.py +++ b/app/musicmuster.py @@ -670,11 +670,15 @@ class Window(QMainWindow, Ui_MainWindow): artist = tags['artist'] possible_matches = Tracks.search_titles(session, title) if possible_matches: - txt += 'Similar to new track ' - txt += f'"{title}" by "{artist} ({fname})":\n\n' - for track in possible_matches: - txt += f' "{track.title}" by {track.artist}' - txt += f' ({track.path})\n\n' + if len(possible_matches) > 5: + txt = "More than five tracks look similar to " + txt += f'"{title}" by "{artist} ({fname})":\n\n' + else: + txt += 'Similar to new track ' + txt += f'"{title}" by "{artist} ({fname})":\n\n' + for track in possible_matches: + txt += f' "{track.title}" by {track.artist}' + txt += f' ({track.path})\n\n' txt += "\n" # Check whether to proceed if there were potential matches txt += "Proceed with import?" @@ -1031,7 +1035,7 @@ class Window(QMainWindow, Ui_MainWindow): """Scroll to show current track""" log.debug(f"KAE: musicmuster.show_current()") - if self.current_track_playlist_tab != self.visible_playlist_tab: + if self.current_track_playlist_tab != self.visible_playlist_tab(): self.tabPlaylist.setCurrentWidget(self.current_track_playlist_tab) self.tabPlaylist.currentWidget().scroll_current_to_top() @@ -1039,7 +1043,7 @@ class Window(QMainWindow, Ui_MainWindow): """Scroll to show next track""" log.debug(f"KAE: musicmuster.show_next()") - if self.next_track_playlist_tab != self.visible_playlist_tab: + if self.next_track_playlist_tab != self.visible_playlist_tab(): self.tabPlaylist.setCurrentWidget(self.next_track_playlist_tab) self.tabPlaylist.currentWidget().scroll_next_to_top() @@ -1151,8 +1155,12 @@ class Window(QMainWindow, Ui_MainWindow): # Update headers self.update_headers() - # Populate 'info' tabs with Wikipedia info - self.tabInfolist.open_in_wikipedia(track.title) + # Populate 'info' tabs with Wikipedia info, but queue it because + # it isn't quick + track_title = track.title + QTimer.singleShot( + 1, lambda: self.tabInfolist.open_in_wikipedia(track_title) + ) def tick(self) -> None: """ diff --git a/app/playlists.py b/app/playlists.py index aba4521..43995ff 100644 --- a/app/playlists.py +++ b/app/playlists.py @@ -1727,10 +1727,25 @@ class PlaylistTab(QTableWidget): top. """ - if row is not None: - top_row = max(0, row - Config.SCROLL_TOP_MARGIN + 1) - scroll_item = self.item(top_row, 0) - self.scrollToItem(scroll_item, QAbstractItemView.PositionAtTop) + padding_required = Config.SCROLL_TOP_MARGIN + top_row = row + + if row > Config.SCROLL_TOP_MARGIN: + # We can't scroll to a hidden row. Calculate target_row as the + # one that is ideal to be at the top. Then count upwards from + # passed row until we either reach the target, pass it or reach + # row 0. + # target_row = max(0, row - Config.SCROLL_TOP_MARGIN + 1) + for i in range(row - 1, -1, -1): + if padding_required == 0: + break + if self.isRowHidden(i): + continue + top_row = i + padding_required -= 1 + + scroll_item = self.item(top_row, 0) + self.scrollToItem(scroll_item, QAbstractItemView.PositionAtTop) def _select_event(self) -> None: """ diff --git a/app/replace_files.py b/app/replace_files.py index f5bd6c7..13e94e8 100755 --- a/app/replace_files.py +++ b/app/replace_files.py @@ -87,6 +87,8 @@ def main(): for new_fname in os.listdir(source_dir): new_path = os.path.join(source_dir, new_fname) + if not os.path.isfile(new_path): + continue new_tags = get_tags(new_path) new_title = new_tags['title'] new_artist = new_tags['artist']