package main import ( "fmt" "log" "net/http" "git.simponic.xyz/simponic/phoneassistant/api" "git.simponic.xyz/simponic/phoneassistant/args" "git.simponic.xyz/simponic/phoneassistant/assistant" "git.simponic.xyz/simponic/phoneassistant/database" "git.simponic.xyz/simponic/phoneassistant/ntfy" "git.simponic.xyz/simponic/phoneassistant/scheduler" "github.com/joho/godotenv" ) func main() { log.SetFlags(log.LstdFlags | log.Lshortfile) err := godotenv.Load() if err != nil { log.Println("could not load .env file:", err) } argv, err := args.GetArgs() if err != nil { log.Fatal(err) } dbConn := database.MakeConn(&argv.DatabasePath) defer dbConn.Close() if argv.Migrate { _, err = database.Migrate(dbConn) if err != nil { log.Fatal(err) } log.Println("database migrated successfully") } if argv.NtfyListener { ntfy := ntfy.MakeNtfyWatcher(argv.NtfyEndpoint, argv.NtfyTopics) notifications := ntfy.Watch() go func() { for notification := range notifications { err := assistant.Do(notification.Message) if err != nil { log.Println("error when sending command: ", err) } } }() } if argv.Scheduler { go func() { scheduler.StartScheduler(dbConn, argv) }() } if argv.Server { mux := api.MakeMux(argv, dbConn) log.Println("🚀🚀 phoneassistant API listening on port", argv.Port) go func() { server := &http.Server{ Addr: ":" + fmt.Sprint(argv.Port), Handler: mux, } err = server.ListenAndServe() if err != nil { log.Fatal(err) } }() } if argv.Server || argv.Scheduler || argv.NtfyListener { select {} // block forever } }