From 1559f03eedbeed8d15f3e1703bd3bbc3d01555e2 Mon Sep 17 00:00:00 2001 From: Valentin Haudiquet Date: Fri, 27 Mar 2026 23:24:01 +0100 Subject: [PATCH] add video file name in json metadata --- record-daemon/src/timeline/mod.rs | 4 ++++ record-daemon/src/timeline/store.rs | 9 +++++++++ tauri-app/src/components/GameReview.vue | 20 +------------------- tauri-app/src/types/timeline.ts | 2 ++ 4 files changed, 16 insertions(+), 19 deletions(-) diff --git a/record-daemon/src/timeline/mod.rs b/record-daemon/src/timeline/mod.rs index 9c44479..af1714f 100644 --- a/record-daemon/src/timeline/mod.rs +++ b/record-daemon/src/timeline/mod.rs @@ -47,6 +47,9 @@ pub struct Timeline { /// Raw end-of-game stats from `/lol-end-of-game/v1/eog-stats-block`. #[serde(default)] pub raw_end_game_stats: Option, + /// Video file name (just the filename, not the full path). + #[serde(default)] + pub video_file: Option, } impl Timeline { @@ -72,6 +75,7 @@ impl Timeline { raw_rune_page: None, raw_live_client_data: None, raw_end_game_stats: None, + video_file: None, } } diff --git a/record-daemon/src/timeline/store.rs b/record-daemon/src/timeline/store.rs index cdcc2ad..6cc66c6 100644 --- a/record-daemon/src/timeline/store.rs +++ b/record-daemon/src/timeline/store.rs @@ -71,6 +71,8 @@ pub struct RecordingMetadata { pub duration: Duration, /// Output file path. pub file_path: Option, + /// Video file name (just the filename, not the full path). + pub video_file: Option, /// File size in bytes. pub file_size: Option, /// Number of events. @@ -107,6 +109,7 @@ impl RecordingMetadata { end_time: Some(result.end_time), duration: result.duration, file_path: Some(result.path.clone()), + video_file: result.path.file_name().and_then(|n| n.to_str()).map(String::from), file_size: result.file_size(), event_count: 0, finalized: false, @@ -164,6 +167,7 @@ impl TimelineStore { end_time: None, duration: Duration::zero(), file_path: None, + video_file: None, file_size: None, event_count: 0, finalized: false, @@ -215,6 +219,7 @@ impl TimelineStore { end_time: Some(result.end_time), duration: result.duration, file_path: Some(result.path.clone()), + video_file: result.path.file_name().and_then(|n| n.to_str()).map(String::from), file_size: result.file_size(), event_count: 0, finalized: true, @@ -318,6 +323,7 @@ impl TimelineStore { raw_rune_page: metadata.raw_rune_page.clone(), raw_live_client_data: metadata.raw_live_client_data.clone(), raw_end_game_stats: metadata.raw_end_game_stats.clone(), + video_file: metadata.video_file.clone(), }) } @@ -361,6 +367,7 @@ impl TimelineStore { raw_rune_page: metadata.raw_rune_page, raw_live_client_data: metadata.raw_live_client_data, raw_end_game_stats: metadata.raw_end_game_stats, + video_file: metadata.video_file, }; let file_path = self.storage_dir.join(format!("{}.json", id)); @@ -396,6 +403,7 @@ impl TimelineStore { let raw_rune_page = timeline.raw_rune_page; let raw_live_client_data = timeline.raw_live_client_data; let raw_end_game_stats = timeline.raw_end_game_stats; + let video_file = timeline.video_file; let events = timeline.events; let metadata = RecordingMetadata { @@ -411,6 +419,7 @@ impl TimelineStore { end_time, duration, file_path: None, + video_file, file_size: None, event_count, finalized: true, diff --git a/tauri-app/src/components/GameReview.vue b/tauri-app/src/components/GameReview.vue index ec3e2af..f7c1af0 100644 --- a/tauri-app/src/components/GameReview.vue +++ b/tauri-app/src/components/GameReview.vue @@ -53,25 +53,7 @@ const showTeamStats = ref(false); const selectedPlayerPuuid = ref(null); // Derived video filename from start_time -const videoFilename = computed(() => { - // Parse start_time like "2026-03-27T16:42:55.800338300Z" - const startTime = props.game.start_time; - if (!startTime) return null; - - try { - const date = new Date(startTime); - const year = date.getFullYear(); - const month = String(date.getMonth() + 1).padStart(2, '0'); - const day = String(date.getDate()).padStart(2, '0'); - const hours = String(date.getHours()).padStart(2, '0'); - const minutes = String(date.getMinutes()).padStart(2, '0'); - const seconds = String(date.getSeconds()).padStart(2, '0'); - - return `${year}-${month}-${day}_${hours}-${minutes}-${seconds}_unknown.mp4`; - } catch { - return null; - } -}); +const videoFilename = props.game.video_file; // Get video URL for playback using Tauri's convertFileSrc const videoUrl = computed(() => { diff --git a/tauri-app/src/types/timeline.ts b/tauri-app/src/types/timeline.ts index 8310e9a..4c222f6 100644 --- a/tauri-app/src/types/timeline.ts +++ b/tauri-app/src/types/timeline.ts @@ -146,6 +146,8 @@ export interface Timeline { raw_live_client_data: Record | null; /** Raw end-of-game stats from `/lol-end-of-game/v1/eog-stats-block`. */ raw_end_game_stats: Record | null; + /** Video file name (just the filename, not the full path). */ + video_file: string | null; } /**