diff --git a/pages/index.html b/pages/index.html
index 9a7bbc5..d849e7b 100644
--- a/pages/index.html
+++ b/pages/index.html
@@ -1,6 +1,6 @@
- ChatServer
+ Chat
diff --git a/pages/js/index.js b/pages/js/index.js
index 26bd47c..9c39251 100644
--- a/pages/js/index.js
+++ b/pages/js/index.js
@@ -8,7 +8,8 @@ $(document).ready(function () {
var nodes = cmsgs.children;
for (var x = 0; x < nodes.length; x++) {
var item = nodes[x];
- handlereceivedmessage(item);
+ if (item.tagName == "DIV")
+ handlereceivedmessage(item);
}
}
});
diff --git a/pages/js/receivemessage.js b/pages/js/receivemessage.js
index 78dd80b..54b6f3e 100644
--- a/pages/js/receivemessage.js
+++ b/pages/js/receivemessage.js
@@ -1,4 +1,4 @@
-var handlereceivedmessage = function handlereceivedmessage(msgnode) {
+function handlereceivedmessage(msgnode) {
var spans = msgnode.getElementsByTagName("span");
var ctime = null;
for (var i = 0; i < spans.length; i++)
@@ -9,22 +9,53 @@ var handlereceivedmessage = function handlereceivedmessage(msgnode) {
msgnode.scrollIntoView(false);
}
- (function poll() {
- setTimeout(function () {
- $.ajax({
- url: "/receivemessage", success: function (data) {
- console.log(data);
- var msgelement = document.getElementById("channelmessages").appendChild(document.createElement("div"));
- var header = msgelement.appendChild(document.createElement("p");
- header.innerText = data.sender.name + " - ";
- var isoFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss");
- isoFormat.setTimeZone(TimeZone.getTimeZone("UTC"));
- header.appendElement("span").addClass("converttime")
- .value = isoFormat.format(data.time) + "+00:00";
- var body = msgelement.appendChild(document.createElement("p"));
- body.innerText = data.message;
- handlereceivedmessage(msgnode);
- }, dataType: "json", complete: poll
- });
- }, 100);
- })();
\ No newline at end of file
+var unreadCount = 0;
+
+var updateUnreadCount = function () {
+ if (unreadCount > 0)
+ document.title = "(" + unreadCount + ") Chat";
+ else
+ document.title = "Chat";
+ var msgs = document.getElementById("channelmessages").children;
+ for (var i = msgs.length - 1; i >= 0; i--) {
+ if (i >= msgs.length - unreadCount)
+ msgs[i].style.backgroundColor = "darkgray";
+ else
+ msgs[i].style = "";
+ }
+};
+
+var addUnread = function addUnread() {
+ unreadCount++;
+ updateUnreadCount();
+};
+
+var resetUnread = function resetUnread() {
+ unreadCount = 0;
+ updateUnreadCount();
+};
+
+(function poll() {
+ setTimeout(function () {
+ $.ajax({
+ url: "/receivemessage", success: function (data) {
+ console.log(data);
+ var msgelement = document.getElementById("channelmessages").appendChild(document.createElement("div"));
+ var header = msgelement.appendChild(document.createElement("p"));
+ header.innerText = data.sender.name + " - ";
+ var span = header.appendChild(document.createElement("span"));
+ span.className = "converttime";
+ span.innerText = data.time;
+ var body = msgelement.appendChild(document.createElement("p"));
+ body.innerText = data.message;
+ handlereceivedmessage(msgelement);
+ addUnread();
+ }, dataType: "json", complete: poll
+ });
+ }, 100);
+})();
+
+$(document).ready(function () {
+ $('#msginput').on("focus", resetUnread);
+ $('#msginput').on("keydown", resetUnread);
+});
diff --git a/pages/js/sendmessage.js b/pages/js/sendmessage.js
index ce20cf9..b5f4dc4 100644
--- a/pages/js/sendmessage.js
+++ b/pages/js/sendmessage.js
@@ -17,11 +17,13 @@ var respfunc = function respfunc(result) {
else {
showError(result.responseText);
msginput.disabled = false;
+ msginput.focus();
}
}
else {
msginput.value = "";
msginput.disabled = false;
+ msginput.focus();
}
};
@@ -31,7 +33,7 @@ var sendmsgonenter = function sendmsgonenter(e) {
return;
}
e.preventDefault();
- var textarea = event.target;
+ var textarea = e.target;
if (textarea.value.trim().length == 0)
return;
textarea.disabled = true; //msginput
diff --git a/pages/js/utils.js b/pages/js/utils.js
index 01c0ade..8663fab 100644
--- a/pages/js/utils.js
+++ b/pages/js/utils.js
@@ -17,4 +17,4 @@ function showError(message) {
errormsg.innerHTML = message;
errormsg.style = "display: block";
setTimeout(function () { errormsg.style.display = "none"; }, 2000);
-}
\ No newline at end of file
+}
diff --git a/src/io/github/norbipeti/chat/server/page/IndexPage.java b/src/io/github/norbipeti/chat/server/page/IndexPage.java
index 27a9e29..990edaf 100644
--- a/src/io/github/norbipeti/chat/server/page/IndexPage.java
+++ b/src/io/github/norbipeti/chat/server/page/IndexPage.java
@@ -58,14 +58,9 @@ public class IndexPage extends Page {
cide.attr("id", "convidp");
cide.text(Long.toString(conv.getId()));
LogManager.getLogger().log(Level.DEBUG, "Messages: " + conv.getMesssageChunks().size());
- @SuppressWarnings("unchecked")
- LoaderCollection chunks = (LoaderCollection) conv.getMesssageChunks()
- .clone();
- Collections.reverse(chunks);
- for (MessageChunk chunk : chunks) {
- for (Message message : chunk.getMessages()) {
- message.getAsHTML(channelmessages);
- }
+ MessageChunk chunk = conv.getMesssageChunks().get(conv.getMesssageChunks().size() - 1);
+ for (Message message : chunk.getMessages()) {
+ message.getAsHTML(channelmessages);
}
return doc;
}, exchange);
diff --git a/src/io/github/norbipeti/chat/server/page/ReceiveMessageAjaxPage.java b/src/io/github/norbipeti/chat/server/page/ReceiveMessageAjaxPage.java
index 9aa4b67..6c29644 100644
--- a/src/io/github/norbipeti/chat/server/page/ReceiveMessageAjaxPage.java
+++ b/src/io/github/norbipeti/chat/server/page/ReceiveMessageAjaxPage.java
@@ -49,10 +49,14 @@ public class ReceiveMessageAjaxPage extends Page {
public static void sendMessageBack(Message msg, Conversation conv) throws IOException {
for (User user : conv.getUsers()) {
LogManager.getLogger().debug("User: " + user);
- if (exmap.containsKey(user)) {
+ if (exmap.containsKey(user)) { // TODO: Save new messages if not listening
LogManager.getLogger().debug("Exmap contains user");
JsonObject msgobj = msg.getAsJson();
- IOHelper.SendResponse(200, msgobj.toString(), exmap.get(user));
+ try {
+ IOHelper.SendResponse(200, msgobj.toString(), exmap.get(user));
+ } catch (IOException e) { // Remove users even if an error occurs (otherwise they may not be able to send a new message due to "headers already sent")
+ e.printStackTrace();
+ }
exmap.remove(user);
} else
LogManager.getLogger().warn("User is not listening: " + user);
diff --git a/src/io/github/norbipeti/chat/server/page/RegisterAjaxPage.java b/src/io/github/norbipeti/chat/server/page/RegisterAjaxPage.java
index f03405a..00c73d5 100644
--- a/src/io/github/norbipeti/chat/server/page/RegisterAjaxPage.java
+++ b/src/io/github/norbipeti/chat/server/page/RegisterAjaxPage.java
@@ -23,12 +23,12 @@ public class RegisterAjaxPage extends Page {
return; // TODO: Use JavaScript too, for error checks
}
for (User user : DataManager.getAll(User.class)) { // TODO: Optimize
- if (post.get("email").equals(user.getEmail())) {
- errormsg += "An user with this name already exists
";
+ if (post.get("email").getAsString().equals(user.getEmail())) {
+ errormsg += "An user with this E-mail already exists
";
break;
}
}
- if (!post.get("pass").equals(post.get("pass2")))
+ if (!post.get("pass").getAsString().equals(post.get("pass2").getAsString()))
errormsg += "The passwords don't match
";
if (errormsg.length() > 0) {
final String msg = errormsg;
diff --git a/src/io/github/norbipeti/chat/server/page/SendMessageAjaxPage.java b/src/io/github/norbipeti/chat/server/page/SendMessageAjaxPage.java
index 73e3018..00e55a0 100644
--- a/src/io/github/norbipeti/chat/server/page/SendMessageAjaxPage.java
+++ b/src/io/github/norbipeti/chat/server/page/SendMessageAjaxPage.java
@@ -69,7 +69,7 @@ public class SendMessageAjaxPage extends Page {
msg.setTime(new Date());
DataManager.save(conv);
LogManager.getLogger().log(Level.DEBUG,
- "Added conversation's message count: " + conv.getMesssageChunks().size());
+ "Added conversation's messagechunk count: " + conv.getMesssageChunks().size());
ReceiveMessageAjaxPage.sendMessageBack(msg, conv);