// steamcache/gc.go package steamcache import ( "s1d3sw1ped/SteamCache2/vfs" "s1d3sw1ped/SteamCache2/vfs/cachestate" "s1d3sw1ped/SteamCache2/vfs/disk" "s1d3sw1ped/SteamCache2/vfs/memory" "time" ) // lruGC deletes files in LRU order until enough space is reclaimed. func lruGC(vfss vfs.VFS, size uint) { deletions := 0 var reclaimed uint for reclaimed < size { switch fs := vfss.(type) { case *disk.DiskFS: fi := fs.LRU.Back() if fi == nil { break } sz := uint(fi.Size()) err := fs.Delete(fi.Name()) if err != nil { continue } reclaimed += sz deletions++ case *memory.MemoryFS: fi := fs.LRU.Back() if fi == nil { break } sz := uint(fi.Size()) err := fs.Delete(fi.Name()) if err != nil { continue } reclaimed += sz deletions++ default: // Fallback to old method if not supported stats := vfss.StatAll() if len(stats) == 0 { break } fi := stats[0] // Assume sorted or pick first sz := uint(fi.Size()) err := vfss.Delete(fi.Name()) if err != nil { continue } reclaimed += sz deletions++ } } } func cachehandler(fi *vfs.FileInfo, cs cachestate.CacheState) bool { return time.Since(fi.AccessTime()) < time.Second*60 // Put hot files in the fast vfs if equipped }