aboutsummaryrefslogtreecommitdiff
path: root/widgets/account.go.old
diff options
context:
space:
mode:
Diffstat (limited to 'widgets/account.go.old')
-rw-r--r--widgets/account.go.old97
1 files changed, 97 insertions, 0 deletions
diff --git a/widgets/account.go.old b/widgets/account.go.old
new file mode 100644
index 0000000..393a47a
--- /dev/null
+++ b/widgets/account.go.old
@@ -0,0 +1,97 @@
+package ui
+
+import (
+ "log"
+
+ tb "github.com/nsf/termbox-go"
+
+ "git.sr.ht/~sircmpwn/aerc2/config"
+ "git.sr.ht/~sircmpwn/aerc2/worker"
+ "git.sr.ht/~sircmpwn/aerc2/worker/types"
+)
+
+type AccountTab struct {
+ Config *config.AccountConfig
+ Worker *types.Worker
+ Parent *UIState
+ logger *log.Logger
+ counter int
+}
+
+func NewAccountTab(conf *config.AccountConfig,
+ logger *log.Logger) (*AccountTab, error) {
+
+ work, err := worker.NewWorker(conf.Source, logger)
+ if err != nil {
+ return nil, err
+ }
+ go work.Backend.Run()
+ acc := &AccountTab{
+ Config: conf,
+ Worker: work,
+ logger: logger,
+ }
+ acc.Worker.PostAction(&types.Configure{Config: conf}, nil)
+ acc.Worker.PostAction(&types.Connect{}, func(msg types.WorkerMessage) {
+ switch msg := msg.(type) {
+ case *types.Done:
+ acc.logger.Println("Connected.")
+ acc.Worker.PostAction(&types.ListDirectories{}, nil)
+ case *types.CertificateApprovalRequest:
+ // TODO: Ask the user
+ acc.logger.Println("Approving certificate")
+ acc.Worker.PostAction(&types.ApproveCertificate{
+ Message: types.RespondTo(msg),
+ Approved: true,
+ }, nil)
+ default:
+ acc.logger.Println("Connection failed.")
+ }
+ })
+ return acc, nil
+}
+
+func (acc *AccountTab) Name() string {
+ return acc.Config.Name
+}
+
+func (acc *AccountTab) SetParent(parent *UIState) {
+ acc.Parent = parent
+}
+
+func (acc *AccountTab) Render(at Geometry) {
+ cell := tb.Cell{
+ Ch: ' ',
+ Fg: tb.ColorDefault,
+ Bg: tb.ColorDefault,
+ }
+ TFill(at, cell)
+ TPrintf(&at, cell, "%s %d\n", acc.Name(), acc.counter)
+ acc.counter++
+ if acc.counter%10000 == 0 {
+ acc.counter = 0
+ }
+ acc.Parent.InvalidateFrom(acc)
+}
+
+func (acc *AccountTab) GetChannel() chan types.WorkerMessage {
+ return acc.Worker.Messages
+}
+
+func (acc *AccountTab) HandleMessage(msg types.WorkerMessage) {
+ msg = acc.Worker.ProcessMessage(msg)
+ switch msg := msg.(type) {
+ case *types.Done:
+ case *types.CertificateApprovalRequest:
+ case *types.Unsupported:
+ // no-op
+ case *types.Error:
+ acc.logger.Printf("Error: %v\n", msg.Error)
+ case *types.Directory:
+ acc.logger.Printf("Directory: %s\n", msg.Name)
+ default:
+ acc.Worker.PostAction(&types.Unsupported{
+ Message: types.RespondTo(msg),
+ }, nil)
+ }
+}