diff options
Diffstat (limited to 'lib/steam/package.go')
| -rw-r--r-- | lib/steam/package.go | 96 |
1 files changed, 96 insertions, 0 deletions
diff --git a/lib/steam/package.go b/lib/steam/package.go new file mode 100644 index 0000000..2e25994 --- /dev/null +++ b/lib/steam/package.go @@ -0,0 +1,96 @@ +package steam + +import ( + // "fmt" + "git.riedstra.us/mitch/steam-export/lib/archive" + "os" + "path/filepath" +) + +func (l *Library) PackageGameToFile(index int, file, compress string) error { + g := l.Games[index] + + working_dir, err := os.Getwd() + if err != nil { + return err + } + // output := working_dir + "/" + g + ".tar" + output, err := filepath.Abs(file) + if err != nil { + return err + } + + os.Chdir(l.Folder) + acf, err := l.FindACF(g) + if err != nil { + return err + } + input := []string{"common/" + g, acf} + a := archive.Archive{Output: output, Input: input} + err = a.Tar(compress) + if err != nil { + return err + } + + os.Chdir(working_dir) + + return nil +} + +func (l *Library) ExtractGameFromFile(f, compress string) error { + working_dir, err := os.Getwd() + if err != nil { + return err + } + + f, err = filepath.Abs(f) + if err != nil { + return err + } + + if err = os.Chdir(l.Folder); err != nil { + return err + } + u := &archive.Unarchive{ + Input: f, + } + if err := u.UnTar(compress); err != nil { + return err + } + + if err = os.Chdir(working_dir); err != nil { + return err + } + return nil +} + +func (l *Library) DeleteGame(i int) error { + g := l.Games[i] + + working_dir, err := os.Getwd() + if err != nil { + return err + } + + if err = os.Chdir(l.Folder); err != nil { + return err + } + + acf, err := l.FindACF(g) + if err != nil { + return err + } + // fmt.Fprintf(os.Stderr, "Removing %q %q\n", acf, "common/"+g) + if err := os.Remove(acf); err != nil { + return err + } + if err := os.RemoveAll("common/" + g); err != nil { + return err + } + + if err = os.Chdir(working_dir); err != nil { + return err + } + + return nil +} |
