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 }