diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 77dcc46c..7ab874c5 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -3,8 +3,8 @@ Requires Node.js. Generally, you just need these commands: -* Add all recent changes since a certain number of days ago: - * `npm run recent 5` +* Add all recent changes (defaults to last 7 days, but then it remembers when you last ran it): + * `npm run recent` * Validate the manifest against the schema: * `npm run schema` * List some stats about the data set: diff --git a/data/manifest.yaml b/data/manifest.yaml index a535e4b0..7fda3eb7 100644 --- a/data/manifest.yaml +++ b/data/manifest.yaml @@ -40004,6 +40004,11 @@ Cat Quest: - save when: - os: windows + /Library/Application Support/com.thegentlebros.catquest: + tags: + - save + when: + - os: mac installDir: Cat Quest: {} registry: @@ -60608,6 +60613,9 @@ Death end re;Quest: Death end reQuest: {} steam: id: 990050 +Death end re;Quest 2: + steam: + id: 1266220 'Death from Unknown: Survival': steam: id: 809550 @@ -86648,6 +86656,18 @@ Fernz Gate: Fernz Gate: {} steam: id: 860480 +Ferrari Virtual Race: + files: + /Synetic/FerrariVR: + tags: + - config + when: + - os: windows + /Synetic/FerrariVR/SavedGame: + tags: + - save + when: + - os: windows Ferret Scoundrels: installDir: Ferret Scoundrels: {} @@ -115660,6 +115680,11 @@ I Hate Santa: I Have Lived: steam: id: 1200700 +'I Have Low Stats But My Class Is ''Leader'', So I Recruited Everyone I Know To Fight The Dark Lord': + installDir: + 'I Have Low Stats But My Class Is Leader, So I Recruited Everyone I Know To Fight The Dark Lord': {} + steam: + id: 1176040 'I Have No Mouth, and I Must Scream': files: /SCREAM: @@ -202419,6 +202444,11 @@ Shan Gui: Shan Gui: {} steam: id: 307050 +'Shan Gui II: Sweet Osmanthus II': + installDir: + Shan Gui 2: {} + steam: + id: 952420 Shank: files: /userdata//6120/remote: @@ -211001,6 +211031,11 @@ Sonic R (2004): - config when: - os: windows + /keys.bin: + tags: + - config + when: + - os: windows /save: tags: - save @@ -212513,12 +212548,12 @@ Space Hulk Ascension: id: 298900 'Space Hulk: Deathwing - Enhanced Edition': files: - /AppData/Local/SpaceHulkEnhanced/Saved/Config/WindowsNoEditor: + /SpaceHulkEnhanced/Saved/Config/WindowsNoEditor: tags: - config when: - os: windows - /AppData/Local/SpaceHulkEnhanced/Saved/SaveGames: + /SpaceHulkEnhanced/Saved/SaveGames: tags: - save when: @@ -225122,7 +225157,7 @@ Super Zombie Arcade: Super Zombie Arcade: {} steam: id: 903640 -Super gamebear with its three girlfriends你想知道关于超级喜欢游戏的一头黑色矮小的游戏熊是如何与它的"三个后宫团女朋友"购买到GBC游戏机的吗?: +Super gamebear with its three girlfriends: installDir: SJX: {} steam: @@ -225814,6 +225849,29 @@ Surge Radio: Surge Radio: {} steam: id: 958190 +Surgeon Simulator: + files: + /.config/unity3d/Bossa Studios/Surgeon Simulator 2013: + tags: + - config + - save + when: + - os: linux + /Library/Saved Application State/unity.Bossa Studios.Surgeon Simulator 2013.savedState: + tags: + - config + - save + when: + - os: mac + installDir: + Surgeon Simulator: {} + registry: + HKEY_CURRENT_USER/Software/Bossa Studios/Surgeon Simulator 2013: + tags: + - config + - save + steam: + id: 233720 'Surgeon Simulator VR: Meet The Medic': installDir: Surgeon Simulator VR Meet The Medic: {} @@ -238880,6 +238938,11 @@ The Journey Back: - save when: - os: windows + /SkyGoblin/TheJourneyDown1/settings.cfg: + tags: + - config + when: + - os: windows /JourneyDownOne: tags: - config @@ -238892,11 +238955,16 @@ The Journey Back: id: 220090 'The Journey Down: Chapter Three': files: - '%APPDATA%/SkyGoblin/TheJourneyDown3': + /SkyGoblin/TheJourneyDown3: tags: - save when: - os: windows + /SkyGoblin/TheJourneyDown3/settings.cfg: + tags: + - config + when: + - os: windows installDir: The Journey Down Chapter Three: {} steam: diff --git a/data/missing.md b/data/missing.md index 39cba688..1f7f3367 100644 --- a/data/missing.md +++ b/data/missing.md @@ -7674,6 +7674,7 @@ * [Death Collector](https://www.pcgamingwiki.com/wiki/?curid=123419) * [Death Crown](https://www.pcgamingwiki.com/wiki/?curid=89704) * [Death Dojo](https://www.pcgamingwiki.com/wiki/?curid=53041) +* [Death end re;Quest 2](https://www.pcgamingwiki.com/wiki/?curid=161908) * [Death Field: The Battle Royale of Disaster](https://www.pcgamingwiki.com/wiki/?curid=91880) * [Death from Unknown: Survival](https://www.pcgamingwiki.com/wiki/?curid=90324) * [Death Fungeon](https://www.pcgamingwiki.com/wiki/?curid=103979) @@ -14830,7 +14831,7 @@ * [I Hate Santa](https://www.pcgamingwiki.com/wiki/?curid=54343) * [I hate this game](https://www.pcgamingwiki.com/wiki/?curid=126146) * [I Have Lived](https://www.pcgamingwiki.com/wiki/?curid=157108) -* [I Have Low Stats But My Class Is "Leader", So I Recruited Everyone I Know To Fight The Dark Lord](https://www.pcgamingwiki.com/wiki/?curid=149987) +* [I Have Low Stats But My Class Is 'Leader', So I Recruited Everyone I Know To Fight The Dark Lord](https://www.pcgamingwiki.com/wiki/?curid=149987) * [I Know a Tale](https://www.pcgamingwiki.com/wiki/?curid=40432) * [I Know Everything](https://www.pcgamingwiki.com/wiki/?curid=136828) * [I LIKE THE FLOWERS](https://www.pcgamingwiki.com/wiki/?curid=144620) @@ -26173,7 +26174,7 @@ * [Shallow Space](https://www.pcgamingwiki.com/wiki/?curid=45970) * [Shalnor Legends: Sacred Lands](https://www.pcgamingwiki.com/wiki/?curid=73050) * [Shaman Flower](https://www.pcgamingwiki.com/wiki/?curid=64640) -* [Shan Gui 2 山桂贰](https://www.pcgamingwiki.com/wiki/?curid=114976) +* [Shan Gui II: Sweet Osmanthus II](https://www.pcgamingwiki.com/wiki/?curid=114976) * [Shank n' Bake](https://www.pcgamingwiki.com/wiki/?curid=65132) * [Shannon Tweed's Attack of the Groupies](https://www.pcgamingwiki.com/wiki/?curid=50496) * [Shaolin vs Wutang](https://www.pcgamingwiki.com/wiki/?curid=38408) @@ -28830,7 +28831,7 @@ * [Super Furi Puzzles](https://www.pcgamingwiki.com/wiki/?curid=112136) * [Super Galaxy Boy](https://www.pcgamingwiki.com/wiki/?curid=68214) * [Super Galaxy Squadron EX](https://www.pcgamingwiki.com/wiki/?curid=38234) -* [Super gamebear with its three girlfriends你想知道关于超级喜欢游戏的一头黑色矮小的游戏熊是如何与它的"三个后宫团女朋友"购买到GBC游戏机的吗?](https://www.pcgamingwiki.com/wiki/?curid=123938) +* [Super gamebear with its three girlfriends](https://www.pcgamingwiki.com/wiki/?curid=123938) * [Super Gerry](https://www.pcgamingwiki.com/wiki/?curid=125845) * [Super GMA](https://www.pcgamingwiki.com/wiki/?curid=104713) * [Super Golf 2018](https://www.pcgamingwiki.com/wiki/?curid=96579) @@ -29082,7 +29083,6 @@ * [Surge (Campus ADN)](https://www.pcgamingwiki.com/wiki/?curid=137369) * [Surge Radio](https://www.pcgamingwiki.com/wiki/?curid=148785) * [Surgeon Simulator 2](https://www.pcgamingwiki.com/wiki/?curid=154623) -* [Surgeon Simulator 2013](https://www.pcgamingwiki.com/wiki/?curid=6579) * [Surgeon Simulator: Experience Reality](https://www.pcgamingwiki.com/wiki/?curid=54493) * [Surgical Study and 3D Skeletons for Medical School Students](https://www.pcgamingwiki.com/wiki/?curid=148501) * [Surprising My Neighbors](https://www.pcgamingwiki.com/wiki/?curid=134687) diff --git a/data/steam-game-cache.yaml b/data/steam-game-cache.yaml index 246b94c0..82ad8686 100644 --- a/data/steam-game-cache.yaml +++ b/data/steam-game-cache.yaml @@ -15420,6 +15420,7 @@ '12660': installDir: Miss Popularity '1266100': {} +'1266220': {} '1266840': {} '12670': installDir: Mission Runway diff --git a/data/wiki-game-cache.yaml b/data/wiki-game-cache.yaml index c32b6827..4dad3bd5 100644 --- a/data/wiki-game-cache.yaml +++ b/data/wiki-game-cache.yaml @@ -11281,10 +11281,10 @@ Battlefleet Engineer: revId: 844440 'Battlefleet Gothic: Armada': pageId: 23013 - revId: 979735 + revId: 983897 'Battlefleet Gothic: Armada 2': pageId: 95911 - revId: 983248 + revId: 983899 Battlegrounds of Eldhelm: pageId: 49474 revId: 844443 @@ -12285,7 +12285,7 @@ Beyond Minimalism: revId: 934432 Beyond Oasis: pageId: 30866 - revId: 969214 + revId: 983792 Beyond Power VR: pageId: 40329 revId: 844728 @@ -17509,7 +17509,7 @@ Call of Duty 2: revId: 981196 'Call of Duty: Black Ops': pageId: 1654 - revId: 971492 + revId: 983992 'Call of Duty: Black Ops II': pageId: 3457 revId: 977652 @@ -18275,7 +18275,7 @@ Carrier Trail: revId: 846619 Carrion: pageId: 139686 - revId: 983245 + revId: 983793 Carrotting Brain: pageId: 45922 revId: 846621 @@ -18660,10 +18660,10 @@ Cat Notebook: revId: 884077 Cat Quest: pageId: 65118 - revId: 965422 + revId: 983778 Cat Quest II: pageId: 132805 - revId: 983751 + revId: 983784 Cat Simulator: pageId: 44629 revId: 929846 @@ -24083,7 +24083,7 @@ CreatorCrate: revId: 848332 Creatura: pageId: 80711 - revId: 979568 + revId: 983973 Creature Card Idle: pageId: 153901 revId: 916653 @@ -27509,7 +27509,7 @@ Dead Age: revId: 961426 Dead Age 2: pageId: 154235 - revId: 983554 + revId: 983905 Dead Alliance: pageId: 66089 revId: 849306 @@ -28187,7 +28187,7 @@ Death Stair: revId: 849517 Death Stranding: pageId: 151674 - revId: 983774 + revId: 983893 Death Sword: pageId: 76506 revId: 964739 @@ -28232,7 +28232,10 @@ Death by Game Show: revId: 849527 Death end re;Quest: pageId: 130527 - revId: 983527 + revId: 983982 +Death end re;Quest 2: + pageId: 161908 + revId: 983979 'Death from Unknown: Survival': pageId: 90324 revId: 849529 @@ -34158,7 +34161,7 @@ Dwarflings: revId: 851455 Dwarfs!?: pageId: 4762 - revId: 982201 + revId: 983915 Dwarrows: pageId: 67661 revId: 969344 @@ -34244,11 +34247,11 @@ Dynasty Feud: 'Dynasty Warriors 4: Hyper': irregularPath: true pageId: 16672 - revId: 983225 + revId: 983818 Dynasty Warriors 5 Special: irregularPath: true pageId: 111468 - revId: 983077 + revId: 983817 Dynasty Warriors 6: irregularPath: true pageId: 5157 @@ -35352,7 +35355,7 @@ Eldevin: revId: 851780 Eldritch: pageId: 17365 - revId: 929841 + revId: 983887 Eldritch Academy: pageId: 128515 revId: 851782 @@ -35772,7 +35775,7 @@ EmbodyMe: revId: 851905 Embr: pageId: 136068 - revId: 981937 + revId: 983800 'Embrace of Ocean: Story of Hope': pageId: 66428 revId: 851907 @@ -37346,10 +37349,10 @@ Euclidean Skies: revId: 852368 Eufloria: pageId: 63 - revId: 934004 + revId: 983891 Eufloria HD: pageId: 38353 - revId: 934005 + revId: 983890 Eugenics: pageId: 122682 revId: 852371 @@ -37376,19 +37379,19 @@ Eurofighter Typhoon: revId: 938031 Europa Universalis: pageId: 23215 - revId: 926304 + revId: 983876 Europa Universalis II: pageId: 25667 - revId: 926305 + revId: 983878 Europa Universalis III: pageId: 3197 - revId: 976826 + revId: 983880 Europa Universalis IV: pageId: 9100 - revId: 977756 + revId: 983883 'Europa Universalis: Rome': pageId: 15539 - revId: 926307 + revId: 983885 tooBroad: true Europe Racing: pageId: 88291 @@ -38267,19 +38270,19 @@ F-22 Lightning 3: revId: 917592 F.E.A.R.: pageId: 1345 - revId: 960248 + revId: 983853 'F.E.A.R. 2: Project Origin': pageId: 1860 - revId: 928749 + revId: 983856 F.E.A.R. 3: pageId: 1858 - revId: 983667 + revId: 983858 F.E.A.R. Online: pageId: 20158 - revId: 852671 + revId: 983860 F.E.A.R. Perseus Mandate: pageId: 1362 - revId: 960250 + revId: 983855 F.E.X (Forced Evolution Experiment): pageId: 68136 revId: 852673 @@ -38612,7 +38615,7 @@ FSX SpacePort: revId: 852740 'FTL: Faster Than Light': pageId: 3559 - revId: 965390 + revId: 983941 FUBAR: pageId: 138817 revId: 852742 @@ -38804,7 +38807,7 @@ Faerie Solitaire Remastered: revId: 905772 Fahrenheit: pageId: 4137 - revId: 970307 + revId: 983916 'Fahrenheit: Indigo Prophecy Remastered': pageId: 22434 revId: 960652 @@ -38858,6 +38861,8 @@ Fairy Fencer F: revId: 982514 'Fairy Fencer F: Advent Dark Force': pageId: 57452 + renamedFrom: + - Fairy Fencer F Advent Dark Force revId: 982517 'Fairy Godmother Stories: Cinderella': pageId: 153042 @@ -39140,7 +39145,7 @@ Fallout 4 VR: revId: 972307 Fallout 76: pageId: 95739 - revId: 981975 + revId: 983948 Fallout Shelter: pageId: 33356 revId: 960659 @@ -39906,7 +39911,7 @@ Fatman Simulator: revId: 853142 Fatty Bear's Birthday Surprise: pageId: 37638 - revId: 964797 + revId: 983917 Fatty Bear's Fun Pack: pageId: 147372 revId: 964798 @@ -40171,6 +40176,9 @@ Fernbus Simulator: Fernz Gate: pageId: 99914 revId: 853222 +Ferrari Virtual Race: + pageId: 161877 + revId: 983362 Ferret Scoundrels: pageId: 135008 revId: 853223 @@ -42042,7 +42050,7 @@ For a Better Country: revId: 840692 'For the Glory: A Europa Universalis Game': pageId: 22254 - revId: 926308 + revId: 983882 For the King: pageId: 56288 revId: 980721 @@ -42560,7 +42568,7 @@ Foto Flash 2: revId: 853953 Fotonica: pageId: 5497 - revId: 929929 + revId: 983821 Foul Play: pageId: 10228 revId: 942107 @@ -42968,10 +42976,10 @@ Freedom Locomotion VR: revId: 854084 Freedom Planet: pageId: 18561 - revId: 933437 + revId: 983824 Freedom Planet 2: pageId: 31119 - revId: 919766 + revId: 983823 Freedom Poopie: pageId: 46040 revId: 854088 @@ -43347,13 +43355,13 @@ Frozen State: revId: 854196 Frozen Synapse: pageId: 3030 - revId: 926501 + revId: 983862 Frozen Synapse 2: pageId: 39436 - revId: 926500 + revId: 983864 Frozen Synapse Prime: pageId: 20855 - revId: 926499 + revId: 983863 Frqncy: pageId: 102559 revId: 854201 @@ -45200,7 +45208,7 @@ Geometry Boxer: revId: 854733 Geometry Dash: pageId: 25652 - revId: 980327 + revId: 983866 'Geometry Defense: Infinite': pageId: 98700 revId: 854735 @@ -46303,7 +46311,7 @@ God Hand: revId: 855072 God Mode: pageId: 6316 - revId: 934129 + revId: 983870 God Monster: pageId: 127379 revId: 855074 @@ -47438,7 +47446,7 @@ Greece Defense TD: revId: 855393 Greed Corp: pageId: 13415 - revId: 983770 + revId: 983820 'Greed: Black Border': pageId: 26031 revId: 948655 @@ -47541,10 +47549,10 @@ Gregory and the Hot Air Balloon: revId: 855423 Gremlins vs Automatons: pageId: 133054 - revId: 855424 + revId: 983875 'Gremlins, Inc.': pageId: 34833 - revId: 933425 + revId: 983874 Grenade Madness: pageId: 43588 revId: 855426 @@ -48238,7 +48246,7 @@ Gun Road: revId: 855625 Gun Rocket: pageId: 35403 - revId: 855626 + revId: 983873 Gun Wings: pageId: 31214 revId: 895279 @@ -48291,7 +48299,7 @@ Gunducky Industries: revId: 855639 Gunfire Reborn: pageId: 160987 - revId: 980326 + revId: 983947 Gunhead: pageId: 77405 revId: 920358 @@ -49036,7 +49044,7 @@ Halo 2: revId: 966478 'Halo 2: Anniversary': pageId: 129526 - revId: 981416 + revId: 983967 Halo 3: pageId: 129522 revId: 983213 @@ -53962,9 +53970,11 @@ I Hate Santa: I Have Lived: pageId: 157108 revId: 932317 -'I Have Low Stats But My Class Is "Leader", So I Recruited Everyone I Know To Fight The Dark Lord': +'I Have Low Stats But My Class Is ''Leader'', So I Recruited Everyone I Know To Fight The Dark Lord': pageId: 149987 - revId: 983101 + renamedFrom: + - 'I Have Low Stats But My Class Is "Leader", So I Recruited Everyone I Know To Fight The Dark Lord' + revId: 983443 'I Have No Mouth, and I Must Scream': pageId: 11366 revId: 979472 @@ -54033,7 +54043,7 @@ I Will Escape: revId: 857265 I am Bread: pageId: 48252 - revId: 936919 + revId: 983957 'I am Weapon: Revival': pageId: 45910 revId: 857267 @@ -55981,10 +55991,10 @@ Insurgence - Second Assault: revId: 857799 Insurgency: pageId: 14412 - revId: 983671 + revId: 983937 'Insurgency: Sandstorm': pageId: 97339 - revId: 962866 + revId: 983938 Intake: pageId: 12108 revId: 960361 @@ -56086,13 +56096,13 @@ Internet Simulator: revId: 857828 Interplanetary: pageId: 16966 - revId: 857829 + revId: 983928 Interplanetary Hunter: pageId: 66613 revId: 857830 'Interplanetary: Enhanced Edition': pageId: 67113 - revId: 934189 + revId: 983927 Interplay Solitaire: pageId: 62292 revId: 857832 @@ -58565,7 +58575,7 @@ Kamer: revId: 930459 Kami: pageId: 18586 - revId: 933444 + revId: 984005 Kamikaze Cube: pageId: 69675 revId: 858521 @@ -62324,7 +62334,7 @@ Lemmings Paintball: revId: 927953 Lemmings Revolution: pageId: 56013 - revId: 927955 + revId: 983995 Lemnis Gate: pageId: 139486 revId: 859573 @@ -62800,7 +62810,7 @@ Lifeless Moon: revId: 840775 Lifeless Planet: pageId: 15914 - revId: 981569 + revId: 983850 Lifeless Vanguard: pageId: 132202 revId: 886918 @@ -64837,16 +64847,16 @@ Lukewarm Ironclad: revId: 887234 Lula 3D: pageId: 90839 - revId: 963277 + revId: 983842 Lula Flipper: pageId: 92460 revId: 929116 Lula Virtual Babe: pageId: 92467 - revId: 929115 + revId: 983845 'Lula: The Sexy Empire': pageId: 131862 - revId: 938223 + revId: 983843 Lulu & Ennoi - Sacred Suit Girls: pageId: 148789 revId: 900444 @@ -65775,7 +65785,7 @@ Mafia Gambling: revId: 860582 Mafia II: pageId: 11207 - revId: 983374 + revId: 983807 'Mafia II: Definitive Edition': pageId: 160506 revId: 979565 @@ -66030,7 +66040,7 @@ Magical Brickout: revId: 860658 Magical Chase: pageId: 143588 - revId: 907690 + revId: 984023 unsupportedPath: true Magical Diary: pageId: 18809 @@ -66628,7 +66638,7 @@ Mango Cart: revId: 860829 Manhunt: pageId: 3923 - revId: 982724 + revId: 983841 Manhunt 2: pageId: 16010 revId: 983765 @@ -77427,7 +77437,7 @@ One Step Beyond: revId: 964982 One Step from Eden: pageId: 122848 - revId: 962084 + revId: 984017 One Strike: pageId: 74195 revId: 921754 @@ -79530,7 +79540,7 @@ Panzer Elite: revId: 928356 'Panzer Elite Action: Fields of Glory': pageId: 50254 - revId: 928357 + revId: 983960 Panzer General 3D Assault: pageId: 131869 revId: 926465 @@ -80301,7 +80311,7 @@ Peakvox Route Candle for Steam: revId: 897305 'Peaky Blinders: Mastermind': pageId: 159374 - revId: 981375 + revId: 983908 Peanut: pageId: 135177 revId: 977702 @@ -80914,7 +80924,7 @@ Phoenix Tales: revId: 916055 'Phoenix Wright: Ace Attorney Trilogy': pageId: 111586 - revId: 960884 + revId: 983813 Phoning Home: pageId: 56384 revId: 976378 @@ -81142,7 +81152,7 @@ Piko Piko: revId: 864843 Pikuniku: pageId: 124341 - revId: 983759 + revId: 983952 Pilam Sky: pageId: 63171 revId: 897429 @@ -82085,7 +82095,7 @@ Planet Alcatraz 2: revId: 897580 Planet Alpha: pageId: 90400 - revId: 962844 + revId: 983932 Planet Ancyra Chronicles: pageId: 62833 revId: 865102 @@ -84778,7 +84788,7 @@ Protothype: revId: 898023 Prototype: pageId: 3861 - revId: 965703 + revId: 983825 Prototype 2: pageId: 3245 revId: 981958 @@ -94628,7 +94638,7 @@ Seeking Dawn: revId: 868673 Seen: pageId: 135523 - revId: 868674 + revId: 983808 Seep Universe: pageId: 47269 revId: 868675 @@ -95498,9 +95508,11 @@ Shaman Flower: Shan Gui: pageId: 49745 revId: 982423 -Shan Gui 2 山桂贰: +'Shan Gui II: Sweet Osmanthus II': pageId: 114976 - revId: 982422 + renamedFrom: + - Shan Gui 2 山桂贰 + revId: 982421 Shank: pageId: 4733 revId: 926382 @@ -97709,7 +97721,7 @@ Skyhill: revId: 925876 'Skyhill: Black Mist': pageId: 135531 - revId: 975155 + revId: 983931 Skyhook: pageId: 34707 revId: 884546 @@ -99456,7 +99468,7 @@ Sonic 3D Blast (2010): revId: 950109 Sonic Adventure 2: pageId: 5774 - revId: 969936 + revId: 983998 Sonic Adventure DX: pageId: 21737 revId: 963248 @@ -99501,7 +99513,7 @@ Sonic R (1998): revId: 982490 Sonic R (2004): pageId: 76705 - revId: 982492 + revId: 983981 Sonic Racing: pageId: 148163 revId: 950127 @@ -100187,7 +100199,7 @@ Space Hulk Ascension: revId: 969065 'Space Hulk: Deathwing - Enhanced Edition': pageId: 95121 - revId: 983702 + revId: 983901 'Space Hulk: Tactics': pageId: 95887 revId: 969063 @@ -103849,7 +103861,7 @@ Story of Monster: revId: 871404 'Story of Seasons: Friends of Mineral Town': pageId: 161249 - revId: 983009 + revId: 983832 Story of a Cube: pageId: 44265 revId: 871405 @@ -105819,9 +105831,11 @@ Super X Chess: Super Zombie Arcade: pageId: 113566 revId: 978398 -Super gamebear with its three girlfriends你想知道关于超级喜欢游戏的一头黑色矮小的游戏熊是如何与它的"三个后宫团女朋友"购买到GBC游戏机的吗?: +Super gamebear with its three girlfriends: pageId: 123938 - revId: 871979 + renamedFrom: + - Super gamebear with its three girlfriends你想知道关于超级喜欢游戏的一头黑色矮小的游戏熊是如何与它的"三个后宫团女朋友"购买到GBC游戏机的吗? + revId: 983837 Super president How to rule the country: pageId: 128328 revId: 871980 @@ -105920,7 +105934,7 @@ Superhot VR: revId: 982134 'Superhot: Mind Control Delete': pageId: 78066 - revId: 983732 + revId: 983907 Superior Wizards: pageId: 113818 revId: 872007 @@ -106116,12 +106130,14 @@ Surge (Campus ADN): Surge Radio: pageId: 148785 revId: 900440 +Surgeon Simulator: + pageId: 6579 + renamedFrom: + - Surgeon Simulator 2013 + revId: 983656 Surgeon Simulator 2: pageId: 154623 revId: 983647 -Surgeon Simulator 2013: - pageId: 6579 - revId: 983649 'Surgeon Simulator VR: Meet The Medic': pageId: 43736 revId: 928441 @@ -112158,13 +112174,13 @@ The Journey Back: revId: 873779 'The Journey Down: Chapter One': pageId: 19711 - revId: 948642 + revId: 984001 'The Journey Down: Chapter Three': pageId: 58948 - revId: 948644 + revId: 983997 'The Journey Down: Chapter Two': pageId: 19712 - revId: 948643 + revId: 983964 The Journey Home: pageId: 36918 revId: 873783 @@ -112656,13 +112672,13 @@ The Legend of Three Kingdoms: revId: 983424 The Legend of Three Kingdoms 2: pageId: 161503 - revId: 980014 + revId: 983833 The Legend of Three Kingdoms 3: pageId: 161523 - revId: 983211 + revId: 983834 The Legend of Three Kingdoms 4: pageId: 161547 - revId: 983202 + revId: 983835 The Legend of Three Kingdoms 5: pageId: 161555 revId: 983204 @@ -115724,7 +115740,7 @@ The Wolf's Bite: revId: 874749 'The Wonderful 101: Remastered': pageId: 157799 - revId: 973574 + revId: 983806 The Wonderful End of the World: pageId: 18328 revId: 968998 @@ -117924,7 +117940,7 @@ Torchlight: revId: 980738 Torchlight II: pageId: 3587 - revId: 983625 + revId: 983879 Torchlight III: pageId: 106331 revId: 979809 @@ -125401,7 +125417,7 @@ Warhalla: revId: 968498 'Warhammer 40,000: Rites of War': pageId: 131754 - revId: 968504 + revId: 983911 'Warhammer 40,000: Sanctus Reach': pageId: 39380 revId: 968491 @@ -125434,7 +125450,7 @@ Warhammer Quest: revId: 961132 'Warhammer: Chaosbane': pageId: 124567 - revId: 961133 + revId: 983894 'Warhammer: Dark Omen': pageId: 26848 revId: 961134 @@ -128483,7 +128499,7 @@ Worms 3D: revId: 975355 Worms Armageddon: pageId: 1940 - revId: 983745 + revId: 983926 tooBroad: true Worms Blast: pageId: 12031 diff --git a/data/wiki-meta-cache.yaml b/data/wiki-meta-cache.yaml new file mode 100644 index 00000000..abe3791b --- /dev/null +++ b/data/wiki-meta-cache.yaml @@ -0,0 +1 @@ +lastCheckedRecentChanges: '2020-07-17T19:48:22.752Z' diff --git a/package-lock.json b/package-lock.json index d13aab84..6934e41a 100644 --- a/package-lock.json +++ b/package-lock.json @@ -800,6 +800,11 @@ "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", "dev": true }, + "moment": { + "version": "2.27.0", + "resolved": "https://registry.npmjs.org/moment/-/moment-2.27.0.tgz", + "integrity": "sha512-al0MUK7cpIcglMv3YF13qSgdAIqxHTO7brRtaz3DlSULbqfazqkc5kEjNrLDOM7fsjshoFIihnU8snrP7zUvhQ==" + }, "node-version-compare": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/node-version-compare/-/node-version-compare-1.0.2.tgz", diff --git a/package.json b/package.json index 7f8e37c0..aad79b05 100644 --- a/package.json +++ b/package.json @@ -24,6 +24,7 @@ "dependencies": { "js-yaml": "^3.14.0", "minimist": "^1.2.5", + "moment": "^2.27.0", "nodemw": "^0.13.0", "steam-user": "^4.16.2", "wikiapi": "^1.10.0" diff --git a/src/bin.ts b/src/bin.ts index 8b8451c6..c2f87878 100644 --- a/src/bin.ts +++ b/src/bin.ts @@ -2,7 +2,7 @@ import * as minimist from "minimist"; import { ManifestFile } from "./manifest"; import { SteamGameCacheFile, getSteamClient } from "./steam"; -import { WikiGameCacheFile } from "./wiki"; +import { WikiGameCacheFile, WikiMetaCacheFile } from "./wiki"; import { saveMissingGames } from "./missing"; interface Cli { @@ -20,7 +20,7 @@ interface Cli { tooBroad?: boolean, tooBroadUntagged?: boolean, skipUntil?: string, - recent?: number, + recent?: boolean, limit?: number, } @@ -45,6 +45,8 @@ async function main() { const wikiCache = new WikiGameCacheFile(); wikiCache.load(); + const wikiMetaCache = new WikiMetaCacheFile(); + wikiMetaCache.load(); const steamCache = new SteamGameCacheFile(await getSteamClient()); steamCache.load(); const manifest = new ManifestFile(); @@ -61,7 +63,7 @@ async function main() { try { if (args.cache) { if (args.recent) { - await wikiCache.flagRecentChanges(args.recent); + await wikiCache.flagRecentChanges(wikiMetaCache); } else { await wikiCache.addNewGames(); } @@ -91,6 +93,7 @@ async function main() { } wikiCache.save(); + wikiMetaCache.save(); steamCache.save(); manifest.save(); saveMissingGames(wikiCache.data, manifest.data); @@ -98,6 +101,7 @@ async function main() { process.exit(0); } catch (e) { wikiCache.save(); + wikiMetaCache.save(); steamCache.save(); manifest.save(); saveMissingGames(wikiCache.data, manifest.data); diff --git a/src/manifest.ts b/src/manifest.ts index 4495da20..1868bf03 100644 --- a/src/manifest.ts +++ b/src/manifest.ts @@ -57,7 +57,7 @@ export class ManifestFile extends YamlFile { tooBroadUntagged: boolean, skipUntil: string | undefined, games: Array | undefined, - recent: number | undefined, + recent: boolean | undefined, }, limit: number | undefined, steamCache: SteamGameCacheFile, diff --git a/src/wiki.ts b/src/wiki.ts index 519ab2a5..14065230 100644 --- a/src/wiki.ts +++ b/src/wiki.ts @@ -1,7 +1,8 @@ import { REPO, PathType, UnsupportedOsError, UnsupportedPathError, YamlFile } from "."; import { Constraint, Game, Store, Tag, Os } from "./manifest"; -import * as Wikiapi from "wikiapi"; +import * as moment from "moment"; import * as NodeMw from "nodemw"; +import * as Wikiapi from "wikiapi"; export type WikiGameCache = { [title: string]: { @@ -19,6 +20,10 @@ export type WikiGameCache = { }; }; +export type WikiMetaCache = { + lastCheckedRecentChanges: string; +}; + export class WikiGameCacheFile extends YamlFile { path = `${REPO}/data/wiki-game-cache.yaml`; defaultData = {}; @@ -36,9 +41,11 @@ export class WikiGameCacheFile extends YamlFile { }; } - async flagRecentChanges(days: number): Promise { - const changes = await getRecentChanges(days); + async flagRecentChanges(metaCache: WikiMetaCacheFile): Promise { + const now = moment(); + const changes = await getRecentChanges(now.toDate(), moment(metaCache.data.lastCheckedRecentChanges).subtract(1, "minute").toDate()); const client = makeApiClient2(); + for (const [recentName, recentInfo] of Object.entries(changes).sort((x, y) => x[0].localeCompare(y[0]))) { if (this.data[recentName] !== undefined) { // Existing entry has been edited. @@ -73,9 +80,18 @@ export class WikiGameCacheFile extends YamlFile { } } } + + metaCache.data.lastCheckedRecentChanges = now.toISOString(); } } +export class WikiMetaCacheFile extends YamlFile { + path = `${REPO}/data/wiki-meta-cache.yaml`; + defaultData = { + lastCheckedRecentChanges: moment().subtract(7, "days").toISOString(), + }; +} + interface RecentChanges { [article: string]: { pageId: number; @@ -418,11 +434,11 @@ function callMw(client, method: string, ...args: Array): Promise<[ }); } -export async function getRecentChanges(days: number): Promise { +export async function getRecentChanges(newest: Date, oldest: Date): Promise { const changes: RecentChanges = {}; const client = makeApiClient2(); - const startTimestamp = new Date().toISOString(); - const endTimestamp = new Date(new Date().setDate(new Date().getDate() - days)).toISOString(); + const startTimestamp = newest.toISOString(); + const endTimestamp = oldest.toISOString(); let rccontinue: string | undefined = undefined; while (true) {