From 0c5be5df5f527a604142c3b119d88a5ecae50993 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E3=83=9E=E3=83=AA=E3=82=A6=E3=82=B9?= Date: Thu, 5 Jan 2023 21:19:08 -0500 Subject: [PATCH] Implemented new post in handleSubmit --- ui/windows/postcreate/handlers.go | 90 ++++++++++++++++++++++--------- 1 file changed, 64 insertions(+), 26 deletions(-) diff --git a/ui/windows/postcreate/handlers.go b/ui/windows/postcreate/handlers.go index 749cd52..51eb77e 100644 --- a/ui/windows/postcreate/handlers.go +++ b/ui/windows/postcreate/handlers.go @@ -1,6 +1,8 @@ package postcreate import ( + "net/url" + tea "github.com/charmbracelet/bubbletea" "github.com/mrusme/gobbs/models/post" "github.com/mrusme/gobbs/models/reply" @@ -32,36 +34,72 @@ func handleSubmit(mi interface{}) (bool, []tea.Cmd) { var m *Model = mi.(*Model) var cmds []tea.Cmd - var r reply.Reply - if m.replyToIdx == 0 { - // No numbers were typed before hitting `r` so we're replying to the actual - // Post - x := m.iface.(post.Post) - r = reply.Reply{ - ID: x.ID, - InReplyTo: "", - Index: -1, - SysIDX: x.SysIDX, + if m.action == "post" { + // --- NEW POST --- + subject := m.textinput.Value() + body := m.textarea.Value() + typ := "post" + + if _, err := url.Parse(body); err == nil { + typ = "url" } - } else { - // Numbers were typed before hitting `r`, so we're taking the actual reply - // here - r = m.iface.(reply.Reply) - } - r.Body = m.textarea.Value() + x := m.iface.(*post.Post) + p := post.Post{ + Subject: subject, + Body: body, + Type: typ, - err := m.a.CreateReply(&r) - if err != nil { - m.ctx.Logger.Error(err) - cmds = append(cmds, cmd.New( - cmd.MsgError, - WIN_ID, - cmd.Arg{Name: "error", Value: err}, - ).Tea()) - return true, cmds - } + Forum: x.Forum, + SysIDX: x.SysIDX, + } + + err := m.a.CreatePost(&p) + if err != nil { + m.ctx.Logger.Error(err) + cmds = append(cmds, cmd.New( + cmd.MsgError, + WIN_ID, + cmd.Arg{Name: "error", Value: err}, + ).Tea()) + return true, cmds + } + } else if m.action == "reply" { + // --- REPLY TO EXISTING POST --- + var r reply.Reply + if m.replyToIdx == 0 { + // No numbers were typed before hitting `r` so we're replying to the actual + // Post + x := m.iface.(post.Post) + r = reply.Reply{ + ID: x.ID, + InReplyTo: "", + Index: -1, + SysIDX: x.SysIDX, + } + } else { + // Numbers were typed before hitting `r`, so we're taking the actual reply + // here + r = m.iface.(reply.Reply) + } + + r.Body = m.textarea.Value() + + err := m.a.CreateReply(&r) + if err != nil { + m.ctx.Logger.Error(err) + cmds = append(cmds, cmd.New( + cmd.MsgError, + WIN_ID, + cmd.Arg{Name: "error", Value: err}, + ).Tea()) + return true, cmds + } + } // + + m.inputFocused = 0 + m.textinput.Reset() m.textarea.Reset() m.replyToIdx = 0 cmds = append(cmds, cmd.New(cmd.WMCloseWin, WIN_ID).Tea())