1343 end |
1343 end |
1344 return frozen, state; |
1344 return frozen, state; |
1345 end |
1345 end |
1346 |
1346 |
1347 function _M.restore_room(frozen, state) |
1347 function _M.restore_room(frozen, state) |
1348 -- COMPAT |
1348 local room_jid = frozen._jid or frozen.jid; |
1349 if frozen.jid and frozen._affiliations then |
|
1350 local room = _M.new_room(frozen.jid, frozen._data); |
|
1351 room._affiliations = frozen._affiliations; |
|
1352 return room; |
|
1353 end |
|
1354 |
|
1355 local room_jid = frozen._jid; |
|
1356 local room = _M.new_room(room_jid, frozen._data); |
1349 local room = _M.new_room(room_jid, frozen._data); |
1357 |
1350 |
1358 if state and state._last_message and state._last_message_at then |
1351 if state and state._last_message and state._last_message_at then |
1359 room._history = { |
1352 room._history = { |
1360 { stanza = st.deserialize(state._last_message), |
1353 { stanza = st.deserialize(state._last_message), |
1363 end |
1356 end |
1364 |
1357 |
1365 local occupants = {}; |
1358 local occupants = {}; |
1366 local occupant_sessions = {}; |
1359 local occupant_sessions = {}; |
1367 local room_name, room_host = jid_split(room_jid); |
1360 local room_name, room_host = jid_split(room_jid); |
1368 for jid, data in pairs(frozen) do |
1361 |
1369 local node, host, resource = jid_split(jid); |
1362 if frozen.jid and frozen._affiliations then |
1370 if host:sub(1,1) ~= "_" and not resource and type(data) == "string" then |
1363 room._affiliations = frozen._affiliations; |
1371 -- bare jid: affiliation |
1364 else |
1372 room._affiliations[jid] = data; |
1365 for jid, data in pairs(frozen) do |
|
1366 local node, host, resource = jid_split(jid); |
|
1367 if host:sub(1,1) ~= "_" and not resource and type(data) == "string" then |
|
1368 -- bare jid: affiliation |
|
1369 room._affiliations[jid] = data; |
|
1370 end |
1373 end |
1371 end |
1374 end |
1372 end |
1375 for jid, data in pairs(state or frozen) do |
1373 for jid, data in pairs(state or frozen) do |
1376 local node, host, resource = jid_split(jid); |
1374 local node, host, resource = jid_split(jid); |
1377 if node or host:sub(1,1) ~= "_" then |
1375 if node or host:sub(1,1) ~= "_" then |