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(
|
if req, err = http.NewRequest(
|
||||||
method,
|
method,
|
||||||
parsedURL.String(),
|
parsedURL.String(),
|
||||||
@ -173,6 +175,9 @@ func (c *Client) Do(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
c.logger.Debug(res)
|
||||||
|
c.logger.Debug(string(body))
|
||||||
|
|
||||||
if res.StatusCode < http.StatusOK ||
|
if res.StatusCode < http.StatusOK ||
|
||||||
res.StatusCode > http.StatusNoContent {
|
res.StatusCode > http.StatusNoContent {
|
||||||
return &RequestError{
|
return &RequestError{
|
||||||
|
@ -8,15 +8,16 @@ import (
|
|||||||
const PostsBaseURL = "/posts"
|
const PostsBaseURL = "/posts"
|
||||||
|
|
||||||
type CreatePostModel struct {
|
type CreatePostModel struct {
|
||||||
Title string `json:"title,omitempty"`
|
Title string `json:"title,omitempty"`
|
||||||
Raw string `json:"raw"`
|
Raw string `json:"raw"`
|
||||||
TopicID int `json:"topic_id,omitempty"`
|
TopicID int `json:"topic_id,omitempty"`
|
||||||
Category int `json:"category,omitempty"`
|
ReplyToPostNumber int `json:"reply_to_post_number,omitempty"`
|
||||||
TargetRecipients string `json:"targe_recipients,omitempty"`
|
Category int `json:"category,omitempty"`
|
||||||
Archetype string `json:"archetype,omitempty"`
|
TargetRecipients string `json:"targe_recipients,omitempty"`
|
||||||
CreatedAt string `json:"created_at"`
|
Archetype string `json:"archetype,omitempty"`
|
||||||
EmbedURL string `json:"embed_url,omitempty"`
|
CreatedAt string `json:"created_at,omitempty"`
|
||||||
ExternalID string `json:"external_id,omitempty"`
|
EmbedURL string `json:"embed_url,omitempty"`
|
||||||
|
ExternalID string `json:"external_id,omitempty"`
|
||||||
}
|
}
|
||||||
|
|
||||||
type PostModel struct {
|
type PostModel struct {
|
||||||
@ -107,12 +108,14 @@ func (a *PostServiceHandler) Create(
|
|||||||
return PostModel{}, err
|
return PostModel{}, err
|
||||||
}
|
}
|
||||||
|
|
||||||
response := new(Response)
|
response := new(PostModel)
|
||||||
if err = a.client.Do(ctx, req, response); err != nil {
|
if err = a.client.Do(ctx, req, response); err != nil {
|
||||||
return PostModel{}, err
|
return PostModel{}, err
|
||||||
}
|
}
|
||||||
|
|
||||||
return response.Post, nil
|
a.client.logger.Debug(response)
|
||||||
|
|
||||||
|
return *response, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// Show
|
// Show
|
||||||
|
@ -183,7 +183,8 @@ func (sys *System) LoadPost(p *post.Post) error {
|
|||||||
createdAt = time.Now() // TODO: Errrrrr
|
createdAt = time.Now() // TODO: Errrrrr
|
||||||
}
|
}
|
||||||
p.Replies = append(p.Replies, reply.Reply{
|
p.Replies = append(p.Replies, reply.Reply{
|
||||||
ID: strconv.Itoa(i.ID),
|
ID: strconv.Itoa(i.ID),
|
||||||
|
InReplyTo: p.ID,
|
||||||
|
|
||||||
Body: cookedMd,
|
Body: cookedMd,
|
||||||
|
|
||||||
@ -211,7 +212,7 @@ func (sys *System) CreatePost(p *post.Post) error {
|
|||||||
Title: p.Subject,
|
Title: p.Subject,
|
||||||
Raw: p.Body,
|
Raw: p.Body,
|
||||||
Category: categoryID,
|
Category: categoryID,
|
||||||
CreatedAt: time.Now().Format(time.RFC3339),
|
CreatedAt: strconv.FormatInt(time.Now().Unix(), 10),
|
||||||
}
|
}
|
||||||
|
|
||||||
cp, err := sys.client.Posts.Create(context.Background(), &ap)
|
cp, err := sys.client.Posts.Create(context.Background(), &ap)
|
||||||
@ -224,15 +225,21 @@ func (sys *System) CreatePost(p *post.Post) error {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (sys *System) CreateReply(r *reply.Reply) 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)
|
inReplyTo, err := strconv.Atoi(r.InReplyTo)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
ap := api.CreatePostModel{
|
ap := api.CreatePostModel{
|
||||||
Raw: r.Body,
|
Raw: r.Body,
|
||||||
TopicID: inReplyTo,
|
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)
|
cp, err := sys.client.Posts.Create(context.Background(), &ap)
|
||||||
|
@ -13,6 +13,7 @@ import (
|
|||||||
"github.com/charmbracelet/lipgloss"
|
"github.com/charmbracelet/lipgloss"
|
||||||
"github.com/mrusme/gobbs/aggregator"
|
"github.com/mrusme/gobbs/aggregator"
|
||||||
"github.com/mrusme/gobbs/models/post"
|
"github.com/mrusme/gobbs/models/post"
|
||||||
|
"github.com/mrusme/gobbs/models/reply"
|
||||||
"github.com/mrusme/gobbs/ui/ctx"
|
"github.com/mrusme/gobbs/ui/ctx"
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -31,6 +32,7 @@ type KeyMap struct {
|
|||||||
Select key.Binding
|
Select key.Binding
|
||||||
Esc key.Binding
|
Esc key.Binding
|
||||||
Quit key.Binding
|
Quit key.Binding
|
||||||
|
Reply key.Binding
|
||||||
}
|
}
|
||||||
|
|
||||||
var DefaultKeyMap = KeyMap{
|
var DefaultKeyMap = KeyMap{
|
||||||
@ -49,6 +51,10 @@ var DefaultKeyMap = KeyMap{
|
|||||||
Quit: key.NewBinding(
|
Quit: key.NewBinding(
|
||||||
key.WithKeys("q"),
|
key.WithKeys("q"),
|
||||||
),
|
),
|
||||||
|
Reply: key.NewBinding(
|
||||||
|
key.WithKeys("ctrl+s"),
|
||||||
|
key.WithHelp("ctrl+s", "reply"),
|
||||||
|
),
|
||||||
}
|
}
|
||||||
|
|
||||||
type Model struct {
|
type Model struct {
|
||||||
@ -67,6 +73,10 @@ type Model struct {
|
|||||||
buffer string
|
buffer string
|
||||||
replyIDs []string
|
replyIDs []string
|
||||||
|
|
||||||
|
activePost *post.Post
|
||||||
|
allReplies []*reply.Reply
|
||||||
|
activeReply *reply.Reply
|
||||||
|
|
||||||
viewcache string
|
viewcache string
|
||||||
viewcacheTextareaXY []int
|
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:
|
default:
|
||||||
switch msg.String() {
|
switch msg.String() {
|
||||||
case "1", "2", "3", "4", "5", "6", "7", "8", "9", "0":
|
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.replyIDs = []string{p.ID}
|
||||||
|
m.activePost = p
|
||||||
out += m.renderReplies(0, p.Author.Name, &p.Replies)
|
out += m.renderReplies(0, p.Author.Name, &p.Replies)
|
||||||
|
|
||||||
return out
|
return out
|
||||||
@ -174,7 +175,7 @@ func (m *Model) renderReplies(
|
|||||||
return ""
|
return ""
|
||||||
}
|
}
|
||||||
|
|
||||||
for _, re := range *replies {
|
for ri, re := range *replies {
|
||||||
var err error = nil
|
var err error = nil
|
||||||
var body string = ""
|
var body string = ""
|
||||||
var author string = ""
|
var author string = ""
|
||||||
@ -193,6 +194,7 @@ func (m *Model) renderReplies(
|
|||||||
}
|
}
|
||||||
|
|
||||||
m.replyIDs = append(m.replyIDs, re.ID)
|
m.replyIDs = append(m.replyIDs, re.ID)
|
||||||
|
m.allReplies = append(m.allReplies, &(*replies)[ri])
|
||||||
idx := len(m.replyIDs) - 1
|
idx := len(m.replyIDs) - 1
|
||||||
|
|
||||||
out += fmt.Sprintf(
|
out += fmt.Sprintf(
|
||||||
|
Loading…
Reference in New Issue
Block a user