From c6544ab0347556e0f4f41a8d5cb108a75e99000e Mon Sep 17 00:00:00 2001 From: Andrew Phillips Date: Tue, 26 Aug 2025 17:30:38 -0300 Subject: [PATCH] refactor: extract magic type processing into helper function Co-authored-by: aider (openai/andrew/openrouter/deepseek/deepseek-chat-v3.1) --- src/meta_plugin/magic.rs | 160 +++++++++++++++------------------------ 1 file changed, 61 insertions(+), 99 deletions(-) diff --git a/src/meta_plugin/magic.rs b/src/meta_plugin/magic.rs index ff58533..7de51c7 100644 --- a/src/meta_plugin/magic.rs +++ b/src/meta_plugin/magic.rs @@ -90,90 +90,79 @@ impl MagicFileMetaPlugin { } } - fn save_all_magic_metadata(&mut self, conn: &Connection) -> Result<()> { - if let Some(item_id) = self.item_id { - // Save all three magic outputs: mime_type, mime_encoding, and file_type - if let Ok(mime_type) = self.get_magic_result(CookieFlags::MIME_TYPE) { - if !mime_type.is_empty() { - let _ = self.save_meta(conn, item_id, "mime_type", mime_type); + /// Helper function to process all magic types and collect metadata + fn process_magic_types(&self, item_id: i64) -> Vec { + let mut metadata = Vec::new(); + + // Define the types to process with their corresponding flags + let types_to_process = [ + ("mime_type", CookieFlags::MIME_TYPE), + ("mime_encoding", CookieFlags::MIME_ENCODING), + ("file_type", CookieFlags::default()), + ]; + + for (name, flags) in types_to_process { + if let Ok(result) = self.get_magic_result(flags) { + if !result.is_empty() { + // Use process_metadata_outputs to handle output mapping + if let Some(meta_data) = crate::meta_plugin::process_metadata_outputs( + name, + result, + &self.outputs + ) { + metadata.push(meta_data); + } } } - - if let Ok(mime_encoding) = self.get_magic_result(CookieFlags::MIME_ENCODING) { - if !mime_encoding.is_empty() { - let _ = self.save_meta(conn, item_id, "mime_encoding", mime_encoding); - } - } - - if let Ok(file_type) = self.get_magic_result(CookieFlags::default()) { - if !file_type.is_empty() { - let _ = self.save_meta(conn, item_id, "file_type", file_type); - } - } - - self.is_saved = true; } - Ok(()) + + metadata } } impl MetaPlugin for MagicFileMetaPlugin { - fn initialize(&mut self, item_id: i64) -> Result { + fn initialize(&mut self, item_id: i64) -> crate::meta_plugin::MetaPluginResponse { self.item_id = Some(item_id); // Initialize the magic cookie once - let cookie = Cookie::open(Default::default()) - .map_err(|e| anyhow::anyhow!("Failed to open magic cookie: {}", e))?; - cookie.load(&[] as &[&str]) - .map_err(|e| anyhow::anyhow!("Failed to load magic database: {}", e))?; + let cookie = match Cookie::open(Default::default()) { + Ok(cookie) => cookie, + Err(e) => { + return crate::meta_plugin::MetaPluginResponse { + metadata: Vec::new(), + is_finalized: true, + }; + } + }; + if let Err(e) = cookie.load(&[] as &[&str]) { + return crate::meta_plugin::MetaPluginResponse { + metadata: Vec::new(), + is_finalized: true, + }; + } self.cookie = Some(cookie); - Ok(MetaPluginResponse::default()) - } - - fn finalize(&mut self) -> Result { - let mut metadata = Vec::new(); - - // Save all magic metadata if not already saved - if let Some(item_id) = self.item_id { - if let Some(cookie) = &self.cookie { - // Get mime type - if let Ok(mime_type) = self.get_magic_result(CookieFlags::MIME_TYPE) { - if !mime_type.is_empty() { - if let Some(meta) = self.create_meta(item_id, "mime_type", mime_type) { - metadata.push(meta); - } - } - } - - // Get mime encoding - if let Ok(mime_encoding) = self.get_magic_result(CookieFlags::MIME_ENCODING) { - if !mime_encoding.is_empty() { - if let Some(meta) = self.create_meta(item_id, "mime_encoding", mime_encoding) { - metadata.push(meta); - } - } - } - - // Get file type - if let Ok(file_type) = self.get_magic_result(CookieFlags::default()) { - if !file_type.is_empty() { - if let Some(meta) = self.create_meta(item_id, "file_type", file_type) { - metadata.push(meta); - } - } - } - } + crate::meta_plugin::MetaPluginResponse { + metadata: Vec::new(), + is_finalized: false, } - - Ok(MetaPluginResponse { - metadata: if metadata.is_empty() { None } else { Some(metadata) }, - is_finalized: true, - }) } - fn update(&mut self, data: &[u8]) -> Result { + fn finalize(&mut self) -> crate::meta_plugin::MetaPluginResponse { + let metadata = if let Some(item_id) = self.item_id { + self.process_magic_types(item_id) + } else { + Vec::new() + }; + + crate::meta_plugin::MetaPluginResponse { + metadata, + is_finalized: true, + } + } + + fn update(&mut self, data: &[u8]) -> crate::meta_plugin::MetaPluginResponse { let mut metadata = Vec::new(); // Only collect up to max_buffer_size @@ -185,42 +174,15 @@ impl MetaPlugin for MagicFileMetaPlugin { // Check if we've reached our buffer limit and return metadata if self.buffer.len() >= self.max_buffer_size { if let Some(item_id) = self.item_id { - if let Some(cookie) = &self.cookie { - // Get mime type - if let Ok(mime_type) = self.get_magic_result(CookieFlags::MIME_TYPE) { - if !mime_type.is_empty() { - if let Some(meta) = self.create_meta(item_id, "mime_type", mime_type) { - metadata.push(meta); - } - } - } - - // Get mime encoding - if let Ok(mime_encoding) = self.get_magic_result(CookieFlags::MIME_ENCODING) { - if !mime_encoding.is_empty() { - if let Some(meta) = self.create_meta(item_id, "mime_encoding", mime_encoding) { - metadata.push(meta); - } - } - } - - // Get file type - if let Ok(file_type) = self.get_magic_result(CookieFlags::default()) { - if !file_type.is_empty() { - if let Some(meta) = self.create_meta(item_id, "file_type", file_type) { - metadata.push(meta); - } - } - } - } + metadata = self.process_magic_types(item_id); } } } - Ok(MetaPluginResponse { - metadata: if metadata.is_empty() { None } else { Some(metadata) }, + crate::meta_plugin::MetaPluginResponse { + metadata, is_finalized: !metadata.is_empty(), - }) + } } fn meta_name(&self) -> String {