mirror of
https://github.com/mrusme/neonmodem.git
synced 2024-12-04 14:46:37 -05:00
Implemented first working reply draft
This commit is contained in:
parent
46343177c3
commit
9c546bde39
@ -126,6 +126,8 @@ func (c *Client) NewRequest(
|
||||
}
|
||||
}
|
||||
|
||||
c.logger.Debug(buffer.String())
|
||||
|
||||
if req, err = http.NewRequest(
|
||||
method,
|
||||
parsedURL.String(),
|
||||
@ -173,6 +175,9 @@ func (c *Client) Do(
|
||||
}
|
||||
}
|
||||
|
||||
c.logger.Debug(res)
|
||||
c.logger.Debug(string(body))
|
||||
|
||||
if res.StatusCode < http.StatusOK ||
|
||||
res.StatusCode > http.StatusNoContent {
|
||||
return &RequestError{
|
||||
|
@ -11,10 +11,11 @@ type CreatePostModel struct {
|
||||
Title string `json:"title,omitempty"`
|
||||
Raw string `json:"raw"`
|
||||
TopicID int `json:"topic_id,omitempty"`
|
||||
ReplyToPostNumber int `json:"reply_to_post_number,omitempty"`
|
||||
Category int `json:"category,omitempty"`
|
||||
TargetRecipients string `json:"targe_recipients,omitempty"`
|
||||
Archetype string `json:"archetype,omitempty"`
|
||||
CreatedAt string `json:"created_at"`
|
||||
CreatedAt string `json:"created_at,omitempty"`
|
||||
EmbedURL string `json:"embed_url,omitempty"`
|
||||
ExternalID string `json:"external_id,omitempty"`
|
||||
}
|
||||
@ -107,12 +108,14 @@ func (a *PostServiceHandler) Create(
|
||||
return PostModel{}, err
|
||||
}
|
||||
|
||||
response := new(Response)
|
||||
response := new(PostModel)
|
||||
if err = a.client.Do(ctx, req, response); err != nil {
|
||||
return PostModel{}, err
|
||||
}
|
||||
|
||||
return response.Post, nil
|
||||
a.client.logger.Debug(response)
|
||||
|
||||
return *response, nil
|
||||
}
|
||||
|
||||
// Show
|
||||
|
@ -184,6 +184,7 @@ func (sys *System) LoadPost(p *post.Post) error {
|
||||
}
|
||||
p.Replies = append(p.Replies, reply.Reply{
|
||||
ID: strconv.Itoa(i.ID),
|
||||
InReplyTo: p.ID,
|
||||
|
||||
Body: cookedMd,
|
||||
|
||||
@ -211,7 +212,7 @@ func (sys *System) CreatePost(p *post.Post) error {
|
||||
Title: p.Subject,
|
||||
Raw: p.Body,
|
||||
Category: categoryID,
|
||||
CreatedAt: time.Now().Format(time.RFC3339),
|
||||
CreatedAt: strconv.FormatInt(time.Now().Unix(), 10),
|
||||
}
|
||||
|
||||
cp, err := sys.client.Posts.Create(context.Background(), &ap)
|
||||
@ -224,6 +225,11 @@ func (sys *System) CreatePost(p *post.Post) error {
|
||||
}
|
||||
|
||||
func (sys *System) CreateReply(r *reply.Reply) error {
|
||||
sys.logger.Debugf("%v", r)
|
||||
ID, err := strconv.Atoi(r.ID)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
inReplyTo, err := strconv.Atoi(r.InReplyTo)
|
||||
if err != nil {
|
||||
return err
|
||||
@ -232,7 +238,8 @@ func (sys *System) CreateReply(r *reply.Reply) error {
|
||||
ap := api.CreatePostModel{
|
||||
Raw: r.Body,
|
||||
TopicID: inReplyTo,
|
||||
CreatedAt: time.Now().Format(time.RFC3339),
|
||||
ReplyToPostNumber: ID,
|
||||
CreatedAt: strconv.FormatInt(time.Now().Unix(), 10),
|
||||
}
|
||||
|
||||
cp, err := sys.client.Posts.Create(context.Background(), &ap)
|
||||
|
@ -13,6 +13,7 @@ import (
|
||||
"github.com/charmbracelet/lipgloss"
|
||||
"github.com/mrusme/gobbs/aggregator"
|
||||
"github.com/mrusme/gobbs/models/post"
|
||||
"github.com/mrusme/gobbs/models/reply"
|
||||
"github.com/mrusme/gobbs/ui/ctx"
|
||||
)
|
||||
|
||||
@ -31,6 +32,7 @@ type KeyMap struct {
|
||||
Select key.Binding
|
||||
Esc key.Binding
|
||||
Quit key.Binding
|
||||
Reply key.Binding
|
||||
}
|
||||
|
||||
var DefaultKeyMap = KeyMap{
|
||||
@ -49,6 +51,10 @@ var DefaultKeyMap = KeyMap{
|
||||
Quit: key.NewBinding(
|
||||
key.WithKeys("q"),
|
||||
),
|
||||
Reply: key.NewBinding(
|
||||
key.WithKeys("ctrl+s"),
|
||||
key.WithHelp("ctrl+s", "reply"),
|
||||
),
|
||||
}
|
||||
|
||||
type Model struct {
|
||||
@ -67,6 +73,10 @@ type Model struct {
|
||||
buffer string
|
||||
replyIDs []string
|
||||
|
||||
activePost *post.Post
|
||||
allReplies []*reply.Reply
|
||||
activeReply *reply.Reply
|
||||
|
||||
viewcache string
|
||||
viewcacheTextareaXY []int
|
||||
}
|
||||
@ -175,6 +185,43 @@ func (m Model) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
|
||||
}
|
||||
}
|
||||
|
||||
case key.Matches(msg, m.keymap.Reply):
|
||||
if m.WMisFocused("reply") {
|
||||
replyToIdx, _ := strconv.Atoi(m.buffer)
|
||||
|
||||
m.ctx.Logger.Debugf("replyToIdx: %d", replyToIdx)
|
||||
|
||||
var irtID string = ""
|
||||
var irtIRT string = ""
|
||||
var irtSysIDX int = 0
|
||||
|
||||
if replyToIdx == 0 {
|
||||
irtID = m.activePost.ID
|
||||
irtSysIDX = m.activePost.SysIDX
|
||||
} else {
|
||||
irt := m.allReplies[(replyToIdx - 1)]
|
||||
irtID = strconv.Itoa(replyToIdx + 1)
|
||||
irtIRT = irt.InReplyTo
|
||||
irtSysIDX = irt.SysIDX
|
||||
}
|
||||
|
||||
r := reply.Reply{
|
||||
ID: irtID,
|
||||
InReplyTo: irtIRT,
|
||||
Body: m.textarea.Value(),
|
||||
SysIDX: irtSysIDX,
|
||||
}
|
||||
err := m.a.CreateReply(&r)
|
||||
if err != nil {
|
||||
m.ctx.Logger.Error(err)
|
||||
}
|
||||
|
||||
m.textarea.Reset()
|
||||
m.buffer = ""
|
||||
m.WMClose("reply")
|
||||
return m, nil
|
||||
}
|
||||
|
||||
default:
|
||||
switch msg.String() {
|
||||
case "1", "2", "3", "4", "5", "6", "7", "8", "9", "0":
|
||||
|
@ -158,6 +158,7 @@ func (m *Model) renderViewport(p *post.Post) string {
|
||||
)
|
||||
|
||||
m.replyIDs = []string{p.ID}
|
||||
m.activePost = p
|
||||
out += m.renderReplies(0, p.Author.Name, &p.Replies)
|
||||
|
||||
return out
|
||||
@ -174,7 +175,7 @@ func (m *Model) renderReplies(
|
||||
return ""
|
||||
}
|
||||
|
||||
for _, re := range *replies {
|
||||
for ri, re := range *replies {
|
||||
var err error = nil
|
||||
var body string = ""
|
||||
var author string = ""
|
||||
@ -193,6 +194,7 @@ func (m *Model) renderReplies(
|
||||
}
|
||||
|
||||
m.replyIDs = append(m.replyIDs, re.ID)
|
||||
m.allReplies = append(m.allReplies, &(*replies)[ri])
|
||||
idx := len(m.replyIDs) - 1
|
||||
|
||||
out += fmt.Sprintf(
|
||||
|
Loading…
Reference in New Issue
Block a user