optional team image

This commit is contained in:
Robin Appelman 2025-04-14 23:11:31 +02:00
commit f6e157363c
6 changed files with 980 additions and 21 deletions

4
api-server/Cargo.lock generated
View file

@ -1964,7 +1964,7 @@ dependencies = [
[[package]] [[package]]
name = "ugc-scraper" name = "ugc-scraper"
version = "0.5.0" version = "0.5.0"
source = "git+https://github.com/icewind1991/ugc-scaper#2d1565117d2b9e9933c0608f00809f6815420156" source = "git+https://github.com/icewind1991/ugc-scaper#11fd39295c24cabb6198be51f0107df9cfb740e7"
dependencies = [ dependencies = [
"regex", "regex",
"reqwest", "reqwest",
@ -1979,7 +1979,7 @@ dependencies = [
[[package]] [[package]]
name = "ugc-scraper-types" name = "ugc-scraper-types"
version = "0.2.0" version = "0.2.0"
source = "git+https://github.com/icewind1991/ugc-scaper#2d1565117d2b9e9933c0608f00809f6815420156" source = "git+https://github.com/icewind1991/ugc-scaper#11fd39295c24cabb6198be51f0107df9cfb740e7"
dependencies = [ dependencies = [
"serde", "serde",
"steamid-ng", "steamid-ng",

View file

@ -30,7 +30,7 @@ rustPlatform.buildRustPackage rec {
cargoLock = { cargoLock = {
lockFile = ./api-server/Cargo.lock; lockFile = ./api-server/Cargo.lock;
outputHashes = { outputHashes = {
"ugc-scraper-0.5.0" = "sha256-umMGHYKSSor5Co7eIb0lDpEUWS/qFscX7TpDGMXecRo="; "ugc-scraper-0.5.0" = "sha256-PvGlLEVS/C9j3TfhzFPtD2/0pDMqmZnaD2rm2xKgtw4=";
}; };
}; };
} }

View file

@ -138,19 +138,14 @@ impl Parser for TeamParser {
_ => {} _ => {}
}; };
let image = let image = document.select(&self.selector_image).next();
document let image = image.and_then(|image| {
.select(&self.selector_image) image
.next() .attr("data-cfsrc")
.ok_or(ParseError::ElementNotFound { .or_else(|| image.attr("src"))
selector: SELECTOR_TEAM_IMAGE, .filter(|image| !image.ends_with("team_avatar_placeholder.png"))
role: "team image", .map(String::from)
})?; });
let image = image
.attr("data-cfsrc")
.or_else(|| image.attr("src"))
.unwrap_or_default()
.to_string();
let format = select_text(root, &self.selector_team_format) let format = select_text(root, &self.selector_team_format)
.ok_or(ParseError::ElementNotFound { .ok_or(ParseError::ElementNotFound {

954
types/Cargo.lock generated

File diff suppressed because it is too large Load diff

View file

@ -12,7 +12,9 @@ steamid-ng = "1.0.0"
serde = { version = "1.0.215", features = ["derive"], optional = true } serde = { version = "1.0.215", features = ["derive"], optional = true }
time = { version = "0.3.36", features = ["parsing", "macros"] } time = { version = "0.3.36", features = ["parsing", "macros"] }
thiserror = "2.0.12" thiserror = "2.0.12"
sqlx = { version = "0.8.4", default-features = false, features = ["derive"], optional = true }
[features] [features]
serde = ["dep:serde", "time/serde", "time/formatting"] serde = ["dep:serde", "time/serde", "time/formatting"]
sqlx = ["dep:sqlx"]
default = ["serde"] default = ["serde"]

View file

@ -112,7 +112,7 @@ pub struct MembershipHistory {
pub struct Team { pub struct Team {
pub name: String, pub name: String,
pub tag: String, pub tag: String,
pub image: String, pub image: Option<String>,
pub format: GameMode, pub format: GameMode,
pub region: Option<Region>, pub region: Option<Region>,
pub timezone: Option<String>, pub timezone: Option<String>,
@ -125,7 +125,7 @@ pub struct Team {
pub name_changes: Vec<NameChange>, pub name_changes: Vec<NameChange>,
} }
#[derive(Debug, Clone)] #[derive(Debug, Clone, Copy)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))] #[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
#[cfg_attr(feature = "serde", serde(rename_all = "lowercase"))] #[cfg_attr(feature = "serde", serde(rename_all = "lowercase"))]
pub enum Class { pub enum Class {
@ -179,9 +179,12 @@ pub struct Membership {
pub since: OffsetDateTime, pub since: OffsetDateTime,
} }
#[derive(Debug, Clone)] #[derive(Debug, Clone, Copy)]
#[cfg_attr(feature = "serde", derive(serde::Serialize))] #[cfg_attr(feature = "serde", derive(serde::Serialize))]
#[cfg_attr(feature = "serde", serde(rename_all = "lowercase"))] #[cfg_attr(feature = "serde", serde(rename_all = "lowercase"))]
#[cfg_attr(feature = "sqlx", derive(sqlx::Type))]
#[cfg_attr(feature = "sqlx", sqlx(type_name = "membership_role"))]
#[cfg_attr(feature = "sqlx", sqlx(rename_all = "lowercase"))]
pub enum MembershipRole { pub enum MembershipRole {
Leader, Leader,
Member, Member,
@ -316,6 +319,9 @@ pub struct InvalidGameMode {
} }
#[derive(Debug, Clone, Copy)] #[derive(Debug, Clone, Copy)]
#[cfg_attr(feature = "sqlx", derive(sqlx::Type))]
#[cfg_attr(feature = "sqlx", sqlx(type_name = "game_mode"))]
#[cfg_attr(feature = "sqlx", sqlx(rename_all = "lowercase"))]
pub enum GameMode { pub enum GameMode {
Highlander, Highlander,
Eights, Eights,
@ -405,6 +411,9 @@ pub struct InvalidRegion {
#[derive(Copy, Clone, Debug)] #[derive(Copy, Clone, Debug)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))] #[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
#[serde(rename_all = "kebab-case")] #[serde(rename_all = "kebab-case")]
#[cfg_attr(feature = "sqlx", derive(sqlx::Type))]
#[cfg_attr(feature = "sqlx", sqlx(type_name = "region"))]
#[cfg_attr(feature = "sqlx", sqlx(rename_all = "kebab-case"))]
pub enum Region { pub enum Region {
Europe, Europe,
NorthAmerica, NorthAmerica,
@ -526,7 +535,6 @@ mod serde_steam_id_as_string {
where where
D: Deserializer<'de>, D: Deserializer<'de>,
{ {
let id = u64::deserialize(deserializer)?; SteamID::deserialize(deserializer)
Ok(SteamID::from(id))
} }
} }