Skip to content

Commit d28ae7f

Browse files
authored
Merge pull request #198 from sevetseh28/get_unread_fix
get_unread now uses unreadCount attribute from Chat object to return unread messages
2 parents 2a53132 + c611be6 commit d28ae7f

File tree

2 files changed

+37
-7
lines changed

2 files changed

+37
-7
lines changed

webwhatsapi/__init__.py

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -305,17 +305,20 @@ def get_all_chat_ids(self):
305305
"""
306306
return self.wapi_functions.getAllChatIds()
307307

308-
def get_unread(self, include_me=False, include_notifications=False):
308+
def get_unread(self, include_me=False, include_notifications=False, use_unread_count=False):
309309
"""
310310
Fetches unread messages
311+
311312
:param include_me: Include user's messages
312313
:type include_me: bool or None
313314
:param include_notifications: Include events happening on chat
314315
:type include_notifications: bool or None
316+
:param use_unread_count: If set uses chat's 'unreadCount' attribute to fetch last n messages from chat
317+
:type use_unread_count: bool
315318
:return: List of unread messages grouped by chats
316319
:rtype: list[MessageGroup]
317320
"""
318-
raw_message_groups = self.wapi_functions.getUnreadMessages(include_me, include_notifications)
321+
raw_message_groups = self.wapi_functions.getUnreadMessages(include_me, include_notifications, use_unread_count)
319322

320323
unread_messages = []
321324
for raw_message_group in raw_message_groups:

webwhatsapi/js/wapi.js

Lines changed: 32 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -627,7 +627,7 @@ function isChatMessage(message) {
627627
}
628628

629629

630-
window.WAPI.getUnreadMessages = function (includeMe, includeNotifications, done) {
630+
window.WAPI.getUnreadMessages = function (includeMe, includeNotifications, use_unread_count, done) {
631631
const chats = Store.Chat.models;
632632
let output = [];
633633
for (let chat in chats) {
@@ -643,10 +643,10 @@ window.WAPI.getUnreadMessages = function (includeMe, includeNotifications, done)
643643
for (let i = messages.length - 1; i >= 0; i--) {
644644
let messageObj = messages[i];
645645
if (messageObj.__x_isNewMsg || messageObj.__x_MustSent) {
646-
let message = WAPI.processMessageObj(messageObj, includeMe, includeNotifications);
646+
let message = WAPI.processMessageObj(messageObj, includeMe, includeNotifications);
647647
if(message){
648-
messageObj.__x_isNewMsg = false;
649-
messageObj.__x_MustSent = false;
648+
messageObj.__x_isNewMsg = false;
649+
messageObj.__x_MustSent = false;
650650
messageGroup.messages.unshift(message);
651651
}
652652
} else {
@@ -656,7 +656,34 @@ window.WAPI.getUnreadMessages = function (includeMe, includeNotifications, done)
656656

657657
if (messageGroup.messages.length > 0) {
658658
output.push(messageGroup);
659+
} else { // no messages with isNewMsg true
660+
if (use_unread_count) {
661+
let n = messageGroupObj.__x_unreadCount; // will use unreadCount attribute to fetch last n messages from sender
662+
for (let i = messages.length - 1; i >= 0; i--) {
663+
let messageObj = messages[i];
664+
if (n > 0) {
665+
if (!messageObj.__x_isSentByMe) {
666+
let message = WAPI.processMessageObj(messageObj, includeMe, includeNotifications);
667+
messageGroup.messages.unshift(message);
668+
n -= 1;
669+
}
670+
} else if (n === -1) { // chat was marked as unread so will fetch last message as unread
671+
if (!messageObj.__x_isSentByMe) {
672+
let message = WAPI.processMessageObj(messageObj, includeMe, includeNotifications);
673+
messageGroup.messages.unshift(message);
674+
break;
675+
}
676+
} else { // unreadCount = 0
677+
break;
678+
}
679+
}
680+
if (messageGroup.messages.length > 0) {
681+
messageGroupObj.__x_unreadCount = 0; // reset unread counter
682+
output.push(messageGroup);
683+
}
684+
}
659685
}
686+
660687
}
661688
if (done !== undefined) {
662689
done(output);
@@ -682,7 +709,7 @@ window.WAPI.markDefaultUnreadMessages = function (done) {
682709
if (messageObj.__x_isSentByMe) {
683710
break;
684711
} else {
685-
messageObj.__x_MustSent = true;
712+
messageObj.__x_MustSent = true;
686713
}
687714
}
688715
}

0 commit comments

Comments
 (0)