Skip to content

Commit 89f8026

Browse files
committed
Add Check timestamp in deleted for all
Signed-off-by: Dev4Mod <[email protected]>
1 parent 2a7bae0 commit 89f8026

File tree

3 files changed

+60
-9
lines changed

3 files changed

+60
-9
lines changed

app/src/main/java/com/wmods/wppenhacer/xposed/core/devkit/Unobfuscator.java

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1800,4 +1800,20 @@ public static Method loadMediaQualitySelectionMethod(ClassLoader classLoader) th
18001800
return methodData.get(0).getMethodInstance(classLoader);
18011801
});
18021802
}
1803+
1804+
public static Field loadFmessageTimestampField(ClassLoader classLoader) throws Exception {
1805+
return UnobfuscatorCache.getInstance().getField(classLoader, () -> {
1806+
var fmessageClass = loadFMessageClass(classLoader);
1807+
var chatLimitDelete2Method = Unobfuscator.loadChatLimitDelete2Method(classLoader);
1808+
var usingFields = dexkit.getMethodData(chatLimitDelete2Method).getUsingFields();
1809+
for (var uField : usingFields) {
1810+
var field = uField.getField();
1811+
if (field.getDeclaredClass().getName().equals(fmessageClass.getName())
1812+
&& field.getType().getName().equals(long.class.getName())) {
1813+
return field.getFieldInstance(classLoader);
1814+
}
1815+
}
1816+
throw new RuntimeException("FMessage Timestamp method not found");
1817+
});
1818+
}
18031819
}

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

Lines changed: 42 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,8 @@
1010
import com.wmods.wppenhacer.xposed.core.devkit.Unobfuscator;
1111
import com.wmods.wppenhacer.xposed.utils.ReflectionUtils;
1212

13+
import java.util.Set;
14+
1315
import de.robv.android.xposed.XC_MethodHook;
1416
import de.robv.android.xposed.XSharedPreferences;
1517
import de.robv.android.xposed.XposedBridge;
@@ -28,6 +30,8 @@ public void doHook() throws Throwable {
2830

2931
var chatLimitDeleteMethod = Unobfuscator.loadChatLimitDeleteMethod(classLoader);
3032
var chatLimitDelete2Method = Unobfuscator.loadChatLimitDelete2Method(classLoader);
33+
var fmessageTimestampMethod = Unobfuscator.loadFmessageTimestampField(classLoader);
34+
3135
var epUpdateMethod = Unobfuscator.loadEphemeralInsertdb(classLoader);
3236

3337
XposedHelpers.findAndHookMethod("com.whatsapp.HomeActivity", classLoader, "onCreate", Bundle.class, new XC_MethodHook() {
@@ -57,14 +61,45 @@ protected void afterHookedMethod(MethodHookParam param) throws Throwable {
5761
// Others.propsInteger.put(3272, Integer.MAX_VALUE);
5862
// }
5963

60-
XposedBridge.hookMethod(chatLimitDeleteMethod, new XC_MethodHook() {
61-
@Override
62-
protected void afterHookedMethod(MethodHookParam param) throws Throwable {
63-
if (ReflectionUtils.isCalledFromMethod(chatLimitDelete2Method) && revokeallmessages) {
64-
param.setResult(0L);
64+
65+
if (revokeallmessages) {
66+
XposedBridge.hookMethod(chatLimitDelete2Method, new XC_MethodHook() {
67+
private Unhook unhooked;
68+
69+
@Override
70+
protected void beforeHookedMethod(MethodHookParam param) throws Throwable {
71+
var list = ReflectionUtils.findArrayOfType(param.args, Set.class);
72+
if (list.isEmpty()) return;
73+
var listMessages = (Set) list.get(0).second;
74+
var isExpired = false;
75+
for (var fmessageObj : listMessages) {
76+
var timestamp = fmessageTimestampMethod.getLong(fmessageObj);
77+
// verify message is expired (max: 3 days)
78+
if (System.currentTimeMillis() - timestamp > 3 * 24 * 60 * 60 * 1000) {
79+
isExpired = true;
80+
break;
81+
}
82+
}
83+
if (!isExpired) {
84+
unhooked = XposedBridge.hookMethod(chatLimitDeleteMethod, new XC_MethodHook() {
85+
@Override
86+
protected void afterHookedMethod(MethodHookParam param) throws Throwable {
87+
if (ReflectionUtils.isCalledFromMethod(chatLimitDelete2Method)) {
88+
param.setResult(0L);
89+
}
90+
}
91+
});
92+
}
6593
}
66-
}
67-
});
94+
95+
@Override
96+
protected void afterHookedMethod(MethodHookParam param) throws Throwable {
97+
if (unhooked != null) {
98+
unhooked.unhook();
99+
}
100+
}
101+
});
102+
}
68103

69104
var seeMoreMethod = Unobfuscator.loadSeeMoreConstructor(classLoader);
70105
XposedBridge.hookMethod(seeMoreMethod, new XC_MethodHook() {

app/src/main/res/values/strings.xml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -82,8 +82,8 @@
8282
<string name="dev4mod">Dev4Mod (Contributor)</string>
8383
<string name="disable_pinned_limit">Disable Pinned Chats Limit</string>
8484
<string name="disable_pinned_limit_sum">Disable limit of 3 pinned chats</string>
85-
<string name="delete_for_everyone_all_messages">\"Delete for everyone\" on all messages</string>
86-
<string name="delete_for_everyone_all_messages_sum">Remove the 24-hour limit on deleting a message for everyone</string>
85+
<string name="delete_for_everyone_all_messages">Increase limit of &quot;Delete for everyone&quot; option</string>
86+
<string name="delete_for_everyone_all_messages_sum">Increases the limit to 3 days in the option to delete messages for everyone</string>
8787
<string name="antirevoke_buttons_desable">Disabled</string>
8888
<string name="antirevoke_buttons_show_text">Show Text</string>
8989
<string name="antirevoke_buttons_show_icon">Show Icon</string>

0 commit comments

Comments
 (0)