From 04522929ec8bb086ae253905c6fee388857b7f08 Mon Sep 17 00:00:00 2001 From: g026r Date: Fri, 27 Sep 2024 19:22:22 -0400 Subject: [PATCH] Standalone application for fixing play times (#16) --- cmd/playfix/main.go | 58 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 58 insertions(+) create mode 100644 cmd/playfix/main.go diff --git a/cmd/playfix/main.go b/cmd/playfix/main.go new file mode 100644 index 0000000..dc6a4a6 --- /dev/null +++ b/cmd/playfix/main.go @@ -0,0 +1,58 @@ +package main + +import ( + "encoding/binary" + "log" + "os" + + "github.com/g026r/pocket-toolkit/pkg/io" +) + +// Simple application to fix played times & nothing else. + +func main() { + entries, err := io.LoadEntries(os.DirFS("./")) + if err != nil { + log.Fatal(err) + } + p, err := io.LoadPlaytimes(os.DirFS("./")) + if err != nil { + log.Fatal(err) + } + + complete := false + out, err := os.CreateTemp("", "playtimes_*.bin") + if err != nil { + log.Fatal(err) + } + defer func() { + _ = out.Close() + if complete { // Overwrite the original with the temp file if successful; delete it if not. + err = os.Rename(out.Name(), "System/Played Games/playtimes.bin") + } else { + err = os.Remove(out.Name()) + } + }() + + // Write header + if err := binary.Write(out, binary.BigEndian, io.PlaytimesHeader); err != nil { + log.Fatal(err) + } + if err := binary.Write(out, binary.LittleEndian, uint32(len(entries))); err != nil { + log.Fatal(err) + } + + // Write entries in the same order as list.bin + for _, e := range entries { + tmp := p[e.Sig] + tmp.Played = tmp.Played &^ 0xFF000000 // Fix the time. System prefix will get written by WriteTo + if err := binary.Write(out, binary.LittleEndian, e.Sig); err != nil { + log.Fatal(err) + } + if _, err := tmp.WriteTo(out); err != nil { + log.Fatal(err) + } + } + + complete = true +}