Compare commits
	
		
			3 Commits
		
	
	
		
			120d61d1b6
			...
			238dab70fe
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 238dab70fe | |||
| 75668ad531 | |||
| f308e4351a | 
							
								
								
									
										16
									
								
								main.go
									
									
									
									
									
								
							
							
						
						
									
										16
									
								
								main.go
									
									
									
									
									
								
							@@ -34,9 +34,9 @@ type ROMCache struct {
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
const (
 | 
			
		||||
	romDirectory      = "public" // directory where ROMs are available for download
 | 
			
		||||
	buildOutDirectory = "out"    // directory from build system containing artifacts which we can move to romDirectory
 | 
			
		||||
	cacheFile         = "public/romcache.json"
 | 
			
		||||
	romDirectory      = "public"               // directory where ROMs are available for download
 | 
			
		||||
	buildOutDirectory = "out"                  // directory from build system containing artifacts which we can move to romDirectory
 | 
			
		||||
	cacheFile         = "public/romcache.json" // persistence between server restarts so we don't have to rehash all the ROM files each time the program starts
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
var ( // evil global variable
 | 
			
		||||
@@ -67,7 +67,7 @@ func init() {
 | 
			
		||||
		log.Printf("loaded cached file: %s", rom.Filename)
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Check if any new build artifacts and preload the romCache
 | 
			
		||||
	// Check if any new build artifacts and load any new files into the romCache
 | 
			
		||||
	moveBuildArtifacts()
 | 
			
		||||
	go updateROMCache()
 | 
			
		||||
}
 | 
			
		||||
@@ -106,7 +106,7 @@ func updateROMCache() {
 | 
			
		||||
 | 
			
		||||
	for i, v := range files {
 | 
			
		||||
 | 
			
		||||
		isLineageROM, splitName := isLineageROMZip(v)
 | 
			
		||||
		isLineageROM, splitName := parseROMFileName(v)
 | 
			
		||||
		if !isLineageROM {
 | 
			
		||||
			continue
 | 
			
		||||
		}
 | 
			
		||||
@@ -179,9 +179,11 @@ func updateROMCache() {
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// http - GET /
 | 
			
		||||
// Writes JSON response for the updater app to know what versions are available to download
 | 
			
		||||
// The LineageOS updater app needs a JSON array of type LineageOSROM
 | 
			
		||||
// Marshal's romCache.ROMs to JSON to serve as the response body
 | 
			
		||||
 | 
			
		||||
func lineageOSROMListHandler(w http.ResponseWriter, r *http.Request) {
 | 
			
		||||
	go func() {
 | 
			
		||||
	go func() { // Also checks for new builds - TBD need a better method as the first request will return no new updates.  inotify?
 | 
			
		||||
		newBuilds := moveBuildArtifacts()
 | 
			
		||||
		if newBuilds {
 | 
			
		||||
			updateROMCache()
 | 
			
		||||
 
 | 
			
		||||
@@ -30,7 +30,7 @@ func moveBuildArtifacts() bool {
 | 
			
		||||
	var newROMs bool
 | 
			
		||||
 | 
			
		||||
	for _, v := range files {
 | 
			
		||||
		if isLineageROM, _ := isLineageROMZip(v); !isLineageROM { // skip files that aren't LineageOS ROMs
 | 
			
		||||
		if isLineageROM, _ := parseROMFileName(v); !isLineageROM { // skip files that aren't LineageOS ROMs
 | 
			
		||||
			continue
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
@@ -61,14 +61,14 @@ func hashFile(filename string) (string, error) {
 | 
			
		||||
		return "", fmt.Errorf("failed to copy data from file to hash function: %v", err)
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return fmt.Sprintf("%x", h.Sum(nil)), nil
 | 
			
		||||
	return string(h.Sum(nil)), nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// false if a file is not a LineageOS ROM .zip file
 | 
			
		||||
// no formal validation is performed - only file naming convention is checked
 | 
			
		||||
// also returns a lineage ROM's filename sliced and delimited by -'s
 | 
			
		||||
// Example filename: lineage-20.0-20230604-UNOFFICIAL-sunfish.zip
 | 
			
		||||
func isLineageROMZip(v fs.DirEntry) (bool, []string) {
 | 
			
		||||
func parseROMFileName(v fs.DirEntry) (bool, []string) {
 | 
			
		||||
 | 
			
		||||
	// skip directories, non .zip files and files that don't begin with lineage-
 | 
			
		||||
	if v.Type().IsDir() || !strings.HasSuffix(v.Name(), ".zip") || !strings.HasPrefix(v.Name(), "lineage-") {
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user