Skip to content

Commit 6cef441

Browse files
committed
reinstate buddy arrivals at signon
1 parent 0189734 commit 6cef441

11 files changed

+145
-37
lines changed

foodgroup/buddy.go

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,7 @@ func (s BuddyService) AddBuddies(
7272
for _, entry := range inBody.Buddies {
7373
toNotify = append(toNotify, state.NewIdentScreenName(entry.ScreenName))
7474
}
75-
if err := s.buddyBroadcaster.BroadcastVisibility(ctx, sess, toNotify); err != nil {
75+
if err := s.buddyBroadcaster.BroadcastVisibility(ctx, sess, toNotify, true); err != nil {
7676
return fmt.Errorf("buddyBroadcaster.BroadcastVisibility: %w", err)
7777
}
7878

@@ -96,7 +96,7 @@ func (s BuddyService) DelBuddies(
9696
toNotify = append(toNotify, sn)
9797
}
9898

99-
if err := s.buddyBroadcaster.BroadcastVisibility(ctx, sess, toNotify); err != nil {
99+
if err := s.buddyBroadcaster.BroadcastVisibility(ctx, sess, toNotify, true); err != nil {
100100
return fmt.Errorf("buddyBroadcaster.BroadcastVisibility: %w", err)
101101
}
102102

@@ -207,9 +207,9 @@ func (s buddyNotifier) BroadcastBuddyDeparted(ctx context.Context, sess *state.S
207207
// - Sends arrival notifications to users that you block who have you on
208208
// their buddy lists.
209209
// - Sends you departure notifications for users on your buddy list that you
210-
// block.
210+
// block (if doSendDepartures is true).
211211
// - Sends departure notifications to users that you block who have you on
212-
// their buddy lists.
212+
// their buddy lists (if doSendDepartures is true).
213213
// - Don't send notifications for any user that blocks you.
214214
//
215215
// This method is called when your visibility settings change, ensuring that
@@ -218,6 +218,7 @@ func (s buddyNotifier) BroadcastVisibility(
218218
ctx context.Context,
219219
you *state.Session,
220220
filter []state.IdentScreenName,
221+
doSendDepartures bool,
221222
) error {
222223

223224
relationships, err := s.buddyListRetriever.AllRelationships(you.IdentScreenName(), filter)
@@ -258,7 +259,7 @@ func (s buddyNotifier) BroadcastVisibility(
258259
// tell you they're online
259260
s.unicastBuddyArrived(ctx, theirInfo, you.IdentScreenName())
260261
}
261-
} else {
262+
} else if relationship.YouBlock && doSendDepartures {
262263
if relationship.IsOnTheirList {
263264
// tell them you're offline
264265
s.unicastBuddyDeparted(ctx, you, theirSess.IdentScreenName())

foodgroup/buddy_test.go

Lines changed: 106 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -133,7 +133,7 @@ func TestBuddyService_AddBuddies(t *testing.T) {
133133
mockBuddyBroadcaster := newMockbuddyBroadcaster(t)
134134
for _, params := range tt.mockParams.broadcastVisibilityParams {
135135
mockBuddyBroadcaster.EXPECT().
136-
BroadcastVisibility(mock.Anything, matchSession(params.from), params.filter).
136+
BroadcastVisibility(mock.Anything, matchSession(params.from), params.filter, true).
137137
Return(params.err)
138138
}
139139

@@ -209,7 +209,7 @@ func TestBuddyService_DelBuddies(t *testing.T) {
209209
mockBuddyBroadcaster := newMockbuddyBroadcaster(t)
210210
for _, params := range tt.mockParams.broadcastVisibilityParams {
211211
mockBuddyBroadcaster.EXPECT().
212-
BroadcastVisibility(mock.Anything, matchSession(params.from), params.filter).
212+
BroadcastVisibility(mock.Anything, matchSession(params.from), params.filter, true).
213213
Return(params.err)
214214
}
215215
localBuddyListManager := newMockLocalBuddyListManager(t)
@@ -484,6 +484,8 @@ func Test_buddyNotifier_BroadcastVisibility(t *testing.T) {
484484
userSession *state.Session
485485
// filter limits specific users that can be notified
486486
filter []state.IdentScreenName
487+
// doSendDepartures indicates whether departure messages should be sent
488+
doSendDepartures bool
487489
// mockParams is the list of params sent to mocks that satisfy this
488490
// method's dependencies
489491
mockParams mockParams
@@ -641,6 +643,106 @@ func Test_buddyNotifier_BroadcastVisibility(t *testing.T) {
641643
},
642644
},
643645
},
646+
doSendDepartures: true,
647+
},
648+
{
649+
name: "don't send departure notifications",
650+
userSession: newTestSession("me"),
651+
mockParams: mockParams{
652+
buddyListRetrieverParams: buddyListRetrieverParams{
653+
allRelationshipsParams: allRelationshipsParams{
654+
{
655+
screenName: state.NewIdentScreenName("me"),
656+
filter: nil,
657+
result: []state.Relationship{
658+
{
659+
User: state.NewIdentScreenName("friend2-visible-on-their-list"),
660+
BlocksYou: false,
661+
YouBlock: false,
662+
IsOnYourList: false,
663+
IsOnTheirList: true,
664+
},
665+
{
666+
User: state.NewIdentScreenName("friend3-visible-on-your-list"),
667+
BlocksYou: false,
668+
YouBlock: false,
669+
IsOnYourList: true,
670+
IsOnTheirList: false,
671+
},
672+
{
673+
User: state.NewIdentScreenName("friend4-visible-on-both-lists"),
674+
BlocksYou: false,
675+
YouBlock: false,
676+
IsOnYourList: true,
677+
IsOnTheirList: true,
678+
},
679+
{
680+
User: state.NewIdentScreenName("friend7-visible-offline"),
681+
BlocksYou: false,
682+
YouBlock: false,
683+
IsOnYourList: true,
684+
IsOnTheirList: true,
685+
},
686+
},
687+
},
688+
},
689+
buddyIconRefByNameParams: buddyIconRefByNameParams{
690+
{
691+
screenName: state.NewIdentScreenName("me"),
692+
result: nil,
693+
},
694+
{
695+
screenName: state.NewIdentScreenName("friend3-visible-on-your-list"),
696+
result: nil,
697+
},
698+
{
699+
screenName: state.NewIdentScreenName("friend4-visible-on-both-lists"),
700+
result: nil,
701+
},
702+
},
703+
},
704+
messageRelayerParams: messageRelayerParams{
705+
relayToScreenNameParams: relayToScreenNameParams{
706+
{
707+
screenName: state.NewIdentScreenName("friend2-visible-on-their-list"),
708+
message: newBuddyArrivedNotif(newTestSession("me").TLVUserInfo()),
709+
},
710+
{
711+
screenName: state.NewIdentScreenName("me"),
712+
message: newBuddyArrivedNotif(newTestSession("friend3-visible-on-your-list").TLVUserInfo()),
713+
},
714+
{
715+
screenName: state.NewIdentScreenName("friend4-visible-on-both-lists"),
716+
message: newBuddyArrivedNotif(newTestSession("me").TLVUserInfo()),
717+
},
718+
{
719+
screenName: state.NewIdentScreenName("me"),
720+
message: newBuddyArrivedNotif(newTestSession("friend4-visible-on-both-lists").TLVUserInfo()),
721+
},
722+
},
723+
},
724+
sessionRetrieverParams: sessionRetrieverParams{
725+
retrieveSessionParams: retrieveSessionParams{
726+
{
727+
screenName: state.NewIdentScreenName("friend2-visible-on-their-list"),
728+
result: newTestSession("friend2-visible-on-their-list"),
729+
},
730+
{
731+
screenName: state.NewIdentScreenName("friend3-visible-on-your-list"),
732+
result: newTestSession("friend3-visible-on-your-list"),
733+
},
734+
{
735+
screenName: state.NewIdentScreenName("friend4-visible-on-both-lists"),
736+
result: newTestSession("friend4-visible-on-both-lists"),
737+
},
738+
{
739+
screenName: state.NewIdentScreenName("friend7-visible-offline"),
740+
result: nil,
741+
},
742+
},
743+
},
744+
},
745+
doSendDepartures: false,
644746
},
645747
{
646748
name: "users have buddy icons",
@@ -724,6 +826,7 @@ func Test_buddyNotifier_BroadcastVisibility(t *testing.T) {
724826
},
725827
},
726828
},
829+
doSendDepartures: true,
727830
},
728831
}
729832

@@ -758,7 +861,7 @@ func Test_buddyNotifier_BroadcastVisibility(t *testing.T) {
758861
sessionRetriever: sessionRetriever,
759862
}
760863

761-
err := svc.BroadcastVisibility(nil, tc.userSession, tc.filter)
864+
err := svc.BroadcastVisibility(nil, tc.userSession, tc.filter, tc.doSendDepartures)
762865
assert.NoError(t, err)
763866
})
764867
}

foodgroup/feedbag.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -212,7 +212,7 @@ func (s FeedbagService) UpsertItem(ctx context.Context, sess *state.Session, inF
212212
}
213213

214214
if alertAll || len(filter) > 0 {
215-
if err := s.buddyBroadcaster.BroadcastVisibility(ctx, sess, filter); err != nil {
215+
if err := s.buddyBroadcaster.BroadcastVisibility(ctx, sess, filter, true); err != nil {
216216
return wire.SNACMessage{}, err
217217
}
218218
}
@@ -306,7 +306,7 @@ func (s FeedbagService) DeleteItem(ctx context.Context, sess *state.Session, inF
306306
}
307307
}
308308

309-
if err := s.buddyBroadcaster.BroadcastVisibility(ctx, sess, filter); err != nil {
309+
if err := s.buddyBroadcaster.BroadcastVisibility(ctx, sess, filter, true); err != nil {
310310
return wire.SNACMessage{}, err
311311
}
312312

foodgroup/feedbag_test.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -907,7 +907,7 @@ func TestFeedbagService_UpsertItem(t *testing.T) {
907907
}
908908
for _, params := range tc.mockParams.broadcastVisibilityParams {
909909
buddyUpdateBroadcaster.EXPECT().
910-
BroadcastVisibility(mock.Anything, matchSession(params.from), params.filter).
910+
BroadcastVisibility(mock.Anything, matchSession(params.from), params.filter, true).
911911
Return(params.err)
912912
}
913913
svc := NewFeedbagService(slog.Default(), messageRelayer, feedbagManager, bartManager, nil, nil)
@@ -1016,7 +1016,7 @@ func TestFeedbagService_DeleteItem(t *testing.T) {
10161016
buddyUpdateBroadcast := newMockbuddyBroadcaster(t)
10171017
for _, params := range tc.mockParams.broadcastVisibilityParams {
10181018
buddyUpdateBroadcast.EXPECT().
1019-
BroadcastVisibility(mock.Anything, matchSession(params.from), params.filter).
1019+
BroadcastVisibility(mock.Anything, matchSession(params.from), params.filter, true).
10201020
Return(params.err)
10211021
}
10221022

foodgroup/mock_buddy_broadcaster_test.go

Lines changed: 12 additions & 11 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

foodgroup/oservice.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -849,7 +849,7 @@ func (s OServiceServiceForBOS) ServiceRequest(ctx context.Context, sess *state.S
849849
func (s OServiceServiceForBOS) ClientOnline(ctx context.Context, _ wire.SNAC_0x01_0x02_OServiceClientOnline, sess *state.Session) error {
850850
sess.SetSignonComplete()
851851

852-
if err := s.buddyBroadcaster.BroadcastBuddyArrived(ctx, sess); err != nil {
852+
if err := s.buddyBroadcaster.BroadcastVisibility(ctx, sess, nil, false); err != nil {
853853
return fmt.Errorf("unable to send buddy arrival notification: %w", err)
854854
}
855855

foodgroup/oservice_test.go

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1734,9 +1734,11 @@ func TestOServiceServiceForBOS_ClientOnline(t *testing.T) {
17341734
bodyIn: wire.SNAC_0x01_0x02_OServiceClientOnline{},
17351735
mockParams: mockParams{
17361736
buddyBroadcasterParams: buddyBroadcasterParams{
1737-
broadcastBuddyArrivedParams: broadcastBuddyArrivedParams{
1737+
broadcastVisibilityParams: broadcastVisibilityParams{
17381738
{
1739-
screenName: state.NewIdentScreenName("me"),
1739+
from: state.NewIdentScreenName("me"),
1740+
filter: nil,
1741+
doSendDepartures: false,
17401742
},
17411743
},
17421744
},
@@ -1747,9 +1749,9 @@ func TestOServiceServiceForBOS_ClientOnline(t *testing.T) {
17471749
for _, tt := range tests {
17481750
t.Run(tt.name, func(t *testing.T) {
17491751
buddyUpdateBroadcaster := newMockbuddyBroadcaster(t)
1750-
for _, params := range tt.mockParams.broadcastBuddyArrivedParams {
1752+
for _, params := range tt.mockParams.broadcastVisibilityParams {
17511753
buddyUpdateBroadcaster.EXPECT().
1752-
BroadcastBuddyArrived(mock.Anything, matchSession(params.screenName)).
1754+
BroadcastVisibility(mock.Anything, matchSession(params.from), params.filter, params.doSendDepartures).
17531755
Return(params.err)
17541756
}
17551757

foodgroup/permit_deny.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -166,7 +166,7 @@ func (s PermitDenyService) maybeBroadcastVisibility(ctx context.Context, sess *s
166166
filter = append(filter, state.NewIdentScreenName(user.ScreenName))
167167
}
168168
}
169-
return s.buddyBroadcaster.BroadcastVisibility(ctx, sess, filter)
169+
return s.buddyBroadcaster.BroadcastVisibility(ctx, sess, filter, true)
170170
}
171171

172172
// RightsQuery returns settings for the PermitDeny food group. It returns SNAC

foodgroup/permit_deny_test.go

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -210,7 +210,7 @@ func TestPermitDenyService_AddDenyListEntries(t *testing.T) {
210210
mockBuddyBroadcaster := newMockbuddyBroadcaster(t)
211211
for _, item := range tt.mockParams.broadcastVisibilityParams {
212212
mockBuddyBroadcaster.EXPECT().
213-
BroadcastVisibility(context.TODO(), matchSession(item.from), item.filter).
213+
BroadcastVisibility(context.TODO(), matchSession(item.from), item.filter, true).
214214
Return(item.err)
215215
}
216216

@@ -400,7 +400,7 @@ func TestPermitDenyService_AddPermListEntries(t *testing.T) {
400400
mockBuddyBroadcaster := newMockbuddyBroadcaster(t)
401401
for _, item := range tt.mockParams.broadcastVisibilityParams {
402402
mockBuddyBroadcaster.EXPECT().
403-
BroadcastVisibility(context.TODO(), matchSession(item.from), item.filter).
403+
BroadcastVisibility(context.TODO(), matchSession(item.from), item.filter, true).
404404
Return(item.err)
405405
}
406406

@@ -512,7 +512,7 @@ func TestPermitDenyService_DelDenyListEntries(t *testing.T) {
512512
mockBuddyBroadcaster := newMockbuddyBroadcaster(t)
513513
for _, item := range tt.mockParams.broadcastVisibilityParams {
514514
mockBuddyBroadcaster.EXPECT().
515-
BroadcastVisibility(context.TODO(), matchSession(item.from), item.filter).
515+
BroadcastVisibility(context.TODO(), matchSession(item.from), item.filter, true).
516516
Return(item.err)
517517
}
518518

@@ -624,7 +624,7 @@ func TestPermitDenyService_DelPermListEntries(t *testing.T) {
624624
mockBuddyBroadcaster := newMockbuddyBroadcaster(t)
625625
for _, item := range tt.mockParams.broadcastVisibilityParams {
626626
mockBuddyBroadcaster.EXPECT().
627-
BroadcastVisibility(context.TODO(), matchSession(item.from), item.filter).
627+
BroadcastVisibility(context.TODO(), matchSession(item.from), item.filter, true).
628628
Return(item.err)
629629
}
630630

foodgroup/test_helpers.go

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -638,9 +638,10 @@ type buddyBroadcasterParams struct {
638638
// broadcastVisibilityParams is the list of parameters passed at the mock
639639
// buddyBroadcaster.BroadcastVisibility call site
640640
type broadcastVisibilityParams []struct {
641-
from state.IdentScreenName
642-
filter []state.IdentScreenName
643-
err error
641+
from state.IdentScreenName
642+
filter []state.IdentScreenName
643+
doSendDepartures bool
644+
err error
644645
}
645646

646647
// broadcastBuddyArrivedParams is the list of parameters passed at the mock

foodgroup/types.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,7 @@ type BARTManager interface {
6060
type buddyBroadcaster interface {
6161
BroadcastBuddyArrived(ctx context.Context, sess *state.Session) error
6262
BroadcastBuddyDeparted(ctx context.Context, sess *state.Session) error
63-
BroadcastVisibility(ctx context.Context, from *state.Session, filter []state.IdentScreenName) error
63+
BroadcastVisibility(ctx context.Context, you *state.Session, filter []state.IdentScreenName, sendDepartures bool) error
6464
}
6565

6666
type BuddyListRetriever interface {

0 commit comments

Comments
 (0)