pub async fn execute(
args: ConvertArgs,
config_service: &dyn ConfigService,
) -> Result<()>Expand description
Execute subtitle format conversion with comprehensive validation and error handling.
This function orchestrates the complete conversion workflow, from configuration loading through final output validation. It supports both single file and batch directory processing with intelligent format detection and preservation of subtitle quality.
§Conversion Process
- Configuration Loading: Load application and conversion settings
- Format Detection: Automatically detect input subtitle format
- Conversion Setup: Configure converter with user preferences
- Processing: Transform subtitle content to target format
- Validation: Verify output quality and format compliance
- File Management: Handle backups and output file creation
§Format Mapping
The conversion process intelligently maps features between formats:
§SRT to ASS
- Basic text → Advanced styling capabilities
- Simple timing → Precise timing control
- Limited formatting → Rich formatting options
§ASS to SRT
- Rich styling → Basic formatting preservation
- Advanced timing → Standard timing format
- Complex layouts → Simplified text positioning
§Any to VTT
- Format-specific features → Web-compatible equivalents
- Custom styling → CSS-like styling syntax
- Traditional timing → WebVTT timing format
§Configuration Integration
The function respects multiple configuration sources:
[formats]
default_output = "srt" # Default output format
preserve_styling = true # Maintain formatting where possible
validate_output = true # Perform output validation
backup_enabled = true # Create backups before conversion§Arguments
args- Conversion arguments containing:input: Source file or directory pathformat: Target output format (SRT, ASS, VTT, SUB)output: Optional output path (auto-generated if not specified)keep_original: Whether to preserve original filesencoding: Character encoding for input/output files
§Returns
Returns Ok(()) on successful conversion, or an error describing:
- Configuration loading failures
- Input file access or format problems
- Conversion processing errors
- Output file creation or validation issues
§Error Handling
Comprehensive error handling covers:
- Input Validation: File existence, format detection, accessibility
- Processing Errors: Conversion failures, content corruption
- Output Issues: Write permissions, disk space, format validation
- Configuration Problems: Invalid settings, missing dependencies
§File Safety
The conversion process ensures file safety through:
- Atomic Operations: Complete conversion or no changes
- Backup Creation: Original files preserved when requested
- Validation: Output quality verification before finalization
- Rollback Capability: Ability to undo changes if problems occur
§Examples
ⓘ
use subx_cli::cli::{ConvertArgs, OutputSubtitleFormat};
use subx_cli::commands::convert_command;
use std::path::PathBuf;
// Convert with explicit output path
let explicit_args = ConvertArgs {
input: PathBuf::from("movie.srt"),
format: Some(OutputSubtitleFormat::Ass),
output: Some(PathBuf::from("movie_styled.ass")),
keep_original: true,
encoding: "utf-8".to_string(),
};
convert_command::execute(explicit_args).await?;
// Convert with automatic output naming
let auto_args = ConvertArgs {
input: PathBuf::from("episode.srt"),
format: Some(OutputSubtitleFormat::Vtt),
output: None, // Will become "episode.vtt"
keep_original: false,
encoding: "utf-8".to_string(),
};
convert_command::execute(auto_args).await?;
// Batch convert directory
let batch_args = ConvertArgs {
input: PathBuf::from("./season1_subtitles/"),
format: Some(OutputSubtitleFormat::Srt),
output: None,
keep_original: true,
encoding: "utf-8".to_string(),
};
convert_command::execute(batch_args).await?;§Performance Considerations
- Memory Efficiency: Streaming processing for large subtitle files
- Disk I/O Optimization: Efficient file access patterns
- Batch Processing: Optimized for multiple file operations
- Validation Caching: Avoid redundant quality checks