diff --git a/app/models.py b/app/models.py index 94de36f..768f792 100644 --- a/app/models.py +++ b/app/models.py @@ -30,7 +30,10 @@ from sqlalchemy.orm import ( relationship, ) from sqlalchemy.orm.exc import ( - NoResultFound + NoResultFound, +) +from sqlalchemy.exc import ( + IntegrityError, ) from config import Config from helpers import ( @@ -653,8 +656,16 @@ class Tracks(Base): self.mtime = mtime self.lastplayed = lastplayed - session.add(self) - session.commit() + try: + session.add(self) + session.commit() + except IntegrityError as error: + session.rollback() + log.error( + f"Error importing track ({title=}, " + f"{title=}, {artist=}, {path=}, {error=})" + ) + raise ValueError @classmethod def get_all(cls, session) -> List["Tracks"]: diff --git a/app/musicmuster.py b/app/musicmuster.py index 6e4f0d0..ecb2359 100755 --- a/app/musicmuster.py +++ b/app/musicmuster.py @@ -845,7 +845,11 @@ class Window(QMainWindow, Ui_MainWindow): with Session() as session: for (fname, tags) in tracks: - track = Tracks(session, fname) + try: + track = Tracks(session, fname) + except ValueError: + # Error adding track to database + continue helpers.set_track_metadata(session, track) helpers.normalise_track(track.path) self.visible_playlist_tab().insert_track(session, track) diff --git a/app/playlists.py b/app/playlists.py index 671d241..4ecfa50 100644 --- a/app/playlists.py +++ b/app/playlists.py @@ -132,7 +132,7 @@ class PlaylistTab(QTableWidget): ROW_DURATION = Qt.UserRole + 2 PLAYLISTROW_ID = Qt.UserRole + 3 - def __init__(self, musicmuster: Window, + def __init__(self, musicmuster: "Window", session: scoped_session, playlist_id: int, *args, **kwargs) -> None: super().__init__(*args, **kwargs)