mirror of
https://github.com/zarzet/SpotiFLAC-Mobile.git
synced 2026-08-03 01:28:37 +02:00
98 lines
2.3 KiB
Go
98 lines
2.3 KiB
Go
package gobackend
|
|
|
|
import "time"
|
|
|
|
func (c *DeezerClient) pruneExpiredCacheEntriesLocked(
|
|
cache map[string]*cacheEntry,
|
|
now time.Time,
|
|
) {
|
|
for key, entry := range cache {
|
|
if entry == nil || now.After(entry.expiresAt) {
|
|
delete(cache, key)
|
|
}
|
|
}
|
|
}
|
|
|
|
func (c *DeezerClient) trimCacheEntriesLocked(
|
|
cache map[string]*cacheEntry,
|
|
maxEntries int,
|
|
) {
|
|
if maxEntries <= 0 || len(cache) <= maxEntries {
|
|
return
|
|
}
|
|
|
|
for len(cache) > maxEntries {
|
|
var oldestKey string
|
|
var oldestExpiry time.Time
|
|
first := true
|
|
for key, entry := range cache {
|
|
expiry := time.Time{}
|
|
if entry != nil {
|
|
expiry = entry.expiresAt
|
|
}
|
|
if first || expiry.Before(oldestExpiry) {
|
|
first = false
|
|
oldestKey = key
|
|
oldestExpiry = expiry
|
|
}
|
|
}
|
|
if oldestKey == "" {
|
|
return
|
|
}
|
|
delete(cache, oldestKey)
|
|
}
|
|
}
|
|
|
|
func (c *DeezerClient) trimStringCacheEntriesLocked(
|
|
cache map[string]string,
|
|
maxEntries int,
|
|
) {
|
|
if maxEntries <= 0 || len(cache) <= maxEntries {
|
|
return
|
|
}
|
|
|
|
toRemove := len(cache) - maxEntries
|
|
for key := range cache {
|
|
delete(cache, key)
|
|
toRemove--
|
|
if toRemove <= 0 {
|
|
return
|
|
}
|
|
}
|
|
}
|
|
|
|
func (c *DeezerClient) maybeCleanupCachesLocked(now time.Time) {
|
|
periodicCleanupDue := c.cacheCleanupInterval > 0 &&
|
|
(c.lastCacheCleanup.IsZero() ||
|
|
now.Sub(c.lastCacheCleanup) >= c.cacheCleanupInterval)
|
|
|
|
if periodicCleanupDue {
|
|
c.pruneExpiredCacheEntriesLocked(c.searchCache, now)
|
|
c.pruneExpiredCacheEntriesLocked(c.albumCache, now)
|
|
c.pruneExpiredCacheEntriesLocked(c.artistCache, now)
|
|
c.lastCacheCleanup = now
|
|
}
|
|
|
|
if len(c.searchCache) > deezerMaxSearchCacheEntries {
|
|
if !periodicCleanupDue {
|
|
c.pruneExpiredCacheEntriesLocked(c.searchCache, now)
|
|
}
|
|
c.trimCacheEntriesLocked(c.searchCache, deezerMaxSearchCacheEntries)
|
|
}
|
|
if len(c.albumCache) > deezerMaxAlbumCacheEntries {
|
|
if !periodicCleanupDue {
|
|
c.pruneExpiredCacheEntriesLocked(c.albumCache, now)
|
|
}
|
|
c.trimCacheEntriesLocked(c.albumCache, deezerMaxAlbumCacheEntries)
|
|
}
|
|
if len(c.artistCache) > deezerMaxArtistCacheEntries {
|
|
if !periodicCleanupDue {
|
|
c.pruneExpiredCacheEntriesLocked(c.artistCache, now)
|
|
}
|
|
c.trimCacheEntriesLocked(c.artistCache, deezerMaxArtistCacheEntries)
|
|
}
|
|
if len(c.isrcCache) > deezerMaxISRCCacheEntries {
|
|
c.trimStringCacheEntriesLocked(c.isrcCache, deezerMaxISRCCacheEntries)
|
|
}
|
|
}
|