Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/candy-chat/candy.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'src/view/observer.js')
-rw-r--r--src/view/observer.js26
1 files changed, 22 insertions, 4 deletions
diff --git a/src/view/observer.js b/src/view/observer.js
index 5ee456a..a2afcbc 100644
--- a/src/view/observer.js
+++ b/src/view/observer.js
@@ -215,6 +215,14 @@ Candy.View.Observer = (function(self, $) {
Candy.View.Pane.Roster.update(args.user.getJid(), args.user, args.action, args.currentUser);
Candy.View.Pane.PrivateRoom.setStatus(args.user.getJid(), args.action);
}
+ } else {
+ // Presence for a one-on-one chat
+ var bareJid = Strophe.getBareJidFromJid(args.from),
+ room = Candy.View.Pane.Chat.rooms[bareJid];
+ if(!room) {
+ return false;
+ }
+ room.targetJid = bareJid; // Reset the room's target JID
}
},
@@ -275,18 +283,28 @@ Candy.View.Observer = (function(self, $) {
self.Message = function(event, args) {
if(args.message.type === 'subject') {
if (!Candy.View.Pane.Chat.rooms[args.roomJid]) {
- Candy.View.Pane.Room.init(args.roomJid, args.message.name);
+ Candy.View.Pane.Room.init(args.roomJid, args.roomName);
Candy.View.Pane.Room.show(args.roomJid);
}
Candy.View.Pane.Room.setSubject(args.roomJid, args.message.body);
} else if(args.message.type === 'info') {
- Candy.View.Pane.Chat.infoMessage(args.roomJid, args.message.body);
+ Candy.View.Pane.Chat.infoMessage(args.roomJid, null, args.message.body);
} else {
// Initialize room if it's a message for a new private user chat
if(args.message.type === 'chat' && !Candy.View.Pane.Chat.rooms[args.roomJid]) {
- Candy.View.Pane.PrivateRoom.open(args.roomJid, args.message.name, false, args.message.isNoConferenceRoomJid);
+ Candy.View.Pane.PrivateRoom.open(args.roomJid, args.roomName, false, args.message.isNoConferenceRoomJid);
+ }
+ var room = Candy.View.Pane.Chat.rooms[args.roomJid];
+ if (room.targetJid === args.roomJid && !args.carbon) {
+ // No messages yet received. Lock the room to this resource.
+ room.targetJid = args.message.from;
+ } else if (room.targetJid === args.message.from) {
+ // We're already locked to the correct resource.
+ } else {
+ // Message received from alternative resource. Release the resource lock.
+ room.targetJid = args.roomJid;
}
- Candy.View.Pane.Message.show(args.roomJid, args.message.name, args.message.body, args.message.xhtmlMessage, args.timestamp);
+ Candy.View.Pane.Message.show(args.roomJid, args.message.name, args.message.body, args.message.xhtmlMessage, args.timestamp, args.message.from, args.carbon, args.stanza);
}
};