vsj0702 commited on
Commit
1ab7509
Β·
verified Β·
1 Parent(s): c6c4170
Files changed (1) hide show
  1. code_editor.py +38 -32
code_editor.py CHANGED
@@ -31,44 +31,50 @@ def render_code_editor(ace_theme):
31
 
32
  # ── File Upload ─────────────────────────────
33
  uploaded_file = st.file_uploader("πŸ“€ Upload file", type=["py", "cpp", "c", "java", "js", "cs", "txt"])
34
-
35
- if "file_uploaded" not in st.session_state:
36
- st.session_state.file_uploaded = False
37
 
38
- if uploaded_file and not st.session_state.file_uploaded:
39
  if uploaded_file.size > 10 * 1024 * 1024:
40
  st.error("🚫 File too large. Max allowed is 10MB.")
41
  else:
42
- content = uploaded_file.read().decode("utf-8", errors="ignore")
43
- ext = Path(uploaded_file.name).suffix.lower()
44
- detected_lang = EXT_LANG_MAP.get(ext)
45
-
46
- if detected_lang:
47
- st.session_state.language = detected_lang
48
- st.toast(f"βœ… Auto-switched to {detected_lang}", icon="πŸ”„")
49
- elif ext == ".txt":
50
- st.toast("πŸ“„ Loaded text file", icon="πŸ“„")
51
- else:
52
- st.error("❌ Unsupported file format.")
53
- return
54
-
55
- st.session_state.code = content
56
- st.session_state.file_uploaded = True
57
- st.rerun()
 
 
 
 
 
 
 
 
 
58
 
59
  # ── Reset Language if Needed ─────────────────
60
- selected_lang = st.session_state.language
61
- default_code = DEFAULT_SNIPPETS[selected_lang]
62
- previous_lang = st.session_state.get("prev_language")
63
-
64
- if (
65
- st.session_state.get("code") is None
66
- or st.session_state.code.strip() == ""
67
- or selected_lang != previous_lang
68
- or st.session_state.code.strip() == DEFAULT_SNIPPETS.get(previous_lang, "")
69
- ):
70
- st.session_state.code = default_code
71
- st.session_state.prev_language = selected_lang
72
 
73
  # ── Code Editor ─────────────────────────────
74
  code = st_ace.st_ace(
 
31
 
32
  # ── File Upload ─────────────────────────────
33
  uploaded_file = st.file_uploader("πŸ“€ Upload file", type=["py", "cpp", "c", "java", "js", "cs", "txt"])
 
 
 
34
 
35
+ if uploaded_file:
36
  if uploaded_file.size > 10 * 1024 * 1024:
37
  st.error("🚫 File too large. Max allowed is 10MB.")
38
  else:
39
+ file_content = uploaded_file.read().decode("utf-8", errors="ignore")
40
+ filename = uploaded_file.name
41
+
42
+ # Detect change: file name or content changed
43
+ prev_name = st.session_state.get("uploaded_file_name")
44
+ prev_content = st.session_state.get("uploaded_file_content")
45
+
46
+ if file_content != prev_content or filename != prev_name:
47
+ ext = Path(filename).suffix.lower()
48
+ detected_lang = EXT_LANG_MAP.get(ext)
49
+
50
+ st.session_state.uploaded_file_name = filename
51
+ st.session_state.uploaded_file_content = file_content
52
+
53
+ if detected_lang:
54
+ st.session_state.language = detected_lang
55
+ st.session_state.prev_language = detected_lang
56
+ st.session_state.code = file_content
57
+ st.toast(f"βœ… Auto-switched to {detected_lang}", icon="πŸ”„")
58
+ st.rerun()
59
+ elif ext == ".txt":
60
+ st.session_state.code = file_content
61
+ st.toast("πŸ“„ Loaded text file", icon="πŸ“„")
62
+ else:
63
+ st.error("❌ Unsupported file format.")
64
 
65
  # ── Reset Language if Needed ─────────────────
66
+ selected_lang = st.session_state.language
67
+ default_code = DEFAULT_SNIPPETS[selected_lang]
68
+ previous_lang = st.session_state.get("prev_language")
69
+
70
+ if (
71
+ st.session_state.get("code") is None
72
+ or st.session_state.code.strip() == ""
73
+ or selected_lang != previous_lang
74
+ or st.session_state.code.strip() == DEFAULT_SNIPPETS.get(previous_lang, "")
75
+ ):
76
+ st.session_state.code = default_code
77
+ st.session_state.prev_language = selected_lang
78
 
79
  # ── Code Editor ─────────────────────────────
80
  code = st_ace.st_ace(