add role to membership history

This commit is contained in:
Robin Appelman 2025-04-15 21:57:14 +02:00
commit 7d04d93948
4 changed files with 335 additions and 162 deletions

View file

@ -1,5 +1,5 @@
use super::Parser; use super::Parser;
use crate::data::{RosterHistory, TeamRosterData}; use crate::data::{RosterHistory, TeamRosterData, MembershipRole};
use crate::parser::{select_text, ROSTER_HISTORY_DATE_FORMAT}; use crate::parser::{select_text, ROSTER_HISTORY_DATE_FORMAT};
use crate::{ParseError, Result}; use crate::{ParseError, Result};
use scraper::{Html, Selector}; use scraper::{Html, Selector};
@ -10,6 +10,7 @@ const SELECTOR_ROSTER_ITEM: &str =
".container .white-row-small .row-fluid > .col-md-12 > .clearfix"; ".container .white-row-small .row-fluid > .col-md-12 > .clearfix";
const SELECTOR_ROSTER_NAME: &str = "h5 b"; const SELECTOR_ROSTER_NAME: &str = "h5 b";
const SELECTOR_ROSTER_ID: &str = "h5 small"; const SELECTOR_ROSTER_ID: &str = "h5 small";
const SELECTOR_ROSTER_ROLE: &str = "div > small";
const SELECTOR_ROSTER_JOINED: &str = "span.text-success small"; const SELECTOR_ROSTER_JOINED: &str = "span.text-success small";
const SELECTOR_ROSTER_LEFT: &str = "span.text-danger small"; const SELECTOR_ROSTER_LEFT: &str = "span.text-danger small";
@ -22,6 +23,7 @@ pub struct TeamRosterHistoryParser {
selector_joined: Selector, selector_joined: Selector,
selector_left: Selector, selector_left: Selector,
selector_steam_group: Selector, selector_steam_group: Selector,
selector_role: Selector,
} }
impl Default for TeamRosterHistoryParser { impl Default for TeamRosterHistoryParser {
@ -39,6 +41,7 @@ impl TeamRosterHistoryParser {
selector_joined: Selector::parse(SELECTOR_ROSTER_JOINED).unwrap(), selector_joined: Selector::parse(SELECTOR_ROSTER_JOINED).unwrap(),
selector_left: Selector::parse(SELECTOR_ROSTER_LEFT).unwrap(), selector_left: Selector::parse(SELECTOR_ROSTER_LEFT).unwrap(),
selector_steam_group: Selector::parse(SELECTOR_STEAM).unwrap(), selector_steam_group: Selector::parse(SELECTOR_STEAM).unwrap(),
selector_role: Selector::parse(SELECTOR_ROSTER_ROLE).unwrap(),
} }
} }
} }
@ -74,6 +77,13 @@ impl Parser for TeamRosterHistoryParser {
}, },
)?; )?;
let left = select_text(item, &self.selector_left); let left = select_text(item, &self.selector_left);
let role = select_text(item, &self.selector_role)
.ok_or(ParseError::ElementNotFound {
selector: SELECTOR_ROSTER_ROLE,
role: "member role",
})?
.trim_start_matches("Former ")
.parse::<MembershipRole>().unwrap_or(MembershipRole::Member);
Ok(RosterHistory { Ok(RosterHistory {
name: name.to_string(), name: name.to_string(),
@ -99,6 +109,7 @@ impl Parser for TeamRosterHistoryParser {
}) })
}) })
.transpose()?, .transpose()?,
role,
}) })
}) })
.collect::<Result<Vec<_>>>()?; .collect::<Result<Vec<_>>>()?;

File diff suppressed because it is too large Load diff

View file

@ -9,25 +9,29 @@ expression: parsed
"name": "elwood", "name": "elwood",
"steam_id": "76561197961197074", "steam_id": "76561197961197074",
"joined": "2007-10-04", "joined": "2007-10-04",
"left": "2008-01-14" "left": "2008-01-14",
"role": "member"
}, },
{ {
"name": "crumbles", "name": "crumbles",
"steam_id": "76561197963844061", "steam_id": "76561197963844061",
"joined": "2007-10-04", "joined": "2007-10-04",
"left": "2008-01-14" "left": "2008-01-14",
"role": "member"
}, },
{ {
"name": "AO", "name": "AO",
"steam_id": "76561197960464501", "steam_id": "76561197960464501",
"joined": "2007-10-04", "joined": "2007-10-04",
"left": "2008-01-14" "left": "2008-01-14",
"role": "member"
}, },
{ {
"name": "Klone", "name": "Klone",
"steam_id": "76561197961272077", "steam_id": "76561197961272077",
"joined": "2007-10-04", "joined": "2007-10-04",
"left": "2008-01-14" "left": "2008-01-14",
"role": "member"
} }
] ]
} }

View file

@ -248,6 +248,7 @@ pub struct RosterHistory {
pub joined: Date, pub joined: Date,
#[cfg_attr(feature = "serde", serde(with = "serde_date::opt"))] #[cfg_attr(feature = "serde", serde(with = "serde_date::opt"))]
pub left: Option<Date>, pub left: Option<Date>,
pub role: MembershipRole,
} }
#[derive(Debug, Clone)] #[derive(Debug, Clone)]