Update YouTube-X (uYouPlus.xm)

This commit is contained in:
arichornlover 2024-07-30 15:27:56 -05:00 committed by GitHub
parent e91b64b248
commit c08e2fcfd5
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

View file

@ -105,6 +105,14 @@ NSBundle *tweakBundle = uYouPlusBundle();
- (void)decorateContext:(id)context { %orig(nil); } - (void)decorateContext:(id)context { %orig(nil); }
%end %end
%hook YTLocalPlaybackController
- (id)createAdsPlaybackCoordinator { return nil; }
%end
%hook MDXSession
- (void)adPlaying:(id)ad {}
%end
%hook YTReelInfinitePlaybackDataSource %hook YTReelInfinitePlaybackDataSource
- (void)setReels:(NSMutableOrderedSet <YTReelModel *> *)reels { - (void)setReels:(NSMutableOrderedSet <YTReelModel *> *)reels {
[reels removeObjectsAtIndexes:[reels indexesOfObjectsPassingTest:^BOOL(YTReelModel *obj, NSUInteger idx, BOOL *stop) { [reels removeObjectsAtIndexes:[reels indexesOfObjectsPassingTest:^BOOL(YTReelModel *obj, NSUInteger idx, BOOL *stop) {
@ -138,6 +146,12 @@ NSBundle *tweakBundle = uYouPlusBundle();
%hook YTAccountScopedAdsInnerTubeContextDecorator %hook YTAccountScopedAdsInnerTubeContextDecorator
- (void)decorateContext:(id)context { %orig(nil); } - (void)decorateContext:(id)context { %orig(nil); }
%end %end
%hook YTLocalPlaybackController
- (id)createAdsPlaybackCoordinator { return nil; }
%end
%hook MDXSession
- (void)adPlaying:(id)ad {}
%end
%hook YTReelInfinitePlaybackDataSource %hook YTReelInfinitePlaybackDataSource
- (void)setReels:(NSMutableOrderedSet <YTReelModel *> *)reels { - (void)setReels:(NSMutableOrderedSet <YTReelModel *> *)reels {
[reels removeObjectsAtIndexes:[reels indexesOfObjectsPassingTest:^BOOL(YTReelModel *obj, NSUInteger idx, BOOL *stop) { [reels removeObjectsAtIndexes:[reels indexesOfObjectsPassingTest:^BOOL(YTReelModel *obj, NSUInteger idx, BOOL *stop) {
@ -147,8 +161,6 @@ NSBundle *tweakBundle = uYouPlusBundle();
} }
%end %end
NSString *getAdString(NSString *description) { NSString *getAdString(NSString *description) {
if ([description containsString:@"ad_layout"])
return @"ad_layout";
if ([description containsString:@"brand_promo"]) if ([description containsString:@"brand_promo"])
return @"brand_promo"; return @"brand_promo";
if ([description containsString:@"carousel_footered_layout"]) if ([description containsString:@"carousel_footered_layout"])
@ -185,53 +197,48 @@ NSString *getAdString(NSString *description) {
return @"video_display_full_buttoned_layout"; return @"video_display_full_buttoned_layout";
return nil; return nil;
} }
static __strong NSData *cellDividerData; static BOOL isAdRenderer(YTIElementRenderer *elementRenderer, int kind) {
%hook YTIElementRenderer if ([elementRenderer respondsToSelector:@selector(hasCompatibilityOptions)] && elementRenderer.hasCompatibilityOptions && elementRenderer.compatibilityOptions.hasAdLoggingData) {
- (NSData *)elementData { HBLogDebug(@"YTX adLogging %d %@", kind, elementRenderer);
NSString *description = [self description]; return YES;
if ([description containsString:@"cell_divider"]) {
if (!cellDividerData) cellDividerData = %orig;
return cellDividerData;
}
if (!cellDividerData) return %orig;
if ([self respondsToSelector:@selector(hasCompatibilityOptions)] && self.hasCompatibilityOptions && self.compatibilityOptions.hasAdLoggingData) {
HBLogDebug(@"YTX adLogging 1 %@", cellDividerData);
return cellDividerData;
} }
NSString *description = [elementRenderer description];
NSString *adString = getAdString(description); NSString *adString = getAdString(description);
if (adString) { if (adString) {
HBLogDebug(@"YTX getAdString 1 %@ %@", adString, cellDividerData); HBLogDebug(@"YTX getAdString %d %@ %@", kind, adString, elementRenderer);
return cellDividerData; return YES;
} }
return %orig; return NO;
} }
%end static NSMutableArray <YTIItemSectionRenderer *> *filteredArray(NSArray <YTIItemSectionRenderer *> *array) {
%hook YTInnerTubeCollectionViewController NSMutableArray <YTIItemSectionRenderer *> *newArray = [array mutableCopy];
- (void)loadWithModel:(YTISectionListRenderer *)model { NSIndexSet *removeIndexes = [newArray indexesOfObjectsPassingTest:^BOOL(YTIItemSectionRenderer *sectionRenderer, NSUInteger idx, BOOL *stop) {
if ([model isKindOfClass:%c(YTISectionListRenderer)]) { if (![sectionRenderer isKindOfClass:%c(YTIItemSectionRenderer)])
NSMutableArray <YTISectionListSupportedRenderers *> *contentsArray = model.contentsArray;
NSIndexSet *removeIndexes = [contentsArray indexesOfObjectsPassingTest:^BOOL(YTISectionListSupportedRenderers *renderers, NSUInteger idx, BOOL *stop) {
if (![renderers isKindOfClass:%c(YTISectionListSupportedRenderers)])
return NO;
YTIItemSectionRenderer *sectionRenderer = renderers.itemSectionRenderer;
YTIItemSectionSupportedRenderers *firstObject = [sectionRenderer.contentsArray firstObject];
YTIElementRenderer *elementRenderer = firstObject.elementRenderer;
if ([elementRenderer respondsToSelector:@selector(hasCompatibilityOptions)] && elementRenderer.hasCompatibilityOptions && elementRenderer.compatibilityOptions.hasAdLoggingData) {
HBLogDebug(@"YTX adLogging 2 %@", elementRenderer);
return YES;
}
NSString *description = [elementRenderer description];
NSString *adString = getAdString(description);
if (adString) {
HBLogDebug(@"YTX getAdString 2 %@ %@", adString, elementRenderer);
return YES;
}
return NO; return NO;
}]; NSMutableArray <YTIItemSectionSupportedRenderers *> *contentsArray = sectionRenderer.contentsArray;
[contentsArray removeObjectsAtIndexes:removeIndexes]; if (contentsArray.count > 1) {
} NSIndexSet *removeContentsArrayIndexes = [contentsArray indexesOfObjectsPassingTest:^BOOL(YTIItemSectionSupportedRenderers *sectionSupportedRenderers, NSUInteger idx2, BOOL *stop2) {
YTIElementRenderer *elementRenderer = sectionSupportedRenderers.elementRenderer;
return isAdRenderer(elementRenderer, 3);
}];
[contentsArray removeObjectsAtIndexes:removeContentsArrayIndexes];
}
YTIItemSectionSupportedRenderers *firstObject = [contentsArray firstObject];
YTIElementRenderer *elementRenderer = firstObject.elementRenderer;
return isAdRenderer(elementRenderer, 2);
}];
[newArray removeObjectsAtIndexes:removeIndexes];
return newArray;
}
%hook YTInnerTubeCollectionViewController
- (void)displaySectionsWithReloadingSectionControllerByRenderer:(id)renderer {
NSMutableArray *sectionRenderers = [self valueForKey:@"_sectionRenderers"];
[self setValue:filteredArray(sectionRenderers) forKey:@"_sectionRenderers"];
%orig; %orig;
} }
- (void)addSectionsFromArray:(NSArray <YTIItemSectionRenderer *> *)array {
%orig(filteredArray(array));
}
%end %end
%end %end