feat: add --time mode for using 24h time format
This commit is contained in:
+14
-5
@@ -18,6 +18,8 @@ func main() {
|
|||||||
tzFlag := flag.String("tz", "", "Timezone like +1000")
|
tzFlag := flag.String("tz", "", "Timezone like +1000")
|
||||||
// --github mode
|
// --github mode
|
||||||
ghFlag := flag.String("github", "", "From a github username")
|
ghFlag := flag.String("github", "", "From a github username")
|
||||||
|
// --time mode
|
||||||
|
timeFlag := flag.String("time", "", "Time like 15:00")
|
||||||
|
|
||||||
flag.Parse()
|
flag.Parse()
|
||||||
|
|
||||||
@@ -29,17 +31,24 @@ func main() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// 3. checks
|
// 3. checks
|
||||||
if *tzFlag != "" && *ghFlag != "" {
|
modes := 0
|
||||||
fmt.Println("Cannot use both --tz and --github modes")
|
for _, val := range []string{*tzFlag, *ghFlag, *timeFlag} {
|
||||||
|
if val != "" {
|
||||||
|
modes++
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if modes > 1 {
|
||||||
|
fmt.Println("Cannot use multiple modes at once")
|
||||||
os.Exit(1)
|
os.Exit(1)
|
||||||
}
|
}
|
||||||
if *tzFlag == "" && *ghFlag == "" {
|
if modes == 0 {
|
||||||
fmt.Println("Both args empty... exiting")
|
fmt.Println("No args provided... exiting")
|
||||||
os.Exit(1)
|
os.Exit(1)
|
||||||
}
|
}
|
||||||
|
|
||||||
// 4. exec
|
// 4. exec
|
||||||
p := tea.NewProgram(ui.NewModel(db, *ghFlag, *tzFlag))
|
p := tea.NewProgram(ui.NewModel(db, *ghFlag, *tzFlag, *timeFlag))
|
||||||
if _, err := p.Run(); err != nil {
|
if _, err := p.Run(); err != nil {
|
||||||
// I keep on forgetting, fmt.ErrorF makes an error, does not print
|
// I keep on forgetting, fmt.ErrorF makes an error, does not print
|
||||||
fmt.Printf("Error: %v", err)
|
fmt.Printf("Error: %v", err)
|
||||||
|
|||||||
@@ -0,0 +1,33 @@
|
|||||||
|
package core
|
||||||
|
|
||||||
|
import (
|
||||||
|
"time"
|
||||||
|
"tz-snipe/internal/geodata"
|
||||||
|
)
|
||||||
|
|
||||||
|
func GetTZsMatchingTime(db geodata.TimezoneMap, targetTime string) ([]string, error) {
|
||||||
|
// another go quirK: for layout it uses a fixed point in time
|
||||||
|
// as reference date Mon, 1/2 03:04:05 PM 2006 -0700
|
||||||
|
// 1 2 3 4 5 6 7
|
||||||
|
if _, err := time.Parse("15:04", targetTime); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
now := time.Now().UTC()
|
||||||
|
var matches []string
|
||||||
|
|
||||||
|
for tz := range db {
|
||||||
|
// Parse offset to location
|
||||||
|
zoneTime, err := time.Parse("-0700", tz)
|
||||||
|
if err != nil {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
// Check if the formatted string matches exactly
|
||||||
|
// same minute match
|
||||||
|
if now.In(zoneTime.Location()).Format("15:04") == targetTime {
|
||||||
|
matches = append(matches, tz)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return matches, nil
|
||||||
|
}
|
||||||
+18
-1
@@ -29,7 +29,7 @@ var _ tea.Model = Model{}
|
|||||||
// REMINDER REMINDER REMINDER
|
// REMINDER REMINDER REMINDER
|
||||||
// Model, NewModel, Init, Commands, Update, View is all you need
|
// Model, NewModel, Init, Commands, Update, View is all you need
|
||||||
|
|
||||||
func NewModel(db geodata.TimezoneMap, ghUser, manualTz string) Model {
|
func NewModel(db geodata.TimezoneMap, ghUser, manualTz, targetTime string) Model {
|
||||||
m := Model{
|
m := Model{
|
||||||
db: db,
|
db: db,
|
||||||
username: ghUser,
|
username: ghUser,
|
||||||
@@ -46,6 +46,23 @@ func NewModel(db geodata.TimezoneMap, ghUser, manualTz string) Model {
|
|||||||
m.table = newTable(m.preds)
|
m.table = newTable(m.preds)
|
||||||
m.displayTz = m.manualTz
|
m.displayTz = m.manualTz
|
||||||
}
|
}
|
||||||
|
case targetTime != "":
|
||||||
|
// Logic for time matching
|
||||||
|
tzs, err := core.GetTZsMatchingTime(db, targetTime)
|
||||||
|
if err != nil {
|
||||||
|
m.err = err
|
||||||
|
} else if len(tzs) == 0 {
|
||||||
|
m.err = fmt.Errorf("no timezones found matching %s", targetTime)
|
||||||
|
} else {
|
||||||
|
preds, err := core.GetStatsForTZs(tzs)
|
||||||
|
if err != nil {
|
||||||
|
m.err = err
|
||||||
|
} else {
|
||||||
|
m.preds = preds
|
||||||
|
m.table = newTable(m.preds)
|
||||||
|
m.displayTz = targetTime
|
||||||
|
}
|
||||||
|
}
|
||||||
case ghUser != "":
|
case ghUser != "":
|
||||||
m.loadingGithubTz = true
|
m.loadingGithubTz = true
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user