imap.rb/lib/imap_server/client_handler/examine.rb
2022-12-10 01:31:15 +01:00

40 lines
1.1 KiB
Ruby

class ImapServer
class ClientHandler
module Examine
def handle_examine(msg:, user:)
if !user
msg.error_need_loggin
elsif msg.args.size != 1
msg.respond ServerMessage.new("BAD requires a folder name", tag: msg.tag)
else
handle_examine_folder(msg: msg, user: user, maildir_name: msg.args.first)
end
end
# TODO: factorize with SELECT
private
def handle_examine_folder(msg:, user:, maildir_name:)
if (open_folder = folders[folder])
msg.respond ServerMessage.new("OK #{open_folder["ALL"].size} EXISTS", tag: msg.tag)
msg.respond ServerMessage.new("OK #{open_folder["RECENTS"].size} RECENTS", tag: msg.tag)
msg.respond ServerMessage.new("OK EXAMINE completed", tag: msg.tag)
else
msg.respond ServerMessage.new("NO #{folder} do not exists", tag: msg.tag)
end
end
# sample
def folders
{
"INBOX" => {
"ALL" => [1, 2, 3, 5],
"RECENTS" => [5],
},
"Sent" => [4],
}
end
end
end
end