diff --git a/data/manifest.yaml b/data/manifest.yaml index c9d5eb67..42c7ca03 100644 --- a/data/manifest.yaml +++ b/data/manifest.yaml @@ -457098,6 +457098,28 @@ PPDD: store: steam steam: id: 1131680 +PPSSPP: + files: + "/memstick/PSP/SAVEDATA": + tags: + - save + when: + - os: windows + "/memstick/PSP/SYSTEM": + tags: + - config + when: + - os: windows + "/PPSSPP/PSP/SAVEDATA": + tags: + - save + when: + - os: windows + "/PPSSPP/PSP/SYSTEM": + tags: + - config + when: + - os: windows "PRE:ONE": installDir: PREONE: {} @@ -532547,6 +532569,18 @@ Rysen: store: steam steam: id: 789280 +Ryujinx: + files: + "/Ryujinx": + tags: + - config + when: + - os: windows + "/Ryujinx/bis/user/save": + tags: + - save + when: + - os: windows Ryzom: installDir: Ryzom: {} @@ -722561,6 +722595,13 @@ Visual Out: store: steam steam: id: 675910 +Vita3K: + files: + "/Vita3K/Vita3K/ux0/user/00": + tags: + - save + when: + - os: windows Vitamin Girl: files: "/EndlessRunnerProject/Saved/SaveGames/*.sav": diff --git a/data/missing.md b/data/missing.md index 3460da8a..ba869509 100644 --- a/data/missing.md +++ b/data/missing.md @@ -7266,6 +7266,7 @@ * [Doritos VR Battle](https://www.pcgamingwiki.com/wiki/?curid=52898) * [Dorke and Ymp](https://www.pcgamingwiki.com/wiki/?curid=51925) * [Dormant World](https://www.pcgamingwiki.com/wiki/?curid=69573) +* [DOSBox](https://www.pcgamingwiki.com/wiki/?curid=1720) * [Dotori](https://www.pcgamingwiki.com/wiki/?curid=151446) * [Dots](https://www.pcgamingwiki.com/wiki/?curid=77984) * [Dots eXtreme](https://www.pcgamingwiki.com/wiki/?curid=38917) @@ -7512,6 +7513,7 @@ * [DreamLand](https://www.pcgamingwiki.com/wiki/?curid=42539) * [Dreamland Defender](https://www.pcgamingwiki.com/wiki/?curid=81111) * [Dreamlike Worlds](https://www.pcgamingwiki.com/wiki/?curid=59011) +* [DREAMM](https://www.pcgamingwiki.com/wiki/?curid=189910) * [DREAMO](https://www.pcgamingwiki.com/wiki/?curid=150588) * [DREAMO VR](https://www.pcgamingwiki.com/wiki/?curid=151030) * [Dreamo VR](https://www.pcgamingwiki.com/wiki/?curid=182471) diff --git a/data/wiki-game-cache.yaml b/data/wiki-game-cache.yaml index a3267c22..f5af9b3a 100644 --- a/data/wiki-game-cache.yaml +++ b/data/wiki-game-cache.yaml @@ -47174,6 +47174,8 @@ DOKA 2 KISHKI EDITION: DOOMTANK: pageId: 136846 steam: 1087310 +DOSBox: + pageId: 1720 DOTOKOI / 像素男友: cloud: steam: true @@ -47204,6 +47206,15 @@ DRAG: DREAM GIRLS VR: pageId: 121955 steam: 974670 +DREAMM: + pageId: 189910 + templates: + - "{{Game data/config|Windows|C:\\Users\\\\AppData\\Roaming\\Aaron Giles\\DREAMM\\install}}" + - "{{Game data/config|OS X|/Users//Application Support/Aaron Giles/DREAMM/install}}" + - "{{Game data/config|Linux|/home//.local/share/Aaron Giles/DREAMM/install}}" + - "{{Game data/saves|Windows|C:\\Users\\\\AppData\\Roaming\\Aaron Giles\\DREAMM\\gamedata}}" + - "{{Game data/saves|OS X|/Users//Application Support/Aaron Giles/DREAMM/gamedata}}" + - "{{Game data/saves|Linux|/home//.local/share/Aaron Giles/DREAMM/gamedata}}" DREAMO: pageId: 150588 renamedFrom: @@ -145045,6 +145056,11 @@ PORN Pizza Delivery Boy: PPDD: pageId: 144160 steam: 1131680 +PPSSPP: + pageId: 88524 + templates: + - "{{Game data/config|Windows|{{p|game}}\\memstick\\PSP\\SYSTEM\\|\n{{p|userprofile\\documents}}\\PPSSPP\\PSP\\SYSTEM\\{{Note|Location when run without elevated privileges.}}}}" + - "{{Game data/saves|Windows|{{p|game}}\\memstick\\PSP\\SAVEDATA\\|\n{{p|userprofile\\documents}}\\PPSSPP\\PSP\\SAVEDATA\\{{Note|Location when run without elevated privileges.}}}}" "PRE:ONE": pageId: 92127 steam: 820840 @@ -168996,6 +169012,11 @@ Rysen: steam: 789280 Ryu ga Gotoku Online: pageId: 123045 +Ryujinx: + pageId: 181466 + templates: + - "{{Game data/config|Windows|{{p|appdata}}\\Ryujinx\\}}" + - "{{Game data/saves|Windows|{{p|appdata}}\\Ryujinx\\bis\\user\\save}}" Ryzom: pageId: 43161 steam: 373720 @@ -230039,6 +230060,10 @@ Vistascapes VR: Visual Out: pageId: 77341 steam: 675910 +Vita3K: + pageId: 181469 + templates: + - "{{Game data/saves|Windows|{{p|appdata}}\\Vita3K\\Vita3K\\ux0\\user\\00\\}}" Vitamin Girl: pageId: 72832 steam: 718910 diff --git a/src/cli.rs b/src/cli.rs index f45b7cad..96aeeb44 100644 --- a/src/cli.rs +++ b/src/cli.rs @@ -118,7 +118,7 @@ pub async fn run( wiki_cache.flag_recent_changes(wiki_meta_cache).await?; } if missing_pages { - wiki_cache.add_new_games().await?; + wiki_cache.add_new_articles().await?; } wiki_cache.refresh(outdated_only, None, limit, wiki_from).await?; diff --git a/src/wiki.rs b/src/wiki.rs index 07463763..8f2c2eee 100644 --- a/src/wiki.rs +++ b/src/wiki.rs @@ -12,6 +12,7 @@ use crate::{ }; const SAVE_INTERVAL: u32 = 100; +const RELEVANT_CATEGORIES: &[&str] = &["Category:Games", "Category:Emulators"]; async fn make_client() -> Result { mediawiki::api::Api::new("https://www.pcgamingwiki.com/w/api.php") @@ -63,7 +64,7 @@ async fn get_page_title(id: u64) -> Result, Error> { Ok(None) } -async fn is_game_article(query: &str) -> Result { +async fn is_article_relevant(query: &str) -> Result { let wiki = make_client().await?; let params = wiki.params_into(&[("action", "query"), ("prop", "categories"), ("titles", query)]); @@ -81,7 +82,7 @@ async fn is_game_article(query: &str) -> Result { let category_name = category["title"] .as_str() .ok_or(Error::WikiData("query.pages[].categories[].title"))?; - if category_name == "Category:Games" { + if RELEVANT_CATEGORIES.contains(&category_name) { return Ok(true); } } @@ -166,7 +167,7 @@ impl WikiCache { match old_name { None => { // Brand new page. - match is_game_article(&title).await { + match is_article_relevant(&title).await { Ok(true) => { // It's a game, so add it to the cache. println!("[ C] {}", &title); @@ -203,12 +204,19 @@ impl WikiCache { Ok(()) } - pub async fn add_new_games(&mut self) -> Result<(), Error> { + pub async fn add_new_articles(&mut self) -> Result<(), Error> { + for category in RELEVANT_CATEGORIES { + self.add_new_category_members(category).await?; + } + Ok(()) + } + + async fn add_new_category_members(&mut self, category: &str) -> Result<(), Error> { let wiki = make_client().await?; let params = wiki.params_into(&[ ("action", "query"), ("list", "categorymembers"), - ("cmtitle", "Category:Games"), + ("cmtitle", category), ("cmlimit", "500"), ]); @@ -300,7 +308,7 @@ impl WikiCache { if let Some(new_title) = latest.new_title.take() { println!(" page {} redirected to '{}'", cached.page_id, &new_title); - match is_game_article(&new_title).await { + match is_article_relevant(&new_title).await { Ok(true) => {} Ok(false) => { println!(" page is no longer a game"); @@ -336,7 +344,7 @@ impl WikiCache { println!(" page {} renamed to '{}'", cached.page_id, &new_title); - match is_game_article(&new_title).await { + match is_article_relevant(&new_title).await { Ok(true) => {} Ok(false) => { println!(" page is no longer a game"); @@ -1107,8 +1115,8 @@ mod tests { use super::*; #[tokio::test] - async fn test_is_game_article() { - assert!(matches!(is_game_article("Celeste").await, Ok(true))); - assert!(matches!(is_game_article("Template:Path").await, Ok(false))); + async fn test_is_article_relevant() { + assert!(matches!(is_article_relevant("Celeste").await, Ok(true))); + assert!(matches!(is_article_relevant("Template:Path").await, Ok(false))); } }