package indexer import ( "context" "fmt" "github.com/rs/zerolog/log" "google.golang.org/grpc" pb "homelab.lan/music-agregator/gen/music_agregator/indexer/v1" "homelab.lan/music-agregator/internal/config" ) type IndexerServer struct { indexer Indexer pb.UnimplementedIndexerServiceServer } func NewIndexerServer(cfg config.Config) (*IndexerServer, error) { switch cfg.Indexer.Type { case config.IndexerTypeJackett: indexer := NewIndexer(cfg) return &IndexerServer{indexer: indexer}, nil default: return nil, fmt.Errorf("Unable to create the indexer for type: %v", cfg.Indexer.Type) } } func (server *IndexerServer) Search(ctx context.Context, req *pb.SearchRequest) (*pb.SearchResponse, error) { log.Debug().Str("query", req.GetQuery()).Int32("limit", req.GetLimit()).Str("indexer", req.GetTracker()).Msg("Running search with these prams") searchResult, err := server.indexer.Search(req.GetQuery(), req.GetLimit(), req.GetTracker()) if err != nil { log.Error().Err(err).Msg("Failed to search in indexer") return nil, err } return searchResult.ToProto(), nil } func (server *IndexerServer) Capabilities(ctx context.Context, req *pb.CapabilitiesRequest) (*pb.CapabilitiesResponse, error) { capabilities, err := server.indexer.Capabilities(req.GetIndexer()) if err != nil { log.Error().Err(err).Msg("Failed to get capabilities from indexer") return nil, err } return capabilities.ToProto(), nil } func (s *IndexerServer) Register(server *grpc.Server) { pb.RegisterIndexerServiceServer(server, s) }