Simplify sorting and make it more readable

This commit is contained in:
SX 2023-04-07 19:00:27 +03:00 committed by GitHub
parent da05b5d108
commit 5af1cf5bb0
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -43,59 +43,22 @@ function mail.get_message(playername, msg_id)
end end
end end
function mail.sort_messages(unsorted_messages, sortfield, sortdirection) function mail.sort_messages(messages, sortfield, sortdirection)
local messages = {} function sorter(field, dir)
if not sortfield or sortfield == "" then return dir == "2"
sortfield = "3" and (function(a, b) return a[field] > b[field] end)
end or (function(a, b) return a[field] < b[field] end)
if not sortdirection or sortdirection == "" then
sortdirection = "1"
end end
if sortfield == "1" then -- for inbox
if unsorted_messages[1] then table.sort(messages, sorter("from", sortdirection))
-- add first message elseif sortfield == "1" then -- for outbox
table.insert(messages, unsorted_messages[1]) table.sort(messages, sorter("to", sortdirection))
table.remove(unsorted_messages, 1) elseif sortfield == "2" then
-- sort messages table.sort(messages, sorter("subject", sortdirection))
for _, unsorted_msg in ipairs(unsorted_messages) do else -- default sorting, sortfield == "3"
local is_message_sorted = false table.sort(messages, sorter("time", sortdirection))
for j, sorted_msg in ipairs(messages) do
if sortfield == "1" and unsorted_msg.from >= sorted_msg.from then -- for inbox
table.insert(messages, j, unsorted_msg)
is_message_sorted = true
break
elseif sortfield == "1" and unsorted_msg.to >= sorted_msg.to then -- for outbox
table.insert(messages, j, unsorted_msg)
is_message_sorted = true
break
elseif sortfield == "2" and unsorted_msg.subject >= sorted_msg.subject then
table.insert(messages, j, unsorted_msg)
is_message_sorted = true
break
elseif sortfield == "3" and unsorted_msg.time >= sorted_msg.time then
table.insert(messages, j, unsorted_msg)
is_message_sorted = true
break
end
end
if not is_message_sorted then
table.insert(messages, 1, unsorted_msg)
end
end
end end
return messages
-- reverse for descending
local sorted_messages = messages
if sortdirection == "2" then
sorted_messages = {}
for i=#messages, 1, -1 do
sorted_messages[#sorted_messages+1] = messages[i]
end
end
return sorted_messages
end end
function mail.filter_messages(unfiltered_messages, filter) function mail.filter_messages(unfiltered_messages, filter)