Skip to content

Commit

Permalink
Added visibility options
Browse files Browse the repository at this point in the history
  • Loading branch information
RasmusLindroth committed Jul 23, 2020
1 parent e49dde5 commit e8dca42
Show file tree
Hide file tree
Showing 4 changed files with 182 additions and 15 deletions.
8 changes: 8 additions & 0 deletions main.go
Original file line number Diff line number Diff line change
Expand Up @@ -134,6 +134,11 @@ func main() {
return nil
}

if app.UI.Focus == VisibilityOverlayFocus {
app.UI.VisibilityOverlay.InputHandler(event)
return nil
}

if app.UI.Focus == CmdBarFocus {
switch event.Key() {
case tcell.KeyEnter:
Expand Down Expand Up @@ -164,6 +169,9 @@ func main() {
case 'm', 'M':
app.UI.SetFocus(MessageAttachmentFocus)
return nil
case 'v', 'V':
app.UI.SetFocus(VisibilityOverlayFocus)
return nil
case 'q', 'Q':
app.UI.SetFocus(LeftPaneFocus)
return nil
Expand Down
29 changes: 27 additions & 2 deletions messagebox.go
Original file line number Diff line number Diff line change
Expand Up @@ -16,10 +16,24 @@ type msgToot struct {
MediaIDs []mastodon.ID
Sensitive bool
SpoilerText string
Visibility string
ScheduledAt *time.Time
}

func VisibilityToText(s string) string {
switch s {
case mastodon.VisibilityPublic:
return "Public"
case mastodon.VisibilityUnlisted:
return "Unlisted"
case mastodon.VisibilityFollowersOnly:
return "Followers"
case mastodon.VisibilityDirectMessage:
return "Direct"
default:
return "Public"
}
}

func NewMessageBox(app *App) *MessageBox {
m := &MessageBox{
app: app,
Expand Down Expand Up @@ -72,6 +86,12 @@ func (m *MessageBox) composeToot(status *mastodon.Status) {
}
mt.Status = status
}
visibility := mastodon.VisibilityPublic
if status != nil && status.Visibility == mastodon.VisibilityDirectMessage {
visibility = mastodon.VisibilityDirectMessage
}
m.app.UI.VisibilityOverlay.SetVisibilty(visibility)

m.currentToot = mt
}

Expand Down Expand Up @@ -113,6 +133,8 @@ func (m *MessageBox) Post() {
send.MediaIDs = append(send.MediaIDs, a.ID)
}

send.Visibility = m.app.UI.VisibilityOverlay.GetVisibility()

_, err := m.app.API.Client.PostStatus(context.Background(), &send)
if err != nil {
m.app.UI.CmdBar.ShowError(fmt.Sprintf("Couldn't post toot. Error: %v\n", err))
Expand All @@ -125,6 +147,7 @@ func (m *MessageBox) Draw() {
var items []string
items = append(items, ColorKey(m.app.Config.Style, "", "P", "ost"))
items = append(items, ColorKey(m.app.Config.Style, "", "E", "dit"))
items = append(items, ColorKey(m.app.Config.Style, "", "V", "isibility"))
items = append(items, ColorKey(m.app.Config.Style, "", "T", "oggle CW"))
items = append(items, ColorKey(m.app.Config.Style, "", "C", "ontent warning text"))
items = append(items, ColorKey(m.app.Config.Style, "", "M", "edia attachment"))
Expand All @@ -136,6 +159,9 @@ func (m *MessageBox) Draw() {

subtleColor := ColorMark(m.app.Config.Style.Subtle)
warningColor := ColorMark(m.app.Config.Style.WarningText)

outputHead += subtleColor + VisibilityToText(m.app.UI.VisibilityOverlay.GetVisibility()) + "\n\n"

if m.currentToot.Status != nil {
var acct string
if m.currentToot.Status.Account.DisplayName != "" {
Expand All @@ -158,7 +184,6 @@ func (m *MessageBox) Draw() {
outputHead += tview.Escape(m.currentToot.SpoilerText)
outputHead += "\n\n" + subtleColor + "---hidden content below---\n\n"
}

output = outputHead + tview.Escape(m.currentToot.Text)

m.View.SetText(output)
Expand Down
44 changes: 31 additions & 13 deletions ui.go
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ const (
MessageFocus
MessageAttachmentFocus
LinkOverlayFocus
VisibilityOverlayFocus
AuthOverlayFocus
)

Expand All @@ -39,6 +40,7 @@ func (ui *UI) Init() {
ui.StatusBar = NewStatusBar(ui.app)
ui.MessageBox = NewMessageBox(ui.app)
ui.LinkOverlay = NewLinkOverlay(ui.app)
ui.VisibilityOverlay = NewVisibilityOverlay(ui.app)
ui.AuthOverlay = NewAuthOverlay(ui.app)
ui.MediaOverlay = NewMediaOverlay(ui.app)

Expand Down Expand Up @@ -86,6 +88,14 @@ func (ui *UI) Init() {
AddItem(ui.LinkOverlay.TextBottom, 1, 1, true), 0, 8, false).
AddItem(nil, 0, 1, false), 0, 8, true).
AddItem(nil, 0, 1, false), true, false)
ui.Pages.AddPage("visibility", tview.NewFlex().AddItem(nil, 0, 1, false).
AddItem(tview.NewFlex().SetDirection(tview.FlexRow).
AddItem(nil, 0, 1, false).
AddItem(ui.VisibilityOverlay.Flex.SetDirection(tview.FlexRow).
AddItem(ui.VisibilityOverlay.List, 0, 10, true).
AddItem(ui.VisibilityOverlay.TextBottom, 1, 1, true), 0, 8, false).
AddItem(nil, 0, 1, false), 0, 8, true).
AddItem(nil, 0, 1, false), true, false)
ui.Pages.AddPage("login",
tview.NewFlex().
AddItem(nil, 0, 1, false).
Expand Down Expand Up @@ -116,19 +126,20 @@ func (ui *UI) Init() {
}

type UI struct {
app *App
Root *tview.Application
Focus FocusAt
Top *Top
MessageBox *MessageBox
CmdBar *CmdBar
StatusBar *StatusBar
Pages *tview.Pages
LinkOverlay *LinkOverlay
AuthOverlay *AuthOverlay
MediaOverlay *MediaView
Timeline TimelineType
StatusView *StatusView
app *App
Root *tview.Application
Focus FocusAt
Top *Top
MessageBox *MessageBox
CmdBar *CmdBar
StatusBar *StatusBar
Pages *tview.Pages
LinkOverlay *LinkOverlay
VisibilityOverlay *VisibilityOverlay
AuthOverlay *AuthOverlay
MediaOverlay *MediaView
Timeline TimelineType
StatusView *StatusView
}

func (ui *UI) FocusAt(p tview.Primitive, s string) {
Expand All @@ -150,8 +161,10 @@ func (ui *UI) SetFocus(f FocusAt) {
case CmdBarFocus:
ui.FocusAt(ui.CmdBar.Input, "-- CMD --")
case MessageFocus:
ui.MessageBox.Draw()
ui.Pages.ShowPage("toot")
ui.Pages.HidePage("media")
ui.Pages.HidePage("visibility")
ui.Root.SetFocus(ui.MessageBox.View)
ui.FocusAt(ui.MessageBox.View, "-- TOOT --")
case MessageAttachmentFocus:
Expand All @@ -160,6 +173,11 @@ func (ui *UI) SetFocus(f FocusAt) {
ui.Pages.ShowPage("links")
ui.Root.SetFocus(ui.LinkOverlay.List)
ui.FocusAt(ui.LinkOverlay.List, "-- LINK --")
case VisibilityOverlayFocus:
ui.VisibilityOverlay.Show()
ui.Pages.ShowPage("visibility")
ui.Root.SetFocus(ui.VisibilityOverlay.List)
ui.FocusAt(ui.VisibilityOverlay.List, "-- VISIBILITY --")
case AuthOverlayFocus:
ui.Pages.ShowPage("login")
ui.FocusAt(ui.AuthOverlay.Input, "-- LOGIN --")
Expand Down
116 changes: 116 additions & 0 deletions visibilityoverlay.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,116 @@
package main

import (
"github.com/gdamore/tcell"
"github.com/mattn/go-mastodon"
"github.com/rivo/tview"
)

func NewVisibilityOverlay(app *App) *VisibilityOverlay {
v := &VisibilityOverlay{
app: app,
Flex: tview.NewFlex(),
TextBottom: tview.NewTextView(),
List: tview.NewList(),
}

v.TextBottom.SetBackgroundColor(app.Config.Style.Background)
v.TextBottom.SetDynamicColors(true)
v.List.SetBackgroundColor(app.Config.Style.Background)
v.List.SetMainTextColor(app.Config.Style.Text)
v.List.SetSelectedBackgroundColor(app.Config.Style.ListSelectedBackground)
v.List.SetSelectedTextColor(app.Config.Style.ListSelectedText)
v.List.ShowSecondaryText(false)
v.List.SetHighlightFullLine(true)
v.Flex.SetDrawFunc(app.Config.ClearContent)
v.TextBottom.SetText(ColorKey(app.Config.Style, "", "Enter", ""))
return v
}

type VisibilityOverlay struct {
app *App
Flex *tview.Flex
TextBottom *tview.TextView
List *tview.List
Selected int
}

func (v *VisibilityOverlay) SetVisibilty(s string) {
v.List.Clear()
visibilities := []string{
mastodon.VisibilityPublic,
mastodon.VisibilityFollowersOnly,
mastodon.VisibilityUnlisted,
mastodon.VisibilityDirectMessage,
}

selected := 0
for i, item := range visibilities {
if s == item {
selected = i
}
v.List.AddItem(
VisibilityToText(item),
"", 0, nil)
}
v.List.SetCurrentItem(selected)
v.Selected = selected
}

func (v *VisibilityOverlay) Show() {
v.List.SetCurrentItem(v.Selected)
}

func (v *VisibilityOverlay) Prev() {
index := v.List.GetCurrentItem()
if index-1 >= 0 {
v.List.SetCurrentItem(index - 1)
}
}

func (v *VisibilityOverlay) Next() {
index := v.List.GetCurrentItem()
if index+1 < v.List.GetItemCount() {
v.List.SetCurrentItem(index + 1)
}
}

func (v *VisibilityOverlay) SetVisibilityIndex() {
index := v.List.GetCurrentItem()
v.Selected = index
}

func (v *VisibilityOverlay) GetVisibility() string {
visibilities := []string{
mastodon.VisibilityPublic,
mastodon.VisibilityFollowersOnly,
mastodon.VisibilityUnlisted,
mastodon.VisibilityDirectMessage,
}
return visibilities[v.Selected]
}

func (v *VisibilityOverlay) InputHandler(event *tcell.EventKey) {
if event.Key() == tcell.KeyRune {
switch event.Rune() {
case 'j', 'J':
v.Next()
case 'k', 'K':
v.Prev()
case 'q', 'Q':
v.app.UI.SetFocus(MessageFocus)
}
} else {
switch event.Key() {
case tcell.KeyEnter:
v.SetVisibilityIndex()
v.app.UI.SetFocus(MessageFocus)
case tcell.KeyUp:
v.Prev()
case tcell.KeyDown:
v.Next()
case tcell.KeyEsc:
v.app.UI.SetFocus(MessageFocus)
}
}
}

0 comments on commit e8dca42

Please sign in to comment.