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);