This repository has been archived on 2024-07-28. You can view files and clone it, but cannot push or open issues or pull requests.
cairde/main.go

92 lines
1.7 KiB
Go

package main
import (
"flag"
"fmt"
"log"
"os"
"os/exec"
"os/user"
openPrivacyLog "git.openprivacy.ca/openprivacy/log"
_ "github.com/mutecomm/go-sqlcipher/v4"
tea "github.com/charmbracelet/bubbletea"
)
const (
help = `cairde [options]
A text-based user interface for metadata resistant online chat.
Options:
-a turn on the Tor ACN immediately
-d turn on debug logging
-v output version
-h output help
`
)
func main() {
var (
acnFlag bool
debugFlag bool
versionFlag bool
helpFlag bool
)
flag.BoolVar(&helpFlag, "h", false, "output help")
flag.BoolVar(&acnFlag, "a", false, "turn on the Tor ACN immediately")
flag.BoolVar(&debugFlag, "d", false, "turn on debug logging")
flag.BoolVar(&versionFlag, "v", false, "output version")
flag.Parse()
if helpFlag {
fmt.Print(help)
os.Exit(0)
}
if versionFlag {
fmt.Print("cairde pre-alpha v0.1.0") // TODO
os.Exit(0)
}
// NOTE(d1): pending https://git.coopcloud.tech/decentral1se/cairde/issues/1
_, err := exec.LookPath("tor")
if err != nil {
log.Fatal("could not find 'tor' command, is it installed?")
}
f, err := tea.LogToFile("cairde.log", "debug")
if err != nil {
log.Fatal(err)
}
defer f.Close()
filelogger, err := openPrivacyLog.NewFile(openPrivacyLog.LevelInfo, "cwtch.log")
if err == nil {
openPrivacyLog.SetStd(filelogger)
}
user, err := user.Current()
if err != nil {
log.Fatalf("unable to determine current user: %s", err)
}
p := tea.NewProgram(
newModel(user.Username, user.HomeDir, debugFlag),
tea.WithAltScreen(),
tea.WithMouseAllMotion(),
)
if acnFlag {
go func() {
p.Send(acnOnMsg{})
}()
}
if _, err := p.Run(); err != nil {
log.Fatal(err)
}
}