fixes (the last)
This commit is contained in:
9
.vscode/launch.json
vendored
9
.vscode/launch.json
vendored
@@ -13,6 +13,15 @@
|
|||||||
"console": "integratedTerminal",
|
"console": "integratedTerminal",
|
||||||
"program": "${workspaceFolder}/cmd/web"
|
"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",
|
"name": "cli",
|
||||||
"type": "go",
|
"type": "go",
|
||||||
|
|||||||
@@ -164,6 +164,12 @@ func (s HTTPServer) upload(w http.ResponseWriter, r *http.Request) {
|
|||||||
return
|
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
|
// Respond success
|
||||||
w.WriteHeader(http.StatusCreated)
|
w.WriteHeader(http.StatusCreated)
|
||||||
}
|
}
|
||||||
@@ -215,7 +221,13 @@ func (s HTTPServer) histUpload(w http.ResponseWriter, r *http.Request) {
|
|||||||
defer file.Close()
|
defer file.Close()
|
||||||
|
|
||||||
if err := s.Service.CopyBackup(gameID, uuid, file); err != nil {
|
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)
|
internalServerError(w, r)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
@@ -271,7 +283,6 @@ func (s HTTPServer) histExists(w http.ResponseWriter, r *http.Request) {
|
|||||||
ok(finfo, w, r)
|
ok(finfo, w, r)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
func (s HTTPServer) metadata(w http.ResponseWriter, r *http.Request) {
|
func (s HTTPServer) metadata(w http.ResponseWriter, r *http.Request) {
|
||||||
id := chi.URLParam(r, "id")
|
id := chi.URLParam(r, "id")
|
||||||
metadata, err := s.Service.One(id)
|
metadata, err := s.Service.One(id)
|
||||||
|
|||||||
@@ -378,6 +378,13 @@ func (l Service) Repository() repository.Repository {
|
|||||||
return l.repo
|
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 {
|
func (l Service) apply(src, dst string) error {
|
||||||
if err := os.RemoveAll(dst); err != nil {
|
if err := os.RemoveAll(dst); err != nil {
|
||||||
return fmt.Errorf("failed to remove old save: %w", err)
|
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
|
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 := r.data[id.gameID]
|
||||||
d.Metadata = m
|
d.Metadata = m
|
||||||
r.data[id.gameID] = d
|
r.data[id.gameID] = d
|
||||||
@@ -539,3 +533,39 @@ func (r *EagerRepository) Remove(id GameIdentifier) error {
|
|||||||
delete(r.data, id.gameID)
|
delete(r.data, id.gameID)
|
||||||
return nil
|
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