Update YouTube-X (uYouPlus.xm)
This commit is contained in:
parent
e91b64b248
commit
c08e2fcfd5
1 changed files with 48 additions and 41 deletions
|
|
@ -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
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue