ChatBoxes are now saved and fetched from backbone.localStorage.

Also made some initial changes to save/fetch messages from
backbone.localStorage
This commit is contained in:
JC Brand 2013-03-22 08:22:04 +02:00
parent 48e4ed271e
commit fba9bcfde6

View File

@ -248,40 +248,6 @@
store.set(hex_sha1(this.get('own_jid')+bare_jid), []); store.set(hex_sha1(this.get('own_jid')+bare_jid), []);
}, },
getOpenChats: function () {
var key = hex_sha1(this.get('own_jid')+'-open-chats'),
chats = store.get(key) || [],
chats_length = chats.length,
decrypted_chats = [],
i;
for (i=0; i<chats_length; i++) {
decrypted_chats.push(chats[i]);
}
return decrypted_chats;
},
addOpenChat: function (jid) {
// TODO: Hash stored chats?
var key = hex_sha1(this.get('own_jid')+'-open-chats'),
chats = store.get(key) || [];
if (_.indexOf(chats, jid) == -1) {
chats.push(jid);
}
store.set(key, chats);
},
removeOpenChat: function (jid) {
var key = hex_sha1(this.get('own_jid')+'-open-chats'),
chats = store.get(key) || [];
if (_.has(chats, jid) != -1) {
chats.splice(_.indexOf(chats, jid), 1);
}
store.set(key, chats);
},
flush: function () { flush: function () {
// Clears all localstorage content handled by burry.js // Clears all localstorage content handled by burry.js
// Only used in tests // Only used in tests
@ -317,8 +283,7 @@
composing = $message.find('composing'), composing = $message.find('composing'),
delayed = $message.find('delay').length > 0, delayed = $message.find('delay').length > 0,
fullname = this.get('fullname').split(' ')[0], fullname = this.get('fullname').split(' ')[0],
stamp, time; stamp, time, sender;
if (!body) { if (!body) {
if (composing.length) { if (composing.length) {
@ -336,24 +301,21 @@
} else { } else {
time = (new Date()).toLocaleTimeString().substring(0,5); time = (new Date()).toLocaleTimeString().substring(0,5);
} }
if (from == xmppchat.connection.bare_jid) { if (from == xmppchat.connection.bare_jid) {
this.messages.add({ fullname: 'me',
fullname: 'me', sender: 'me',
sender: 'me', else {
delayed: delayed, sender: 'them',
time: time,
message: body
});
} else {
this.messages.add({
fullname: fullname,
sender: 'them',
delayed: delayed,
time: time,
message: body
});
} }
var message = new xmppchat.Message({
fullname: fullname,
sender: sender,
delayed: delayed,
time: time,
message: body
});
this.messages.add(message);
message.save();
} }
}, },
}); });
@ -386,6 +348,8 @@
minutes = now.getMinutes().toString(), minutes = now.getMinutes().toString(),
$chat_content = this.$el.find('.chat-content'); $chat_content = this.$el.find('.chat-content');
/*
* FIXME: we don't use client storage anymore
var msg = xmppchat.storage.getLastMessage(this.model.get('jid')); var msg = xmppchat.storage.getLastMessage(this.model.get('jid'));
if (typeof msg !== 'undefined') { if (typeof msg !== 'undefined') {
var prev_date = new Date(Date(msg.split(' ', 2)[0])); var prev_date = new Date(Date(msg.split(' ', 2)[0]));
@ -394,6 +358,7 @@
$chat_content.append($('<div class="chat-date"></div>').text(now.toString().substring(0,15))); $chat_content.append($('<div class="chat-date"></div>').text(now.toString().substring(0,15)));
} }
} }
*/
message = xmppchat.autoLink(message); message = xmppchat.autoLink(message);
// TODO use minutes logic or remove it // TODO use minutes logic or remove it
if (minutes.length==1) {minutes = '0'+minutes;} if (minutes.length==1) {minutes = '0'+minutes;}
@ -425,7 +390,6 @@
this.insertStatusNotification(message.get('fullname')+' '+'is typing'); this.insertStatusNotification(message.get('fullname')+' '+'is typing');
return; return;
} else { } else {
// xmppchat.storage.addMessage(from, body, 'from');
$chat_content.find('div.chat-event').remove(); $chat_content.find('div.chat-event').remove();
// TODO use toJSON here // TODO use toJSON here
$chat_content.append( $chat_content.append(
@ -512,7 +476,8 @@
if (match) { if (match) {
if (match[1] === "clear") { if (match[1] === "clear") {
this.$el.find('.chat-content').empty(); this.$el.find('.chat-content').empty();
xmppchat.storage.clearMessages(bare_jid); this.model.messages.reset()
// xmppchat.storage.clearMessages(bare_jid);
return; return;
} }
else if (match[1] === "help") { else if (match[1] === "help") {
@ -539,7 +504,7 @@
xmppchat.connection.send(message); xmppchat.connection.send(message);
xmppchat.connection.send(forwarded); xmppchat.connection.send(forwarded);
this.appendMessage(text); this.appendMessage(text);
xmppchat.storage.addMessage(bare_jid, text, 'to'); // xmppchat.storage.addMessage(bare_jid, text, 'to');
}, },
keyPressed: function (ev) { keyPressed: function (ev) {
@ -570,22 +535,11 @@
} }
}, },
saveChatToStorage: function () {
if (xmppchat.storage) {
xmppchat.storage.addOpenChat(this.model.get('jid'));
}
},
removeChatFromStorage: function () {
if (xmppchat.storage) {
xmppchat.storage.removeOpenChat(this.model.get('jid'));
}
},
closeChat: function () { closeChat: function () {
var that = this; var that = this;
$('#'+this.model.get('box_id')).hide('fast', function () { $('#'+this.model.get('box_id')).hide('fast', function () {
that.removeChatFromStorage(that.model.get('id')); // TODO: Better is probably to just show that it's hidden
that.model.destroy();
}); });
}, },
@ -648,7 +602,7 @@
ctx.drawImage(img,0,0, 35*ratio, 35) ctx.drawImage(img,0,0, 35*ratio, 35)
} }
img.src = img_src; img.src = img_src;
this.insertClientStoredMessages(); // this.insertClientStoredMessages();
return this; return this;
}, },
@ -1133,39 +1087,6 @@
xmppchat.ChatBoxesView = Backbone.View.extend({ xmppchat.ChatBoxesView = Backbone.View.extend({
el: '#collective-xmpp-chat-data', el: '#collective-xmpp-chat-data',
restoreOpenChats: function () {
var open_chats = xmppchat.storage.getOpenChats();
if (_.indexOf(open_chats, 'controlbox') != -1) {
// Controlbox already exists, we just need to show it.
this.showChat('controlbox');
}
_.each(open_chats, $.proxy(function (jid) {
if (jid != 'controlbox') {
if (this.isChatRoom(jid)) {
this.createChatRoom(jid);
} else {
xmppchat.getVCard(
jid,
$.proxy(function (jid, fullname, img, img_type, url) {
this.createChatBox({
'jid': jid,
'fullname': fullname,
'image': img,
'image_type': img_type,
'url': url,
});
}, this),
$.proxy(function () {
// Error occured while fetching vcard
this.createChatBox({'jid': jid });
}, this)
)
}
}
}, this));
},
isChatRoom: function (jid) { isChatRoom: function (jid) {
return Strophe.getDomainFromJid(jid) === xmppchat.connection.muc_domain; return Strophe.getDomainFromJid(jid) === xmppchat.connection.muc_domain;
}, },
@ -1182,7 +1103,7 @@
}, },
createChatBox: function (data) { createChatBox: function (data) {
return this.options.model.add({ var model = new xmppchat.ChatBox({
'id': data['jid'], 'id': data['jid'],
'jid': data['jid'], 'jid': data['jid'],
'fullname': data['fullname'], 'fullname': data['fullname'],
@ -1190,6 +1111,9 @@
'image': data['image'], 'image': data['image'],
'url': data['url'], 'url': data['url'],
}); });
var chatboxes = this.options.model.add(model);
model.save();
return model;
}, },
closeChat: function (jid) { closeChat: function (jid) {
@ -1237,7 +1161,7 @@
view.focus(); view.focus();
} }
} }
view.saveChatToStorage(); // view.saveChatToStorage();
return view; return view;
}, },
@ -1254,7 +1178,7 @@
} }
var from = Strophe.getBareJidFromJid(message_from), var from = Strophe.getBareJidFromJid(message_from),
to = Strophe.getBareJidFromJid($message.attr('to')), to = Strophe.getBareJidFromJid($message.attr('to')),
view, resource, chatboxes; view, resource, chatbox;
if (from == xmppchat.connection.bare_jid) { if (from == xmppchat.connection.bare_jid) {
// I am the sender, so this must be a forwarded message... // I am the sender, so this must be a forwarded message...
partner_jid = to; partner_jid = to;
@ -1269,17 +1193,14 @@
xmppchat.getVCard( xmppchat.getVCard(
partner_jid, partner_jid,
$.proxy(function (jid, fullname, img, img_type, url) { $.proxy(function (jid, fullname, img, img_type, url) {
// FIXME: We don't get the view from createChatBox chatbox = this.createChatBox({
// anymore.
// Instead, we should trigger an event on the model
chatboxes = this.createChatBox({
'jid': jid, 'jid': jid,
'fullname': fullname, 'fullname': fullname,
'image': img, 'image': img,
'image_type': img_type, 'image_type': img_type,
'url': url, 'url': url,
}) })
chatboxes.get(jid).messageReceived(message); chatbox.messageReceived(message);
xmppchat.roster.addResource(partner_jid, resource); xmppchat.roster.addResource(partner_jid, resource);
}, this), }, this),
$.proxy(function () { $.proxy(function () {
@ -1309,9 +1230,8 @@
xmppchat.rosterview.$el.appendTo(controlbox.contactspanel.$el); xmppchat.rosterview.$el.appendTo(controlbox.contactspanel.$el);
xmppchat.roster.fetch({add: true}); // Gets the cached roster items from localstorage xmppchat.roster.fetch({add: true}); // Gets the cached roster items from localstorage
xmppchat.rosterview.initialSort(); xmppchat.rosterview.initialSort();
// TODO: we're going to use localStorage here // Gets cached chatboxes from localstorage
// Restore previously open chatboxes this.model.fetch({add: true});
// this.restoreOpenChats();
}, },
initialize: function () { initialize: function () {
@ -1326,10 +1246,6 @@
this.views[item.get('id')] = view.render(); this.views[item.get('id')] = view.render();
this.showChat(item.get('id')); this.showChat(item.get('id'));
}, this); }, this);
/*
// Rebind events (necessary for click events on tabs inserted via the panels)
this.views.controlbox.delegateEvents();
*/
} }
}); });
@ -2103,6 +2019,11 @@
password = $form.find('input#password').val(), password = $form.find('input#password').val(),
connection = new Strophe.Connection(bosh_service_url); connection = new Strophe.Connection(bosh_service_url);
jid = 'opkode@jappix.com'
password = 'jpwagw00rd!'
bosh_service_url = 'https://bind.jappix.com'
connection = new Strophe.Connection(bosh_service_url);
connection.connect(jid, password, function (status) { connection.connect(jid, password, function (status) {
if (status === Strophe.Status.CONNECTED) { if (status === Strophe.Status.CONNECTED) {
console.log('Connected'); console.log('Connected');