fixes (the last)
This commit is contained in:
9
.vscode/launch.json
vendored
9
.vscode/launch.json
vendored
@@ -13,6 +13,15 @@
|
||||
"console": "integratedTerminal",
|
||||
"program": "${workspaceFolder}/cmd/web"
|
||||
},
|
||||
{
|
||||
"name": "server",
|
||||
"type": "go",
|
||||
"request": "launch",
|
||||
"mode": "auto",
|
||||
"args": ["-document-root", "${workspaceFolder}/env"],
|
||||
"console": "integratedTerminal",
|
||||
"program": "${workspaceFolder}/cmd/server"
|
||||
},
|
||||
{
|
||||
"name": "cli",
|
||||
"type": "go",
|
||||
|
||||
@@ -164,6 +164,12 @@ func (s HTTPServer) upload(w http.ResponseWriter, r *http.Request) {
|
||||
return
|
||||
}
|
||||
|
||||
if err := s.Service.ReloadCache(id); err != nil {
|
||||
fmt.Fprintln(os.Stderr, "error: failed to reload data from the disk:", err)
|
||||
internalServerError(w, r)
|
||||
return
|
||||
}
|
||||
|
||||
// Respond success
|
||||
w.WriteHeader(http.StatusCreated)
|
||||
}
|
||||
@@ -215,7 +221,13 @@ func (s HTTPServer) histUpload(w http.ResponseWriter, r *http.Request) {
|
||||
defer file.Close()
|
||||
|
||||
if err := s.Service.CopyBackup(gameID, uuid, file); err != nil {
|
||||
fmt.Fprintln(os.Stderr, "error: failed to write data to disk:", err)
|
||||
fmt.Fprintln(os.Stderr, "error: failed to write data to the disk:", err)
|
||||
internalServerError(w, r)
|
||||
return
|
||||
}
|
||||
|
||||
if err := s.Service.ReloadCache(gameID); err != nil {
|
||||
fmt.Fprintln(os.Stderr, "error: failed to reload data from the disk:", err)
|
||||
internalServerError(w, r)
|
||||
return
|
||||
}
|
||||
@@ -271,7 +283,6 @@ func (s HTTPServer) histExists(w http.ResponseWriter, r *http.Request) {
|
||||
ok(finfo, w, r)
|
||||
}
|
||||
|
||||
|
||||
func (s HTTPServer) metadata(w http.ResponseWriter, r *http.Request) {
|
||||
id := chi.URLParam(r, "id")
|
||||
metadata, err := s.Service.One(id)
|
||||
|
||||
@@ -378,6 +378,13 @@ func (l Service) Repository() repository.Repository {
|
||||
return l.repo
|
||||
}
|
||||
|
||||
func (l Service) ReloadCache(gameID string) error {
|
||||
if er, ok := l.repo.(*repository.EagerRepository); ok {
|
||||
return er.ReloadMetadata(repository.NewGameIdentifier(gameID))
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func (l Service) apply(src, dst string) error {
|
||||
if err := os.RemoveAll(dst); err != nil {
|
||||
return fmt.Errorf("failed to remove old save: %w", err)
|
||||
|
||||
@@ -474,12 +474,6 @@ func (r *EagerRepository) WriteMetadata(id GameIdentifier, m Metadata) error {
|
||||
return err
|
||||
}
|
||||
|
||||
// reload from disk because of md5
|
||||
m, err = r.Repository.Metadata(id)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
d := r.data[id.gameID]
|
||||
d.Metadata = m
|
||||
r.data[id.gameID] = d
|
||||
@@ -539,3 +533,39 @@ func (r *EagerRepository) Remove(id GameIdentifier) error {
|
||||
delete(r.data, id.gameID)
|
||||
return nil
|
||||
}
|
||||
|
||||
func (r *EagerRepository) ReloadMetadata(id GameIdentifier) error {
|
||||
backup, err := r.Repository.AllHist(id)
|
||||
if err != nil {
|
||||
return fmt.Errorf("[%s] failed to load hist data: %w", id, err)
|
||||
}
|
||||
|
||||
remote, err := r.Repository.Remote(id)
|
||||
if err != nil {
|
||||
return fmt.Errorf("[%s] failed to load remote metadata: %w", id, err)
|
||||
}
|
||||
|
||||
m, err := r.Repository.Metadata(id)
|
||||
if err != nil {
|
||||
return fmt.Errorf("[%s] failed to load metadata: %w", id, err)
|
||||
}
|
||||
|
||||
backups := make(map[string]Backup)
|
||||
for _, b := range backup {
|
||||
info, err := r.Repository.Backup(NewBackupIdentifier(id.gameID, b))
|
||||
if err != nil {
|
||||
return fmt.Errorf("[%s] failed to get backup information: %w", id, err)
|
||||
}
|
||||
|
||||
backups[b] = info
|
||||
}
|
||||
|
||||
r.data[id.gameID] = Data{
|
||||
Metadata: m,
|
||||
Remote: remote,
|
||||
DataPath: r.DataPath(id),
|
||||
Backup: backups,
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user