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)
or (function(a, b) return a[field] < b[field] end)
end end
if not sortdirection or sortdirection == "" then if sortfield == "1" then -- for inbox
sortdirection = "1" table.sort(messages, sorter("from", sortdirection))
elseif sortfield == "1" then -- for outbox
table.sort(messages, sorter("to", sortdirection))
elseif sortfield == "2" then
table.sort(messages, sorter("subject", sortdirection))
else -- default sorting, sortfield == "3"
table.sort(messages, sorter("time", sortdirection))
end end
return messages
if unsorted_messages[1] then
-- add first message
table.insert(messages, unsorted_messages[1])
table.remove(unsorted_messages, 1)
-- sort messages
for _, unsorted_msg in ipairs(unsorted_messages) do
local is_message_sorted = false
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
-- 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)