diff --git a/chromesoul.html b/chromesoul.html index 01dfb44..d69fa35 100644 --- a/chromesoul.html +++ b/chromesoul.html @@ -23,6 +23,7 @@
Login:
Password (socks):
+ Enable notifications:
Enable messages:
@@ -35,6 +36,7 @@ + diff --git a/lib/avatars.js b/lib/avatars.js new file mode 100644 index 0000000..434913b --- /dev/null +++ b/lib/avatars.js @@ -0,0 +1,48 @@ +// +// Copyright (c) 2012 Rodolphe Breard +// +// Permission to use, copy, modify, and/or distribute this software for any +// purpose with or without fee is hereby granted, provided that the above +// copyright notice and this permission notice appear in all copies. +// +// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +// WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +// MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +// ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +// WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +// ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +// OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +// + +var AvatarManager = function() { + this.avatars = {}; +}; + +AvatarManager.prototype.getContactPic = function(name, callback) { + var xhr = new XMLHttpRequest(); + + xhr.open("GET", "http://www.epitech.eu/intra/photos/" + name + ".jpg", true); + xhr.responseType = "blob"; + xhr.onload = (function(elem) { + return function(e) { + if (e.target.status === 200) { + elem.avatars[name] = window.webkitURL.createObjectURL(this.response); + } else { + elem.avatars[name] = "img/default-avatar.jpg"; + } + + if (typeof callback !== "undefined") { + callback(elem.avatars[name]); + } + }; + })(this); + xhr.send(); +} + +AvatarManager.prototype.get = function(name, callback) { + if (typeof this.avatars[name] === "undefined") { + this.getContactPic(name, callback); + } else { + callback(this.avatars[name]); + } +}; diff --git a/lib/contacts.nsui.js b/lib/contacts.nsui.js index a67431a..71cfc03 100644 --- a/lib/contacts.nsui.js +++ b/lib/contacts.nsui.js @@ -38,25 +38,6 @@ ContactList.prototype.insertContact = function(elem) { } }; -ContactList.prototype.getContactPic = function(elem, infos) { - var xhr = new XMLHttpRequest(); - - xhr.open("GET", "http://www.epitech.eu/intra/photos/" + infos.name + ".jpg", true); - xhr.responseType = "blob"; - xhr.onload = (function(el) { - return function(e) { - if (e.target.status === 200) { - infos.avatar = window.webkitURL.createObjectURL(this.response); - } else { - infos.avatar= "img/default-avatar.jpg"; - } - - elem.style.backgroundImage = "url('" + infos.avatar + "')"; - }; - })(this); - xhr.send(); -} - ContactList.prototype.addContact = function(name) { var infos = {}, li = null, login = null, close = null; @@ -68,7 +49,9 @@ ContactList.prototype.addContact = function(name) { }; li = document.createElement("li"); - this.getContactPic(li, infos); + $cs.avatars.get(infos.name, function(url) { + li.style.backgroundImage = "url('" + url + "')"; + }); login = document.createElement("span"); close = document.createElement("span"); close.classList.add("remove"); diff --git a/manifest.json b/manifest.json index 0898ce0..c3cca9f 100644 --- a/manifest.json +++ b/manifest.json @@ -1,6 +1,6 @@ { "name": "Chromesoul", - "version": "0.4.2", + "version": "0.4.3", "minimum_chrome_version": "24", "manifest_version": 2, "offline_enabled": false, @@ -17,6 +17,7 @@ "http://www.epitech.eu/intra/photos/", "background", "storage", + "notifications", {"socket": ["tcp-connect:ns-server.epita.fr:4242"]} ] } diff --git a/start.js b/start.js index e053fc9..73a517a 100644 --- a/start.js +++ b/start.js @@ -3,7 +3,8 @@ var chromesoul = (function() { "opts": new OptionsManager(), "ui": new Nsui(), "contacts": new ContactList(), - "client": new NsClient() + "client": new NsClient(), + "avatars": new AvatarManager() }; return (window.chromesoul = window.$cs = chromesoul);