MetaTube / engine /init.go
henry99a's picture
Clean commit for Hugging Face Spaces without binary files
ca7217f
package engine
import (
"log"
"os"
"github.com/metatube-community/metatube-sdk-go/common/fetch"
mt "github.com/metatube-community/metatube-sdk-go/provider"
)
func (e *Engine) init() *Engine {
e.initLogger()
e.initFetcher()
e.initActorProviders()
e.initMovieProviders()
return e
}
func (e *Engine) initLogger() {
e.logger = log.New(os.Stdout, "[ENGINE]\u0020", log.LstdFlags|log.Llongfile)
}
func (e *Engine) initFetcher() {
e.fetcher = fetch.Default(&fetch.Config{Timeout: e.timeout})
}
// initActorProviders initializes actor providers.
func (e *Engine) initActorProviders() {
for name, factory := range mt.RangeActorFactory {
provider := factory()
if s, ok := provider.(mt.RequestTimeoutSetter); ok {
s.SetRequestTimeout(e.timeout /* global timeout */)
}
if config, hasConfig := e.actorProviderConfigs.Get(name); hasConfig {
e.applyProviderConfig("actor", provider, config)
}
if provider.Priority() <= 0 {
e.logger.Printf("Disable actor provider: %s", provider.Name())
continue
}
// Add actor provider by name.
e.actorProviders.Set(name, provider)
// Add actor provider by host.
host := provider.URL().Hostname()
e.actorHostProviders.Set(host,
append(e.actorHostProviders.
GetOrDefault(host, nil), provider))
}
}
// initMovieProviders initializes movie providers.
func (e *Engine) initMovieProviders() {
for name, factory := range mt.RangeMovieFactory {
provider := factory()
if s, ok := provider.(mt.RequestTimeoutSetter); ok {
s.SetRequestTimeout(e.timeout /* global timeout */)
}
if config, hasConfig := e.movieProviderConfigs.Get(name); hasConfig {
e.applyProviderConfig("movie", provider, config)
}
if provider.Priority() <= 0 {
e.logger.Printf("Disable movie provider: %s", provider.Name())
continue
}
// Add movie provider by name.
e.movieProviders.Set(name, provider)
// Add movie provider by host.
host := provider.URL().Hostname()
e.movieHostProviders.Set(host,
append(e.movieHostProviders.
GetOrDefault(host, nil), provider))
}
}
func (e *Engine) applyProviderConfig(providerType string, provider mt.Provider, config mt.Config) {
const (
proxyConfigKey = "proxy"
priorityConfigKey = "priority"
timeoutConfigKey = "timeout"
)
// Apply overridden priority.
if config.Has(priorityConfigKey) {
if v, err := config.GetFloat64(priorityConfigKey); err == nil {
e.logger.Printf("Override %s provider priority: %s=%.2f", providerType, provider.Name(), v)
provider.SetPriority(v)
}
}
// Apply overridden proxy.
if s, ok := provider.(mt.ProxySetter); ok && config.Has(proxyConfigKey) {
if v, err := config.GetString(proxyConfigKey); err == nil {
if err := s.SetProxy(v); err != nil {
e.logger.Fatalf("Set proxy for %s provider '%s' error: %v", providerType, provider.Name(), v)
}
e.logger.Printf("Override %s provider proxy: %s=%s", providerType, provider.Name(), v)
}
}
// Apply request timeout.
if s, ok := provider.(mt.RequestTimeoutSetter); ok && config.Has(timeoutConfigKey) {
if v, err := config.GetDuration(timeoutConfigKey); err == nil {
e.logger.Printf("Override %s provider request timeout: %s=%s", providerType, provider.Name(), v)
s.SetRequestTimeout(v)
}
}
// Apply full config.
if s, ok := provider.(mt.ConfigSetter); ok {
if err := s.SetConfig(config); err != nil {
e.logger.Fatalf("Set %s provider config for %s: %v", providerType, provider.Name(), err)
}
}
}