Start tracking cloud support for games
This commit is contained in:
parent
5a8369af1e
commit
adf4da57c6
8 changed files with 2027 additions and 31 deletions
File diff suppressed because it is too large
Load diff
|
@ -7060,7 +7060,6 @@
|
||||||
* [DJ Mole](https://www.pcgamingwiki.com/wiki/?curid=87221)
|
* [DJ Mole](https://www.pcgamingwiki.com/wiki/?curid=87221)
|
||||||
* [DJ Whip VR](https://www.pcgamingwiki.com/wiki/?curid=120749)
|
* [DJ Whip VR](https://www.pcgamingwiki.com/wiki/?curid=120749)
|
||||||
* [Djilyaro](https://www.pcgamingwiki.com/wiki/?curid=76221)
|
* [Djilyaro](https://www.pcgamingwiki.com/wiki/?curid=76221)
|
||||||
* [DJMax Respect V](https://www.pcgamingwiki.com/wiki/?curid=156151)
|
|
||||||
* [DJMax Trilogy](https://www.pcgamingwiki.com/wiki/?curid=134039)
|
* [DJMax Trilogy](https://www.pcgamingwiki.com/wiki/?curid=134039)
|
||||||
* [DK Online](https://www.pcgamingwiki.com/wiki/?curid=127603)
|
* [DK Online](https://www.pcgamingwiki.com/wiki/?curid=127603)
|
||||||
* [DMD Mars Mission](https://www.pcgamingwiki.com/wiki/?curid=82806)
|
* [DMD Mars Mission](https://www.pcgamingwiki.com/wiki/?curid=82806)
|
||||||
|
|
|
@ -122,3 +122,16 @@ additionalProperties:
|
||||||
type: integer
|
type: integer
|
||||||
alias:
|
alias:
|
||||||
type: string
|
type: string
|
||||||
|
cloud:
|
||||||
|
type: object
|
||||||
|
properties:
|
||||||
|
epic:
|
||||||
|
type: boolean
|
||||||
|
gog:
|
||||||
|
type: boolean
|
||||||
|
origin:
|
||||||
|
type: boolean
|
||||||
|
steam:
|
||||||
|
type: boolean
|
||||||
|
uplay:
|
||||||
|
type: boolean
|
||||||
|
|
|
@ -107,3 +107,16 @@ additionalProperties:
|
||||||
the current entry's title can be used as a nickname to look up the other game.
|
the current entry's title can be used as a nickname to look up the other game.
|
||||||
The other fields in the current entry should be ignored.
|
The other fields in the current entry should be ignored.
|
||||||
type: string
|
type: string
|
||||||
|
cloud:
|
||||||
|
type: object
|
||||||
|
properties:
|
||||||
|
epic:
|
||||||
|
type: boolean
|
||||||
|
gog:
|
||||||
|
type: boolean
|
||||||
|
origin:
|
||||||
|
type: boolean
|
||||||
|
steam:
|
||||||
|
type: boolean
|
||||||
|
uplay:
|
||||||
|
type: boolean
|
||||||
|
|
|
@ -29604,6 +29604,10 @@
|
||||||
oslist: macos
|
oslist: macos
|
||||||
description: Launch Game
|
description: Launch Game
|
||||||
executable: Shelter.app
|
executable: Shelter.app
|
||||||
|
- config:
|
||||||
|
oslist: linux
|
||||||
|
description: Launch Game
|
||||||
|
executable: Shelter.x86_64
|
||||||
244730:
|
244730:
|
||||||
installDir: Divekick
|
installDir: Divekick
|
||||||
launch:
|
launch:
|
||||||
|
@ -29868,21 +29872,6 @@
|
||||||
description: Skullgirls
|
description: Skullgirls
|
||||||
executable: Skullgirls.x86_64-pc-linux-gnu
|
executable: Skullgirls.x86_64-pc-linux-gnu
|
||||||
type: option1
|
type: option1
|
||||||
- config:
|
|
||||||
oslist: windows
|
|
||||||
description: Skullgirls Beta (Balance Patch)
|
|
||||||
executable: SGBeta/Skullgirls.exe
|
|
||||||
type: option2
|
|
||||||
- config:
|
|
||||||
oslist: macos
|
|
||||||
description: Skullgirls Beta (Balance Patch)
|
|
||||||
executable: SGBeta/Skullgirls.app
|
|
||||||
- config:
|
|
||||||
osarch: "64"
|
|
||||||
oslist: linux
|
|
||||||
description: Skullgirls Beta (Balance Patch)
|
|
||||||
executable: SGBeta/Skullgirls.x86_64-pc-linux-gnu
|
|
||||||
type: option2
|
|
||||||
245280:
|
245280:
|
||||||
installDir: Enslaved
|
installDir: Enslaved
|
||||||
launch:
|
launch:
|
||||||
|
@ -42992,6 +42981,12 @@
|
||||||
oslist: macos
|
oslist: macos
|
||||||
description: Launch
|
description: Launch
|
||||||
executable: SpaceFarmers.app
|
executable: SpaceFarmers.app
|
||||||
|
- config:
|
||||||
|
betakey: beta
|
||||||
|
oslist: windows
|
||||||
|
description: Beta version
|
||||||
|
executable: SF_Remastered.exe
|
||||||
|
type: option1
|
||||||
271590:
|
271590:
|
||||||
installDir: Grand Theft Auto V
|
installDir: Grand Theft Auto V
|
||||||
launch:
|
launch:
|
||||||
|
@ -52671,7 +52666,7 @@
|
||||||
polish: "Wiedźmin 3: Dziki Gon"
|
polish: "Wiedźmin 3: Dziki Gon"
|
||||||
russian: "Ведьмак 3: Дикая Охота"
|
russian: "Ведьмак 3: Дикая Охота"
|
||||||
schinese: 巫师 3:狂猎
|
schinese: 巫师 3:狂猎
|
||||||
ukrainian: "Відьмак® 3: Дикий гін"
|
ukrainian: "Відьмак 3: Дикий гін"
|
||||||
292090:
|
292090:
|
||||||
installDir: Rube Works
|
installDir: Rube Works
|
||||||
launch:
|
launch:
|
||||||
|
@ -411536,6 +411531,11 @@
|
||||||
executable: game.exe
|
executable: game.exe
|
||||||
type: default
|
type: default
|
||||||
960170:
|
960170:
|
||||||
|
cloud:
|
||||||
|
saves:
|
||||||
|
- path: "Neowiz/DJMAX RESPECT V/{64BitSteamID}"
|
||||||
|
pattern: "*.dat"
|
||||||
|
root: WinAppDataLocalLow
|
||||||
installDir: DJMAX RESPECT V
|
installDir: DJMAX RESPECT V
|
||||||
launch:
|
launch:
|
||||||
- config:
|
- config:
|
||||||
|
@ -533710,16 +533710,23 @@
|
||||||
saves:
|
saves:
|
||||||
- path: "Something We Made\\TOEM\\Save"
|
- path: "Something We Made\\TOEM\\Save"
|
||||||
pattern: "*"
|
pattern: "*"
|
||||||
platforms:
|
|
||||||
- Windows
|
|
||||||
recursive: true
|
recursive: true
|
||||||
root: WinAppDataLocalLow
|
root: WinAppDataLocalLow
|
||||||
- path: se.SomethingWeMade.TOEM/Save/
|
overrides:
|
||||||
pattern: "*"
|
- os: MacOS
|
||||||
platforms:
|
osCompare: "="
|
||||||
- MacOS
|
pathTransforms:
|
||||||
recursive: true
|
- find: "Something We Made\\TOEM\\Save"
|
||||||
root: MacAppSupport
|
replace: se.SomethingWeMade.TOEM/Save/
|
||||||
|
root: WinAppDataLocalLow
|
||||||
|
useInstead: MacAppSupport
|
||||||
|
- os: Linux
|
||||||
|
osCompare: "="
|
||||||
|
pathTransforms:
|
||||||
|
- find: "Something We Made\\TOEM\\Save"
|
||||||
|
replace: ".config/unity3d/Something We Made/TOEM/Save"
|
||||||
|
root: WinAppDataLocalLow
|
||||||
|
useInstead: LinuxHome
|
||||||
installDir: TOEM
|
installDir: TOEM
|
||||||
launch:
|
launch:
|
||||||
- config:
|
- config:
|
||||||
|
@ -533731,6 +533738,7 @@
|
||||||
executable: TOEM.app
|
executable: TOEM.app
|
||||||
type: none
|
type: none
|
||||||
- config:
|
- config:
|
||||||
|
osarch: "64"
|
||||||
oslist: linux
|
oslist: linux
|
||||||
executable: TOEM.x86_64
|
executable: TOEM.x86_64
|
||||||
nameLocalized:
|
nameLocalized:
|
||||||
|
@ -554815,6 +554823,26 @@
|
||||||
executable: SecretAgentHD.x86_64
|
executable: SecretAgentHD.x86_64
|
||||||
type: default
|
type: default
|
||||||
1607680:
|
1607680:
|
||||||
|
cloud:
|
||||||
|
saves:
|
||||||
|
- path: SandCastles/Bread_Fred
|
||||||
|
pattern: "*.scs"
|
||||||
|
platforms:
|
||||||
|
- Windows
|
||||||
|
root: WinAppDataLocalLow
|
||||||
|
overrides:
|
||||||
|
- addPath: ""
|
||||||
|
os: MacOS
|
||||||
|
osCompare: "="
|
||||||
|
root: WinAppDataLocalLow
|
||||||
|
useInstead: MacAppSupport
|
||||||
|
- os: Linux
|
||||||
|
osCompare: "="
|
||||||
|
pathTransforms:
|
||||||
|
- find: SandCastles/Bread_Fred
|
||||||
|
replace: ".config/unity3d"
|
||||||
|
root: WinAppDataLocalLow
|
||||||
|
useInstead: LinuxHome
|
||||||
installDir: Bread & Fred
|
installDir: Bread & Fred
|
||||||
launch:
|
launch:
|
||||||
- config:
|
- config:
|
||||||
|
|
File diff suppressed because it is too large
Load diff
|
@ -198,6 +198,8 @@ impl Manifest {
|
||||||
pub struct Game {
|
pub struct Game {
|
||||||
#[serde(skip_serializing_if = "Option::is_none")]
|
#[serde(skip_serializing_if = "Option::is_none")]
|
||||||
pub alias: Option<String>,
|
pub alias: Option<String>,
|
||||||
|
#[serde(skip_serializing_if = "CloudMetadata::is_empty")]
|
||||||
|
pub cloud: CloudMetadata,
|
||||||
#[serde(skip_serializing_if = "BTreeMap::is_empty")]
|
#[serde(skip_serializing_if = "BTreeMap::is_empty")]
|
||||||
pub files: BTreeMap<String, GameFileEntry>,
|
pub files: BTreeMap<String, GameFileEntry>,
|
||||||
#[serde(skip_serializing_if = "GogMetadata::is_empty")]
|
#[serde(skip_serializing_if = "GogMetadata::is_empty")]
|
||||||
|
@ -234,6 +236,13 @@ impl Game {
|
||||||
.copied()
|
.copied()
|
||||||
.collect(),
|
.collect(),
|
||||||
};
|
};
|
||||||
|
self.cloud = CloudMetadata {
|
||||||
|
epic: cache.cloud.epic,
|
||||||
|
gog: cache.cloud.gog,
|
||||||
|
origin: cache.cloud.origin,
|
||||||
|
steam: cache.cloud.steam,
|
||||||
|
uplay: cache.cloud.uplay,
|
||||||
|
};
|
||||||
|
|
||||||
let paths = cache.parse_paths(title.to_string());
|
let paths = cache.parse_paths(title.to_string());
|
||||||
for path in paths {
|
for path in paths {
|
||||||
|
@ -574,6 +583,35 @@ impl IdMetadata {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[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 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,
|
||||||
|
}
|
||||||
|
|
||||||
|
impl CloudMetadata {
|
||||||
|
pub fn is_empty(&self) -> bool {
|
||||||
|
let Self {
|
||||||
|
epic,
|
||||||
|
gog,
|
||||||
|
origin,
|
||||||
|
steam,
|
||||||
|
uplay,
|
||||||
|
} = self;
|
||||||
|
|
||||||
|
!epic && !gog && !origin && !steam && !uplay
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
#[derive(Clone, Debug, Default, PartialEq, Eq, serde::Serialize, serde::Deserialize)]
|
#[derive(Clone, Debug, Default, PartialEq, Eq, serde::Serialize, serde::Deserialize)]
|
||||||
#[serde(default, rename_all = "camelCase")]
|
#[serde(default, rename_all = "camelCase")]
|
||||||
pub struct ManifestOverride(pub BTreeMap<String, OverrideGame>);
|
pub struct ManifestOverride(pub BTreeMap<String, OverrideGame>);
|
||||||
|
|
65
src/wiki.rs
65
src/wiki.rs
|
@ -407,6 +407,8 @@ impl WikiCache {
|
||||||
pub struct WikiCacheEntry {
|
pub struct WikiCacheEntry {
|
||||||
#[serde(skip_serializing_if = "State::is_handled")]
|
#[serde(skip_serializing_if = "State::is_handled")]
|
||||||
pub state: State,
|
pub state: State,
|
||||||
|
#[serde(skip_serializing_if = "CloudMetadata::is_empty")]
|
||||||
|
pub cloud: CloudMetadata,
|
||||||
#[serde(skip_serializing_if = "Option::is_none")]
|
#[serde(skip_serializing_if = "Option::is_none")]
|
||||||
pub gog: Option<u64>,
|
pub gog: Option<u64>,
|
||||||
#[serde(skip_serializing_if = "BTreeSet::is_empty")]
|
#[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)]
|
#[derive(Debug, Default, serde::Serialize, serde::Deserialize)]
|
||||||
#[serde(rename_all = "camelCase")]
|
#[serde(rename_all = "camelCase")]
|
||||||
pub struct WikiMetaCache {
|
pub struct WikiMetaCache {
|
||||||
|
|
Reference in a new issue