From 9bb69d4dbf23232e678a8bae6b296520da697812 Mon Sep 17 00:00:00 2001 From: mtkennerly Date: Sun, 21 Apr 2024 13:40:47 -0400 Subject: [PATCH] Fix wiki renames with redirects --- data/manifest.yaml | 63 +++++++++++++++++++++++++++++++++++++- data/missing.md | 3 -- data/steam-game-cache.yaml | 6 ++++ data/wiki-game-cache.yaml | 30 +++++++++++------- src/wiki.rs | 50 ++++++++++++++++++++++++------ 5 files changed, 128 insertions(+), 24 deletions(-) diff --git a/data/manifest.yaml b/data/manifest.yaml index a49d2b23..0e44a2e8 100644 --- a/data/manifest.yaml +++ b/data/manifest.yaml @@ -128564,7 +128564,37 @@ Corpse Mob: steam: id: 828460 Corpse Party: - alias: "Corpse Party: Blood Covered (2016)" + files: + "/corpseparty.ini": + tags: + - config + when: + - os: windows + "/save_data": + tags: + - save + when: + - os: windows + "/userdata//251270/remote": + tags: + - save + when: + - store: steam + gog: + id: 1460712231 + installDir: + Corpse Party: {} + launch: + "/CorpseParty": + - when: + - os: linux + store: steam + "/CorpseParty.exe": + - when: + - os: windows + store: steam + steam: + id: 251270 Corpse Party (2021): files: "/CorpseParty": @@ -128642,6 +128672,8 @@ Corpse Party (2021): - os: windows id: lutris: corpse-party-bloodcovered +"Corpse Party: Blood Covered (2016)": + alias: Corpse Party "Corpse Party: Blood Covered ...Repeated Fear": alias: Corpse Party (2021) "Corpse Party: Blood Drive": @@ -224626,6 +224658,35 @@ Fight or Flight: fof1: {} steam: id: 775620 +Fight the Dragon: + files: + "/.config/unity3d/3 Sprockets/FightTheDragon": + tags: + - config + when: + - os: linux + "/AppData/LocalLow/3 Sprockets/FightTheDragon": + tags: + - save + when: + - os: windows + installDir: + FightTheDragon: {} + launch: + "/FightTheDragon.app": + - when: + - os: mac + store: steam + "/FightTheDragon.exe": + - when: + - os: windows + store: steam + "/startgame.sh": + - when: + - os: linux + store: steam + steam: + id: 250560 Fight the Horror: installDir: Fight_the_Horror: {} diff --git a/data/missing.md b/data/missing.md index f88ce14a..1339c1e7 100644 --- a/data/missing.md +++ b/data/missing.md @@ -5268,7 +5268,6 @@ * [Corpoct](https://www.pcgamingwiki.com/wiki/?curid=144939) * [Corpse Killer - 25th Anniversary Edition](https://www.pcgamingwiki.com/wiki/?curid=139347) * [Corpse of Discovery](https://www.pcgamingwiki.com/wiki/?curid=46713) -* [Corpse Party: Blood Covered (2016)](https://www.pcgamingwiki.com/wiki/?curid=183572) * [Corral](https://www.pcgamingwiki.com/wiki/?curid=92716) * [Corridor 15](https://www.pcgamingwiki.com/wiki/?curid=76975) * [Corridor 7: Alien Invasion](https://www.pcgamingwiki.com/wiki/?curid=26687) @@ -7215,7 +7214,6 @@ * [DooM in the Dark 2](https://www.pcgamingwiki.com/wiki/?curid=153095) * [Doom of the Clawn](https://www.pcgamingwiki.com/wiki/?curid=156098) * [Doom Rails](https://www.pcgamingwiki.com/wiki/?curid=41208) -* [DOOMBRINGER](https://www.pcgamingwiki.com/wiki/?curid=163148) * [Doomed](https://www.pcgamingwiki.com/wiki/?curid=95057) * [Doomed Kingdoms](https://www.pcgamingwiki.com/wiki/?curid=54977) * [Doomed'n Damned](https://www.pcgamingwiki.com/wiki/?curid=47289) @@ -9143,7 +9141,6 @@ * [Fight or Die](https://www.pcgamingwiki.com/wiki/?curid=56080) * [Fight or Die 2](https://www.pcgamingwiki.com/wiki/?curid=63278) * [Fight Sparring VR](https://www.pcgamingwiki.com/wiki/?curid=64307) -* [Fight The Dragon](https://www.pcgamingwiki.com/wiki/?curid=191161) * [Fight the Horror](https://www.pcgamingwiki.com/wiki/?curid=109048) * [Fight This](https://www.pcgamingwiki.com/wiki/?curid=130462) * [Fight wisdom](https://www.pcgamingwiki.com/wiki/?curid=155608) diff --git a/data/steam-game-cache.yaml b/data/steam-game-cache.yaml index 29f52f23..b58fde0a 100644 --- a/data/steam-game-cache.yaml +++ b/data/steam-game-cache.yaml @@ -29931,6 +29931,12 @@ - description: Launch executable: Livelock.exe 251270: + cloud: + saves: + - path: save_data + pattern: dummy.dat + recursive: true + root: gameinstall installDir: Corpse Party launch: - config: diff --git a/data/wiki-game-cache.yaml b/data/wiki-game-cache.yaml index 317808d2..64963a76 100644 --- a/data/wiki-game-cache.yaml +++ b/data/wiki-game-cache.yaml @@ -36705,6 +36705,17 @@ Corpse Killer - 25th Anniversary Edition: Corpse Mob: pageId: 94405 steam: 828460 +Corpse Party: + gog: 1460712231 + pageId: 34195 + renamedFrom: + - Corpse Party + - "Corpse Party: Blood Covered (2016)" + steam: 251270 + templates: + - "{{Game data/config|Windows|{{p|game}}\\corpseparty.ini}}" + - "{{Game data/saves|Windows|{{p|game}}\\save_data\\}}" + - "{{Game data/saves|Steam|{{p|steam}}/userdata/{{p|uid}}/251270/remote/}}" Corpse Party (2021): gog: 1138308214 pageId: 172374 @@ -36729,10 +36740,6 @@ Corpse Party (2021): templates: - "{{Game data/config|Windows|{{p|game}}\\grisgris.ini}}" - "{{Game data/saves|Windows|{{p|game}}\\save_data\\*.*}}" -"Corpse Party: Blood Covered (2016)": - pageId: 183572 - renamedFrom: - - Corpse Party "Corpse Party: Blood Drive": gog: 1771718646 pageId: 147874 @@ -41096,11 +41103,6 @@ DOKA 2 GUTS OUT NINJA: DOKA 2 KISHKI EDITION: pageId: 120982 steam: 967250 -DOOMBRINGER: - pageId: 163148 - renamedFrom: - - DOOMBRINGER - - Doombringer DOOMTANK: pageId: 136846 steam: 1087310 @@ -64584,8 +64586,6 @@ Fight Me Bro!: Fight Sparring VR: pageId: 64307 steam: 665730 -Fight The Dragon: - pageId: 191161 Fight This: pageId: 130462 steam: 1037900 @@ -64607,6 +64607,14 @@ Fight or Die 2: Fight or Flight: pageId: 124526 steam: 775620 +Fight the Dragon: + pageId: 16274 + renamedFrom: + - Fight The Dragon + steam: 250560 + templates: + - "{{Game data/config|Linux|{{p|linuxhome}}/.config/unity3d/3 Sprockets/FightTheDragon}}" + - "{{Game data/saves|Windows|{{p|userprofile}}\\AppData\\LocalLow\\3 Sprockets\\FightTheDragon\\}}" Fight the Horror: pageId: 109048 steam: 857600 diff --git a/src/wiki.rs b/src/wiki.rs index 9fa5a517..94affb2f 100644 --- a/src/wiki.rs +++ b/src/wiki.rs @@ -291,7 +291,15 @@ impl WikiCache { match latest { Ok(mut latest) => { latest.renamed_from = cached.renamed_from.clone(); - self.0.insert(title.to_string(), latest); + if let Some(new_title) = latest.new_title.take() { + println!(" page {} redirected to '{}'", cached.page_id, &new_title); + + latest.renamed_from.push(title.to_string()); + self.0.remove(title); + self.0.insert(new_title, latest); + } else { + self.0.insert(title.to_string(), latest); + } } Err(Error::PageMissing) => { // Couldn't find it by name, so try again by ID. @@ -299,23 +307,32 @@ impl WikiCache { // (If they have a redirect, then the recent changes code takes care of it.) let Some(new_title) = get_page_title(cached.page_id).await? else { // Page no longer exists. - println!(":: refresh: page no longer exists"); + println!(" page no longer exists"); self.0.remove(title); continue; }; - println!( - ":: refresh: page {} called '{}' renamed to '{}'", - cached.page_id, title, &new_title - ); + println!(" page {} renamed to '{}'", cached.page_id, &new_title); if new_title.starts_with("File:") || new_title.starts_with("Company:") { - println!(":: refresh: page is no longer a game"); + println!(" page is no longer a game"); self.0.remove(title); continue; } - let mut latest = WikiCacheEntry::fetch_from_page(new_title.clone()).await?; + let mut latest = match WikiCacheEntry::fetch_from_page(new_title.clone()).await { + Ok(x) => x, + Err(Error::PageMissing) => { + println!(" page does not exist"); + self.0.remove(title); + continue; + } + Err(e) => { + return Err(e); + } + }; + + let new_title = latest.new_title.take().unwrap_or(new_title); let mut cached = self.0[title].clone(); cached.renamed_from.push(title.clone()); @@ -360,6 +377,10 @@ pub struct WikiCacheEntry { pub steam_side: BTreeSet, #[serde(skip_serializing_if = "Vec::is_empty")] pub templates: Vec, + + /// This will be set after resolving a redirect. + #[serde(skip)] + pub new_title: Option, } impl WikiCacheEntry { @@ -370,7 +391,12 @@ impl WikiCacheEntry { }; let wiki = make_client().await?; - let params = wiki.params_into(&[("action", "parse"), ("prop", "wikitext"), ("page", &article)]); + let params = wiki.params_into(&[ + ("action", "parse"), + ("prop", "wikitext"), + ("page", &article), + ("redirects", "1"), + ]); let res = wiki .get_query_api_json_all(¶ms) @@ -382,6 +408,12 @@ impl WikiCacheEntry { } out.page_id = res["parse"]["pageid"].as_u64().ok_or(Error::WikiData("parse.pageid"))?; + + let received_title = res["parse"]["title"].as_str().ok_or(Error::WikiData("parse.title"))?; + if received_title != article { + out.new_title = Some(received_title.to_string()); + } + let raw_wikitext = res["parse"]["wikitext"]["*"] .as_str() .ok_or(Error::WikiData("parse.wikitext"))?;