Signed-off-by: oppiliappan me@oppi.li
+20
-31
appview/notify/merged_notifier.go
+20
-31
appview/notify/merged_notifier.go
···
2
2
3
3
import (
4
4
"context"
5
-
"log/slog"
6
-
"reflect"
7
5
"sync"
8
6
9
7
"github.com/bluesky-social/indigo/atproto/syntax"
10
8
"tangled.org/core/appview/models"
11
-
"tangled.org/core/log"
12
9
)
13
10
14
11
type mergedNotifier struct {
15
12
notifiers []Notifier
16
-
logger *slog.Logger
17
13
}
18
14
19
-
func NewMergedNotifier(notifiers []Notifier, logger *slog.Logger) Notifier {
20
-
return &mergedNotifier{notifiers, logger}
15
+
func NewMergedNotifier(notifiers []Notifier) Notifier {
16
+
return &mergedNotifier{notifiers}
21
17
}
22
18
23
19
var _ Notifier = &mergedNotifier{}
24
20
25
21
// fanout calls the same method on all notifiers concurrently
26
-
func (m *mergedNotifier) fanout(method string, ctx context.Context, args ...any) {
27
-
ctx = log.IntoContext(ctx, m.logger.With("method", method))
22
+
func (m *mergedNotifier) fanout(callback func(Notifier)) {
28
23
var wg sync.WaitGroup
29
24
for _, n := range m.notifiers {
30
25
wg.Add(1)
31
26
go func(notifier Notifier) {
32
27
defer wg.Done()
33
-
v := reflect.ValueOf(notifier).MethodByName(method)
34
-
in := make([]reflect.Value, len(args)+1)
35
-
in[0] = reflect.ValueOf(ctx)
36
-
for i, arg := range args {
37
-
in[i+1] = reflect.ValueOf(arg)
38
-
}
39
-
v.Call(in)
28
+
callback(n)
40
29
}(n)
41
30
}
42
31
}
43
32
44
33
func (m *mergedNotifier) NewRepo(ctx context.Context, repo *models.Repo) {
45
-
m.fanout("NewRepo", ctx, repo)
34
+
m.fanout(func(n Notifier) { n.NewRepo(ctx, repo) })
46
35
}
47
36
48
37
func (m *mergedNotifier) NewStar(ctx context.Context, star *models.Star) {
49
-
m.fanout("NewStar", ctx, star)
38
+
m.fanout(func(n Notifier) { n.NewStar(ctx, star) })
50
39
}
51
40
52
41
func (m *mergedNotifier) DeleteStar(ctx context.Context, star *models.Star) {
53
-
m.fanout("DeleteStar", ctx, star)
42
+
m.fanout(func(n Notifier) { n.DeleteStar(ctx, star) })
54
43
}
55
44
56
45
func (m *mergedNotifier) NewIssue(ctx context.Context, issue *models.Issue, mentions []syntax.DID) {
57
-
m.fanout("NewIssue", ctx, issue, mentions)
46
+
m.fanout(func(n Notifier) { n.NewIssue(ctx, issue, mentions) })
58
47
}
59
48
60
49
func (m *mergedNotifier) NewIssueComment(ctx context.Context, comment *models.IssueComment, mentions []syntax.DID) {
61
-
m.fanout("NewIssueComment", ctx, comment, mentions)
50
+
m.fanout(func(n Notifier) { n.NewIssueComment(ctx, comment, mentions) })
62
51
}
63
52
64
53
func (m *mergedNotifier) NewIssueState(ctx context.Context, actor syntax.DID, issue *models.Issue) {
65
-
m.fanout("NewIssueState", ctx, actor, issue)
54
+
m.fanout(func(n Notifier) { n.NewIssueState(ctx, actor, issue) })
66
55
}
67
56
68
57
func (m *mergedNotifier) DeleteIssue(ctx context.Context, issue *models.Issue) {
69
-
m.fanout("DeleteIssue", ctx, issue)
58
+
m.fanout(func(n Notifier) { n.DeleteIssue(ctx, issue) })
70
59
}
71
60
72
61
func (m *mergedNotifier) NewFollow(ctx context.Context, follow *models.Follow) {
73
-
m.fanout("NewFollow", ctx, follow)
62
+
m.fanout(func(n Notifier) { n.NewFollow(ctx, follow) })
74
63
}
75
64
76
65
func (m *mergedNotifier) DeleteFollow(ctx context.Context, follow *models.Follow) {
77
-
m.fanout("DeleteFollow", ctx, follow)
66
+
m.fanout(func(n Notifier) { n.DeleteFollow(ctx, follow) })
78
67
}
79
68
80
69
func (m *mergedNotifier) NewPull(ctx context.Context, pull *models.Pull) {
81
-
m.fanout("NewPull", ctx, pull)
70
+
m.fanout(func(n Notifier) { n.NewPull(ctx, pull) })
82
71
}
83
72
84
73
func (m *mergedNotifier) NewPullComment(ctx context.Context, comment *models.PullComment, mentions []syntax.DID) {
85
-
m.fanout("NewPullComment", ctx, comment, mentions)
74
+
m.fanout(func(n Notifier) { n.NewPullComment(ctx, comment, mentions) })
86
75
}
87
76
88
77
func (m *mergedNotifier) NewPullState(ctx context.Context, actor syntax.DID, pull *models.Pull) {
89
-
m.fanout("NewPullState", ctx, actor, pull)
78
+
m.fanout(func(n Notifier) { n.NewPullState(ctx, actor, pull) })
90
79
}
91
80
92
81
func (m *mergedNotifier) UpdateProfile(ctx context.Context, profile *models.Profile) {
93
-
m.fanout("UpdateProfile", ctx, profile)
82
+
m.fanout(func(n Notifier) { n.UpdateProfile(ctx, profile) })
94
83
}
95
84
96
85
func (m *mergedNotifier) NewString(ctx context.Context, s *models.String) {
97
-
m.fanout("NewString", ctx, s)
86
+
m.fanout(func(n Notifier) { n.NewString(ctx, s) })
98
87
}
99
88
100
89
func (m *mergedNotifier) EditString(ctx context.Context, s *models.String) {
101
-
m.fanout("EditString", ctx, s)
90
+
m.fanout(func(n Notifier) { n.EditString(ctx, s) })
102
91
}
103
92
104
93
func (m *mergedNotifier) DeleteString(ctx context.Context, did, rkey string) {
105
-
m.fanout("DeleteString", ctx, did, rkey)
94
+
m.fanout(func(n Notifier) { n.DeleteString(ctx, did, rkey) })
106
95
}
History
1 round
0 comments
oppi.li
submitted
#0
1 commit
expand
collapse
appview/notify: remove reflection usage in mergedNotifier
Signed-off-by: oppiliappan <me@oppi.li>
2/3 timeout, 1/3 success
expand
collapse
expand 0 comments
pull request successfully merged