aboutsummaryrefslogtreecommitdiffstats
path: root/plugins/muc
diff options
context:
space:
mode:
Diffstat (limited to 'plugins/muc')
-rw-r--r--plugins/muc/mod_muc.lua8
-rw-r--r--plugins/muc/muc.lib.lua29
-rw-r--r--plugins/muc/persistent.lib.lua49
3 files changed, 58 insertions, 28 deletions
diff --git a/plugins/muc/mod_muc.lua b/plugins/muc/mod_muc.lua
index 6f6094b4..865e07b9 100644
--- a/plugins/muc/mod_muc.lua
+++ b/plugins/muc/mod_muc.lua
@@ -26,6 +26,7 @@ end
local muclib = module:require "muc";
local muc_new_room = muclib.new_room;
+local persistent = module:require "muc/persistent";
local jid_split = require "util.jid".split;
local jid_bare = require "util.jid".bare;
local st = require "util.stanza";
@@ -65,8 +66,9 @@ end
local function room_save(room, forced)
local node = jid_split(room.jid);
- persistent_rooms[room.jid] = room._data.persistent;
- if room._data.persistent then
+ local is_persistent = persistent.get(room);
+ persistent_rooms[room.jid] = is_persistent;
+ if is_persistent then
local history = room._data.history;
room._data.history = nil;
local data = {
@@ -138,7 +140,7 @@ end)
module:hook("muc-occupant-left",function(event)
local room = event.room
- if not next(room._occupants) and not persistent_rooms[room.jid] then -- empty, non-persistent room
+ if not next(room._occupants) and not persistent.get(room) then -- empty, non-persistent room
module:fire_event("muc-room-destroyed", { room = room });
end
end);
diff --git a/plugins/muc/muc.lib.lua b/plugins/muc/muc.lib.lua
index d03a32f3..87f3d69c 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_persistent() and "muc_persistent" or "muc_temporary"}):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)
@@ -349,16 +346,6 @@ end
function room_mt:get_moderated()
return self._data.moderated;
end
-function room_mt:set_persistent(persistent)
- persistent = persistent and true or nil;
- if self._data.persistent ~= persistent then
- self._data.persistent = persistent;
- if self.save then self:save(true); end
- end
-end
-function room_mt:get_persistent()
- return self._data.persistent;
-end
function room_mt:set_hidden(hidden)
hidden = hidden and true or nil;
if self._data.hidden ~= hidden then
@@ -673,14 +660,6 @@ function room_mt:get_form_layout(actor)
end
module:hook("muc-config-form", function(event)
table.insert(event.form, {
- name = 'muc#roomconfig_persistentroom',
- type = 'boolean',
- label = 'Make Room Persistent?',
- value = event.room:get_persistent()
- });
-end);
-module:hook("muc-config-form", function(event)
- table.insert(event.form, {
name = 'muc#roomconfig_publicroom',
type = 'boolean',
label = 'Make Room Publicly Searchable?',
@@ -745,9 +724,6 @@ function room_mt:process_form(origin, stanza)
return true;
end
module:hook("muc-config-submitted", function(event)
- event.update_option("persistent", "muc#roomconfig_persistentroom");
-end);
-module:hook("muc-config-submitted", function(event)
event.update_option("moderated", "muc#roomconfig_moderatedroom");
end);
module:hook("muc-config-submitted", function(event)
@@ -780,7 +756,6 @@ function room_mt:destroy(newjid, reason, password)
if password then x:tag("password"):text(password):up(); end
x:up();
self:clear(x);
- self:set_persistent(false);
module:fire_event("muc-room-destroyed", { room = self });
end
@@ -1220,6 +1195,10 @@ local members_only = module:require "muc/members_only";
room_mt.get_members_only = members_only.get;
room_mt.set_members_only = members_only.set;
+local persistent = module:require "muc/persistent";
+room_mt.get_persistent = persistent.get;
+room_mt.set_persistent = persistent.set;
+
local history = module:require "muc/history";
room_mt.send_history = history.send;
room_mt.get_historylength = history.get_length;
diff --git a/plugins/muc/persistent.lib.lua b/plugins/muc/persistent.lib.lua
new file mode 100644
index 00000000..ccf6fffe
--- /dev/null
+++ b/plugins/muc/persistent.lib.lua
@@ -0,0 +1,49 @@
+-- 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_persistent(room)
+ return room._data.persistent;
+end
+
+local function set_persistent(room, persistent)
+ persistent = persistent and true or nil;
+ if get_persistent(room) == persistent then return false; end
+ room._data.persistent = persistent;
+ 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_persistentroom";
+ type = "boolean";
+ label = "Make Room Persistent?";
+ value = get_persistent(event.room);
+ });
+end);
+
+module:hook("muc-config-submitted", function(event)
+ local new = event.fields["muc#roomconfig_persistentroom"];
+ if new ~= nil and set_persistent(event.room, new) then
+ event.status_codes["104"] = true;
+ end
+end);
+
+module:hook("muc-disco#info", function(event)
+ event.reply:tag("feature", {var = get_persistent(event.room) and "muc_persistent" or "muc_temporary"}):up();
+end);
+
+module:hook("muc-room-destroyed", function(event)
+ set_persistent(event.room, false);
+end);
+
+return {
+ get = get_persistent;
+ set = set_persistent;
+};