aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--plugins/muc/hidden.lib.lua45
-rw-r--r--plugins/muc/muc.lib.lua40
2 files changed, 55 insertions, 30 deletions
diff --git a/plugins/muc/hidden.lib.lua b/plugins/muc/hidden.lib.lua
new file mode 100644
index 00000000..5ce43db8
--- /dev/null
+++ b/plugins/muc/hidden.lib.lua
@@ -0,0 +1,45 @@
+-- Prosody IM
+-- Copyright (C) 2008-2010 Matthew Wild
+-- Copyright (C) 2008-2010 Waqas Hussain
+-- Copyright (C) 2014 Daurnimator
+--
+-- This project is MIT/X11 licensed. Please see the
+-- COPYING file in the source package for more information.
+--
+
+local function get_hidden(room)
+ return room._data.hidden;
+end
+
+local function set_hidden(room, hidden)
+ hidden = hidden and true or nil;
+ if get_hidden(room) == hidden then return false; end
+ room._data.hidden = hidden;
+ if room.save then room:save(true); end
+ return true;
+end
+
+module:hook("muc-config-form", function(event)
+ table.insert(event.form, {
+ name = "muc#roomconfig_publicroom";
+ type = "boolean";
+ label = "Make Room Publicly Searchable?";
+ value = not get_hidden(event.room);
+ });
+end);
+
+module:hook("muc-config-submitted", function(event)
+ local new = event.fields["muc#roomconfig_publicroom"];
+ if new ~= nil and set_hidden(event.room, not new) then
+ event.status_codes["104"] = true;
+ end
+end);
+
+module:hook("muc-disco#info", function(event)
+ event.reply:tag("feature", {var = get_hidden(event.room) and "muc_hidden" or "muc_public"}):up();
+end);
+
+return {
+ get = get_hidden;
+ set = set_hidden;
+};
diff --git a/plugins/muc/muc.lib.lua b/plugins/muc/muc.lib.lua
index 26b2d335..fde6e17b 100644
--- a/plugins/muc/muc.lib.lua
+++ b/plugins/muc/muc.lib.lua
@@ -281,9 +281,6 @@ module:hook("muc-disco#info", function(event)
event.reply:tag("feature", {var = event.room:get_moderated() and "muc_moderated" or "muc_unmoderated"}):up();
end);
module:hook("muc-disco#info", function(event)
- event.reply:tag("feature", {var = event.room:get_hidden() and "muc_hidden" or "muc_public"}):up();
-end);
-module:hook("muc-disco#info", function(event)
local count = iterators.count(event.room:each_occupant());
table.insert(event.form, { name = "muc#roominfo_occupants", label = "Number of occupants", value = tostring(count) });
end);
@@ -324,22 +321,6 @@ end
function room_mt:get_moderated()
return self._data.moderated;
end
-function room_mt:set_hidden(hidden)
- hidden = hidden and true or nil;
- if self._data.hidden ~= hidden then
- self._data.hidden = hidden;
- if self.save then self:save(true); end
- end
-end
-function room_mt:get_hidden()
- return self._data.hidden;
-end
-function room_mt:get_public()
- return not self:get_hidden();
-end
-function room_mt:set_public(public)
- return self:set_hidden(not public);
-end
-- Give the room creator owner affiliation
module:hook("muc-room-pre-create", function(event)
@@ -623,14 +604,6 @@ function room_mt:get_form_layout(actor)
end
module:hook("muc-config-form", function(event)
table.insert(event.form, {
- name = 'muc#roomconfig_publicroom',
- type = 'boolean',
- label = 'Make Room Publicly Searchable?',
- value = not event.room:get_hidden()
- });
-end);
-module:hook("muc-config-form", function(event)
- table.insert(event.form, {
name = 'muc#roomconfig_moderatedroom',
type = 'boolean',
label = 'Make Room Moderated?',
@@ -681,9 +654,6 @@ end
module:hook("muc-config-submitted", function(event)
event.update_option("moderated", "muc#roomconfig_moderatedroom");
end);
-module:hook("muc-config-submitted", function(event)
- event.update_option("public", "muc#roomconfig_publicroom");
-end);
-- Removes everyone from the room
function room_mt:clear(x)
@@ -1127,6 +1097,16 @@ local description = module:require "muc/description";
room_mt.get_description = description.get;
room_mt.set_description = description.set;
+local hidden = module:require "muc/hidden";
+room_mt.get_hidden = hidden.get;
+room_mt.set_hidden = hidden.set;
+function room_mt:get_public()
+ return not self:get_hidden();
+end
+function room_mt:set_public(public)
+ return self:set_hidden(not public);
+end
+
local password = module:require "muc/password";
room_mt.get_password = password.get;
room_mt.set_password = password.set;