all repos

smutok @ 64bec18

yet another tui rss reader (not abandoned, just paused development)
2 files changed, 44 insertions(+), 16 deletions(-)
feat(tui): trigger sync
Author: Oleksandr Smirnov olexsmir@gmail.com
Committed at: 2026-01-22 01:46:36 +0200
Change ID: llyvvwmnpvlnwpsowxrkrokpukmkqzym
Parent: ee96aed
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