Skip to content

Commit 558a571

Browse files
committed
解决被引用的消息被撤回后的显示问题
1 parent 2c35775 commit 558a571

File tree

4 files changed

+61
-6
lines changed

4 files changed

+61
-6
lines changed

client/src/main/java/cn/wildfirechat/model/QuoteInfo.java

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,8 @@
1515

1616
public class QuoteInfo implements Parcelable {
1717
private long messageUid;
18+
// 本地使用
19+
private Message message;
1820
private String userId;
1921
private String userDisplayName;
2022
private String messageDigest;
@@ -27,6 +29,14 @@ public void setMessageUid(long messageUid) {
2729
this.messageUid = messageUid;
2830
}
2931

32+
public void setMessage(Message message) {
33+
this.message = message;
34+
}
35+
36+
public Message getMessage() {
37+
return this.message;
38+
}
39+
3040
public String getUserId() {
3141
return userId;
3242
}
@@ -53,6 +63,7 @@ public void setMessageDigest(String messageDigest) {
5363

5464
public static QuoteInfo initWithMessage(Message message) {
5565
QuoteInfo info = new QuoteInfo();
66+
info.message = message;
5667
if (message != null) {
5768
info.messageUid = message.messageUid;
5869
info.userId = message.sender;

client/src/main/java/cn/wildfirechat/remote/ChatManager.java

Lines changed: 27 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -185,6 +185,7 @@
185185
import cn.wildfirechat.model.NullGroupInfo;
186186
import cn.wildfirechat.model.NullUserInfo;
187187
import cn.wildfirechat.model.PCOnlineInfo;
188+
import cn.wildfirechat.model.QuoteInfo;
188189
import cn.wildfirechat.model.ReadEntry;
189190
import cn.wildfirechat.model.SecretChatInfo;
190191
import cn.wildfirechat.model.Socks5ProxyInfo;
@@ -3421,6 +3422,32 @@ public void onFailure(int errorCode) throws RemoteException {
34213422
}
34223423
}
34233424

3425+
public void loadRemoteQuotedMessage(Message message) {
3426+
if (!(message.content instanceof TextMessageContent)) {
3427+
return;
3428+
}
3429+
TextMessageContent textMessageContent = (TextMessageContent) message.content;
3430+
QuoteInfo quoteInfo = textMessageContent.getQuoteInfo();
3431+
if (quoteInfo == null || quoteInfo.getMessageUid() == 0) {
3432+
return;
3433+
}
3434+
3435+
this.getRemoteMessage(quoteInfo.getMessageUid(), new GetOneRemoteMessageCallback() {
3436+
@Override
3437+
public void onSuccess(Message msg) {
3438+
textMessageContent.getQuoteInfo().setMessage(msg);
3439+
for (OnMessageUpdateListener listener : messageUpdateListeners) {
3440+
listener.onMessageUpdate(message);
3441+
}
3442+
}
3443+
3444+
@Override
3445+
public void onFail(int errorCode) {
3446+
3447+
}
3448+
});
3449+
}
3450+
34243451
/**
34253452
* 获取远程历史消息
34263453
*
@@ -3433,12 +3460,10 @@ public void getRemoteMessage(long messageUid, GetOneRemoteMessageCallback callba
34333460
}
34343461

34353462
try {
3436-
List<Message> outMsgs = new ArrayList<>();
34373463
mClient.getRemoteMessage(messageUid, new IGetRemoteMessagesCallback.Stub() {
34383464
@Override
34393465
public void onSuccess(List<Message> messages, boolean hasMore) throws RemoteException {
34403466
if (callback != null) {
3441-
outMsgs.addAll(messages);
34423467
if (!hasMore) {
34433468
mainHandler.post(() -> {
34443469
callback.onSuccess(messages.get(0));

client/src/main/java/cn/wildfirechat/remote/GetOneRemoteMessageCallback.java

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,12 +4,10 @@
44

55
package cn.wildfirechat.remote;
66

7-
import java.util.List;
8-
97
import cn.wildfirechat.message.Message;
108

119
public interface GetOneRemoteMessageCallback {
12-
void onSuccess(Message messages);
10+
void onSuccess(Message message);
1311

1412
void onFail(int errorCode);
1513
}

uikit/src/main/java/cn/wildfire/chat/kit/conversation/message/viewholder/TextMessageContentViewHolder.java

Lines changed: 22 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@
3333
import cn.wildfirechat.message.PTextMessageContent;
3434
import cn.wildfirechat.message.TextMessageContent;
3535
import cn.wildfirechat.message.VideoMessageContent;
36+
import cn.wildfirechat.message.notification.RecallMessageContent;
3637
import cn.wildfirechat.model.QuoteInfo;
3738
import cn.wildfirechat.remote.ChatManager;
3839

@@ -95,12 +96,32 @@ public boolean onLinkClick(String link) {
9596
quoteInfo = textMessageContent.getQuoteInfo();
9697
if (quoteInfo != null && quoteInfo.getMessageUid() > 0) {
9798
refTextView.setVisibility(View.VISIBLE);
98-
refTextView.setText(quoteInfo.getUserDisplayName() + ": " + quoteInfo.getMessageDigest());
99+
refTextView.setText(this.quoteMessageDigest(quoteInfo));
99100
} else {
100101
refTextView.setVisibility(View.GONE);
101102
}
102103
}
103104

105+
private String quoteMessageDigest(QuoteInfo quoteInfo) {
106+
Message message = quoteInfo.getMessage();
107+
if (message == null) {
108+
message = ChatManager.Instance().getMessageByUid(quoteInfo.getMessageUid());
109+
}
110+
String desc;
111+
if (message != null) {
112+
if (message.content instanceof RecallMessageContent) {
113+
desc = "消息已被撤回";
114+
} else {
115+
desc = message.content.digest(message);
116+
}
117+
} else {
118+
desc = "消息不可用,可能被删除或者过期";
119+
ChatManager.Instance().loadRemoteQuotedMessage(this.message.message);
120+
}
121+
122+
return desc;
123+
}
124+
104125
public void onClick(View view) {
105126
String content = ((TextMessageContent) message.message.content).getContent();
106127
WfcWebViewActivity.loadHtmlContent(fragment.getActivity(), "消息内容", content);

0 commit comments

Comments
 (0)