feat(storage): add keep field for servers
This commit is contained in:
@@ -1,6 +1,7 @@
|
||||
package storage
|
||||
|
||||
import (
|
||||
"sort"
|
||||
"time"
|
||||
|
||||
"github.com/qdm12/gluetun/internal/constants/providers"
|
||||
@@ -26,18 +27,47 @@ func (s *Storage) mergeServers(hardcoded, persisted models.AllServers) models.Al
|
||||
|
||||
func (s *Storage) mergeProviderServers(provider string,
|
||||
hardcoded, persisted models.Servers) (merged models.Servers) {
|
||||
if persisted.Timestamp <= hardcoded.Timestamp {
|
||||
return hardcoded
|
||||
if persisted.Timestamp > hardcoded.Timestamp {
|
||||
diff := time.Unix(persisted.Timestamp, 0).Sub(time.Unix(hardcoded.Timestamp, 0))
|
||||
if diff < 0 {
|
||||
diff = -diff
|
||||
}
|
||||
diff = diff.Truncate(time.Second)
|
||||
message := "Using " + provider + " servers from file which are " +
|
||||
diff.String() + " more recent"
|
||||
s.logger.Info(message)
|
||||
|
||||
return persisted
|
||||
}
|
||||
|
||||
diff := time.Unix(persisted.Timestamp, 0).Sub(time.Unix(hardcoded.Timestamp, 0))
|
||||
if diff < 0 {
|
||||
diff = -diff
|
||||
persistedServerKeyToServer := make(map[string]models.Server)
|
||||
for _, persistedServer := range persisted.Servers {
|
||||
if persistedServer.Keep {
|
||||
persistedServerKeyToServer[persistedServer.Key()] = persistedServer
|
||||
}
|
||||
}
|
||||
diff = diff.Truncate(time.Second)
|
||||
message := "Using " + provider + " servers from file which are " +
|
||||
diff.String() + " more recent"
|
||||
s.logger.Info(message)
|
||||
|
||||
return persisted
|
||||
merged = hardcoded // use all fields from hardcoded
|
||||
merged.Servers = make([]models.Server, 0, len(hardcoded.Servers)+len(persistedServerKeyToServer))
|
||||
|
||||
for _, hardcodedServer := range hardcoded.Servers {
|
||||
hardcodedServerKey := hardcodedServer.Key()
|
||||
persistedServerToKeep, has := persistedServerKeyToServer[hardcodedServerKey]
|
||||
if has {
|
||||
// Drop hardcoded server and use persisted server matching the key.
|
||||
merged.Servers = append(merged.Servers, persistedServerToKeep)
|
||||
delete(persistedServerKeyToServer, hardcodedServerKey)
|
||||
} else {
|
||||
merged.Servers = append(merged.Servers, hardcodedServer)
|
||||
}
|
||||
}
|
||||
|
||||
// Add remaining persisted servers to keep
|
||||
for _, persistedServer := range persistedServerKeyToServer {
|
||||
merged.Servers = append(merged.Servers, persistedServer)
|
||||
}
|
||||
|
||||
sort.Sort(models.SortableServers(merged.Servers))
|
||||
|
||||
return merged
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user