diff --git a/airports.go b/airports.go index 214f0de..34ef935 100644 --- a/airports.go +++ b/airports.go @@ -209,7 +209,7 @@ func validateData(dataDir string) { } if downloadFiles { fmt.Println("Downloading CSV files from OurAirports.com...") - alphafoxtrot.DownloadDatabase(dataDir) + DownloadDatabase(dataDir) } } diff --git a/downloader.go b/downloader.go new file mode 100644 index 0000000..d46b55a --- /dev/null +++ b/downloader.go @@ -0,0 +1,49 @@ +package main + +import ( + "errors" + "fmt" + "path" + "time" + + alphafoxtrot "github.com/grumpypixel/go-airport-finder" + "github.com/grumpypixel/go-webget" +) + +// Download csv files from OurAirports.com +func DownloadDatabase(targetDir string) error { + files := make([]string, 0) + for _, filename := range alphafoxtrot.OurAirportsFiles { + files = append(files, alphafoxtrot.OurAirportsBaseURL+filename) + } + var errs []error + for _, url := range files { + options := webget.Options{ + ProgressHandler: MyProgress{}, + Timeout: time.Second * 60, + CreateTargetDir: true, + } + err := webget.DownloadToFile(url, targetDir, "", &options) + if err != nil { + errs = append(errs, err) + } + } + return errors.Join(errs...) +} + +type MyProgress struct{} + +func (p MyProgress) Start(sourceURL string) { + // fmt.Println() +} + +func (p MyProgress) Update(sourceURL string, percentage float64, bytesRead, contentLength int64) { + if percentage > 0 { + fmt.Printf("\rDownloading %s: %v bytes [%.2f%%]", path.Base(sourceURL), bytesRead, percentage) + } + fmt.Printf("\rDownloading %s: %v bytes [done]", path.Base(sourceURL), bytesRead) +} + +func (p MyProgress) Done(sourceURL string) { + fmt.Println() +} diff --git a/go.mod b/go.mod index 99507d6..78bc474 100644 --- a/go.mod +++ b/go.mod @@ -5,12 +5,12 @@ go 1.21 require ( github.com/golang/geo v0.0.0-20230421003525-6adc56603217 github.com/grumpypixel/go-airport-finder v0.0.0-20210902211810-793a4fb1490b + github.com/grumpypixel/go-webget v0.0.1 github.com/labstack/echo/v4 v4.11.1 ) require ( github.com/golang-jwt/jwt v3.2.2+incompatible // indirect - github.com/grumpypixel/go-webget v0.0.1 // indirect github.com/labstack/gommon v0.4.0 // indirect github.com/mattn/go-colorable v0.1.13 // indirect github.com/mattn/go-isatty v0.0.19 // indirect