2022-12-31 19:03:53 -05:00
|
|
|
|
package header
|
|
|
|
|
|
|
|
|
|
import (
|
2023-01-04 21:43:11 -05:00
|
|
|
|
"fmt"
|
|
|
|
|
|
2023-01-04 19:13:04 -05:00
|
|
|
|
"github.com/mrusme/gobbs/config"
|
2022-12-31 19:03:53 -05:00
|
|
|
|
"github.com/mrusme/gobbs/ui/ctx"
|
|
|
|
|
|
|
|
|
|
"github.com/charmbracelet/bubbles/spinner"
|
|
|
|
|
tea "github.com/charmbracelet/bubbletea"
|
|
|
|
|
"github.com/charmbracelet/lipgloss"
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
var (
|
|
|
|
|
highlight = lipgloss.AdaptiveColor{Light: "#874BFD", Dark: "#7D56F4"}
|
2023-01-01 20:13:02 -05:00
|
|
|
|
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;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" +
|
2023-01-04 19:13:04 -05:00
|
|
|
|
"[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\n" +
|
|
|
|
|
" v" + config.VERSION
|
2022-12-31 19:03:53 -05:00
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
type Model struct {
|
|
|
|
|
ctx *ctx.Ctx
|
|
|
|
|
spinner spinner.Model
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func NewModel(c *ctx.Ctx) Model {
|
|
|
|
|
m := Model{
|
|
|
|
|
ctx: c,
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
m.spinner = spinner.New()
|
|
|
|
|
m.spinner.Spinner = spinner.Dot
|
|
|
|
|
m.spinner.Style = lipgloss.NewStyle().Foreground(lipgloss.Color("205"))
|
|
|
|
|
|
|
|
|
|
return m
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func (m Model) Init() tea.Cmd {
|
|
|
|
|
return m.spinner.Tick
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func (m Model) Update(msg tea.Msg) (Model, tea.Cmd) {
|
|
|
|
|
var cmds []tea.Cmd
|
|
|
|
|
|
|
|
|
|
if m.ctx.Loading == true {
|
|
|
|
|
cmds = append(cmds, m.spinner.Tick)
|
2023-01-01 20:13:02 -05:00
|
|
|
|
} else {
|
|
|
|
|
return m, nil
|
2022-12-31 19:03:53 -05:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
switch msg := msg.(type) {
|
|
|
|
|
case spinner.TickMsg:
|
|
|
|
|
var cmd tea.Cmd
|
|
|
|
|
m.spinner, cmd = m.spinner.Update(msg)
|
|
|
|
|
cmds = append(cmds, cmd)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return m, tea.Batch(cmds...)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func (m Model) View() string {
|
2023-01-01 01:59:10 -05:00
|
|
|
|
var row string
|
2023-01-04 19:13:04 -05:00
|
|
|
|
var spinner string = ""
|
2022-12-31 19:03:53 -05:00
|
|
|
|
|
2023-01-05 20:47:20 -05:00
|
|
|
|
selectorWidth := 40
|
|
|
|
|
selectorTextLen := selectorWidth - 7
|
2023-01-04 19:13:04 -05:00
|
|
|
|
selector := lipgloss.NewStyle().
|
|
|
|
|
Foreground(lipgloss.Color("#7fffd4")).
|
|
|
|
|
BorderForeground(lipgloss.Color("#7fffd4")).
|
|
|
|
|
Border(lipgloss.NormalBorder()).
|
|
|
|
|
Padding(0, 1, 0, 1).
|
2023-01-05 20:47:20 -05:00
|
|
|
|
Width(selectorWidth)
|
2023-01-04 19:13:04 -05:00
|
|
|
|
|
2023-01-04 21:43:11 -05:00
|
|
|
|
curSysIdx := m.ctx.GetCurrentSystem()
|
|
|
|
|
var currentSystem string = "All"
|
|
|
|
|
if curSysIdx >= 0 {
|
2023-01-04 23:59:59 -05:00
|
|
|
|
currentSystem = (*m.ctx.Systems[curSysIdx]).Title()
|
2023-01-05 20:47:20 -05:00
|
|
|
|
if len(currentSystem) > selectorTextLen {
|
|
|
|
|
currentSystem = currentSystem[0:selectorTextLen]
|
|
|
|
|
}
|
2023-01-04 21:43:11 -05:00
|
|
|
|
}
|
|
|
|
|
|
2023-01-05 11:43:52 -05:00
|
|
|
|
curForum := m.ctx.GetCurrentForum()
|
|
|
|
|
var currentForum string = "All"
|
|
|
|
|
if curForum.ID != "" {
|
|
|
|
|
currentForum = curForum.Title()
|
2023-01-05 20:47:20 -05:00
|
|
|
|
if len(currentForum) > selectorTextLen {
|
|
|
|
|
currentForum = currentForum[0:selectorTextLen]
|
|
|
|
|
}
|
2023-01-05 11:43:52 -05:00
|
|
|
|
}
|
|
|
|
|
|
2023-01-04 21:43:11 -05:00
|
|
|
|
systemSelector := selector.Render(fmt.Sprintf("⏷ %s", currentSystem))
|
2023-01-05 11:43:52 -05:00
|
|
|
|
forumSelector := selector.Render(fmt.Sprintf("⏷ %s", currentForum))
|
2023-01-04 19:13:04 -05:00
|
|
|
|
|
|
|
|
|
selectorColumn := lipgloss.JoinVertical(lipgloss.Center,
|
|
|
|
|
lipgloss.JoinHorizontal(lipgloss.Bottom, "System: \n "+
|
2023-01-05 18:05:25 -05:00
|
|
|
|
lipgloss.NewStyle().Foreground(m.ctx.Theme.DialogBox.Bottombar.GetForeground()).Render("C-e"),
|
2023-01-04 19:13:04 -05:00
|
|
|
|
systemSelector),
|
|
|
|
|
lipgloss.JoinHorizontal(lipgloss.Bottom, "Forum: \n "+
|
2023-01-05 18:05:25 -05:00
|
|
|
|
lipgloss.NewStyle().Foreground(m.ctx.Theme.DialogBox.Bottombar.GetForeground()).Render("C-t"),
|
2023-01-04 19:13:04 -05:00
|
|
|
|
forumSelector),
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
if m.ctx.Loading == true {
|
|
|
|
|
spinner = m.spinner.View()
|
2022-12-31 19:03:53 -05:00
|
|
|
|
}
|
|
|
|
|
|
2023-01-04 19:13:04 -05:00
|
|
|
|
row = lipgloss.JoinHorizontal(lipgloss.Top, banner, " ", selectorColumn, " ", spinner)
|
|
|
|
|
|
2023-01-01 01:59:10 -05:00
|
|
|
|
return row
|
2022-12-31 19:03:53 -05:00
|
|
|
|
}
|