More work to remove the need for collection-view anti-pattern.
Remove createChatBox from chatboxesview and move the message received listener to chatboxes
This commit is contained in:
parent
9d89779bee
commit
d0b9761d20
133
converse.js
133
converse.js
@ -332,7 +332,7 @@
|
|||||||
$chat_content.scrollTop($chat_content[0].scrollHeight);
|
$chat_content.scrollTop($chat_content[0].scrollHeight);
|
||||||
},
|
},
|
||||||
|
|
||||||
messageReceived: function (message) {
|
showMessage: function (message) {
|
||||||
var $chat_content = this.$el.find('.chat-content');
|
var $chat_content = this.$el.find('.chat-content');
|
||||||
if (xmppchat.xmppstatus.getStatus() === 'offline') {
|
if (xmppchat.xmppstatus.getStatus() === 'offline') {
|
||||||
// only update the UI if the user is not offline
|
// only update the UI if the user is not offline
|
||||||
@ -479,7 +479,7 @@
|
|||||||
initialize: function (){
|
initialize: function (){
|
||||||
// boxviewinit
|
// boxviewinit
|
||||||
$('body').append(this.$el.hide());
|
$('body').append(this.$el.hide());
|
||||||
this.model.messages.on('add', this.messageReceived, this);
|
this.model.messages.on('add', this.showMessage, this);
|
||||||
|
|
||||||
this.model.on('show', function() {
|
this.model.on('show', function() {
|
||||||
this.show();
|
this.show();
|
||||||
@ -1056,6 +1056,57 @@
|
|||||||
}, this)
|
}, this)
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
|
|
||||||
|
messageReceived: function (message) {
|
||||||
|
var partner_jid, $message = $(message),
|
||||||
|
message_from = $message.attr('from');
|
||||||
|
if (message_from == xmppchat.connection.jid) {
|
||||||
|
// FIXME: Forwarded messages should be sent to specific resources,
|
||||||
|
// not broadcasted
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
var $forwarded = $message.children('forwarded');
|
||||||
|
if ($forwarded.length) {
|
||||||
|
$message = $forwarded.children('message');
|
||||||
|
}
|
||||||
|
var from = Strophe.getBareJidFromJid(message_from),
|
||||||
|
to = Strophe.getBareJidFromJid($message.attr('to')),
|
||||||
|
resource, chatbox;
|
||||||
|
if (from == xmppchat.connection.bare_jid) {
|
||||||
|
// I am the sender, so this must be a forwarded message...
|
||||||
|
partner_jid = to;
|
||||||
|
resource = Strophe.getResourceFromJid($message.attr('to'));
|
||||||
|
} else {
|
||||||
|
partner_jid = from;
|
||||||
|
resource = Strophe.getResourceFromJid(message_from);
|
||||||
|
}
|
||||||
|
|
||||||
|
chatbox = this.get(partner_jid);
|
||||||
|
if (!chatbox) {
|
||||||
|
xmppchat.getVCard(
|
||||||
|
partner_jid,
|
||||||
|
$.proxy(function (jid, fullname, image, image_type, url) {
|
||||||
|
chatbox = this.create({
|
||||||
|
'id': jid,
|
||||||
|
'jid': jid,
|
||||||
|
'fullname': fullname,
|
||||||
|
'image_type': image_type,
|
||||||
|
'image': image,
|
||||||
|
'url': url,
|
||||||
|
});
|
||||||
|
chatbox.messageReceived(message);
|
||||||
|
xmppchat.roster.addResource(partner_jid, resource);
|
||||||
|
}, this),
|
||||||
|
$.proxy(function () {
|
||||||
|
// # FIXME
|
||||||
|
console.log("An error occured while fetching vcard");
|
||||||
|
}, this));
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
chatbox.messageReceived(message);
|
||||||
|
xmppchat.roster.addResource(partner_jid, resource);
|
||||||
|
return true;
|
||||||
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
xmppchat.ChatBoxesView = Backbone.View.extend({
|
xmppchat.ChatBoxesView = Backbone.View.extend({
|
||||||
@ -1072,21 +1123,6 @@
|
|||||||
return view;
|
return view;
|
||||||
},
|
},
|
||||||
|
|
||||||
createChatBox: function (data) {
|
|
||||||
var model = new xmppchat.ChatBox({
|
|
||||||
'id': data['jid'],
|
|
||||||
'jid': data['jid'],
|
|
||||||
'fullname': data['fullname'],
|
|
||||||
'image_type': data['image_type'],
|
|
||||||
'image': data['image'],
|
|
||||||
'visible': data['visible'],
|
|
||||||
'url': data['url'],
|
|
||||||
});
|
|
||||||
this.options.model.add(model);
|
|
||||||
model.save();
|
|
||||||
return model;
|
|
||||||
},
|
|
||||||
|
|
||||||
openControlBox: function () {
|
openControlBox: function () {
|
||||||
var controlbox = this.model.get('controlbox')
|
var controlbox = this.model.get('controlbox')
|
||||||
if (controlbox) {
|
if (controlbox) {
|
||||||
@ -1100,57 +1136,6 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
messageReceived: function (message) {
|
|
||||||
var partner_jid, $message = $(message),
|
|
||||||
message_from = $message.attr('from');
|
|
||||||
if ( message_from == xmppchat.connection.jid) {
|
|
||||||
// FIXME: Forwarded messages should be sent to specific resources, not broadcasted
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
var $forwarded = $message.children('forwarded');
|
|
||||||
if ($forwarded.length) {
|
|
||||||
$message = $forwarded.children('message');
|
|
||||||
}
|
|
||||||
var from = Strophe.getBareJidFromJid(message_from),
|
|
||||||
to = Strophe.getBareJidFromJid($message.attr('to')),
|
|
||||||
view, resource, chatbox;
|
|
||||||
if (from == xmppchat.connection.bare_jid) {
|
|
||||||
// I am the sender, so this must be a forwarded message...
|
|
||||||
partner_jid = to;
|
|
||||||
resource = Strophe.getResourceFromJid($message.attr('to'));
|
|
||||||
} else {
|
|
||||||
partner_jid = from;
|
|
||||||
resource = Strophe.getResourceFromJid(message_from);
|
|
||||||
}
|
|
||||||
|
|
||||||
view = this.views[partner_jid];
|
|
||||||
if (!view) {
|
|
||||||
xmppchat.getVCard(
|
|
||||||
partner_jid,
|
|
||||||
$.proxy(function (jid, fullname, img, img_type, url) {
|
|
||||||
chatbox = this.createChatBox({
|
|
||||||
'jid': jid,
|
|
||||||
'fullname': fullname,
|
|
||||||
'image': img,
|
|
||||||
'image_type': img_type,
|
|
||||||
'url': url,
|
|
||||||
})
|
|
||||||
chatbox.messageReceived(message);
|
|
||||||
xmppchat.roster.addResource(partner_jid, resource);
|
|
||||||
}, this),
|
|
||||||
$.proxy(function () {
|
|
||||||
// # TODO: call the function above
|
|
||||||
console.log("An error occured while fetching vcard");
|
|
||||||
}, this));
|
|
||||||
return true;
|
|
||||||
} else if (!view.isVisible()) {
|
|
||||||
this.model.get(partner_jid).trigger('show');
|
|
||||||
}
|
|
||||||
view.model.messageReceived(message);
|
|
||||||
xmppchat.roster.addResource(partner_jid, resource);
|
|
||||||
return true;
|
|
||||||
},
|
|
||||||
|
|
||||||
initialize: function () {
|
initialize: function () {
|
||||||
// boxesviewinit
|
// boxesviewinit
|
||||||
this.views = {};
|
this.views = {};
|
||||||
@ -1203,14 +1188,14 @@
|
|||||||
if (chatbox) {
|
if (chatbox) {
|
||||||
chatbox.trigger('show');
|
chatbox.trigger('show');
|
||||||
} else {
|
} else {
|
||||||
xmppchat.chatboxesview.createChatBox({
|
xmppchat.chatboxes.create({
|
||||||
'jid': jid,
|
'id': this.model.get('jid'),
|
||||||
|
'jid': this.model.get('jid'),
|
||||||
'fullname': this.model.get('fullname'),
|
'fullname': this.model.get('fullname'),
|
||||||
'image': this.model.get('image'),
|
|
||||||
'image_type': this.model.get('image_type'),
|
'image_type': this.model.get('image_type'),
|
||||||
'visible': true,
|
'image': this.model.get('image'),
|
||||||
'url': this.model.get('url'),
|
'url': this.model.get('url'),
|
||||||
})
|
});
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
@ -2052,7 +2037,7 @@
|
|||||||
|
|
||||||
this.connection.addHandler(
|
this.connection.addHandler(
|
||||||
$.proxy(function (message) {
|
$.proxy(function (message) {
|
||||||
this.chatboxesview.messageReceived(message);
|
this.chatboxes.messageReceived(message);
|
||||||
return true;
|
return true;
|
||||||
}, this), null, 'message', 'chat');
|
}, this), null, 'message', 'chat');
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user