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

View file

@ -30,7 +30,7 @@ rustPlatform.buildRustPackage rec {
cargoLock = {
lockFile = ./api-server/Cargo.lock;
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 =
document
.select(&self.selector_image)
.next()
.ok_or(ParseError::ElementNotFound {
selector: SELECTOR_TEAM_IMAGE,
role: "team image",
})?;
let image = image
let image = document.select(&self.selector_image).next();
let image = image.and_then(|image| {
image
.attr("data-cfsrc")
.or_else(|| image.attr("src"))
.unwrap_or_default()
.to_string();
.filter(|image| !image.ends_with("team_avatar_placeholder.png"))
.map(String::from)
});
let format = select_text(root, &self.selector_team_format)
.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 }
time = { version = "0.3.36", features = ["parsing", "macros"] }
thiserror = "2.0.12"
sqlx = { version = "0.8.4", default-features = false, features = ["derive"], optional = true }
[features]
serde = ["dep:serde", "time/serde", "time/formatting"]
sqlx = ["dep:sqlx"]
default = ["serde"]

View file

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