This commit is contained in:
@@ -57,6 +57,28 @@ func One(gameID string) (Remote, error) {
|
||||
return r, nil
|
||||
}
|
||||
|
||||
func All() ([]Remote, error) {
|
||||
d, err := os.ReadDir(filepath.Clean(datastorepath))
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("failed to load datastore: %w", err)
|
||||
}
|
||||
|
||||
var res []Remote
|
||||
for _, g := range d {
|
||||
r, err := One(g.Name())
|
||||
if err != nil {
|
||||
if errors.Is(err, ErrNoRemote) {
|
||||
continue
|
||||
}
|
||||
return nil, fmt.Errorf("failed to load remote: %w", err)
|
||||
}
|
||||
|
||||
res = append(res, r)
|
||||
}
|
||||
|
||||
return res, nil
|
||||
}
|
||||
|
||||
func Set(gameID, url string) error {
|
||||
r := Remote{
|
||||
URL: url,
|
||||
|
||||
@@ -19,7 +19,7 @@ type (
|
||||
service *data.Service
|
||||
|
||||
stateCallback func(s State, g repository.Metadata)
|
||||
errorCallback func(err error)
|
||||
errorCallback func(err error, g repository.Metadata)
|
||||
conflictCallback func(a, b repository.Metadata) ConflictResolution
|
||||
}
|
||||
)
|
||||
@@ -63,7 +63,7 @@ func (s *Syncer) SetStateCallback(fn func(s State, g repository.Metadata)) {
|
||||
s.stateCallback = fn
|
||||
}
|
||||
|
||||
func (s *Syncer) SetErrorCallback(fn func(err error)) {
|
||||
func (s *Syncer) SetErrorCallback(fn func(err error, g repository.Metadata)) {
|
||||
s.errorCallback = fn
|
||||
}
|
||||
|
||||
@@ -74,20 +74,20 @@ func (s *Syncer) SetConflictCallback(fn func(a, b repository.Metadata) ConflictR
|
||||
func (s *Syncer) Sync() {
|
||||
games, err := s.service.AllGames()
|
||||
if err != nil {
|
||||
s.errorCallback(fmt.Errorf("failed to get all games: %w", err))
|
||||
s.errorCallback(fmt.Errorf("failed to get all games: %w", err), repository.Metadata{})
|
||||
return
|
||||
}
|
||||
|
||||
for _, g := range games {
|
||||
r, err := remote.One(g.ID)
|
||||
if err != nil {
|
||||
s.errorCallback(fmt.Errorf("%w: %s", ErrDatastore, err))
|
||||
s.errorCallback(fmt.Errorf("%w: %s", ErrDatastore, err), g)
|
||||
}
|
||||
if r.URL != s.cli.BaseURL() {
|
||||
continue
|
||||
}
|
||||
if err := s.sync(g); err != nil {
|
||||
s.errorCallback(err)
|
||||
s.errorCallback(err, g)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user