mirror of
https://github.com/qdm12/gluetun.git
synced 2026-06-19 09:54:09 +02:00
wip
This commit is contained in:
@@ -5,6 +5,8 @@ import (
|
||||
"encoding/json"
|
||||
"errors"
|
||||
"fmt"
|
||||
"net/url"
|
||||
"path"
|
||||
|
||||
"github.com/qdm12/gluetun/internal/models"
|
||||
"github.com/qdm12/gluetun/internal/provider/common"
|
||||
@@ -16,18 +18,35 @@ type Provider interface {
|
||||
}
|
||||
|
||||
func (u *Updater) updateProvider(ctx context.Context, provider Provider,
|
||||
minRatio float64,
|
||||
manifest manifest, minRatio float64,
|
||||
) (err error) {
|
||||
providerName := provider.Name()
|
||||
existingServersCount := u.storage.GetServersCount(providerName)
|
||||
minServers := int(minRatio * float64(existingServersCount))
|
||||
servers, err := provider.FetchServers(ctx, minServers)
|
||||
if err != nil {
|
||||
if errors.Is(err, common.ErrNotEnoughServers) {
|
||||
u.logger.Warn("note: if running the update manually, you can use the flag " +
|
||||
"-minratio to allow the update to succeed with less servers found")
|
||||
|
||||
var servers []models.Server
|
||||
if manifest.providerToFilepath == nil {
|
||||
servers, err = provider.FetchServers(ctx, minServers)
|
||||
if err != nil {
|
||||
if errors.Is(err, common.ErrNotEnoughServers) {
|
||||
u.logger.Warn("note: if running the update manually, you can use the flag " +
|
||||
"-minratio to allow the update to succeed with less servers found")
|
||||
}
|
||||
return fmt.Errorf("getting %s servers: %w", providerName, err)
|
||||
}
|
||||
} else {
|
||||
providerFilepath := manifest.providerToFilepath[providerName]
|
||||
providerFileURL := buildProviderFileURL(providerName, providerFilepath)
|
||||
|
||||
var data models.Servers
|
||||
err = u.fetchJSON(ctx, providerFileURL, &data)
|
||||
if err != nil {
|
||||
return fmt.Errorf("downloading provider file %s: %w", providerFileURL, err)
|
||||
}
|
||||
if len(servers) < minServers {
|
||||
return fmt.Errorf("provider %s has not enough servers from downloaded file: got %d and expected at least %d",
|
||||
providerName, len(servers), minServers)
|
||||
}
|
||||
return fmt.Errorf("getting %s servers: %w", providerName, err)
|
||||
}
|
||||
|
||||
for _, server := range servers {
|
||||
@@ -55,3 +74,13 @@ func (u *Updater) updateProvider(ctx context.Context, provider Provider,
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func buildProviderFileURL(providerName, filePath string) (providerFileURL string) {
|
||||
filename := path.Base(filePath)
|
||||
if filename == "." || filename == "/" || filename == "" {
|
||||
filename = providerName + ".json"
|
||||
}
|
||||
|
||||
const serversFilesBaseURL = "https://raw.githubusercontent.com/qdm12/gluetun-servers/main/pkg/servers/"
|
||||
return serversFilesBaseURL + url.PathEscape(filename)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user