|
|
|
@ -3,6 +3,7 @@ package statusscreen
|
|
|
|
|
import (
|
|
|
|
|
"bytes"
|
|
|
|
|
"encoding/json"
|
|
|
|
|
"errors"
|
|
|
|
|
"fmt"
|
|
|
|
|
"github.com/olekukonko/tablewriter"
|
|
|
|
|
"io/ioutil"
|
|
|
|
@ -71,10 +72,12 @@ func (sl *SL) GetOutput() string {
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
for _, v := range sl.lastResponse.ResponseData.Metros {
|
|
|
|
|
formattedTime, _ := sl.formatDisplayTime(v.ExpectedDateTime)
|
|
|
|
|
|
|
|
|
|
table.Append([]string{
|
|
|
|
|
v.LineNumber,
|
|
|
|
|
v.Destination,
|
|
|
|
|
sl.formatDisplayTime(v.ExpectedDateTime),
|
|
|
|
|
formattedTime,
|
|
|
|
|
v.TimeTabledDateTime[11:], // Remove YYYY-MM-DDT from the beginning of the string
|
|
|
|
|
v.ExpectedDateTime[11:], // Remove YYYY-MM-DDT from the beginning of the string
|
|
|
|
|
})
|
|
|
|
@ -117,7 +120,7 @@ func (sl *SL) getTimeTable() (SLResponse, error) {
|
|
|
|
|
return parsedResponse, nil
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func (sl *SL) formatDisplayTime(expected string) string {
|
|
|
|
|
func (sl *SL) formatDisplayTime(expected string) (string, error) {
|
|
|
|
|
myTimeZone, _ := time.Now().Zone()
|
|
|
|
|
|
|
|
|
|
then, err := time.Parse("2006-01-02T15:04:05 MST", expected+" "+myTimeZone)
|
|
|
|
@ -127,13 +130,21 @@ func (sl *SL) formatDisplayTime(expected string) string {
|
|
|
|
|
|
|
|
|
|
timeLeft := time.Since(then).Seconds() * -1
|
|
|
|
|
|
|
|
|
|
// If time is less than zero
|
|
|
|
|
if timeLeft < 0 {
|
|
|
|
|
return "undefined", errors.New("Train is gone already")
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// If time is less than one minute, show seconds
|
|
|
|
|
if timeLeft <= 60 && timeLeft > 0 {
|
|
|
|
|
return fmt.Sprintf("%d sec", int(timeLeft))
|
|
|
|
|
return fmt.Sprintf("%d sec", int(timeLeft)), nil
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// If time is less than one hour, show minutes
|
|
|
|
|
if timeLeft <= 3600 && timeLeft > 0 {
|
|
|
|
|
return fmt.Sprintf("%d min", int(timeLeft)/60)
|
|
|
|
|
return fmt.Sprintf("%d min", int(timeLeft)/60), nil
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return fmt.Sprintf("%02d:%02d:%02d", then.Hour(), then.Minute(), then.Second())
|
|
|
|
|
// Otherwise, just return a timestamp: HH:MM:SS
|
|
|
|
|
return fmt.Sprintf("%02d:%02d:%02d", then.Hour(), then.Minute(), then.Second()), nil
|
|
|
|
|
}
|
|
|
|
|