# HG changeset patch # User Kim Alvefur # Date 1598719873 -7200 # Node ID 13eee48071c8c8b798736bf1e7718dbacc68d3a5 # Parent 0b0a425424568b8e32a88d4be10ff332314610a2 MUC: Don't default room name to JID localpart (API breaking change) Behavior with turning empty name into localpart was originally introduced in 711eb5bf94b4 This has caused some problems for clients, making it difficult to differentiate between a room actually named like the localpart from a room without a name. Breaking: The function signature of the :get_name() method changes from always returning a string to optional string. diff -r 0b0a42542456 -r 13eee48071c8 plugins/muc/mod_muc.lua --- a/plugins/muc/mod_muc.lua Fri Aug 28 18:44:02 2020 +0200 +++ b/plugins/muc/mod_muc.lua Sat Aug 29 18:51:13 2020 +0200 @@ -137,7 +137,12 @@ local function room_save(room, forced, savestate) local node = jid_split(room.jid); local is_persistent = persistent.get(room); - room_items_cache[room.jid] = room:get_public() and room:get_name() or nil; + if room:get_public() then + room_items_cache[room.jid] = room:get_name() or ""; + else + room_items_cache[room.jid] = nil; + end + if is_persistent or savestate then persistent_rooms:set(nil, room.jid, true); local data, state = room:freeze(savestate); @@ -163,7 +168,11 @@ end module:log("debug", "Evicting room %s", jid); room_eviction(); - room_items_cache[room.jid] = room:get_public() and room:get_name() or nil; + if room:get_public() then + room_items_cache[room.jid] = room:get_name() or ""; + else + room_items_cache[room.jid] = nil; + end local ok, err = room_save(room, nil, true); -- Force to disk if not ok then module:log("error", "Failed to swap inactive room %s to disk: %s", jid, err); @@ -337,13 +346,14 @@ module:log("debug", "host-disco-items called"); if next(room_items_cache) ~= nil then for jid, room_name in pairs(room_items_cache) do + if room_name == "" then room_name = nil; end reply:tag("item", { jid = jid, name = room_name }):up(); end else for room in all_rooms() do if not room:get_hidden() then local jid, room_name = room.jid, room:get_name(); - room_items_cache[jid] = room_name; + room_items_cache[jid] = room_name or ""; reply:tag("item", { jid = jid, name = room_name }):up(); end end diff -r 0b0a42542456 -r 13eee48071c8 plugins/muc/name.lib.lua --- a/plugins/muc/name.lib.lua Fri Aug 28 18:44:02 2020 +0200 +++ b/plugins/muc/name.lib.lua Sat Aug 29 18:51:13 2020 +0200 @@ -7,10 +7,8 @@ -- COPYING file in the source package for more information. -- -local jid_split = require "util.jid".split; - local function get_name(room) - return room._data.name or jid_split(room.jid); + return room._data.name; end local function set_name(room, name)