plugins/mod_muc_mam.lua
changeset 12981 74b9e05af71e
parent 12865 57e86d537ffe
child 13217 50324f66ca2a
equal deleted inserted replaced
12980:a187600ec7d6 12981:74b9e05af71e
    14 local xmlns_forward = "urn:xmpp:forward:0";
    14 local xmlns_forward = "urn:xmpp:forward:0";
    15 local xmlns_st_id   = "urn:xmpp:sid:0";
    15 local xmlns_st_id   = "urn:xmpp:sid:0";
    16 local xmlns_muc_user = "http://jabber.org/protocol/muc#user";
    16 local xmlns_muc_user = "http://jabber.org/protocol/muc#user";
    17 local muc_form_enable = "muc#roomconfig_enablearchiving"
    17 local muc_form_enable = "muc#roomconfig_enablearchiving"
    18 
    18 
    19 local st = require "util.stanza";
    19 local st = require "prosody.util.stanza";
    20 local rsm = require "util.rsm";
    20 local rsm = require "prosody.util.rsm";
    21 local jid_bare = require "util.jid".bare;
    21 local jid_bare = require "prosody.util.jid".bare;
    22 local jid_split = require "util.jid".split;
    22 local jid_split = require "prosody.util.jid".split;
    23 local jid_prep = require "util.jid".prep;
    23 local jid_prep = require "prosody.util.jid".prep;
    24 local dataform = require "util.dataforms".new;
    24 local dataform = require "prosody.util.dataforms".new;
    25 local get_form_type = require "util.dataforms".get_type;
    25 local get_form_type = require "prosody.util.dataforms".get_type;
    26 
    26 
    27 local mod_muc = module:depends"muc";
    27 local mod_muc = module:depends"muc";
    28 local get_room_from_jid = mod_muc.get_room_from_jid;
    28 local get_room_from_jid = mod_muc.get_room_from_jid;
    29 
    29 
    30 local is_stanza = st.is_stanza;
    30 local is_stanza = st.is_stanza;
    31 local tostring = tostring;
    31 local tostring = tostring;
    32 local time_now = require "util.time".now;
    32 local time_now = require "prosody.util.time".now;
    33 local m_min = math.min;
    33 local m_min = math.min;
    34 local timestamp, datestamp = import("util.datetime", "datetime", "date");
    34 local timestamp, datestamp = import("prosody.util.datetime", "datetime", "date");
    35 local default_max_items, max_max_items = 20, module:get_option_number("max_archive_query_results", 50);
    35 local default_max_items, max_max_items = 20, module:get_option_number("max_archive_query_results", 50);
    36 
    36 
    37 local cleanup_after = module:get_option_string("muc_log_expires_after", "1w");
    37 local cleanup_after = module:get_option_string("muc_log_expires_after", "1w");
    38 
    38 
    39 local default_history_length = 20;
    39 local default_history_length = 20;
   490 
   490 
   491 	-- For each day, store a set of rooms that have new messages. To expire
   491 	-- For each day, store a set of rooms that have new messages. To expire
   492 	-- messages, we collect the union of sets of rooms from dates that fall
   492 	-- messages, we collect the union of sets of rooms from dates that fall
   493 	-- outside the cleanup range.
   493 	-- outside the cleanup range.
   494 
   494 
   495 	local last_date = require "util.cache".new(module:get_option_number("muc_log_cleanup_date_cache_size", 1000));
   495 	local last_date = require "prosody.util.cache".new(module:get_option_number("muc_log_cleanup_date_cache_size", 1000));
   496 	if not ( archive.caps and archive.caps.wildcard_delete ) then
   496 	if not ( archive.caps and archive.caps.wildcard_delete ) then
   497 		function schedule_cleanup(roomname, date)
   497 		function schedule_cleanup(roomname, date)
   498 			date = date or datestamp();
   498 			date = date or datestamp();
   499 			if last_date:get(roomname) == date then return end
   499 			if last_date:get(roomname) == date then return end
   500 			local ok = cleanup_map:set(date, roomname, true);
   500 			local ok = cleanup_map:set(date, roomname, true);
   504 		end
   504 		end
   505 	end
   505 	end
   506 
   506 
   507 	local cleanup_time = module:measure("cleanup", "times");
   507 	local cleanup_time = module:measure("cleanup", "times");
   508 
   508 
   509 	local async = require "util.async";
   509 	local async = require "prosody.util.async";
   510 	module:daily("Remove expired messages", function ()
   510 	module:daily("Remove expired messages", function ()
   511 		local cleanup_done = cleanup_time();
   511 		local cleanup_done = cleanup_time();
   512 
   512 
   513 		if archive.caps and archive.caps.wildcard_delete then
   513 		if archive.caps and archive.caps.wildcard_delete then
   514 			local ok, err = archive:delete(true, { ["end"] = os.time() - cleanup_after })
   514 			local ok, err = archive:delete(true, { ["end"] = os.time() - cleanup_after })