mirror of
https://github.com/safing/portbase
synced 2025-09-01 10:09:50 +00:00
This commit changes the updater package to support custom index files by callling registry.AddIndex(). Note that the previously hard-coded index files stable.json and beta.json have been removed and must be added by using AddIndex() prior to calling LoadIndexes().
56 lines
1.4 KiB
Go
56 lines
1.4 KiB
Go
package updater
|
|
|
|
import (
|
|
"errors"
|
|
"fmt"
|
|
|
|
"github.com/safing/portbase/log"
|
|
)
|
|
|
|
// Errors
|
|
var (
|
|
ErrNotFound = errors.New("the requested file could not be found")
|
|
ErrNotAvailableLocally = errors.New("the requested file is not available locally")
|
|
)
|
|
|
|
// GetFile returns the selected (mostly newest) file with the given identifier or an error, if it fails.
|
|
func (reg *ResourceRegistry) GetFile(identifier string) (*File, error) {
|
|
reg.RLock()
|
|
res, ok := reg.resources[identifier]
|
|
reg.RUnlock()
|
|
if !ok {
|
|
return nil, ErrNotFound
|
|
}
|
|
|
|
file := res.GetFile()
|
|
// check if file is available locally
|
|
if file.version.Available {
|
|
file.markActiveWithLocking()
|
|
return file, nil
|
|
}
|
|
|
|
// check if online
|
|
if !reg.Online {
|
|
return nil, ErrNotAvailableLocally
|
|
}
|
|
|
|
// check download dir
|
|
err := reg.tmpDir.Ensure()
|
|
if err != nil {
|
|
return nil, fmt.Errorf("could not prepare tmp directory for download: %w", err)
|
|
}
|
|
|
|
// download file
|
|
log.Tracef("%s: starting download of %s", reg.Name, file.versionedPath)
|
|
for tries := 0; tries < 5; tries++ {
|
|
err = reg.fetchFile(file.version, tries)
|
|
if err != nil {
|
|
log.Tracef("%s: failed to download %s: %s, retrying (%d)", reg.Name, file.versionedPath, err, tries+1)
|
|
} else {
|
|
file.markActiveWithLocking()
|
|
return file, nil
|
|
}
|
|
}
|
|
log.Warningf("%s: failed to download %s: %s", reg.Name, file.versionedPath, err)
|
|
return nil, err
|
|
}
|