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 |