use crate::actions::transmission::client::TransmissionClient; use crate::actions::transmission::config::TransmissionConfig; use crate::db::{Database, TransmissionProcessedTable}; use color_eyre::eyre::Result; use log::{debug, info, warn}; /// Action for submitting magnet links to Transmission pub struct TransmissionAction { client: TransmissionClient, db: Database, } impl TransmissionAction { pub async fn new(config: &TransmissionConfig, db: Database) -> Result { let client = TransmissionClient::new(config)?; Ok(TransmissionAction { client, db }) } /// Process all unprocessed magnet links pub async fn process_unprocessed_magnets(&mut self) -> Result { let unprocessed_magnets = self .db .get_unprocessed_magnets_for_table::()?; let mut processed_count = 0; for magnet in unprocessed_magnets { if let Some(id) = magnet.id { match self.client.submit_magnet(&magnet.link).await { Ok(_) => { info!( "Successfully submitted magnet link to Transmission: {}", magnet.title ); debug!("Magnet link: {}", magnet.link); self.db .mark_magnet_processed_for_table::(id)?; processed_count += 1; } Err(e) => { warn!("Failed to submit magnet link to Transmission: {}", e); } } } else { warn!("Skipping magnet with null ID: {}", magnet.link); } } Ok(processed_count) } }