update
This commit is contained in:
parent
0d87346089
commit
32c5cae17a
2 changed files with 151 additions and 95 deletions
|
@ -1,8 +1,100 @@
|
|||
// package cmd
|
||||
package cmd
|
||||
|
||||
// import "github.com/charmbracelet/bubbles/list"
|
||||
import (
|
||||
"fmt"
|
||||
"slices"
|
||||
"time"
|
||||
|
||||
// type feedEntriesModel struct {
|
||||
// entries list.Model
|
||||
// selectedEntry
|
||||
// }
|
||||
"github.com/charmbracelet/bubbles/list"
|
||||
tea "github.com/charmbracelet/bubbletea"
|
||||
"github.com/simonhege/timeago"
|
||||
miniflux "miniflux.app/client"
|
||||
)
|
||||
|
||||
type feedEntry struct {
|
||||
Name string
|
||||
Feed string
|
||||
Link string
|
||||
PublishedAt time.Time
|
||||
}
|
||||
|
||||
func (fe feedEntry) Title() string { return fe.Name }
|
||||
func (fe feedEntry) Description() string {
|
||||
formattedTimeAgo := timeago.WithMax(timeago.English, time.Hour*7*24, timeago.English.DefaultLayout).Format(fe.PublishedAt)
|
||||
return fmt.Sprintf("%s - Published %s", fe.Feed, formattedTimeAgo)
|
||||
}
|
||||
func (fe feedEntry) FilterValue() string { return fmt.Sprintf("%s - %s", fe.Name, fe.Feed) }
|
||||
|
||||
type feedEntriesModel struct {
|
||||
minifluxClient *miniflux.Client
|
||||
entries list.Model
|
||||
selectedEntry *feedEntry
|
||||
}
|
||||
|
||||
type MsgFetchedEntries []feedEntry
|
||||
type MsgFetchedEntriesError error
|
||||
|
||||
func (m *feedEntriesModel) fetchEntries() tea.Msg {
|
||||
entriesResult, err := m.minifluxClient.CategoryEntries(4, nil)
|
||||
if err != nil {
|
||||
return MsgFetchedEntriesError(err)
|
||||
}
|
||||
|
||||
var feedEntries []feedEntry
|
||||
for _, e := range entriesResult.Entries {
|
||||
feedEntries = append(feedEntries, feedEntry{
|
||||
Name: e.Title,
|
||||
Feed: e.Feed.Title,
|
||||
Link: e.URL,
|
||||
PublishedAt: e.Date,
|
||||
})
|
||||
}
|
||||
slices.Reverse(feedEntries)
|
||||
|
||||
return MsgFetchedEntries(feedEntries)
|
||||
}
|
||||
|
||||
func (m *feedEntriesModel) Init() tea.Cmd {
|
||||
m.entries = list.New([]list.Item{feedEntry{}}, list.NewDefaultDelegate(), 100, 50)
|
||||
m.entries.Title = "Feed"
|
||||
return m.fetchEntries
|
||||
}
|
||||
|
||||
func (m *feedEntriesModel) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
|
||||
switch msg := msg.(type) {
|
||||
case tea.KeyMsg:
|
||||
switch msg.String() {
|
||||
case "enter":
|
||||
fnChangeView := func() tea.Msg { return MsgChangeView(ViewPlayer) }
|
||||
|
||||
fnGetSelected := func() tea.Msg {
|
||||
i, ok := m.entries.SelectedItem().(feedEntry)
|
||||
if ok {
|
||||
m.selectedEntry = &i
|
||||
}
|
||||
|
||||
return MsgSelectedItem(i)
|
||||
}
|
||||
|
||||
return m, tea.Sequence(fnChangeView, fnGetSelected)
|
||||
}
|
||||
break
|
||||
|
||||
case MsgFetchedEntries:
|
||||
var items []list.Item
|
||||
for _, e := range msg {
|
||||
items = append(items, e)
|
||||
}
|
||||
m.entries.SetItems(items)
|
||||
case MsgFetchedEntriesError:
|
||||
break
|
||||
}
|
||||
|
||||
var cmd tea.Cmd
|
||||
m.entries, cmd = m.entries.Update(msg)
|
||||
return m, cmd
|
||||
}
|
||||
|
||||
func (m *feedEntriesModel) View() string {
|
||||
return m.entries.View()
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue