mirror of
https://github.com/EFForg/rayhunter.git
synced 2026-06-14 00:23:34 -07:00
Add delete all recordings button to web ui
This commit is contained in:
committed by
Will Greenberg
parent
326d4106bd
commit
c47be1074b
+2
-1
@@ -20,7 +20,7 @@ use crate::framebuffer::Framebuffer;
|
||||
|
||||
use analysis::{get_analysis_status, run_analysis_thread, start_analysis, AnalysisCtrlMessage, AnalysisStatus};
|
||||
use axum::response::Redirect;
|
||||
use diag::{delete_recording, get_analysis_report, start_recording, stop_recording, DiagDeviceCtrlMessage};
|
||||
use diag::{delete_all_recordings, delete_recording, get_analysis_report, start_recording, stop_recording, DiagDeviceCtrlMessage};
|
||||
use log::{info, error};
|
||||
use qmdl_store::RecordingStoreError;
|
||||
use rayhunter::diag_device::DiagDevice;
|
||||
@@ -57,6 +57,7 @@ async fn run_server(
|
||||
.route("/api/start-recording", post(start_recording))
|
||||
.route("/api/stop-recording", post(stop_recording))
|
||||
.route("/api/delete-recording/*name", post(delete_recording))
|
||||
.route("/api/delete-all-recordings", post(delete_all_recordings))
|
||||
.route("/api/analysis-report/*name", get(get_analysis_report))
|
||||
.route("/api/analysis", get(get_analysis_status))
|
||||
.route("/api/analysis/*name", post(start_analysis))
|
||||
|
||||
@@ -175,6 +175,20 @@ pub async fn delete_recording(
|
||||
Ok((StatusCode::ACCEPTED, "ok".to_string()))
|
||||
}
|
||||
|
||||
pub async fn delete_all_recordings(State(state): State<Arc<ServerState>>) -> Result<(StatusCode, String), (StatusCode, String)> {
|
||||
if state.debug_mode {
|
||||
return Err((StatusCode::FORBIDDEN, "server is in debug mode".to_string()));
|
||||
}
|
||||
let mut qmdl_store = state.qmdl_store_lock.write().await;
|
||||
qmdl_store.delete_all_entries().await
|
||||
.map_err(|e| (StatusCode::INTERNAL_SERVER_ERROR, format!("couldn't delete all recordings: {}", e)))?;
|
||||
state.diag_device_ctrl_sender.send(DiagDeviceCtrlMessage::StopRecording).await
|
||||
.map_err(|e| (StatusCode::INTERNAL_SERVER_ERROR, format!("couldn't send stop recording message: {}", e)))?;
|
||||
state.ui_update_sender.send(framebuffer::DisplayState::Paused).await
|
||||
.map_err(|e| (StatusCode::INTERNAL_SERVER_ERROR, format!("couldn't send ui update message: {}", e)))?;
|
||||
Ok((StatusCode::ACCEPTED, "ok".to_string()))
|
||||
}
|
||||
|
||||
pub async fn get_analysis_report(State(state): State<Arc<ServerState>>, Path(qmdl_name): Path<String>) -> Result<Response, (StatusCode, String)> {
|
||||
let qmdl_store = state.qmdl_store_lock.read().await;
|
||||
let (entry_index, _) = if qmdl_name == "live" {
|
||||
|
||||
@@ -298,6 +298,23 @@ impl RecordingStore {
|
||||
.map_err(RecordingStoreError::DeleteFileError)?;
|
||||
Ok(entry_to_delete)
|
||||
}
|
||||
|
||||
pub async fn delete_all_entries(&mut self) -> Result<(), RecordingStoreError> {
|
||||
self.close_current_entry().await?;
|
||||
for entry in &self.manifest.entries {
|
||||
let qmdl_filepath = entry.get_qmdl_filepath(&self.path);
|
||||
let analysis_filepath = entry.get_analysis_filepath(&self.path);
|
||||
tokio::fs::remove_file(qmdl_filepath)
|
||||
.await
|
||||
.map_err(RecordingStoreError::DeleteFileError)?;
|
||||
tokio::fs::remove_file(analysis_filepath)
|
||||
.await
|
||||
.map_err(RecordingStoreError::DeleteFileError)?;
|
||||
}
|
||||
self.manifest.entries.drain(..);
|
||||
self.write_manifest().await?;
|
||||
Ok(())
|
||||
}
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
|
||||
@@ -18,6 +18,7 @@
|
||||
<div>
|
||||
<button onclick="startRecording()">Start Recording</button>
|
||||
<button onclick="stopRecording()">Stop Recording</button>
|
||||
<button onclick="deleteAllRecodings()">Delete All Recordings</button>
|
||||
</div>
|
||||
<table id="qmdl-manifest-table">
|
||||
<thead>
|
||||
|
||||
@@ -215,6 +215,13 @@ async function stopRecording() {
|
||||
populateDivs();
|
||||
}
|
||||
|
||||
async function deleteAllRecodings() {
|
||||
if (window.confirm("Are you sure you want to permanently delete all of your recordings?")) {
|
||||
await req('POST', '/api/delete-all-recordings');
|
||||
populateDivs();
|
||||
}
|
||||
}
|
||||
|
||||
async function req(method, url) {
|
||||
const response = await fetch(url, {
|
||||
method: method,
|
||||
|
||||
Reference in New Issue
Block a user