generated from ReVanced/revanced-patches-template
-
-
Notifications
You must be signed in to change notification settings - Fork 211
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
feat(twitch):
block-video-ads
patch (#1040)
Co-authored-by: oSumAtrIX <johan.melkonyan1@web.de>
- Loading branch information
1 parent
1ce0625
commit 0ac1dc5
Showing
5 changed files
with
124 additions
and
0 deletions.
There are no files selected for viewing
10 changes: 10 additions & 0 deletions
10
src/main/kotlin/app/revanced/patches/twitch/ad/video/annotations/VideoAdsCompatibility.kt
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,10 @@ | ||
package app.revanced.patches.twitch.ad.video.annotations | ||
|
||
import app.revanced.patcher.annotation.Compatibility | ||
import app.revanced.patcher.annotation.Package | ||
|
||
@Compatibility([Package("tv.twitch.android.app")]) | ||
@Target(AnnotationTarget.CLASS) | ||
@Retention(AnnotationRetention.RUNTIME) | ||
internal annotation class VideoAdsCompatibility | ||
|
16 changes: 16 additions & 0 deletions
16
src/main/kotlin/app/revanced/patches/twitch/ad/video/fingerprints/AdsManagerFingerprint.kt
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,16 @@ | ||
package app.revanced.patches.twitch.ad.video.fingerprints | ||
|
||
import app.revanced.patcher.annotation.Name | ||
import app.revanced.patcher.annotation.Version | ||
|
||
import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint | ||
import app.revanced.patches.twitch.ad.video.annotations.VideoAdsCompatibility | ||
|
||
@Name("ads-manager-play-fingerprint") | ||
@VideoAdsCompatibility | ||
@Version("0.0.1") | ||
object AdsManagerFingerprint : MethodFingerprint( | ||
customFingerprint = { method -> | ||
method.definingClass.endsWith("AdsManagerImpl;") && method.name == "playAds" | ||
} | ||
) |
22 changes: 22 additions & 0 deletions
22
.../app/revanced/patches/twitch/ad/video/fingerprints/CheckAdEligibilityLambdaFingerprint.kt
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,22 @@ | ||
package app.revanced.patches.twitch.ad.video.fingerprints | ||
|
||
import app.revanced.patcher.annotation.Name | ||
import app.revanced.patcher.annotation.Version | ||
import app.revanced.patcher.extensions.or | ||
|
||
import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint | ||
import app.revanced.patches.twitch.ad.video.annotations.VideoAdsCompatibility | ||
import org.jf.dexlib2.AccessFlags | ||
|
||
@Name("check-ad-eligibility-fingerprint") | ||
@VideoAdsCompatibility | ||
@Version("0.0.1") | ||
object CheckAdEligibilityLambdaFingerprint : MethodFingerprint( | ||
"L", | ||
AccessFlags.PRIVATE or AccessFlags.FINAL or AccessFlags.STATIC, | ||
listOf("L", "L", "L"), | ||
customFingerprint = { method -> | ||
method.definingClass.endsWith("AdEligibilityFetcher;") && | ||
method.name.contains("shouldRequestAd") | ||
} | ||
) |
16 changes: 16 additions & 0 deletions
16
...tlin/app/revanced/patches/twitch/ad/video/fingerprints/ContentConfigShowAdsFingerprint.kt
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,16 @@ | ||
package app.revanced.patches.twitch.ad.video.fingerprints | ||
|
||
import app.revanced.patcher.annotation.Name | ||
import app.revanced.patcher.annotation.Version | ||
|
||
import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint | ||
import app.revanced.patches.twitch.ad.video.annotations.VideoAdsCompatibility | ||
|
||
@Name("content-config-show-ads-fingerprint") | ||
@VideoAdsCompatibility | ||
@Version("0.0.1") | ||
object ContentConfigShowAdsFingerprint : MethodFingerprint( | ||
customFingerprint = { method -> | ||
method.definingClass.endsWith("ContentConfigData;") && method.name == "getShowAds" | ||
} | ||
) |
60 changes: 60 additions & 0 deletions
60
src/main/kotlin/app/revanced/patches/twitch/ad/video/patch/VideoAdsPatch.kt
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,60 @@ | ||
package app.revanced.patches.twitch.ad.video.patch | ||
|
||
import app.revanced.patcher.annotation.Description | ||
import app.revanced.patcher.annotation.Name | ||
import app.revanced.patcher.annotation.Version | ||
import app.revanced.patcher.data.BytecodeContext | ||
import app.revanced.patcher.extensions.addInstruction | ||
import app.revanced.patcher.extensions.addInstructions | ||
import app.revanced.patcher.patch.BytecodePatch | ||
import app.revanced.patcher.patch.PatchResult | ||
import app.revanced.patcher.patch.PatchResultSuccess | ||
import app.revanced.patcher.patch.annotations.Patch | ||
import app.revanced.patches.twitch.ad.video.annotations.VideoAdsCompatibility | ||
import app.revanced.patches.twitch.ad.video.fingerprints.AdsManagerFingerprint | ||
import app.revanced.patches.twitch.ad.video.fingerprints.CheckAdEligibilityLambdaFingerprint | ||
import app.revanced.patches.twitch.ad.video.fingerprints.ContentConfigShowAdsFingerprint | ||
|
||
@Patch | ||
@Name("block-video-ads") | ||
@Description("Blocks video ads in streams and VODs.") | ||
@VideoAdsCompatibility | ||
@Version("0.0.1") | ||
class VideoAdsPatch : BytecodePatch( | ||
listOf( | ||
ContentConfigShowAdsFingerprint, | ||
AdsManagerFingerprint, | ||
CheckAdEligibilityLambdaFingerprint | ||
) | ||
) { | ||
override fun execute(context: BytecodeContext): PatchResult { | ||
// Pretend our player is ineligible for all ads | ||
with(CheckAdEligibilityLambdaFingerprint.result!!) { | ||
mutableMethod.addInstructions( | ||
0, | ||
""" | ||
const/4 v0, 0 | ||
invoke-static {v0}, Lio/reactivex/Single;->just(Ljava/lang/Object;)Lio/reactivex/Single; | ||
move-result-object p0 | ||
return-object p0 | ||
""" | ||
) | ||
} | ||
|
||
// Spoof showAds JSON field | ||
with(ContentConfigShowAdsFingerprint.result!!) { | ||
mutableMethod.addInstructions(0, """ | ||
const/4 v0, 0 | ||
return v0 | ||
""" | ||
) | ||
} | ||
|
||
// Block playAds call | ||
with(AdsManagerFingerprint.result!!) { | ||
mutableMethod.addInstruction(0, "return-void") | ||
} | ||
|
||
return PatchResultSuccess() | ||
} | ||
} |