execute

Function execute 

Source
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

  1. Configuration Loading: Load application and conversion settings
  2. Format Detection: Automatically detect input subtitle format
  3. Conversion Setup: Configure converter with user preferences
  4. Processing: Transform subtitle content to target format
  5. Validation: Verify output quality and format compliance
  6. 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 path
    • format: Target output format (SRT, ASS, VTT, SUB)
    • output: Optional output path (auto-generated if not specified)
    • keep_original: Whether to preserve original files
    • encoding: 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