@@ -14,7 +14,7 @@ type TagCache = {
1414} ;
1515
1616const cacheKeyList : string [ ] = [ ] ;
17- let gameSaved = false ;
17+ let gameSaveCount = 0 ;
1818let tagCache : TagCache | null = null ;
1919
2020async function loadTagCache ( cachePath : string ) : Promise < void > {
@@ -124,7 +124,7 @@ async function loadStringCache(key: string, cachePath: string): Promise<GameStri
124124}
125125
126126export function markGameSave ( fpPath : string ) {
127- gameSaved = true ;
127+ gameSaveCount += 1 ;
128128 for ( const key of cacheKeyList ) {
129129 const cachePath = path . join ( fpPath , 'Cache' , `${ key } .json` ) ;
130130 try {
@@ -149,6 +149,7 @@ function getStringCachedDataFactory(
149149 doSearch : ( search : GameSearch ) => Promise < string [ ] >
150150) : ( state : BackState , tagFilters : TagFilterGroup [ ] ) => Promise < string [ ] > {
151151 let cache : GameStringCache | null = null ;
152+ let gameSaveCountLocal = gameSaveCount ;
152153 cacheKeyList . push ( key ) ;
153154
154155 return async ( state , tagFilters ) => {
@@ -164,10 +165,11 @@ function getStringCachedDataFactory(
164165 return databaseReady ( )
165166 . then ( async ( db ) => {
166167 const gameCount = await db . countGames ( ) ;
167- if ( ! gameSaved && cache ! . gameCount === gameCount && cache ! . filterKey === flatKey ) {
168- // Same game count and filter key, pretty accurate cache
168+ if ( gameSaveCountLocal === gameSaveCount && cache ! . gameCount === gameCount && cache ! . filterKey === flatKey ) {
169+ // No new games saved, same game count and filter key, pretty accurate cache
169170 return cache ! . data ;
170171 }
172+ gameSaveCountLocal = gameSaveCount ;
171173 const search = getTaggedSearch ( tagFilters ) ;
172174 const data = await doSearch ( search ) ;
173175 await saveStringCache ( cachePath , gameCount , flatKey , data ) ;
@@ -176,6 +178,43 @@ function getStringCachedDataFactory(
176178 } ;
177179}
178180
181+ function getStringCachedDataTaglessFactory (
182+ key : string ,
183+ doSearch : ( ) => Promise < string [ ] >
184+ ) : ( state : BackState ) => Promise < string [ ] > {
185+ let cache : GameStringCache | null = null ;
186+ let gameSaveCountLocal = gameSaveCount ;
187+ cacheKeyList . push ( key ) ;
188+
189+ return async ( state ) => {
190+ console . log ( 'Loading cache for ' + key ) ;
191+ const cachePath = path . join ( state . config . flashpointPath , 'Cache' , `${ key } .json` ) ;
192+
193+ if ( cache === null ) {
194+ cache = await loadStringCache ( key , cachePath ) ;
195+ }
196+
197+
198+ return databaseReady ( )
199+ . then ( async ( db ) => {
200+ const gameCount = await db . countGames ( ) ;
201+ if ( gameSaveCountLocal === gameSaveCount && cache ! . gameCount === gameCount ) {
202+ // No new games saved and same game count, pretty accurate cache
203+ return cache ! . data ;
204+ }
205+ gameSaveCountLocal = gameSaveCount ;
206+ const data = await doSearch ( ) ;
207+ await saveStringCache ( cachePath , gameCount , '' , data ) ;
208+ return data ;
209+ } ) ;
210+ } ;
211+ }
212+
179213export const getAllDevelopers = getStringCachedDataFactory ( 'developers' , ( search ) => fpDatabase . findAllGameDevelopers ( search ) ) ;
180214export const getAllPublishers = getStringCachedDataFactory ( 'publishers' , ( search ) => fpDatabase . findAllGamePublishers ( search ) ) ;
181215export const getAllSeries = getStringCachedDataFactory ( 'series' , ( search ) => fpDatabase . findAllGameSeries ( search ) ) ;
216+
217+ export const getAllLibraries = getStringCachedDataTaglessFactory ( 'libraries' , ( ) => fpDatabase . findAllGameLibraries ( ) ) ;
218+ export const getAllStatuses = getStringCachedDataTaglessFactory ( 'statuses' , ( ) => fpDatabase . findAllGameStatuses ( ) ) ;
219+ export const getAllApplicationPaths = getStringCachedDataTaglessFactory ( 'applicationPaths' , ( ) => fpDatabase . findAllGameApplicationPaths ( ) ) ;
220+ export const getAllPlayModes = getStringCachedDataTaglessFactory ( 'playModes' , ( ) => fpDatabase . findAllGamePlayModes ( ) ) ;
0 commit comments