Fix caching of initial unsplash results per page
This commit is contained in:
parent
ad67154e26
commit
2fa4fcc202
1 changed files with 23 additions and 8 deletions
|
@ -76,7 +76,9 @@ var photos map[string]*Photo
|
||||||
// user opens the settings page.
|
// user opens the settings page.
|
||||||
type initialCollection struct {
|
type initialCollection struct {
|
||||||
lastCached time.Time
|
lastCached time.Time
|
||||||
images []*background.Image
|
// images contains a slice of images by page they belong to
|
||||||
|
// this allows us to cache individual pages.
|
||||||
|
images map[int64][]*background.Image
|
||||||
}
|
}
|
||||||
|
|
||||||
var emptySearchResult *initialCollection
|
var emptySearchResult *initialCollection
|
||||||
|
@ -130,12 +132,19 @@ func (p *Provider) Search(search string, page int64) (result []*background.Image
|
||||||
// If we don't have a search query, return results from the unsplash featured collection
|
// If we don't have a search query, return results from the unsplash featured collection
|
||||||
if search == "" {
|
if search == "" {
|
||||||
|
|
||||||
if emptySearchResult != nil && time.Since(emptySearchResult.lastCached) < time.Minute {
|
var existsForPage bool
|
||||||
log.Debugf("Serving intial unsplash collection from cache, last updated at %v", emptySearchResult.lastCached)
|
|
||||||
return emptySearchResult.images, nil
|
if emptySearchResult != nil &&
|
||||||
|
time.Since(emptySearchResult.lastCached) < time.Minute {
|
||||||
|
_, existsForPage = emptySearchResult.images[page]
|
||||||
}
|
}
|
||||||
|
|
||||||
log.Debug("Retrieving initial unsplash collection from unsplash api")
|
if existsForPage {
|
||||||
|
log.Debugf("Serving intial unsplash collection for page %d from cache, last updated at %v", page, emptySearchResult.lastCached)
|
||||||
|
return emptySearchResult.images[page], nil
|
||||||
|
}
|
||||||
|
|
||||||
|
log.Debugf("Retrieving initial unsplash collection for page %d from unsplash api", page)
|
||||||
|
|
||||||
collectionResult := []*Photo{}
|
collectionResult := []*Photo{}
|
||||||
err = doGet("collections/317099/photos?page="+strconv.FormatInt(page, 10)+"&per_page=25&order_by=latest", &collectionResult)
|
err = doGet("collections/317099/photos?page="+strconv.FormatInt(page, 10)+"&per_page=25&order_by=latest", &collectionResult)
|
||||||
|
@ -157,10 +166,16 @@ func (p *Provider) Search(search string, page int64) (result []*background.Image
|
||||||
photos[p.ID] = p
|
photos[p.ID] = p
|
||||||
}
|
}
|
||||||
|
|
||||||
emptySearchResult = &initialCollection{
|
// Put the collection in cache
|
||||||
lastCached: time.Now(),
|
if emptySearchResult == nil {
|
||||||
images: result,
|
emptySearchResult = &initialCollection{
|
||||||
|
images: make(map[int64][]*background.Image),
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
emptySearchResult.lastCached = time.Now()
|
||||||
|
emptySearchResult.images[page] = result
|
||||||
|
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue