diff --git a/assets/javascripts/mailcatcher.js.coffee b/assets/javascripts/mailcatcher.js.coffee index ec39bf0a..4ad9f26d 100644 --- a/assets/javascripts/mailcatcher.js.coffee +++ b/assets/javascripts/mailcatcher.js.coffee @@ -186,6 +186,7 @@ class MailCatcher .append($("").text(message.sender or "No sender").toggleClass("blank", !message.sender)) .append($("").text((message.recipients || []).join(", ") or "No receipients").toggleClass("blank", !message.recipients.length)) .append($("").text(message.subject or "No subject").toggleClass("blank", !message.subject)) + .append($("""""").text(message.attachments_count || "")) .append($("").text(@formatDate(message.created_at))) .prependTo($("#messages tbody")) @updateMessagesCount() diff --git a/assets/stylesheets/mailcatcher.css.sass b/assets/stylesheets/mailcatcher.css.sass index 726e8acc..85f8e087 100644 --- a/assets/stylesheets/mailcatcher.css.sass +++ b/assets/stylesheets/mailcatcher.css.sass @@ -123,6 +123,10 @@ body > header font-weight: bold color: #666 +text-shadow(0 1px 0 white) + &.attachments-header + width: 3em + text-align: right + padding-right: 1em tbody tr cursor: pointer +transition(0.1s ease) @@ -139,6 +143,9 @@ body > header &.blank color: #666 font-style: italic + &.attachments-count + text-align: right + padding-right: 1em #resizer padding-bottom: 5px cursor: ns-resize diff --git a/lib/mail_catcher/mail.rb b/lib/mail_catcher/mail.rb index b7415ae2..5d65b03b 100644 --- a/lib/mail_catcher/mail.rb +++ b/lib/mail_catcher/mail.rb @@ -56,9 +56,11 @@ def add_message(message) add_message_part(message_id, cid, part.mime_type || "text/plain", part.attachment? ? 1 : 0, part.filename, part.charset, body, body.length) end + attachments_count = parts.count(&:attachment?) + EventMachine.next_tick do message = MailCatcher::Mail.message message_id - MailCatcher::Bus.push(type: "add", message: message) + MailCatcher::Bus.push(type: "add", message: message.merge("attachments_count" => attachments_count)) end end @@ -73,7 +75,7 @@ def latest_created_at end def messages - @messages_query ||= db.prepare "SELECT id, sender, recipients, subject, size, created_at FROM message ORDER BY created_at, id ASC" + @messages_query ||= db.prepare "SELECT id, sender, recipients, subject, size, created_at, (SELECT COUNT(*) FROM message_part WHERE message_id = message.id AND is_attachment = 1) AS attachments_count FROM message ORDER BY created_at, id ASC" @messages_query.execute.map do |row| Hash[row.fields.zip(row)].tap do |message| message["recipients"] &&= JSON.parse(message["recipients"]) diff --git a/spec/delivery_spec.rb b/spec/delivery_spec.rb index 1a7b99a3..b97799dd 100644 --- a/spec/delivery_spec.rb +++ b/spec/delivery_spec.rb @@ -23,10 +23,14 @@ def message_subject_element message_row_element.find(:xpath, ".//td[3]") end - def message_received_element + def message_attachments_element message_row_element.find(:xpath, ".//td[4]") end + def message_received_element + message_row_element.find(:xpath, ".//td[5]") + end + def html_tab_element page.find("#message header .format.html a") end @@ -65,6 +69,7 @@ def body_element expect(message_from_element).to have_text(DEFAULT_FROM) expect(message_to_element).to have_text(DEFAULT_TO) expect(message_subject_element).to have_text("Plain mail") + expect(message_attachments_element.text).to eq("") expect(Time.parse(message_received_element.text)).to be <= Time.now + 5 message_row_element.click @@ -227,6 +232,7 @@ def body_element expect(message_from_element).to have_text(DEFAULT_FROM) expect(message_to_element).to have_text(DEFAULT_TO) expect(message_subject_element).to have_text("Test Attachment Mail") + expect(message_attachments_element.text).to eq("1") expect(Time.parse(message_received_element.text)).to be <= Time.now + 5 message_row_element.click @@ -256,6 +262,11 @@ def body_element expect(page).to have_text "Content-Disposition: attachment" # Too hard to add expectations on the transfer encoded attachment contents end + + # Refresh the page + refresh + + expect(message_attachments_element.text).to eq("1") end it "doesn't choke on messages containing dots" do diff --git a/views/index.erb b/views/index.erb index 2cd72c23..faa7f521 100644 --- a/views/index.erb +++ b/views/index.erb @@ -34,6 +34,7 @@ From To Subject + 📎 Received