71 lines
2.9 KiB
Go
71 lines
2.9 KiB
Go
package services
|
|
|
|
import "strings"
|
|
|
|
type searchCollector interface {
|
|
Name() string
|
|
MaxResults() int
|
|
Enabled(enabledPlatforms map[string]bool) bool
|
|
BuildQueries(base string) []string
|
|
Collect(searcher *SearchService, query string) ([]SearchResult, error)
|
|
Accept(result SearchResult) bool
|
|
Enrich(searcher *SearchService, result SearchResult) SearchResult
|
|
}
|
|
|
|
type envatoCollector struct{}
|
|
|
|
func (envatoCollector) Name() string { return "Envato" }
|
|
func (envatoCollector) MaxResults() int { return 12 }
|
|
func (envatoCollector) Enabled(enabledPlatforms map[string]bool) bool {
|
|
return len(enabledPlatforms) == 0 || enabledPlatforms["envato"]
|
|
}
|
|
func (envatoCollector) BuildQueries(base string) []string { return buildEnvatoQueries(base) }
|
|
func (envatoCollector) Collect(searcher *SearchService, query string) ([]SearchResult, error) {
|
|
return searcher.searchWithFallback(query, "general", searcher.WebEngine, "Envato")
|
|
}
|
|
func (envatoCollector) Accept(result SearchResult) bool { return isRenderableEnvatoResult(result) }
|
|
func (envatoCollector) Enrich(searcher *SearchService, result SearchResult) SearchResult {
|
|
return searcher.enrichEnvato(result)
|
|
}
|
|
|
|
type artgridCollector struct{}
|
|
|
|
func (artgridCollector) Name() string { return "Artgrid" }
|
|
func (artgridCollector) MaxResults() int { return 12 }
|
|
func (artgridCollector) Enabled(enabledPlatforms map[string]bool) bool {
|
|
return len(enabledPlatforms) == 0 || enabledPlatforms["artgrid"]
|
|
}
|
|
func (artgridCollector) BuildQueries(base string) []string { return buildArtgridQueries(base) }
|
|
func (artgridCollector) Collect(searcher *SearchService, query string) ([]SearchResult, error) {
|
|
return searcher.searchWithFallback(query, "general", searcher.WebEngine, "Artgrid")
|
|
}
|
|
func (artgridCollector) Accept(result SearchResult) bool { return isRenderableArtgridResult(result) }
|
|
func (artgridCollector) Enrich(searcher *SearchService, result SearchResult) SearchResult {
|
|
return searcher.enrichArtgrid(result)
|
|
}
|
|
|
|
type googleVideoCollector struct{}
|
|
|
|
func (googleVideoCollector) Name() string { return "Google Video" }
|
|
func (googleVideoCollector) MaxResults() int { return 12 }
|
|
func (googleVideoCollector) Enabled(enabledPlatforms map[string]bool) bool {
|
|
return len(enabledPlatforms) == 0 || enabledPlatforms["google video"]
|
|
}
|
|
func (googleVideoCollector) BuildQueries(base string) []string { return buildGoogleVideoQueries(base) }
|
|
func (googleVideoCollector) Collect(searcher *SearchService, query string) ([]SearchResult, error) {
|
|
return searcher.searchWithFallback(query, "videos", searcher.GoogleVideoEngine, "Google Video")
|
|
}
|
|
func (googleVideoCollector) Accept(result SearchResult) bool {
|
|
return isUsefulGoogleVideoResult(result)
|
|
}
|
|
func (googleVideoCollector) Enrich(searcher *SearchService, result SearchResult) SearchResult {
|
|
if derived := deriveThumbnail(result.Link); derived != "" {
|
|
result.ThumbnailURL = derived
|
|
}
|
|
result.Source = strings.TrimSpace(result.Source)
|
|
if result.Source == "" {
|
|
result.Source = "Google Video"
|
|
}
|
|
return result
|
|
}
|