aboutsummaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
Diffstat (limited to 'lib')
-rw-r--r--lib/archive/archive.go104
-rw-r--r--lib/archive/unarchive.go85
-rw-r--r--lib/config/config.go89
-rw-r--r--lib/config/config_unix.go21
-rw-r--r--lib/config/config_windows.go22
-rw-r--r--lib/steam/package.go96
-rw-r--r--lib/steam/steam.go123
-rw-r--r--lib/steam/unix.go10
-rw-r--r--lib/steam/windows.go5
9 files changed, 0 insertions, 555 deletions
diff --git a/lib/archive/archive.go b/lib/archive/archive.go
deleted file mode 100644
index 639a864..0000000
--- a/lib/archive/archive.go
+++ /dev/null
@@ -1,104 +0,0 @@
-package archive
-
-import (
- "archive/tar"
- "path/filepath"
-
- "compress/gzip"
-
- "io"
- "os"
-
- "strings"
-)
-
-type Archive struct {
- Output string
- Input []string
- file *os.File
-}
-
-func (a *Archive) Tar(compressionType string) error {
- var err error
- if a.file, err = os.Create(a.Output); err != nil {
- return err
- }
-
- defer a.file.Close()
-
- var twriter *tar.Writer
-
- // Set the compression type... if any
- switch compressionType {
- case "gz":
- gzwriter, err := gzip.NewWriterLevel(a.file, gzip.BestSpeed)
- if err != nil {
- return err
- }
- defer gzwriter.Close()
- // Write to the gzip writer
- twriter = tar.NewWriter(gzwriter)
- default:
- // Write directly to the file
- twriter = tar.NewWriter(a.file)
- }
-
- // Close off the tar writer when we're done
- defer twriter.Close()
-
- for _, v := range a.Input {
- if err := filepath.Walk(v, tarWalkfn(twriter)); err != nil {
- return err
- }
- }
-
- return nil
-
-}
-
-func tarWalkfn(writer *tar.Writer) filepath.WalkFunc {
- // This is an interesting trick to get around scoping issues
- return func(path string, info os.FileInfo, err error) error {
- if err != nil {
- return err
- }
-
- if info.IsDir() {
- return nil
- }
-
- f, err := os.Open(path)
- if err != nil {
- return err
- }
- defer f.Close()
-
- // Convert Windows paths to Unix paths
- path = strings.Replace(path, "\\", "/", -1)
-
- // TODO; See if tar.FileInfoheader() could be used instead
- // without the pathing issues I encountered
- h := &tar.Header{
- Name: path,
- Size: info.Size(),
- // I don't like it... but it helps with platform compatibility
- Mode: 0664,
- ModTime: info.ModTime(),
- }
-
- err = writer.WriteHeader(h)
- if err != nil {
- return err
- }
-
- _, err = io.Copy(writer, f)
- if err != nil {
- // TODO: Figure out how to add more useful information to
- // These errors
- // fmt.Fprintln(os.Stderr, f.Name())
- return err
- }
-
- return nil
- }
-}
diff --git a/lib/archive/unarchive.go b/lib/archive/unarchive.go
deleted file mode 100644
index 8a5617e..0000000
--- a/lib/archive/unarchive.go
+++ /dev/null
@@ -1,85 +0,0 @@
-package archive
-
-import (
- "archive/tar"
- fp "path/filepath"
-
- "compress/gzip"
-
- "io"
- "os"
-
- "strings"
-)
-
-type Unarchive struct {
- Input string
- tarReader *tar.Reader
-}
-
-// Extracts a tar arcive to the current working directory
-// This will overwrite everything. So be careful
-func (u *Unarchive) UnTar(compressionType string) error {
- f, err := os.Open(u.Input)
- if err != nil {
- return err
- }
- defer f.Close()
-
- var treader *tar.Reader
-
- switch compressionType {
- case "gz":
- gzreader, err := gzip.NewReader(f)
- if err != nil {
- return err
- }
- // Read from the gzip reader instead of the file
- treader = tar.NewReader(gzreader)
- default:
- // Read from the file directly
- treader = tar.NewReader(f)
- }
-
- for {
- hdr, err := treader.Next()
- if err == io.EOF {
- // We've reached the end! Whoee
- break
- }
- if err != nil {
- return err
- }
-
- // Fix windows slashes...
- fileName := strings.Replace(hdr.Name, "\\", "/", -1)
-
- info := hdr.FileInfo()
- if info.IsDir() {
- // I don't like hard-coded permissions but it
- // it helps with overall platform compatibility
- if err = os.MkdirAll(fileName, 0775); err != nil {
- return err
- }
- continue
- }
-
- if err = os.MkdirAll(fp.Dir(fileName), 0775); err != nil {
- return err
- }
-
- // Create a file handle to work with
- // f, err := os.Create(fileName)
- f, err := os.OpenFile(fileName, os.O_CREATE|os.O_TRUNC|os.O_WRONLY, 0664)
- if err != nil {
- return err
- }
- defer f.Close()
- if _, err := io.Copy(f, treader); err != nil {
- return err
- }
-
- }
-
- return nil
-}
diff --git a/lib/config/config.go b/lib/config/config.go
deleted file mode 100644
index 839acbf..0000000
--- a/lib/config/config.go
+++ /dev/null
@@ -1,89 +0,0 @@
-// Used to define and load this application's specific configuration
-package config
-
-import (
- "gopkg.in/yaml.v2"
- "io/ioutil"
- "os"
- "os/exec"
-)
-
-type Config struct {
- SteamRepositories []string `yaml:"SteamRepositories"`
- DefaultRepository string `yaml:"DefaultRepository"`
- Listen string
-}
-
-var configFilename string = "steam-export.yml"
-
-// By default it reads 'config.yml' in the current directory
-func LoadConfig() (*Config, error) {
- c := &Config{}
- err := c.ReadDefaultConfig()
- return c, err
-}
-
-func (c *Config) ReadConfig(cfg string) error {
- contents, err := ioutil.ReadFile(cfg)
- if err != nil {
- return err
- }
- return yaml.Unmarshal([]byte(contents), c)
-}
-
-func checkConfigFile(cf string) error {
- // Check if our config file exists, or create it
- if _, err := os.Stat(cf); err != nil {
- if f, err := os.Create(cf); err != nil {
- return err
- } else {
- f.WriteString(`
----
-listen: 0.0.0.0:9413
-# Repositories that you want to expose on the web server
-SteamRepositories:
- # We're ideally looking for the full path to the steamapps folder
- # On windows you're going to escape the slashes
- - "C:\\Program Files (x86)\\Steam\\steamapps"
- # - "/usr/mitch/SteamGames/steamapps"
-
-# This defaults to:
-# Only change this if your default Steam library is different than the Steam default
-# DefaultRepository: "/usr/mitch/SteamGames/steamapps"
-# DefaultRepository: "Z:\\SteamGames\\steamapps"
-`)
- f.Close()
- }
- }
- return nil
-}
-
-func (c *Config) ReadDefaultConfig() error {
- if err := c.ReadConfig(configFilename); err != nil {
- if err = checkConfigFile(fn); err != nil {
- return err
- }
- return c.ReadConfig(fn)
- }
- return nil
-}
-
-func EditDefaultConfig(e string) error {
- if e != "" {
- editor = e
- }
-
- if _, err := os.Stat(configFilename); err != nil {
- if _, err := os.Stat(fn); err != nil {
- return err
- }
- c := exec.Command(editor, fn)
- c.Stdout = os.Stdout
- c.Stdin = os.Stdin
- c.Stderr = os.Stderr
- return c.Run()
- }
- cmd := exec.Command(editor, configFilename)
- return cmd.Run()
-
-}
diff --git a/lib/config/config_unix.go b/lib/config/config_unix.go
deleted file mode 100644
index 8be1967..0000000
--- a/lib/config/config_unix.go
+++ /dev/null
@@ -1,21 +0,0 @@
-// +build darwin dragonfly freebsd linux nacl netbsd openbsd solaris
-
-package config
-
-import (
- "os"
- "path/filepath"
-)
-
-var (
- editor string = setEditor()
- fn string = filepath.Join(os.Getenv("HOME"), "."+configFilename)
-)
-
-func setEditor() string {
- e := os.Getenv("EDITOR")
- if e == "" {
- return "vi"
- }
- return e
-}
diff --git a/lib/config/config_windows.go b/lib/config/config_windows.go
deleted file mode 100644
index 39b6b6c..0000000
--- a/lib/config/config_windows.go
+++ /dev/null
@@ -1,22 +0,0 @@
-// +build windows
-
-package config
-
-import (
- "os"
- // "os/exec"
- "path/filepath"
-)
-
-var (
- editor string = setEditor()
- fn string = filepath.Join(os.Getenv("LOCALAPPDATA"), configFilename)
-)
-
-func setEditor() string {
- e := os.Getenv("EDITOR")
- if e == "" {
- return `C:\Program Files\Windows NT\Accessories\wordpad.exe`
- }
- return e
-}
diff --git a/lib/steam/package.go b/lib/steam/package.go
deleted file mode 100644
index 2e25994..0000000
--- a/lib/steam/package.go
+++ /dev/null
@@ -1,96 +0,0 @@
-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
-}
diff --git a/lib/steam/steam.go b/lib/steam/steam.go
deleted file mode 100644
index ea27e5a..0000000
--- a/lib/steam/steam.go
+++ /dev/null
@@ -1,123 +0,0 @@
-// This is designed to be a rather simplistic library to help pull information
-// from a local steam library
-package steam
-
-import (
- "fmt"
- "io/ioutil"
-
- "errors"
-
- "bufio"
- "os"
- "path/filepath"
- "strings"
- // "log"
-)
-
-type Library struct {
- Folder string
- Games []string
-}
-
-func ProcessMultipleLibraries(r []string) ([]*Library, error) {
- var libs []*Library
- for _, i := range r {
- lib := &Library{}
- err := lib.ProcessLibrary(i)
- if err != nil {
- return nil, err
- }
- libs = append(libs, lib)
- }
- return libs, nil
-}
-
-// Populate the "Folder" and "Games" fields based on the provided directory
-func (s *Library) ProcessLibrary(r string) error {
- if hasCommon(r) {
- dirs, err := ioutil.ReadDir(r + "/common")
- if err != nil {
- return err
- }
- s.Folder = r
- for _, f := range dirs {
- if f.IsDir() {
- s.Games = append(s.Games, f.Name())
- }
- }
- } else {
- return errors.New(fmt.Sprintf("No common directory in: %s", r))
- }
- return nil
-}
-
-// Find the ACF files related to this video game
-func (l *Library) FindACF(g string) (string, error) {
- working_dir, err := os.Getwd()
- if err != nil {
- return "", err
- }
- if err = os.Chdir(l.Folder); err != nil {
- return "", err
- }
- files, err := filepath.Glob("*.acf")
- if err != nil {
- return "", err
- }
- for _, fn := range files {
- info, err := os.Lstat(fn)
- if err != nil {
- return "", err
- }
- // We don't want it if it's a directory
- if info.IsDir() {
- continue
- }
-
- // Open up the file
- f, err := os.Open(fn)
- defer f.Close()
- if err != nil {
- return "", err
- }
- scanner := bufio.NewScanner(f)
- for scanner.Scan() {
- // Finally check and see if the file has the video game name
- if strings.Contains(scanner.Text(), g) {
- os.Chdir(working_dir)
- return fn, nil
- // fmt.Printf("%s/%s:%d: %s\n", root, path, i, scanner.Text())
- }
- }
-
- }
- str := "Couldn't find ACF file related to Game: %s"
- return "", errors.New(fmt.Sprintf(str, g))
-}
-
-// This is automatically called to print out the contents of the struct
-// when things like fmt.Println are used
-func (s *Library) String() (str string) {
- str = fmt.Sprintln("\n----")
- str = str + fmt.Sprintln(s.Folder)
- str = str + "\n----\n"
- for k, v := range s.Games {
- str = str + fmt.Sprintf("%d: %s\n", k, v)
- //str = str + fmt.Sprintln(v)
- }
- return
-}
-
-func hasCommon(d string) bool {
- dirs, err := ioutil.ReadDir(d)
- if err != nil {
- return false
- }
- for _, f := range dirs {
- if f.Name() == "common" && f.IsDir() {
- return true
- }
- }
- return false
-}
diff --git a/lib/steam/unix.go b/lib/steam/unix.go
deleted file mode 100644
index caa4b43..0000000
--- a/lib/steam/unix.go
+++ /dev/null
@@ -1,10 +0,0 @@
-// +build darwin dragonfly freebsd linux nacl netbsd openbsd solaris
-
-package steam
-
-import (
- "os"
- "path/filepath"
-)
-
-var DefaultLib string = filepath.Join(os.Getenv("HOME"), ".steam/steam/steamapps")
diff --git a/lib/steam/windows.go b/lib/steam/windows.go
deleted file mode 100644
index 17fe62c..0000000
--- a/lib/steam/windows.go
+++ /dev/null
@@ -1,5 +0,0 @@
-// +build windows
-
-package steam
-
-var DefaultLib string = `C:\Program Files (x86)\Steam\steamapps`