fix: empty value is valid

This commit is contained in:
Shivaram Lingamneni 2025-06-22 18:24:18 -04:00
parent c2a499187d
commit 9c4c337393
3 changed files with 7 additions and 7 deletions

View file

@ -828,7 +828,7 @@ func (client *Client) applyPreregMetadata(session *Session) {
target := client.Nick() target := client.Nick()
for k, v := range updates { for k, v := range updates {
broadcastMetadataUpdate(client.server, maps.Keys(friends), session, target, k, v) broadcastMetadataUpdate(client.server, maps.Keys(friends), session, target, k, v, true)
} }
} }

View file

@ -3195,11 +3195,11 @@ func metadataRegisteredHandler(client *Client, config *Config, subcommand string
// echo the value to the client whether or not there was a real update // echo the value to the client whether or not there was a real update
rb.Add(nil, server.name, RPL_KEYVALUE, client.Nick(), target, key, "*", value) rb.Add(nil, server.name, RPL_KEYVALUE, client.Nick(), target, key, "*", value)
if updated { if updated {
notifySubscribers(server, rb.session, targetObj, target, key, value) notifySubscribers(server, rb.session, targetObj, target, key, value, true)
} }
} else { } else {
if updated := targetObj.DeleteMetadata(key); updated { if updated := targetObj.DeleteMetadata(key); updated {
notifySubscribers(server, rb.session, targetObj, target, key, "") notifySubscribers(server, rb.session, targetObj, target, key, "", false)
} }
// acknowledge to the client whether or not there was a real update // acknowledge to the client whether or not there was a real update
rb.Add(nil, server.name, RPL_KEYNOTSET, client.Nick(), target, key, client.t("Key deleted")) rb.Add(nil, server.name, RPL_KEYNOTSET, client.Nick(), target, key, client.t("Key deleted"))

View file

@ -30,7 +30,7 @@ type MetadataHaver = interface {
CountMetadata() int CountMetadata() int
} }
func notifySubscribers(server *Server, session *Session, targetObj MetadataHaver, targetName, key, value string) { func notifySubscribers(server *Server, session *Session, targetObj MetadataHaver, targetName, key, value string, set bool) {
var recipientSessions iter.Seq[*Session] var recipientSessions iter.Seq[*Session]
switch target := targetObj.(type) { switch target := targetObj.(type) {
@ -48,17 +48,17 @@ func notifySubscribers(server *Server, session *Session, targetObj MetadataHaver
return // impossible return // impossible
} }
broadcastMetadataUpdate(server, recipientSessions, session, targetName, key, value) broadcastMetadataUpdate(server, recipientSessions, session, targetName, key, value, set)
} }
func broadcastMetadataUpdate(server *Server, sessions iter.Seq[*Session], originator *Session, target, key, value string) { func broadcastMetadataUpdate(server *Server, sessions iter.Seq[*Session], originator *Session, target, key, value string, set bool) {
for s := range sessions { for s := range sessions {
// don't notify the session that made the change // don't notify the session that made the change
if s == originator || !s.isSubscribedTo(key) { if s == originator || !s.isSubscribedTo(key) {
continue continue
} }
if value != "" { if set {
s.Send(nil, server.name, "METADATA", target, key, "*", value) s.Send(nil, server.name, "METADATA", target, key, "*", value)
} else { } else {
s.Send(nil, server.name, "METADATA", target, key, "*") s.Send(nil, server.name, "METADATA", target, key, "*")