Skip to content

Commit cb7bd45

Browse files
committed
Refactor receipt handling to improve message visibility checks and streamline job creation
1 parent ecf6f29 commit cb7bd45

File tree

4 files changed

+25
-21
lines changed

4 files changed

+25
-21
lines changed

app/src/main/java/com/wmods/wppenhacer/xposed/core/db/MessageHistory.java

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,14 +9,12 @@
99

1010
import androidx.annotation.Nullable;
1111

12-
import com.wmods.wppenhacer.xposed.core.WppCore;
1312
import com.wmods.wppenhacer.xposed.core.components.FMessageWpp;
1413
import com.wmods.wppenhacer.xposed.utils.Utils;
1514

1615
import java.util.ArrayList;
1716
import java.util.List;
1817

19-
import de.robv.android.xposed.XposedHelpers;
2018
import lombok.AccessLevel;
2119
import lombok.AllArgsConstructor;
2220
import lombok.NoArgsConstructor;

app/src/main/java/com/wmods/wppenhacer/xposed/features/general/SeenTick.java

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -430,16 +430,17 @@ private void sendBlueTickMsg(FMessageWpp.UserJid userJid, ArrayList<FMessageWpp>
430430
String[] messageIds = entry.getValue().toArray(new String[0]);
431431
var participant = userJid.isGroup() ? userJidMsg.userJid : null;
432432

433-
WppCore.setPrivBoolean(messageIds[0] + "_rpass", true);
434433

435434
Object sendJob = XposedHelpers.newInstance(
436435
mSendReadClass, userJid.userJid, participant, null, null, messageIds, -1, 1L, false
437436
);
437+
XposedHelpers.setAdditionalInstanceField(sendJob, "blue_on_reply", true);
438438
WaJobManagerMethod.invoke(mWaJobManager, sendJob);
439439

440440
Object sendJob2 = XposedHelpers.newInstance(
441441
mSendReadClass, userJid.phoneJid, participant, null, null, messageIds, -1, 1L, false
442442
);
443+
XposedHelpers.setAdditionalInstanceField(sendJob2, "blue_on_reply", true);
443444
WaJobManagerMethod.invoke(mWaJobManager, sendJob2);
444445
}
445446
} catch (Throwable e) {
@@ -454,11 +455,15 @@ private void sendBlueTickStatus(FMessageWpp.UserJid currentJid) {
454455
var arr_s = statuses.stream().map(item -> item.getKey().messageID).toArray(String[]::new);
455456
Arrays.stream(arr_s).forEach(s -> MessageStore.getInstance().storeMessageRead(s));
456457
var userJidSender = WppCore.createUserJid("status@broadcast");
457-
WppCore.setPrivBoolean(arr_s[0] + "_rpass", true);
458+
458459
var sendJob = XposedHelpers.newInstance(mSendReadClass, userJidSender, currentJid.phoneJid, null, null, arr_s, -1, 0L, false);
460+
XposedHelpers.setAdditionalInstanceField(sendJob, "blue_on_reply", true);
459461
WaJobManagerMethod.invoke(mWaJobManager, sendJob);
462+
460463
var sendJob2 = XposedHelpers.newInstance(mSendReadClass, userJidSender, currentJid.userJid, null, null, arr_s, -1, 0L, false);
464+
XposedHelpers.setAdditionalInstanceField(sendJob2, "blue_on_reply", true);
461465
WaJobManagerMethod.invoke(mWaJobManager, sendJob2);
466+
462467
statuses.clear();
463468
} catch (Throwable e) {
464469
XposedBridge.log("Error: " + e.getMessage());

app/src/main/java/com/wmods/wppenhacer/xposed/features/privacy/HideReceipt.java

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -40,9 +40,11 @@ protected void beforeHookedMethod(MethodHookParam param) throws Throwable {
4040
var currentUserJid = new FMessageWpp.UserJid(userJid);
4141
var key = ReflectionUtils.getArg(param.args, FMessageWpp.Key.TYPE, 0);
4242
var fmessage = new FMessageWpp.Key(key).getFMessage();
43-
currentUserJid = fmessage.getKey().remoteJid;
44-
if (MessageHistory.getInstance().getHideSeenMessage(fmessage.getKey().remoteJid.getPhoneRawString(), fmessage.getKey().messageID, fmessage.isViewOnce() ? MessageHistory.MessageType.VIEW_ONCE_TYPE : MessageHistory.MessageType.MESSAGE_TYPE) != null) {
45-
return;
43+
if (fmessage != null) {
44+
currentUserJid = fmessage.getKey().remoteJid;
45+
if (MessageHistory.getInstance().getHideSeenMessage(fmessage.getKey().remoteJid.getPhoneRawString(), fmessage.getKey().messageID, fmessage.isViewOnce() ? MessageHistory.MessageType.VIEW_ONCE_TYPE : MessageHistory.MessageType.MESSAGE_TYPE) != null) {
46+
return;
47+
}
4648
}
4749
var privacy = CustomPrivacy.getJSON(currentUserJid.getPhoneNumber());
4850
var customHideReceipt = privacy.optBoolean("HideReceipt", hideReceipt);

app/src/main/java/com/wmods/wppenhacer/xposed/features/privacy/HideSeen.java

Lines changed: 13 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -47,14 +47,12 @@ public void doHook() throws Exception {
4747
@Override
4848
protected void beforeHookedMethod(MethodHookParam param) throws Throwable {
4949
if (!sendJob.isInstance(param.thisObject)) return;
50-
var srj = sendJob.cast(param.thisObject);
51-
var messageIds = (String[]) XposedHelpers.getObjectField(srj, "messageIds");
52-
var firstmessage = messageIds[0];
53-
if (firstmessage != null && WppCore.getPrivBoolean(firstmessage + "_rpass", false)) {
54-
WppCore.removePrivKey(firstmessage + "_rpass");
50+
var sendReadReceiptJob = sendJob.cast(param.thisObject);
51+
var messageIds = (String[]) XposedHelpers.getObjectField(sendReadReceiptJob, "messageIds");
52+
if (XposedHelpers.getAdditionalInstanceField(sendReadReceiptJob, "blue_on_reply") != null) {
5553
return;
5654
}
57-
var lid = (String) XposedHelpers.getObjectField(srj, "jid");
55+
var lid = (String) XposedHelpers.getObjectField(sendReadReceiptJob, "jid");
5856
var userJid = new FMessageWpp.UserJid(lid);
5957
if (userJid.isNull()) return;
6058
var privacy = CustomPrivacy.getJSON(userJid.getPhoneNumber());
@@ -68,7 +66,7 @@ protected void beforeHookedMethod(MethodHookParam param) throws Throwable {
6866
isHide = true;
6967
}
7068
} else if (userJid.isStatus()) {
71-
var participant = (String) XposedHelpers.getObjectField(srj, "participant");
69+
var participant = (String) XposedHelpers.getObjectField(sendReadReceiptJob, "participant");
7270
var customHideStatusView = CustomPrivacy.getJSON(WppCore.stripJID(participant)).optBoolean("HideViewStatus", hidestatusview);
7371
if (customHideStatusView || ghostmode) {
7472
param.setResult(null);
@@ -95,13 +93,14 @@ protected void beforeHookedMethod(MethodHookParam param) throws Throwable {
9593
XposedBridge.hookMethod(ReceiptMethod, new XC_MethodHook() {
9694
@Override
9795
protected void beforeHookedMethod(MethodHookParam param) throws Throwable {
98-
var keyObject = ReflectionUtils.getArg(param.args, FMessageWpp.Key.TYPE, 0);
99-
var fmessage = new FMessageWpp.Key(keyObject).getFMessage();
100-
var keyMessage = fmessage.getKey();
10196
if (WppCore.getCurrentConversation() != WppCore.getCurrentActivity()) return;
102-
DebugUtils.debugArgs(param.args);
103-
if (MessageHistory.getInstance().getHideSeenMessage(keyMessage.remoteJid.getUserRawString(), keyMessage.messageID, fmessage.isViewOnce() ? MessageHistory.MessageType.VIEW_ONCE_TYPE : MessageHistory.MessageType.MESSAGE_TYPE) != null) {
104-
return;
97+
var keyObject = ReflectionUtils.getArg(param.args, FMessageWpp.Key.TYPE, 0);
98+
var keyMessage = new FMessageWpp.Key(keyObject);
99+
var fmessage = keyMessage.getFMessage();
100+
if (fmessage != null) {
101+
if (MessageHistory.getInstance().getHideSeenMessage(keyMessage.remoteJid.getUserRawString(), keyMessage.messageID, fmessage.isViewOnce() ? MessageHistory.MessageType.VIEW_ONCE_TYPE : MessageHistory.MessageType.MESSAGE_TYPE) != null) {
102+
return;
103+
}
105104
}
106105
var userJid = ReflectionUtils.getArg(param.args, classLoader.loadClass("com.whatsapp.jid.Jid"), 0);
107106
if (userJid == null) return;
@@ -117,7 +116,7 @@ protected void beforeHookedMethod(MethodHookParam param) throws Throwable {
117116
param.args[msgTypeIdx] = null;
118117
}
119118

120-
if (param.args[msgTypeIdx] == null) {
119+
if (param.args[msgTypeIdx] == null && fmessage != null) {
121120
MessageHistory.getInstance().insertHideSeenMessage(keyMessage.remoteJid.getPhoneRawString(), keyMessage.messageID, fmessage.isViewOnce() ? MessageHistory.MessageType.VIEW_ONCE_TYPE : MessageHistory.MessageType.MESSAGE_TYPE, false);
122121
HideSeenView.updateAllBubbleViews();
123122
}

0 commit comments

Comments
 (0)