add video file name in json metadata
All checks were successful
record-daemon / Build, check and test (push) Successful in 2m12s

This commit is contained in:
2026-03-27 23:24:24 +01:00
parent b64937601a
commit b3a6c30ddd
4 changed files with 24 additions and 19 deletions

View File

@@ -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<serde_json::Value>,
/// Video file name (just the filename, not the full path).
#[serde(default)]
pub video_file: Option<String>,
}
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,
}
}

View File

@@ -71,6 +71,8 @@ pub struct RecordingMetadata {
pub duration: Duration,
/// Output file path.
pub file_path: Option<PathBuf>,
/// Video file name (just the filename, not the full path).
pub video_file: Option<String>,
/// File size in bytes.
pub file_size: Option<u64>,
/// Number of events.
@@ -107,6 +109,11 @@ 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 +171,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 +223,11 @@ 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 +331,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 +375,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 +411,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 +427,7 @@ impl TimelineStore {
end_time,
duration,
file_path: None,
video_file,
file_size: None,
event_count,
finalized: true,

View File

@@ -53,25 +53,7 @@ const showTeamStats = ref(false);
const selectedPlayerPuuid = ref<string | null>(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(() => {

View File

@@ -146,6 +146,8 @@ export interface Timeline {
raw_live_client_data: Record<string, unknown> | null;
/** Raw end-of-game stats from `/lol-end-of-game/v1/eog-stats-block`. */
raw_end_game_stats: Record<string, unknown> | null;
/** Video file name (just the filename, not the full path). */
video_file: string | null;
}
/**