Files
seanime-docker/seanime-2.9.10/internal/extension_repo/marketplace.go
2025-09-20 14:08:38 +01:00

51 lines
1.5 KiB
Go

package extension_repo
import (
"fmt"
"io"
"seanime/internal/constants"
"seanime/internal/extension"
"seanime/internal/util"
"github.com/goccy/go-json"
"github.com/samber/lo"
)
func (r *Repository) GetMarketplaceExtensions(url string) (extensions []*extension.Extension, err error) {
defer util.HandlePanicInModuleWithError("extension_repo/GetMarketplaceExtensions", &err)
marketplaceUrl := constants.DefaultExtensionMarketplaceURL
if url != "" {
marketplaceUrl = url
}
return r.getMarketplaceExtensions(marketplaceUrl)
}
func (r *Repository) getMarketplaceExtensions(url string) (extensions []*extension.Extension, err error) {
resp, err := r.client.Get(url)
if err != nil {
r.logger.Error().Err(err).Msgf("marketplace: Failed to get marketplace extension: %s", url)
return nil, fmt.Errorf("failed to get marketplace extension: %s", url)
}
defer resp.Body.Close()
bodyR, err := io.ReadAll(resp.Body)
if err != nil {
r.logger.Error().Err(err).Msgf("marketplace: Failed to read marketplace extension: %s", url)
return nil, fmt.Errorf("failed to read marketplace extension: %s", url)
}
err = json.Unmarshal(bodyR, &extensions)
if err != nil {
r.logger.Error().Err(err).Msgf("marketplace: Failed to unmarshal marketplace extension: %s", url)
return nil, fmt.Errorf("failed to unmarshal marketplace extension: %s", url)
}
extensions = lo.Filter(extensions, func(item *extension.Extension, _ int) bool {
return item.ID != "" && item.ManifestURI != ""
})
return
}