diff --git a/images.go b/images.go index f235a85..9d9ef55 100644 --- a/images.go +++ b/images.go @@ -90,7 +90,9 @@ func getImageResultsFromCacheOrFetch(cacheKey CacheKey, query, safe, lang string case results := <-cacheChan: if results == nil { combinedResults = fetchImageResults(query, safe, lang, page) - resultsCache.Set(cacheKey, convertToSearchResults(combinedResults)) + if len(combinedResults) > 0 { + resultsCache.Set(cacheKey, convertToSearchResults(combinedResults)) + } } else { _, _, imageResults := convertToSpecificResults(results) combinedResults = imageResults @@ -98,20 +100,31 @@ func getImageResultsFromCacheOrFetch(cacheKey CacheKey, query, safe, lang string case <-time.After(2 * time.Second): log.Println("Cache check timeout") combinedResults = fetchImageResults(query, safe, lang, page) - resultsCache.Set(cacheKey, convertToSearchResults(combinedResults)) + if len(combinedResults) > 0 { + resultsCache.Set(cacheKey, convertToSearchResults(combinedResults)) + } } return combinedResults } func fetchImageResults(query, safe, lang string, page int) []ImageSearchResult { - engine := selectImageEngine() - log.Printf("Using image search engine: %s", engine.Name) + var results []ImageSearchResult + var err error - results, err := engine.Func(query, safe, lang, page) - if err != nil { - log.Printf("Error performing image search with %s: %v", engine.Name, err) - return nil + for attempts := 0; attempts < len(imageEngines); attempts++ { + engine := selectImageEngine() + log.Printf("Using image search engine: %s", engine.Name) + + results, err = engine.Func(query, safe, lang, page) + if err != nil { + log.Printf("Error performing image search with %s: %v", engine.Name, err) + continue + } + + if len(results) > 0 { + break + } } return results diff --git a/text.go b/text.go index 4cc1e0b..68c1033 100644 --- a/text.go +++ b/text.go @@ -69,7 +69,9 @@ func getTextResultsFromCacheOrFetch(cacheKey CacheKey, query, safe, lang string, case results := <-cacheChan: if results == nil { combinedResults = fetchTextResults(query, safe, lang, page) - resultsCache.Set(cacheKey, convertToSearchResults(combinedResults)) + if len(combinedResults) > 0 { + resultsCache.Set(cacheKey, convertToSearchResults(combinedResults)) + } } else { textResults, _, _ := convertToSpecificResults(results) combinedResults = textResults @@ -77,7 +79,9 @@ func getTextResultsFromCacheOrFetch(cacheKey CacheKey, query, safe, lang string, case <-time.After(2 * time.Second): log.Println("Cache check timeout") combinedResults = fetchTextResults(query, safe, lang, page) - resultsCache.Set(cacheKey, convertToSearchResults(combinedResults)) + if len(combinedResults) > 0 { + resultsCache.Set(cacheKey, convertToSearchResults(combinedResults)) + } } return combinedResults @@ -88,20 +92,31 @@ func prefetchPage(query, safe, lang string, page int) { if _, exists := resultsCache.Get(cacheKey); !exists { log.Printf("Page %d not cached, caching now...", page) pageResults := fetchTextResults(query, safe, lang, page) - resultsCache.Set(cacheKey, convertToSearchResults(pageResults)) + if len(pageResults) > 0 { + resultsCache.Set(cacheKey, convertToSearchResults(pageResults)) + } } else { log.Printf("Page %d already cached", page) } } func fetchTextResults(query, safe, lang string, page int) []TextSearchResult { - engine := selectSearchEngine() - log.Printf("Using search engine: %s", engine.Name) + var results []TextSearchResult + var err error - results, err := engine.Func(query, safe, lang, page) - if err != nil { - log.Printf("Error performing search with %s: %v", engine.Name, err) - return nil + for attempts := 0; attempts < len(searchEngines); attempts++ { + engine := selectSearchEngine() + log.Printf("Using search engine: %s", engine.Name) + + results, err = engine.Func(query, safe, lang, page) + if err != nil { + log.Printf("Error performing search with %s: %v", engine.Name, err) + continue + } + + if len(results) > 0 { + break + } } return results