added 'snapshot_id' to decide whether process a playlist or not

This commit is contained in:
Kamil
2024-11-22 19:29:49 +00:00
parent 752a4d412b
commit 2217168e9f
3 changed files with 41 additions and 2 deletions

View File

@@ -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')

View File

@@ -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)

View File

@@ -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 ###