From 4b90fdf8b9564dfb13f9b95955a2287e2f596499 Mon Sep 17 00:00:00 2001 From: NorbiPeti Date: Tue, 16 Aug 2016 12:51:06 +0200 Subject: [PATCH] Fixes and improvements - Fixed message receiving - Fixed message chunk loading - Added unread indicator - Other fixes --- pages/index.html | 2 +- pages/js/index.js | 3 +- pages/js/receivemessage.js | 71 +++++++++++++------ pages/js/sendmessage.js | 4 +- pages/js/utils.js | 2 +- .../norbipeti/chat/server/page/IndexPage.java | 11 +-- .../server/page/ReceiveMessageAjaxPage.java | 8 ++- .../chat/server/page/RegisterAjaxPage.java | 6 +- .../chat/server/page/SendMessageAjaxPage.java | 2 +- 9 files changed, 71 insertions(+), 38 deletions(-) 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);