forked from computertech/techdj
Improve downloading with yt-dlp fallback and fix listener streaming
This commit is contained in:
54
server.py
54
server.py
@@ -14,7 +14,8 @@ import downloader
|
||||
broadcast_state = {
|
||||
'active': False
|
||||
}
|
||||
listener_count = 0
|
||||
listener_sids = set()
|
||||
dj_sids = set()
|
||||
MUSIC_FOLDER = "music"
|
||||
# Ensure music folder exists
|
||||
if not os.path.exists(MUSIC_FOLDER):
|
||||
@@ -36,7 +37,7 @@ def setup_shared_routes(app):
|
||||
|
||||
@app.route('/download', methods=['POST'])
|
||||
def download():
|
||||
data = request.json
|
||||
data = request.get_json(silent=True) or {}
|
||||
url = data.get('url')
|
||||
quality = data.get('quality', '320')
|
||||
if not url:
|
||||
@@ -155,15 +156,12 @@ dj_socketio = SocketIO(
|
||||
@dj_socketio.on('connect')
|
||||
def dj_connect():
|
||||
print(f"🎧 DJ connected: {request.sid}")
|
||||
session['is_dj'] = True
|
||||
dj_sids.add(request.sid)
|
||||
|
||||
@dj_socketio.on('disconnect')
|
||||
def dj_disconnect():
|
||||
if session.get('is_dj'):
|
||||
print("⚠️ DJ disconnected - broadcast will continue until manually stopped")
|
||||
session['is_dj'] = False
|
||||
# Don't stop streaming_active - let it continue
|
||||
# Broadcast will resume when DJ reconnects
|
||||
dj_sids.discard(request.sid)
|
||||
print("⚠️ DJ disconnected - broadcast will continue until manually stopped")
|
||||
|
||||
def stop_broadcast_after_timeout():
|
||||
"""No longer used - broadcasts don't auto-stop"""
|
||||
@@ -193,7 +191,7 @@ def dj_audio(data):
|
||||
if broadcast_state['active']:
|
||||
listener_socketio.emit('audio_data', data, namespace='/')
|
||||
|
||||
# === LISTENER SERVER (Port 6000) ===
|
||||
# === LISTENER SERVER (Port 5001) ===
|
||||
listener_app = Flask(__name__, static_folder='.', static_url_path='')
|
||||
listener_app.config['SECRET_KEY'] = 'listener_secret'
|
||||
setup_shared_routes(listener_app)
|
||||
@@ -214,39 +212,27 @@ def listener_connect():
|
||||
|
||||
@listener_socketio.on('disconnect')
|
||||
def listener_disconnect():
|
||||
global listener_count
|
||||
if session.get('is_listener'):
|
||||
# Clear session flag FIRST to prevent re-entry issues
|
||||
session['is_listener'] = False
|
||||
listener_count = max(0, listener_count - 1)
|
||||
print(f"❌ Listener left. Total: {listener_count}")
|
||||
# Broadcast to all listeners
|
||||
listener_socketio.emit('listener_count', {'count': listener_count}, namespace='/')
|
||||
# Broadcast to all DJs
|
||||
dj_socketio.emit('listener_count', {'count': listener_count}, namespace='/')
|
||||
if request.sid in listener_sids:
|
||||
listener_sids.discard(request.sid)
|
||||
count = len(listener_sids)
|
||||
print(f"❌ Listener left. Total: {count}")
|
||||
listener_socketio.emit('listener_count', {'count': count}, namespace='/')
|
||||
dj_socketio.emit('listener_count', {'count': count}, namespace='/')
|
||||
|
||||
@listener_socketio.on('join_listener')
|
||||
def listener_join():
|
||||
global listener_count
|
||||
if not session.get('is_listener'):
|
||||
session['is_listener'] = True
|
||||
listener_count += 1
|
||||
print(f"👂 New listener joined. Total: {listener_count}")
|
||||
# Broadcast to all listeners
|
||||
listener_socketio.emit('listener_count', {'count': listener_count}, namespace='/')
|
||||
# Broadcast to all DJs
|
||||
dj_socketio.emit('listener_count', {'count': listener_count}, namespace='/')
|
||||
if request.sid not in listener_sids:
|
||||
listener_sids.add(request.sid)
|
||||
count = len(listener_sids)
|
||||
print(f"👂 New listener joined. Total: {count}")
|
||||
listener_socketio.emit('listener_count', {'count': count}, namespace='/')
|
||||
dj_socketio.emit('listener_count', {'count': count}, namespace='/')
|
||||
|
||||
emit('stream_status', {'active': broadcast_state['active']})
|
||||
|
||||
@listener_socketio.on('request_header')
|
||||
def handle_request_header():
|
||||
# Header logic removed for local relay mode
|
||||
pass
|
||||
|
||||
@listener_socketio.on('get_listener_count')
|
||||
def listener_get_count():
|
||||
emit('listener_count', {'count': listener_count})
|
||||
emit('listener_count', {'count': len(listener_sids)})
|
||||
|
||||
# DJ Panel Routes (No engine commands needed in local mode)
|
||||
@dj_socketio.on('get_mixer_status')
|
||||
|
||||
Reference in New Issue
Block a user