feat: add --time mode for using 24h time format

This commit is contained in:
2026-02-10 22:53:00 +00:00
parent af383be2b2
commit 4578eb2406
3 changed files with 65 additions and 6 deletions
+14 -5
View File
@@ -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)
+33
View File
@@ -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
View File
@@ -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
} }