Skip to content
This repository has been archived by the owner on Sep 15, 2024. It is now read-only.

Commit

Permalink
fix: frs page filter not working when loading more pages
Browse files Browse the repository at this point in the history
  • Loading branch information
mkx173 committed Apr 6, 2024
1 parent 7e44bec commit 2648403
Show file tree
Hide file tree
Showing 3 changed files with 88 additions and 91 deletions.
2 changes: 1 addition & 1 deletion app/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ android {
minSdk 28
targetSdk sdk
versionCode gitCommitCount
versionName '2.9.7'
versionName '2.9.7.1'
buildConfigField "String", "TARGET_VERSION", "\"12.58.1.0\""
buildConfigField "String", "MIN_VERSION", "\"12.53.1.0\""

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,81 +19,67 @@ public String key() {

@Override
public void hook() throws Throwable {
// thread_list is deprecated
// XposedHelpers.findAndHookMethod("tbclient.FrsPage.DataRes$Builder", sClassLoader, "build", boolean.class, new XC_MethodHook() {
// @Override
// protected void beforeHookedMethod(final MethodHookParam param) throws Throwable {
// final var threadList = (List<?>) XposedHelpers.getObjectField(param.thisObject, "thread_list");
// if (threadList == null) return;
// final var pattern = getPattern();
// threadList.removeIf(o -> {
// if (pattern.matcher(Parser.parsePbContent(o, "first_post_content")).find()) {
// return true;
// }
//
// final var strings = new String[]{(String) XposedHelpers.getObjectField(o, "title"),
// (String) XposedHelpers.getObjectField(o, "fname")};
// if (Arrays.stream(strings).anyMatch(s -> pattern.matcher(s).find())) {
// return true;
// }
//
// final var author = XposedHelpers.getObjectField(o, "author");
// final var authors = new String[]{(String) XposedHelpers.getObjectField(author, "name"),
// (String) XposedHelpers.getObjectField(author, "name_show")};
// return Arrays.stream(authors).anyMatch(s -> pattern.matcher(s).find());
// });
// }
// });
XposedHelpers.findAndHookMethod("tbclient.FrsPage.PageData$Builder", sClassLoader, "build", boolean.class, new XC_MethodHook() {
@Override
protected void beforeHookedMethod(final MethodHookParam param) throws Throwable {
List<?> feedList = (List<?>) XposedHelpers.getObjectField(param.thisObject, "feed_list");
if (feedList == null) return;
final var pattern = getPattern();
feedList.removeIf(
o -> {
Object currFeed = XposedHelpers.getObjectField(o, "feed");
if (currFeed != null) {
List<?> businessInfo = (List<?>) XposedHelpers.getObjectField(currFeed, "business_info");
for (var feedKV : businessInfo) {
String currKey = XposedHelpers.getObjectField(feedKV, "key").toString();
if (currKey.equals("title") || currKey.equals("abstract")) {
String str = XposedHelpers.getObjectField(feedKV, "value").toString();
if (pattern.matcher(str).find()) {
return true;
}
}
filterPageData(param.thisObject);
}
});

XposedHelpers.findAndHookMethod("tbclient.ThreadList.PageData$Builder", sClassLoader, "build", boolean.class, new XC_MethodHook() {
@Override
protected void beforeHookedMethod(final MethodHookParam param) throws Throwable {
filterPageData(param.thisObject);
}
});
}

private void filterPageData(Object pageData) {
List<?> feedList = (List<?>) XposedHelpers.getObjectField(pageData, "feed_list");
if (feedList == null) return;
final var pattern = getPattern();
feedList.removeIf(
o -> {
Object currFeed = XposedHelpers.getObjectField(o, "feed");
if (currFeed != null) {
List<?> businessInfo = (List<?>) XposedHelpers.getObjectField(currFeed, "business_info");
for (var feedKV : businessInfo) {
String currKey = XposedHelpers.getObjectField(feedKV, "key").toString();
if (currKey.equals("title") || currKey.equals("abstract")) {
String str = XposedHelpers.getObjectField(feedKV, "value").toString();
if (pattern.matcher(str).find()) {
return true;
}
}
}

List<?> components = (List<?>) XposedHelpers.getObjectField(currFeed, "components");
if (components != null ){
for (var component: components) {
if (XposedHelpers.getObjectField(component, "component").toString().equals("feed_head")) {
Object feedHead = XposedHelpers.getObjectField(component, "feed_head");
List<?> mainData = (List<?>) XposedHelpers.getObjectField(feedHead, "main_data");
if (mainData != null) {
for (var feedHeadSymbol: mainData) {
Object feedHeadText = XposedHelpers.getObjectField(feedHeadSymbol, "text");
if (feedHeadText != null) {
String username = (String) XposedHelpers.getObjectField(feedHeadText, "text");
if (username != null) {
if (pattern.matcher(username).find()) {
return true;
}
break;
}
List<?> components = (List<?>) XposedHelpers.getObjectField(currFeed, "components");
if (components != null ){
for (var component: components) {
if (XposedHelpers.getObjectField(component, "component").toString().equals("feed_head")) {
Object feedHead = XposedHelpers.getObjectField(component, "feed_head");
List<?> mainData = (List<?>) XposedHelpers.getObjectField(feedHead, "main_data");
if (mainData != null) {
for (var feedHeadSymbol: mainData) {
Object feedHeadText = XposedHelpers.getObjectField(feedHeadSymbol, "text");
if (feedHeadText != null) {
String username = (String) XposedHelpers.getObjectField(feedHeadText, "text");
if (username != null) {
if (pattern.matcher(username).find()) {
return true;
}
break;
}
}
break;
}
}
break;
}
}
return false;
}
);
}
});
}
return false;
}
);
}
}
65 changes: 38 additions & 27 deletions app/src/main/java/gm/tieba/tabswitch/hooker/eliminate/Purge.java
Original file line number Diff line number Diff line change
Expand Up @@ -346,36 +346,17 @@ protected void beforeHookedMethod(MethodHookParam param) throws Throwable {
}
});
}
// 吧页面头条贴(41), 直播贴(69 / is_live_card)
// 吧页面
XposedHelpers.findAndHookMethod("tbclient.FrsPage.PageData$Builder", sClassLoader, "build", boolean.class, new XC_MethodHook() {
@Override
protected void beforeHookedMethod(final MethodHookParam param) throws Throwable {
List<?> feedList = (List<?>) XposedHelpers.getObjectField(param.thisObject, "feed_list");
if (feedList != null) {
feedList.removeIf(
o -> {
Object currFeed = XposedHelpers.getObjectField(o, "feed");
if (currFeed != null) {
List<?> businessInfo = (List<?>) XposedHelpers.getObjectField(currFeed, "business_info");
for (var feedKV : businessInfo) {
String currentKey = XposedHelpers.getObjectField(feedKV, "key").toString();
if (currentKey.equals("thread_type")) {
var currValue = XposedHelpers.getObjectField(feedKV, "value").toString();
if (currValue.equals("41") || currValue.equals("69")) {
return true;
}
} else if (currentKey.equals("is_live_card")) {
var currValue = XposedHelpers.getObjectField(feedKV, "value").toString();
if (currValue.equals("1")) {
return true;
}
}
}
}
return false;
}
);
}
purgePageData(param.thisObject);
}
});
XposedHelpers.findAndHookMethod("tbclient.ThreadList.PageData$Builder", sClassLoader, "build", boolean.class, new XC_MethodHook() {
@Override
protected void beforeHookedMethod(final MethodHookParam param) throws Throwable {
purgePageData(param.thisObject);
}
});
// 聊天-AI角色
Expand Down Expand Up @@ -407,4 +388,34 @@ protected void beforeHookedMethod(final MethodHookParam param) throws Throwable
}
});
}

// 吧页面头条贴(41), 直播贴(69 / is_live_card)
private void purgePageData(Object pageData) {
List<?> feedList = (List<?>) XposedHelpers.getObjectField(pageData, "feed_list");
if (feedList != null) {
feedList.removeIf(
o -> {
Object currFeed = XposedHelpers.getObjectField(o, "feed");
if (currFeed != null) {
List<?> businessInfo = (List<?>) XposedHelpers.getObjectField(currFeed, "business_info");
for (var feedKV : businessInfo) {
String currentKey = XposedHelpers.getObjectField(feedKV, "key").toString();
if (currentKey.equals("thread_type")) {
var currValue = XposedHelpers.getObjectField(feedKV, "value").toString();
if (currValue.equals("41") || currValue.equals("69")) {
return true;
}
} else if (currentKey.equals("is_live_card")) {
var currValue = XposedHelpers.getObjectField(feedKV, "value").toString();
if (currValue.equals("1")) {
return true;
}
}
}
}
return false;
}
);
}
}
}

0 comments on commit 2648403

Please sign in to comment.