tempus/main.go

159 lines
3.8 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package main
import (
"fmt"
"os"
// "sync"
// "time"
// "github.com/charmbracelet/bubbles/list"
tea "github.com/charmbracelet/bubbletea"
"github.com/emersion/go-webdav/caldav"
// "slices"
// "strconv"
)
// var waitGroup sync.WaitGroup
func errHandler(err error, message string) {
if err != nil {
fmt.Printf("\n\n%s: %s\n", message, err)
os.Exit(1)
}
}
func main() {
options, err := ParseOptions()
errHandler(err, "Error parsing options")
m := InitModel()
// debugKeyring()
// err = storeCredentialsToKeyring("https://pkg.go.dev/encoding/base64#Encoding.EncodeToString", "casual", "h>ÕdzPlÇqQ+çCQ{ð±;Kм7¸Âhð~Ümy)v")
// errHandler(err, "Error parsing options:")
// if we provide login credentials via cli
var calendars []caldav.Calendar
if options.URL != "" {
err = options.InitDAVclients()
errHandler(err, "Unexpected error (we couldn't initiate WebDAV/CalDAV client)")
calendars, err = GetCalendars()
errHandler(err, "Error getting calendars (incorrect url/login/password)")
var found bool
// var calPath string
if options.Calendar != "" {
for _,calendar := range calendars {
if calendar.Name == options.Calendar {
found = true
// calPath = calendar.Path
m.Creds.CalendarPath = calendar.Path
}
}
if ! found {
fmt.Println("we don't have calendar ", options.Calendar, ". We have:")
for _,calendar := range calendars {
fmt.Println(calendar.Name)
}
os.Exit(1)
}
// calendarObjects, err := GetTODOs(calPath)
// errHandler(err, "Error getting TODOs")
//
// today := time.Now() //TODO move to tui and remove it
// todayTodos, err := ParseDueDateTODOs(calendarObjects, today)
// tomorrow := time.Now().AddDate(0, 0, 1)
// tomorrowTodos, err := ParseDueDateTODOs(calendarObjects, tomorrow)
// //TODO remove it
// fmt.Println("In total we have", len(calendarObjects), "todos")
// //TODO remove it
// var itemsToday []list.Item
// var itemsTomorrow []list.Item
// for _, todo := range todayTodos {
// itemsToday = append(itemsToday, todo)
// }
// for _, todo := range tomorrowTodos {
// itemsTomorrow = append(itemsTomorrow, todo)
// }
//TODO remove it
m.GatherTodos()
// m.TodayTab = list.New(itemsToday, list.NewDefaultDelegate(), 0, 0)
// m.TodayTab.Title = "Today"
// m.TomorrowTab = list.New(itemsTomorrow, list.NewDefaultDelegate(), 0, 0)
// m.TomorrowTab.Title = "Tomorrow"
m.LoggedIn = true
m.ActiveWindow = "today"
} else {
//TODO go to calendars page
// m.LoggedIn = true
m.ActiveWindow = "calendarChoose"
// items := []list.Item{
// item("Ramen"),
// item("Tomato Soup"),
// item("Hamburgers"),
// item("Cheeseburgers"),
// item("Currywurst"),
// item("Okonomiyaki"),
// item("Pasta"),
// item("Fillet Mignon"),
// item("Caviar"),
// item("Just Wine"),
// }
}
} else {
//TODO I'm on a highway to (IfElse) hell!
//TODO probably need to do more careful debug
creds, err := getCredentialsFromKeyring()
m.Creds = creds
if err != nil {
//we don't have saved credentials, go to login page
m.ActiveWindow = "login"
} else {
err = m.LoginToCalendar()
if err != nil {
//we have problem to auth! Go to relogin
//TODO say that there is a problem with login
m.ActiveWindow = "login"
} else {
err = m.GatherTodos()
if err != nil {
//we have problem to auth! Go to relogin
//TODO say that there is a problem with login
m.ActiveWindow = "login"
} else {
m.LoggedIn = true
m.ActiveWindow = "today"
}
}
}
}
//DEBUG stuff
//DEBUG stuff
p := tea.NewProgram(m, tea.WithAltScreen())
if _, err := p.Run(); err != nil {
fmt.Println("Error running program:", err)
os.Exit(1)
}
// fmt.Println(m.)
}