diff --git a/README.md b/README.md index 0cf81db8..9ca84721 100644 --- a/README.md +++ b/README.md @@ -10,7 +10,8 @@ which is compiled from data on [PCGamingWiki](https://www.pcgamingwiki.com/wiki/ along with accessing the Steam API for game installation directory names. If you find any data that is missing or incorrect, please contribute to the wiki, and such changes will be incorporated into the primary manifest periodically. -There is also a list of [games without any info on what to back up](data/missing.md). +There is also a list of [games without any info on what to back up](data/missing.md), +as well as [articles with wikitext that failed to parse](data/wiki-malformed.yaml). Game developers may include a secondary manifest (named `.ludusavi.yaml`) with their games, so that backup tools can automatically detect and use it diff --git a/data/wiki-malformed.md b/data/wiki-malformed.md new file mode 100644 index 00000000..14cf045f --- /dev/null +++ b/data/wiki-malformed.md @@ -0,0 +1,72 @@ +* [404Sight](https://www.pcgamingwiki.com/wiki/?curid=34881) +* [Airship Dragoon](https://www.pcgamingwiki.com/wiki/?curid=49715) +* [Alien: Isolation](https://www.pcgamingwiki.com/wiki/?curid=17716) +* [Aliens versus Predator 2](https://www.pcgamingwiki.com/wiki/?curid=754) +* [Arena Wars](https://www.pcgamingwiki.com/wiki/?curid=192432) +* [Armed Forces Corp.](https://www.pcgamingwiki.com/wiki/?curid=186354) +* [Bejeweled 2](https://www.pcgamingwiki.com/wiki/?curid=12258) +* [Blind Men](https://www.pcgamingwiki.com/wiki/?curid=65074) +* [Boneworks](https://www.pcgamingwiki.com/wiki/?curid=129124) +* [Call of Duty: Modern Warfare 3](https://www.pcgamingwiki.com/wiki/?curid=30) +* [Call of Juarez: The Cartel](https://www.pcgamingwiki.com/wiki/?curid=7404) +* [CastleMiner Z](https://www.pcgamingwiki.com/wiki/?curid=50695) +* [Citizen Sleeper](https://www.pcgamingwiki.com/wiki/?curid=171592) +* [Counter-Strike Online 2](https://www.pcgamingwiki.com/wiki/?curid=162639) +* [Creepy Castle](https://www.pcgamingwiki.com/wiki/?curid=39349) +* [Dark Deception](https://www.pcgamingwiki.com/wiki/?curid=111922) +* [Darksiders II](https://www.pcgamingwiki.com/wiki/?curid=3416) +* [Dishonored](https://www.pcgamingwiki.com/wiki/?curid=3440) +* [Donald Duck: Goin' Quackers](https://www.pcgamingwiki.com/wiki/?curid=80156) +* [Duck Season](https://www.pcgamingwiki.com/wiki/?curid=69641) +* [Dungeon Keeper](https://www.pcgamingwiki.com/wiki/?curid=7396) +* [Escape from Tarkov](https://www.pcgamingwiki.com/wiki/?curid=75944) +* [Escape from Tarkov: Arena](https://www.pcgamingwiki.com/wiki/?curid=191894) +* [Fallout Tactics: Brotherhood of Steel](https://www.pcgamingwiki.com/wiki/?curid=3390) +* [Fault - Milestone Two](https://www.pcgamingwiki.com/wiki/?curid=33640) +* [Fe](https://www.pcgamingwiki.com/wiki/?curid=81305) +* [Halo Infinite](https://www.pcgamingwiki.com/wiki/?curid=138382) +* [IL-2 Sturmovik: 1946](https://www.pcgamingwiki.com/wiki/?curid=3563) +* [Immortals Fenyx Rising](https://www.pcgamingwiki.com/wiki/?curid=138457) +* [Just Cause 3](https://www.pcgamingwiki.com/wiki/?curid=20905) +* [Left Behind 4: World at War](https://www.pcgamingwiki.com/wiki/?curid=106677) +* [Left Behind: Eternal Forces](https://www.pcgamingwiki.com/wiki/?curid=81424) +* [Left Behind: Tribulation Forces](https://www.pcgamingwiki.com/wiki/?curid=106673) +* [Lego DC Super-Villains](https://www.pcgamingwiki.com/wiki/?curid=96133) +* [Lego Island](https://www.pcgamingwiki.com/wiki/?curid=6644) +* [Limit Theory](https://www.pcgamingwiki.com/wiki/?curid=23047) +* [Microsoft Flight Simulator 98](https://www.pcgamingwiki.com/wiki/?curid=183021) +* [Moonlighter](https://www.pcgamingwiki.com/wiki/?curid=61691) +* [Mysteria: Occult Shadows](https://www.pcgamingwiki.com/wiki/?curid=107356) +* [Nadia Was Here](https://www.pcgamingwiki.com/wiki/?curid=61784) +* [NASCAR The Game: 2013](https://www.pcgamingwiki.com/wiki/?curid=8952) +* [Need for Speed Unbound](https://www.pcgamingwiki.com/wiki/?curid=182372) +* [NeoTokyo](https://www.pcgamingwiki.com/wiki/?curid=18357) +* [Police Simulator Patrol Officers](https://www.pcgamingwiki.com/wiki/?curid=170657) +* [Portal](https://www.pcgamingwiki.com/wiki/?curid=228) +* [Project Nomads](https://www.pcgamingwiki.com/wiki/?curid=160544) +* [Real Pool 3D - Poolians](https://www.pcgamingwiki.com/wiki/?curid=78144) +* [Rexaura](https://www.pcgamingwiki.com/wiki/?curid=179569) +* [Rising Angels: Reborn](https://www.pcgamingwiki.com/wiki/?curid=33668) +* [Runefall](https://www.pcgamingwiki.com/wiki/?curid=95119) +* [Samurai Warriors 5](https://www.pcgamingwiki.com/wiki/?curid=166726) +* [Shock Troopers](https://www.pcgamingwiki.com/wiki/?curid=43011) +* [SimCity 2000](https://www.pcgamingwiki.com/wiki/?curid=2901) +* [Spelp](https://www.pcgamingwiki.com/wiki/?curid=194304) +* [Spooky's Jump Scare Mansion: HD Renovation](https://www.pcgamingwiki.com/wiki/?curid=57683) +* [Star Control: Origins](https://www.pcgamingwiki.com/wiki/?curid=74714) +* [Street Legal](https://www.pcgamingwiki.com/wiki/?curid=76838) +* [SWAT 3: Close Quarters Battle](https://www.pcgamingwiki.com/wiki/?curid=13256) +* [SweatShop](https://www.pcgamingwiki.com/wiki/?curid=42133) +* [Ten Dates](https://www.pcgamingwiki.com/wiki/?curid=185139) +* [Terrorist Takedown 2](https://www.pcgamingwiki.com/wiki/?curid=30659) +* [That's not my neighbor](https://www.pcgamingwiki.com/wiki/?curid=194559) +* [The First Templar](https://www.pcgamingwiki.com/wiki/?curid=40982) +* [The Glitch Fairy](https://www.pcgamingwiki.com/wiki/?curid=192157) +* [The Sims 2](https://www.pcgamingwiki.com/wiki/?curid=281) +* [The Temple of Elemental Evil](https://www.pcgamingwiki.com/wiki/?curid=14272) +* [Tom Clancy's Ghost Recon](https://www.pcgamingwiki.com/wiki/?curid=5581) +* [Transformers: Revenge of the Fallen](https://www.pcgamingwiki.com/wiki/?curid=64163) +* [Trinium Wars](https://www.pcgamingwiki.com/wiki/?curid=34904) +* [Turbo Dismount](https://www.pcgamingwiki.com/wiki/?curid=37547) +* [X-COM: Terror from the Deep](https://www.pcgamingwiki.com/wiki/?curid=17606) +* [Zone of the Enders: The 2nd Runner MARS](https://www.pcgamingwiki.com/wiki/?curid=90671) diff --git a/src/main.rs b/src/main.rs index ba281b30..008eb521 100644 --- a/src/main.rs +++ b/src/main.rs @@ -137,6 +137,7 @@ async fn main() { steam_cache.save(); manifest.save(); missing::save_missing_games(&wiki_cache, &manifest, &manifest_override); + wiki::save_malformed_list(&wiki_cache); } if !success { diff --git a/src/wiki.rs b/src/wiki.rs index 8f2c2eee..825e0d36 100644 --- a/src/wiki.rs +++ b/src/wiki.rs @@ -1,5 +1,6 @@ use std::collections::{BTreeMap, BTreeSet, HashMap, HashSet}; +use itertools::Itertools; use once_cell::sync::Lazy; use regex::Regex; use wikitext_parser::{Attribute, TextPiece}; @@ -1110,6 +1111,25 @@ impl ResourceFile for WikiMetaCache { } } +pub fn save_malformed_list(wiki_cache: &WikiCache) { + let lines: Vec = wiki_cache + .0 + .iter() + .sorted_by(|(k1, _), (k2, _)| k1.to_lowercase().cmp(&k2.to_lowercase())) + .filter(|(_, v)| v.malformed) + .map(|(k, v)| format!("* [{}](https://www.pcgamingwiki.com/wiki/?curid={})", k, v.page_id)) + .collect(); + + _ = std::fs::write( + format!("{}/data/wiki-malformed.md", crate::REPO), + if lines.is_empty() { + "* No errors found".to_string() + } else { + lines.join("\n") + "\n" + }, + ); +} + #[cfg(test)] mod tests { use super::*;