pub mod finder;
pub mod parser;
pub use parser::{parse_quality, parse_quality_name};
#[repr(i32)]
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Default)]
pub enum Quality {
#[default]
Unknown = 0,
Sdtv = 1,
Dvd = 2,
Webdl1080p = 3,
Hdtv720p = 4,
Webdl720p = 5,
Bluray720p = 6,
Bluray1080p = 7,
Webdl480p = 8,
Hdtv1080p = 9,
RawHd = 10,
Webrip480p = 12,
Bluray480p = 13,
Webrip720p = 14,
Webrip1080p = 15,
Hdtv2160p = 16,
Webrip2160p = 17,
Webdl2160p = 18,
Bluray2160p = 19,
Bluray1080pRemux = 20,
Bluray2160pRemux = 21,
Bluray576p = 22,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Default)]
pub enum QualitySource {
#[default]
Unknown,
Television,
TelevisionRaw,
Web,
WebRip,
Dvd,
Bluray,
BlurayRaw,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Default)]
pub enum Resolution {
#[default]
Unknown,
R360p,
R480p,
R540p,
R576p,
R720p,
R1080p,
R2160p,
}
impl Resolution {
pub fn pixels(self) -> u32 {
match self {
Resolution::R360p => 360,
Resolution::R480p => 480,
Resolution::R540p => 540,
Resolution::R576p => 576,
Resolution::R720p => 720,
Resolution::R1080p => 1080,
Resolution::R2160p => 2160,
Resolution::Unknown => 0,
}
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Default)]
pub enum QualityDetectionSource {
#[default]
Unknown,
Name,
Extension,
MediaInfo,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
pub struct Revision {
pub version: u32,
pub real: u32,
pub is_repack: bool,
}
impl Default for Revision {
fn default() -> Self {
Self {
version: 1,
real: 0,
is_repack: false,
}
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Default)]
pub struct QualityModel {
pub quality: Quality,
pub revision: Revision,
pub source_detection_source: QualityDetectionSource,
pub resolution_detection_source: QualityDetectionSource,
pub revision_detection_source: QualityDetectionSource,
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn quality_constants_have_expected_ids() {
assert_eq!(Quality::Unknown as i32, 0);
assert_eq!(Quality::Sdtv as i32, 1);
assert_eq!(Quality::Webdl1080p as i32, 3);
assert_eq!(Quality::Bluray2160pRemux as i32, 21);
assert_eq!(Quality::Bluray576p as i32, 22);
}
#[test]
fn quality_model_default_is_unknown() {
let model = QualityModel::default();
assert_eq!(model.quality, Quality::Unknown);
assert_eq!(model.revision.version, 1);
assert!(!model.revision.is_repack);
assert_eq!(model.revision.real, 0);
}
}