mirror of
https://github.com/mrusme/neonmodem.git
synced 2024-09-01 04:14:15 -04:00
Fixed runaway spinner, adjusted shortcuts
This commit is contained in:
parent
fe97aad5b5
commit
3daf2abf01
@ -10,10 +10,10 @@ import (
|
|||||||
|
|
||||||
var (
|
var (
|
||||||
highlight = lipgloss.AdaptiveColor{Light: "#874BFD", Dark: "#7D56F4"}
|
highlight = lipgloss.AdaptiveColor{Light: "#874BFD", Dark: "#7D56F4"}
|
||||||
banner = "[0m[38;2;23;3;3;48;2;15;2;2m▄[38;2;248;247;247;48;2;41;22;22m▗[38;2;253;251;254;48;2;163;35;115m▖[38;2;145;5;62;48;2;39;5;6m▎[38;2;49;6;6;48;2;32;4;4m▄[38;2;239;236;236;48;2;58;25;25m▗[38;2;251;243;246;48;2;116;5;41m▅[38;2;210;60;175;48;2;146;10;54m▖[38;2;184;164;164;48;2;55;8;8m▗[38;2;233;207;225;48;2;74;6;19m▅[38;2;244;213;240;48;2;159;7;59m▅[38;2;253;244;247;48;2;187;30;92m▖[38;2;230;222;222;48;2;109;19;39m▗[38;2;244;219;239;48;2;123;7;42m▅[38;2;237;186;231;48;2;156;7;58m▅[38;2;227;161;225;48;2;170;24;92m▖[38;2;212;193;196;48;2;71;6;17m▅[38;2;240;198;234;48;2;155;6;58m▅[38;2;248;217;234;48;2;153;6;58m▅[38;2;240;160;198;48;2;163;6;66m▖[38;2;87;6;25;48;2;46;6;6m▏[38;2;50;10;11;48;2;137;117;117m▉[38;2;246;235;243;48;2;83;5;26m▅[38;2;236;186;232;48;2;153;6;58m▅[38;2;242;201;233;48;2;181;50;123m┓[38;2;217;168;192;48;2;91;6;28m▅[38;2;254;251;252;48;2;185;30;100m▖[38;2;173;8;62;48;2;61;8;10m▎[38;2;210;198;198;48;2;56;15;15m▗[38;2;244;222;240;48;2;92;4;33m▅[38;2;175;6;106;48;2;47;4;13m▌[0m\n" +
|
banner = "[0m[38;2;23;3;3;48;2;15;2;2m▄[38;2;248;247;247;48;2;41;22;22m▗[38;2;253;251;254;48;2;163;35;115m▖[38;2;145;5;62;48;2;39;5;6m▎[38;2;49;6;6;48;2;32;4;4m▄[38;2;239;236;236;48;2;58;25;25m▗[38;2;251;243;246;48;2;116;5;41m▅[38;2;210;60;175;48;2;146;10;54m▖[38;2;184;164;164;48;2;55;8;8m▗[38;2;233;207;225;48;2;74;6;19m▅[38;2;244;213;240;48;2;159;7;59m▅[38;2;253;244;247;48;2;187;30;92m▖[38;2;230;222;222;48;2;109;19;39m▗[38;2;244;219;239;48;2;123;7;42m▅[38;2;237;186;231;48;2;156;7;58m▅[38;2;227;161;225;48;2;170;24;92m▖[38;2;212;193;196;48;2;71;6;17m▅[38;2;240;198;234;48;2;155;6;58m▅[38;2;248;217;234;48;2;153;6;58m▅[38;2;240;160;198;48;2;163;6;66m▖[38;2;87;6;25;48;2;46;6;6m▏[38;2;50;10;11;48;2;137;117;117m▉[38;2;246;235;243;48;2;83;5;26m▅[38;2;236;186;232;48;2;153;6;58m▅[38;2;242;201;233;48;2;181;50;123m┓[38;2;217;168;192;48;2;91;6;28m▅[38;2;254;251;252;48;2;185;30;100m▖[38;2;173;8;62;48;2;61;8;10m▎[38;2;210;198;198;48;2;56;15;15m▗[38;2;244;222;240;48;2;92;4;33m▅[38;2;175;6;106;48;2;47;4;13m▌[0m\n" +
|
||||||
"[38;2;44;6;6;48;2;34;4;4m▗[38;2;105;79;79;48;2;247;246;246m▎[38;2;232;183;238;48;2;157;12;140m▍[38;2;69;9;10;48;2;58;8;8m▄[38;2;176;147;147;48;2;70;11;11m▗[38;2;214;103;202;48;2;239;232;235m▗[38;2;212;107;203;48;2;255;255;255m▎[38;2;250;240;249;48;2;180;14;105m▏[38;2;104;32;32;48;2;236;225;226m▍[38;2;196;14;160;48;2;247;220;237m▝[38;2;246;238;243;48;2;212;61;115m▝[38;2;254;252;254;48;2;193;27;136m▘[38;2;152;78;93;48;2;251;250;250m▍[38;2;192;15;165;48;2;242;201;231m▝[38;2;235;185;203;48;2;162;23;74m▂[38;2;130;20;51;48;2;178;145;145m▉[38;2;255;255;255;48;2;250;245;248m┈[38;2;243;192;220;48;2;177;27;124m▂[38;2;181;124;147;48;2;252;249;252m▎[38;2;225;150;223;48;2;147;11;110m▍[38;2;73;10;10;48;2;66;9;9m▅[38;2;89;36;36;48;2;239;235;235m▋[38;2;251;242;251;48;2;208;91;207m▊[38;2;252;248;249;48;2;167;19;96m▂[38;2;231;13;80;48;2;138;21;59m╴[38;2;193;157;167;48;2;250;242;248m▏[38;2;251;240;249;48;2;209;76;188m▊[38;2;239;218;222;48;2;179;30;80m▗[38;2;254;254;254;48;2;242;229;237m╴[38;2;249;236;249;48;2;191;38;198m▋[38;2;150;8;113;48;2;53;6;10m▎[0m\n" +
|
"[38;2;44;6;6;48;2;34;4;4m▗[38;2;105;79;79;48;2;247;246;246m▎[38;2;232;183;238;48;2;157;12;140m▍[38;2;69;9;10;48;2;58;8;8m▄[38;2;176;147;147;48;2;70;11;11m▗[38;2;214;103;202;48;2;239;232;235m▗[38;2;212;107;203;48;2;255;255;255m▎[38;2;250;240;249;48;2;180;14;105m▏[38;2;104;32;32;48;2;236;225;226m▍[38;2;196;14;160;48;2;247;220;237m▝[38;2;246;238;243;48;2;212;61;115m▝[38;2;254;252;254;48;2;193;27;136m▘[38;2;152;78;93;48;2;251;250;250m▍[38;2;192;15;165;48;2;242;201;231m▝[38;2;235;185;203;48;2;162;23;74m▂[38;2;130;20;51;48;2;178;145;145m▉[38;2;255;255;255;48;2;250;245;248m┈[38;2;243;192;220;48;2;177;27;124m▂[38;2;181;124;147;48;2;252;249;252m▎[38;2;225;150;223;48;2;147;11;110m▍[38;2;73;10;10;48;2;66;9;9m▅[38;2;89;36;36;48;2;239;235;235m▋[38;2;251;242;251;48;2;208;91;207m▊[38;2;252;248;249;48;2;167;19;96m▂[38;2;231;13;80;48;2;138;21;59m╴[38;2;193;157;167;48;2;250;242;248m▏[38;2;251;240;249;48;2;209;76;188m▊[38;2;239;218;222;48;2;179;30;80m▗[38;2;254;254;254;48;2;242;229;237m╴[38;2;249;236;249;48;2;191;38;198m▋[38;2;150;8;113;48;2;53;6;10m▎[0m\n" +
|
||||||
"[38;2;47;11;11;48;2;174;157;158m▊[38;2;251;245;252;48;2;212;112;220m▉[38;2;186;15;167;48;2;115;10;33m▌[38;2;75;10;11;48;2;112;19;33m╴[38;2;136;88;89;48;2;248;241;246m▘[38;2;189;12;175;48;2;234;171;222m▁[38;2;221;119;169;48;2;253;250;251m▏[38;2;252;248;252;48;2;205;52;137m▏[38;2;248;229;244;48;2;152;28;51m▅[38;2;188;25;91;48;2;235;168;215m▆[38;2;241;234;234;48;2;253;249;252m┈[38;2;230;144;204;48;2;187;43;109m▏[38;2;251;249;250;48;2;232;171;226m▉[38;2;180;27;126;48;2;255;255;255m▇[38;2;149;12;66;48;2;217;109;204m▆[38;2;115;24;41;48;2;230;218;218m▌[38;2;195;34;181;48;2;248;228;245m▗[38;2;136;46;72;48;2;248;231;246m▖[38;2;252;244;251;48;2;206;48;170m▍[38;2;183;10;99;48;2;78;9;20m▎[38;2;62;8;9;48;2;71;10;10m▃[38;2;115;71;71;48;2;246;244;244m▎[38;2;247;229;248;48;2;183;66;169m▎[38;2;84;10;27;48;2;216;115;211m▅[38;2;116;24;64;48;2;226;212;212m▋[38;2;251;242;251;48;2;202;54;184m▋[38;2;185;46;126;48;2;244;239;239m▎[38;2;179;18;156;48;2;239;197;234m▗[38;2;199;86;176;48;2;252;244;251m▎[38;2;230;172;232;48;2;154;11;125m▍[38;2;58;8;8;48;2;45;6;6m▘[0m\n" +
|
"[38;2;47;11;11;48;2;174;157;158m▊[38;2;251;245;252;48;2;212;112;220m▉[38;2;186;15;167;48;2;115;10;33m▌[38;2;75;10;11;48;2;112;19;33m╴[38;2;136;88;89;48;2;248;241;246m▘[38;2;189;12;175;48;2;234;171;222m▁[38;2;221;119;169;48;2;253;250;251m▏[38;2;252;248;252;48;2;205;52;137m▏[38;2;248;229;244;48;2;152;28;51m▅[38;2;188;25;91;48;2;235;168;215m▆[38;2;241;234;234;48;2;253;249;252m┈[38;2;230;144;204;48;2;187;43;109m▏[38;2;251;249;250;48;2;232;171;226m▉[38;2;180;27;126;48;2;255;255;255m▇[38;2;149;12;66;48;2;217;109;204m▆[38;2;115;24;41;48;2;230;218;218m▌[38;2;195;34;181;48;2;248;228;245m▗[38;2;136;46;72;48;2;248;231;246m▖[38;2;252;244;251;48;2;206;48;170m▍[38;2;183;10;99;48;2;78;9;20m▎[38;2;62;8;9;48;2;71;10;10m▃[38;2;115;71;71;48;2;246;244;244m▎[38;2;247;229;248;48;2;183;66;169m▎[38;2;84;10;27;48;2;216;115;211m▅[38;2;116;24;64;48;2;226;212;212m▋[38;2;251;242;251;48;2;202;54;184m▋[38;2;185;46;126;48;2;244;239;239m▎[38;2;179;18;156;48;2;239;197;234m▗[38;2;199;86;176;48;2;252;244;251m▎[38;2;230;172;232;48;2;154;11;125m▍[38;2;58;8;8;48;2;45;6;6m▘[0m\n" +
|
||||||
"[38;2;227;222;222;48;2;39;7;14m▝[38;2;112;10;118;48;2;252;247;253m▄[38;2;116;11;115;48;2;251;230;240m▄[38;2;103;11;89;48;2;236;173;206m▄[38;2;254;253;254;48;2;145;33;138m▘[38;2;73;9;22;48;2;161;11;136m▇[38;2;92;13;60;48;2;235;225;228m▄[38;2;118;28;87;48;2;224;115;191m▆[38;2;98;14;65;48;2;247;240;245m▄[38;2;133;21;119;48;2;250;225;237m▄[38;2;109;8;84;48;2;228;161;227m▄[38;2;205;186;186;48;2;90;10;46m▝[38;2;122;13;110;48;2;253;249;253m▄[38;2;121;12;111;48;2;250;226;237m▄[38;2;249;217;231;48;2;135;13;103m▘[38;2;255;255;255;48;2;110;47;76m▝[38;2;233;181;236;48;2;116;8;99m▘[38;2;226;217;217;48;2;54;8;9m▝[38;2;255;255;255;48;2;141;30;142m▘[38;2;108;6;57;48;2;56;6;11m▏[38;2;42;5;6;48;2;50;14;14m╴[38;2;88;9;86;48;2;252;249;252m▄[38;2;179;25;203;48;2;67;6;41m▘[38;2;38;5;5;48;2;56;7;7m▄[38;2;255;255;255;48;2;76;28;47m▝[38;2;237;197;240;48;2;117;8;107m▘[38;2;60;7;16;48;2;143;76;100m▇[38;2;55;8;8;48;2;87;17;52m╴[38;2;93;10;87;48;2;251;244;252m▄[38;2;169;14;189;48;2;56;5;33m▘[38;2;21;3;3;48;2;33;4;4m▄[0m"
|
"[38;2;227;222;222;48;2;39;7;14m▝[38;2;112;10;118;48;2;252;247;253m▄[38;2;116;11;115;48;2;251;230;240m▄[38;2;103;11;89;48;2;236;173;206m▄[38;2;254;253;254;48;2;145;33;138m▘[38;2;73;9;22;48;2;161;11;136m▇[38;2;92;13;60;48;2;235;225;228m▄[38;2;118;28;87;48;2;224;115;191m▆[38;2;98;14;65;48;2;247;240;245m▄[38;2;133;21;119;48;2;250;225;237m▄[38;2;109;8;84;48;2;228;161;227m▄[38;2;205;186;186;48;2;90;10;46m▝[38;2;122;13;110;48;2;253;249;253m▄[38;2;121;12;111;48;2;250;226;237m▄[38;2;249;217;231;48;2;135;13;103m▘[38;2;255;255;255;48;2;110;47;76m▝[38;2;233;181;236;48;2;116;8;99m▘[38;2;226;217;217;48;2;54;8;9m▝[38;2;255;255;255;48;2;141;30;142m▘[38;2;108;6;57;48;2;56;6;11m▏[38;2;42;5;6;48;2;50;14;14m╴[38;2;88;9;86;48;2;252;249;252m▄[38;2;179;25;203;48;2;67;6;41m▘[38;2;38;5;5;48;2;56;7;7m▄[38;2;255;255;255;48;2;76;28;47m▝[38;2;237;197;240;48;2;117;8;107m▘[38;2;60;7;16;48;2;143;76;100m▇[38;2;55;8;8;48;2;87;17;52m╴[38;2;93;10;87;48;2;251;244;252m▄[38;2;169;14;189;48;2;56;5;33m▘[38;2;21;3;3;48;2;33;4;4m▄[0m"
|
||||||
)
|
)
|
||||||
|
|
||||||
type Model struct {
|
type Model struct {
|
||||||
@ -42,6 +42,8 @@ func (m Model) Update(msg tea.Msg) (Model, tea.Cmd) {
|
|||||||
|
|
||||||
if m.ctx.Loading == true {
|
if m.ctx.Loading == true {
|
||||||
cmds = append(cmds, m.spinner.Tick)
|
cmds = append(cmds, m.spinner.Tick)
|
||||||
|
} else {
|
||||||
|
return m, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
switch msg := msg.(type) {
|
switch msg := msg.(type) {
|
||||||
|
4
ui/ui.go
4
ui/ui.go
@ -31,8 +31,8 @@ var DefaultKeyMap = KeyMap{
|
|||||||
key.WithHelp("↓/j", "move down"),
|
key.WithHelp("↓/j", "move down"),
|
||||||
),
|
),
|
||||||
Quit: key.NewBinding(
|
Quit: key.NewBinding(
|
||||||
key.WithKeys("q", "ctrl+q"),
|
key.WithKeys("q", "ctrl+q", "escape"),
|
||||||
key.WithHelp("q/Q", "quit"),
|
key.WithHelp("q/esc", "quit"),
|
||||||
),
|
),
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -36,15 +36,15 @@ type KeyMap struct {
|
|||||||
|
|
||||||
var DefaultKeyMap = KeyMap{
|
var DefaultKeyMap = KeyMap{
|
||||||
Refresh: key.NewBinding(
|
Refresh: key.NewBinding(
|
||||||
key.WithKeys("r", "R"),
|
key.WithKeys("ctrl+r"),
|
||||||
key.WithHelp("r/R", "refresh"),
|
key.WithHelp("ctrl+r", "refresh"),
|
||||||
),
|
),
|
||||||
Select: key.NewBinding(
|
Select: key.NewBinding(
|
||||||
key.WithKeys("enter"),
|
key.WithKeys("r", "enter"),
|
||||||
key.WithHelp("enter", "select"),
|
key.WithHelp("r/enter", "read"),
|
||||||
),
|
),
|
||||||
Close: key.NewBinding(
|
Close: key.NewBinding(
|
||||||
key.WithKeys("esc"),
|
key.WithKeys("esc", "q"),
|
||||||
key.WithHelp("esc", "close"),
|
key.WithHelp("esc", "close"),
|
||||||
),
|
),
|
||||||
}
|
}
|
||||||
@ -60,9 +60,10 @@ type Model struct {
|
|||||||
|
|
||||||
glam *glamour.TermRenderer
|
glam *glamour.TermRenderer
|
||||||
|
|
||||||
focused string
|
focused string
|
||||||
buffer string
|
buffer string
|
||||||
replyIDs []string
|
replyIDs []string
|
||||||
|
viewcache string
|
||||||
}
|
}
|
||||||
|
|
||||||
func (m Model) Init() tea.Cmd {
|
func (m Model) Init() tea.Cmd {
|
||||||
@ -110,22 +111,24 @@ func (m Model) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
|
|||||||
if m.focused == "list" {
|
if m.focused == "list" {
|
||||||
m.ctx.Loading = true
|
m.ctx.Loading = true
|
||||||
cmds = append(cmds, m.refresh())
|
cmds = append(cmds, m.refresh())
|
||||||
|
}
|
||||||
|
|
||||||
|
case key.Matches(msg, m.keymap.Select):
|
||||||
|
if m.focused == "list" {
|
||||||
|
i, ok := m.list.SelectedItem().(post.Post)
|
||||||
|
if ok {
|
||||||
|
m.ctx.Loading = true
|
||||||
|
cmds = append(cmds, m.loadItem(&i))
|
||||||
|
}
|
||||||
} else if m.focused == "post" {
|
} else if m.focused == "post" {
|
||||||
m.focused = "reply"
|
m.focused = "reply"
|
||||||
return m, m.textarea.Focus()
|
return m, m.textarea.Focus()
|
||||||
}
|
}
|
||||||
|
|
||||||
case key.Matches(msg, m.keymap.Select):
|
|
||||||
if m.focused == "list" {
|
|
||||||
m.ctx.Loading = true
|
|
||||||
i, ok := m.list.SelectedItem().(post.Post)
|
|
||||||
if ok {
|
|
||||||
cmds = append(cmds, m.loadItem(&i))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
case key.Matches(msg, m.keymap.Close):
|
case key.Matches(msg, m.keymap.Close):
|
||||||
if m.focused == "post" {
|
if m.focused == "list" {
|
||||||
|
return m, tea.Quit
|
||||||
|
} else if m.focused == "post" {
|
||||||
// Let's make sure we reset the texarea
|
// Let's make sure we reset the texarea
|
||||||
m.textarea.Reset()
|
m.textarea.Reset()
|
||||||
m.focused = "list"
|
m.focused = "list"
|
||||||
@ -176,6 +179,7 @@ func (m Model) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
|
|||||||
m.items = msg
|
m.items = msg
|
||||||
m.list.SetItems(m.items)
|
m.list.SetItems(m.items)
|
||||||
m.ctx.Loading = false
|
m.ctx.Loading = false
|
||||||
|
return m, nil
|
||||||
|
|
||||||
case *post.Post:
|
case *post.Post:
|
||||||
m.viewport.SetContent(m.renderViewport(msg))
|
m.viewport.SetContent(m.renderViewport(msg))
|
||||||
@ -204,6 +208,11 @@ func (m Model) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
|
|||||||
func (m Model) View() string {
|
func (m Model) View() string {
|
||||||
var view strings.Builder = strings.Builder{}
|
var view strings.Builder = strings.Builder{}
|
||||||
|
|
||||||
|
if m.focused == "reply" && m.viewcache != "" {
|
||||||
|
return helpers.PlaceOverlay(3, 2, m.textarea.View(), m.viewcache, false)
|
||||||
|
}
|
||||||
|
|
||||||
|
m.ctx.Logger.Debugln("View()")
|
||||||
var l string = ""
|
var l string = ""
|
||||||
if m.focused == "list" {
|
if m.focused == "list" {
|
||||||
l = m.ctx.Theme.PostsList.List.Focused.Render(m.list.View())
|
l = m.ctx.Theme.PostsList.List.Focused.Render(m.list.View())
|
||||||
@ -284,7 +293,8 @@ func (m Model) View() string {
|
|||||||
view.WriteString(tmp)
|
view.WriteString(tmp)
|
||||||
}
|
}
|
||||||
|
|
||||||
return view.String()
|
m.viewcache = view.String()
|
||||||
|
return m.viewcache
|
||||||
}
|
}
|
||||||
|
|
||||||
func (m *Model) refresh() tea.Cmd {
|
func (m *Model) refresh() tea.Cmd {
|
||||||
|
Loading…
Reference in New Issue
Block a user