- add_playlist() now adds the whole playlist instead of first 100 items
- added wipe_playlist endpoint to completely remove playlist from jellyplist and jellyfin
This commit is contained in:
@@ -1,7 +1,7 @@
|
|||||||
import time
|
import time
|
||||||
from flask import Flask, jsonify, render_template, request, redirect, url_for, session, flash
|
from flask import Flask, jsonify, render_template, request, redirect, url_for, session, flash
|
||||||
from sqlalchemy import insert
|
from sqlalchemy import insert
|
||||||
from app import app, db, jellyfin, functions, device_id
|
from app import app, db, jellyfin, functions, device_id,sp
|
||||||
from app.models import Playlist,Track, playlist_tracks
|
from app.models import Playlist,Track, playlist_tracks
|
||||||
|
|
||||||
|
|
||||||
@@ -76,9 +76,18 @@ def add_playlist():
|
|||||||
user = functions._get_logged_in_user()
|
user = functions._get_logged_in_user()
|
||||||
playlist.tracks_available = 0
|
playlist.tracks_available = 0
|
||||||
|
|
||||||
# Add tracks to the playlist with track order
|
spotify_tracks = {}
|
||||||
for idx, track_data in enumerate(playlist_data['tracks']['items']):
|
offset = 0
|
||||||
track_info = track_data['track']
|
while True:
|
||||||
|
playlist_items = sp.playlist_items(playlist.spotify_playlist_id, offset=offset, limit=100)
|
||||||
|
items = playlist_items['items']
|
||||||
|
spotify_tracks.update({offset + idx: track['track'] for idx, track in enumerate(items) if track['track']})
|
||||||
|
|
||||||
|
if len(items) < 100: # No more tracks to fetch
|
||||||
|
break
|
||||||
|
offset += 100 # Move to the next batch
|
||||||
|
for idx, track_data in spotify_tracks.items():
|
||||||
|
track_info = track_data
|
||||||
if not track_info:
|
if not track_info:
|
||||||
continue
|
continue
|
||||||
track = Track.query.filter_by(spotify_track_id=track_info['id']).first()
|
track = Track.query.filter_by(spotify_track_id=track_info['id']).first()
|
||||||
@@ -127,6 +136,7 @@ def add_playlist():
|
|||||||
|
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
flash(str(e))
|
flash(str(e))
|
||||||
|
return ''
|
||||||
|
|
||||||
|
|
||||||
@app.route('/delete_playlist/<playlist_id>', methods=['DELETE'])
|
@app.route('/delete_playlist/<playlist_id>', methods=['DELETE'])
|
||||||
@@ -154,7 +164,33 @@ def delete_playlist(playlist_id):
|
|||||||
flash(f'Failed to remove item: {str(e)}')
|
flash(f'Failed to remove item: {str(e)}')
|
||||||
|
|
||||||
|
|
||||||
|
@app.route('/wipe_playlist/<playlist_id>', methods=['DELETE'])
|
||||||
|
@functions.jellyfin_admin_required
|
||||||
|
def wipe_playlist(playlist_id):
|
||||||
|
playlist = Playlist.query.filter_by(jellyfin_id=playlist_id).first()
|
||||||
|
name = ""
|
||||||
|
id = ""
|
||||||
|
jf_id = ""
|
||||||
|
try:
|
||||||
|
jellyfin.remove_item(session_token=functions._get_api_token(), playlist_id=playlist_id)
|
||||||
|
except Exception as e:
|
||||||
|
flash(f"Jellyfin API Error: {str(e)}")
|
||||||
|
if playlist:
|
||||||
|
# Delete the playlist
|
||||||
|
name = playlist.name
|
||||||
|
id = playlist.spotify_playlist_id
|
||||||
|
jf_id = playlist.jellyfin_id
|
||||||
|
db.session.delete(playlist)
|
||||||
|
db.session.commit()
|
||||||
|
flash('Playlist Deleted', category='info')
|
||||||
|
item = {
|
||||||
|
"name" : name,
|
||||||
|
"id" : id,
|
||||||
|
"can_add":True,
|
||||||
|
"can_remove":False,
|
||||||
|
"jellyfin_id" : jf_id
|
||||||
|
}
|
||||||
|
return render_template('partials/_add_remove_button.html',item= item)
|
||||||
|
|
||||||
@functions.jellyfin_login_required
|
@functions.jellyfin_login_required
|
||||||
@app.route('/get_jellyfin_stream/<string:jellyfin_id>')
|
@app.route('/get_jellyfin_stream/<string:jellyfin_id>')
|
||||||
|
|||||||
Reference in New Issue
Block a user