# myapp/views/vscode.py import os, uuid, json from flask import Blueprint, current_app, session, redirect, url_for, render_template, request, jsonify from ..services.backboard_service import realtime_response bp = Blueprint("vscode", __name__) @bp.route("/desktop////") def desktop(user_uuid, course_id, chapter_name, lesson_name): username2uuid = current_app.extensions["username2uuid"] uuid2username = current_app.extensions["uuid2username"] userid_recorder = current_app.extensions["userid_recorder"] # session 中放 uuid(访客也能进则给一个) if "user_uuid" not in session: user_uuid = "user_" + str(uuid.uuid4()) session["user_uuid"] = user_uuid uuid2username[user_uuid] = "guest"+str(uuid.uuid4()) username2uuid[uuid2username[user_uuid]] = user_uuid # 全局映射 user_id = uuid2username[user_uuid] userid_recorder[f"{user_id}&{course_id}"] = session["user_uuid"] # 按课程/章节创建工作目录 base_root = current_app.config["STUDENT_WORKSPACE_ROOT"] path_dir = os.path.join(base_root, user_id, course_id, chapter_name) os.makedirs(path_dir, exist_ok=True) # 写 .config(并按需要转换为 WSL 路径) cfg = current_app.config["VSCODE_WEB_PATH"] path_for_vscode = path_dir if cfg.get("is_wsl"): path_for_vscode = path_for_vscode.replace("\\", "/") \ .replace(cfg.get("windows_path", ""), cfg.get("wsl_path", "")) config_path = os.path.join(path_dir, ".config") tmpd = { "user_uuid": session["user_uuid"], "course_id": course_id, "chapter_name": chapter_name, "lesson_name": lesson_name, "path": path_for_vscode } with open(config_path, "w", encoding="utf-8") as f: json.dump(tmpd, f, ensure_ascii=False) current_app.logger.debug("config file path: %s", config_path) return render_template( "desktop.html", vscode_web_url=current_app.config["VSCODE_WEB_URL"], user_uuid=session["user_uuid"], course_id=course_id, chapter_name=chapter_name, lesson_name=lesson_name, workspace_path=path_for_vscode, ) @bp.route("/desktop_nouser///") def desktop_nouser(course_id, chapter_name, lesson_name): if "user_uuid" not in session: return redirect(url_for("auth.login")) # 如果你有 auth 蓝图 user_uuid = session["user_uuid"] return redirect(url_for("vscode.desktop", user_uuid=user_uuid, course_id=course_id, chapter_name=chapter_name, lesson_name=lesson_name)) @bp.route("/vscode_data", methods=["POST"]) def vscode_data(): # data = request.get_json(force=True) # config = data.get("config") or {} # realtime_response(config, data) # 调用服务层逻辑 # return jsonify({"status": "success", "received": data}) return jsonify({"status": "success", "received": "success"})