From db4d2b40895db41ce188549f49a6f277ba95c890 Mon Sep 17 00:00:00 2001 From: Martin Kagamino Lehoux Date: Sun, 6 Sep 2026 16:40:17 +0200 Subject: Split cli.go into per-domain command files Move each CLI command into its owning package (mountain_pass, ride, web) with dispatch and usage in main.go; remove the cli package. --- mountain_pass/cli.go | 39 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 39 insertions(+) create mode 100644 mountain_pass/cli.go (limited to 'mountain_pass') diff --git a/mountain_pass/cli.go b/mountain_pass/cli.go new file mode 100644 index 0000000..ef8dfda --- /dev/null +++ b/mountain_pass/cli.go @@ -0,0 +1,39 @@ +package mountain_pass + +import ( + "context" + "database/sql" + "os" + + "github.com/martinlehoux/kagamigo/kcore" + "github.com/schollz/progressbar/v3" +) + +// ProgressBarEnabled reports whether stderr is attached to a terminal, so the +// progress bar only renders for interactive runs and stays out of piped or +// redirected output. +func ProgressBarEnabled() bool { + fi, err := os.Stderr.Stat() + return err == nil && fi.Mode()&os.ModeCharDevice != 0 +} + +func FetchOSM() { + err := FetchFrancePBF("france-latest.osm.pbf") + kcore.Expect(err, "failed to download France OSM PBF") +} + +func ExtractOSM(db *sql.DB, pbfPath string) { + var bar *progressbar.ProgressBar + _, err := ExtractMountainPasses(context.Background(), pbfPath, db, func(current, total int64) { + if bar == nil && ProgressBarEnabled() { + bar = progressbar.DefaultBytes(total, "Extracting mountain passes") + } + if bar != nil { + bar.Set64(current) + } + }) + if bar != nil { + bar.Finish() + } + kcore.Expect(err, "failed to extract mountain passes from OSM") +} -- cgit v1.3