mirror of
https://github.com/arichornlover/uYouEnhanced.git
synced 2026-05-05 14:59:06 +00:00
Merge branch 'arichornlover:main' into main
This commit is contained in:
commit
39e2d4e85d
4 changed files with 61 additions and 44 deletions
2
.gitmodules
vendored
2
.gitmodules
vendored
|
|
@ -45,7 +45,7 @@
|
|||
url = https://github.com/Muirey03/RemoteLog
|
||||
[submodule "Tweaks/DontEatMyContent"]
|
||||
path = Tweaks/DontEatMyContent
|
||||
url = https://github.com/therealFoxster/DontEatMyContent
|
||||
url = https://github.com/arichornloverALT/DontEatMyContent
|
||||
[submodule "Tweaks/iSponsorBlock"]
|
||||
path = Tweaks/iSponsorBlock
|
||||
url = https://github.com/Galactic-Dev/iSponsorBlock.git
|
||||
|
|
|
|||
|
|
@ -105,6 +105,14 @@ NSBundle *tweakBundle = uYouPlusBundle();
|
|||
- (void)decorateContext:(id)context { %orig(nil); }
|
||||
%end
|
||||
|
||||
%hook YTLocalPlaybackController
|
||||
- (id)createAdsPlaybackCoordinator { return nil; }
|
||||
%end
|
||||
|
||||
%hook MDXSession
|
||||
- (void)adPlaying:(id)ad {}
|
||||
%end
|
||||
|
||||
%hook YTReelInfinitePlaybackDataSource
|
||||
- (void)setReels:(NSMutableOrderedSet <YTReelModel *> *)reels {
|
||||
[reels removeObjectsAtIndexes:[reels indexesOfObjectsPassingTest:^BOOL(YTReelModel *obj, NSUInteger idx, BOOL *stop) {
|
||||
|
|
@ -138,6 +146,12 @@ NSBundle *tweakBundle = uYouPlusBundle();
|
|||
%hook YTAccountScopedAdsInnerTubeContextDecorator
|
||||
- (void)decorateContext:(id)context { %orig(nil); }
|
||||
%end
|
||||
%hook YTLocalPlaybackController
|
||||
- (id)createAdsPlaybackCoordinator { return nil; }
|
||||
%end
|
||||
%hook MDXSession
|
||||
- (void)adPlaying:(id)ad {}
|
||||
%end
|
||||
%hook YTReelInfinitePlaybackDataSource
|
||||
- (void)setReels:(NSMutableOrderedSet <YTReelModel *> *)reels {
|
||||
[reels removeObjectsAtIndexes:[reels indexesOfObjectsPassingTest:^BOOL(YTReelModel *obj, NSUInteger idx, BOOL *stop) {
|
||||
|
|
@ -147,8 +161,6 @@ NSBundle *tweakBundle = uYouPlusBundle();
|
|||
}
|
||||
%end
|
||||
NSString *getAdString(NSString *description) {
|
||||
if ([description containsString:@"ad_layout"])
|
||||
return @"ad_layout";
|
||||
if ([description containsString:@"brand_promo"])
|
||||
return @"brand_promo";
|
||||
if ([description containsString:@"carousel_footered_layout"])
|
||||
|
|
@ -185,53 +197,48 @@ NSString *getAdString(NSString *description) {
|
|||
return @"video_display_full_buttoned_layout";
|
||||
return nil;
|
||||
}
|
||||
static __strong NSData *cellDividerData;
|
||||
%hook YTIElementRenderer
|
||||
- (NSData *)elementData {
|
||||
NSString *description = [self description];
|
||||
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;
|
||||
static BOOL isAdRenderer(YTIElementRenderer *elementRenderer, int kind) {
|
||||
if ([elementRenderer respondsToSelector:@selector(hasCompatibilityOptions)] && elementRenderer.hasCompatibilityOptions && elementRenderer.compatibilityOptions.hasAdLoggingData) {
|
||||
HBLogDebug(@"YTX adLogging %d %@", kind, elementRenderer);
|
||||
return YES;
|
||||
}
|
||||
NSString *description = [elementRenderer description];
|
||||
NSString *adString = getAdString(description);
|
||||
if (adString) {
|
||||
HBLogDebug(@"YTX getAdString 1 %@ %@", adString, cellDividerData);
|
||||
return cellDividerData;
|
||||
HBLogDebug(@"YTX getAdString %d %@ %@", kind, adString, elementRenderer);
|
||||
return YES;
|
||||
}
|
||||
return %orig;
|
||||
return NO;
|
||||
}
|
||||
%end
|
||||
%hook YTInnerTubeCollectionViewController
|
||||
- (void)loadWithModel:(YTISectionListRenderer *)model {
|
||||
if ([model isKindOfClass:%c(YTISectionListRenderer)]) {
|
||||
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;
|
||||
}
|
||||
static NSMutableArray <YTIItemSectionRenderer *> *filteredArray(NSArray <YTIItemSectionRenderer *> *array) {
|
||||
NSMutableArray <YTIItemSectionRenderer *> *newArray = [array mutableCopy];
|
||||
NSIndexSet *removeIndexes = [newArray indexesOfObjectsPassingTest:^BOOL(YTIItemSectionRenderer *sectionRenderer, NSUInteger idx, BOOL *stop) {
|
||||
if (![sectionRenderer isKindOfClass:%c(YTIItemSectionRenderer)])
|
||||
return NO;
|
||||
}];
|
||||
[contentsArray removeObjectsAtIndexes:removeIndexes];
|
||||
}
|
||||
NSMutableArray <YTIItemSectionSupportedRenderers *> *contentsArray = sectionRenderer.contentsArray;
|
||||
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;
|
||||
}
|
||||
- (void)addSectionsFromArray:(NSArray <YTIItemSectionRenderer *> *)array {
|
||||
%orig(filteredArray(array));
|
||||
}
|
||||
%end
|
||||
%end
|
||||
|
||||
|
|
|
|||
|
|
@ -2,8 +2,8 @@
|
|||
|
||||
# pragma mark - YouTube patches
|
||||
|
||||
/*
|
||||
// Fix Google Sign in by @PoomSmart and @level3tjg (qnblackcat/uYouPlus#684)
|
||||
%group gGoogleSignInPatch
|
||||
%hook NSBundle
|
||||
- (NSDictionary *)infoDictionary {
|
||||
NSMutableDictionary *info = %orig.mutableCopy;
|
||||
|
|
@ -12,7 +12,7 @@
|
|||
return info;
|
||||
}
|
||||
%end
|
||||
*/
|
||||
%end
|
||||
|
||||
// Workaround for MiRO92/uYou-for-YouTube#12, qnblackcat/uYouPlus#263
|
||||
%hook YTDataUtils
|
||||
|
|
@ -98,6 +98,7 @@ typedef NS_ENUM(NSInteger, ShareEntityType) {
|
|||
ShareEntityFieldVideo = 1,
|
||||
ShareEntityFieldPlaylist = 2,
|
||||
ShareEntityFieldChannel = 3,
|
||||
ShareEntityFieldPost = 6,
|
||||
ShareEntityFieldClip = 8
|
||||
};
|
||||
|
||||
|
|
@ -110,6 +111,7 @@ static inline NSString* extractIdWithFormat(GPBUnknownFieldSet *fields, NSIntege
|
|||
NSString *id = [[NSString alloc] initWithData:[idField.lengthDelimitedList firstObject] encoding:NSUTF8StringEncoding];
|
||||
return [NSString stringWithFormat:format, id];
|
||||
}
|
||||
|
||||
static BOOL showNativeShareSheet(NSString *serializedShareEntity, UIView *sourceView) {
|
||||
GPBMessage *shareEntity = [%c(GPBMessage) deserializeFromString:serializedShareEntity];
|
||||
GPBUnknownFieldSet *fields = shareEntity.unknownFields;
|
||||
|
|
@ -138,6 +140,9 @@ static BOOL showNativeShareSheet(NSString *serializedShareEntity, UIView *source
|
|||
if (!shareUrl)
|
||||
shareUrl = extractIdWithFormat(fields, ShareEntityFieldVideo, @"https://youtube.com/watch?v=%@");
|
||||
|
||||
if (!shareUrl)
|
||||
shareUrl = extractIdWithFormat(fields, ShareEntityFieldPost, @"https://youtube.com/post/%@");
|
||||
|
||||
if (!shareUrl)
|
||||
return NO;
|
||||
|
||||
|
|
@ -171,6 +176,7 @@ static BOOL showNativeShareSheet(NSString *serializedShareEntity, UIView *source
|
|||
}
|
||||
%end
|
||||
|
||||
|
||||
/* ------------------- iPhone Layout ------------------- */
|
||||
|
||||
%hook ELMPBShowActionSheetCommand
|
||||
|
|
@ -331,6 +337,9 @@ static void refreshUYouAppearance() {
|
|||
|
||||
%ctor {
|
||||
%init;
|
||||
if (IS_ENABLED(@"googleSignInPatch_enabled")) {
|
||||
%init(gGoogleSignInPatch);
|
||||
}
|
||||
// if (@available(iOS 16, *)) {
|
||||
// %init(iOS16);
|
||||
// }
|
||||
|
|
|
|||
|
|
@ -1340,6 +1340,7 @@ extern NSBundle *uYouPlusBundle();
|
|||
# pragma mark - Miscellaneous
|
||||
SECTION_HEADER(LOC(@"MISCELLANEOUS"));
|
||||
|
||||
SWITCH_ITEM2(LOC(@"YouTube Sign-In Patch"), LOC(@"When enabled, it will allow you to sign in on the YouTube App when sideloaded.\nUnwanted Side Effects: Most Icons in the app will be Invisible & Notifications might not work."), @"googleSignInPatch_enabled");
|
||||
SWITCH_ITEM2(LOC(@"ADBLOCK_WORKAROUND_LITE"), LOC(@"ADBLOCK_WORKAROUND_LITE_DESC"), @"uYouAdBlockingWorkaroundLite_enabled");
|
||||
SWITCH_ITEM2(LOC(@"ADBLOCK_WORKAROUND"), LOC(@"ADBLOCK_WORKAROUND_DESC"), @"uYouAdBlockingWorkaround_enabled");
|
||||
SWITCH_ITEM3(
|
||||
|
|
|
|||
Loading…
Reference in a new issue