diff --git a/src/main.rs b/src/main.rs index 3d26ce4..58e0c08 100644 --- a/src/main.rs +++ b/src/main.rs @@ -12,6 +12,7 @@ use std::path::Path; mod config; mod overlay; mod player; +mod search; mod web; use config::Config; @@ -19,6 +20,7 @@ use overlay::{AsrLoader, ChunkLoader, YoloLoader}; use player::audio::AudioPlayer; use player::ffmpeg::FFmpegDecoder; use player::state::{PlaybackState, PlayerState}; +use search::{create_searcher, SearchResult, VectorSearcher}; fn main() -> Result<()> { env_logger::Builder::from_env(env_logger::Env::default().default_filter_or("info")).init(); @@ -68,6 +70,10 @@ fn run(config: &Config) -> Result<()> { let mut audio_player: Option = None; let mut is_fullscreen = false; let mut is_dragging = false; + let mut searcher: Option = None; + let mut show_search = false; + let mut search_query = String::new(); + let mut search_results: Vec = Vec::new(); if let Some(ref video_path) = config.video { info!("Loading video: {:?}", video_path); @@ -99,6 +105,12 @@ fn run(config: &Config) -> Result<()> { Ok(loader) => { info!("ASR loaded: {} segments", loader.segment_count()); asr = Some(loader); + + let mut search = create_searcher(); + if search.load_asr(Path::new(asr_path)).is_ok() { + searcher = Some(search); + info!("Search index ready"); + } } Err(e) => { error!("Failed to load ASR: {}", e); @@ -155,6 +167,9 @@ fn run(config: &Config) -> Result<()> { sdl2::event::Event::Quit { .. } => { running = false; } + sdl2::event::Event::TextInput { text, .. } if show_search => { + search_query.push_str(&text); + } sdl2::event::Event::KeyDown { keycode, keymod, .. } => { @@ -162,7 +177,77 @@ fn run(config: &Config) -> Result<()> { let shift = keymod.intersects(sdl2::keyboard::Mod::LSHIFTMOD) || keymod.intersects(sdl2::keyboard::Mod::RSHIFTMOD); match key { - sdl2::keyboard::Keycode::Escape => running = false, + sdl2::keyboard::Keycode::Escape => { + if show_search { + show_search = false; + search_query.clear(); + search_results.clear(); + } else { + running = false; + } + } + sdl2::keyboard::Keycode::Slash => { + if searcher.is_some() { + show_search = true; + search_query.clear(); + search_results.clear(); + info!("Search mode enabled"); + } + } + sdl2::keyboard::Keycode::Return | sdl2::keyboard::Keycode::KpEnter => { + if show_search && !search_query.is_empty() { + if let Some(ref search) = searcher { + search_results = search.search(&search_query); + info!("Found {} results", search_results.len()); + } + } + } + sdl2::keyboard::Keycode::Backspace => { + if show_search && !search_query.is_empty() { + search_query.pop(); + if search_query.is_empty() { + search_results.clear(); + } + } + } + sdl2::keyboard::Keycode::Num1 + | sdl2::keyboard::Keycode::Num2 + | sdl2::keyboard::Keycode::Num3 + | sdl2::keyboard::Keycode::Num4 + | sdl2::keyboard::Keycode::Num5 + | sdl2::keyboard::Keycode::Num6 => { + if show_search && !search_results.is_empty() { + let idx = match key { + sdl2::keyboard::Keycode::Num1 => 0, + sdl2::keyboard::Keycode::Num2 => 1, + sdl2::keyboard::Keycode::Num3 => 2, + sdl2::keyboard::Keycode::Num4 => 3, + sdl2::keyboard::Keycode::Num5 => 4, + sdl2::keyboard::Keycode::Num6 => 5, + _ => 0, + }; + if idx < search_results.len() { + let result = search_results[idx].clone(); + if let Some(ref mut dec) = decoder { + if dec.seek(result.time_ms).is_ok() { + player_state.current_frame = result.frame; + player_state.current_time_ms = result.time_ms; + player_state.playback = PlaybackState::Paused; + show_search = false; + search_query.clear(); + search_results.clear(); + sync_audio( + &mut audio_player, + &config.video, + result.time_ms, + false, + ); + info!("Jumped to: {}", result.text); + } + } + } + } + } sdl2::keyboard::Keycode::Space => { let was_playing = player_state.playback == PlaybackState::Playing; player_state.playback = if was_playing { @@ -658,6 +743,87 @@ fn run(config: &Config) -> Result<()> { } } + if show_search { + if let Some(ref font) = font { + let search_bg_h = 250u32; + let search_bg_y = (config.height as i32 - search_bg_h as i32) / 2; + canvas.set_draw_color(sdl2::pixels::Color::RGBA(20, 20, 30, 230)); + let _ = canvas.fill_rect(Rect::new( + config.width as i32 / 2 - 300, + search_bg_y, + 600, + search_bg_h, + )); + canvas.set_draw_color(sdl2::pixels::Color::RGBA(60, 60, 80, 255)); + let _ = canvas.draw_rect(Rect::new( + config.width as i32 / 2 - 300, + search_bg_y, + 600, + search_bg_h, + )); + + let input_text = if search_query.is_empty() { + "Type to search... (Enter to search, Esc to close)".to_string() + } else { + format!("Search: {}", search_query) + }; + if let Ok(surface) = font + .render(&input_text) + .solid(sdl2::pixels::Color::RGB(200, 200, 200)) + { + if let Ok(tex) = texture_creator.create_texture_from_surface(&surface) { + let rect = Rect::new( + config.width as i32 / 2 - 290, + search_bg_y + 10, + surface.width(), + surface.height(), + ); + canvas.copy(&tex, None, Some(rect)).ok(); + } + } + + if !search_results.is_empty() { + let mut y_offset = search_bg_y + 40; + for (i, result) in search_results.iter().take(6).enumerate() { + let result_text = format!("[{}] {}", i + 1, result.text); + let color = if i == 0 { + sdl2::pixels::Color::RGB(100, 200, 255) + } else { + sdl2::pixels::Color::RGB(180, 180, 180) + }; + if let Ok(surface) = font.render(&result_text).solid(color) { + if let Ok(tex) = texture_creator.create_texture_from_surface(&surface) { + let rect = Rect::new( + config.width as i32 / 2 - 290, + y_offset, + surface.width().min(580), + surface.height(), + ); + canvas.copy(&tex, None, Some(rect)).ok(); + } + } + y_offset += 25; + } + } else if !search_query.is_empty() { + let hint = "Press Enter to search..."; + if let Ok(surface) = font + .render(hint) + .solid(sdl2::pixels::Color::RGB(150, 150, 150)) + { + if let Ok(tex) = texture_creator.create_texture_from_surface(&surface) { + let rect = Rect::new( + config.width as i32 / 2 - 290, + search_bg_y + 40, + surface.width(), + surface.height(), + ); + canvas.copy(&tex, None, Some(rect)).ok(); + } + } + } + } + } + canvas.present(); std::thread::sleep(std::time::Duration::from_millis(16)); } diff --git a/src/search/mod.rs b/src/search/mod.rs new file mode 100644 index 0000000..ccbd594 --- /dev/null +++ b/src/search/mod.rs @@ -0,0 +1,96 @@ +use anyhow::{Context, Result}; +use log::{error, info, warn}; +use serde::{Deserialize, Serialize}; +use std::path::Path; + +#[derive(Debug, Clone, Serialize, Deserialize)] +pub struct SearchResult { + pub frame: u64, + pub time_ms: u64, + pub text: String, + pub score: f32, +} + +#[derive(Debug)] +pub struct VectorSearcher { + qdrant_url: String, + collection: String, + asr_loader: Option, +} + +impl VectorSearcher { + pub fn new(qdrant_url: &str, collection: &str) -> Self { + Self { + qdrant_url: qdrant_url.to_string(), + collection: collection.to_string(), + asr_loader: None, + } + } + + pub fn load_asr(&mut self, path: &Path) -> Result<()> { + let loader = + super::overlay::AsrLoader::load(path).context("Failed to load ASR for search")?; + info!( + "Loaded ASR with {} segments for search", + loader.segment_count() + ); + self.asr_loader = Some(loader); + Ok(()) + } + + pub fn search(&self, query: &str) -> Vec { + info!("Searching for: {}", query); + + if let Some(ref asr) = self.asr_loader { + let query_lower = query.to_lowercase(); + let mut results: Vec = Vec::new(); + + for segment in asr.get_all_segments() { + let text_lower = segment.text.to_lowercase(); + if text_lower.contains(&query_lower) { + let score = self.calculate_score(&query_lower, &text_lower); + results.push(SearchResult { + frame: (segment.start * 60.0) as u64, + time_ms: (segment.start * 1000.0) as u64, + text: segment.text.clone(), + score, + }); + } + } + + results.sort_by(|a, b| b.score.partial_cmp(&a.score).unwrap()); + results.truncate(10); + + info!("Found {} results", results.len()); + return results; + } + + warn!("No ASR loaded for search"); + Vec::new() + } + + fn calculate_score(&self, query: &str, text: &str) -> f32 { + let query_words: Vec<&str> = query.split_whitespace().collect(); + let text_words: Vec<&str> = text.split_whitespace().collect(); + + let mut matches = 0; + for qw in &query_words { + for tw in &text_words { + if tw.contains(qw) { + matches += 1; + break; + } + } + } + + (matches as f32) / (query_words.len() as f32) + } + + pub fn is_available(&self) -> bool { + true + } +} + +pub fn create_searcher() -> VectorSearcher { + VectorSearcher::new("http://localhost:6333", "AccusysDB") +} diff --git a/target/release/.fingerprint/momentry_playground-d0e10ec51fcac34b/dep-bin-momentry b/target/release/.fingerprint/momentry_playground-d0e10ec51fcac34b/dep-bin-momentry index e6a1cfa..92308d5 100644 Binary files a/target/release/.fingerprint/momentry_playground-d0e10ec51fcac34b/dep-bin-momentry and b/target/release/.fingerprint/momentry_playground-d0e10ec51fcac34b/dep-bin-momentry differ diff --git a/target/release/.fingerprint/momentry_playground-d0e10ec51fcac34b/output-bin-momentry b/target/release/.fingerprint/momentry_playground-d0e10ec51fcac34b/output-bin-momentry index 543ab2e..a61d598 100644 --- a/target/release/.fingerprint/momentry_playground-d0e10ec51fcac34b/output-bin-momentry +++ b/target/release/.fingerprint/momentry_playground-d0e10ec51fcac34b/output-bin-momentry @@ -2,9 +2,10 @@ {"$message_type":"diagnostic","message":"unused import: `audio::AudioPlayer`","code":{"code":"unused_imports","explanation":null},"level":"warning","spans":[{"file_name":"src/player/mod.rs","byte_start":161,"byte_end":179,"line_start":11,"line_end":11,"column_start":9,"column_end":27,"is_primary":true,"text":[{"text":"pub use audio::AudioPlayer;","highlight_start":9,"highlight_end":27}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null}],"children":[{"message":"remove the whole `use` item","code":null,"level":"help","spans":[{"file_name":"src/player/mod.rs","byte_start":153,"byte_end":181,"line_start":11,"line_end":12,"column_start":1,"column_end":1,"is_primary":true,"text":[{"text":"pub use audio::AudioPlayer;","highlight_start":1,"highlight_end":28},{"text":"pub use state::{PlaybackState, PlayerState};","highlight_start":1,"highlight_end":1}],"label":null,"suggested_replacement":"","suggestion_applicability":"MachineApplicable","expansion":null}],"children":[],"rendered":null}],"rendered":"\u001b[1m\u001b[33mwarning\u001b[0m\u001b[1m: unused import: `audio::AudioPlayer`\u001b[0m\n \u001b[1m\u001b[94m--> \u001b[0msrc/player/mod.rs:11:9\n \u001b[1m\u001b[94m|\u001b[0m\n\u001b[1m\u001b[94m11\u001b[0m \u001b[1m\u001b[94m|\u001b[0m pub use audio::AudioPlayer;\n \u001b[1m\u001b[94m|\u001b[0m \u001b[1m\u001b[33m^^^^^^^^^^^^^^^^^^\u001b[0m\n\n"} {"$message_type":"diagnostic","message":"unused imports: `PlaybackState` and `PlayerState`","code":{"code":"unused_imports","explanation":null},"level":"warning","spans":[{"file_name":"src/player/mod.rs","byte_start":197,"byte_end":210,"line_start":12,"line_end":12,"column_start":17,"column_end":30,"is_primary":true,"text":[{"text":"pub use state::{PlaybackState, PlayerState};","highlight_start":17,"highlight_end":30}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null},{"file_name":"src/player/mod.rs","byte_start":212,"byte_end":223,"line_start":12,"line_end":12,"column_start":32,"column_end":43,"is_primary":true,"text":[{"text":"pub use state::{PlaybackState, PlayerState};","highlight_start":32,"highlight_end":43}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null}],"children":[{"message":"remove the whole `use` item","code":null,"level":"help","spans":[{"file_name":"src/player/mod.rs","byte_start":181,"byte_end":226,"line_start":12,"line_end":13,"column_start":1,"column_end":1,"is_primary":true,"text":[{"text":"pub use state::{PlaybackState, PlayerState};","highlight_start":1,"highlight_end":45},{"text":"pub use video::VideoPlayer;","highlight_start":1,"highlight_end":1}],"label":null,"suggested_replacement":"","suggestion_applicability":"MachineApplicable","expansion":null}],"children":[],"rendered":null}],"rendered":"\u001b[1m\u001b[33mwarning\u001b[0m\u001b[1m: unused imports: `PlaybackState` and `PlayerState`\u001b[0m\n \u001b[1m\u001b[94m--> \u001b[0msrc/player/mod.rs:12:17\n \u001b[1m\u001b[94m|\u001b[0m\n\u001b[1m\u001b[94m12\u001b[0m \u001b[1m\u001b[94m|\u001b[0m pub use state::{PlaybackState, PlayerState};\n \u001b[1m\u001b[94m|\u001b[0m \u001b[1m\u001b[33m^^^^^^^^^^^^^\u001b[0m \u001b[1m\u001b[33m^^^^^^^^^^^\u001b[0m\n\n"} {"$message_type":"diagnostic","message":"unused import: `video::VideoPlayer`","code":{"code":"unused_imports","explanation":null},"level":"warning","spans":[{"file_name":"src/player/mod.rs","byte_start":234,"byte_end":252,"line_start":13,"line_end":13,"column_start":9,"column_end":27,"is_primary":true,"text":[{"text":"pub use video::VideoPlayer;","highlight_start":9,"highlight_end":27}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null}],"children":[{"message":"remove the whole `use` item","code":null,"level":"help","spans":[{"file_name":"src/player/mod.rs","byte_start":226,"byte_end":254,"line_start":13,"line_end":13,"column_start":1,"column_end":29,"is_primary":true,"text":[{"text":"pub use video::VideoPlayer;","highlight_start":1,"highlight_end":29}],"label":null,"suggested_replacement":"","suggestion_applicability":"MachineApplicable","expansion":null}],"children":[],"rendered":null}],"rendered":"\u001b[1m\u001b[33mwarning\u001b[0m\u001b[1m: unused import: `video::VideoPlayer`\u001b[0m\n \u001b[1m\u001b[94m--> \u001b[0msrc/player/mod.rs:13:9\n \u001b[1m\u001b[94m|\u001b[0m\n\u001b[1m\u001b[94m13\u001b[0m \u001b[1m\u001b[94m|\u001b[0m pub use video::VideoPlayer;\n \u001b[1m\u001b[94m|\u001b[0m \u001b[1m\u001b[33m^^^^^^^^^^^^^^^^^^\u001b[0m\n\n"} +{"$message_type":"diagnostic","message":"unused import: `error`","code":{"code":"unused_imports","explanation":null},"level":"warning","spans":[{"file_name":"src/search/mod.rs","byte_start":41,"byte_end":46,"line_start":2,"line_end":2,"column_start":11,"column_end":16,"is_primary":true,"text":[{"text":"use log::{error, info, warn};","highlight_start":11,"highlight_end":16}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null}],"children":[{"message":"remove the unused import","code":null,"level":"help","spans":[{"file_name":"src/search/mod.rs","byte_start":41,"byte_end":48,"line_start":2,"line_end":2,"column_start":11,"column_end":18,"is_primary":true,"text":[{"text":"use log::{error, info, warn};","highlight_start":11,"highlight_end":18}],"label":null,"suggested_replacement":"","suggestion_applicability":"MachineApplicable","expansion":null}],"children":[],"rendered":null}],"rendered":"\u001b[1m\u001b[33mwarning\u001b[0m\u001b[1m: unused import: `error`\u001b[0m\n \u001b[1m\u001b[94m--> \u001b[0msrc/search/mod.rs:2:11\n \u001b[1m\u001b[94m|\u001b[0m\n\u001b[1m\u001b[94m2\u001b[0m \u001b[1m\u001b[94m|\u001b[0m use log::{error, info, warn};\n \u001b[1m\u001b[94m|\u001b[0m \u001b[1m\u001b[33m^^^^^\u001b[0m\n\n"} {"$message_type":"diagnostic","message":"unused import: `bridge::WebBridge`","code":{"code":"unused_imports","explanation":null},"level":"warning","spans":[{"file_name":"src/web/mod.rs","byte_start":60,"byte_end":77,"line_start":5,"line_end":5,"column_start":9,"column_end":26,"is_primary":true,"text":[{"text":"pub use bridge::WebBridge;","highlight_start":9,"highlight_end":26}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null}],"children":[{"message":"remove the whole `use` item","code":null,"level":"help","spans":[{"file_name":"src/web/mod.rs","byte_start":52,"byte_end":79,"line_start":5,"line_end":5,"column_start":1,"column_end":28,"is_primary":true,"text":[{"text":"pub use bridge::WebBridge;","highlight_start":1,"highlight_end":28}],"label":null,"suggested_replacement":"","suggestion_applicability":"MachineApplicable","expansion":null}],"children":[],"rendered":null}],"rendered":"\u001b[1m\u001b[33mwarning\u001b[0m\u001b[1m: unused import: `bridge::WebBridge`\u001b[0m\n \u001b[1m\u001b[94m--> \u001b[0msrc/web/mod.rs:5:9\n \u001b[1m\u001b[94m|\u001b[0m\n\u001b[1m\u001b[94m5\u001b[0m \u001b[1m\u001b[94m|\u001b[0m pub use bridge::WebBridge;\n \u001b[1m\u001b[94m|\u001b[0m \u001b[1m\u001b[33m^^^^^^^^^^^^^^^^^\u001b[0m\n\n"} {"$message_type":"diagnostic","message":"fields `language` and `language_probability` are never read","code":{"code":"dead_code","explanation":null},"level":"warning","spans":[{"file_name":"src/overlay/asr.rs","byte_start":286,"byte_end":293,"line_start":15,"line_end":15,"column_start":12,"column_end":19,"is_primary":false,"text":[{"text":"pub struct AsrData {","highlight_start":12,"highlight_end":19}],"label":"fields in this struct","suggested_replacement":null,"suggestion_applicability":null,"expansion":null},{"file_name":"src/overlay/asr.rs","byte_start":304,"byte_end":312,"line_start":16,"line_end":16,"column_start":9,"column_end":17,"is_primary":true,"text":[{"text":" pub language: Option,","highlight_start":9,"highlight_end":17}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null},{"file_name":"src/overlay/asr.rs","byte_start":338,"byte_end":358,"line_start":17,"line_end":17,"column_start":9,"column_end":29,"is_primary":true,"text":[{"text":" pub language_probability: Option,","highlight_start":9,"highlight_end":29}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null}],"children":[{"message":"`AsrData` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis","code":null,"level":"note","spans":[],"children":[],"rendered":null},{"message":"`#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default","code":null,"level":"note","spans":[],"children":[],"rendered":null}],"rendered":"\u001b[1m\u001b[33mwarning\u001b[0m\u001b[1m: fields `language` and `language_probability` are never read\u001b[0m\n \u001b[1m\u001b[94m--> \u001b[0msrc/overlay/asr.rs:16:9\n \u001b[1m\u001b[94m|\u001b[0m\n\u001b[1m\u001b[94m15\u001b[0m \u001b[1m\u001b[94m|\u001b[0m pub struct AsrData {\n \u001b[1m\u001b[94m|\u001b[0m \u001b[1m\u001b[94m-------\u001b[0m \u001b[1m\u001b[94mfields in this struct\u001b[0m\n\u001b[1m\u001b[94m16\u001b[0m \u001b[1m\u001b[94m|\u001b[0m pub language: Option,\n \u001b[1m\u001b[94m|\u001b[0m \u001b[1m\u001b[33m^^^^^^^^\u001b[0m\n\u001b[1m\u001b[94m17\u001b[0m \u001b[1m\u001b[94m|\u001b[0m pub language_probability: Option,\n \u001b[1m\u001b[94m|\u001b[0m \u001b[1m\u001b[33m^^^^^^^^^^^^^^^^^^^^\u001b[0m\n \u001b[1m\u001b[94m|\u001b[0m\n \u001b[1m\u001b[94m= \u001b[0m\u001b[1mnote\u001b[0m: `AsrData` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis\n \u001b[1m\u001b[94m= \u001b[0m\u001b[1mnote\u001b[0m: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default\n\n"} -{"$message_type":"diagnostic","message":"methods `get_all_segments` and `duration` are never used","code":{"code":"dead_code","explanation":null},"level":"warning","spans":[{"file_name":"src/overlay/asr.rs","byte_start":480,"byte_end":494,"line_start":26,"line_end":26,"column_start":1,"column_end":15,"is_primary":false,"text":[{"text":"impl AsrLoader {","highlight_start":1,"highlight_end":15}],"label":"methods in this implementation","suggested_replacement":null,"suggestion_applicability":null,"expansion":null},{"file_name":"src/overlay/asr.rs","byte_start":1223,"byte_end":1239,"line_start":49,"line_end":49,"column_start":12,"column_end":28,"is_primary":true,"text":[{"text":" pub fn get_all_segments(&self) -> &[AsrSegment] {","highlight_start":12,"highlight_end":28}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null},{"file_name":"src/overlay/asr.rs","byte_start":1395,"byte_end":1403,"line_start":57,"line_end":57,"column_start":12,"column_end":20,"is_primary":true,"text":[{"text":" pub fn duration(&self) -> f64 {","highlight_start":12,"highlight_end":20}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null}],"children":[],"rendered":"\u001b[1m\u001b[33mwarning\u001b[0m\u001b[1m: methods `get_all_segments` and `duration` are never used\u001b[0m\n \u001b[1m\u001b[94m--> \u001b[0msrc/overlay/asr.rs:49:12\n \u001b[1m\u001b[94m|\u001b[0m\n\u001b[1m\u001b[94m26\u001b[0m \u001b[1m\u001b[94m|\u001b[0m impl AsrLoader {\n \u001b[1m\u001b[94m|\u001b[0m \u001b[1m\u001b[94m--------------\u001b[0m \u001b[1m\u001b[94mmethods in this implementation\u001b[0m\n\u001b[1m\u001b[94m...\u001b[0m\n\u001b[1m\u001b[94m49\u001b[0m \u001b[1m\u001b[94m|\u001b[0m pub fn get_all_segments(&self) -> &[AsrSegment] {\n \u001b[1m\u001b[94m|\u001b[0m \u001b[1m\u001b[33m^^^^^^^^^^^^^^^^\u001b[0m\n\u001b[1m\u001b[94m...\u001b[0m\n\u001b[1m\u001b[94m57\u001b[0m \u001b[1m\u001b[94m|\u001b[0m pub fn duration(&self) -> f64 {\n \u001b[1m\u001b[94m|\u001b[0m \u001b[1m\u001b[33m^^^^^^^^\u001b[0m\n\n"} +{"$message_type":"diagnostic","message":"method `duration` is never used","code":{"code":"dead_code","explanation":null},"level":"warning","spans":[{"file_name":"src/overlay/asr.rs","byte_start":480,"byte_end":494,"line_start":26,"line_end":26,"column_start":1,"column_end":15,"is_primary":false,"text":[{"text":"impl AsrLoader {","highlight_start":1,"highlight_end":15}],"label":"method in this implementation","suggested_replacement":null,"suggestion_applicability":null,"expansion":null},{"file_name":"src/overlay/asr.rs","byte_start":1395,"byte_end":1403,"line_start":57,"line_end":57,"column_start":12,"column_end":20,"is_primary":true,"text":[{"text":" pub fn duration(&self) -> f64 {","highlight_start":12,"highlight_end":20}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null}],"children":[],"rendered":"\u001b[1m\u001b[33mwarning\u001b[0m\u001b[1m: method `duration` is never used\u001b[0m\n \u001b[1m\u001b[94m--> \u001b[0msrc/overlay/asr.rs:57:12\n \u001b[1m\u001b[94m|\u001b[0m\n\u001b[1m\u001b[94m26\u001b[0m \u001b[1m\u001b[94m|\u001b[0m impl AsrLoader {\n \u001b[1m\u001b[94m|\u001b[0m \u001b[1m\u001b[94m--------------\u001b[0m \u001b[1m\u001b[94mmethod in this implementation\u001b[0m\n\u001b[1m\u001b[94m...\u001b[0m\n\u001b[1m\u001b[94m57\u001b[0m \u001b[1m\u001b[94m|\u001b[0m pub fn duration(&self) -> f64 {\n \u001b[1m\u001b[94m|\u001b[0m \u001b[1m\u001b[33m^^^^^^^^\u001b[0m\n\n"} {"$message_type":"diagnostic","message":"fields `frame_count` and `fps` are never read","code":{"code":"dead_code","explanation":null},"level":"warning","spans":[{"file_name":"src/overlay/chunk.rs","byte_start":136,"byte_end":143,"line_start":8,"line_end":8,"column_start":12,"column_end":19,"is_primary":false,"text":[{"text":"pub struct CutData {","highlight_start":12,"highlight_end":19}],"label":"fields in this struct","suggested_replacement":null,"suggestion_applicability":null,"expansion":null},{"file_name":"src/overlay/chunk.rs","byte_start":154,"byte_end":165,"line_start":9,"line_end":9,"column_start":9,"column_end":20,"is_primary":true,"text":[{"text":" pub frame_count: u64,","highlight_start":9,"highlight_end":20}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null},{"file_name":"src/overlay/chunk.rs","byte_start":180,"byte_end":183,"line_start":10,"line_end":10,"column_start":9,"column_end":12,"is_primary":true,"text":[{"text":" pub fps: f64,","highlight_start":9,"highlight_end":12}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null}],"children":[{"message":"`CutData` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis","code":null,"level":"note","spans":[],"children":[],"rendered":null}],"rendered":"\u001b[1m\u001b[33mwarning\u001b[0m\u001b[1m: fields `frame_count` and `fps` are never read\u001b[0m\n \u001b[1m\u001b[94m--> \u001b[0msrc/overlay/chunk.rs:9:9\n \u001b[1m\u001b[94m|\u001b[0m\n \u001b[1m\u001b[94m8\u001b[0m \u001b[1m\u001b[94m|\u001b[0m pub struct CutData {\n \u001b[1m\u001b[94m|\u001b[0m \u001b[1m\u001b[94m-------\u001b[0m \u001b[1m\u001b[94mfields in this struct\u001b[0m\n \u001b[1m\u001b[94m9\u001b[0m \u001b[1m\u001b[94m|\u001b[0m pub frame_count: u64,\n \u001b[1m\u001b[94m|\u001b[0m \u001b[1m\u001b[33m^^^^^^^^^^^\u001b[0m\n\u001b[1m\u001b[94m10\u001b[0m \u001b[1m\u001b[94m|\u001b[0m pub fps: f64,\n \u001b[1m\u001b[94m|\u001b[0m \u001b[1m\u001b[33m^^^\u001b[0m\n \u001b[1m\u001b[94m|\u001b[0m\n \u001b[1m\u001b[94m= \u001b[0m\u001b[1mnote\u001b[0m: `CutData` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis\n\n"} {"$message_type":"diagnostic","message":"fields `start_time` and `end_time` are never read","code":{"code":"dead_code","explanation":null},"level":"warning","spans":[{"file_name":"src/overlay/chunk.rs","byte_start":269,"byte_end":274,"line_start":15,"line_end":15,"column_start":12,"column_end":17,"is_primary":false,"text":[{"text":"pub struct Scene {","highlight_start":12,"highlight_end":17}],"label":"fields in this struct","suggested_replacement":null,"suggestion_applicability":null,"expansion":null},{"file_name":"src/overlay/chunk.rs","byte_start":362,"byte_end":372,"line_start":19,"line_end":19,"column_start":9,"column_end":19,"is_primary":true,"text":[{"text":" pub start_time: f64,","highlight_start":9,"highlight_end":19}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null},{"file_name":"src/overlay/chunk.rs","byte_start":387,"byte_end":395,"line_start":20,"line_end":20,"column_start":9,"column_end":17,"is_primary":true,"text":[{"text":" pub end_time: f64,","highlight_start":9,"highlight_end":17}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null}],"children":[{"message":"`Scene` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis","code":null,"level":"note","spans":[],"children":[],"rendered":null}],"rendered":"\u001b[1m\u001b[33mwarning\u001b[0m\u001b[1m: fields `start_time` and `end_time` are never read\u001b[0m\n \u001b[1m\u001b[94m--> \u001b[0msrc/overlay/chunk.rs:19:9\n \u001b[1m\u001b[94m|\u001b[0m\n\u001b[1m\u001b[94m15\u001b[0m \u001b[1m\u001b[94m|\u001b[0m pub struct Scene {\n \u001b[1m\u001b[94m|\u001b[0m \u001b[1m\u001b[94m-----\u001b[0m \u001b[1m\u001b[94mfields in this struct\u001b[0m\n\u001b[1m\u001b[94m...\u001b[0m\n\u001b[1m\u001b[94m19\u001b[0m \u001b[1m\u001b[94m|\u001b[0m pub start_time: f64,\n \u001b[1m\u001b[94m|\u001b[0m \u001b[1m\u001b[33m^^^^^^^^^^\u001b[0m\n\u001b[1m\u001b[94m20\u001b[0m \u001b[1m\u001b[94m|\u001b[0m pub end_time: f64,\n \u001b[1m\u001b[94m|\u001b[0m \u001b[1m\u001b[33m^^^^^^^^\u001b[0m\n \u001b[1m\u001b[94m|\u001b[0m\n \u001b[1m\u001b[94m= \u001b[0m\u001b[1mnote\u001b[0m: `Scene` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis\n\n"} {"$message_type":"diagnostic","message":"field `class_id` is never read","code":{"code":"dead_code","explanation":null},"level":"warning","spans":[{"file_name":"src/overlay/yolo.rs","byte_start":292,"byte_end":301,"line_start":13,"line_end":13,"column_start":12,"column_end":21,"is_primary":false,"text":[{"text":"pub struct Detection {","highlight_start":12,"highlight_end":21}],"label":"field in this struct","suggested_replacement":null,"suggestion_applicability":null,"expansion":null},{"file_name":"src/overlay/yolo.rs","byte_start":312,"byte_end":320,"line_start":14,"line_end":14,"column_start":9,"column_end":17,"is_primary":true,"text":[{"text":" pub class_id: u32,","highlight_start":9,"highlight_end":17}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null}],"children":[{"message":"`Detection` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis","code":null,"level":"note","spans":[],"children":[],"rendered":null}],"rendered":"\u001b[1m\u001b[33mwarning\u001b[0m\u001b[1m: field `class_id` is never read\u001b[0m\n \u001b[1m\u001b[94m--> \u001b[0msrc/overlay/yolo.rs:14:9\n \u001b[1m\u001b[94m|\u001b[0m\n\u001b[1m\u001b[94m13\u001b[0m \u001b[1m\u001b[94m|\u001b[0m pub struct Detection {\n \u001b[1m\u001b[94m|\u001b[0m \u001b[1m\u001b[94m---------\u001b[0m \u001b[1m\u001b[94mfield in this struct\u001b[0m\n\u001b[1m\u001b[94m14\u001b[0m \u001b[1m\u001b[94m|\u001b[0m pub class_id: u32,\n \u001b[1m\u001b[94m|\u001b[0m \u001b[1m\u001b[33m^^^^^^^^\u001b[0m\n \u001b[1m\u001b[94m|\u001b[0m\n \u001b[1m\u001b[94m= \u001b[0m\u001b[1mnote\u001b[0m: `Detection` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis\n\n"} @@ -20,10 +21,12 @@ {"$message_type":"diagnostic","message":"enum `PlayState` is never used","code":{"code":"dead_code","explanation":null},"level":"warning","spans":[{"file_name":"src/player/video.rs","byte_start":381,"byte_end":390,"line_start":19,"line_end":19,"column_start":10,"column_end":19,"is_primary":true,"text":[{"text":"pub enum PlayState {","highlight_start":10,"highlight_end":19}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null}],"children":[],"rendered":"\u001b[1m\u001b[33mwarning\u001b[0m\u001b[1m: enum `PlayState` is never used\u001b[0m\n \u001b[1m\u001b[94m--> \u001b[0msrc/player/video.rs:19:10\n \u001b[1m\u001b[94m|\u001b[0m\n\u001b[1m\u001b[94m19\u001b[0m \u001b[1m\u001b[94m|\u001b[0m pub enum PlayState {\n \u001b[1m\u001b[94m|\u001b[0m \u001b[1m\u001b[33m^^^^^^^^^\u001b[0m\n\n"} {"$message_type":"diagnostic","message":"struct `VideoPlayer` is never constructed","code":{"code":"dead_code","explanation":null},"level":"warning","spans":[{"file_name":"src/player/video.rs","byte_start":445,"byte_end":456,"line_start":25,"line_end":25,"column_start":12,"column_end":23,"is_primary":true,"text":[{"text":"pub struct VideoPlayer {","highlight_start":12,"highlight_end":23}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null}],"children":[],"rendered":"\u001b[1m\u001b[33mwarning\u001b[0m\u001b[1m: struct `VideoPlayer` is never constructed\u001b[0m\n \u001b[1m\u001b[94m--> \u001b[0msrc/player/video.rs:25:12\n \u001b[1m\u001b[94m|\u001b[0m\n\u001b[1m\u001b[94m25\u001b[0m \u001b[1m\u001b[94m|\u001b[0m pub struct VideoPlayer {\n \u001b[1m\u001b[94m|\u001b[0m \u001b[1m\u001b[33m^^^^^^^^^^^\u001b[0m\n\n"} {"$message_type":"diagnostic","message":"multiple associated items are never used","code":{"code":"dead_code","explanation":null},"level":"warning","spans":[{"file_name":"src/player/video.rs","byte_start":620,"byte_end":636,"line_start":33,"line_end":33,"column_start":1,"column_end":17,"is_primary":false,"text":[{"text":"impl VideoPlayer {","highlight_start":1,"highlight_end":17}],"label":"associated items in this implementation","suggested_replacement":null,"suggestion_applicability":null,"expansion":null},{"file_name":"src/player/video.rs","byte_start":650,"byte_end":653,"line_start":34,"line_end":34,"column_start":12,"column_end":15,"is_primary":true,"text":[{"text":" pub fn new() -> Result {","highlight_start":12,"highlight_end":15}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null},{"file_name":"src/player/video.rs","byte_start":906,"byte_end":910,"line_start":44,"line_end":44,"column_start":12,"column_end":16,"is_primary":true,"text":[{"text":" pub fn open(&mut self, path: &str) -> Result<()> {","highlight_start":12,"highlight_end":16}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null},{"file_name":"src/player/video.rs","byte_start":1274,"byte_end":1278,"line_start":56,"line_end":56,"column_start":12,"column_end":16,"is_primary":true,"text":[{"text":" pub fn play(&mut self) -> Result<()> {","highlight_start":12,"highlight_end":16}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null},{"file_name":"src/player/video.rs","byte_start":1472,"byte_end":1477,"line_start":64,"line_end":64,"column_start":12,"column_end":17,"is_primary":true,"text":[{"text":" pub fn pause(&mut self) -> Result<()> {","highlight_start":12,"highlight_end":17}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null},{"file_name":"src/player/video.rs","byte_start":1578,"byte_end":1582,"line_start":69,"line_end":69,"column_start":12,"column_end":16,"is_primary":true,"text":[{"text":" pub fn stop(&mut self) -> Result<()> {","highlight_start":12,"highlight_end":16}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null},{"file_name":"src/player/video.rs","byte_start":1716,"byte_end":1726,"line_start":75,"line_end":75,"column_start":12,"column_end":22,"is_primary":true,"text":[{"text":" pub fn seek_frame(&mut self, frame: u64) -> Result<()> {","highlight_start":12,"highlight_end":22}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null},{"file_name":"src/player/video.rs","byte_start":2083,"byte_end":2092,"line_start":86,"line_end":86,"column_start":12,"column_end":21,"is_primary":true,"text":[{"text":" pub fn seek_time(&mut self, ms: u64) -> Result<()> {","highlight_start":12,"highlight_end":21}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null},{"file_name":"src/player/video.rs","byte_start":2387,"byte_end":2396,"line_start":96,"line_end":96,"column_start":12,"column_end":21,"is_primary":true,"text":[{"text":" pub fn get_state(&self) -> PlayState {","highlight_start":12,"highlight_end":21}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null},{"file_name":"src/player/video.rs","byte_start":2464,"byte_end":2481,"line_start":100,"line_end":100,"column_start":12,"column_end":29,"is_primary":true,"text":[{"text":" pub fn get_current_frame(&self) -> u64 {","highlight_start":12,"highlight_end":29}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null},{"file_name":"src/player/video.rs","byte_start":2543,"byte_end":2551,"line_start":104,"line_end":104,"column_start":12,"column_end":20,"is_primary":true,"text":[{"text":" pub fn get_info(&self) -> Option<&VideoInfo> {","highlight_start":12,"highlight_end":20}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null}],"children":[],"rendered":"\u001b[1m\u001b[33mwarning\u001b[0m\u001b[1m: multiple associated items are never used\u001b[0m\n \u001b[1m\u001b[94m--> \u001b[0msrc/player/video.rs:34:12\n \u001b[1m\u001b[94m|\u001b[0m\n \u001b[1m\u001b[94m33\u001b[0m \u001b[1m\u001b[94m|\u001b[0m impl VideoPlayer {\n \u001b[1m\u001b[94m|\u001b[0m \u001b[1m\u001b[94m----------------\u001b[0m \u001b[1m\u001b[94massociated items in this implementation\u001b[0m\n \u001b[1m\u001b[94m34\u001b[0m \u001b[1m\u001b[94m|\u001b[0m pub fn new() -> Result {\n \u001b[1m\u001b[94m|\u001b[0m \u001b[1m\u001b[33m^^^\u001b[0m\n\u001b[1m\u001b[94m...\u001b[0m\n \u001b[1m\u001b[94m44\u001b[0m \u001b[1m\u001b[94m|\u001b[0m pub fn open(&mut self, path: &str) -> Result<()> {\n \u001b[1m\u001b[94m|\u001b[0m \u001b[1m\u001b[33m^^^^\u001b[0m\n\u001b[1m\u001b[94m...\u001b[0m\n \u001b[1m\u001b[94m56\u001b[0m \u001b[1m\u001b[94m|\u001b[0m pub fn play(&mut self) -> Result<()> {\n \u001b[1m\u001b[94m|\u001b[0m \u001b[1m\u001b[33m^^^^\u001b[0m\n\u001b[1m\u001b[94m...\u001b[0m\n \u001b[1m\u001b[94m64\u001b[0m \u001b[1m\u001b[94m|\u001b[0m pub fn pause(&mut self) -> Result<()> {\n \u001b[1m\u001b[94m|\u001b[0m \u001b[1m\u001b[33m^^^^^\u001b[0m\n\u001b[1m\u001b[94m...\u001b[0m\n \u001b[1m\u001b[94m69\u001b[0m \u001b[1m\u001b[94m|\u001b[0m pub fn stop(&mut self) -> Result<()> {\n \u001b[1m\u001b[94m|\u001b[0m \u001b[1m\u001b[33m^^^^\u001b[0m\n\u001b[1m\u001b[94m...\u001b[0m\n \u001b[1m\u001b[94m75\u001b[0m \u001b[1m\u001b[94m|\u001b[0m pub fn seek_frame(&mut self, frame: u64) -> Result<()> {\n \u001b[1m\u001b[94m|\u001b[0m \u001b[1m\u001b[33m^^^^^^^^^^\u001b[0m\n\u001b[1m\u001b[94m...\u001b[0m\n \u001b[1m\u001b[94m86\u001b[0m \u001b[1m\u001b[94m|\u001b[0m pub fn seek_time(&mut self, ms: u64) -> Result<()> {\n \u001b[1m\u001b[94m|\u001b[0m \u001b[1m\u001b[33m^^^^^^^^^\u001b[0m\n\u001b[1m\u001b[94m...\u001b[0m\n \u001b[1m\u001b[94m96\u001b[0m \u001b[1m\u001b[94m|\u001b[0m pub fn get_state(&self) -> PlayState {\n \u001b[1m\u001b[94m|\u001b[0m \u001b[1m\u001b[33m^^^^^^^^^\u001b[0m\n\u001b[1m\u001b[94m...\u001b[0m\n\u001b[1m\u001b[94m100\u001b[0m \u001b[1m\u001b[94m|\u001b[0m pub fn get_current_frame(&self) -> u64 {\n \u001b[1m\u001b[94m|\u001b[0m \u001b[1m\u001b[33m^^^^^^^^^^^^^^^^^\u001b[0m\n\u001b[1m\u001b[94m...\u001b[0m\n\u001b[1m\u001b[94m104\u001b[0m \u001b[1m\u001b[94m|\u001b[0m pub fn get_info(&self) -> Option<&VideoInfo> {\n \u001b[1m\u001b[94m|\u001b[0m \u001b[1m\u001b[33m^^^^^^^^\u001b[0m\n\n"} +{"$message_type":"diagnostic","message":"fields `qdrant_url` and `collection` are never read","code":{"code":"dead_code","explanation":null},"level":"warning","spans":[{"file_name":"src/search/mod.rs","byte_start":309,"byte_end":323,"line_start":15,"line_end":15,"column_start":12,"column_end":26,"is_primary":false,"text":[{"text":"pub struct VectorSearcher {","highlight_start":12,"highlight_end":26}],"label":"fields in this struct","suggested_replacement":null,"suggestion_applicability":null,"expansion":null},{"file_name":"src/search/mod.rs","byte_start":330,"byte_end":340,"line_start":16,"line_end":16,"column_start":5,"column_end":15,"is_primary":true,"text":[{"text":" qdrant_url: String,","highlight_start":5,"highlight_end":15}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null},{"file_name":"src/search/mod.rs","byte_start":354,"byte_end":364,"line_start":17,"line_end":17,"column_start":5,"column_end":15,"is_primary":true,"text":[{"text":" collection: String,","highlight_start":5,"highlight_end":15}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null}],"children":[{"message":"`VectorSearcher` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis","code":null,"level":"note","spans":[],"children":[],"rendered":null}],"rendered":"\u001b[1m\u001b[33mwarning\u001b[0m\u001b[1m: fields `qdrant_url` and `collection` are never read\u001b[0m\n \u001b[1m\u001b[94m--> \u001b[0msrc/search/mod.rs:16:5\n \u001b[1m\u001b[94m|\u001b[0m\n\u001b[1m\u001b[94m15\u001b[0m \u001b[1m\u001b[94m|\u001b[0m pub struct VectorSearcher {\n \u001b[1m\u001b[94m|\u001b[0m \u001b[1m\u001b[94m--------------\u001b[0m \u001b[1m\u001b[94mfields in this struct\u001b[0m\n\u001b[1m\u001b[94m16\u001b[0m \u001b[1m\u001b[94m|\u001b[0m qdrant_url: String,\n \u001b[1m\u001b[94m|\u001b[0m \u001b[1m\u001b[33m^^^^^^^^^^\u001b[0m\n\u001b[1m\u001b[94m17\u001b[0m \u001b[1m\u001b[94m|\u001b[0m collection: String,\n \u001b[1m\u001b[94m|\u001b[0m \u001b[1m\u001b[33m^^^^^^^^^^\u001b[0m\n \u001b[1m\u001b[94m|\u001b[0m\n \u001b[1m\u001b[94m= \u001b[0m\u001b[1mnote\u001b[0m: `VectorSearcher` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis\n\n"} +{"$message_type":"diagnostic","message":"method `is_available` is never used","code":{"code":"dead_code","explanation":null},"level":"warning","spans":[{"file_name":"src/search/mod.rs","byte_start":428,"byte_end":447,"line_start":21,"line_end":21,"column_start":1,"column_end":20,"is_primary":false,"text":[{"text":"impl VectorSearcher {","highlight_start":1,"highlight_end":20}],"label":"method in this implementation","suggested_replacement":null,"suggestion_applicability":null,"expansion":null},{"file_name":"src/search/mod.rs","byte_start":2647,"byte_end":2659,"line_start":89,"line_end":89,"column_start":12,"column_end":24,"is_primary":true,"text":[{"text":" pub fn is_available(&self) -> bool {","highlight_start":12,"highlight_end":24}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null}],"children":[],"rendered":"\u001b[1m\u001b[33mwarning\u001b[0m\u001b[1m: method `is_available` is never used\u001b[0m\n \u001b[1m\u001b[94m--> \u001b[0msrc/search/mod.rs:89:12\n \u001b[1m\u001b[94m|\u001b[0m\n\u001b[1m\u001b[94m21\u001b[0m \u001b[1m\u001b[94m|\u001b[0m impl VectorSearcher {\n \u001b[1m\u001b[94m|\u001b[0m \u001b[1m\u001b[94m-------------------\u001b[0m \u001b[1m\u001b[94mmethod in this implementation\u001b[0m\n\u001b[1m\u001b[94m...\u001b[0m\n\u001b[1m\u001b[94m89\u001b[0m \u001b[1m\u001b[94m|\u001b[0m pub fn is_available(&self) -> bool {\n \u001b[1m\u001b[94m|\u001b[0m \u001b[1m\u001b[33m^^^^^^^^^^^^\u001b[0m\n\n"} {"$message_type":"diagnostic","message":"enum `BridgeMessage` is never used","code":{"code":"dead_code","explanation":null},"level":"warning","spans":[{"file_name":"src/web/bridge.rs","byte_start":186,"byte_end":199,"line_start":7,"line_end":7,"column_start":10,"column_end":23,"is_primary":true,"text":[{"text":"pub enum BridgeMessage {","highlight_start":10,"highlight_end":23}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null}],"children":[],"rendered":"\u001b[1m\u001b[33mwarning\u001b[0m\u001b[1m: enum `BridgeMessage` is never used\u001b[0m\n \u001b[1m\u001b[94m--> \u001b[0msrc/web/bridge.rs:7:10\n \u001b[1m\u001b[94m|\u001b[0m\n\u001b[1m\u001b[94m7\u001b[0m \u001b[1m\u001b[94m|\u001b[0m pub enum BridgeMessage {\n \u001b[1m\u001b[94m|\u001b[0m \u001b[1m\u001b[33m^^^^^^^^^^^^^\u001b[0m\n\n"} {"$message_type":"diagnostic","message":"enum `BridgeResponse` is never used","code":{"code":"dead_code","explanation":null},"level":"warning","spans":[{"file_name":"src/web/bridge.rs","byte_start":773,"byte_end":787,"line_start":43,"line_end":43,"column_start":10,"column_end":24,"is_primary":true,"text":[{"text":"pub enum BridgeResponse {","highlight_start":10,"highlight_end":24}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null}],"children":[],"rendered":"\u001b[1m\u001b[33mwarning\u001b[0m\u001b[1m: enum `BridgeResponse` is never used\u001b[0m\n \u001b[1m\u001b[94m--> \u001b[0msrc/web/bridge.rs:43:10\n \u001b[1m\u001b[94m|\u001b[0m\n\u001b[1m\u001b[94m43\u001b[0m \u001b[1m\u001b[94m|\u001b[0m pub enum BridgeResponse {\n \u001b[1m\u001b[94m|\u001b[0m \u001b[1m\u001b[33m^^^^^^^^^^^^^^\u001b[0m\n\n"} {"$message_type":"diagnostic","message":"struct `PlayerStateResponse` is never constructed","code":{"code":"dead_code","explanation":null},"level":"warning","spans":[{"file_name":"src/web/bridge.rs","byte_start":981,"byte_end":1000,"line_start":52,"line_end":52,"column_start":12,"column_end":31,"is_primary":true,"text":[{"text":"pub struct PlayerStateResponse {","highlight_start":12,"highlight_end":31}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null}],"children":[],"rendered":"\u001b[1m\u001b[33mwarning\u001b[0m\u001b[1m: struct `PlayerStateResponse` is never constructed\u001b[0m\n \u001b[1m\u001b[94m--> \u001b[0msrc/web/bridge.rs:52:12\n \u001b[1m\u001b[94m|\u001b[0m\n\u001b[1m\u001b[94m52\u001b[0m \u001b[1m\u001b[94m|\u001b[0m pub struct PlayerStateResponse {\n \u001b[1m\u001b[94m|\u001b[0m \u001b[1m\u001b[33m^^^^^^^^^^^^^^^^^^^\u001b[0m\n\n"} {"$message_type":"diagnostic","message":"struct `DetectionResponse` is never constructed","code":{"code":"dead_code","explanation":null},"level":"warning","spans":[{"file_name":"src/web/bridge.rs","byte_start":1341,"byte_end":1358,"line_start":67,"line_end":67,"column_start":12,"column_end":29,"is_primary":true,"text":[{"text":"pub struct DetectionResponse {","highlight_start":12,"highlight_end":29}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null}],"children":[],"rendered":"\u001b[1m\u001b[33mwarning\u001b[0m\u001b[1m: struct `DetectionResponse` is never constructed\u001b[0m\n \u001b[1m\u001b[94m--> \u001b[0msrc/web/bridge.rs:67:12\n \u001b[1m\u001b[94m|\u001b[0m\n\u001b[1m\u001b[94m67\u001b[0m \u001b[1m\u001b[94m|\u001b[0m pub struct DetectionResponse {\n \u001b[1m\u001b[94m|\u001b[0m \u001b[1m\u001b[33m^^^^^^^^^^^^^^^^^\u001b[0m\n\n"} {"$message_type":"diagnostic","message":"struct `WebBridge` is never constructed","code":{"code":"dead_code","explanation":null},"level":"warning","spans":[{"file_name":"src/web/bridge.rs","byte_start":1496,"byte_end":1505,"line_start":76,"line_end":76,"column_start":12,"column_end":21,"is_primary":true,"text":[{"text":"pub struct WebBridge;","highlight_start":12,"highlight_end":21}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null}],"children":[],"rendered":"\u001b[1m\u001b[33mwarning\u001b[0m\u001b[1m: struct `WebBridge` is never constructed\u001b[0m\n \u001b[1m\u001b[94m--> \u001b[0msrc/web/bridge.rs:76:12\n \u001b[1m\u001b[94m|\u001b[0m\n\u001b[1m\u001b[94m76\u001b[0m \u001b[1m\u001b[94m|\u001b[0m pub struct WebBridge;\n \u001b[1m\u001b[94m|\u001b[0m \u001b[1m\u001b[33m^^^^^^^^^\u001b[0m\n\n"} {"$message_type":"diagnostic","message":"associated functions `new`, `encode_message`, `decode_message`, and `encode_response` are never used","code":{"code":"dead_code","explanation":null},"level":"warning","spans":[{"file_name":"src/web/bridge.rs","byte_start":1508,"byte_end":1522,"line_start":78,"line_end":78,"column_start":1,"column_end":15,"is_primary":false,"text":[{"text":"impl WebBridge {","highlight_start":1,"highlight_end":15}],"label":"associated functions in this implementation","suggested_replacement":null,"suggestion_applicability":null,"expansion":null},{"file_name":"src/web/bridge.rs","byte_start":1536,"byte_end":1539,"line_start":79,"line_end":79,"column_start":12,"column_end":15,"is_primary":true,"text":[{"text":" pub fn new() -> Self {","highlight_start":12,"highlight_end":15}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null},{"file_name":"src/web/bridge.rs","byte_start":1583,"byte_end":1597,"line_start":83,"line_end":83,"column_start":12,"column_end":26,"is_primary":true,"text":[{"text":" pub fn encode_message(msg: &BridgeMessage) -> String {","highlight_start":12,"highlight_end":26}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null},{"file_name":"src/web/bridge.rs","byte_start":1704,"byte_end":1718,"line_start":87,"line_end":87,"column_start":12,"column_end":26,"is_primary":true,"text":[{"text":" pub fn decode_message(raw: &str) -> Option {","highlight_start":12,"highlight_end":26}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null},{"file_name":"src/web/bridge.rs","byte_start":1814,"byte_end":1829,"line_start":91,"line_end":91,"column_start":12,"column_end":27,"is_primary":true,"text":[{"text":" pub fn encode_response(resp: &BridgeResponse) -> String {","highlight_start":12,"highlight_end":27}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null}],"children":[],"rendered":"\u001b[1m\u001b[33mwarning\u001b[0m\u001b[1m: associated functions `new`, `encode_message`, `decode_message`, and `encode_response` are never used\u001b[0m\n \u001b[1m\u001b[94m--> \u001b[0msrc/web/bridge.rs:79:12\n \u001b[1m\u001b[94m|\u001b[0m\n\u001b[1m\u001b[94m78\u001b[0m \u001b[1m\u001b[94m|\u001b[0m impl WebBridge {\n \u001b[1m\u001b[94m|\u001b[0m \u001b[1m\u001b[94m--------------\u001b[0m \u001b[1m\u001b[94massociated functions in this implementation\u001b[0m\n\u001b[1m\u001b[94m79\u001b[0m \u001b[1m\u001b[94m|\u001b[0m pub fn new() -> Self {\n \u001b[1m\u001b[94m|\u001b[0m \u001b[1m\u001b[33m^^^\u001b[0m\n\u001b[1m\u001b[94m...\u001b[0m\n\u001b[1m\u001b[94m83\u001b[0m \u001b[1m\u001b[94m|\u001b[0m pub fn encode_message(msg: &BridgeMessage) -> String {\n \u001b[1m\u001b[94m|\u001b[0m \u001b[1m\u001b[33m^^^^^^^^^^^^^^\u001b[0m\n\u001b[1m\u001b[94m...\u001b[0m\n\u001b[1m\u001b[94m87\u001b[0m \u001b[1m\u001b[94m|\u001b[0m pub fn decode_message(raw: &str) -> Option {\n \u001b[1m\u001b[94m|\u001b[0m \u001b[1m\u001b[33m^^^^^^^^^^^^^^\u001b[0m\n\u001b[1m\u001b[94m...\u001b[0m\n\u001b[1m\u001b[94m91\u001b[0m \u001b[1m\u001b[94m|\u001b[0m pub fn encode_response(resp: &BridgeResponse) -> String {\n \u001b[1m\u001b[94m|\u001b[0m \u001b[1m\u001b[33m^^^^^^^^^^^^^^^\u001b[0m\n\n"} -{"$message_type":"diagnostic","message":"28 warnings emitted","code":null,"level":"warning","spans":[],"children":[],"rendered":"\u001b[1m\u001b[33mwarning\u001b[0m\u001b[1m: 28 warnings emitted\u001b[0m\n\n"} +{"$message_type":"diagnostic","message":"31 warnings emitted","code":null,"level":"warning","spans":[],"children":[],"rendered":"\u001b[1m\u001b[33mwarning\u001b[0m\u001b[1m: 31 warnings emitted\u001b[0m\n\n"} diff --git a/target/release/deps/momentry-d0e10ec51fcac34b b/target/release/deps/momentry-d0e10ec51fcac34b index d005089..2790188 100755 Binary files a/target/release/deps/momentry-d0e10ec51fcac34b and b/target/release/deps/momentry-d0e10ec51fcac34b differ diff --git a/target/release/deps/momentry-d0e10ec51fcac34b.d b/target/release/deps/momentry-d0e10ec51fcac34b.d index e4e04c8..a081405 100644 --- a/target/release/deps/momentry-d0e10ec51fcac34b.d +++ b/target/release/deps/momentry-d0e10ec51fcac34b.d @@ -1,6 +1,6 @@ -/Users/accusys/momentry_playground/target/release/deps/momentry-d0e10ec51fcac34b.d: src/main.rs src/config.rs src/overlay/mod.rs src/overlay/asr.rs src/overlay/chunk.rs src/overlay/yolo.rs src/player/mod.rs src/player/audio.rs src/player/ffmpeg.rs src/player/renderer.rs src/player/state.rs src/player/video.rs src/web/mod.rs src/web/bridge.rs +/Users/accusys/momentry_playground/target/release/deps/momentry-d0e10ec51fcac34b.d: src/main.rs src/config.rs src/overlay/mod.rs src/overlay/asr.rs src/overlay/chunk.rs src/overlay/yolo.rs src/player/mod.rs src/player/audio.rs src/player/ffmpeg.rs src/player/renderer.rs src/player/state.rs src/player/video.rs src/search/mod.rs src/web/mod.rs src/web/bridge.rs -/Users/accusys/momentry_playground/target/release/deps/momentry-d0e10ec51fcac34b: src/main.rs src/config.rs src/overlay/mod.rs src/overlay/asr.rs src/overlay/chunk.rs src/overlay/yolo.rs src/player/mod.rs src/player/audio.rs src/player/ffmpeg.rs src/player/renderer.rs src/player/state.rs src/player/video.rs src/web/mod.rs src/web/bridge.rs +/Users/accusys/momentry_playground/target/release/deps/momentry-d0e10ec51fcac34b: src/main.rs src/config.rs src/overlay/mod.rs src/overlay/asr.rs src/overlay/chunk.rs src/overlay/yolo.rs src/player/mod.rs src/player/audio.rs src/player/ffmpeg.rs src/player/renderer.rs src/player/state.rs src/player/video.rs src/search/mod.rs src/web/mod.rs src/web/bridge.rs src/main.rs: src/config.rs: @@ -14,5 +14,6 @@ src/player/ffmpeg.rs: src/player/renderer.rs: src/player/state.rs: src/player/video.rs: +src/search/mod.rs: src/web/mod.rs: src/web/bridge.rs: diff --git a/target/release/momentry b/target/release/momentry index d005089..2790188 100755 Binary files a/target/release/momentry and b/target/release/momentry differ diff --git a/target/release/momentry.d b/target/release/momentry.d index 3a4a623..83f67eb 100644 --- a/target/release/momentry.d +++ b/target/release/momentry.d @@ -1 +1 @@ -/Users/accusys/momentry_playground/target/release/momentry: /Users/accusys/momentry_playground/src/config.rs /Users/accusys/momentry_playground/src/lib.rs /Users/accusys/momentry_playground/src/main.rs /Users/accusys/momentry_playground/src/overlay/asr.rs /Users/accusys/momentry_playground/src/overlay/chunk.rs /Users/accusys/momentry_playground/src/overlay/mod.rs /Users/accusys/momentry_playground/src/overlay/yolo.rs /Users/accusys/momentry_playground/src/player/audio.rs /Users/accusys/momentry_playground/src/player/ffmpeg.rs /Users/accusys/momentry_playground/src/player/mod.rs /Users/accusys/momentry_playground/src/player/renderer.rs /Users/accusys/momentry_playground/src/player/state.rs /Users/accusys/momentry_playground/src/player/video.rs /Users/accusys/momentry_playground/src/web/bridge.rs /Users/accusys/momentry_playground/src/web/mod.rs +/Users/accusys/momentry_playground/target/release/momentry: /Users/accusys/momentry_playground/src/config.rs /Users/accusys/momentry_playground/src/lib.rs /Users/accusys/momentry_playground/src/main.rs /Users/accusys/momentry_playground/src/overlay/asr.rs /Users/accusys/momentry_playground/src/overlay/chunk.rs /Users/accusys/momentry_playground/src/overlay/mod.rs /Users/accusys/momentry_playground/src/overlay/yolo.rs /Users/accusys/momentry_playground/src/player/audio.rs /Users/accusys/momentry_playground/src/player/ffmpeg.rs /Users/accusys/momentry_playground/src/player/mod.rs /Users/accusys/momentry_playground/src/player/renderer.rs /Users/accusys/momentry_playground/src/player/state.rs /Users/accusys/momentry_playground/src/player/video.rs /Users/accusys/momentry_playground/src/search/mod.rs /Users/accusys/momentry_playground/src/web/bridge.rs /Users/accusys/momentry_playground/src/web/mod.rs