its for when you want to get like notifications for your reposts

fix: remove actor data if no subscriber is using it

ptr.pet 76405e9f 931a7578

verified
Changed files
+13 -11
server
+13 -11
server/main.go
···
func unmarkActorForLikes(sid string, did syntax.DID) {
if ud, exists := actorData.Get(did); exists {
ud.targets.Del(sid)
+
// remove actor data if no subscribers are attached to it
+
if ud.targets.Len() == 0 {
+
actorData.Del(did)
+
}
}
}
···
logger.Error("like record not found", "rkey", rkey)
return nil
}
-
} else {
-
if err := json.Unmarshal(event.Commit.Record, &like); err != nil {
-
logger.Error("failed to unmarshal like", "error", err)
-
return nil
-
}
+
} else if err := unmarshalEvent(event, &like); err != nil {
+
return nil
}
// if there is no via it means its not a repost anyway
···
return true
}
-
if ud.profile == nil || time.Now().Sub(ud.profileFetchedAt) > time.Hour*24 {
+
if ud.profile == nil || time.Since(ud.profileFetchedAt) > time.Hour*24 {
profile, err := fetchProfile(ctx, byDid)
if err != nil {
logger.Error("cant fetch profile", "error", err)
···
byDid := syntax.DID(event.Did)
ud, exists := actorData.Get(byDid)
-
if !exists {
+
if !exists || ud.targets.Len() == 0 {
return nil
}
···
if f, exists := ud.follows.Get(rkey); exists {
r = f
} else {
-
logger.Error("follow record not found", "rkey", rkey)
+
// most likely no ListenTypeFollows subscriber attached on actor
+
logger.Warn("follow record not found", "rkey", rkey, "actor", byDid)
return nil
}
ud.follows.Del(rkey)
} else {
if err := unmarshalEvent(event, &r); err != nil {
-
logger.Error("could not unmarshal follow event", "error", err)
return nil
}
ud.follows.Insert(rkey, r)
}
+
ud.targets.Range(func(sid string, sd *SubscriberData) bool {
// if we arent managing then we dont need to update anything
if sd.listenType != ListenTypeFollows {
···
func unmarshalEvent[v any](event *models.Event, val *v) error {
if err := json.Unmarshal(event.Commit.Record, val); err != nil {
-
logger.Error("failed to unmarshal", "error", err, "raw", event.Commit.Record)
-
return nil
+
logger.Error("cant unmarshal record", "error", err, "raw", event.Commit.Record)
+
return err
}
return nil
}