diff --git a/app/models.py b/app/models.py index ead38dc..12d76db 100644 --- a/app/models.py +++ b/app/models.py @@ -32,6 +32,7 @@ class Playlist(db.Model): jellyfin_id = db.Column(db.String(120), nullable=True) last_updated = db.Column(db.DateTime ) last_changed = db.Column(db.DateTime ) + snapshot_id = db.Column(db.String(120), nullable=True) # Many-to-Many relationship with JellyfinUser users = db.relationship('JellyfinUser', secondary=user_playlists, back_populates='playlists') diff --git a/app/tasks.py b/app/tasks.py index 3dc6071..aac9554 100644 --- a/app/tasks.py +++ b/app/tasks.py @@ -203,14 +203,20 @@ def check_for_playlist_updates(self): processed_playlists = 0 for playlist in playlists: - app.logger.info(f'Checking updates for playlist: {playlist.name}') playlist.last_updated = datetime.now( timezone.utc) + sp_playlist = sp.playlist(playlist.spotify_playlist_id) + + app.logger.info(f'Checking updates for playlist: {playlist.name}, s_snapshot = {sp_playlist['snapshot_id']}') db.session.commit() + if sp_playlist['snapshot_id'] == playlist.snapshot_id: + app.logger.info(f'playlist: {playlist.name} , no changes detected, snapshot_id {sp_playlist['snapshot_id']}') + continue try: #region Check for updates # Fetch all playlist data from Spotify spotify_tracks = {} offset = 0 + playlist.snapshot_id = sp_playlist['snapshot_id'] while True: playlist_data = sp.playlist_items(playlist.spotify_playlist_id, offset=offset, limit=100) items = playlist_data['items'] @@ -267,7 +273,7 @@ def check_for_playlist_updates(self): #endregion #region Update Playlist Items and Metadata - functions.update_playlist_metadata(playlist, sp.playlist(playlist.spotify_playlist_id)) + functions.update_playlist_metadata(playlist, sp_playlist) ordered_tracks = db.session.execute( db.select(Track, playlist_tracks.c.track_order) .join(playlist_tracks, playlist_tracks.c.track_id == Track.id) diff --git a/migrations/versions/d4fef99d5d3c_add_snapshot_id.py b/migrations/versions/d4fef99d5d3c_add_snapshot_id.py new file mode 100644 index 0000000..a2540d8 --- /dev/null +++ b/migrations/versions/d4fef99d5d3c_add_snapshot_id.py @@ -0,0 +1,32 @@ +"""Add snapshot_id + +Revision ID: d4fef99d5d3c +Revises: 8fcd403f0c45 +Create Date: 2024-11-22 13:00:05.192423 + +""" +from alembic import op +import sqlalchemy as sa + + +# revision identifiers, used by Alembic. +revision = 'd4fef99d5d3c' +down_revision = '8fcd403f0c45' +branch_labels = None +depends_on = None + + +def upgrade(): + # ### commands auto generated by Alembic - please adjust! ### + with op.batch_alter_table('playlist', schema=None) as batch_op: + batch_op.add_column(sa.Column('snapshot_id', sa.String(length=120), nullable=True)) + + # ### end Alembic commands ### + + +def downgrade(): + # ### commands auto generated by Alembic - please adjust! ### + with op.batch_alter_table('playlist', schema=None) as batch_op: + batch_op.drop_column('snapshot_id') + + # ### end Alembic commands ###