diff --git a/lib/mail_catcher/mail.rb b/lib/mail_catcher/mail.rb index 7be0b5a..ee4ccd3 100644 --- a/lib/mail_catcher/mail.rb +++ b/lib/mail_catcher/mail.rb @@ -150,4 +150,11 @@ module MailCatcher::Mail extend self @delete_messages_query.execute and @delete_message_parts_query.execute end + + def delete_message!(message_id) + @delete_messages_query ||= db.prepare 'DELETE FROM message WHERE id = ?' + @delete_message_parts_query ||= db.prepare 'DELETE FROM message_part WHERE message_id = ?' + @delete_messages_query.execute(message_id) and + @delete_message_parts_query.execute(message_id) + end end diff --git a/lib/mail_catcher/web.rb b/lib/mail_catcher/web.rb index 64fb513..044dd46 100644 --- a/lib/mail_catcher/web.rb +++ b/lib/mail_catcher/web.rb @@ -132,6 +132,16 @@ class MailCatcher::Web < Sinatra::Base end end + delete '/messages/:id' do + id = params[:id].to_i + if message = MailCatcher::Mail.message(id) + MailCatcher::Mail.delete_message!(id) + status 204 + else + not_found + end + end + not_found do "

No Dice

The message you were looking for does not exist, or doesn't have content of this type.

" end diff --git a/public/javascripts/application.coffee b/public/javascripts/application.coffee index cd5e100..386049e 100644 --- a/public/javascripts/application.coffee +++ b/public/javascripts/application.coffee @@ -86,6 +86,21 @@ class MailCatcher @openTab @nextTab() false + key 'backspace, delete', => + id = @selectedMessage() + if id? + $.ajax + url: '/messages/' + id + type: 'DELETE' + success: -> + $('#messages tbody tr[data-message-id="'+id+'"]').remove() + $('#message .metadata dd').empty() + $('#message .metadata .attachments').hide() + $('#message iframe').attr 'src', 'about:blank' + error: -> + alert 'Error while removing message.' + false + @refresh() @subscribe() diff --git a/public/javascripts/application.js b/public/javascripts/application.js index 3bfb166..d841625 100644 --- a/public/javascripts/application.js +++ b/public/javascripts/application.js @@ -116,6 +116,26 @@ _this.openTab(_this.nextTab()); return false; }); + key('backspace, delete', function() { + var id; + id = _this.selectedMessage(); + if (id != null) { + $.ajax({ + url: '/messages/' + id, + type: 'DELETE', + success: function() { + $('#messages tbody tr[data-message-id="' + id + '"]').remove(); + $('#message .metadata dd').empty(); + $('#message .metadata .attachments').hide(); + return $('#message iframe').attr('src', 'about:blank'); + }, + error: function() { + return alert('Error while removing message.'); + } + }); + } + return false; + }); this.refresh(); this.subscribe(); }