diff --git a/main.go b/main.go index da890f3..332ba12 100644 --- a/main.go +++ b/main.go @@ -43,6 +43,8 @@ var ( func init() { romCache = ROMCache{} romCache.Cached = make(map[string]bool) + + moveBuildArtifacts("out", "public") go updateROMCache("public") } @@ -68,6 +70,7 @@ func updateROMCache(romDirectory string) { log.Printf("failed to open ROM directory: %v", err) return } + defer f.Close() files, err := f.ReadDir(0) if err != nil { log.Printf("failed to read files in directory: %v", err) @@ -134,6 +137,48 @@ func updateROMCache(romDirectory string) { } } +// returns true if new builds were moved +func moveBuildArtifacts(outDirectory, romDirectory string) bool { + + f, err := os.Open(romDirectory) + if err != nil { + log.Printf("failed to open ROM directory: %v", err) + return false + } + defer f.Close() + files, err := f.ReadDir(0) + if err != nil { + log.Printf("failed to read files in directory: %v", err) + return false + } + + var newROMs bool + + for _, v := range files { + // skip directories + if v.Type().IsDir() { + continue + } + // skip non .zip files + if !strings.HasSuffix(v.Name(), ".zip") { + continue + } + // Parse filename and skip files that can't be parsed + splitName := strings.Split(v.Name(), "-") + if len(splitName) != 5 { + continue + } + newROMs = true + err := os.Rename(fmt.Sprintf("%s/%s", outDirectory, v.Name()), fmt.Sprintf("%s/%s", romDirectory, v.Name())) + if err != nil { + log.Printf("failed to move file '%s' from out to rom directory: %v", v.Name(), err) + continue + } + } + + return newROMs +} + // http - GET / // Writes JSON response for the updater app to know what versions are available to download func lineageOSROMListHandler(w http.ResponseWriter, r *http.Request) { @@ -152,7 +197,12 @@ func lineageOSROMListHandler(w http.ResponseWriter, r *http.Request) { w.Write(b) - go updateROMCache("public") + go func() { + newBuilds := moveBuildArtifacts("out", "public") + if newBuilds { + updateROMCache("public") + } + }() } func hashFile(filename string) (string, error) {