2 files changed,
44 insertions(+),
16 deletions(-)
Author:
Oleksandr Smirnov
olexsmir@gmail.com
Committed at:
2026-01-22 01:46:36 +0200
Change ID:
llyvvwmnpvlnwpsowxrkrokpukmkqzym
Parent:
ee96aed
jump to
| M | internal/tui/fetcher.go |
| M | internal/tui/tui.go |
M
internal/tui/fetcher.go
@@ -20,6 +20,20 @@ return fetchedArticles(articles)
} } +type triggerSync struct{} + +func (m *Model) triggerSync() tea.Cmd { + return func() tea.Msg { return m.startSync() } +} + +type finishedSync struct{} + +func (m *Model) startSync() tea.Cmd { + return func() tea.Msg { + return "" + } +} + func (m *Model) setupTableWithArticles() { // clean up previous state m.table.SetRows([]table.Row{})
M
internal/tui/tui.go
@@ -23,17 +23,18 @@ ReadingView
) type Model struct { - ctx context.Context - + ctx context.Context state AppState isQutting bool + isSyncing bool showErr bool err error syncer Syncer store *store.Sqlite - articles []store.Article + articlesKind store.ArticleKind + articles []store.Article glamur *glamour.TermRenderer table table.Model // feeds, articles feed@@ -43,30 +44,33 @@
func NewModel( ctx context.Context, syncer Syncer, - store *store.Sqlite, + sqlite *store.Sqlite, ) *Model { tbl := table.New(table.WithFocused(true)) vp := viewport.New(0, 0) return &Model{ - ctx: ctx, - syncer: syncer, - store: store, - glamur: &glamour.TermRenderer{}, - table: tbl, - viewport: vp, - state: ArticlesView, - isQutting: false, - showErr: false, - err: nil, - articles: nil, + ctx: ctx, + syncer: syncer, + store: sqlite, + glamur: &glamour.TermRenderer{}, + table: tbl, + viewport: vp, + state: ArticlesView, + articlesKind: store.ArticleUnread, + isQutting: false, + showErr: false, + err: nil, + articles: nil, + isSyncing: false, } } func (m *Model) Init() tea.Cmd { return tea.Batch( tea.SetWindowTitle("smutok"), - m.fetchArticles(store.ArticleAll), + m.fetchArticles(m.articlesKind), + m.triggerSync(), ) }@@ -90,6 +94,14 @@ m.articles = msg
m.setupTableWithArticles() return m, nil + case triggerSync: + m.isSyncing = true + return m, m.triggerSync() + + case finishedSync: + m.isSyncing = false + return m, m.fetchArticles(m.articlesKind) + case tea.KeyMsg: // page specific keys switch m.state {@@ -104,6 +116,8 @@ switch msg.String() {
case "q": m.isQutting = true return m, tea.Quit + case "s": + return m, m.triggerSync() } } return m, cmd