11package app
22
33import (
4+ "sync"
5+
46 "github.com/charmbracelet/bubbles/help"
7+ "github.com/charmbracelet/bubbles/table"
58 tea "github.com/charmbracelet/bubbletea"
69 "github.com/charmbracelet/lipgloss"
710
811 "github.com/hedhyw/json-log-viewer/internal/keymap"
12+ "github.com/hedhyw/json-log-viewer/internal/pkg/events"
913 "github.com/hedhyw/json-log-viewer/internal/pkg/source"
1014
1115 "github.com/hedhyw/json-log-viewer/internal/pkg/config"
1216)
1317
1418// Application global state.
1519type Application struct {
20+ lock * sync.Mutex
21+
1622 FileName string
1723 Config * config.Config
1824
1925 BaseStyle lipgloss.Style
2026 FooterStyle lipgloss.Style
2127
22- LastWindowSize tea.WindowSizeMsg
23- Entries source.LazyLogEntries
28+ lastWindowSize tea.WindowSizeMsg
29+ entries source.LazyLogEntries
2430 Version string
2531
2632 keys keymap.KeyMap
@@ -38,13 +44,15 @@ func newApplication(
3844 )
3945
4046 return Application {
47+ lock : & sync.Mutex {},
48+
4149 FileName : fileName ,
4250 Config : config ,
4351
4452 BaseStyle : getBaseStyle (),
4553 FooterStyle : getFooterStyle (),
4654
47- LastWindowSize : tea.WindowSizeMsg {
55+ lastWindowSize : tea.WindowSizeMsg {
4856 Width : initialWidth ,
4957 Height : initialHeight ,
5058 },
@@ -66,3 +74,51 @@ func NewModel(
6674
6775 return newStateInitial (& application )
6876}
77+
78+ func (app * Application ) getLogLevelStyle (
79+ renderedRows []table.Row ,
80+ baseStyle lipgloss.Style ,
81+ rowID int ,
82+ ) lipgloss.Style {
83+ if rowID < 0 || rowID >= len (renderedRows ) {
84+ return baseStyle
85+ }
86+
87+ row := renderedRows [rowID ]
88+
89+ color := getColorForLogLevel (app .getLogLevelFromLogRow (row ))
90+ if color == "" {
91+ return baseStyle
92+ }
93+
94+ return baseStyle .Foreground (color )
95+ }
96+
97+ // Update application state.
98+ func (app * Application ) Update (msg tea.Msg ) {
99+ app .lock .Lock ()
100+ defer app .lock .Unlock ()
101+
102+ switch msg := msg .(type ) {
103+ case tea.WindowSizeMsg :
104+ app .lastWindowSize = msg
105+ case events.LogEntriesUpdateMsg :
106+ app .entries = source .LazyLogEntries (msg )
107+ }
108+ }
109+
110+ // Entries getter.
111+ func (app * Application ) Entries () source.LazyLogEntries {
112+ app .lock .Lock ()
113+ defer app .lock .Unlock ()
114+
115+ return app .entries
116+ }
117+
118+ // LastWindowSize getter.
119+ func (app * Application ) LastWindowSize () tea.WindowSizeMsg {
120+ app .lock .Lock ()
121+ defer app .lock .Unlock ()
122+
123+ return app .lastWindowSize
124+ }
0 commit comments