diff options
| -rw-r--r-- | main.go | 57 | 
1 files changed, 34 insertions, 23 deletions
| @@ -3,6 +3,7 @@ package main  import (  	_ "embed"  	"encoding/gob" +	"errors"  	"html/template"  	"io"  	"log" @@ -77,39 +78,49 @@ func main() {  	// If the .data file does not exist, create it in the cache directory  	{  		p := os.Getenv("XDG_CACHE_HOME") -		// TODO: remove for testing -		p = ""  		if p == "" {  			p = "."  		}  		DataFilename = p + "/" + DataFilename -		f, err := os.OpenFile(DataFilename, os.O_RDONLY|os.O_CREATE, 0666) -		if err != nil { -			log.Fatalln("Error while opening data file:", err) -		} - -		// Decode the data and import it into Ideas +		f, err := os.Open(DataFilename) +		if errors.Is(err, os.ErrNotExist) { +			// The file does not exist, so create one with only Version encoded +			log.Println("File does not exist, creating", DataFilename) +			f, err = os.Create(DataFilename) +			if err != nil { +				log.Fatalln("Error while creating data file:", err) +			} -		dec := gob.NewDecoder(f) -		var v string -		if err := dec.Decode(&v); err != io.EOF && err != nil { -			log.Fatalln("Error while decoding version:", err) -		} +			enc := gob.NewEncoder(f) +			if err := enc.Encode(Version); err != nil { +				log.Fatalln("Error while encoding Version:", err) +			} +		} else if err != nil { +			log.Fatalln("Error while opening data file:", err) +		} else { +			dec := gob.NewDecoder(f) -		if v != Version { -			log.Fatalf("Version mismatch for datafile@%s != package@%s\n", v, Version) -		} +			// Check the version +			var v string +			if err := dec.Decode(&v); err != io.EOF && err != nil { +				log.Fatalln("Error while decoding version:", err) +			} +			if v != Version { +				log.Fatalf("Version mismatch for datafile@%s != package@%s\n", v, Version) +			} -		err = dec.Decode(&Ideas) -		if err != nil && err != io.EOF { -			log.Fatalln("Error while decoding ideas:", err) +			// Decode the data and import it into Ideas +			err = dec.Decode(&Ideas) +			if err != nil && err != io.EOF { +				log.Fatalln("Error while decoding ideas:", err) +			} +			log.Printf("Imported @%s: %d ideas\n", v, len(Ideas)) +			if err := f.Close(); err != nil { +				log.Fatalln("Error while closing file:", err) +			}  		} -		log.Printf("Imported @%s: %d ideas\n", v, len(Ideas)) -		if err := f.Close(); err != nil { -			log.Fatalln("Error while closing file:", err) -		}  	}  	// Handle SIGINT | 
