Index: lams_central/src/java/org/lamsfoundation/lams/webservice/PresenceChatAction.java =================================================================== diff -u -re64a90c0cc74118c5b88f5cbae323065abd59cac -rbe6b9658350d706f615e5ce3e4a6b96b8513c5ee --- lams_central/src/java/org/lamsfoundation/lams/webservice/PresenceChatAction.java (.../PresenceChatAction.java) (revision e64a90c0cc74118c5b88f5cbae323065abd59cac) +++ lams_central/src/java/org/lamsfoundation/lams/webservice/PresenceChatAction.java (.../PresenceChatAction.java) (revision be6b9658350d706f615e5ce3e4a6b96b8513c5ee) @@ -88,7 +88,11 @@ // roster is used also to get messages by other users, so we need to synchronise on it synchronized (roster) { Date currentDate = new Date(currentTime); - activeUsers.put(nickname, currentDate); + + if (!StringUtils.isBlank(nickname)) { + // blank nickname means this is just check but user is not really using chat + activeUsers.put(nickname, currentDate); + } if (currentTime - lastCheckTime > IPresenceChatService.PRESENCE_IDLE_TIMEOUT) { // store active users @@ -104,7 +108,7 @@ } lastCheckTime = currentTime; - } else { + } else if (!StringUtils.isBlank(nickname)) { roster.put(nickname, currentDate); } @@ -123,13 +127,13 @@ HttpServletResponse response) { try { long lessonId = WebUtil.readLongParam(request, AttributeNames.PARAM_LESSON_ID); - boolean presenceShown = Boolean.parseBoolean(request.getParameter("presenceShown")); + boolean getMessages = Boolean.parseBoolean(request.getParameter("getMessages")); // this is the current user String nickname = request.getParameter("to"); - + JSONObject responseJSON = new JSONObject(); // no need to fetch messages if presence is collapsed - if (presenceShown) { + if (getMessages && !StringUtils.isBlank(nickname)) { // this is the other user from opened tab, null if it is group chat String from = request.getParameter("from"); if (StringUtils.isBlank(from)) { Index: lams_learning/web/includes/javascript/presence.js =================================================================== diff -u -re64a90c0cc74118c5b88f5cbae323065abd59cac -rbe6b9658350d706f615e5ce3e4a6b96b8513c5ee --- lams_learning/web/includes/javascript/presence.js (.../presence.js) (revision e64a90c0cc74118c5b88f5cbae323065abd59cac) +++ lams_learning/web/includes/javascript/presence.js (.../presence.js) (revision be6b9658350d706f615e5ce3e4a6b96b8513c5ee) @@ -214,18 +214,25 @@ // skip another attempt if previous did not return yet (slow server?) if (!pollInProgress) { pollInProgress = true; - var selected = presenceChatTabs.tabs('option','selected'); - var from = getUserFromTabIndex(selected); - if (groupChatInfo.nick == from) { - from = null; + var from = null; + var selected = null; + var lastMessageUid = null; + var getMessages = presenceShown && presenceImEnabled; + if (getMessages) { + selected = presenceChatTabs.tabs('option','active'); + from = getUserFromTabIndex(selected); + if (groupChatInfo.nick == from) { + from = null; + } + lastMessageUid = roster.lastMessageUids[from ? from : 'group']; } - + $.ajax({ url : actionUrl, data : {'method' : 'getChatContent', 'lessonID' : lessonId, - 'presenceShown' : presenceShown, - 'lastMessageUid' : roster.lastMessageUids[from ? from : 'group'], + 'getMessages' : getMessages, + 'lastMessageUid' : lastMessageUid, 'to' : nickname, 'from' : from }, Index: lams_learning/web/presenceChat.jsp =================================================================== diff -u -re64a90c0cc74118c5b88f5cbae323065abd59cac -rbe6b9658350d706f615e5ce3e4a6b96b8513c5ee --- lams_learning/web/presenceChat.jsp (.../presenceChat.jsp) (revision e64a90c0cc74118c5b88f5cbae323065abd59cac) +++ lams_learning/web/presenceChat.jsp (.../presenceChat.jsp) (revision be6b9658350d706f615e5ce3e4a6b96b8513c5ee) @@ -12,9 +12,9 @@ var lamsUrl = ""; var actionUrl = lamsUrl + "PresenceChat.do"; var lessonId = "${param.lessonID}"; - var presenceEnabled = "${param.presenceEnabledPatch}"; - var presenceShown = ${param.presenceShown == 'true'}; - var presenceImEnabled = "${param.presenceImEnabled}"; + var presenceEnabled = ${param.presenceEnabledPatch eq 'true'}; + var presenceShown = ${param.presenceShown eq 'true'}; + var presenceImEnabled = ${param.presenceImEnabled eq 'true'}; var nickname = "" + " " + ""; // labels used in JS file @@ -37,34 +37,28 @@ // otherwise enable presence chat else { // if presence im is enabled - if (presenceEnabled == 'true') { + if (presenceEnabled) { // make visible presenceChat.removeClass("startHidden"); // create chat tabs - presenceChatTabs = $("#presenceChatTabs").tabs({'scrollable' : true, - // set default class for new panel - 'panelTemplate' : '
' - }); - - // bind the select function to do extra stuff - presenceChatTabs.bind('tabsselect', function(event, ui) { - lastMessageUid = null; - // remove visual indicators of new message - var nick = getUserFromTabIndex(ui.index); - var tag = nickToTag(nick); - $("#" + tagToTabLabel(tag)).removeClass('presenceTabNewMessage'); - - if (nick != groupChatInfo.nick) { - $("#" + tagToListing(tag)).removeClass('presenceListingNewMessage'); + presenceChatTabs = $("#presenceChatTabs").tabs({ + 'scrollable' : true, + // set default class for new panel + 'panelTemplate' : '
', + 'activate' : function(event, ui) { + // remove visual indicators of new message + var nick = getUserFromTabIndex(presenceChatTabs.tabs('option','active')); + var tag = nickToTag(nick); + $("#" + tagToTabLabel(tag)).removeClass('presenceTabNewMessage'); + + if (nick != groupChatInfo.nick) { + $("#" + tagToListing(tag)).removeClass('presenceListingNewMessage'); + } + + updateChat(); } - - // scroll to the clicked tab - presenceChatTabs.tabs('scrollTo', ui.tab.offsetLeft); - }); - - // bind the show function to do extra stuff - presenceChatTabs.bind('tabsshow', updateChat); + }); } // create roster tab