Implemented message preview, optimized list layout

This closes #12
pull/24/head v0.0.6
マリウス 2 years ago
parent 803fa844eb
commit 6d35a1d156
No known key found for this signature in database
GPG Key ID: 272ED814BF63261F

@ -118,19 +118,20 @@ USAGE
Keyboard shortcuts:
- C-r: Refresh
- C-h: Focus groups list
- C-l: Focus articles list
- C-q: Quit
- k: Move up in list
- j: Move down in list
- h: Move left in list
- l: Move right in list
- g: Move to the beginning of the list
- G: Move to the end of the list
- CR: Select item in list
- n: Publish new article
- r: Reply to selected article
C-r: Refresh
C-h: Focus groups list
C-l, C-k: Focus articles list
C-j: Focus preview pane
C-q: Quit
k: Move up in list
j: Move down in list
h: Move left in list
l: Move right in list
g: Move to the beginning of list/text
G: Move to the end of list/text
CR: Select item in list
n: Publish new article
r: Reply to selected article

@ -44,6 +44,7 @@ type Mainscreen struct {
Groups *tview.List
Articles *tview.List
Preview *tview.TextView
CurrentGroupSelected int
CurrentArticleSelected int
@ -88,6 +89,14 @@ func(t *TUI) NewMainscreen() (*Mainscreen) {
SetBorderAttributes(tcell.AttrNone).
SetBorderColor(tcell.ColorTeal)
mainscreen.Preview = tview.NewTextView().
SetText("").
SetTextColor(tcell.ColorWhite).
SetDynamicColors(true)
mainscreen.Preview.
SetBorder(true).
SetBorderColor(tcell.ColorTeal)
mainscreen.Header = tview.NewTextView().
SetText(HEADER_LOGO).
SetTextColor(tcell.ColorHotPink).
@ -115,17 +124,18 @@ func(t *TUI) NewMainscreen() (*Mainscreen) {
SetBorderPadding(0, 0, 1, 1)
mainscreen.Canvas = tview.NewGrid().
SetRows(5, 0, 1).
SetRows(5, 0, 0, 1).
SetColumns(30, 0, 14).
SetBorders(false).
AddItem(mainscreen.Header, 0, 0, 1, 2, 0, 0, false).
AddItem(mainscreen.Stats, 0, 2, 1, 1, 0, 0, false).
AddItem(mainscreen.Info, 2, 0, 1, 1, 0, 0, false).
AddItem(mainscreen.Footer, 2, 1, 1, 2, 0, 0, false)
AddItem(mainscreen.Info, 3, 0, 1, 1, 0, 0, false).
AddItem(mainscreen.Footer, 3, 1, 1, 2, 0, 0, false)
mainscreen.Canvas.
AddItem(mainscreen.Groups, 1, 0, 1, 1, 0, 0, false).
AddItem(mainscreen.Articles, 1, 1, 1, 2, 0, 0, false)
AddItem(mainscreen.Groups, 1, 0, 2, 1, 0, 0, false).
AddItem(mainscreen.Articles, 1, 1, 1, 2, 0, 0, false).
AddItem(mainscreen.Preview, 2, 1, 1, 2, 0, 0, false)
return mainscreen
}
@ -203,12 +213,11 @@ func(mainscreen *Mainscreen) addNodeToArticlesList(level int, articlesNode *[]*m
article.Subject,
),
fmt.Sprintf(
"%s%s on [darkgray]%s[-] by [darkgray]%s[-] in [darkgray]%s[-]",
"%s%s in %s by [darkgray]%s[-]",
prefixSub,
strings.Repeat(" ", level),
MillisecondsToDate(article.Date),
article.From,
article.Newsgroup,
article.From,
), 0, nil)
mainscreen.ArticlesList = append(mainscreen.ArticlesList, article)
@ -256,6 +265,10 @@ func(mainscreen *Mainscreen) Refresh() {
mainscreen.Groups.SetCurrentItem(selectedGroup)
mainscreen.Articles.SetCurrentItem(selectedArticle)
mainscreen.changeHandler("group")(selectedGroup, "", "", 0)
mainscreen.changeHandler("article")(selectedArticle, "", "", 0)
mainscreen.T.App.SetFocus(mainscreen.Articles)
}
@ -264,7 +277,10 @@ func (mainscreen *Mainscreen) HandleInput(event *tcell.EventKey) (*tcell.EventKe
case tcell.KeyCtrlH:
mainscreen.T.App.SetFocus(mainscreen.Groups)
return nil
case tcell.KeyCtrlL:
case tcell.KeyCtrlJ:
mainscreen.T.App.SetFocus(mainscreen.Preview)
return nil
case tcell.KeyCtrlL, tcell.KeyCtrlK:
mainscreen.T.App.SetFocus(mainscreen.Articles)
return nil
case tcell.KeyRune:
@ -306,7 +322,11 @@ func(mainscreen *Mainscreen) changeHandler(item string)(func(int, string, string
case "group":
mainscreen.CurrentGroupSelected = index
case "article":
if index < 0 || index >= len(mainscreen.ArticlesList) {
return
}
mainscreen.CurrentArticleSelected = index
mainscreen.renderPreview(mainscreen.ArticlesList[index])
}
}
}
@ -322,6 +342,16 @@ func(mainscreen *Mainscreen) selectHandler(item string)(func(int, string, string
}
}
func(mainscreen *Mainscreen) renderPreview(article *models.Article) {
mainscreen.Preview.SetText(fmt.Sprintf(
"[gray]Date:[-] [darkgray]%s[-]\n[gray]Newsgroup:[-] [darkgray]%s[-]\n\n\n%s",
MillisecondsToDate(article.Date),
article.Newsgroup,
article.Body,
))
mainscreen.Preview.ScrollToBeginning()
}
func(mainscreen *Mainscreen) submitNewArticle(group string) {
newArticle := models.NewArticle()

Loading…
Cancel
Save