From 9b7aaa3a3509d33c5fddd2a3ac805e023f8c11af Mon Sep 17 00:00:00 2001 From: Rasmus Lindroth Date: Sat, 4 Jun 2022 17:10:06 +0200 Subject: [PATCH] 1.0.11 (#152) * fix filters and add sticky * upgrade packages * update version * Input user on original user, not reblog * update example config * update readme --- README.md | 9 ++++- api/feed.go | 64 +++++++++++++++----------------- api/item.go | 68 ++++++++++++++++++++++++++++------ config.example.ini | 10 +++-- config/config.go | 50 ++++++++++++------------- config/default_config.go | 10 +++-- feed/feed.go | 78 ++++++++++++++++++++------------------- go.mod | 6 +-- go.sum | 12 +++--- images/preview2.png | Bin 0 -> 63126 bytes main.go | 2 +- ui/cliview.go | 2 +- ui/feed.go | 54 ++++++++++++++------------- ui/input.go | 4 +- ui/item.go | 11 +++++- ui/item_status.go | 18 +++++++++ 16 files changed, 240 insertions(+), 158 deletions(-) create mode 100644 images/preview2.png diff --git a/README.md b/README.md index 4e2c999..cb23631 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,9 @@ # Tut - a Mastodon TUI +[![Release](https://badgen.net/github/release/RasmusLindroth/tut)](https://github.com/RasmusLindroth/tut/releases) +[![web](https://badgen.net/badge/web/tut.anv.nu/f92672)](https://tut.anv.nu) +[![tut](https://badgen.net/badge/AUR/tut/08c)](https://aur.archlinux.org/packages/tut) +[![tut-bin](https://badgen.net/badge/AUR/tut-bin/08c)](https://aur.archlinux.org/packages/tut-bin) +[![@tut](https://badgen.net/mastodon/follow/tut@fosstodon.org)](https://fosstodon.org/@tut) A TUI for Mastodon with vim inspired keys. The program has most of the features you can find in the web client. @@ -8,6 +13,7 @@ Press `C` to create a new toot and `N` to focus on your notifications. You can find Linux binaries under [releases](https://github.com/RasmusLindroth/tut/releases). ![Preview](./images/preview.png "Preview") +![Preview 2](./images/preview2.png "Preview 2") ## Table of contents @@ -85,6 +91,7 @@ Head over to https://github.com/RasmusLindroth/tut/releases You can find it in the Arch User Repository (AUR). I'm the maintainer there. https://aur.archlinux.org/packages/tut/ +https://aur.archlinux.org/packages/tut-bin/ You can also use `tut-mastodon`. Currently `aur/tut` collides with a package named `tut` if you're running Manjaro ARM. So if you face the same problem you @@ -127,7 +134,7 @@ cd tut # Build or install -# Install (usally /home/user/go/bin) +# Install (usually /home/user/go/bin) go install # Build (same directory i.e. ./ ) diff --git a/api/feed.go b/api/feed.go index d8776dd..b28832e 100644 --- a/api/feed.go +++ b/api/feed.go @@ -15,10 +15,8 @@ func (ac *AccountClient) getStatusSimilar(fn func() ([]*mastodon.Status, error), return items, err } for _, s := range statuses { - item, filtered := NewStatusItem(s, ac.Filters, filter) - if !filtered { - items = append(items, item) - } + item := NewStatusItem(s, ac.Filters, filter, false) + items = append(items, item) } return items, nil } @@ -89,12 +87,10 @@ func (ac *AccountClient) GetNotifications(pg *mastodon.Pagination) ([]Item, erro for _, n := range notifications { for _, r := range rel { if n.Account.ID == r.ID { - item, filtered := NewNotificationItem(n, &User{ + item := NewNotificationItem(n, &User{ Data: &n.Account, Relation: r, }, ac.Filters) - if !filtered { - items = append(items, item) - } + items = append(items, item) break } } @@ -102,29 +98,20 @@ func (ac *AccountClient) GetNotifications(pg *mastodon.Pagination) ([]Item, erro return items, nil } -func (ac *AccountClient) GetThread(status *mastodon.Status) ([]Item, int, error) { +func (ac *AccountClient) GetThread(status *mastodon.Status) ([]Item, error) { var items []Item statuses, err := ac.Client.GetStatusContext(context.Background(), status.ID) if err != nil { - return items, 0, err + return items, err } for _, s := range statuses.Ancestors { - item, filtered := NewStatusItem(s, ac.Filters, "thread") - if !filtered { - items = append(items, item) - } - } - item, filtered := NewStatusItem(status, ac.Filters, "thread") - if !filtered { - items = append(items, item) + items = append(items, NewStatusItem(s, ac.Filters, "thread", false)) } + items = append(items, NewStatusItem(status, ac.Filters, "thread", false)) for _, s := range statuses.Descendants { - item, filtered := NewStatusItem(s, ac.Filters, "thread") - if !filtered { - items = append(items, item) - } + items = append(items, NewStatusItem(s, ac.Filters, "thread", false)) } - return items, len(statuses.Ancestors), nil + return items, nil } func (ac *AccountClient) GetFavorites(pg *mastodon.Pagination) ([]Item, error) { @@ -148,10 +135,8 @@ func (ac *AccountClient) GetConversations(pg *mastodon.Pagination) ([]Item, erro return items, err } for _, c := range conversations { - item, filtered := NewStatusItem(c.LastStatus, ac.Filters, "thread") - if !filtered { - items = append(items, item) - } + item := NewStatusItem(c.LastStatus, ac.Filters, "thread", false) + items = append(items, item) } return items, nil } @@ -240,10 +225,21 @@ func (ac *AccountClient) GetUser(pg *mastodon.Pagination, id mastodon.ID) ([]Ite return items, err } for _, s := range statuses { - item, filtered := NewStatusItem(s, ac.Filters, "account") - if !filtered { - items = append(items, item) - } + item := NewStatusItem(s, ac.Filters, "account", false) + items = append(items, item) + } + return items, nil +} + +func (ac *AccountClient) GetUserPinned(id mastodon.ID) ([]Item, error) { + var items []Item + statuses, err := ac.Client.GetAccountPinnedStatuses(context.Background(), id) + if err != nil { + return items, err + } + for _, s := range statuses { + item := NewStatusItem(s, ac.Filters, "account", true) + items = append(items, item) } return items, nil } @@ -267,10 +263,8 @@ func (ac *AccountClient) GetListStatuses(pg *mastodon.Pagination, id mastodon.ID return items, err } for _, s := range statuses { - item, filtered := NewStatusItem(s, ac.Filters, "home") - if !filtered { - items = append(items, item) - } + item := NewStatusItem(s, ac.Filters, "home", false) + items = append(items, item) } return items, nil } diff --git a/api/item.go b/api/item.go index ef53ea9..5360fc2 100644 --- a/api/item.go +++ b/api/item.go @@ -26,12 +26,19 @@ type Item interface { ShowSpoiler() bool Raw() interface{} URLs() ([]util.URL, []mastodon.Mention, []mastodon.Tag, int) + Filtered() (bool, string) + Pinned() bool } -func NewStatusItem(item *mastodon.Status, filters []*mastodon.Filter, timeline string) (sitem Item, filtered bool) { - filtered = false +type filtered struct { + inUse bool + name string +} + +func NewStatusItem(item *mastodon.Status, filters []*mastodon.Filter, timeline string, pinned bool) (sitem Item) { + filtered := filtered{inUse: false} if item == nil { - return &StatusItem{id: newID(), item: item, showSpoiler: false}, false + return &StatusItem{id: newID(), item: item, showSpoiler: false, filtered: filtered, pinned: pinned} } s := util.StatusOrReblog(item) content := s.Content @@ -67,30 +74,35 @@ func NewStatusItem(item *mastodon.Status, filters []*mastodon.Filter, timeline s filter := strings.Split(strings.ToLower(f.Phrase), " ") for i := 0; i+len(filter)-1 < len(stripped); i++ { if strings.ToLower(f.Phrase) == strings.Join(stripped[i:i+len(filter)], " ") { - filtered = true + filtered.inUse = true + filtered.name = f.Phrase break } } } else { if strings.Contains(s.Content, strings.ToLower(f.Phrase)) { - filtered = true + filtered.inUse = true + filtered.name = f.Phrase } if strings.Contains(s.SpoilerText, strings.ToLower(f.Phrase)) { - filtered = true + filtered.inUse = true + filtered.name = f.Phrase } } - if filtered { + if filtered.inUse { break } } - sitem = &StatusItem{id: newID(), item: item, showSpoiler: false} - return sitem, filtered + sitem = &StatusItem{id: newID(), item: item, showSpoiler: false, filtered: filtered, pinned: pinned} + return sitem } type StatusItem struct { id uint item *mastodon.Status showSpoiler bool + filtered filtered + pinned bool } func (s *StatusItem) ID() uint { @@ -141,6 +153,14 @@ func (s *StatusItem) URLs() ([]util.URL, []mastodon.Mention, []mastodon.Tag, int return realUrls, status.Mentions, status.Tags, length } +func (s *StatusItem) Filtered() (bool, string) { + return s.filtered.inUse, s.filtered.name +} + +func (s *StatusItem) Pinned() bool { + return s.pinned +} + func NewUserItem(item *User, profile bool) Item { return &UserItem{id: newID(), item: item, profile: profile} } @@ -185,8 +205,16 @@ func (u *UserItem) URLs() ([]util.URL, []mastodon.Mention, []mastodon.Tag, int) return urls, []mastodon.Mention{}, []mastodon.Tag{}, len(urls) } -func NewNotificationItem(item *mastodon.Notification, user *User, filters []*mastodon.Filter) (nitem Item, filtred bool) { - status, filtred := NewStatusItem(item.Status, filters, "notifications") +func (s *UserItem) Filtered() (bool, string) { + return false, "" +} + +func (u *UserItem) Pinned() bool { + return false +} + +func NewNotificationItem(item *mastodon.Notification, user *User, filters []*mastodon.Filter) (nitem Item) { + status := NewStatusItem(item.Status, filters, "notifications", false) nitem = &NotificationItem{ id: newID(), item: item, @@ -195,7 +223,7 @@ func NewNotificationItem(item *mastodon.Notification, user *User, filters []*mas status: status, } - return nitem, filtred + return nitem } type NotificationItem struct { @@ -240,6 +268,14 @@ func (n *NotificationItem) URLs() ([]util.URL, []mastodon.Mention, []mastodon.Ta return nil, nil, nil, 0 } +func (n *NotificationItem) Filtered() (bool, string) { + return false, "" +} + +func (n *NotificationItem) Pinned() bool { + return false +} + func NewListsItem(item *mastodon.List) Item { return &ListItem{id: newID(), item: item, showSpoiler: true} } @@ -272,3 +308,11 @@ func (s *ListItem) Raw() interface{} { func (s *ListItem) URLs() ([]util.URL, []mastodon.Mention, []mastodon.Tag, int) { return nil, nil, nil, 0 } + +func (s *ListItem) Filtered() (bool, string) { + return false, "" +} + +func (n *ListItem) Pinned() bool { + return false +} diff --git a/config.example.ini b/config.example.ini index ad5ef92..caa1fcb 100644 --- a/config.example.ini +++ b/config.example.ini @@ -107,6 +107,10 @@ show-icons=true # default=false short-hints=false +# If you want to display the filter that filtered a toot. +# default=true +show-filter-phrase=true + # If you want to show a message in the cmdbar on how to access the help text. # default=true show-help=true @@ -132,7 +136,7 @@ leader-key= leader-timeout=1000 # You set actions for the leader-key with one or more leader-action. It consists -# of two parts first the action then the shortcut. And they're seperated by a +# of two parts first the action then the shortcut. And they're separated by a # comma. # # Available commands: home, direct, local, federated, compose, blocking, @@ -314,7 +318,7 @@ posts=false # # You can also use xrdb colors like this xrdb:color1 The program will use colors # prefixed with an * first then look for URxvt or XTerm if it can't find any -# color prefixed with an asterik. If you don't want tut to guess the prefix you +# color prefixed with an asterisk. If you don't want tut to guess the prefix you # can set the prefix yourself. If the xrdb color can't be found a preset color # will be used. You'll have to set theme=none for this to work. @@ -326,7 +330,7 @@ xrdb-prefix=guess # available on the URL below. If a theme is named "nord.ini" you just write # theme=nord # -# https://github.com/RasmusLindroth/tut/tree/master/themes +# https://github.com/RasmusLindroth/tut/tree/master/config/themes # # If you want to use your own theme set theme to none then you can create your # own theme below diff --git a/config/config.go b/config/config.go index 006e39a..be46639 100644 --- a/config/config.go +++ b/config/config.go @@ -85,29 +85,29 @@ type Timeline struct { } type General struct { - Confirmation bool - DateTodayFormat string - DateFormat string - DateRelative int - MaxWidth int - StartTimeline feed.FeedType - NotificationFeed bool - QuoteReply bool - CharLimit int - ShortHints bool - ListPlacement ListPlacement - ListSplit ListSplit - HideNotificationText bool - ListProportion int - ContentProportion int - ShowIcons bool - ShowHelp bool - RedrawUI bool - LeaderKey rune - LeaderTimeout int64 - LeaderActions []LeaderAction - TimelineName bool - Timelines []Timeline + Confirmation bool + DateTodayFormat string + DateFormat string + DateRelative int + MaxWidth int + StartTimeline feed.FeedType + NotificationFeed bool + QuoteReply bool + CharLimit int + ShortHints bool + ShowFilterPhrase bool + ListPlacement ListPlacement + ListSplit ListSplit + ListProportion int + ContentProportion int + ShowIcons bool + ShowHelp bool + RedrawUI bool + LeaderKey rune + LeaderTimeout int64 + LeaderActions []LeaderAction + TimelineName bool + Timelines []Timeline } type Style struct { @@ -576,7 +576,7 @@ func parseGeneral(cfg *ini.File) General { general.CharLimit = cfg.Section("general").Key("char-limit").MustInt(500) general.MaxWidth = cfg.Section("general").Key("max-width").MustInt(0) general.ShortHints = cfg.Section("general").Key("short-hints").MustBool(false) - general.HideNotificationText = cfg.Section("general").Key("hide-notification-text").MustBool(false) + general.ShowFilterPhrase = cfg.Section("general").Key("show-filter-phrase").MustBool(true) general.ShowIcons = cfg.Section("general").Key("show-icons").MustBool(true) general.ShowHelp = cfg.Section("general").Key("show-help").MustBool(true) general.RedrawUI = cfg.Section("general").Key("redraw-ui").MustBool(true) @@ -630,7 +630,7 @@ func parseGeneral(cfg *ini.File) General { for _, l := range lactions { parts := strings.Split(l, ",") if len(parts) != 2 { - fmt.Printf("leader-action must consist of two parts seperated by a comma. Your value is: %s\n", strings.Join(parts, ",")) + fmt.Printf("leader-action must consist of two parts separated by a comma. Your value is: %s\n", strings.Join(parts, ",")) os.Exit(1) } for i, p := range parts { diff --git a/config/default_config.go b/config/default_config.go index e3c4336..644209d 100644 --- a/config/default_config.go +++ b/config/default_config.go @@ -109,6 +109,10 @@ show-icons=true # default=false short-hints=false +# If you want to display the filter that filtered a toot. +# default=true +show-filter-phrase=true + # If you want to show a message in the cmdbar on how to access the help text. # default=true show-help=true @@ -134,7 +138,7 @@ leader-key= leader-timeout=1000 # You set actions for the leader-key with one or more leader-action. It consists -# of two parts first the action then the shortcut. And they're seperated by a +# of two parts first the action then the shortcut. And they're separated by a # comma. # # Available commands: home, direct, local, federated, compose, blocking, @@ -316,7 +320,7 @@ posts=false # # You can also use xrdb colors like this xrdb:color1 The program will use colors # prefixed with an * first then look for URxvt or XTerm if it can't find any -# color prefixed with an asterik. If you don't want tut to guess the prefix you +# color prefixed with an asterisk. If you don't want tut to guess the prefix you # can set the prefix yourself. If the xrdb color can't be found a preset color # will be used. You'll have to set theme=none for this to work. @@ -328,7 +332,7 @@ xrdb-prefix=guess # available on the URL below. If a theme is named "nord.ini" you just write # theme=nord # -# https://github.com/RasmusLindroth/tut/tree/master/themes +# https://github.com/RasmusLindroth/tut/tree/master/config/themes # # If you want to use your own theme set theme to none then you can create your # own theme below diff --git a/feed/feed.go b/feed/feed.go index e25329a..d2a7669 100644 --- a/feed/feed.go +++ b/feed/feed.go @@ -16,7 +16,7 @@ type apiEmptyFunc func() ([]api.Item, error) type apiIDFunc func(pg *mastodon.Pagination, id mastodon.ID) ([]api.Item, error) type apiSearchFunc func(search string) ([]api.Item, error) type apiSearchPGFunc func(pg *mastodon.Pagination, search string) ([]api.Item, error) -type apiThreadFunc func(status *mastodon.Status) ([]api.Item, int, error) +type apiThreadFunc func(status *mastodon.Status) ([]api.Item, error) type FeedType uint @@ -64,6 +64,7 @@ const ( type Feed struct { accountClient *api.AccountClient feedType FeedType + sticky []api.Item items []api.Item itemsMux sync.RWMutex loadingNewer *LoadingLock @@ -85,7 +86,8 @@ func (f *Feed) Type() FeedType { func (f *Feed) List() []api.Item { f.itemsMux.RLock() defer f.itemsMux.RUnlock() - return f.items + r := f.sticky + return append(r, f.items...) } func (f *Feed) Delete(id uint) { @@ -167,6 +169,10 @@ func (f *Feed) Name() string { return f.name } +func (f *Feed) StickyCount() int { + return len(f.sticky) +} + func (f *Feed) singleNewerSearch(fn apiSearchFunc, search string) { items, err := fn(search) if err != nil { @@ -181,7 +187,7 @@ func (f *Feed) singleNewerSearch(fn apiSearchFunc, search string) { } func (f *Feed) singleThread(fn apiThreadFunc, status *mastodon.Status) { - items, _, err := fn(status) + items, err := fn(status) if err != nil { return } @@ -322,12 +328,7 @@ func (f *Feed) normalNewerUser(fn apiIDFunc, id mastodon.ID) { if len(items) > 0 { item := items[0].Raw().(*mastodon.Status) f.apiData.MinID = item.ID - newItems := []api.Item{f.items[0]} - newItems = append(newItems, items...) - if len(f.items) > 1 { - newItems = append(newItems, f.items[1:]...) - } - f.items = newItems + f.items = append(items, f.items...) f.Updated(DekstopNotificationNone) if f.apiData.MaxID == mastodon.ID("") { item = items[len(items)-1].Raw().(*mastodon.Status) @@ -538,13 +539,11 @@ func (f *Feed) startStream(rec *api.Receiver, timeline string, err error) { for e := range f.stream.Ch { switch t := e.(type) { case *mastodon.UpdateEvent: - s, filtered := api.NewStatusItem(t.Status, f.accountClient.Filters, timeline) - if !filtered { - f.itemsMux.Lock() - f.items = append([]api.Item{s}, f.items...) - f.Updated(DesktopNotificationPost) - f.itemsMux.Unlock() - } + s := api.NewStatusItem(t.Status, f.accountClient.Filters, timeline, false) + f.itemsMux.Lock() + f.items = append([]api.Item{s}, f.items...) + f.Updated(DesktopNotificationPost) + f.itemsMux.Unlock() } } }() @@ -567,32 +566,30 @@ func (f *Feed) startStreamNotification(rec *api.Receiver, timeline string, err e log.Fatalln(t.Notification.Account.Acct) continue } - s, filtered := api.NewNotificationItem(t.Notification, + s := api.NewNotificationItem(t.Notification, &api.User{ Data: &t.Notification.Account, Relation: rel[0], }, f.accountClient.Filters) - if !filtered { - f.itemsMux.Lock() - f.items = append([]api.Item{s}, f.items...) - nft := DekstopNotificationNone - switch t.Notification.Type { - case "follow", "follow_request": - nft = DesktopNotificationFollower - case "favourite": - nft = DesktopNotificationFollower - case "reblog": - nft = DesktopNotificationBoost - case "mention": - nft = DesktopNotificationMention - case "status": - nft = DesktopNotificationPost - case "poll": - nft = DesktopNotificationPoll - } - f.Updated(nft) - f.itemsMux.Unlock() + f.itemsMux.Lock() + f.items = append([]api.Item{s}, f.items...) + nft := DekstopNotificationNone + switch t.Notification.Type { + case "follow", "follow_request": + nft = DesktopNotificationFollower + case "favourite": + nft = DesktopNotificationFollower + case "reblog": + nft = DesktopNotificationBoost + case "mention": + nft = DesktopNotificationMention + case "status": + nft = DesktopNotificationPost + case "poll": + nft = DesktopNotificationPoll } + f.Updated(nft) + f.itemsMux.Unlock() } } }() @@ -601,6 +598,7 @@ func (f *Feed) startStreamNotification(rec *api.Receiver, timeline string, err e func newFeed(ac *api.AccountClient, ft FeedType) *Feed { return &Feed{ accountClient: ac, + sticky: make([]api.Item, 0), items: make([]api.Item, 0), feedType: ft, loadNewer: func() {}, @@ -689,7 +687,11 @@ func NewUserSearch(ac *api.AccountClient, search string) *Feed { func NewUserProfile(ac *api.AccountClient, user *api.User) *Feed { feed := newFeed(ac, User) feed.name = user.Data.Acct - feed.items = append(feed.items, api.NewUserItem(user, true)) + feed.sticky = append(feed.sticky, api.NewUserItem(user, true)) + pinned, err := ac.GetUserPinned(user.Data.ID) + if err == nil { + feed.sticky = append(feed.sticky, pinned...) + } feed.loadNewer = func() { feed.normalNewerUser(feed.accountClient.GetUser, user.Data.ID) } feed.loadOlder = func() { feed.normalOlderUser(feed.accountClient.GetUser, user.Data.ID) } diff --git a/go.mod b/go.mod index 9fd2715..6995410 100644 --- a/go.mod +++ b/go.mod @@ -3,7 +3,7 @@ module github.com/RasmusLindroth/tut go 1.17 require ( - github.com/RasmusLindroth/go-mastodon v0.0.7 + github.com/RasmusLindroth/go-mastodon v0.0.8 github.com/atotto/clipboard v0.1.4 github.com/gdamore/tcell/v2 v2.5.1 github.com/gen2brain/beeep v0.0.0-20220518085355-d7852edf42fc @@ -13,8 +13,8 @@ require ( github.com/pelletier/go-toml/v2 v2.0.1 github.com/rivo/tview v0.0.0-20220307222120-9994674d60a8 github.com/rivo/uniseg v0.2.0 - golang.org/x/net v0.0.0-20220526153639-5463443f8c37 - gopkg.in/ini.v1 v1.66.4 + golang.org/x/net v0.0.0-20220531201128-c960675eff93 + gopkg.in/ini.v1 v1.66.6 ) require ( diff --git a/go.sum b/go.sum index 73d11cf..3e6acc1 100644 --- a/go.sum +++ b/go.sum @@ -1,5 +1,5 @@ -github.com/RasmusLindroth/go-mastodon v0.0.7 h1:iGgkkvDrPHTiAyACUehLH5zragSHCUSbhcYdQEBIn48= -github.com/RasmusLindroth/go-mastodon v0.0.7/go.mod h1:4L0oyiNwq1tUoiByczzhSikxR9RiANzELtZgexxKpPM= +github.com/RasmusLindroth/go-mastodon v0.0.8 h1:t2rrbdNgS4h0JhmPNsmUOQBByDxmUPawnERGn6oR2eA= +github.com/RasmusLindroth/go-mastodon v0.0.8/go.mod h1:4L0oyiNwq1tUoiByczzhSikxR9RiANzELtZgexxKpPM= github.com/atotto/clipboard v0.1.4 h1:EH0zSVneZPSuFR11BlR9YppQTVDbh5+16AmcJi4g1z4= github.com/atotto/clipboard v0.1.4/go.mod h1:ZY9tmq7sm5xIbd9bOK4onWV4S6X0u6GY7Vn0Yu86PYI= github.com/aymerick/douceur v0.2.0 h1:Mv+mAeH1Q+n9Fr+oyamOlAkUNPWPlA8PPGR0QAaYuPk= @@ -49,8 +49,8 @@ github.com/tadvi/systray v0.0.0-20190226123456-11a2b8fa57af/go.mod h1:4F09kP5F+a github.com/tomnomnom/linkheader v0.0.0-20180905144013-02ca5825eb80 h1:nrZ3ySNYwJbSpD6ce9duiP+QkD3JuLCcWkdaehUS/3Y= github.com/tomnomnom/linkheader v0.0.0-20180905144013-02ca5825eb80/go.mod h1:iFyPdL66DjUD96XmzVL3ZntbzcflLnznH0fr99w5VqE= golang.org/x/net v0.0.0-20210614182718-04defd469f4e/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= -golang.org/x/net v0.0.0-20220526153639-5463443f8c37 h1:lUkvobShwKsOesNfWWlCS5q7fnbG1MEliIzwu886fn8= -golang.org/x/net v0.0.0-20220526153639-5463443f8c37/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= +golang.org/x/net v0.0.0-20220531201128-c960675eff93 h1:MYimHLfoXEpOhqd/zgoA/uoXzHB86AEky4LAx5ij9xA= +golang.org/x/net v0.0.0-20220531201128-c960675eff93/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210309074719-68d13333faf2/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -71,7 +71,7 @@ golang.org/x/text v0.3.7 h1:olpwvP2KacW1ZWvsR7uQhoyTYvKAupfQrRGBFM352Gk= golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/ini.v1 v1.66.4 h1:SsAcf+mM7mRZo2nJNGt8mZCjG8ZRaNGMURJw7BsIST4= -gopkg.in/ini.v1 v1.66.4/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= +gopkg.in/ini.v1 v1.66.6 h1:LATuAqN/shcYAOkv3wl2L4rkaKqkcgTBQjOyYDvcPKI= +gopkg.in/ini.v1 v1.66.6/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c h1:dUUwHk2QECo/6vqA44rthZ8ie2QXMNeKRTHCNY2nXvo= gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= diff --git a/images/preview2.png b/images/preview2.png new file mode 100644 index 0000000000000000000000000000000000000000..f43373e0b5c16d4537e14643722e4c43ef311987 GIT binary patch literal 63126 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ΜYQh{AWC6$tj$`Tq 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 UThQ7M9Ww% 0 { symbol = " ⤶ " } + if item.Pinned() { + symbol = " ! " + } + acc := strings.TrimSpace(s.Account.Acct) + if s.Reblog != nil && cfg.General.ShowIcons { + acc = fmt.Sprintf("♺ %s", acc) + } d := OutputDate(cfg, s.CreatedAt.Local()) - return fmt.Sprintf("%s %s", d, strings.TrimSpace(s.Account.Acct)), symbol + return fmt.Sprintf("%s %s", d, acc), symbol case api.UserType: a := item.Raw().(*api.User) return strings.TrimSpace(a.Data.Acct), "" diff --git a/ui/item_status.go b/ui/item_status.go index c6b9f31..b1a752d 100644 --- a/ui/item_status.go +++ b/ui/item_status.go @@ -71,6 +71,24 @@ type DisplayTootData struct { } func drawStatus(tut *Tut, item api.Item, status *mastodon.Status, main *tview.TextView, controls *tview.TextView, additional string) { + filtered, phrase := item.Filtered() + if filtered { + var output string + if tut.Config.General.ShowFilterPhrase { + output = fmt.Sprintf("Filtered by phrase: %s", tview.Escape(phrase)) + } else { + output = "Filtered." + } + if main != nil { + if additional != "" { + additional = fmt.Sprintf("%s\n\n", config.SublteText(tut.Config, additional)) + } + main.SetText(additional + output) + } + controls.SetText("") + return + } + showSensitive := item.ShowSpoiler() var strippedContent string