Skip to main content

avatarr_parser/episode/
mod.rs

1// Ported from Sonarr v4.0.17.2952 (97e85a90):
2//   src/NzbDrone.Core/Parser/Parser.cs
3
4mod parser;
5pub(crate) mod regexes;
6
7pub use parser::parse_title;
8
9/// Result of parsing a release title for episode information.
10#[derive(Debug, Clone, PartialEq, Eq)]
11pub struct ParsedEpisodeInfo {
12    pub series_title: String,
13    pub season_number: i32,
14    pub episode_numbers: Vec<i32>,
15    pub full_season: bool,
16    pub is_partial_season: bool,
17    pub is_multi_season: bool,
18    pub season_part: i32,
19    pub is_season_extra: bool,
20    pub is_split_episode: bool,
21    pub special: bool,
22    /// Daily episode air-year (Sonarr-faithful: 0 means "not a daily"). m53.
23    pub air_year: i32,
24    /// Daily episode air-month (1-12, 0 if not a daily). m53.
25    pub air_month: i32,
26    /// Daily episode air-day (1-31, 0 if not a daily). m53.
27    pub air_day: i32,
28    /// Absolute (anime) episode numbers. m53.
29    pub absolute_episode_numbers: Vec<i32>,
30    /// Release-hash token (e.g. trailing `[6B7FD717]` on anime). m53.
31    pub release_hash: Option<String>,
32    /// Release group (e.g. `LOL`, `NTb-Eng`); populated by parse_title from release_group module. m53.
33    pub release_group: Option<String>,
34    /// Daily episode part number (e.g. Part 1 of a multi-part daily). m53.
35    pub daily_part: Option<i32>,
36    /// Release version (1 = original, 2+ = v2/v3 revisions). m55.
37    pub version: i32,
38}
39
40impl Default for ParsedEpisodeInfo {
41    fn default() -> Self {
42        Self {
43            series_title: String::new(),
44            season_number: 0,
45            episode_numbers: Vec::new(),
46            full_season: false,
47            is_partial_season: false,
48            is_multi_season: false,
49            season_part: 0,
50            is_season_extra: false,
51            is_split_episode: false,
52            special: false,
53            air_year: 0,
54            air_month: 0,
55            air_day: 0,
56            absolute_episode_numbers: Vec::new(),
57            release_hash: None,
58            release_group: None,
59            daily_part: None,
60            version: 1,
61        }
62    }
63}