Skip to content

Commit 963e618

Browse files
authored
v1.2.3
1 parent f369130 commit 963e618

39 files changed

Lines changed: 447 additions & 195 deletions

Files/Ads.x

Lines changed: 2 additions & 139 deletions
Original file line numberDiff line numberDiff line change
@@ -102,15 +102,11 @@ static NSMutableArray <YTIItemSectionRenderer *> *filteredArray(NSArray <YTIItem
102102
%end
103103

104104
%hook YTAdsInnerTubeContextDecorator
105-
- (void)decorateContext:(id)context {}
105+
- (void)decorateContext:(id)context { %orig(nil); }
106106
%end
107107

108108
%hook YTAccountScopedAdsInnerTubeContextDecorator
109-
- (void)decorateContext:(id)context {}
110-
%end
111-
112-
%hook YTIPlayerResponse
113-
- (BOOL)isMonetized { return NO; }
109+
- (void)decorateContext:(id)context { %orig(nil); }
114110
%end
115111

116112
%hook YTLocalPlaybackController
@@ -191,17 +187,6 @@ static NSMutableArray <YTIItemSectionRenderer *> *filteredArray(NSArray <YTIItem
191187
}
192188
%end
193189

194-
// Premium
195-
%hook YTColdConfig
196-
- (BOOL)cxClientDisableMementoPromotions { return YES; }
197-
%end
198-
199-
%hook YTHotConfig
200-
- (BOOL)iosPlayerClientSharedConfigShowPipClingPromo { return NO; }
201-
- (BOOL)liveChatEnableEngagementPanelPromo { return NO; }
202-
- (BOOL)livestreamClientConfigEnableCreationModesPromosTriggered { return NO; }
203-
%end
204-
205190
// NoYTPremium - @PoomSmart https://github.com/PoomSmart/NoYTPremium
206191
// Alert
207192
%hook YTCommerceEventGroupHandler
@@ -245,126 +230,4 @@ static NSMutableArray <YTIItemSectionRenderer *> *filteredArray(NSArray <YTIItem
245230
// Survey
246231
%hook YTSurveyController
247232
- (void)showSurveyWithRenderer:(id)arg1 surveyParentResponder:(id)arg2 {}
248-
%end
249-
250-
// Hide AI things
251-
%hook YTShortsSharedGalleryPresentationView
252-
- (BOOL)shouldShowAiMontageButton { return NO; }
253-
%end
254-
255-
%hook YTShortsSharedGalleryPresentationViewController
256-
- (BOOL)shouldShowAiMontageButton { return NO; }
257-
%end
258-
259-
%hook YTVideoSubtitleView
260-
- (BOOL)shouldShowAdBadge { return NO; }
261-
%end
262-
263-
%hook YTIPlayerCompanionAdsSupportedRenderers
264-
- (BOOL)hasAppPromoCompanionAdRenderer { return NO; }
265-
%end
266-
267-
%hook YTIRenderer
268-
- (id)appPromoAdCtaRenderer { return nil; }
269-
- (BOOL)hasAppPromoAdCtaRenderer { return NO; }
270-
%end
271-
272-
%hook YTIInStreamPlayerCtaAdsSupportedRenderers
273-
- (BOOL)hasAppPromoAdCtaRenderer { return NO; }
274-
%end
275-
276-
%hook YTInterstitialPromoViewController
277-
- (void)showInterstitialPromo:(id)arg1 enableClientImpressionThrottling:(BOOL)arg2 interstitialParentResponder:(id)arg3 {}
278-
- (void)showInterstitialPromo:(id)arg1 interstitialParentResponder:(id)arg2 {}
279-
%end
280-
281-
%hook YTMealbarPromoController
282-
- (id)promoRenderer { return nil; }
283-
- (void)showMealbarPromoWithEvent:(id)arg {}
284-
%end
285-
286-
%hook YTOfflineButtonPromoController
287-
- (void)showOfflinePromoWithRenderer:(id)arg1 endpoint:(id)arg2 parentResponder:(id)arg3 {}
288-
%end
289-
290-
%hook YTOfflineButtonPromoView
291-
- (id)initWithFrame:(CGRect)arg1 renderer:(id)arg2 attributedView:(id)arg3 formattedStringLabelDelegate:(id)arg4 offlineButtonPromoDelegate:(id)arg5 { return nil; }
292-
%end
293-
294-
%hook YTWatchMiniBarControlsView
295-
- (void)setTitle:(id)arg1 byline:(id)arg2 showingPaidPromotion:(BOOL)arg3 showingPremiumBadge:(BOOL)arg4 {}
296-
%end
297-
298-
%hook MDXFeatureFlags
299-
- (BOOL)areMementoPromotionsEnabled { return NO; }
300-
%end
301-
302-
%hook YTUserDefaults
303-
- (BOOL)enablePromoDebugToast { return NO; }
304-
- (BOOL)isPromoForced { return NO; }
305-
%end
306-
307-
%hook YTAppMealbarPromoController
308-
- (id)mealbarPromoController { return nil; }
309-
%end
310-
311-
%hook YTAppMealbarPromoControllerImpl
312-
- (id)mealbarPromoController { return nil; }
313-
%end
314-
315-
%hook YTSurveyPromosheet
316-
- (id)expandablePromosheetDelegate { return nil; }
317-
- (void)setExpandablePromosheetDelegate:(id)arg {}
318-
%end
319-
320-
%hook YTSPromotionServiceBlockImpl
321-
- (BOOL)createPromotion:(id)arg1 writer:(id)arg2 error:(NSError **)arg3 { return NO; }
322-
%end
323-
324-
%hook YTSPromotionServiceBlock
325-
- (BOOL)createPromotion:(id)arg1 writer:(id)arg2 error:(NSError **)arg3 { return NO; }
326-
%end
327-
328-
%hook YTPromosheetController
329-
- (BOOL)canPresentPromosheetWithGlobalThrottling:(BOOL)arg1 customizedThrottling:(id)arg2 shouldReplacePromosheet:(BOOL)arg3 { return NO; }
330-
- (void)setCurrentPromosheet:(id)arg {}
331-
%end
332-
333-
%hook YTWatchSurveyTriggerController
334-
- (id)initWithParentResponder:(id)arg1 promosheetController:(id)arg2 { return nil; }
335-
%end
336-
337-
%hook YTShareMainView
338-
- (BOOL)shouldShowPromo { return NO; }
339-
- (void)setPromoView:(id)arg {}
340-
%end
341-
342-
%hook YCHLiveChatActionPanelView
343-
- (BOOL)shouldShowUpsellButton { return NO; }
344-
%end
345-
346-
%hook YTPromosheetContainerView
347-
- (BOOL)shouldShowExpandButton { return NO; }
348-
- (void)setPromosheet:(id)arg {}
349-
- (void)setPromosheetDisplayed:(BOOL)arg {}
350-
- (void)setPromosheet:(id)arg1 animated:(BOOL)arg2 completion:(id)arg3 {}
351-
%end
352-
353-
%hook ELMPBShowBottomSheetCommand
354-
- (void)showMealbarPromoWithContainerView:(id)arg1 handler:(id)arg2 {}
355-
%end
356-
357-
%hook YTIElementRenderer
358-
- (NSData *)elementData {
359-
NSString *description = [self description];
360-
NSString *adString = getAdString(description);
361-
if (adString) return [NSData data];
362-
// NSArray *shortsToRemove = @[@"shorts_shelf.eml", @"shorts_video_cell.eml", @"6Shorts", @"eml.shorts-shelf"];
363-
// for (NSString *shorts in shortsToRemove) {
364-
// if (IS_ENABLED(HideShortsShelf) && [description containsString:shorts] && ![description containsString:@"history*"]) {
365-
// return nil;
366-
// }
367-
// }
368-
return %orig;
369-
}
370233
%end

Files/Feed.x

Lines changed: 52 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,49 @@
11
#import "Headers.h"
22

3+
// YTUnShorts (https://github.com/PoomSmart/YTUnShorts)
4+
static NSMutableArray <YTIItemSectionRenderer *> *filteredArray(NSArray <YTIItemSectionRenderer *> *array) {
5+
NSMutableArray <YTIItemSectionRenderer *> *newArray = [array mutableCopy];
6+
NSIndexSet *removeIndexes = [newArray indexesOfObjectsPassingTest:^BOOL(YTIItemSectionRenderer *sectionRenderer, NSUInteger idx, BOOL *stop) {
7+
if ([sectionRenderer isKindOfClass:%c(YTIShelfRenderer)]) {
8+
YTIShelfSupportedRenderers *content = ((YTIShelfRenderer *)sectionRenderer).content;
9+
YTIHorizontalListRenderer *horizontalListRenderer = content.horizontalListRenderer;
10+
NSMutableArray <YTIHorizontalListSupportedRenderers *> *itemsArray = horizontalListRenderer.itemsArray;
11+
NSIndexSet *removeItemsArrayIndexes = [itemsArray indexesOfObjectsPassingTest:^BOOL(YTIHorizontalListSupportedRenderers *horizontalListSupportedRenderers, NSUInteger idx2, BOOL *stop2) {
12+
YTIElementRenderer *elementRenderer = horizontalListSupportedRenderers.elementRenderer;
13+
NSString *description = [elementRenderer description];
14+
BOOL hasShorts = [description containsString:@"shorts_video_cell"];
15+
if (hasShorts) *stop2 = YES;
16+
return hasShorts;
17+
}];
18+
return removeItemsArrayIndexes.count > 0;
19+
}
20+
if ([sectionRenderer isKindOfClass:%c(YTIItemSectionRenderer)]) {
21+
NSString *description = [sectionRenderer description];
22+
if ([description containsString:@"shorts_shelf.eml"])
23+
return YES;
24+
}
25+
return NO;
26+
}];
27+
[newArray removeObjectsAtIndexes:removeIndexes];
28+
return newArray;
29+
}
30+
31+
%group Shorts
32+
%hook YTInnerTubeCollectionViewController
33+
34+
- (void)displaySectionsWithReloadingSectionControllerByRenderer:(id)renderer {
35+
NSMutableArray *sectionRenderers = [self valueForKey:@"_sectionRenderers"];
36+
[self setValue:filteredArray(sectionRenderers) forKey:@"_sectionRenderers"];
37+
%orig;
38+
}
39+
40+
- (void)addSectionsFromArray:(NSArray <YTIItemSectionRenderer *> *)array {
41+
%orig(filteredArray(array));
42+
}
43+
44+
%end
45+
%end
46+
347
// Hide Subbar
448
%hook YTMySubsFilterHeaderView
549
- (void)setChipFilterView:(id)arg1 { if (!IS_ENABLED(HideSubbar)) %orig; }
@@ -32,4 +76,11 @@
3276
// Hide search history and suggestions
3377
%hook YTPersonalizedSuggestionsCacheProvider
3478
- (id)activeCache { return IS_ENABLED(HideSearchHis) ? nil : %orig; }
35-
%end
79+
%end
80+
81+
%ctor {
82+
%init;
83+
if (IS_ENABLED(HideShortsShelf)) {
84+
%init(Shorts);
85+
}
86+
}

Files/Headers.h

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,7 @@
6767
#define HideSubbar @"YouModHideSubbar"
6868
#define HideGenMusicShelf @"YouModHideGenMusicShelf"
6969
#define HideFeedPost @"YouModHideFeedPost"
70-
// #define HideShortsShelf @"YouModHideShortsShelf"
70+
#define HideShortsShelf @"YouModHideShortsShelf"
7171
#define HideSearchHis @"YouModHideSearchHistoryAndSuggestions"
7272
#define HideSubButton @"YouModHideSubscribeButton"
7373
#define HideShoppingButton @"YouModHideShoppingButton"
@@ -78,6 +78,7 @@
7878
#define HideCastButtonPlayer @"YouModHideCastButtonPlayer"
7979
#define HidePrevButton @"YouModHidePrevButton"
8080
#define HideNextButton @"YouModHideNextButton"
81+
#define ReplacePrevNextButtons @"YouModReplacePrevNextButtons"
8182
#define RemoveDarkOverlay @"YouModRemoveDarkOverlay"
8283
#define RemoveAmbiant @"YouModRemoveAmbiantColors"
8384
#define HideEndScreenCards @"YouModHideEndScreenCards"
@@ -104,6 +105,9 @@
104105
#define PortFull @"YouModPortraitFullscreen"
105106
#define OldQualityPicker @"YouModUseOldQualityPicker"
106107
#define ExtraSpeed @"YouModAddExtraSpeed"
108+
#define DisableHints @"YouModDisableHints"
109+
#define ForceMiniPlayer @"YouModForceMiniPlayer"
110+
#define AlwaysShowSeekbar @"YouModAlwaysShowSeekbar"
107111
#define HideLikeButton @"YouModHideLikeButton"
108112
#define HideDisLikeButton @"YouModHideDisLikeButton"
109113
#define HideShareButton @"YouModHideShareButton"

Files/Player.x

Lines changed: 40 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -176,28 +176,41 @@ static void YouModAddEndTime(YTPlayerViewController *self, YTSingleVideoControll
176176
- (void)showConfirmAlert { IS_ENABLED(HideContentWarning) ? [self confirmAlertDidPressConfirm] : %orig; }
177177
%end
178178

179-
/*
179+
// Always show seekbar
180180
%hook YTInlinePlayerBarContainerView
181-
- (void)setPlayerBarAlpha:(CGFloat)alpha { %orig(1.0); } // Force seek bar i guess
181+
- (void)setPlayerBarAlpha:(CGFloat)alpha { IS_ENABLED(AlwaysShowSeekbar) ? %orig(1.0) : %orig; }
182182
%end
183-
*/
184183

185184
// Portrait Fullscreen
186185
%hook YTWatchViewController
187186
- (unsigned long long)allowedFullScreenOrientations { return IS_ENABLED(PortFull) ? UIInterfaceOrientationMaskAllButUpsideDown : %orig; }
188187
%end
189188

190-
// Disable Snap To Chapter (https://github.com/qnblackcat/uYouPlus/blob/main/uYouPlus.xm#L457-464) - GOT REMOVED
191-
// %hook YTSegmentableInlinePlayerBarView
192-
// - (void)didMoveToWindow { %orig; if (ytlBool(@"dontSnapToChapter")) self.enableSnapToChapter = NO; }
193-
// %end
189+
/* Disable Snap To Chapter (https://github.com/qnblackcat/uYouPlus/blob/main/uYouPlus.xm#L457-464) - GOT REMOVED
190+
%hook YTSegmentableInlinePlayerBarView
191+
- (void)didMoveToWindow { %orig; if (ytlBool(@"dontSnapToChapter")) self.enableSnapToChapter = NO; }
192+
%end
194193
195-
/*
196194
%hook YTModularPlayerBarController
197195
- (void)setEnableSnapToChapter:(BOOL)arg { %orig(NO); } // idk this works or not
198196
%end
199197
*/
200198

199+
// Replace previous/next buttons with back and forward
200+
%hook YTColdConfig
201+
- (BOOL)replaceNextPaddleWithFastForwardButtonForSingletonVods { return IS_ENABLED(ReplacePrevNextButtons) ? YES : %orig; }
202+
- (BOOL)replacePreviousPaddleWithRewindButtonForSingletonVods { return IS_ENABLED(ReplacePrevNextButtons) ? YES : %orig; }
203+
%end
204+
205+
%group ForceMiniPlayer
206+
%hook YTIMiniplayerRenderer
207+
%new
208+
- (BOOL)hasMinimizedEndpoint { return NO; }
209+
%new
210+
- (BOOL)hasPlaybackMode { return NO; }
211+
%end
212+
%end
213+
201214
// Extra speed - adapted from YouSpeed
202215
%group Speed
203216

@@ -279,6 +292,22 @@ static void YouModAddEndTime(YTPlayerViewController *self, YTSingleVideoControll
279292
%end
280293
%end
281294

295+
// Disable Hints
296+
%hook YTSettings
297+
- (BOOL)areHintsDisabled { return IS_ENABLED(DisableHints) ? YES : %orig; }
298+
- (void)setHintsDisabled:(BOOL)arg1 { IS_ENABLED(DisableHints) ? %orig(YES) : %orig; }
299+
%end
300+
301+
%hook YTSettingsImpl
302+
- (BOOL)areHintsDisabled { return IS_ENABLED(DisableHints) ? YES : %orig; }
303+
- (void)setHintsDisabled:(BOOL)arg1 { IS_ENABLED(DisableHints) ? %orig(YES) : %orig; }
304+
%end
305+
306+
%hook YTUserDefaults
307+
- (BOOL)areHintsDisabled { return IS_ENABLED(DisableHints) ? YES : %orig; }
308+
- (void)setHintsDisabled:(BOOL)arg1 { IS_ENABLED(DisableHints) ? %orig(YES) : %orig; }
309+
%end
310+
282311
%hook YTPlayerViewController
283312
- (void)loadWithPlayerTransition:(id)arg1 playbackConfig:(id)arg2 {
284313
%orig;
@@ -632,4 +661,7 @@ static void YouModAddEndTime(YTPlayerViewController *self, YTSingleVideoControll
632661
if (IS_ENABLED(GestureControls)) {
633662
%init(Gestures);
634663
}
664+
if (IS_ENABLED(ForceMiniPlayer)) {
665+
%init(ForceMiniPlayer);
666+
}
635667
}

0 commit comments

Comments
 (0)