Fixed Rename and Delete
This commit is contained in:
parent
764363671c
commit
1bf9bfdb39
@ -134,7 +134,7 @@ class FileManager:
|
|||||||
return False
|
return False
|
||||||
|
|
||||||
def delete_file(self, relative_path):
|
def delete_file(self, relative_path):
|
||||||
file_path = (relative_path).resolve()
|
file_path = Path(relative_path).resolve()
|
||||||
|
|
||||||
if not str(file_path).startswith(str(self.base_path.resolve())):
|
if not str(file_path).startswith(str(self.base_path.resolve())):
|
||||||
st.error(f"Access denied: {relative_path}")
|
st.error(f"Access denied: {relative_path}")
|
||||||
|
|||||||
@ -12,6 +12,64 @@ LANG_MAP = {
|
|||||||
".json": "json", ".yaml": "yaml", ".yml": "yaml"
|
".json": "json", ".yaml": "yaml", ".yml": "yaml"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
# ── Modals ────────────────────────────────────────────────────────────────────
|
||||||
|
|
||||||
|
@st.dialog("Rename File")
|
||||||
|
def _rename_dialog(file_path: str):
|
||||||
|
fm = FileManager()
|
||||||
|
st.write(f"Current name: **{Path(file_path).name}**")
|
||||||
|
new_name = st.text_input("New name:", value=Path(file_path).stem)
|
||||||
|
|
||||||
|
col1, col2 = st.columns(2)
|
||||||
|
with col1:
|
||||||
|
if st.button("Confirm", type="primary", use_container_width=True):
|
||||||
|
if not new_name.strip():
|
||||||
|
st.warning("Please enter a name.")
|
||||||
|
elif "/" in new_name or "\\" in new_name:
|
||||||
|
st.warning("Name must not contain slashes.")
|
||||||
|
else:
|
||||||
|
if fm.rename_file(file_path, new_name.strip()):
|
||||||
|
ext = Path(file_path).suffix
|
||||||
|
new_file_path = str(Path(file_path).parent / (Path(new_name.strip()).stem + ext))
|
||||||
|
i = st.session_state.open_files.index(file_path)
|
||||||
|
st.session_state.open_files[i] = new_file_path
|
||||||
|
st.session_state.files_content[new_file_path] = \
|
||||||
|
st.session_state.files_content.pop(file_path)
|
||||||
|
if st.session_state.active_file == file_path:
|
||||||
|
st.session_state.active_file = new_file_path
|
||||||
|
st.rerun()
|
||||||
|
else:
|
||||||
|
st.error("Rename failed. Check that the file still exists.")
|
||||||
|
with col2:
|
||||||
|
if st.button("Cancel", use_container_width=True):
|
||||||
|
st.rerun()
|
||||||
|
|
||||||
|
|
||||||
|
@st.dialog("Delete File")
|
||||||
|
def _delete_dialog(file_path: str):
|
||||||
|
fm = FileManager()
|
||||||
|
st.warning(f"Delete **{Path(file_path).name}**? This cannot be undone.")
|
||||||
|
|
||||||
|
col1, col2 = st.columns(2)
|
||||||
|
with col1:
|
||||||
|
if st.button("Delete", type="primary", use_container_width=True):
|
||||||
|
if fm.delete_file(file_path):
|
||||||
|
st.session_state.open_files.remove(file_path)
|
||||||
|
st.session_state.files_content.pop(file_path, None)
|
||||||
|
if st.session_state.active_file == file_path:
|
||||||
|
st.session_state.active_file = (
|
||||||
|
st.session_state.open_files[0]
|
||||||
|
if st.session_state.open_files else None
|
||||||
|
)
|
||||||
|
st.rerun()
|
||||||
|
else:
|
||||||
|
st.error("Delete failed. Check that the file still exists.")
|
||||||
|
with col2:
|
||||||
|
if st.button("Cancel", use_container_width=True):
|
||||||
|
st.rerun()
|
||||||
|
|
||||||
|
|
||||||
def run_active_file():
|
def run_active_file():
|
||||||
active_file = st.session_state.active_file
|
active_file = st.session_state.active_file
|
||||||
|
|
||||||
@ -101,32 +159,11 @@ def render_editor():
|
|||||||
|
|
||||||
with cols[2]:
|
with cols[2]:
|
||||||
if st.button("Rename File", key=f"rename_{file_path}"):
|
if st.button("Rename File", key=f"rename_{file_path}"):
|
||||||
new_name = st.text_input("New File Name", key=f"new_name_{file_path}")
|
_rename_dialog(file_path)
|
||||||
if "/" in new_name or "\\" in new_name:
|
|
||||||
st.warning("Do not include slashes in names!")
|
|
||||||
elif new_name:
|
|
||||||
try:
|
|
||||||
fm.rename_file(file_path, new_name)
|
|
||||||
st.success(f"File renamed to '{new_name}' successfully!")
|
|
||||||
st.rerun()
|
|
||||||
except Exception as e:
|
|
||||||
st.error(f"Error renaming file: {e}")
|
|
||||||
|
|
||||||
with cols[3]:
|
with cols[3]:
|
||||||
if st.button("Delete File", key=f"delete_{file_path}"):
|
if st.button("Delete File", key=f"delete_{file_path}"):
|
||||||
try:
|
_delete_dialog(file_path)
|
||||||
fm.delete_file(file_path)
|
|
||||||
st.success(f"File '{Path(file_path).name}' deleted successfully!")
|
|
||||||
st.session_state.open_files.remove(file_path)
|
|
||||||
del st.session_state.files_content[file_path]
|
|
||||||
st.session_state.active_file = (
|
|
||||||
st.session_state.open_files[0]
|
|
||||||
if st.session_state.open_files
|
|
||||||
else None
|
|
||||||
)
|
|
||||||
st.rerun()
|
|
||||||
except Exception as e:
|
|
||||||
st.error(f"Error deleting file: {e}")
|
|
||||||
|
|
||||||
if st.button("▶ Run Code", key="run_code"):
|
if st.button("▶ Run Code", key="run_code"):
|
||||||
result = run_active_file()
|
result = run_active_file()
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user