From 8c2ed23f2e25265c6a74870eb4f6b5ad0e82f475 Mon Sep 17 00:00:00 2001 From: Mitch Riedstra Date: Sun, 1 Jan 2017 18:12:53 -0500 Subject: Add ability to find the ACF file related to the game --- steam/steam.go | 57 +++++++++++++++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 53 insertions(+), 4 deletions(-) (limited to 'steam') 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 } -- cgit v1.2.3