// Copyright 2017-2025 WIT.COM Inc. All rights reserved. // Use of this source code is governed by the GPL 3.0 package main // An app to submit patches for the 30 GO GUI repos import ( "embed" "os" "github.com/google/uuid" "go.wit.com/dev/alexflint/arg" "go.wit.com/gui" "go.wit.com/lib/protobuf/chatpb" "go.wit.com/log" ) // sent via -ldflags var VERSION string var BUILDTIME string // this optionally can store the GUI plugins // //go:embed resources/* var resources embed.FS // used for shell auto completion var ARGNAME string = "gemini" // using this for now. triggers config save var configSave bool func main() { me = new(mainType) gui.InitArg() me.pp = arg.MustParse(&argv) if argv.Bash { argv.doBash() os.Exit(0) } if len(argv.BashAuto) != 0 { argv.doBashAuto() os.Exit(0) } me.chats = chatpb.NewChats() if err := me.chats.ConfigLoad(); err != nil { badExit(err) } if verifyUuids(me.chats) { me.chats.ConfigSave() } if argv.Add != "" { newChats, err := addFile(argv.Add) if err != nil { badExit(err) } verifyUuids(newChats) for _, newChat := range newChats.GetChats() { me.chats.AppendByUuid(newChat) } me.chats.ConfigSave() okExit("") } if argv.Playback != nil { if argv.Playback.Uuid != "" { showChat(argv.Playback.Uuid) } else { doPlayback() } okExit("") } log.Info("trying chatpb") pb := chatpb.ExampleChat() pb.ConfigSave() // if opening the GUI, always check git for dirty repos log.Info("open the gui here") // doGui() okExit("") } func verifyUuids(chats *chatpb.Chats) bool { var changed bool for _, chat := range chats.GetChats() { if chat.GetUuid() == "" { chat.Uuid = uuid.New().String() changed = true } for _, entry := range chat.GetEntries() { if entry.GetUuid() == "" { entry.Uuid = uuid.New().String() changed = true } } } return changed }