From c9caf2f49ae09c7ce76022b63ed9047b37d71ffb Mon Sep 17 00:00:00 2001 From: Jefferson Stachelski Date: Fri, 13 Nov 2015 11:19:25 -0200 Subject: Issue #523 - Created an archive mail button --- service/pixelated/adapter/services/mail_service.py | 5 ++++ service/pixelated/resources/mails_resource.py | 18 ++++++++++++++ .../mail_list_actions/ui/archive_many_trigger.js | 29 ++++++++++++++++++++++ .../js/mail_list_actions/ui/mail_list_actions.js | 3 +++ web-ui/app/js/page/events.js | 2 ++ web-ui/app/js/services/mail_service.js | 26 ++++++++++++++++++- web-ui/app/locales/en-us/translation.json | 2 +- web-ui/app/locales/pt/translation.json | 2 +- web-ui/app/locales/sv/translation.json | 2 +- web-ui/app/templates/mail_actions/actions_box.hbs | 1 + 10 files changed, 86 insertions(+), 4 deletions(-) create mode 100644 web-ui/app/js/mail_list_actions/ui/archive_many_trigger.js diff --git a/service/pixelated/adapter/services/mail_service.py b/service/pixelated/adapter/services/mail_service.py index 53f7615e..5485ae18 100644 --- a/service/pixelated/adapter/services/mail_service.py +++ b/service/pixelated/adapter/services/mail_service.py @@ -131,6 +131,11 @@ class MailService(object): def recover_mail(self, mail_id): yield self.mail_store.move_mail_to_mailbox(mail_id, 'INBOX') + @defer.inlineCallbacks + def archive_mail(self, mail_id): + yield self.mail_store.add_mailbox('ARCHIVE') + yield self.mail_store.move_mail_to_mailbox(mail_id, 'ARCHIVE') + @defer.inlineCallbacks def delete_permanent(self, mail_id): yield self.mail_store.delete_mail(mail_id) diff --git a/service/pixelated/resources/mails_resource.py b/service/pixelated/resources/mails_resource.py index 499610de..f65041f5 100644 --- a/service/pixelated/resources/mails_resource.py +++ b/service/pixelated/resources/mails_resource.py @@ -94,6 +94,23 @@ class MailsRecoverResource(Resource): return NOT_DONE_YET +class MailsArchiveResource(Resource): + + def __init__(self, mail_service): + Resource.__init__(self) + self._mail_service = mail_service + + def render_POST(self, request): + idents = json.loads(request.content.read())['idents'] + deferreds = [] + for ident in idents: + deferreds.append(self._mail_service.archive_mail(ident)) + d = defer.gatherResults(deferreds, consumeErrors=True) + d.addCallback(lambda _: respond_json_deferred({'successMessage': 'Your message was archived'}, request)) + d.addErrback(lambda _: respond_json_deferred(None, request, status_code=500)) + return NOT_DONE_YET + + class MailsResource(Resource): def _register_smtp_error_handler(self): @@ -108,6 +125,7 @@ class MailsResource(Resource): Resource.__init__(self) self.putChild('delete', MailsDeleteResource(mail_service)) self.putChild('recover', MailsRecoverResource(mail_service)) + self.putChild('archive', MailsArchiveResource(mail_service)) self.putChild('read', MailsReadResource(mail_service)) self.putChild('unread', MailsUnreadResource(mail_service)) diff --git a/web-ui/app/js/mail_list_actions/ui/archive_many_trigger.js b/web-ui/app/js/mail_list_actions/ui/archive_many_trigger.js new file mode 100644 index 00000000..b148cdce --- /dev/null +++ b/web-ui/app/js/mail_list_actions/ui/archive_many_trigger.js @@ -0,0 +1,29 @@ +define( + [ + 'flight/lib/component', + 'views/templates', + 'mixins/with_enable_disable_on_event', + 'page/events' + ], + + function(definecomponent, templates, withEnableDisableOnEvent, events) { + 'use strict'; + + return definecomponent(archiveManyTrigger, withEnableDisableOnEvent(events.ui.mails.hasMailsChecked)); + function archiveManyTrigger() { + + this.getMailsToArchive = function() { + this.trigger(document, events.ui.mail.wantChecked, this.$node); + }; + + this.archiveManyEmails = function(event, data) { + this.trigger(document, events.mail.archiveMany, data); + }; + + this.after('initialize', function () { + this.on('click', this.getMailsToArchive); + this.on(events.ui.mail.hereChecked, this.archiveManyEmails); + }); + } + } +); diff --git a/web-ui/app/js/mail_list_actions/ui/mail_list_actions.js b/web-ui/app/js/mail_list_actions/ui/mail_list_actions.js index 2c9c699f..f71ed07c 100644 --- a/web-ui/app/js/mail_list_actions/ui/mail_list_actions.js +++ b/web-ui/app/js/mail_list_actions/ui/mail_list_actions.js @@ -29,6 +29,7 @@ define( 'mail_list_actions/ui/pagination_trigger', 'mail_list_actions/ui/delete_many_trigger', 'mail_list_actions/ui/recover_many_trigger', + 'mail_list_actions/ui/archive_many_trigger', 'mail_list_actions/ui/mark_many_as_read_trigger', 'mail_list_actions/ui/mark_as_unread_trigger' ], @@ -45,6 +46,7 @@ define( paginationTrigger, deleteManyTrigger, recoverManyTrigger, + archiveManyTrigger, markManyAsReadTrigger, markAsUnreadTrigger ) { @@ -60,6 +62,7 @@ define( paginationTrigger.attachTo('#pagination-trigger'); deleteManyTrigger.attachTo('#delete-selected'); recoverManyTrigger.attachTo('#recover-selected'); + archiveManyTrigger.attachTo('#archive-selected'); markManyAsReadTrigger.attachTo('#mark-selected-as-read'); markAsUnreadTrigger.attachTo('#mark-selected-as-unread'); refresher.attachTo(document); diff --git a/web-ui/app/js/page/events.js b/web-ui/app/js/page/events.js index f82a6b36..307fc8d1 100644 --- a/web-ui/app/js/page/events.js +++ b/web-ui/app/js/page/events.js @@ -56,6 +56,7 @@ define(function () { delete: 'ui:mail:delete', deleteMany: 'ui:mail:deleteMany', recoverMany: 'ui:mail:recoverMany', + archiveMany: 'ui:mail:archiveMany', wantChecked: 'ui:mail:wantChecked', hereChecked: 'ui:mail:hereChecked', checked: 'ui:mail:checked', @@ -117,6 +118,7 @@ define(function () { unread: 'mail:unread', delete: 'mail:delete', deleteMany: 'mail:deleteMany', + archiveMany: 'mail:archiveMany', recoverMany: 'mail:recoverMany', deleted: 'mail:deleted', saveDraft: 'draft:save', diff --git a/web-ui/app/js/services/mail_service.js b/web-ui/app/js/services/mail_service.js index e655bb7e..6a42d920 100644 --- a/web-ui/app/js/services/mail_service.js +++ b/web-ui/app/js/services/mail_service.js @@ -128,7 +128,16 @@ define( var mails = dataToRecover.mails || [dataToRecover.mail]; this.refreshMails(); - this.trigger(document, events.ui.userAlerts.displayMessage, { message: dataToRecover.successMessage}); + this.trigger(document, events.ui.userAlerts.displayMessage, { message: i18n(dataToRecover.successMessage)}); + this.trigger(document, events.ui.mails.uncheckAll); + }, this); + }; + + this.triggerArchived = function (dataToArchive) { + return _.bind(function (response) { + this.refreshMails(); + this.trigger(document, events.ui.userAlerts.displayMessage, { message: i18n(response.successMessage)}); + //this.trigger(document, events.ui.userAlerts.displayMessage, { message: i18n("Your message was archived")}); this.trigger(document, events.ui.mails.uncheckAll); }, this); }; @@ -170,6 +179,20 @@ define( .fail(this.errorMessage(i18n('Could not move emails to inbox'))); }; + this.archiveManyMails = function(event, dataToArchive) { + var mailIdents = _.map(dataToArchive.checkedMails, function (mail) { + return mail.ident; + }); + + monitoredAjax(this, '/mails/archive', { + type: 'POST', + dataType: 'json', + contentType: 'application/json; charset=utf-8', + data: JSON.stringify({idents: mailIdents}) + }).done(this.triggerArchived(dataToArchive)) + .fail(this.errorMessage(i18n('Could not archive emails'))); + } + function compileQuery(data) { var query = 'tag:"' + that.attr.currentTag + '"'; @@ -299,6 +322,7 @@ define( this.on(document, events.mail.delete, this.deleteMail); this.on(document, events.mail.deleteMany, this.deleteManyMails); this.on(document, events.mail.recoverMany, this.recoverManyMails); + this.on(document, events.mail.archiveMany, this.archiveManyMails); this.on(document, events.search.perform, this.newSearch); this.on(document, events.ui.tag.selected, this.fetchByTag); this.on(document, events.ui.tag.select, this.fetchByTag); diff --git a/web-ui/app/locales/en-us/translation.json b/web-ui/app/locales/en-us/translation.json index 4dd90e90..818719cd 100644 --- a/web-ui/app/locales/en-us/translation.json +++ b/web-ui/app/locales/en-us/translation.json @@ -3,7 +3,7 @@ "re": "Re: ", "Fwd: ": "Fwd: ", "Your message was moved to trash!": "Your message was moved to trash!", - "Your message was archive it!": "Your message was archived!", + "Your message was archived": "Your message was archived", "Your message was permanently deleted!": "Your message was permanently deleted!", "Saved as draft.": "Saved as draft.", "One or more of the recipients are not valid emails": "One or more of the recipients are not valid emails", diff --git a/web-ui/app/locales/pt/translation.json b/web-ui/app/locales/pt/translation.json index 2885e12b..7f553d04 100644 --- a/web-ui/app/locales/pt/translation.json +++ b/web-ui/app/locales/pt/translation.json @@ -2,7 +2,7 @@ "compose": "Escrever", "re": "Res: ", "Your message was moved to trash!": "Sua mensagem foi movida para a lixeira!", - "Your message was archive it!": "Sua mensagem foi arquivada!", + "Your message was archived": "Sua mensagem foi arquivada!", "Your message was permanently deleted!": "Sua mensagem foi permanentemente deletada!", "Saved as draft.": "Mensagem salva como rascunho.", "One or more of the recipients are not valid emails": "Email de um ou mais destinatários é inválido", diff --git a/web-ui/app/locales/sv/translation.json b/web-ui/app/locales/sv/translation.json index 69557f6a..d3e17122 100644 --- a/web-ui/app/locales/sv/translation.json +++ b/web-ui/app/locales/sv/translation.json @@ -3,7 +3,7 @@ "re": "Sv: ", "Fwd: ": "VB: ", "Your message was moved to trash!": "Ditt meddelande har flyttats till papperskorgen!", - "Your message was archive it!": "Ditt meddelande har arkiverats!", + "Your message was archived": "Ditt meddelande har arkiverats!", "Your message was permanently deleted!": "Ditt meddelande har tagits bort permanent!", "Saved as draft.": "Sparat som utkast.", "One or more of the recipients are not valid emails": "En eller flera mottagare är inte giltiga epost-adresser", diff --git a/web-ui/app/templates/mail_actions/actions_box.hbs b/web-ui/app/templates/mail_actions/actions_box.hbs index b6dc2f53..07dcc9e9 100644 --- a/web-ui/app/templates/mail_actions/actions_box.hbs +++ b/web-ui/app/templates/mail_actions/actions_box.hbs @@ -2,5 +2,6 @@
  • +
  • -- cgit v1.2.3