92 lines
1.7 KiB
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)
|
|
}
|
|
}
|