checked for updates

This commit is contained in:
2025-07-16 11:19:31 +03:00
parent c36ba9dc64
commit 94fad22d85
12 changed files with 1303 additions and 354 deletions

View File

@@ -142,6 +142,71 @@ def health_check():
'version': '2.0.0'
})
@bp.route('/content/<int:content_id>/remove-from-player', methods=['POST'])
def remove_content_from_player(content_id):
"""Remove content from a specific player"""
from flask_login import login_required, current_user
# Require authentication for this operation
if not current_user.is_authenticated:
return jsonify({'error': 'Authentication required'}), 401
data = request.get_json()
if not data or 'player_id' not in data:
return jsonify({'error': 'Player ID required'}), 400
player_id = data.get('player_id')
# Find the content item
content = Content.query.filter_by(id=content_id, player_id=player_id).first()
if not content:
return jsonify({'error': 'Content not found for this player'}), 404
# Remove the content
try:
db.session.delete(content)
db.session.commit()
return jsonify({
'success': True,
'message': f'Content {content.file_name} removed from player'
})
except Exception as e:
db.session.rollback()
return jsonify({'error': f'Failed to remove content: {str(e)}'}), 500
@bp.route('/player/<int:player_id>/heartbeat', methods=['POST'])
def player_heartbeat(player_id):
"""Update player heartbeat/last seen timestamp"""
try:
player = Player.query.get_or_404(player_id)
player.last_seen = db.func.current_timestamp()
db.session.commit()
return jsonify({
'success': True,
'timestamp': player.last_seen.isoformat() if player.last_seen else None
})
except Exception as e:
db.session.rollback()
return jsonify({'error': f'Failed to update heartbeat: {str(e)}'}), 500
@bp.route('/player/<int:player_id>/content', methods=['GET'])
def get_player_content_status(player_id):
"""Get player content status for checking updates"""
try:
player = Player.query.get_or_404(player_id)
content_count = Content.query.filter_by(player_id=player_id).count()
return jsonify({
'player_id': player_id,
'playlist_version': player.playlist_version,
'content_count': content_count,
'updated': False # Could implement version checking logic here
})
except Exception as e:
return jsonify({'error': f'Failed to get content status: {str(e)}'}), 500
@bp.errorhandler(404)
def api_not_found(error):
"""API 404 handler"""

View File

@@ -72,12 +72,16 @@ def upload():
players = Player.query.order_by(Player.username).all()
groups = Group.query.order_by(Group.name).all()
# Convert players and groups to dictionaries for JSON serialization
players_data = [{'id': p.id, 'username': p.username, 'hostname': p.hostname} for p in players]
groups_data = [{'id': g.id, 'name': g.name, 'description': g.description, 'player_count': len(g.players)} for g in groups]
return render_template(
'content/upload.html',
target_type=target_type,
target_id=target_id,
players=players,
groups=groups,
players=players_data,
groups=groups_data,
return_url=return_url
)

View File

@@ -18,6 +18,10 @@ def index():
players = Player.query.order_by(Player.username).all()
groups = Group.query.order_by(Group.name).all()
# Calculate statistics
total_content = sum(len(player.content) for player in players)
active_players = sum(1 for player in players if player.is_active)
# Check if logo exists
from flask import current_app
logo_path = os.path.join(current_app.static_folder, 'assets', 'logo.png')
@@ -31,5 +35,7 @@ def index():
players=players,
groups=groups,
logo_exists=logo_exists,
server_logs=server_logs
server_logs=server_logs,
total_content=total_content,
active_players=active_players
)