Report-Generator / camera_routes.py
t
style: add smooth animations and byte-accurate progress bar
c3812ef
from flask import Blueprint, render_template, request, jsonify, current_app
from flask_login import login_required, current_user
from werkzeug.utils import secure_filename
from database import get_db_connection
import os
import uuid
camera_bp = Blueprint('camera', __name__)
@camera_bp.route('/camera_web')
@login_required
def camera_web():
return render_template('camera_web.html')
@camera_bp.route('/camera_mobile')
@login_required
def camera_mobile():
# camera_id can be used to select specific camera if needed, defaulting to back camera
return render_template('camera_mobile.html')
@camera_bp.route('/camera/upload_captured_image', methods=['POST'])
@login_required
def upload_captured_image():
if 'image' not in request.files:
return jsonify({'error': 'No image file provided'}), 400
file = request.files['image']
if file.filename == '':
return jsonify({'error': 'No selected file'}), 400
if file:
session_id = str(uuid.uuid4())
original_filename = secure_filename(file.filename) or f"captured_image_{session_id}.png"
# Save to UPLOAD_FOLDER or TEMP_FOLDER
# For captured images, TEMP_FOLDER is suitable, then processed further
save_path = os.path.join(os.getcwd(), 'tmp', original_filename) # Using tmp folder relative to CWD
file.save(save_path)
conn = get_db_connection()
try:
conn.execute(
'INSERT INTO sessions (id, original_filename, name, user_id, session_type) VALUES (?, ?, ?, ?, ?)',
(session_id, original_filename, original_filename, current_user.id, 'image_capture')
)
# Insert the image into the images table
conn.execute(
'INSERT INTO images (session_id, image_index, filename, original_name, image_type) VALUES (?, ?, ?, ?, ?)',
(session_id, 0, original_filename, original_filename, 'original')
)
conn.commit()
except Exception as e:
conn.rollback()
return jsonify({'error': f'Database error: {str(e)}'}), 500
finally:
conn.close()
return jsonify({'success': True, 'session_id': session_id, 'filename': original_filename})
return jsonify({'error': 'Image capture failed'}), 500
def init_socketio_handlers(socketio):
"""Initialize socketio event handlers. Called after app is created to avoid circular imports."""
from flask_socketio import emit, join_room
@socketio.on('join')
def handle_join(data):
room = data.get('room', 'stream_room')
join_room(room)
print(f"Client joined room: {room}")
emit('user_joined', {'message': 'A user has joined'}, room=room)
@socketio.on('offer')
def handle_offer(data):
room = data.get('room', 'stream_room')
print("Received offer")
emit('offer', data['offer'], room=room, include_self=False)
@socketio.on('answer')
def handle_answer(data):
room = data.get('room', 'stream_room')
print("Received answer")
emit('answer', data['answer'], room=room, include_self=False)
@socketio.on('candidate')
def handle_candidate(data):
room = data.get('room', 'stream_room')
print("Received candidate")
emit('candidate', data['candidate'], room=room, include_self=False)
@socketio.on('remote_capture')
def handle_remote_capture(data):
room = data.get('room', 'stream_room')
print("Received remote capture request")
emit('trigger_capture', {}, room=room, include_self=False)