Добавил поиск метаданных по каталогам

This commit is contained in:
2026-06-14 15:21:01 +03:00
parent 9c1b178e46
commit 5087f35861
21 changed files with 1435 additions and 72 deletions
+44 -2
View File
@@ -16,6 +16,7 @@ import (
"git.vakhrushev.me/av/jellybit/internal/layout"
"git.vakhrushev.me/av/jellybit/internal/llm"
"git.vakhrushev.me/av/jellybit/internal/logging"
"git.vakhrushev.me/av/jellybit/internal/metadata"
"git.vakhrushev.me/av/jellybit/internal/qbt"
"git.vakhrushev.me/av/jellybit/internal/recognize"
"git.vakhrushev.me/av/jellybit/internal/store"
@@ -60,6 +61,15 @@ func runServe(args []string) error {
SavePath: cfg.QBittorrent.SavePath,
}, logger)
// Ф4: базы метаданных (опц.). Без них авто-раскладки нет — всё в review.
providers, err := metadataProviders(cfg)
if err != nil {
return err
}
for _, p := range providers {
logger.Info("metadata provider enabled", "provider", p.Name())
}
// Ф2/Ф3: распознаватель и раскладчик. Если LLM не сконфигурирован,
// сервис работает как в Ф1 (completed-задачи дальше не двигаются).
var recognizer worker.Recognizer
@@ -75,8 +85,11 @@ func runServe(args []string) error {
if perr != nil {
return fmt.Errorf("llm provider: %w", perr)
}
recognizer = recognize.New(provider, recognize.Config{MaxRetries: cfg.LLM.MaxRetries}, logger)
logger.Info("recognizer ready", "model", cfg.LLM.Model)
recognizer = recognize.New(provider, providers, recognize.Config{
MaxRetries: cfg.LLM.MaxRetries,
AutoThreshold: cfg.Recognition.AutoConfidenceThreshold,
}, logger)
logger.Info("recognizer ready", "model", cfg.LLM.Model, "providers", len(providers))
} else {
logger.Warn("llm not configured, recognition disabled")
}
@@ -142,3 +155,32 @@ func runServe(args []string) error {
logger.Info("stopped")
return nil
}
// metadataProviders собирает включённые конфигом базы метаданных. Для
// сериалов Jellyfin привычнее tvdbid, поэтому TVDB идёт первым.
func metadataProviders(cfg *config.Config) ([]metadata.Provider, error) {
var out []metadata.Provider
if cfg.Metadata.TVDB.Enabled {
p, err := metadata.NewTVDB(metadata.TVDBConfig{
APIKey: cfg.Metadata.TVDB.APIKey,
Proxy: cfg.Metadata.TVDB.Proxy,
Timeout: cfg.Metadata.TVDB.Timeout.Std(),
})
if err != nil {
return nil, fmt.Errorf("tvdb provider: %w", err)
}
out = append(out, p)
}
if cfg.Metadata.TMDB.Enabled {
p, err := metadata.NewTMDB(metadata.TMDBConfig{
APIKey: cfg.Metadata.TMDB.APIKey,
Proxy: cfg.Metadata.TMDB.Proxy,
Timeout: cfg.Metadata.TMDB.Timeout.Std(),
})
if err != nil {
return nil, fmt.Errorf("tmdb provider: %w", err)
}
out = append(out, p)
}
return out, nil
}