From 9d3bd71a0e8ceebac27951ba1e8a0a9e0b7254c7 Mon Sep 17 00:00:00 2001 From: Rasmus Lindroth Date: Sun, 22 Mar 2020 21:52:31 +0100 Subject: [PATCH] support media upload and fixes --- README.md | 23 +++- app.go | 1 + config.go | 29 +++++ go.mod | 2 +- go.sum | 4 +- images/preview.png | Bin 0 -> 86977 bytes linkoverlay.go | 143 +++++++++--------------- main.go | 269 +++++++++++++++++++++++---------------------- media.go | 7 ++ messagebox.go | 22 +++- statustext.go | 32 +++--- ui.go | 29 +---- 12 files changed, 291 insertions(+), 270 deletions(-) create mode 100644 images/preview.png diff --git a/README.md b/README.md index 6ea33a3..c6caa31 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,24 @@ # Tut - a Mastodon TUI -A TUI for Mastodon under development. +A TUI for Mastodon with vim inspired keys. The program misses some features but they will be added when I get time. + +![Preview](./images/preview.png "Preview") + +Currently supported commands +* `:q` `:quit` exit +* `:timeline` home, local, federated, direct + +Explanation of the non obvious keys when viewing a toot +* `V` = view. In this mode you can scroll throught the text of the toot if it doesn't fit the screen +* `O` = open. Gives you a list of all URLs in the toot. Opens them in your default browser. +* `M` = media. Opens the media with `xdg-open`. + +On my TODO-list: +* Support for config files (theme, default image/video viewer) +* Multiple accounts +* View users profiles +* Support search +* Support tags +* Support lists +* Notifications +* Better error handling (in other words, don't crash the whole program) diff --git a/app.go b/app.go index a4350ac..58f49d2 100644 --- a/app.go +++ b/app.go @@ -10,5 +10,6 @@ type App struct { UI *UI Me *mastodon.Account API *API + Config *Config HaveAccount bool } diff --git a/config.go b/config.go index 8e2008e..c82a152 100644 --- a/config.go +++ b/config.go @@ -3,10 +3,39 @@ package main import ( "os" + "github.com/gdamore/tcell" "github.com/kyoh86/xdg" ) type Config struct { + Style StyleConfig + Media MediaConfig +} + +type StyleConfig struct { + Background tcell.Color + Text tcell.Color + + Subtle tcell.Color + WarningText tcell.Color + + TextSpecial1 tcell.Color + TextSpecial2 tcell.Color + + TopBarBackground tcell.Color + TopBarText tcell.Color + + StatusBarBackground tcell.Color + StatusBarText tcell.Color + + ListSelectedBackground tcell.Color + ListSelectedText tcell.Color +} + +type MediaConfig struct { + ImageViewer string + ImageSingle bool + VideoViewer string } func CreateConfigDir() error { diff --git a/go.mod b/go.mod index 50dc060..851576c 100644 --- a/go.mod +++ b/go.mod @@ -9,5 +9,5 @@ require ( github.com/microcosm-cc/bluemonday v1.0.2 github.com/pelletier/go-toml v1.6.0 github.com/rivo/tview v0.0.0-20200219210816-cd38d7432498 - golang.org/x/net v0.0.0-20200301022130-244492dfa37a + golang.org/x/net v0.0.0-20200320220750-118fecf932d8 ) diff --git a/go.sum b/go.sum index c6371ce..5a9f229 100644 --- a/go.sum +++ b/go.sum @@ -44,8 +44,8 @@ golang.org/x/net v0.0.0-20180218175443-cbe0f9307d01/go.mod h1:mL1N/T3taQHkDXs73r golang.org/x/net v0.0.0-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20181220203305-927f97764cc3/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20200114155413-6afb5195e5aa/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200301022130-244492dfa37a h1:GuSPYbZzB5/dcLNCwLQLsg3obCJtX9IJhpXkvY7kzk0= -golang.org/x/net v0.0.0-20200301022130-244492dfa37a/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200320220750-118fecf932d8 h1:1+zQlQqEEhUeStBTi653GZAnAuivZq/2hz+Iz+OP7rg= +golang.org/x/net v0.0.0-20200320220750-118fecf932d8/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190222072716-a9d3bda3a223/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= diff --git a/images/preview.png b/images/preview.png new file mode 100644 index 0000000000000000000000000000000000000000..451a57572f6064dc5cd7f74f53205ab8d687ac77 GIT binary patch literal 86977 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 z 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 literal 0 HcmV?d00001 diff --git a/linkoverlay.go b/linkoverlay.go index c862984..11da908 100644 --- a/linkoverlay.go +++ b/linkoverlay.go @@ -1,118 +1,79 @@ package main import ( - "fmt" - "log" - "strings" - + "github.com/gdamore/tcell" "github.com/rivo/tview" ) -func NewLinkOverlay(app *App, view *tview.TextView, controls *Controls) *LinkOverlay { - return &LinkOverlay{ - app: app, - View: view, - Controls: controls, - hints: generateHints(), - Scroll: false, +func NewLinkOverlay(app *App) *LinkOverlay { + l := &LinkOverlay{ + app: app, + Flex: tview.NewFlex(), + TextBottom: tview.NewTextView(), + List: tview.NewList(), } + l.TextBottom.SetText("[O]pen") + return l } type LinkOverlay struct { - app *App - View *tview.TextView - Controls *Controls - URLs []URL - hints []string - input string - Scroll bool + app *App + Flex *tview.Flex + TextBottom *tview.TextView + List *tview.List + urls []URL } -func generateHints() []string { - //TODO: REMOVE T - chars := strings.Split("asdfghjkl", "") - if len(chars) == 0 { - chars = strings.Split("asdfghjkl", "") +func (l *LinkOverlay) SetURLs(urls []URL) { + l.urls = urls + l.List.Clear() + for _, url := range urls { + l.List.AddItem(url.Text, "", 0, nil) } +} - var one []string - var two []string - var three []string - - for _, a := range chars { - one = append(one, a) - for _, b := range chars { - if b == a { - continue - } - two = append(two, a+b) - for _, c := range chars { - if c == b { - continue - } - three = append(three, a+b+c) - } - } +func (l *LinkOverlay) Prev() { + index := l.List.GetCurrentItem() + if index-1 >= 0 { + l.List.SetCurrentItem(index - 1) } - return append(one, append(two, three...)...) } -func (l *LinkOverlay) SetURLs(urls []URL) { - l.DisableScroll() - l.input = "" - l.URLs = urls +func (l *LinkOverlay) Next() { + index := l.List.GetCurrentItem() + if index+1 < l.List.GetItemCount() { + l.List.SetCurrentItem(index + 1) + } } -func (l *LinkOverlay) Draw() { - if len(l.hints) < len(l.URLs) { - log.Fatalln("No hints") +func (l *LinkOverlay) Open() { + index := l.List.GetCurrentItem() + if len(l.urls) == 0 || index >= len(l.urls) { return } - var output string - for i, url := range l.URLs { - hint := tview.Escape( - fmt.Sprintf("[%s]", l.hints[i]), - ) - output += fmt.Sprintf("%s %s\n", hint, - tview.Escape(url.URL)) - } - - l.View.SetText(output) - if l.Scroll { - l.Controls.View.SetText(tview.Escape("\n--SCROLL-- [t]oggle scroll")) - } else { - l.Controls.View.SetText(tview.Escape("\n--OPEN-- [t]oggle scroll")) - } + openURL(l.urls[index].URL) } -func (l *LinkOverlay) AddRune(r rune) { - l.input += string(r) - l.Controls.View.SetText(tview.Escape(l.input + "\n--OPEN-- [t]oggle scroll")) - for i, key := range l.hints { - if key == l.input && i < len(l.URLs) { - openURL(l.URLs[i].URL) - l.Clear() +func (l *LinkOverlay) InputHandler(event *tcell.EventKey) { + if event.Key() == tcell.KeyRune { + switch event.Rune() { + case 'j', 'J': + l.Next() + case 'k', 'K': + l.Prev() + case 'o', 'O': + l.Open() + case 'q', 'Q': + l.app.UI.SetFocus(LeftPaneFocus) + } + } else { + switch event.Key() { + case tcell.KeyUp: + l.Prev() + case tcell.KeyDown: + l.Next() + case tcell.KeyEsc: l.app.UI.SetFocus(LeftPaneFocus) } } } - -func (l *LinkOverlay) ActivateScroll() { - l.Scroll = true - l.Controls.View.SetText(tview.Escape("\n--SCROLL-- [t]oggle scroll")) -} - -func (l *LinkOverlay) DisableScroll() { - l.Scroll = false - l.input = "" - l.Controls.View.SetText(tview.Escape("\n--OPEN-- [t]oggle scroll")) -} - -func (l *LinkOverlay) HasInput() bool { - return l.input != "" -} - -func (l *LinkOverlay) Clear() { - l.input = "" - l.Controls.View.SetText(tview.Escape(l.input + "\n--OPEN-- [t]oggle scroll")) -} diff --git a/main.go b/main.go index c67950e..513dfec 100644 --- a/main.go +++ b/main.go @@ -9,6 +9,23 @@ import ( ) func main() { + config := Config{ + Style: StyleConfig{ + Background: tcell.ColorDefault, + Text: tcell.ColorWhite, + Subtle: tcell.ColorGray, + WarningText: tcell.NewRGBColor(249, 38, 114), + TextSpecial1: tcell.NewRGBColor(174, 129, 255), + TextSpecial2: tcell.NewRGBColor(166, 226, 46), + TopBarBackground: tcell.NewRGBColor(249, 38, 114), + TopBarText: tcell.ColorWhite, + StatusBarBackground: tcell.NewRGBColor(249, 38, 114), + StatusBarText: tcell.ColorWhite, + ListSelectedBackground: tcell.NewRGBColor(249, 38, 114), + ListSelectedText: tcell.ColorWhite, + }, + } + err := CreateConfigDir() if err != nil { log.Fatalln(err) @@ -22,8 +39,31 @@ func main() { App: tview.NewApplication(), API: &API{}, HaveAccount: false, + Config: &config, } + clearContent := func(screen tcell.Screen, x int, y int, width int, height int) (int, int, int, int) { + for cx := x; cx < width+x; cx++ { + for cy := y; cy < height+y; cy++ { + screen.SetContent(cx, cy, ' ', nil, tcell.StyleDefault.Background(app.Config.Style.Background)) + } + } + y2 := y + height + for cx := x + 1; cx < width+x; cx++ { + screen.SetContent(cx, y, tview.BoxDrawingsLightHorizontal, nil, tcell.StyleDefault.Foreground(app.Config.Style.Subtle)) + screen.SetContent(cx, y2, tview.BoxDrawingsLightHorizontal, nil, tcell.StyleDefault.Foreground(app.Config.Style.Subtle)) + } + x2 := x + width + for cy := y + 1; cy < height+y; cy++ { + screen.SetContent(x, cy, tview.BoxDrawingsLightVertical, nil, tcell.StyleDefault.Foreground(app.Config.Style.Subtle)) + screen.SetContent(x2, cy, tview.BoxDrawingsLightVertical, nil, tcell.StyleDefault.Foreground(app.Config.Style.Subtle)) + } + screen.SetContent(x, y, tview.BoxDrawingsLightDownAndRight, nil, tcell.StyleDefault.Foreground(app.Config.Style.Subtle)) + screen.SetContent(x, y+height, tview.BoxDrawingsLightUpAndRight, nil, tcell.StyleDefault.Foreground(app.Config.Style.Subtle)) + screen.SetContent(x+width, y, tview.BoxDrawingsLightDownAndLeft, nil, tcell.StyleDefault.Foreground(app.Config.Style.Subtle)) + screen.SetContent(x+width, y+height, tview.BoxDrawingsLightUpAndLeft, nil, tcell.StyleDefault.Foreground(app.Config.Style.Subtle)) + return x + 1, y + 1, width - 1, height - 1 + } if exists { accounts, err := GetAccounts(path) if err != nil { @@ -52,16 +92,17 @@ func main() { tview.Borders.BottomRightFocus = tview.BoxDrawingsLightUpAndLeft top := tview.NewTextView() - top.SetBackgroundColor(tcell.ColorGreen) + top.SetBackgroundColor(app.Config.Style.TopBarBackground) + top.SetTextColor(app.Config.Style.TopBarText) app.UI = &UI{app: app, Top: top, Timeline: TimelineHome} app.UI.TootList = NewTootList(app, tview.NewList()) - app.UI.TootList.View.SetSelectedTextColor(tcell.ColorWhite) - app.UI.TootList.View.SetSelectedBackgroundColor(tcell.ColorRed) + app.UI.TootList.View.SetBackgroundColor(app.Config.Style.Background) + app.UI.TootList.View.SetSelectedTextColor(app.Config.Style.ListSelectedText) + app.UI.TootList.View.SetSelectedBackgroundColor(app.Config.Style.ListSelectedBackground) app.UI.TootList.View.ShowSecondaryText(false) app.UI.TootList.View.SetHighlightFullLine(true) - app.UI.TootList.View.SetBackgroundColor(tcell.ColorDefault) app.UI.TootList.View.SetChangedFunc(func(index int, _ string, _ string, _ rune) { if app.HaveAccount { @@ -69,36 +110,34 @@ func main() { } }) - lo := NewLinkOverlay(app, tview.NewTextView(), - NewControls(app, tview.NewTextView()), - ) - lo.View.SetBorderPadding(0, 0, 0, 0) - app.UI.StatusText = NewStatusText(app, tview.NewTextView(), - NewControls(app, tview.NewTextView()), lo, + NewControls(app, tview.NewTextView()), NewLinkOverlay(app), ) app.UI.StatusText.View.SetWordWrap(true).SetDynamicColors(true) - app.UI.StatusText.View.SetBackgroundColor(tcell.ColorDefault) + app.UI.StatusText.View.SetBackgroundColor(app.Config.Style.Background) + app.UI.StatusText.View.SetTextColor(app.Config.Style.Text) app.UI.StatusText.Controls.View.SetDynamicColors(true) - app.UI.StatusText.Controls.View.SetBackgroundColor(tcell.ColorDefault) + app.UI.StatusText.Controls.View.SetBackgroundColor(app.Config.Style.Background) app.UI.CmdBar = NewCmdBar(app, tview.NewInputField(), ) - app.UI.CmdBar.View.SetFieldBackgroundColor(tcell.ColorDefault) + app.UI.CmdBar.View.SetFieldBackgroundColor(app.Config.Style.Background) + app.UI.CmdBar.View.SetFieldTextColor(app.Config.Style.Text) app.UI.Status = tview.NewTextView() - app.UI.Status.SetBackgroundColor(tcell.ColorBrown) + app.UI.Status.SetBackgroundColor(app.Config.Style.StatusBarBackground) + app.UI.Status.SetTextColor(app.Config.Style.StatusBarText) - verticalLine := tview.NewBox().SetBackgroundColor(tcell.ColorDefault) + verticalLine := tview.NewBox().SetBackgroundColor(app.Config.Style.Background) verticalLine.SetDrawFunc(func(screen tcell.Screen, x int, y int, width int, height int) (int, int, int, int) { for cy := y; cy < y+height; cy++ { - screen.SetContent(x, cy, tview.BoxDrawingsLightVertical, nil, tcell.StyleDefault.Foreground(tcell.ColorGray)) + screen.SetContent(x, cy, tview.BoxDrawingsLightVertical, nil, tcell.StyleDefault.Foreground(app.Config.Style.Subtle)) } return 0, 0, 0, 0 }) app.UI.Pages = tview.NewPages() - app.UI.Pages.SetBackgroundColor(tcell.ColorDefault) + app.UI.Pages.SetBackgroundColor(app.Config.Style.Background) app.UI.Pages.AddPage("main", tview.NewFlex(). AddItem(tview.NewFlex().SetDirection(tview.FlexRow). @@ -106,7 +145,7 @@ func main() { AddItem(tview.NewFlex().SetDirection(tview.FlexColumn). AddItem(app.UI.TootList.View, 0, 2, false). AddItem(verticalLine, 1, 0, false). - AddItem(tview.NewBox().SetBackgroundColor(tcell.ColorDefault), 1, 0, false). + AddItem(tview.NewBox().SetBackgroundColor(app.Config.Style.Background), 1, 0, false). AddItem(tview.NewFlex().SetDirection(tview.FlexRow). AddItem(app.UI.StatusText.View, 0, 9, false). AddItem(app.UI.StatusText.Controls.View, 1, 0, false), @@ -146,24 +185,33 @@ func main() { app.UI.MessageBox = NewMessageBox(app, tview.NewTextView(), NewControls(app, tview.NewTextView()), ) - //app.UI.MessageBox.View.SetBorder(true).SetTitle("New toot") - app.UI.MessageBox.View.SetBackgroundColor(tcell.ColorDefault) + + app.UI.MessageBox.View.SetBackgroundColor(app.Config.Style.Background) + app.UI.MessageBox.View.SetTextColor(app.Config.Style.Text) app.UI.MessageBox.View.SetDynamicColors(true) app.UI.MessageBox.Controls.View.SetDynamicColors(true) - app.UI.MessageBox.Controls.View.SetBackgroundColor(tcell.ColorDefault) + app.UI.MessageBox.Controls.View.SetBackgroundColor(app.Config.Style.Background) + app.UI.MessageBox.Controls.View.SetTextColor(app.Config.Style.Text) app.UI.Pages.AddPage("toot", modal(flToot, app.UI.MessageBox.View, app.UI.MessageBox.Controls.View), true, false) - //app.UI.StatusText.LinkOverlay.View.SetBorder(true).SetTitle("Follow link") - app.UI.StatusText.LinkOverlay.View.SetBackgroundColor(tcell.ColorDefault) - app.UI.StatusText.LinkOverlay.View.SetDynamicColors(true) - app.UI.StatusText.LinkOverlay.Controls.View.SetDynamicColors(true) - app.UI.StatusText.LinkOverlay.Controls.View.SetBackgroundColor(tcell.ColorDefault) - - links := modal(flLinks, app.UI.StatusText.LinkOverlay.View, app.UI.StatusText.LinkOverlay.Controls.View) + app.UI.Pages.AddPage("links", tview.NewFlex().AddItem(nil, 0, 1, false). + AddItem(tview.NewFlex().SetDirection(tview.FlexRow). + AddItem(nil, 0, 1, false). + AddItem(app.UI.StatusText.LinkOverlay.Flex.SetDirection(tview.FlexRow). + AddItem(app.UI.StatusText.LinkOverlay.List, 0, 10, true). + AddItem(app.UI.StatusText.LinkOverlay.TextBottom, 1, 1, true), 0, 8, false). + AddItem(nil, 0, 1, false), 0, 8, true). + AddItem(nil, 0, 1, false), true, false) - app.UI.Pages.AddPage("links", - links, true, false) + app.UI.StatusText.LinkOverlay.Flex.SetDrawFunc(clearContent) + app.UI.StatusText.LinkOverlay.TextBottom.SetBackgroundColor(app.Config.Style.Background) + app.UI.StatusText.LinkOverlay.List.SetBackgroundColor(app.Config.Style.Background) + app.UI.StatusText.LinkOverlay.List.SetMainTextColor(app.Config.Style.Text) + app.UI.StatusText.LinkOverlay.List.SetSelectedBackgroundColor(app.Config.Style.ListSelectedBackground) + app.UI.StatusText.LinkOverlay.List.SetSelectedTextColor(app.Config.Style.ListSelectedText) + app.UI.StatusText.LinkOverlay.List.ShowSecondaryText(false) + app.UI.StatusText.LinkOverlay.List.SetHighlightFullLine(true) app.UI.AuthOverlay = NewAuthoverlay(app, tview.NewFlex(), tview.NewInputField(), NewControls(app, tview.NewTextView())) @@ -171,11 +219,12 @@ func main() { app.UI.Pages.AddPage("login", authModal(app.UI.AuthOverlay.Flex, app.UI.AuthOverlay.View, app.UI.AuthOverlay.Controls.View), true, false) app.UI.AuthOverlay.Flex.SetDrawFunc(clearContent) - app.UI.AuthOverlay.Flex.SetBackgroundColor(tcell.ColorDefault) - app.UI.AuthOverlay.View.SetBackgroundColor(tcell.ColorDefault) - app.UI.AuthOverlay.View.SetFieldBackgroundColor(tcell.ColorDefault) - app.UI.AuthOverlay.View.SetFieldTextColor(tcell.ColorWhite) - app.UI.AuthOverlay.Controls.View.SetBackgroundColor(tcell.ColorDefault) + app.UI.AuthOverlay.Flex.SetBackgroundColor(app.Config.Style.Background) + app.UI.AuthOverlay.View.SetBackgroundColor(app.Config.Style.Background) + app.UI.AuthOverlay.View.SetFieldBackgroundColor(app.Config.Style.Background) + app.UI.AuthOverlay.View.SetFieldTextColor(app.Config.Style.Text) + app.UI.AuthOverlay.Controls.View.SetBackgroundColor(app.Config.Style.Background) + app.UI.AuthOverlay.Controls.View.SetTextColor(app.Config.Style.Text) app.UI.AuthOverlay.Draw() app.UI.MediaOverlay = NewMediaView(app) @@ -183,24 +232,28 @@ func main() { AddItem(tview.NewFlex().SetDirection(tview.FlexRow). AddItem(nil, 0, 1, false). AddItem(app.UI.MediaOverlay.Flex.SetDirection(tview.FlexRow). - AddItem(app.UI.MediaOverlay.TextTop, 0, 1, true). + AddItem(app.UI.MediaOverlay.TextTop, 1, 1, true). AddItem(app.UI.MediaOverlay.FileList, 0, 10, true). - AddItem(app.UI.MediaOverlay.TextBottom, 0, 1, true). + AddItem(app.UI.MediaOverlay.TextBottom, 1, 1, true). AddItem(app.UI.MediaOverlay.InputField.View, 2, 1, false), 0, 8, false). AddItem(nil, 0, 1, false), 0, 8, true). AddItem(nil, 0, 1, false), true, false) - app.UI.MediaOverlay.FileList.SetSelectedTextColor(tcell.ColorWhite) - app.UI.MediaOverlay.FileList.SetSelectedBackgroundColor(tcell.ColorRed) + app.UI.MediaOverlay.FileList.SetBackgroundColor(app.Config.Style.Background) + app.UI.MediaOverlay.FileList.SetMainTextColor(app.Config.Style.Text) + app.UI.MediaOverlay.FileList.SetSelectedBackgroundColor(app.Config.Style.ListSelectedBackground) + app.UI.MediaOverlay.FileList.SetSelectedTextColor(app.Config.Style.ListSelectedText) app.UI.MediaOverlay.FileList.ShowSecondaryText(false) app.UI.MediaOverlay.FileList.SetHighlightFullLine(true) - app.UI.MediaOverlay.FileList.SetBackgroundColor(tcell.ColorDefault) - app.UI.MediaOverlay.Flex.SetBackgroundColor(tcell.ColorDefault) - app.UI.MediaOverlay.TextTop.SetBackgroundColor(tcell.ColorDefault) - app.UI.MediaOverlay.TextBottom.SetBackgroundColor(tcell.ColorDefault) - app.UI.MediaOverlay.InputField.View.SetBackgroundColor(tcell.ColorDefault) - app.UI.MediaOverlay.InputField.View.SetFieldBackgroundColor(tcell.ColorDefault) + app.UI.MediaOverlay.Flex.SetBackgroundColor(app.Config.Style.Background) + app.UI.MediaOverlay.TextTop.SetBackgroundColor(app.Config.Style.Background) + app.UI.MediaOverlay.TextTop.SetTextColor(app.Config.Style.Text) + app.UI.MediaOverlay.TextBottom.SetBackgroundColor(app.Config.Style.Background) + app.UI.MediaOverlay.TextBottom.SetTextColor(app.Config.Style.Text) + app.UI.MediaOverlay.InputField.View.SetBackgroundColor(app.Config.Style.Background) + app.UI.MediaOverlay.InputField.View.SetFieldBackgroundColor(app.Config.Style.Background) + app.UI.MediaOverlay.InputField.View.SetFieldTextColor(app.Config.Style.Text) app.UI.MediaOverlay.Flex.SetDrawFunc(clearContent) if !app.HaveAccount { @@ -219,55 +272,8 @@ func main() { } if app.UI.Focus == LinkOverlayFocus { - if !app.UI.StatusText.LinkOverlay.Scroll { - if event.Key() == tcell.KeyRune { - switch event.Rune() { - case 't': - app.UI.StatusText.LinkOverlay.ActivateScroll() - default: - app.UI.StatusText.LinkOverlay.AddRune(event.Rune()) - } - } else { - switch event.Key() { - case tcell.KeyEsc: - if app.UI.StatusText.LinkOverlay.HasInput() { - app.UI.StatusText.LinkOverlay.Clear() - } else { - app.UI.SetFocus(LeftPaneFocus) - app.UI.StatusText.LinkOverlay.DisableScroll() - } - return nil - } - } - return nil - } else { - switch event.Key() { - case tcell.KeyEsc: - app.UI.StatusText.LinkOverlay.DisableScroll() - return nil - } - - } - - if event.Key() == tcell.KeyRune { - switch event.Rune() { - case 't': - app.UI.StatusText.LinkOverlay.DisableScroll() - return nil - case 'q': - app.UI.SetFocus(LeftPaneFocus) - app.UI.StatusText.LinkOverlay.DisableScroll() - return nil - } - } else { - switch event.Key() { - case tcell.KeyEsc: - app.UI.SetFocus(LeftPaneFocus) - app.UI.StatusText.LinkOverlay.DisableScroll() - return nil - } - } - return event + app.UI.StatusText.LinkOverlay.InputHandler(event) + return nil } if app.UI.Focus == CmdBarFocus { @@ -284,22 +290,22 @@ func main() { if app.UI.Focus == MessageFocus { if event.Key() == tcell.KeyRune { switch event.Rune() { - case 'p': + case 'p', 'P': app.UI.MessageBox.Post() return nil - case 'e': + case 'e', 'E': app.UI.MessageBox.EditText() return nil - case 'c': + case 'c', 'C': app.UI.MessageBox.EditSpoiler() return nil - case 't': + case 't', 'T': app.UI.MessageBox.ToggleSpoiler() return nil - case 'm': + case 'm', 'M': app.UI.SetFocus(MessageAttachmentFocus) return nil - case 'q': + case 'q', 'Q': app.UI.SetFocus(LeftPaneFocus) return nil } @@ -316,20 +322,24 @@ func main() { if app.UI.Focus == MessageAttachmentFocus && app.UI.MediaOverlay.Focus == MediaFocusOverview { if event.Key() == tcell.KeyRune { switch event.Rune() { - case 'j': + case 'j', 'J': app.UI.MediaOverlay.Next() - case 'k': + case 'k', 'K': app.UI.MediaOverlay.Prev() - case 'd': + case 'd', 'D': app.UI.MediaOverlay.Delete() - case 'a': + case 'a', 'A': app.UI.MediaOverlay.SetFocus(MediaFocusAdd) - case 'q': + case 'q', 'Q': app.UI.SetFocus(MessageFocus) return nil } } else { switch event.Key() { + case tcell.KeyUp: + app.UI.MediaOverlay.Prev() + case tcell.KeyDown: + app.UI.MediaOverlay.Next() case tcell.KeyEsc: app.UI.SetFocus(MessageFocus) return nil @@ -342,20 +352,19 @@ func main() { if event.Key() == tcell.KeyRune { app.UI.MediaOverlay.InputField.AddRune(event.Rune()) return nil - } else { - switch event.Key() { - case tcell.KeyTab, tcell.KeyDown: - app.UI.MediaOverlay.InputField.AutocompleteNext() - return nil - case tcell.KeyBacktab, tcell.KeyUp: - app.UI.MediaOverlay.InputField.AutocompletePrev() - return nil - case tcell.KeyEnter: - app.UI.MediaOverlay.InputField.CheckDone() - return nil - case tcell.KeyEsc: - app.UI.MediaOverlay.SetFocus(MediaFocusOverview) - } + } + switch event.Key() { + case tcell.KeyTab, tcell.KeyDown: + app.UI.MediaOverlay.InputField.AutocompleteNext() + return nil + case tcell.KeyBacktab, tcell.KeyUp: + app.UI.MediaOverlay.InputField.AutocompletePrev() + return nil + case tcell.KeyEnter: + app.UI.MediaOverlay.InputField.CheckDone() + return nil + case tcell.KeyEsc: + app.UI.MediaOverlay.SetFocus(MediaFocusOverview) } return event } @@ -363,16 +372,16 @@ func main() { if app.UI.Focus == LeftPaneFocus { if event.Key() == tcell.KeyRune { switch event.Rune() { - case 'v': + case 'v', 'V': app.UI.SetFocus(RightPaneFocus) return nil - case 'k': + case 'k', 'K': app.UI.TootList.Prev() return nil - case 'j': + case 'j', 'J': app.UI.TootList.Next() return nil - case 'q': + case 'q', 'Q': app.App.Stop() return nil } @@ -410,19 +419,19 @@ func main() { app.UI.CmdBar.View.SetText(":") app.UI.SetFocus(CmdBarFocus) return nil - case 't': + case 't', 'T': app.UI.ShowThread() - case 's': + case 's', 'S': app.UI.ShowSensetive() - case 'c': + case 'c', 'C': app.UI.NewToot() - case 'o': + case 'o', 'O': app.UI.ShowLinks() - case 'r': + case 'r', 'R': app.UI.Reply() - case 'm': + case 'm', 'M': app.UI.OpenMedia() - case 'f': + case 'f', 'F': //TODO UPDATE TOOT IN LIST app.UI.FavoriteEvent() case 'b': diff --git a/media.go b/media.go index 40eb3b1..334ed53 100644 --- a/media.go +++ b/media.go @@ -39,6 +39,13 @@ type MediaView struct { Files []string } +func (m *MediaView) Reset() { + m.Files = nil + m.FileList.Clear() + m.Focus = MediaFocusOverview + m.Draw() +} + func (m *MediaView) AddFile(f string) { m.Files = append(m.Files, f) m.FileList.AddItem(filepath.Base(f), "", 0, nil) diff --git a/messagebox.go b/messagebox.go index ee1d28c..1a5b83a 100644 --- a/messagebox.go +++ b/messagebox.go @@ -92,6 +92,15 @@ func (m *MessageBox) Post() { send.SpoilerText = toot.SpoilerText } + attachments := m.app.UI.MediaOverlay.Files + for _, ap := range attachments { + a, err := m.app.API.Client.UploadMedia(context.Background(), ap) + if err != nil { + log.Fatalln(err) + } + send.MediaIDs = append(send.MediaIDs, a.ID) + } + _, err := m.app.API.Client.PostStatus(context.Background(), &send) if err != nil { log.Fatalln(err) @@ -107,6 +116,8 @@ func (m *MessageBox) Draw() { var outputHead string var output string + subtleColor := fmt.Sprintf("[#%x]", m.app.Config.Style.Subtle.Hex()) + warningColor := fmt.Sprintf("[#%x]", m.app.Config.Style.WarningText.Hex()) if m.currentToot.Status != nil { var acct string if m.currentToot.Status.Account.DisplayName != "" { @@ -114,21 +125,20 @@ func (m *MessageBox) Draw() { } else { acct = fmt.Sprintf("%s\n", m.currentToot.Status.Account.Acct) } - outputHead += "[gray]Replying to " + tview.Escape(acct) + "\n" + outputHead += subtleColor + "Replying to " + tview.Escape(acct) + "\n" } - if m.currentToot.SpoilerText != "" && !m.currentToot.Sensitive { - outputHead += "[red]You have entered spoiler text, but haven't set an content warning. Do it by pressing " + tview.Escape("[T]") + "\n\n" + outputHead += warningColor + "You have entered spoiler text, but haven't set an content warning. Do it by pressing " + tview.Escape("[T]") + "\n\n" } if m.currentToot.Sensitive && m.currentToot.SpoilerText == "" { - outputHead += "[red]You have added an content warning, but haven't set any text above the hidden text. Do it by pressing " + tview.Escape("[C]") + "\n\n" + outputHead += warningColor + "You have added an content warning, but haven't set any text above the hidden text. Do it by pressing " + tview.Escape("[C]") + "\n\n" } if m.currentToot.Sensitive && m.currentToot.SpoilerText != "" { - outputHead += "[gray]Content warning\n\n" + outputHead += subtleColor + "Content warning\n\n" outputHead += tview.Escape(m.currentToot.SpoilerText) - outputHead += "\n\n[gray]---hidden content below---\n\n" + outputHead += "\n\n" + subtleColor + "---hidden content below---\n\n" } output = outputHead + tview.Escape(m.currentToot.Text) diff --git a/statustext.go b/statustext.go index 0613204..ec08eea 100644 --- a/statustext.go +++ b/statustext.go @@ -66,21 +66,25 @@ func (s *StatusText) ShowTootOptions(index int, showSensitive bool) { } s.LinkOverlay.SetURLs(urls) + subtleColor := fmt.Sprintf("[#%x]", s.app.Config.Style.Subtle.Hex()) + special1 := fmt.Sprintf("[#%x]", s.app.Config.Style.TextSpecial1.Hex()) + special2 := fmt.Sprintf("[#%x]", s.app.Config.Style.TextSpecial2.Hex()) var head string if status.Reblog != nil { if status.Account.DisplayName != "" { - head += fmt.Sprintf("[gray]%s (%s)\n", status.Account.DisplayName, status.Account.Acct) + head += fmt.Sprintf(subtleColor+"%s (%s)\n", status.Account.DisplayName, status.Account.Acct) } else { - head += fmt.Sprintf("[gray]%s\n", status.Account.Acct) + head += fmt.Sprintf(subtleColor+"%s\n", status.Account.Acct) } - head += "[gray]Boosted\n" - head += "[gray]" + line + head += subtleColor + "Boosted\n" + head += subtleColor + line status = status.Reblog } + if status.Account.DisplayName != "" { - head += fmt.Sprintf("[tomato]%s\n", status.Account.DisplayName) + head += fmt.Sprintf(special2+"%s\n", status.Account.DisplayName) } - head += fmt.Sprintf("[yellow]%s\n\n", status.Account.Acct) + head += fmt.Sprintf(special1+"%s\n\n", status.Account.Acct) output := head content := tview.Escape(stripped) if content != "" { @@ -89,8 +93,8 @@ func (s *StatusText) ShowTootOptions(index int, showSensitive bool) { var poll string if status.Poll != nil { - poll += "[gray]Poll\n" - poll += "[gray]" + line + poll += subtleColor + "Poll\n" + poll += subtleColor + line poll += fmt.Sprintf("Number of votes: %d\n\n", status.Poll.VotesCount) votes := float64(status.Poll.VotesCount) for _, o := range status.Poll.Options { @@ -105,15 +109,15 @@ func (s *StatusText) ShowTootOptions(index int, showSensitive bool) { var media string for _, att := range status.MediaAttachments { - media += "[gray]" + line - media += fmt.Sprintf("[gray]Attached %s\n", att.Type) + media += subtleColor + line + media += fmt.Sprintf(subtleColor+"Attached %s\n", att.Type) media += fmt.Sprintf("%s\n", att.URL) } var card string if status.Card != nil { - card += "[gray]Card type: " + status.Card.Type + "\n" - card += "[gray]" + line + card += subtleColor + "Card type: " + status.Card.Type + "\n" + card += subtleColor + line if status.Card.Title != "" { card += status.Card.Title + "\n\n" } @@ -145,7 +149,9 @@ func (s *StatusText) ShowTootOptions(index int, showSensitive bool) { if len(status.MediaAttachments) > 0 { info = append(info, "[M]edia") } - info = append(info, "[O]ther") + if len(urls) > 0 { + info = append(info, "[O]pen") + } if status.Account.ID == s.app.Me.ID { info = append(info, "[D]elete") diff --git a/ui.go b/ui.go index 22fcb7d..7d21de2 100644 --- a/ui.go +++ b/ui.go @@ -5,7 +5,6 @@ import ( "fmt" "log" - "github.com/gdamore/tcell" "github.com/mattn/go-mastodon" "github.com/rivo/tview" ) @@ -56,7 +55,7 @@ func (ui *UI) SetFocus(f FocusAt) { case LinkOverlayFocus: ui.Status.SetText("-- LINK --") ui.Pages.ShowPage("links") - ui.app.App.SetFocus(ui.StatusText.LinkOverlay.View) + ui.app.App.SetFocus(ui.StatusText.LinkOverlay.List) case AuthOverlayFocus: ui.Status.SetText("-- LOGIN --") ui.Pages.ShowPage("login") @@ -103,6 +102,7 @@ func (ui *UI) ShowSensetive() { func (ui *UI) NewToot() { ui.app.App.SetFocus(ui.MessageBox.View) + ui.app.UI.MediaOverlay.Reset() ui.MessageBox.NewToot() ui.MessageBox.Draw() ui.SetFocus(MessageFocus) @@ -116,13 +116,13 @@ func (ui *UI) Reply() { if status.Reblog != nil { status = status.Reblog } + ui.app.UI.MediaOverlay.Reset() ui.MessageBox.Reply(status) ui.MessageBox.Draw() ui.SetFocus(MessageFocus) } func (ui *UI) ShowLinks() { - ui.StatusText.LinkOverlay.Draw() ui.SetFocus(LinkOverlayFocus) } @@ -226,26 +226,3 @@ func (ui *UI) DeleteStatus() { log.Fatalln(err) } } - -func clearContent(screen tcell.Screen, x int, y int, width int, height int) (int, int, int, int) { - for cx := x; cx < width+x; cx++ { - for cy := y; cy < height+y; cy++ { - screen.SetContent(cx, cy, ' ', nil, tcell.StyleDefault.Background(tcell.ColorDefault)) - } - } - y2 := y + height - for cx := x + 1; cx < width+x; cx++ { - screen.SetContent(cx, y, tview.BoxDrawingsLightHorizontal, nil, tcell.StyleDefault.Foreground(tcell.ColorGray)) - screen.SetContent(cx, y2, tview.BoxDrawingsLightHorizontal, nil, tcell.StyleDefault.Foreground(tcell.ColorGray)) - } - x2 := x + width - for cy := y + 1; cy < height+y; cy++ { - screen.SetContent(x, cy, tview.BoxDrawingsLightVertical, nil, tcell.StyleDefault.Foreground(tcell.ColorGray)) - screen.SetContent(x2, cy, tview.BoxDrawingsLightVertical, nil, tcell.StyleDefault.Foreground(tcell.ColorGray)) - } - screen.SetContent(x, y, tview.BoxDrawingsLightDownAndRight, nil, tcell.StyleDefault.Foreground(tcell.ColorGray)) - screen.SetContent(x, y+height, tview.BoxDrawingsLightUpAndRight, nil, tcell.StyleDefault.Foreground(tcell.ColorGray)) - screen.SetContent(x+width, y, tview.BoxDrawingsLightDownAndLeft, nil, tcell.StyleDefault.Foreground(tcell.ColorGray)) - screen.SetContent(x+width, y+height, tview.BoxDrawingsLightUpAndLeft, nil, tcell.StyleDefault.Foreground(tcell.ColorGray)) - return x + 1, y + 1, width - 1, height - 1 -}