40 lines
1.1 KiB
Ruby
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
|