Start tracking cloud support for games
This commit is contained in:
parent
5a8369af1e
commit
adf4da57c6
8 changed files with 2027 additions and 31 deletions
65
src/wiki.rs
65
src/wiki.rs
|
@ -407,6 +407,8 @@ impl WikiCache {
|
|||
pub struct WikiCacheEntry {
|
||||
#[serde(skip_serializing_if = "State::is_handled")]
|
||||
pub state: State,
|
||||
#[serde(skip_serializing_if = "CloudMetadata::is_empty")]
|
||||
pub cloud: CloudMetadata,
|
||||
#[serde(skip_serializing_if = "Option::is_none")]
|
||||
pub gog: Option<u64>,
|
||||
#[serde(skip_serializing_if = "BTreeSet::is_empty")]
|
||||
|
@ -535,6 +537,34 @@ impl WikiCacheEntry {
|
|||
}
|
||||
}
|
||||
}
|
||||
"save game cloud syncing" => {
|
||||
for attribute in attributes {
|
||||
match attribute.name.as_deref() {
|
||||
Some("discord") => {
|
||||
out.cloud.discord = attribute.value.to_string() == "true";
|
||||
}
|
||||
Some("epic games launcher" | "epic games store") => {
|
||||
out.cloud.epic = attribute.value.to_string() == "true";
|
||||
}
|
||||
Some("gog galaxy") => {
|
||||
out.cloud.gog = attribute.value.to_string() == "true";
|
||||
}
|
||||
Some("ea desktop" | "origin") => {
|
||||
out.cloud.origin = attribute.value.to_string() == "true";
|
||||
}
|
||||
Some("steam cloud") => {
|
||||
out.cloud.steam = attribute.value.to_string() == "true";
|
||||
}
|
||||
Some("ubisoft connect" | "uplay") => {
|
||||
out.cloud.uplay = attribute.value.to_string() == "true";
|
||||
}
|
||||
Some("xbox cloud") => {
|
||||
out.cloud.xbox = attribute.value.to_string() == "true";
|
||||
}
|
||||
_ => {}
|
||||
}
|
||||
}
|
||||
}
|
||||
_ => {}
|
||||
}
|
||||
}
|
||||
|
@ -1022,6 +1052,41 @@ static MAPPED_PATHS: Lazy<HashMap<&'static str, MappedPath>> = Lazy::new(|| {
|
|||
])
|
||||
});
|
||||
|
||||
#[derive(Clone, Debug, Default, PartialEq, Eq, serde::Serialize, serde::Deserialize)]
|
||||
#[serde(default, rename_all = "camelCase")]
|
||||
pub struct CloudMetadata {
|
||||
#[serde(skip_serializing_if = "std::ops::Not::not")]
|
||||
pub discord: bool,
|
||||
#[serde(skip_serializing_if = "std::ops::Not::not")]
|
||||
pub epic: bool,
|
||||
#[serde(skip_serializing_if = "std::ops::Not::not")]
|
||||
pub gog: bool,
|
||||
#[serde(skip_serializing_if = "std::ops::Not::not")]
|
||||
pub origin: bool,
|
||||
#[serde(skip_serializing_if = "std::ops::Not::not")]
|
||||
pub steam: bool,
|
||||
#[serde(skip_serializing_if = "std::ops::Not::not")]
|
||||
pub uplay: bool,
|
||||
#[serde(skip_serializing_if = "std::ops::Not::not")]
|
||||
pub xbox: bool,
|
||||
}
|
||||
|
||||
impl CloudMetadata {
|
||||
pub fn is_empty(&self) -> bool {
|
||||
let Self {
|
||||
discord,
|
||||
epic,
|
||||
gog,
|
||||
origin,
|
||||
steam,
|
||||
uplay,
|
||||
xbox,
|
||||
} = self;
|
||||
|
||||
!discord && !epic && !gog && !origin && !steam && !uplay && !xbox
|
||||
}
|
||||
}
|
||||
|
||||
#[derive(Debug, Default, serde::Serialize, serde::Deserialize)]
|
||||
#[serde(rename_all = "camelCase")]
|
||||
pub struct WikiMetaCache {
|
||||
|
|
Reference in a new issue