1010import com .netease .im .ReactCache ;
1111import com .netease .im .login .LoginService ;
1212import com .netease .im .session .extension .BankTransferAttachment ;
13+ import com .netease .im .session .extension .CustomAttachment ;
14+ import com .netease .im .session .extension .CustomAttachmentType ;
1315import com .netease .im .session .extension .DefaultCustomAttachment ;
1416import com .netease .im .session .extension .RedPacketAttachement ;
1517import com .netease .im .session .extension .RedPacketOpenAttachement ;
2830import com .netease .nimlib .sdk .msg .MsgService ;
2931import com .netease .nimlib .sdk .msg .MsgServiceObserve ;
3032import com .netease .nimlib .sdk .msg .attachment .FileAttachment ;
33+ import com .netease .nimlib .sdk .msg .attachment .MsgAttachment ;
3134import com .netease .nimlib .sdk .msg .constant .AttachStatusEnum ;
3235import com .netease .nimlib .sdk .msg .constant .MsgDirectionEnum ;
3336import com .netease .nimlib .sdk .msg .constant .MsgStatusEnum ;
@@ -122,8 +125,8 @@ public void onIncomingMessage(@NonNull List<IMMessage> messages) {
122125 if (addedListItems .size () > 0 ) {
123126 updateShowTimeItem (addedListItems , false );
124127 }
125-
126- refreshMessageList (addedListItems );
128+ List < IMMessage > r = onQuery ( messages );
129+ refreshMessageList (r );
127130
128131 }
129132
@@ -308,8 +311,7 @@ private void onMessageStatusChange(IMMessage message, boolean isSend) {
308311 List <IMMessage > list = new ArrayList <>(1 );
309312 list .add (message );
310313 Object a = ReactCache .createMessageList (list );
311- if (a != null )
312- ReactCache .emit (ReactCache .observeMsgStatus , a );
314+ ReactCache .emit (ReactCache .observeMsgStatus , a );
313315 }
314316 }
315317
@@ -428,11 +430,18 @@ public void onResult(int code, List<IMMessage> result, Throwable exception) {
428430 final int size = result .size ();
429431 boolean isLimit = size >= limit ;
430432 List <IMMessage > r = onQuery (result );
431- if (result .size () < size && isLimit ) {
432- fistMessage = result .get (0 );
433- queryMessageListEx (fistMessage , direction , result .size () - size , onMessageQueryListListener );
433+
434+ if (r .size () == 0 ) {
435+ queryMessageListEx (fistMessage , direction , size - r .size (), onMessageQueryListListener );
436+ } else {
437+ onMessageQueryListListener .onResult (code , r , timedItems );
438+
439+ if (r .size () < size && isLimit ) {
440+ fistMessage = result .get (0 );
441+ // queryMessageListEx(fistMessage, direction, size - r.size(), onMessageQueryListListener);
442+ }
434443 }
435- onMessageQueryListListener . onResult ( code , r , timedItems );
444+
436445 return ;
437446 }
438447 }
@@ -444,24 +453,24 @@ public void onResult(int code, List<IMMessage> result, Throwable exception) {
444453 List <IMMessage > onQuery (List <IMMessage > result ) {//TODO
445454
446455
447- // for (int i = result.size() - 1; i >= 0; i--) {
448- // IMMessage message = result.get(i);
449- // if (message == null) {
450- // result.remove(i);
451- // }
452- // MsgAttachment attachment = message.getAttachment();
453- // if (attachment != null) {
454- // if (message.getMsgType() == MsgTypeEnum.custom) {
455- // CustomAttachment customAttachment = (CustomAttachment) attachment;
456- // if (customAttachment.getType() == CustomAttachmentType.RedPacketOpen) {
457- // RedPacketOpenAttachement rpOpen = (RedPacketOpenAttachement) attachment;
458- // if (!rpOpen.isSelf()) {
459- // result.remove(i);
460- // }
461- // }
462- // }
463- // }
464- // }
456+ for (int i = result .size () - 1 ; i >= 0 ; i --) {
457+ IMMessage message = result .get (i );
458+ if (message == null ) {
459+ result .remove (i );
460+ }
461+ MsgAttachment attachment = message .getAttachment ();
462+ if (attachment != null ) {
463+ if (message .getMsgType () == MsgTypeEnum .custom ) {
464+ CustomAttachment customAttachment = (CustomAttachment ) attachment ;
465+ if (customAttachment .getType () == CustomAttachmentType .RedPacketOpen ) {
466+ RedPacketOpenAttachement rpOpen = (RedPacketOpenAttachement ) attachment ;
467+ if (!rpOpen .isSelf ()) {
468+ result .remove (i );
469+ }
470+ }
471+ }
472+ }
473+ }
465474 return result ;
466475 }
467476
@@ -536,8 +545,7 @@ private void refreshMessageList(List<IMMessage> messageList) {
536545 return ;
537546 }
538547 Object a = ReactCache .createMessageList (messageList );
539- if (a != null )
540- ReactCache .emit (ReactCache .observeReceiveMessage , a );
548+ ReactCache .emit (ReactCache .observeReceiveMessage , a );
541549 }
542550
543551 /**
@@ -704,15 +712,19 @@ public int sendForwardMessage(IMMessage selectMessage, final String sessionId, f
704712 return 2 ;
705713 }
706714
707- void revokMessage (IMMessage message ){
715+ void revokMessage (IMMessage message ) {
708716 WritableMap msg = Arguments .createMap ();
709717 msg .putString ("_id" , message .getUuid ());
710- ReactCache .emit (ReactCache .observeDeleteMessage ,msg );
718+ ReactCache .emit (ReactCache .observeDeleteMessage , msg );
711719 }
720+
712721 public int revokeMessage (final IMMessage selectMessage , final OnSendMessageListener onSendMessageListener ) {
713722 if (selectMessage == null ) {
714723 return 0 ;
715724 }
725+ if (MessageUtil .shouldIgnoreRevoke (selectMessage )) {
726+ return 1 ;
727+ }
716728 getMsgService ().revokeMessage (selectMessage ).setCallback (new RequestCallbackWrapper <Void >() {
717729 @ Override
718730 public void onResult (int code , Void aVoid , Throwable throwable ) {
@@ -799,6 +811,7 @@ private MemberPushOption createMemPushOption(List<String> selectedMembers, IMMes
799811 memberPushOption .setForcePushList (selectedMembers );
800812 return memberPushOption ;
801813 }
814+
802815 private boolean isOriginImageHasDownloaded (final IMMessage message ) {
803816
804817 if (message .getAttachStatus () == AttachStatusEnum .transferred ) {
0 commit comments