Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion app/app.py
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ def create_app():
browser_service.check_chrome_installation()

# Initialize and register routes (pass config to browser routes for test endpoint)
browser_bp = init_browser_routes(browser_service, download_service, config)
browser_bp = init_browser_routes(browser_service, download_service, config, scheduler)
download_bp = init_download_routes(download_service, config.DOWNLOAD_DIR, scheduler)
scheduler_bp = init_scheduler_routes(scheduler)
events_bp = init_events_routes(browser_service, download_service)
Expand Down
15 changes: 14 additions & 1 deletion app/routes/browser_routes.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@
browser_bp = Blueprint('browser', __name__, url_prefix='/api/browser')


def init_browser_routes(browser_service, download_service, config):
def init_browser_routes(browser_service, download_service, config, scheduler=None):
"""Initialize browser routes with services"""

@browser_bp.route('/start', methods=['POST'])
Expand All @@ -34,6 +34,12 @@ def start_browser():
# Generate browser ID
browser_id = f"browser_{int(time.time())}"

# Block scheduled checks BEFORE starting so the browser service
# queue processor drops in-flight scheduled launches immediately
if scheduler:
scheduler.pause_all_for_manual(browser_id)
browser_service.set_manual_active(True)

# Start browser
success, detector = browser_service.start_browser(
url, browser_id, resolution, framerate, auto_download, filename, output_format
Expand All @@ -47,6 +53,10 @@ def start_browser():
'vnc_url': f'/vnc'
})
else:
# Roll back manual lock on failure
if scheduler:
scheduler.resume_after_manual(browser_id)
browser_service.set_manual_active(False)
return jsonify({'error': 'Failed to start browser'}), 500

except Exception as e:
Expand Down Expand Up @@ -86,6 +96,9 @@ def close_browser(browser_id):
"""Close browser manually"""
try:
if browser_service.close_browser(browser_id):
browser_service.set_manual_active(False)
if scheduler:
scheduler.resume_after_manual(browser_id)
return jsonify({'success': True, 'message': 'Browser closed'})
else:
return jsonify({'error': 'Browser not found'}), 404
Expand Down
22 changes: 16 additions & 6 deletions app/routes/download_routes.py
Original file line number Diff line number Diff line change
Expand Up @@ -144,9 +144,16 @@ def download_direct():
default_filename = f"{timestamp_str}.mp4"
filename = data.get('filename', default_filename)

browser_id = f"direct_{timestamp}"

# Block scheduled checks before starting the download
if scheduler:
scheduler.pause_all_for_manual(browser_id)
scheduler.browser_service.set_manual_active(True)

# Start download
browser_id, output_path = download_service.start_direct_download(
f"direct_{timestamp}",
_, output_path = download_service.start_direct_download(
browser_id,
stream_url,
filename
)
Expand Down Expand Up @@ -241,10 +248,13 @@ def stop_download(browser_id):
"""Stop an active download"""
try:
if download_service.stop_download(browser_id):
# If this is a scheduled download, move it to the next time slot
if scheduler and browser_id.startswith('sched_'):
scheduler.move_to_next_slot(browser_id)
logger.info(f"Moved scheduled download {browser_id} to next time slot")
if scheduler:
if browser_id.startswith('sched_'):
scheduler.move_to_next_slot(browser_id)
logger.info(f"Moved scheduled download {browser_id} to next time slot")
else:
scheduler.browser_service.set_manual_active(False)
scheduler.resume_after_manual(browser_id)

return jsonify({'success': True, 'message': 'Download stopped'})
else:
Expand Down
6 changes: 4 additions & 2 deletions app/routes/scheduler_routes.py
Original file line number Diff line number Diff line change
Expand Up @@ -32,11 +32,12 @@ def add_schedule():
resolution = data.get('resolution', '1080p')
framerate = data.get('framerate', 'any')
format = data.get('format', 'mp4')
timezone = data.get('timezone')

if not all([url, start_time, end_time]):
return jsonify({'error': 'Missing required fields'}), 400

schedule = scheduler.add_schedule(url, start_time, end_time, repeat, daily, name, resolution, framerate, format)
schedule = scheduler.add_schedule(url, start_time, end_time, repeat, daily, name, resolution, framerate, format, timezone)

return jsonify({
'success': True,
Expand Down Expand Up @@ -74,13 +75,14 @@ def update_schedule(schedule_id):
resolution = data.get('resolution', '1080p')
framerate = data.get('framerate', 'any')
format = data.get('format', 'mp4')
timezone = data.get('timezone')

if not all([url, start_time, end_time]):
return jsonify({'error': 'Missing required fields'}), 400

updated = scheduler.update_schedule(
schedule_id, url, start_time, end_time,
repeat, daily, name, resolution, framerate, format
repeat, daily, name, resolution, framerate, format, timezone
)

if updated:
Expand Down
Loading
Loading