{"record":{"id":"eb9a0215cb8eb360","repo":"Zackriya-Solutions/meetily","slug":"no-audio-file-found-in","errorCode":null,"errorMessage":"No audio file found in: {}","messagePattern":"No audio file found in: (.+?)","errorType":"exception","errorClass":"anyhow::Error","httpStatus":null,"severity":"error","filePath":"frontend/src-tauri/src/audio/retranscription.rs","lineNumber":168,"sourceCode":"        if path.exists() {\n            return Ok(path);\n        }\n    }\n\n    // Fallback: scan folder for any file with an audio extension\n    if let Ok(entries) = std::fs::read_dir(folder) {\n        for entry in entries.flatten() {\n            let path = entry.path();\n            if let Some(ext) = path.extension() {\n                let ext = ext.to_string_lossy().to_lowercase();\n                if AUDIO_EXTENSIONS.contains(&ext.as_str()) {\n                    return Ok(path);\n                }\n            }\n        }\n    }\n\n    Err(anyhow!(\"No audio file found in: {}\", folder.display()))\n}\n\n/// Internal function to run retranscription\nasync fn run_retranscription<R: Runtime>(\n    app: AppHandle<R>,\n    meeting_id: String,\n    meeting_folder_path: String,\n    language: Option<String>,\n    model: Option<String>,\n    provider: Option<String>,\n) -> Result<RetranscriptionResult> {\n    let folder_path = PathBuf::from(&meeting_folder_path);\n    let audio_path = find_audio_file(&folder_path)?;\n\n    // Determine which provider to use (default to whisper)\n    let use_parakeet = provider.as_deref() == Some(\"parakeet\");\n\n    info!(","sourceCodeStart":150,"sourceCodeEnd":186,"githubUrl":"https://github.com/Zackriya-Solutions/meetily/blob/0281737d87d26352fb0adc78c8c0975f691b23d1/frontend/src-tauri/src/audio/retranscription.rs#L150-L186","documentation":"find_audio_file walked the meeting folder and found no file whose (lowercased) extension is in AUDIO_EXTENSIONS ('mp4', 'm4a', 'wav', 'mp3', 'flac', 'ogg', 'aac', 'mkv', 'webm', 'wma'). Retranscription needs source audio, so it aborts before any progress is emitted.","triggerScenarios":"The meeting folder contains only transcripts/summaries because audio was never saved (auto-save off and app closed) or was deleted by the user; the audio file has an extension outside the whitelist; the passed meeting_folder_path points to the wrong or renamed directory.","commonSituations":"Retranscribing old meetings recorded before auto-save existed; users cleaning up disk space by deleting large audio files; files renamed to .mpeg or other unlisted extensions.","solutions":["List the meeting folder and confirm an audio file exists with a supported extension (mp4/m4a/wav/mp3/flac/ogg/aac/mkv/webm/wma)","Rename the file to a supported extension, or extend AUDIO_EXTENSIONS in audio/constants.rs to cover it","Verify meeting_folder_path matches the actual meeting directory"],"exampleFix":"// before\nErr(anyhow!(\"No audio file found in: {}\", folder.display()))\n\n// after - include what was actually looked for and found, so users can self-diagnose\nlet contents: Vec<String> = std::fs::read_dir(folder)?\n    .flatten()\n    .map(|e| e.file_name().to_string_lossy().into_owned())\n    .collect();\nErr(anyhow!(\n    \"No audio file with extension in {:?} found in {} (folder contents: {:?})\",\n    AUDIO_EXTENSIONS,\n    folder.display(),\n    contents\n))","handlingStrategy":"validation","validationCode":"// Frontend/backend: only offer retranscription when source audio exists\nfn has_audio_file(folder: &std::path::Path) -> bool {\n    const EXTS: [&str; 10] = [\"mp4\", \"m4a\", \"wav\", \"mp3\", \"flac\", \"ogg\", \"aac\", \"mkv\", \"webm\", \"wma\"];\n    std::fs::read_dir(folder)\n        .map(|entries| {\n            entries.flatten().any(|e| {\n                e.path()\n                    .extension()\n                    .map(|x| EXTS.contains(&x.to_string_lossy().to_lowercase().as_str()))\n                    .unwrap_or(false)\n            })\n        })\n        .unwrap_or(false)\n}","typeGuard":null,"tryCatchPattern":"Catch 'No audio file found' and present it as a precondition message ('This meeting has no stored audio to retranscribe') rather than a generic error; keep the rest of the meeting data intact.","preventionTips":["Verify the meeting folder contains an AUDIO_EXTENSIONS file before showing the Retranscribe action","Keep auto-save on so meetings always retain their audio file","When adding support for new audio formats, extend AUDIO_EXTENSIONS in audio/constants.rs and its tests"],"tags":["file-not-found","retranscription","audio-file","extension-allowlist"],"backgroundTag":"file-not-found","analyzedSha":"0281737d87d26352fb0adc78c8c0975f691b23d1","analyzedAt":"2026-08-16T20:57:52.567Z","schemaVersion":2},"datasetVersion":"2026-08-16T23:17:17.608Z"}