//! MovieMapper Rust Implementation //! //! A Rust-based version of MovieMapper for organizing and managing movie and TV show collections. //! //! # Features //! //! - Directory browsing and media scanning //! - TVDB API integration for show search and management //! - File metadata extraction using FFmpeg //! - File tagging and organization //! - Episode mapping to Jellyfin naming convention //! - Audit logging //! //! # Example //! //! ```rust,no_run //! use movie_mapper::service::file_scanner::FileScanner; //! use movie_mapper::service::tvdb_api::TVDBClient; //! use std::path::Path; //! //! #[tokio::main] //! async fn main() { //! // Initialize file scanner //! let scanner = FileScanner::new(); //! //! // Scan a directory (progress_callback is optional) //! let files = scanner //! .scan_directory(Path::new("/path/to/media"), None) //! .await //! .unwrap(); //! //! // Initialize TVDB client (TVDBClient::new is not async) //! let mut tvdb = TVDBClient::new("your-api-key").unwrap(); //! //! // Authenticate (this is async) //! tvdb.authenticate().await.unwrap(); //! //! // Search for a show //! let shows = tvdb.search("Breaking Bad").await.unwrap(); //! //! // Fetch show details //! let details = tvdb.get_show_details(shows[0].id).await.unwrap(); //! //! println!("Found {} results", shows.len()); //! } //! ``` pub mod model; pub mod service; pub mod utils; pub use model::{Episode, MediaFile, Season, Show, ShowDetails, TaggedFile}; pub use service::{ AuditLogger, FileMapper, FileScanner, MetadataExtractor, TVDBClient, TagManager, }; pub use utils::{FileError, MappingError, MetadataError, Result, ScannerError, TVDBError};