mirror of
https://github.com/ReVanced/revanced-patches.git
synced 2024-11-10 01:01:56 +01:00
feat(Sync for Reddit): Add Fix /user/ endpoint
patch
This commit is contained in:
parent
96e03caad1
commit
46d11f3530
9 changed files with 108 additions and 0 deletions
|
@ -828,6 +828,12 @@ public final class app/revanced/patches/reddit/customclients/syncforreddit/fix/s
|
||||||
public static final field INSTANCE Lapp/revanced/patches/reddit/customclients/syncforreddit/fix/slink/FixSLinksPatch;
|
public static final field INSTANCE Lapp/revanced/patches/reddit/customclients/syncforreddit/fix/slink/FixSLinksPatch;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public final class app/revanced/patches/reddit/customclients/syncforreddit/fix/user/FixUserEndpointPatch : app/revanced/patcher/patch/BytecodePatch {
|
||||||
|
public static final field INSTANCE Lapp/revanced/patches/reddit/customclients/syncforreddit/fix/user/FixUserEndpointPatch;
|
||||||
|
public fun execute (Lapp/revanced/patcher/data/BytecodeContext;)V
|
||||||
|
public synthetic fun execute (Lapp/revanced/patcher/data/Context;)V
|
||||||
|
}
|
||||||
|
|
||||||
public final class app/revanced/patches/reddit/customclients/syncforreddit/misc/integrations/IntegrationsPatch : app/revanced/patches/shared/misc/integrations/BaseIntegrationsPatch {
|
public final class app/revanced/patches/reddit/customclients/syncforreddit/misc/integrations/IntegrationsPatch : app/revanced/patches/shared/misc/integrations/BaseIntegrationsPatch {
|
||||||
public static final field INSTANCE Lapp/revanced/patches/reddit/customclients/syncforreddit/misc/integrations/IntegrationsPatch;
|
public static final field INSTANCE Lapp/revanced/patches/reddit/customclients/syncforreddit/misc/integrations/IntegrationsPatch;
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,60 @@
|
||||||
|
package app.revanced.patches.reddit.customclients.syncforreddit.fix.user
|
||||||
|
|
||||||
|
import app.revanced.patcher.data.BytecodeContext
|
||||||
|
import app.revanced.patcher.extensions.InstructionExtensions.getInstruction
|
||||||
|
import app.revanced.patcher.extensions.InstructionExtensions.replaceInstruction
|
||||||
|
import app.revanced.patcher.fingerprint.MethodFingerprint
|
||||||
|
import app.revanced.patcher.patch.BytecodePatch
|
||||||
|
import app.revanced.patcher.patch.annotation.CompatiblePackage
|
||||||
|
import app.revanced.patcher.patch.annotation.Patch
|
||||||
|
import app.revanced.patches.reddit.customclients.syncforreddit.fix.user.fingerprints.*
|
||||||
|
import app.revanced.patches.reddit.customclients.syncforreddit.fix.user.fingerprints.OAuthFriendRequestFingerprint
|
||||||
|
import app.revanced.patches.reddit.customclients.syncforreddit.fix.user.fingerprints.OAuthSubredditInfoRequestHelperFingerprint
|
||||||
|
import app.revanced.patches.reddit.customclients.syncforreddit.fix.user.fingerprints.OAuthUnfriendRequestFingerprint
|
||||||
|
import app.revanced.util.getReference
|
||||||
|
import app.revanced.util.resultOrThrow
|
||||||
|
import com.android.tools.smali.dexlib2.iface.instruction.OneRegisterInstruction
|
||||||
|
import com.android.tools.smali.dexlib2.iface.reference.StringReference
|
||||||
|
|
||||||
|
@Patch(
|
||||||
|
name = "Fix /user/ endpoint",
|
||||||
|
description = "Fixes the endpoint for viewing user profiles by replacing /u/ with /user/.",
|
||||||
|
compatiblePackages = [
|
||||||
|
CompatiblePackage("com.laurencedawson.reddit_sync"),
|
||||||
|
CompatiblePackage("com.laurencedawson.reddit_sync.pro"),
|
||||||
|
CompatiblePackage("com.laurencedawson.reddit_sync.dev"),
|
||||||
|
],
|
||||||
|
)
|
||||||
|
@Suppress("unused")
|
||||||
|
object FixUserEndpointPatch : BytecodePatch(
|
||||||
|
fingerprints = setOf(
|
||||||
|
OAuthFriendRequestFingerprint,
|
||||||
|
OAuthSubredditInfoRequestConstructorFingerprint,
|
||||||
|
OAuthSubredditInfoRequestHelperFingerprint,
|
||||||
|
OAuthUnfriendRequestFingerprint,
|
||||||
|
OAuthUserIdRequestFingerprint,
|
||||||
|
OAuthUserInfoRequestFingerprint,
|
||||||
|
),
|
||||||
|
) {
|
||||||
|
override fun execute(context: BytecodeContext) {
|
||||||
|
arrayOf(
|
||||||
|
OAuthFriendRequestFingerprint,
|
||||||
|
OAuthSubredditInfoRequestConstructorFingerprint,
|
||||||
|
OAuthSubredditInfoRequestHelperFingerprint,
|
||||||
|
OAuthUnfriendRequestFingerprint,
|
||||||
|
OAuthUserIdRequestFingerprint,
|
||||||
|
OAuthUserInfoRequestFingerprint,
|
||||||
|
).map(MethodFingerprint::resultOrThrow).map {
|
||||||
|
it.scanResult.stringsScanResult!!.matches.first().index to it.mutableMethod
|
||||||
|
}.forEach { (userPathStringIndex, method) ->
|
||||||
|
val userPathStringInstruction = method.getInstruction<OneRegisterInstruction>(userPathStringIndex)
|
||||||
|
val userPathStringRegister = userPathStringInstruction.registerA
|
||||||
|
val fixedUserPathString = userPathStringInstruction.getReference<StringReference>()!!.string.replace("u/", "user/")
|
||||||
|
|
||||||
|
method.replaceInstruction(
|
||||||
|
userPathStringIndex,
|
||||||
|
"const-string v$userPathStringRegister, \"${fixedUserPathString}\"",
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,10 @@
|
||||||
|
package app.revanced.patches.reddit.customclients.syncforreddit.fix.user.fingerprints
|
||||||
|
|
||||||
|
import app.revanced.patcher.fingerprint.MethodFingerprint
|
||||||
|
|
||||||
|
internal abstract class BaseUserEndpointFingerprint(source: String, accessFlags: Int? = null) :
|
||||||
|
MethodFingerprint(
|
||||||
|
accessFlags = accessFlags,
|
||||||
|
strings = listOf("u/"),
|
||||||
|
customFingerprint = { _, classDef -> classDef.sourceFile == source },
|
||||||
|
)
|
|
@ -0,0 +1,3 @@
|
||||||
|
package app.revanced.patches.reddit.customclients.syncforreddit.fix.user.fingerprints
|
||||||
|
|
||||||
|
internal object OAuthFriendRequestFingerprint : BaseUserEndpointFingerprint("OAuthFriendRequest.java")
|
|
@ -0,0 +1,10 @@
|
||||||
|
package app.revanced.patches.reddit.customclients.syncforreddit.fix.user.fingerprints
|
||||||
|
|
||||||
|
import app.revanced.patcher.extensions.or
|
||||||
|
import com.android.tools.smali.dexlib2.AccessFlags
|
||||||
|
|
||||||
|
internal object OAuthSubredditInfoRequestConstructorFingerprint :
|
||||||
|
BaseUserEndpointFingerprint(
|
||||||
|
"OAuthSubredditInfoRequest.java",
|
||||||
|
AccessFlags.PUBLIC or AccessFlags.CONSTRUCTOR,
|
||||||
|
)
|
|
@ -0,0 +1,10 @@
|
||||||
|
package app.revanced.patches.reddit.customclients.syncforreddit.fix.user.fingerprints
|
||||||
|
|
||||||
|
import app.revanced.patcher.extensions.or
|
||||||
|
import com.android.tools.smali.dexlib2.AccessFlags
|
||||||
|
|
||||||
|
internal object OAuthSubredditInfoRequestHelperFingerprint :
|
||||||
|
BaseUserEndpointFingerprint(
|
||||||
|
"OAuthSubredditInfoRequest.java",
|
||||||
|
AccessFlags.PRIVATE or AccessFlags.STATIC,
|
||||||
|
)
|
|
@ -0,0 +1,3 @@
|
||||||
|
package app.revanced.patches.reddit.customclients.syncforreddit.fix.user.fingerprints
|
||||||
|
|
||||||
|
internal object OAuthUnfriendRequestFingerprint : BaseUserEndpointFingerprint("OAuthUnfriendRequest.java")
|
|
@ -0,0 +1,3 @@
|
||||||
|
package app.revanced.patches.reddit.customclients.syncforreddit.fix.user.fingerprints
|
||||||
|
|
||||||
|
internal object OAuthUserIdRequestFingerprint : BaseUserEndpointFingerprint("OAuthUserIdRequest.java")
|
|
@ -0,0 +1,3 @@
|
||||||
|
package app.revanced.patches.reddit.customclients.syncforreddit.fix.user.fingerprints
|
||||||
|
|
||||||
|
internal object OAuthUserInfoRequestFingerprint : BaseUserEndpointFingerprint("OAuthUserInfoRequest.java")
|
Loading…
Reference in a new issue