summaryrefslogtreecommitdiffstats
path: root/main.go
diff options
context:
space:
mode:
Diffstat (limited to 'main.go')
-rw-r--r--main.go97
1 files changed, 2 insertions, 95 deletions
diff --git a/main.go b/main.go
index 0a86101..7cfe341 100644
--- a/main.go
+++ b/main.go
@@ -13,11 +13,11 @@ import (
"regexp"
"strconv"
"strings"
- "time"
"ricketyspace.net/peach/nws"
"ricketyspace.net/peach/photon"
"ricketyspace.net/peach/version"
+ "ricketyspace.net/peach/weather"
)
// Peach port. Defaults to 8151
@@ -36,35 +36,6 @@ var peachTemplates = template.Must(template.ParseFS(peachFS, "templates/*.tmpl")
// Lat,Long regex.
var latLngRegex = regexp.MustCompile(`/(-?[0-9]+\.?[0-9]+?),(-?[0-9]+\.?[0-9]+)`)
-type Weather struct {
- Title string
- Version string
- Location string
- Now WeatherNow
- Q2HTimeline WeatherTimeline // Q2H forecast of the next 12 hours.
- BiDailyTimeline WeatherTimeline // BiDaily forecast for the next 3 days.
-}
-
-type WeatherNow struct {
- Temperature int
- TemperatureUnit string
- Forecast string
- WindSpeed string
- WindDirection string
-}
-
-type WeatherPeriod struct {
- Name string
- Forecast string
- Hour int
- Temperature int
- TemperatureUnit string
-}
-
-type WeatherTimeline struct {
- Periods []WeatherPeriod
-}
-
type Search struct {
Title string
Version string
@@ -128,7 +99,7 @@ func showWeather(w http.ResponseWriter, lat, lng float32) {
}
// Make weather
- weather, err := NewWeather(forecastBundle.Point,
+ weather, err := weather.NewWeather(forecastBundle.Point,
forecastBundle.Forecast,
forecastBundle.ForecastHourly)
if err != nil {
@@ -176,70 +147,6 @@ func serveStaticFile(w http.ResponseWriter, r *http.Request) {
server.ServeHTTP(w, r)
}
-func NewWeather(point *nws.Point, f, fh *nws.Forecast) (*Weather, error) {
- w := new(Weather)
- w.Location = fmt.Sprintf("%s, %s",
- strings.ToLower(point.Properties.RelativeLocation.Properties.City),
- strings.ToLower(point.Properties.RelativeLocation.Properties.State),
- )
- w.Title = w.Location
- w.Version = version.Version
- w.Now = WeatherNow{
- Temperature: fh.Properties.Periods[0].Temperature,
- TemperatureUnit: fh.Properties.Periods[0].TemperatureUnit,
- Forecast: fh.Properties.Periods[0].ShortForecast,
- WindSpeed: fh.Properties.Periods[0].WindSpeed,
- WindDirection: fh.Properties.Periods[0].WindDirection,
- }
-
- // Build Q2H timeline for the 12 hours.
- q2hPeriods := []WeatherPeriod{}
- max := 6
- for i, period := range fh.Properties.Periods {
- if i%2 != 0 {
- continue // Take every other period
- }
- t, err := time.Parse(time.RFC3339, period.StartTime)
- if err != nil {
- return nil, err
- }
- p := WeatherPeriod{
- Forecast: period.DetailedForecast,
- Hour: t.Hour(),
- Temperature: period.Temperature,
- TemperatureUnit: period.TemperatureUnit,
- }
- q2hPeriods = append(q2hPeriods, p)
- if len(q2hPeriods) == max {
- break
- }
- }
- w.Q2HTimeline = WeatherTimeline{
- Periods: q2hPeriods,
- }
-
- // Build BiDaily timeline for the next 3 days.
- bdPeriods := []WeatherPeriod{}
- max = 8
- for _, period := range f.Properties.Periods {
- p := WeatherPeriod{
- Name: period.Name,
- Forecast: period.DetailedForecast,
- Temperature: period.Temperature,
- TemperatureUnit: period.TemperatureUnit,
- }
- bdPeriods = append(bdPeriods, p)
- if len(bdPeriods) == max {
- break
- }
- }
- w.BiDailyTimeline = WeatherTimeline{
- Periods: bdPeriods,
- }
-
- return w, nil
-}
-
func NewSearch(r *http.Request) (*Search, error) {
s := new(Search)
s.Title = "search"