diff options
| author | Mitch Riedstra <mitch@riedstra.us> | 2017-01-01 18:12:53 -0500 |
|---|---|---|
| committer | Mitch Riedstra <mitch@riedstra.us> | 2017-01-01 18:12:53 -0500 |
| commit | 8c2ed23f2e25265c6a74870eb4f6b5ad0e82f475 (patch) | |
| tree | 3804c9209a2ad59c6096c1994ab541134798bc48 /steam/steam.go | |
| parent | e2044c137569c08dd025d2e7fcb4575cf3cae3f2 (diff) | |
| download | steam-export-8c2ed23f2e25265c6a74870eb4f6b5ad0e82f475.tar.gz steam-export-8c2ed23f2e25265c6a74870eb4f6b5ad0e82f475.tar.xz | |
Add ability to find the ACF file related to the game
Diffstat (limited to 'steam/steam.go')
| -rw-r--r-- | steam/steam.go | 57 |
1 files changed, 53 insertions, 4 deletions
diff --git a/steam/steam.go b/steam/steam.go index b8052ec..02ecd7e 100644 --- a/steam/steam.go +++ b/steam/steam.go @@ -1,9 +1,18 @@ +// This is designed to be a rather simplistic library to help pull information +// from a local steam library package steam import ( "fmt" "io/ioutil" - //"log" + + "errors" + + "bufio" + "os" + "path/filepath" + "strings" + // "log" ) type Library struct { @@ -24,6 +33,7 @@ func ProcessMultipleLibraries(r []string) ([]*Library, error) { 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") @@ -33,7 +43,6 @@ func (s *Library) ProcessLibrary(r string) error { s.Folder = r for _, f := range dirs { if f.IsDir() { - // log.Println(*s.Games) s.Games = append(s.Games, f.Name()) } } @@ -41,12 +50,52 @@ func (s *Library) ProcessLibrary(r string) error { return nil } +// Find the ACF files related to this video game +func (l *Library) FindACF(g string) (string, error) { + globFolder := l.Folder + "/*.acf" + files, err := filepath.Glob(globFolder) + 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) { + 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("----") str = str + fmt.Sprintln(s.Folder) str = str + "----\n" - for _, v := range s.Games { - str = str + fmt.Sprintln(v) + for k, v := range s.Games { + str = str + fmt.Sprintf("%d: %s\n", k, v) + //str = str + fmt.Sprintln(v) } return } |
