package cmd import ( "encoding/json" "fmt" "os" "time" "git.sr.ht/~timharek/yr-go/cmd/flags" "git.sr.ht/~timharek/yr-go/internal/nominatim" "git.sr.ht/~timharek/yr-go/yr" "github.com/spf13/cobra" ) var nowCmd = &cobra.Command{ Use: "now ", Aliases: []string{"current", "n"}, Short: "Get current forecasted weather", Args: cobra.MaximumNArgs(1), Run: now, } func init() { rootCmd.AddCommand(nowCmd) } func now(cmd *cobra.Command, args []string) { isJson, err := cmd.Flags().GetBool(flags.JSON) cobra.CheckErr(err) isUTC, err := cmd.Flags().GetBool(flags.UTC) cobra.CheckErr(err) lon, _ := cmd.Flags().GetFloat64(flags.LON) lat, _ := cmd.Flags().GetFloat64(flags.LAT) c, err := yr.New() cobra.CheckErr(err) if len(args) == 0 && (lon == 0 || lat == 0) { fmt.Fprintln(os.Stderr, "No location or coordinates provided.") os.Exit(1) } n := &yr.Forecast{} if len(args) == 0 { n, err = c.NowCoords(&nominatim.Coordinates{Longitude: lon, Latitude: lat}, nil) cobra.CheckErr(err) } else { location := args[0] n, err = c.Now(location) cobra.CheckErr(err) } if isJson { j, err := json.MarshalIndent(n, "", " ") cobra.CheckErr(err) fmt.Printf("%s", j) return } itemTime := n.Time.Local() if isUTC { itemTime = n.Time } fmt.Printf( `%s now: %s Temperature: %.1f °C Rain: %.1f mm Wind: %.1f m/s from %s `, n.Location, itemTime.Format(time.DateTime), n.Temperature, n.Percipitation, n.Wind.Speed, n.Wind.DirectionToString(), ) }