Jelajahi Sumber

Fix #57 unread separator
Bugfix lastMsg lower than last read issue

isundil 6 tahun lalu
induk
melakukan
05fb554f96
4 mengubah file dengan 12 tambahan dan 5 penghapusan
  1. 3 1
      cli/ui.js
  2. 7 0
      cli/workflow.js
  3. 2 0
      srv/src/room.js
  4. 0 4
      srv/src/slackData.js

+ 3 - 1
cli/ui.js

@@ -334,7 +334,9 @@ function onRoomUpdated() {
                     firstTsCombo = msg.ts;
                     newGroupDom = true;
                 }
-                if ((!prevMsg || prevMsg.ts <= SELECTED_ROOM.lastRead) && msg.ts > SELECTED_ROOM.lastRead)
+                if (SELECTED_ROOM_UNREAD > -1 &&
+                        (!prevMsg || prevMsg.ts <= SELECTED_ROOM_UNREAD) &&
+                        msg.ts > SELECTED_ROOM_UNREAD)
                     dom.classList.add(R.klass.msg.firstUnread);
                 else
                     dom.classList.remove(R.klass.msg.firstUnread);

+ 7 - 0
cli/workflow.js

@@ -11,6 +11,11 @@ var
     **/
     SELECTED_ROOM = null,
 
+    /**
+     * @type {number}
+    **/
+    SELECTED_ROOM_UNREAD =-1,
+
     /**
      * @type {SimpleChatSystem|null}
     **/
@@ -173,6 +178,7 @@ function selectRoom(room) {
     document.body.classList.remove(R.klass.noRoomSelected);
     SELECTED_ROOM = room;
     SELECTED_CONTEXT = /** @type {SimpleChatSystem} */ (DATA.context.getChannelContext(room.id));
+    SELECTED_ROOM_UNREAD = room.lastRead;
     if (isNative())
         __native.setCurrentChannel(room.id);
     onRoomSelected();
@@ -299,6 +305,7 @@ function sendMsg(chan, msg, pendingObj, replyTo) {
         };
         url += "&attachments=" +HttpRequestWrapper.encode(JSON.stringify([attachment]));
     }
+    SELECTED_ROOM_UNREAD = -1;
     HttpRequestWrapper(HttpRequestMethod.POST, url).setResponseType(HttpRequestResponseType.JSON).callbackSuccess(function(code, text, resp) {
         if (resp && resp["pendingId"] !== undefined) {
             pendingObj.pendingId = resp["pendingId"];

+ 2 - 0
srv/src/room.js

@@ -106,6 +106,8 @@ Room.prototype.update = function(chanData, ctx, t, idPrefix) {
     if (chanData["is_member"] !== undefined) this.isMember = chanData["is_member"];
     if (chanData["last_read"] !== undefined) this.lastRead = Math.max(parseFloat(chanData["last_read"]), this.lastRead);
     if (chanData["last_msg"] !== undefined) this.lastMsg = parseFloat(chanData["last_msg"]);
+    if (this.lastMsg)
+        this.lastRead = Math.min(this.lastRead, this.lastMsg);
     if (chanData["is_private"] !== undefined) this.isPrivate = chanData["is_private"];
     if (chanData["pins"] !== undefined) this.pins = chanData["pins"];
     this.starred = !!chanData["is_starred"];

+ 0 - 4
srv/src/slackData.js

@@ -89,8 +89,6 @@ SlackChan.prototype.update = function(chanData, ctx, t, idPrefix) {
         else
             chanData["last_msg"] = chanData["last_read"];
     }
-    if (chanData["last_msg"] !== undefined && chanData["last_read"] !== undefined && chanData["last_msg"] < chanData["last_read"])
-        chanData["last_read"] = chanData["last_msg"];
     return Room.prototype.update.call(this, chanData, ctx, t, idPrefix);
 };
 
@@ -126,8 +124,6 @@ SlackIms.prototype.update = function(chanData, ctx, t, idPrefix) {
         else
             chanData["last_msg"] = chanData["last_read"];
     }
-    if (chanData["last_msg"] !== undefined && chanData["last_read"] !== undefined && chanData["last_msg"] < chanData["last_read"])
-        chanData["last_read"] = chanData["last_msg"];
     return PrivateMessageRoom.prototype.update.call(this, chanData, ctx, t, idPrefix);
 };