File

tools/migration/migrator/mtools.lua @ 10777:3695904d2854 0.11

mod_carbons: Fix handling of incoming MUC PMs #1540 27f5db07bec9 fixed this wrong. The code is supposed to check if the stanza is NOT sent to your bare JID. A MUC PM is always sent to your full JID. Hopefully nobody sends MUC invites to full JIDs, because those would be skipped by this as well.
author Kim Alvefur <zash@zash.se>
date Sun, 26 Apr 2020 20:39:39 +0200
parent 7881:4e3067272fae
line wrap: on
line source



local print = print;
local t_insert = table.insert;
local t_sort = table.sort;


local function sorted(params)

	local reader = params.reader; -- iterator to get items from
	local sorter = params.sorter; -- sorting function
	local filter = params.filter; -- filter function

	local cache = {};
	for item in reader do
		if filter then item = filter(item); end
		if item then t_insert(cache, item); end
	end
	if sorter then
		t_sort(cache, sorter);
	end
	local i = 0;
	return function()
		i = i + 1;
		return cache[i];
	end;

end

local function merged(reader, merger)

	local item1 = reader();
	local merged = { item1 };
	return function()
		while true do
			if not item1 then return nil; end
			local item2 = reader();
			if not item2 then item1 = nil; return merged; end
			if merger(item1, item2) then
			--print("merged")
				item1 = item2;
				t_insert(merged, item1);
			else
			--print("unmerged", merged)
				item1 = item2;
				local tmp = merged;
				merged = { item1 };
				return tmp;
			end
		end
	end;

end

return {
	sorted = sorted;
	merged = merged;
}