use serde::{Deserialize, Serialize};
use crate::backoff::BackoffStrategy;
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
#[serde(rename_all = "lowercase")]
pub enum StreamCategory {
Alive,
Dead,
Geoblocked,
Retry,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct CheckOptions {
pub timeout_ms: u64,
pub max_concurrent: usize,
pub follow_redirects: bool,
pub user_agent: Option<String>,
pub accept_invalid_certs: bool,
pub backoff: BackoffStrategy,
pub retries: u32,
pub proxy_list: Option<Vec<String>>,
pub test_geoblock: bool,
pub min_bytes_direct: u64,
pub min_bytes_nested: u64,
pub skip_media_probe: bool,
pub skip_screenshots: bool,
pub screenshot_dir: Option<String>,
}
impl Default for CheckOptions {
fn default() -> Self {
Self {
timeout_ms: 10_000,
max_concurrent: 10,
follow_redirects: true,
user_agent: Some("VLC/3.0.14 LibVLC/3.0.14".to_string()),
accept_invalid_certs: false,
backoff: BackoffStrategy::default(),
retries: 6,
proxy_list: None,
test_geoblock: false,
min_bytes_direct: 512_000, min_bytes_nested: 131_072, skip_media_probe: false,
skip_screenshots: false,
screenshot_dir: None,
}
}
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct StreamInfo {
pub available: bool,
pub status_code: Option<u16>,
pub response_time_ms: u64,
pub content_type: Option<String>,
pub content_length: Option<u64>,
pub error: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct CheckResult {
pub url: String,
pub info: StreamInfo,
pub checked_at: chrono::DateTime<chrono::Utc>,
pub media_info: Option<crispy_media_probe::MediaInfo>,
pub category: StreamCategory,
pub error_reason: Option<String>,
pub mismatch_warnings: Vec<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct BulkCheckReport {
pub total: usize,
pub available: usize,
pub unavailable: usize,
pub errors: usize,
pub geoblocked: usize,
pub results: Vec<CheckResult>,
pub duration_ms: u64,
pub alive_results: Vec<CheckResult>,
pub dead_results: Vec<CheckResult>,
pub geoblocked_results: Vec<CheckResult>,
}