replay existing metadata to reattaching always-on clients

This commit is contained in:
Shivaram Lingamneni 2025-06-15 17:48:51 -04:00
parent b2ba43f0ae
commit 754d731ec3
2 changed files with 14 additions and 10 deletions

View file

@ -3226,16 +3226,7 @@ func metadataHandler(server *Server, client *Client, msg ircmsg.Message, rb *Res
} }
case "list": case "list":
values := targetObj.ListMetadata() playMetadataList(rb, client.Nick(), target, targetObj.ListMetadata())
batchId := rb.StartNestedBatch("metadata")
defer rb.EndNestedBatch(batchId)
for key, val := range values {
visibility := "*"
rb.Add(nil, server.name, RPL_KEYVALUE, client.Nick(), originalTarget, key, visibility, val)
}
case "clear": case "clear":
if !metadataCanIEditThisTarget(client, targetObj) { if !metadataCanIEditThisTarget(client, targetObj) {
@ -3306,6 +3297,16 @@ func metadataHandler(server *Server, client *Client, msg ircmsg.Message, rb *Res
return return
} }
func playMetadataList(rb *ResponseBuffer, nick, target string, values map[string]string) {
batchId := rb.StartNestedBatch("metadata")
defer rb.EndNestedBatch(batchId)
for key, val := range values {
visibility := "*"
rb.Add(nil, rb.session.client.server.name, RPL_KEYVALUE, nick, target, key, visibility, val)
}
}
// REHASH // REHASH
func rehashHandler(server *Server, client *Client, msg ircmsg.Message, rb *ResponseBuffer) bool { func rehashHandler(server *Server, client *Client, msg ircmsg.Message, rb *ResponseBuffer) bool {
nick := client.Nick() nick := client.Nick()

View file

@ -496,6 +496,9 @@ func (server *Server) playRegistrationBurst(session *Session) {
if !(rb.session.capabilities.Has(caps.ExtendedISupport) && rb.session.isupportSentPrereg) { if !(rb.session.capabilities.Has(caps.ExtendedISupport) && rb.session.isupportSentPrereg) {
server.RplISupport(c, rb) server.RplISupport(c, rb)
} }
if session.capabilities.Has(caps.Metadata) && c.AlwaysOn() {
playMetadataList(rb, d.nick, d.nick, c.ListMetadata())
}
if d.account != "" && session.capabilities.Has(caps.Persistence) { if d.account != "" && session.capabilities.Has(caps.Persistence) {
reportPersistenceStatus(c, rb, false) reportPersistenceStatus(c, rb, false)
} }