From dfbf9e609c4bb02c5c167a8f4ebf37da7a7758d2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thomas=20M=C3=BCller?= <thomas.mueller@tmit.eu> Date: Tue, 23 Sep 2014 10:57:34 +0200 Subject: [PATCH] update answered flag right after reply has been sent --- js/mail.js | 23 +++++++++-------------- js/models/attachment.js | 34 +++++++++++++++++++++++++++++++++- js/send-mail.js | 4 +++- js/views/message.js | 24 ++++++++++++++++++++---- 4 files changed, 65 insertions(+), 20 deletions(-) diff --git a/js/mail.js b/js/mail.js index f605522a5..a652f71f6 100644 --- a/js/mail.js +++ b/js/mail.js @@ -82,6 +82,7 @@ var Mail = { return Handlebars.compile(rawTemplate); }; Marionette.ItemView.prototype.modelEvents = { "change" : "render"}; + Marionette.CompositeView.prototype.modelEvents = { "change" : "render"}; // ask to handle all mailto: links if(window.navigator.registerProtocolHandler) { @@ -104,6 +105,8 @@ var Mail = { }); Mail.State.folderView.render(); + //Mail.State.folderView.listenTo(); + $.ajax(OC.generateUrl('apps/mail/accounts'), { data:{}, type:'GET', @@ -186,12 +189,6 @@ var Mail = { .addClass('icon-loading'); }, - clearFolders:function () { - var list = $('.mail_folders'); - - list.empty(); - }, - hideMenu:function () { $('#new-message').addClass('hidden'); }, @@ -199,10 +196,10 @@ var Mail = { addMessages:function (data) { Mail.State.messageView.collection.add(data); - _.each($('.avatar'), function(a) { - $(a).imageplaceholder($(a).data('user'), $(a).data('user')); - } - ); + //_.each($('.avatar'), function(a) { + // $(a).imageplaceholder($(a).data('user'), $(a).data('user')); + //} + //); }, loadMessages:function (accountId, folderId, noSelect) { @@ -502,8 +499,8 @@ var Mail = { // Set active class for current message and remove it from old one if(Mail.State.currentMessageId !== null) { - $('#mail-message-summary-'+Mail.State.currentMessageId) - .removeClass('active'); + //$('#mail-message-summary-'+Mail.State.currentMessageId).removeClass('active'); + Mail.State.messageView.setMessageFlag(messageId, 'unseen', false); } Mail.State.currentMessageId = messageId; @@ -518,10 +515,8 @@ var Mail = { $('#mail_messages').addClass('hidden'); $('#mail-message').addClass('hidden'); $('#mail_new_message').addClass('hidden'); -// $('#folders').addClass('hidden'); $('#app-navigation').removeClass('icon-loading'); -// Mail.UI.clearFolders(); Mail.UI.hideMenu(); $('#mail-setup').removeClass('hidden'); diff --git a/js/models/attachment.js b/js/models/attachment.js index 96fffbb54..ecfb6504b 100644 --- a/js/models/attachment.js +++ b/js/models/attachment.js @@ -19,7 +19,39 @@ models.Attachments = Backbone.Collection.extend({ model: models.Attachment }); -models.Message = Backbone.Model.extend(); +models.MessageFlags = Backbone.Model.extend({ + defaults: { + answered: false + } +}); + +models.Message = Backbone.Model.extend({ + defaults: { + flags: [] + }, + + initialize: function() { + this.set('flags', new models.MessageFlags(this.get('flags'))); + this.listenTo(this.get('flags'), 'change', this._transformEvent); + }, + + _transformEvent: function(flags) { + this.trigger('change'); + this.trigger('change:flags', flags); + }, + + // Custom toJSON + toJSON: function() { + var data = Backbone.Model.prototype.toJSON.call(this); + if (data.flags && data.flags.toJSON) { + data.flags = data.flags.toJSON(); + } + if (!data.id) { + data.id = this.cid; + } + return data; + } +}); models.MessageList = Backbone.Collection.extend({ model: models.Message diff --git a/js/send-mail.js b/js/send-mail.js index 267aa602b..00f3c630a 100644 --- a/js/send-mail.js +++ b/js/send-mail.js @@ -70,6 +70,7 @@ $(function () { replyMessageSend.val(t('mail', 'Sending …')); var to = $('.reply-message-fields #to'); var cc = $('.reply-message-fields #cc'); + var messageId = Mail.State.currentMessageId; to.prop('disabled', true); cc.prop('disabled', true); @@ -90,11 +91,12 @@ $(function () { to: to.val(), cc: cc.val(), folderId: Mail.State.currentFolderId, - messageId: Mail.State.currentMessageId, + messageId: messageId, body:replyMessageBody.val() }, type: 'POST', success:function () { + Mail.State.messageView.setMessageFlag(messageId, 'answered'); OC.msg.finishedAction('#reply-msg', { status: 'success', data: { diff --git a/js/views/message.js b/js/views/message.js index d89c5ef11..af207f34e 100644 --- a/js/views/message.js +++ b/js/views/message.js @@ -14,6 +14,12 @@ views.Message = Backbone.Marionette.ItemView.extend({ // nesting elements during re-render. this.$el.unwrap(); this.setElement(this.$el); + + var displayName = this.model.get('from'); + _.each(this.$el.find('.avatar'), function(a) { + $(a).height('32px'); + $(a).imageplaceholder(displayName, displayName); + }); } }); @@ -38,6 +44,16 @@ views.Messages = Backbone.Marionette.CompositeView.extend({ this.collection = new models.MessageList(); }, + setMessageFlag: function(messageId, flag, val) { + val = val || true; + var message = this.collection.get(messageId); + if (message) { + message + .get('flags') + .set(flag, val); + } + }, + loadNew: function() { // Add loading feedback $('#load-new-mail-messages') @@ -82,10 +98,10 @@ views.Messages = Backbone.Marionette.CompositeView.extend({ // Add messages Mail.State.messageView.collection.add(jsondata); - _.each($('.avatar'), function(a) { - $(a).imageplaceholder($(a).data('user'), $(a).data('user')); - } - ); + //_.each($('.avatar'), function(a) { + // $(a).imageplaceholder($(a).data('user'), $(a).data('user')); + // } + //); $('#app-content').removeClass('icon-loading'); Mail.State.currentMessageId = null; -- GitLab