diff --git a/api/stream.go b/api/stream.go index ff12ef9..01e2ecd 100644 --- a/api/stream.go +++ b/api/stream.go @@ -81,7 +81,7 @@ func (s *Stream) RemoveReceiver(r *Receiver) { func (s *Stream) listen() { for e := range s.incoming { switch e.(type) { - case *mastodon.UpdateEvent, *mastodon.NotificationEvent, *mastodon.DeleteEvent, *mastodon.ErrorEvent: + case *mastodon.UpdateEvent, *mastodon.ConversationEvent, *mastodon.NotificationEvent, *mastodon.DeleteEvent, *mastodon.ErrorEvent: for _, r := range s.receivers { go func(rec *Receiver, e mastodon.Event) { rec.mux.Lock() @@ -139,7 +139,7 @@ func (ac *AccountClient) NewGenericStream(st StreamType, data string) (rec *Rece case FederatedStream: ch, err = ac.WSClient.StreamingWSPublic(context.Background(), false) case DirectStream: - ch, err = ac.Client.StreamingDirect(context.Background()) + ch, err = ac.WSClient.StreamingWSDirect(context.Background()) case TagStream: ch, err = ac.WSClient.StreamingWSHashtag(context.Background(), data, false) case ListStream: diff --git a/feed/feed.go b/feed/feed.go index a3a55f7..b83c7ad 100644 --- a/feed/feed.go +++ b/feed/feed.go @@ -694,6 +694,32 @@ func (f *Feed) startStream(rec *api.Receiver, timeline string, err error) { go func() { for e := range rec.Ch { switch t := e.(type) { + case *mastodon.ConversationEvent: + if t.Conversation.LastStatus == nil { + continue + } + s := api.NewStatusItem(t.Conversation.LastStatus, false) + f.itemsMux.Lock() + found := false + if len(f.streams) > 0 { + for _, item := range f.items { + switch v := item.Raw().(type) { + case *mastodon.Status: + if t.Conversation.LastStatus.ID == v.ID { + found = true + break + } + } + } + } + if !found { + f.items = append([]api.Item{s}, f.items...) + f.Updated(DesktopNotificationHolder{ + Type: DesktopNotificationMention, + }) + f.apiData.MinID = t.Conversation.LastStatus.ID + } + f.itemsMux.Unlock() case *mastodon.UpdateEvent: s := api.NewStatusItem(t.Status, false) f.itemsMux.Lock() diff --git a/go.mod b/go.mod index f7bff96..a4b5568 100644 --- a/go.mod +++ b/go.mod @@ -3,7 +3,7 @@ module github.com/RasmusLindroth/tut go 1.18 require ( - github.com/RasmusLindroth/go-mastodon v0.0.17 + github.com/RasmusLindroth/go-mastodon v0.0.18 github.com/adrg/xdg v0.4.0 github.com/atotto/clipboard v0.1.4 github.com/gdamore/tcell/v2 v2.5.3 diff --git a/go.sum b/go.sum index 249a456..14f11f3 100644 --- a/go.sum +++ b/go.sum @@ -1,5 +1,5 @@ -github.com/RasmusLindroth/go-mastodon v0.0.17 h1:PUR4YS9ORe62ZSabvZVwxROZvrcMuNVC/8Y/D/d6dFQ= -github.com/RasmusLindroth/go-mastodon v0.0.17/go.mod h1:Lr6n8V1U2b+9P89YZKsICkNc+oNeJXkygY7raei9SXE= +github.com/RasmusLindroth/go-mastodon v0.0.18 h1:E39YbpjNES4ZbVzEHWyOeewgXq/k2yHt7JCiVCxqXbY= +github.com/RasmusLindroth/go-mastodon v0.0.18/go.mod h1:Lr6n8V1U2b+9P89YZKsICkNc+oNeJXkygY7raei9SXE= github.com/adrg/xdg v0.4.0 h1:RzRqFcjH4nE5C6oTAxhBtoE2IRyjBSa62SCbyPidvls= github.com/adrg/xdg v0.4.0/go.mod h1:N6ag73EX4wyxeaoeHctc1mas01KZgsj5tYiAIwqJE/E= github.com/atotto/clipboard v0.1.4 h1:EH0zSVneZPSuFR11BlR9YppQTVDbh5+16AmcJi4g1z4= @@ -40,8 +40,6 @@ github.com/pelletier/go-toml/v2 v2.0.6 h1:nrzqCb7j9cDFj2coyLNLaZuJTLjWjlaz6nvTvI github.com/pelletier/go-toml/v2 v2.0.6/go.mod h1:eumQOmlWiOPt5WriQQqoM5y18pDHwha2N+QD+EUNTek= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= -github.com/rivo/tview v0.0.0-20221217182043-ccce554c3803 h1:gaknGRzW4g4I+5sGu4X81BZbROJ0j96ap9xnEbcZhXA= -github.com/rivo/tview v0.0.0-20221217182043-ccce554c3803/go.mod h1:YX2wUZOcJGOIycErz2s9KvDaP0jnWwRCirQMPLPpQ+Y= github.com/rivo/tview v0.0.0-20221221172820-02e38ea9604c h1:Y4GSXEYKYAtguH10lmQmYb7hRkJ7U+m8GvnFHKU2jrk= github.com/rivo/tview v0.0.0-20221221172820-02e38ea9604c/go.mod h1:lBUy/T5kyMudFzWUH/C2moN+NlU5qF505vzOyINXuUQ= github.com/rivo/uniseg v0.2.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc= @@ -61,8 +59,6 @@ github.com/tadvi/systray v0.0.0-20190226123456-11a2b8fa57af h1:6yITBqGTE2lEeTPG0 github.com/tadvi/systray v0.0.0-20190226123456-11a2b8fa57af/go.mod h1:4F09kP5F+am0jAwlQLddpoMDM+iewkxxt6nxUQ5nq5o= 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/exp v0.0.0-20221217163422-3c43f8badb15 h1:5oN1Pz/eDhCpbMbLstvIPa0b/BEQo6g6nwV3pLjfM6w= -golang.org/x/exp v0.0.0-20221217163422-3c43f8badb15/go.mod h1:CxIveKay+FTh1D0yPZemJVgC/95VzuuOLq5Qi4xnoYc= golang.org/x/exp v0.0.0-20221227203929-1b447090c38c h1:Govq2W3bnHJimHT2ium65kXcI7ZzTniZHcFATnLJM0Q= golang.org/x/exp v0.0.0-20221227203929-1b447090c38c/go.mod h1:CxIveKay+FTh1D0yPZemJVgC/95VzuuOLq5Qi4xnoYc= golang.org/x/net v0.4.0 h1:Q5QPcMlvfxFTAPV0+07Xz/MpK9NTXu2VDUuy0FeMfaU=