Compare commits
26
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
ae1dc1a701 | ||
|
|
f1eb708e08 | ||
|
|
9298cadbf8 | ||
|
|
efe8670c51 | ||
|
|
fb5781865c | ||
|
|
afb6bd9842 | ||
|
|
8ee749dad1 | ||
|
|
a38e37f6e9 | ||
|
|
ff5167af99 | ||
|
|
62b0168cff | ||
|
|
5d87e7ee1c | ||
|
|
6330c15d2e | ||
|
|
de4f2f7373 | ||
|
|
67aba1f2ad | ||
|
|
d89b146e3d | ||
|
|
0e2a4049c2 | ||
|
|
94b62ba4d3 | ||
|
|
a3165878aa | ||
|
|
702406f87f | ||
|
|
32bd36c423 | ||
|
|
82d7c39fdb | ||
|
|
4119cc4796 | ||
|
|
9763459838 | ||
|
|
ef0c1a8930 | ||
|
|
ca57262430 | ||
|
|
83c685c28f |
@@ -30,3 +30,7 @@
|
||||
path = Tweaks/YTSpeed
|
||||
url = https://github.com/qnblackcat/YTSpeed.git
|
||||
branch = main
|
||||
[submodule "Extensions"]
|
||||
path = Extensions
|
||||
url = https://github.com/CokePokes/YoutubeExtensions.git
|
||||
branch = main
|
||||
|
||||
Submodule
+1
Submodule Extensions added at a68d70883d
@@ -0,0 +1,33 @@
|
||||
#import "Tweaks/YouTubeHeader/YTPlayerViewController.h"
|
||||
|
||||
@interface YTMainAppVideoPlayerOverlayView : UIView
|
||||
-(UIViewController *)_viewControllerForAncestor;
|
||||
@end
|
||||
|
||||
@interface YTWatchMiniBarView : UIView
|
||||
@end
|
||||
|
||||
@interface YTAsyncCollectionView : UIView
|
||||
@end
|
||||
|
||||
@interface YTPlayerViewController (YTAFS)
|
||||
- (void)autoFullscreen;
|
||||
@end
|
||||
|
||||
@interface YTTopAlignedView : UIView
|
||||
@end
|
||||
|
||||
@interface YTLightweightQTMButton : UIView
|
||||
@end
|
||||
|
||||
@interface YTELMView : UIView
|
||||
@end
|
||||
|
||||
@interface NIAttributedLabel : UIView
|
||||
@end
|
||||
|
||||
@interface YTShareMainView : UIView
|
||||
@end
|
||||
|
||||
@interface UICollectionViewControllerWrapperView : UIView
|
||||
@end
|
||||
@@ -10,8 +10,8 @@ TWEAK_NAME = uYouPlus
|
||||
DISPLAY_NAME = YouTube
|
||||
BUNDLE_ID = com.google.ios.youtube
|
||||
|
||||
uYouPlus_FILES = uYouPlus.x
|
||||
uYouPlus_IPA = /path/to/decrypted/YouTube/IPA
|
||||
uYouPlus_FILES = uYouPlus.xm Settings.xm
|
||||
uYouPlus_IPA = ./tmp/Payload/YouTube.app
|
||||
### Important: edit the path to your decrypted YouTube IPA!!!
|
||||
|
||||
include $(THEOS)/makefiles/common.mk
|
||||
|
||||
@@ -15,17 +15,17 @@
|
||||
|
||||
# Credits
|
||||
|
||||
- [MiRO92](https://twitter.com/miro92?s=21) for [uYou](https://github.com/MiRO92/uYou-for-YouTube).
|
||||
- [MiRO92](https://twitter.com/miro92) for [uYou](https://github.com/MiRO92/uYou-for-YouTube).
|
||||
|
||||
- [Galactic-Dev](https://github.com/Galactic-Dev) and [Luewii](https://github.com/Luewii) for [iSponsorBlock](https://github.com/Galactic-Dev/iSponsorBlock).
|
||||
|
||||
- [Lillie](https://github.com/LillieWeeb001), [PoomSmart](https://twitter.com/poomsmart?s=21) and [kirb](https://twitter.com/hbkirb?s=21) for [YouTube Dislike Return](https://github.com/PoomSmart/Return-YouTube-Dislikes)
|
||||
- [Galactic-Dev](https://github.com/Galactic-Dev) and [Luewii](https://github.com/Luewii) for [iSponsorBlock](https://github.com/Galactic-Dev/iSponsorBlock) and [BigYTMiniPlayer](https://github.com/Galactic-Dev/BigYTMiniPlayer).
|
||||
|
||||
- [HASHBANG Productions](https://github.com/hbang) for [Alderis Color Picker](https://github.com/hbang/Alderis) - a dependency of iSponsorBlock.
|
||||
|
||||
- [PoomSmart](https://twitter.com/poomsmart?s=21) - the developer of many tweaks used by uYouPlus, include: [YouRememberCaption](https://www.ios-repo-updates.com/repository/poomsmart/package/com.ps.youremembercaption/), [YTClassicVideoQuality](https://poomsmart.github.io/repo/depictions/ytclassicvideoquality.html), [YTNoCheckLocalNetwork](https://poomsmart.github.io/repo/depictions/ytnochecklocalnetwork.html), [YTSystemAppearance](https://poomsmart.github.io/repo/depictions/ytsystemappearance.html), [YTUHD](https://poomsmart.github.io/repo/depictions/ytuhd.html) and [YouPiP](https://poomsmart.github.io/repo/depictions/youpip.html).
|
||||
- [PoomSmart](https://twitter.com/poomsmart) - the developer of many tweaks used by uYouPlus, include: [YouRememberCaption](https://www.ios-repo-updates.com/repository/poomsmart/package/com.ps.youremembercaption/), [YTClassicVideoQuality](https://poomsmart.github.io/repo/depictions/ytclassicvideoquality.html), [YTNoCheckLocalNetwork](https://poomsmart.github.io/repo/depictions/ytnochecklocalnetwork.html), [YTSystemAppearance](https://poomsmart.github.io/repo/depictions/ytsystemappearance.html), [YTAutoFullScreen](https://github.com/PoomSmart/YTAutoFullScreen/), [YTReExplore](https://github.com/PoomSmart/YTReExplore/), [YTUHD](https://poomsmart.github.io/repo/depictions/ytuhd.html), [YouPiP](https://poomsmart.github.io/repo/depictions/youpip.html), and [Return YouTube Dislike](https://github.com/PoomSmart/Return-YouTube-Dislikes)
|
||||
|
||||
- [level3tjg](https://twitter.com/level3tjg?s=21) - for [YTNoHoverCards](https://github.com/level3tjg/YTNoHoverCards).
|
||||
- [level3tjg](https://twitter.com/level3tjg) - for [YTNoHoverCards](https://github.com/level3tjg/YTNoHoverCards).
|
||||
|
||||
- [Lyvendia](https://github.com/Lyvendia/) for [YTSpeed](https://github.com/Lyvendia/YTSpeed/)
|
||||
|
||||
- [Al4ise](https://github.com/Al4ise) for [Azule](https://github.com/Al4ise/Azule), a tool used to inject jailbreak tweaks into jailed iOS apps.
|
||||
|
||||
@@ -43,17 +43,22 @@
|
||||
4. **YTUHD:** unlock VP9 codec and in effect, enables video quality of 2K and 4K. You can enable/disable YTUHD in YouTube Settings - Video quality preferences.
|
||||
|
||||
<details>
|
||||
<summary>And more...!</summary>
|
||||
<summary>And many more...!</summary>
|
||||
|
||||
5. **YTClassicVideoQuality:** since YouTube v16.xx, you need one more step to change the video quality. YTClassicVideoQuality brings back the old video quality selector, which is a lot better than the new one.
|
||||
5. **YTAutoFullScreen:** autoplay videos at full screen.
|
||||
|
||||
6. **YTNoHoverCards:** offer an option to enable/disable the annoying suggested videos show up at the end of the videos.
|
||||
6. **YTClassicVideoQuality:** since YouTube v16.xx, you need one more step to change the video quality. YTClassicVideoQuality brings back the old video quality selector, which is a lot better than the new one.
|
||||
|
||||
7. **YTSystemAppearance**: sync the YouTube theme (dark/light) with the system theme.
|
||||
7. **YTNoHoverCards:** offer an option to enable/disable the annoying suggested videos show up at the end of the videos.
|
||||
|
||||
8. **YTNoCheckLocalNetwork**: block the Local Network permission popup.
|
||||
8. **YTSystemAppearance**: sync the YouTube theme (dark/light) with the system theme.
|
||||
|
||||
9. **YTNoCheckLocalNetwork**: block the Local Network permission popup.
|
||||
|
||||
10. **YouRememberCaption**: make YouTube remember your video caption setting (if not already).
|
||||
|
||||
11. **YTSpeed**: add 2.25, 2.5, 2.75, and 3x playback speed
|
||||
|
||||
9. **YouRememberCaption**: make YouTube remember your video caption setting (if not already).
|
||||
</details>
|
||||
|
||||
# Known issues
|
||||
@@ -71,27 +76,32 @@
|
||||
|
||||
- My official AtlStore repo: https://qnblackcat.github.io/AltStore/
|
||||
|
||||
- [Open in AltStore (v17.12.5-2.1)](https://tinyurl.com/3jvhjbc8) - It will take a while to install because AltStore needs to download the IPA.
|
||||
- [Open in AltStore (v17.16.4-2.1)](https://tinyurl.com/2p8t49r2) - It will take a while to install because AltStore needs to download the IPA.
|
||||
|
||||
- Version info: _(last update: Apr 01)_
|
||||
- Version info: _(last update: Apr 25)_
|
||||
|
||||
<details>
|
||||
<summary> Expand</summary>
|
||||
|
||||
| **Tweaks/App** | **Version** | **Open source** |
|
||||
| :------------: | :----------:| :-------------: |
|
||||
| **YouTube** | 17.12.5 | ✖︎ |
|
||||
| **YouTube** | 17.16.4 | ✖︎ |
|
||||
| **uYou** | 2.1 | ✖︎ |
|
||||
| **Return YouTube Dislike** | 1.6.4 | [✔︎](https://github.com/PoomSmart/Return-YouTube-Dislikes) |
|
||||
| **iSponsorBlock** | 1.0-14 | [✔︎](https://github.com/Galactic-Dev/iSponsorBlock) |
|
||||
| **Alderis Color Picker** | 1.1.2| [✔︎](https://github.com/hbang/Alderis) |
|
||||
| **YouRememberCaption** | 1.0.0 | [✔︎](https://www.ios-repo-updates.com/repository/poomsmart/package/com.ps.youremembercaption/) |
|
||||
| **YouRememberCaption** | 1.0.0 | [✔︎](https://poomsmart.github.io/repo/depictions/youremembercaption.html) |
|
||||
| **YTClassicVideoQuality** | 1.0.1 | [✔︎](https://github.com/PoomSmart/YTClassicVideoQuality) |
|
||||
| **YTNoCheckLocalNetwork** | 1.0.2 | [✔︎](https://poomsmart.github.io/repo/depictions/ytnochecklocalnetwork.html) |
|
||||
| **YTNoHoverCards** | 0.0.3 | [✔︎](https://github.com/level3tjg/YTNoHoverCards) |
|
||||
| **YTSystemAppearance** | 1.0.0 | [✔︎](https://poomsmart.github.io/repo/depictions/ytsystemappearance.html) |
|
||||
| **YTUHD** | 1.2.6 | [✔︎](https://github.com/PoomSmart/YTUHD) |
|
||||
| **YouPiP** | 1.6.9 | [✔︎](https://github.com/PoomSmart/YouPiP) |
|
||||
| **YTUHD** | 1.2.7 | [✔︎](https://github.com/PoomSmart/YTUHD) |
|
||||
| **YouPiP** | 1.6.11 | [✔︎](https://github.com/PoomSmart/YouPiP) |
|
||||
| **YTSpeed** | 1.0.1 | [✔︎](https://github.com/Lyvendia/YTSpeed) |
|
||||
| **YTAutoFullScreen** | 1.0.3 | [✔︎](https://github.com/PoomSmart/YTAutoFullScreen/) |
|
||||
| **YTReExplore** | 1.0.2 | [✔︎](https://github.com/PoomSmart/YTReExplore) |
|
||||
| **BigYTMiniPlayer** | 1.0-1 | [✔︎](https://github.com/Galactic-Dev/BigYTMiniPlayer) |
|
||||
| **YTCastConfirm** | 1.0.0 | [✔︎](https://github.com/JamieBerghmans/YTCastConfirm) |
|
||||
|
||||
</details>
|
||||
|
||||
@@ -123,11 +133,6 @@ See [Installation - Wiki](https://github.com/qnblackcat/uYouPlus/wiki/Installati
|
||||
- Venmo: https://venmo.com/u/DavidBrett
|
||||
</details>
|
||||
|
||||
<details>
|
||||
<summary>Lillie</summary>
|
||||
|
||||
- Patreon: https://patreon.com/lillieweeb
|
||||
</details>
|
||||
|
||||
# FAQ
|
||||
|
||||
|
||||
+115
@@ -0,0 +1,115 @@
|
||||
#import "Tweaks/YouTubeHeader/YTSettingsSectionItem.h"
|
||||
|
||||
extern BOOL hideHUD();
|
||||
extern BOOL oled();
|
||||
extern BOOL autoFullScreen();
|
||||
extern BOOL noHoverCard();
|
||||
extern BOOL ReExplore();
|
||||
extern BOOL bigYTMiniPlayer();
|
||||
extern BOOL hideCC();
|
||||
extern BOOL hideAutoplaySwitch();
|
||||
extern BOOL castConfirm();
|
||||
|
||||
// Settings
|
||||
%hook YTSettingsViewController
|
||||
- (void)setSectionItems:(NSMutableArray <YTSettingsSectionItem *>*)sectionItems forCategory:(NSInteger)category title:(NSString *)title titleDescription:(NSString *)titleDescription headerHidden:(BOOL)headerHidden {
|
||||
if (category == 1) {
|
||||
NSUInteger statsForNerdsIndex = [sectionItems indexOfObjectPassingTest:^BOOL (YTSettingsSectionItem *item, NSUInteger idx, BOOL *stop) {
|
||||
return item.settingItemId == 265;
|
||||
}];
|
||||
if (statsForNerdsIndex != NSNotFound) {
|
||||
//
|
||||
YTSettingsSectionItem *castConfirm = [[%c(YTSettingsSectionItem) alloc] initWithTitle:@"Confirm alert before casting (YTCastConfirm)" titleDescription:@"Show a confirm alert before casting to prevent accidentally hijacking TV."];
|
||||
castConfirm.hasSwitch = YES;
|
||||
castConfirm.switchVisible = YES;
|
||||
castConfirm.on = [[NSUserDefaults standardUserDefaults] boolForKey:@"castConfirm_enabled"];
|
||||
castConfirm.switchBlock = ^BOOL (YTSettingsCell *cell, BOOL enabled) {
|
||||
[[NSUserDefaults standardUserDefaults] setBool:enabled forKey:@"castConfirm_enabled"];
|
||||
return YES;
|
||||
};
|
||||
[sectionItems insertObject:castConfirm atIndex:statsForNerdsIndex + 1];
|
||||
//
|
||||
YTSettingsSectionItem *hoverCardItem = [[%c(YTSettingsSectionItem) alloc] initWithTitle:@"Show End screens hover cards (YTNoHoverCards)" titleDescription:@"Allows creator End screens (thumbnails) to appear at the end of videos."];
|
||||
hoverCardItem.hasSwitch = YES;
|
||||
hoverCardItem.switchVisible = YES;
|
||||
hoverCardItem.on = [[NSUserDefaults standardUserDefaults] boolForKey:@"hover_cards_enabled"];
|
||||
hoverCardItem.switchBlock = ^BOOL (YTSettingsCell *cell, BOOL enabled) {
|
||||
[[NSUserDefaults standardUserDefaults] setBool:enabled forKey:@"hover_cards_enabled"];
|
||||
return YES;
|
||||
};
|
||||
[sectionItems insertObject:hoverCardItem atIndex:statsForNerdsIndex + 1];
|
||||
//
|
||||
YTSettingsSectionItem *bigYTMiniPlayer = [[%c(YTSettingsSectionItem) alloc] initWithTitle:@"New miniplayer bar style (BigYTMiniPlayer)" titleDescription:@"App restart is required."];
|
||||
bigYTMiniPlayer.hasSwitch = YES;
|
||||
bigYTMiniPlayer.switchVisible = YES;
|
||||
bigYTMiniPlayer.on = [[NSUserDefaults standardUserDefaults] boolForKey:@"bigYTMiniPlayer_enabled"];
|
||||
bigYTMiniPlayer.switchBlock = ^BOOL (YTSettingsCell *cell, BOOL enabled) {
|
||||
[[NSUserDefaults standardUserDefaults] setBool:enabled forKey:@"bigYTMiniPlayer_enabled"];
|
||||
return YES;
|
||||
};
|
||||
[sectionItems insertObject:bigYTMiniPlayer atIndex:statsForNerdsIndex + 2];
|
||||
//
|
||||
YTSettingsSectionItem *reExplore = [[%c(YTSettingsSectionItem) alloc] initWithTitle:@"Replace Shorts tab with Explore tab (YTReExplore)" titleDescription:@"App restart is required."];
|
||||
reExplore.hasSwitch = YES;
|
||||
reExplore.switchVisible = YES;
|
||||
reExplore.on = [[NSUserDefaults standardUserDefaults] boolForKey:@"reExplore_enabled"];
|
||||
reExplore.switchBlock = ^BOOL (YTSettingsCell *cell, BOOL enabled) {
|
||||
[[NSUserDefaults standardUserDefaults] setBool:enabled forKey:@"reExplore_enabled"];
|
||||
return YES;
|
||||
};
|
||||
[sectionItems insertObject:reExplore atIndex:statsForNerdsIndex + 2];
|
||||
//
|
||||
YTSettingsSectionItem *hideCC = [[%c(YTSettingsSectionItem) alloc] initWithTitle:@"Hide Subtitles button" titleDescription:@"Hide the Subtitles button in video controls overlay. "];
|
||||
hideCC.hasSwitch = YES;
|
||||
hideCC.switchVisible = YES;
|
||||
hideCC.on = [[NSUserDefaults standardUserDefaults] boolForKey:@"hideCC_enabled"];
|
||||
hideCC.switchBlock = ^BOOL (YTSettingsCell *cell, BOOL enabled) {
|
||||
[[NSUserDefaults standardUserDefaults] setBool:enabled forKey:@"hideCC_enabled"];
|
||||
return YES;
|
||||
};
|
||||
[sectionItems insertObject:hideCC atIndex:statsForNerdsIndex + 1];
|
||||
//
|
||||
YTSettingsSectionItem *hideAutoplaySwitch = [[%c(YTSettingsSectionItem) alloc] initWithTitle:@"Hide Autoplay switch" titleDescription:@"Hide the Autoplay switch button in video controls overlay."];
|
||||
hideAutoplaySwitch.hasSwitch = YES;
|
||||
hideAutoplaySwitch.switchVisible = YES;
|
||||
hideAutoplaySwitch.on = [[NSUserDefaults standardUserDefaults] boolForKey:@"hideAutoplaySwitch_enabled"];
|
||||
hideAutoplaySwitch.switchBlock = ^BOOL (YTSettingsCell *cell, BOOL enabled) {
|
||||
[[NSUserDefaults standardUserDefaults] setBool:enabled forKey:@"hideAutoplaySwitch_enabled"];
|
||||
return YES;
|
||||
};
|
||||
[sectionItems insertObject:hideAutoplaySwitch atIndex:statsForNerdsIndex + 1];
|
||||
//
|
||||
YTSettingsSectionItem *autoFUll = [[%c(YTSettingsSectionItem) alloc] initWithTitle:@"Auto Full Screen (YTAutoFullScreen)" titleDescription:@"Autoplay videos at full screen."];
|
||||
autoFUll.hasSwitch = YES;
|
||||
autoFUll.switchVisible = YES;
|
||||
autoFUll.on = [[NSUserDefaults standardUserDefaults] boolForKey:@"autofull_enabled"];
|
||||
autoFUll.switchBlock = ^BOOL (YTSettingsCell *cell, BOOL enabled) {
|
||||
[[NSUserDefaults standardUserDefaults] setBool:enabled forKey:@"autofull_enabled"];
|
||||
return YES;
|
||||
};
|
||||
[sectionItems insertObject:autoFUll atIndex:statsForNerdsIndex + 3];
|
||||
//
|
||||
YTSettingsSectionItem *hideHUD = [[%c(YTSettingsSectionItem) alloc] initWithTitle:@"Hide HUD Messages" titleDescription:@"Example: CC is turned on/off, Video loop is on,..."];
|
||||
hideHUD.hasSwitch = YES;
|
||||
hideHUD.switchVisible = YES;
|
||||
hideHUD.on = [[NSUserDefaults standardUserDefaults] boolForKey:@"hideHUD_enabled"];
|
||||
hideHUD.switchBlock = ^BOOL (YTSettingsCell *cell, BOOL enabled) {
|
||||
[[NSUserDefaults standardUserDefaults] setBool:enabled forKey:@"hideHUD_enabled"];
|
||||
return YES;
|
||||
};
|
||||
[sectionItems insertObject:hideHUD atIndex:statsForNerdsIndex + 1];
|
||||
//
|
||||
YTSettingsSectionItem *Oleditem = [[%c(YTSettingsSectionItem) alloc] initWithTitle:@"OLED Dark mode (Experimental)" titleDescription:@"WARNING: OLED Dark mode only works when YouTube is in Dark theme. App restart is required (In case OLED dark mode doesn't work: just switch between Light/Dark theme, then restart the app)."];
|
||||
Oleditem.hasSwitch = YES;
|
||||
Oleditem.switchVisible = YES;
|
||||
Oleditem.on = [[NSUserDefaults standardUserDefaults] boolForKey:@"oled_enabled"];
|
||||
Oleditem.switchBlock = ^BOOL (YTSettingsCell *cell, BOOL enabled) {
|
||||
[[NSUserDefaults standardUserDefaults] setBool:enabled forKey:@"oled_enabled"];
|
||||
return YES;
|
||||
};
|
||||
[sectionItems insertObject:Oleditem atIndex:statsForNerdsIndex + 1];
|
||||
}
|
||||
}
|
||||
%orig;
|
||||
}
|
||||
%end
|
||||
+1
-1
Submodule Tweaks/PSHeader updated: 7f13c9adf9...c9355cb136
+1
-1
Submodule Tweaks/YTUHD updated: ea6d7eb8bc...9916e88bc5
+1
-1
Submodule Tweaks/YouPiP updated: 23fc13e5e2...7a0a820109
+1
-1
Submodule Tweaks/YouTubeHeader updated: ca786bc9b6...71372d2c48
+17
-6
@@ -22,16 +22,27 @@ else
|
||||
fi
|
||||
|
||||
# Makefile
|
||||
read -e -p "==> Path to the decrypted YouTube iPA: " PATHTOIPA
|
||||
if [[ $PATHTOIPA == *.ipa ]]
|
||||
read -e -p "==> Path to the decrypted YouTube.ipa or YouTube.app: " PATHTOYT
|
||||
if [[ $PATHTOYT == *.ipa ]]
|
||||
then
|
||||
sed -i '' "14s#.*#uYouPlus_IPA = $PATHTOIPA#g" ./Makefile
|
||||
unzip -q "$PATHTOYT" -d ./tmp
|
||||
rm -rf ./tmp/Payload/YouTube.app/PlugIns/*.appex
|
||||
cp -R Extensions/*.appex tmp/Payload/YouTube.app/PlugIns
|
||||
make package
|
||||
open ./packages
|
||||
|
||||
elif [[ $PATHTOYT == *.app ]]
|
||||
then
|
||||
mkdir -p ./tmp/Payload/
|
||||
cp -R "$PATHTOYT" ./tmp/Payload 2>/dev/null
|
||||
rm -rf ./tmp/Payload/YouTube.app/PlugIns/*.appex
|
||||
cp -R Extensions/*.appex tmp/Payload/YouTube.app/PlugIns
|
||||
make package
|
||||
open ./packages
|
||||
else
|
||||
echo "This is not an iPA"
|
||||
fi
|
||||
echo "This is not an ipa/app!"
|
||||
fi
|
||||
# Clean up
|
||||
tput setaf 1 && echo -e "==> \033[1mCleaning up...\033[0m"
|
||||
find Tweaks/uYou -mindepth 1 ! -name "com.miro.uyou_2.1_iphoneos-arm.deb" ! -name ".gitkeep" -exec rm -rf {} \; 2>/dev/null
|
||||
rm -rf Resources .theos/_/Payload
|
||||
rm -rf tmp/ Resources .theos/_/Payload
|
||||
-100
@@ -1,100 +0,0 @@
|
||||
#import <Foundation/Foundation.h>
|
||||
#import <UIKit/UIKit.h>
|
||||
|
||||
// Workaround for https://github.com/MiRO92/uYou-for-YouTube/issues/12
|
||||
|
||||
%hook YTAdsInnerTubeContextDecorator
|
||||
- (void)decorateContext:(id)arg1 {
|
||||
%orig(nil);
|
||||
}
|
||||
%end
|
||||
|
||||
|
||||
// YouRememberCaption: https://www.ios-repo-updates.com/repository/poomsmart/package/com.ps.youremembercaption/
|
||||
|
||||
%hook YTColdConfig
|
||||
- (BOOL)respectDeviceCaptionSetting {
|
||||
return NO;
|
||||
}
|
||||
%end
|
||||
|
||||
|
||||
// YTClassicVideoQuality: https://github.com/PoomSmart/YTClassicVideoQuality
|
||||
|
||||
@interface YTVideoQualitySwitchOriginalController : NSObject
|
||||
- (instancetype)initWithParentResponder:(id)responder;
|
||||
@end
|
||||
|
||||
%hook YTVideoQualitySwitchControllerFactory
|
||||
|
||||
- (id)videoQualitySwitchControllerWithParentResponder:(id)responder {
|
||||
Class originalClass = %c(YTVideoQualitySwitchOriginalController);
|
||||
return originalClass ? [[originalClass alloc] initWithParentResponder:responder] : %orig;
|
||||
}
|
||||
%end
|
||||
|
||||
|
||||
// YTNoCheckLocalNetwork: https://poomsmart.github.io/repo/depictions/ytnochecklocalnetwork.html
|
||||
|
||||
%hook YTHotConfig
|
||||
|
||||
- (BOOL)isPromptForLocalNetworkPermissionsEnabled {
|
||||
return NO;
|
||||
}
|
||||
%end
|
||||
|
||||
// YTNoHoverCards: https://github.com/level3tjg/YTNoHoverCards
|
||||
|
||||
@interface YTCollectionViewCell : UICollectionViewCell
|
||||
@end
|
||||
|
||||
@interface YTSettingsCell : YTCollectionViewCell
|
||||
@end
|
||||
|
||||
@interface YTSettingsSectionItem : NSObject
|
||||
@property BOOL hasSwitch;
|
||||
@property BOOL switchVisible;
|
||||
@property BOOL on;
|
||||
@property BOOL (^switchBlock)(YTSettingsCell *, BOOL);
|
||||
@property int settingItemId;
|
||||
- (instancetype)initWithTitle:(NSString *)title titleDescription:(NSString *)titleDescription;
|
||||
@end
|
||||
|
||||
%hook YTSettingsViewController
|
||||
- (void)setSectionItems:(NSMutableArray <YTSettingsSectionItem *>*)sectionItems forCategory:(NSInteger)category title:(NSString *)title titleDescription:(NSString *)titleDescription headerHidden:(BOOL)headerHidden {
|
||||
if (category == 1) {
|
||||
NSInteger appropriateIdx = [sectionItems indexOfObjectPassingTest:^BOOL(YTSettingsSectionItem *item, NSUInteger idx, BOOL *stop) {
|
||||
return item.settingItemId == 294;
|
||||
}];
|
||||
if (appropriateIdx != NSNotFound) {
|
||||
YTSettingsSectionItem *hoverCardItem = [[%c(YTSettingsSectionItem) alloc] initWithTitle:@"Show End screens hover cards" titleDescription:@"Allows creator End screens (thumbnails) to appear at the end of videos"];
|
||||
hoverCardItem.hasSwitch = YES;
|
||||
hoverCardItem.switchVisible = YES;
|
||||
hoverCardItem.on = [[NSUserDefaults standardUserDefaults] boolForKey:@"hover_cards_enabled"];
|
||||
hoverCardItem.switchBlock = ^BOOL (YTSettingsCell *cell, BOOL enabled) {
|
||||
[[NSUserDefaults standardUserDefaults] setBool:enabled forKey:@"hover_cards_enabled"];
|
||||
return YES;
|
||||
};
|
||||
[sectionItems insertObject:hoverCardItem atIndex:appropriateIdx + 1];
|
||||
}
|
||||
}
|
||||
%orig;
|
||||
}
|
||||
%end
|
||||
|
||||
%hook YTCreatorEndscreenView
|
||||
- (void)setHidden:(BOOL)hidden {
|
||||
if (![[NSUserDefaults standardUserDefaults] boolForKey:@"hover_cards_enabled"])
|
||||
hidden = YES;
|
||||
%orig;
|
||||
}
|
||||
%end
|
||||
|
||||
|
||||
// YTSystemAppearance: https://poomsmart.github.io/repo/depictions/ytsystemappearance.html
|
||||
|
||||
%hook YTColdConfig
|
||||
- (BOOL)shouldUseAppThemeSetting {
|
||||
return YES;
|
||||
}
|
||||
%end
|
||||
+649
@@ -0,0 +1,649 @@
|
||||
#import <UIKit/UIKit.h>
|
||||
#import <Foundation/Foundation.h>
|
||||
#import <objc/runtime.h>
|
||||
#import "Header.h"
|
||||
#import "Tweaks/YouTubeHeader/YTVideoQualitySwitchOriginalController.h"
|
||||
#import "Tweaks/YouTubeHeader/YTSettingsSectionItem.h"
|
||||
#import "Tweaks/YouTubeHeader/YTPlayerViewController.h"
|
||||
#import "Tweaks/YouTubeHeader/YTWatchController.h"
|
||||
#import "Tweaks/YouTubeHeader/YTIGuideResponse.h"
|
||||
#import "Tweaks/YouTubeHeader/YTIGuideResponseSupportedRenderers.h"
|
||||
#import "Tweaks/YouTubeHeader/YTIPivotBarSupportedRenderers.h"
|
||||
#import "Tweaks/YouTubeHeader/YTIPivotBarRenderer.h"
|
||||
#import "Tweaks/YouTubeHeader/YTIBrowseRequest.h"
|
||||
#include <RemoteLog.h>
|
||||
|
||||
BOOL hideHUD() {
|
||||
return [[NSUserDefaults standardUserDefaults] boolForKey:@"hideHUD_enabled"];
|
||||
}
|
||||
BOOL oled() {
|
||||
return [[NSUserDefaults standardUserDefaults] boolForKey:@"oled_enabled"];
|
||||
}
|
||||
BOOL autoFullScreen() {
|
||||
return [[NSUserDefaults standardUserDefaults] boolForKey:@"autofull_enabled"];
|
||||
}
|
||||
BOOL noHoverCard() {
|
||||
return [[NSUserDefaults standardUserDefaults] boolForKey:@"hover_cards_enabled"];
|
||||
}
|
||||
BOOL ReExplore() {
|
||||
return [[NSUserDefaults standardUserDefaults] boolForKey:@"reExplore_enabled"];
|
||||
}
|
||||
BOOL bigYTMiniPlayer() {
|
||||
return [[NSUserDefaults standardUserDefaults] boolForKey:@"bigYTMiniPlayer_enabled"];
|
||||
}
|
||||
BOOL hideCC() {
|
||||
return [[NSUserDefaults standardUserDefaults] boolForKey:@"hideCC_enabled"];
|
||||
}
|
||||
BOOL hideAutoplaySwitch() {
|
||||
return [[NSUserDefaults standardUserDefaults] boolForKey:@"hideAutoplaySwitch_enabled"];
|
||||
}
|
||||
BOOL castConfirm() {
|
||||
return [[NSUserDefaults standardUserDefaults] boolForKey:@"castConfirm_enabled"];
|
||||
}
|
||||
|
||||
UIColor* oledColor = [UIColor colorWithRed:0.0 green:0.0 blue:0.0 alpha:1.0];
|
||||
|
||||
// Hide CC / Autoplay switch
|
||||
%hook YTMainAppControlsOverlayView
|
||||
- (void)layoutSubviews {
|
||||
%orig();
|
||||
if (hideAutoplaySwitch()) {
|
||||
MSHookIvar<UIView *>(self, "_autonavSwitch").hidden = YES;
|
||||
}
|
||||
if (hideCC()) {
|
||||
MSHookIvar<UIView *>(self, "_closedCaptionsOrSubtitlesButton").hidden = YES;
|
||||
}
|
||||
}
|
||||
%end
|
||||
|
||||
// Hide HUD Messages
|
||||
%hook YTHUDMessageView
|
||||
- (id)initWithMessage:(id)arg1 dismissHandler:(id)arg2 {
|
||||
if (hideHUD()) {
|
||||
return NULL;
|
||||
} else { return %orig; }
|
||||
}
|
||||
%end
|
||||
|
||||
// YTAutoFullScreen: https://github.com/PoomSmart/YTAutoFullScreen/
|
||||
%hook YTPlayerViewController
|
||||
- (void)loadWithPlayerTransition:(id)arg1 playbackConfig:(id)arg2 {
|
||||
if (autoFullScreen()) {
|
||||
%orig;
|
||||
[NSTimer scheduledTimerWithTimeInterval:0.75 target:self selector:@selector(autoFullscreen) userInfo:nil repeats:NO];
|
||||
} else { return %orig; }
|
||||
}
|
||||
%new
|
||||
- (void)autoFullscreen {
|
||||
YTWatchController *watchController = [self valueForKey:@"_UIDelegate"];
|
||||
[watchController showFullScreen];
|
||||
}
|
||||
%end
|
||||
|
||||
// YTNoHoverCards: https://github.com/level3tjg/YTNoHoverCards
|
||||
%hook YTCreatorEndscreenView
|
||||
- (void)setHidden:(BOOL)hidden {
|
||||
if (!noHoverCard())
|
||||
hidden = YES;
|
||||
%orig;
|
||||
}
|
||||
%end
|
||||
|
||||
//YTCastConfirm: https://github.com/JamieBerghmans/YTCastConfirm
|
||||
%hook MDXPlaybackRouteButtonController
|
||||
-(void)didPressButton:(id)arg1 {
|
||||
if (castConfirm()) {
|
||||
UIAlertController* alertController = [%c(UIAlertController) alertControllerWithTitle:@"Casting"
|
||||
message:@"Are you sure you want to start casting?"
|
||||
preferredStyle:UIAlertControllerStyleAlert];
|
||||
UIAlertAction* defaultAction = [%c(UIAlertAction) actionWithTitle:@"Yes" style:UIAlertActionStyleDefault handler:^(UIAlertAction * action) {
|
||||
%orig;
|
||||
}];
|
||||
|
||||
UIAlertAction* noButton = [%c(UIAlertAction)
|
||||
actionWithTitle:@"Cancel"
|
||||
style:UIAlertActionStyleDefault
|
||||
handler: ^(UIAlertAction * action) {
|
||||
return;
|
||||
}];
|
||||
|
||||
[alertController addAction:defaultAction];
|
||||
[alertController addAction:noButton];
|
||||
|
||||
id rootViewController = [%c(UIApplication) sharedApplication].delegate.window.rootViewController;
|
||||
if([rootViewController isKindOfClass:[%c(UINavigationController) class]]) {
|
||||
rootViewController = ((UINavigationController *)rootViewController).viewControllers.firstObject;
|
||||
}
|
||||
if([rootViewController isKindOfClass:[%c(UITabBarController) class]]) {
|
||||
rootViewController = ((UITabBarController *)rootViewController).selectedViewController;
|
||||
}
|
||||
if ([rootViewController presentedViewController] != nil) {
|
||||
rootViewController = [rootViewController presentedViewController];
|
||||
}
|
||||
[rootViewController presentViewController:alertController animated:YES completion:nil];
|
||||
} else { return %orig; }
|
||||
}
|
||||
%end
|
||||
|
||||
// Workaround for https://github.com/MiRO92/uYou-for-YouTube/issues/12
|
||||
%hook YTAdsInnerTubeContextDecorator
|
||||
- (void)decorateContext:(id)arg1 { %orig(nil); }
|
||||
%end
|
||||
|
||||
// YTClassicVideoQuality: https://github.com/PoomSmart/YTClassicVideoQuality
|
||||
%hook YTVideoQualitySwitchControllerFactory
|
||||
- (id)videoQualitySwitchControllerWithParentResponder:(id)responder {
|
||||
Class originalClass = %c(YTVideoQualitySwitchOriginalController);
|
||||
return originalClass ? [[originalClass alloc] initWithParentResponder:responder] : %orig;
|
||||
}
|
||||
%end
|
||||
|
||||
// YTNoCheckLocalNetwork: https://poomsmart.github.io/repo/depictions/ytnochecklocalnetwork.html
|
||||
%hook YTHotConfig
|
||||
- (BOOL)isPromptForLocalNetworkPermissionsEnabled { return NO; }
|
||||
%end
|
||||
|
||||
// YTSystemAppearance: https://poomsmart.github.io/repo/depictions/ytsystemappearance.html
|
||||
// YouRememberCaption: https://poomsmart.github.io/repo/depictions/youremembercaption.html
|
||||
%hook YTColdConfig
|
||||
- (BOOL)shouldUseAppThemeSetting { return YES; }
|
||||
- (BOOL)respectDeviceCaptionSetting { return NO; }
|
||||
%end
|
||||
|
||||
// OLED
|
||||
// Thanks u/DGh0st for his very well explained comment - https://www.reddit.com/r/jailbreakdevelopers/comments/9uape7/comment/e94sq80/
|
||||
// Thanks sinfool for his flex patch which brings OLED Dark mode for YouTube - "Color Customizer (YouTube) OLED"
|
||||
%group gOLED
|
||||
%hook UIView
|
||||
-(void)setBackgroundColor:(id)arg1 {
|
||||
if ([self.nextResponder isKindOfClass:%c(DownloadedVC)]) //uYou
|
||||
arg1 = oledColor;
|
||||
if ([self.nextResponder isKindOfClass:%c(DownloadsPagerVC)]) //uYou
|
||||
arg1 = oledColor;
|
||||
if ([self.nextResponder isKindOfClass:%c(DownloadingVC)]) //uYou
|
||||
arg1 = oledColor;
|
||||
if ([self.nextResponder isKindOfClass:%c(PlayerVC)]) //uYou
|
||||
arg1 = oledColor;
|
||||
if ([self.nextResponder isKindOfClass:%c(YTLinkCell)])
|
||||
arg1 = oledColor;
|
||||
if ([self.nextResponder isKindOfClass:%c(YTCommentsHeaderView)])
|
||||
arg1 = oledColor;
|
||||
if ([self.nextResponder isKindOfClass:%c(YTSearchView)])
|
||||
arg1 = oledColor;
|
||||
if ([self.nextResponder isKindOfClass:%c(YTSearchBoxView)])
|
||||
arg1 = oledColor;
|
||||
if ([self.nextResponder isKindOfClass:%c(YTEngagementPanelHeaderView)])
|
||||
arg1 = oledColor;
|
||||
if ([self.nextResponder isKindOfClass:%c(YTEngagementPanelView)])
|
||||
arg1 = oledColor;
|
||||
if ([self.nextResponder isKindOfClass:%c(YTPivotBarView)])
|
||||
arg1 = oledColor;
|
||||
if ([self.nextResponder isKindOfClass:%c(YTHUDMessageView)])
|
||||
arg1 = oledColor;
|
||||
if ([self.nextResponder isKindOfClass:%c(YTChipCloudCell)])
|
||||
arg1 = oledColor;
|
||||
if ([self.nextResponder isKindOfClass:%c(YCHLiveChatTextCell)])
|
||||
arg1 = oledColor;
|
||||
if ([self.nextResponder isKindOfClass:%c(YCHLiveChatView)])
|
||||
arg1 = oledColor;
|
||||
if ([self.nextResponder isKindOfClass:%c(YCHLiveChatViewerEngagementCell)])
|
||||
arg1 = oledColor;
|
||||
if ([self.nextResponder isKindOfClass:%c(YTSlideForActionsView)])
|
||||
arg1 = oledColor;
|
||||
if ([self.nextResponder isKindOfClass:%c(YTPlaylistHeaderView)])
|
||||
arg1 = oledColor;
|
||||
if ([self.nextResponder isKindOfClass:%c(YTAsyncCollectionView)])
|
||||
arg1 = oledColor;
|
||||
if ([self.nextResponder isKindOfClass:%c(YTFeedHeaderView)])
|
||||
arg1 = oledColor;
|
||||
if ([self.nextResponder isKindOfClass:%c(YTMessageCell)])
|
||||
arg1 = oledColor;
|
||||
if ([self.nextResponder isKindOfClass:%c(YTPlaylistPanelProminentThumbnailVideoCell)])
|
||||
arg1 = oledColor;
|
||||
if ([self.nextResponder isKindOfClass:%c(ASWAppSwitcherCollectionViewCell)])
|
||||
arg1 = oledColor;
|
||||
if ([self.nextResponder isKindOfClass:%c(YTEditSheetControllerHeader)])
|
||||
arg1 = oledColor;
|
||||
if ([self.nextResponder isKindOfClass:%c(YTDialogContainerScrollView)])
|
||||
arg1 = oledColor;
|
||||
%orig;
|
||||
}
|
||||
//- (void)layoutSubviews {
|
||||
// %orig;
|
||||
// if ([self.nextResponder isKindOfClass:%c(YTALDialog)])
|
||||
// self.backgroundColor = oledColor;
|
||||
//}
|
||||
%end
|
||||
|
||||
%hook UIControl // this sucks I know :/
|
||||
-(void)setBackgroundColor:(id)arg1 {
|
||||
if ([self.nextResponder isKindOfClass:%c(YTShareMainView)])
|
||||
arg1 = oledColor;
|
||||
%orig;
|
||||
}
|
||||
%end
|
||||
|
||||
%hook YTAsyncCollectionView
|
||||
-(void)setBackgroundColor:(id)arg1 {
|
||||
if([self.nextResponder isKindOfClass:%c(YTRelatedVideosCollectionViewController)]) {
|
||||
arg1 = [oledColor colorWithAlphaComponent:0.0];
|
||||
} else if([self.nextResponder isKindOfClass:%c(YTFullscreenMetadataHighlightsCollectionViewController)]) {
|
||||
arg1 = [oledColor colorWithAlphaComponent:0.0];
|
||||
} else {
|
||||
arg1 = oledColor;
|
||||
}
|
||||
%orig;
|
||||
}
|
||||
%end
|
||||
|
||||
%hook YTDialogContainerScrollView
|
||||
-(void)setBackgroundColor:(id)arg1 {
|
||||
arg1 = oledColor;
|
||||
%orig;
|
||||
}
|
||||
%end
|
||||
|
||||
%hook YTTopAlignedView
|
||||
-(void)setBackgroundColor:(id)arg1 {
|
||||
arg1 = oledColor;
|
||||
%orig;
|
||||
}
|
||||
-(void)layoutSubviews { // Dune - https://github.com/Skittyblock/Dune/blob/9b1df9790230115b7553cc9dbadf36889018d7f9/Tweak.xm#L70
|
||||
%orig;
|
||||
MSHookIvar<UIView *>(self, "_contentView").backgroundColor = oledColor;
|
||||
}
|
||||
%end
|
||||
|
||||
%hook MDXQueueView // Cast queue
|
||||
-(void)setBackgroundColor:(id)arg1 {
|
||||
arg1 = oledColor;
|
||||
%orig;
|
||||
}
|
||||
%end
|
||||
|
||||
%hook YTChannelProfileEditorView
|
||||
-(void)setBackgroundColor:(id)arg1 {
|
||||
arg1 = oledColor;
|
||||
%orig;
|
||||
}
|
||||
%end
|
||||
|
||||
%hook YTChannelSubMenuView //
|
||||
-(void)setBackgroundColor:(id)arg1 {
|
||||
arg1 = oledColor;
|
||||
%orig;
|
||||
}
|
||||
%end
|
||||
|
||||
%hook YTChannelListSubMenuView // sub -
|
||||
-(void)setBackgroundColor:(id)arg1 {
|
||||
arg1 = oledColor;
|
||||
%orig;
|
||||
}
|
||||
%end
|
||||
|
||||
%hook YTCommentView
|
||||
-(void)setBackgroundColor:(id)arg1 {
|
||||
arg1 = oledColor;
|
||||
%orig;
|
||||
}
|
||||
%end
|
||||
|
||||
%hook YTCreateCommentAccessoryView
|
||||
-(void)setBackgroundColor:(id)arg1 {
|
||||
arg1 = oledColor;
|
||||
%orig;
|
||||
}
|
||||
%end
|
||||
|
||||
%hook YTCreateCommentTextView
|
||||
-(void)setBackgroundColor:(id)arg1 {
|
||||
arg1 = oledColor;
|
||||
%orig;
|
||||
}
|
||||
%end
|
||||
|
||||
%hook YCHLiveChatActionPanelView
|
||||
-(void)setBackgroundColor:(id)arg1 {
|
||||
arg1 = oledColor;
|
||||
%orig;
|
||||
}
|
||||
%end
|
||||
|
||||
%hook YTEmojiTextView
|
||||
-(void)setBackgroundColor:(id)arg1 {
|
||||
arg1 = oledColor;
|
||||
%orig;
|
||||
}
|
||||
%end
|
||||
|
||||
%hook YTShareTitleView // Share sheet
|
||||
-(void)setBackgroundColor:(id)arg1 {
|
||||
arg1 = oledColor;
|
||||
%orig;
|
||||
}
|
||||
%end
|
||||
|
||||
%hook YTNavigationBar
|
||||
-(void)setBackgroundColor:(id)arg1 {
|
||||
arg1 = oledColor;
|
||||
%orig;
|
||||
}
|
||||
-(void)setBarTintColor:(id)arg1 {
|
||||
arg1 = oledColor;
|
||||
%orig;
|
||||
}
|
||||
%end
|
||||
|
||||
%hook YTPrivacyTosFooterView
|
||||
-(void)setBackgroundColor:(id)arg1 {
|
||||
arg1 = oledColor;
|
||||
%orig;
|
||||
}
|
||||
%end
|
||||
|
||||
%hook YTWatchMiniBarView
|
||||
-(void)setBackgroundColor:(id)arg1 {
|
||||
arg1 = [UIColor colorWithRed:0.0 green:0.0 blue:0.0 alpha:0.9];
|
||||
%orig;
|
||||
}
|
||||
%end
|
||||
|
||||
%hook YTPlaylistMiniBarView
|
||||
-(void)setBackgroundColor:(id)arg1 {
|
||||
arg1 = [UIColor colorWithRed:0.0 green:0.0 blue:0.0 alpha:0.9];
|
||||
%orig;
|
||||
}
|
||||
%end
|
||||
|
||||
%hook _LNPopupBarContentView // uYou player
|
||||
-(void)setBackgroundColor:(id)arg1 {
|
||||
arg1 = [UIColor colorWithRed:0.0 green:0.0 blue:0.0 alpha:0.9];
|
||||
%orig;
|
||||
}
|
||||
%end
|
||||
|
||||
%hook YTEngagementPanelHeaderView
|
||||
-(void)setBackgroundColor:(id)arg1 {
|
||||
arg1 = oledColor;
|
||||
%orig;
|
||||
}
|
||||
%end
|
||||
|
||||
%hook YTChannelMobileHeaderView
|
||||
-(void)setBackgroundColor:(id)arg1 {
|
||||
arg1 = oledColor;
|
||||
%orig;
|
||||
}
|
||||
%end
|
||||
|
||||
%hook YTInlineSignInView
|
||||
-(void)setBackgroundColor:(id)arg1 {
|
||||
arg1 = oledColor;
|
||||
%orig;
|
||||
}
|
||||
%end
|
||||
|
||||
%hook YTHeaderView //Stt bar
|
||||
-(void)setBackgroundColor:(id)arg1 {
|
||||
arg1 = oledColor;
|
||||
%orig;
|
||||
}
|
||||
%end
|
||||
|
||||
%hook YTTabTitlesView // Tab bar - mychannel
|
||||
-(void)setBackgroundColor:(id)arg1 {
|
||||
arg1 = oledColor;
|
||||
%orig;
|
||||
}
|
||||
%end
|
||||
|
||||
%hook YTSettingsCell // Settings
|
||||
-(void)setBackgroundColor:(id)arg1 {
|
||||
arg1 = oledColor;
|
||||
%orig;
|
||||
}
|
||||
%end
|
||||
|
||||
%hook GOODialogView // 3 dots menu
|
||||
-(void)setBackgroundColor:(id)arg1 {
|
||||
arg1 = oledColor;
|
||||
%orig;
|
||||
}
|
||||
%end
|
||||
|
||||
%hook YTCollectionView //sharesheet
|
||||
-(void)setBackgroundColor:(id)arg1 {
|
||||
arg1 = oledColor;
|
||||
%orig;
|
||||
}
|
||||
%end
|
||||
|
||||
%hook ASWAppSwitchingSheetHeaderView
|
||||
-(void)setBackgroundColor:(id)arg1 {
|
||||
arg1 = oledColor;
|
||||
%orig;
|
||||
}
|
||||
%end
|
||||
|
||||
%hook ASWAppSwitchingSheetFooterView
|
||||
-(void)setBackgroundColor:(id)arg1 {
|
||||
arg1 = oledColor;
|
||||
%orig;
|
||||
}
|
||||
%end
|
||||
|
||||
%hook YTCollectionSeparatorView
|
||||
-(void)setBackgroundColor:(id)arg1 {
|
||||
arg1 = oledColor;
|
||||
%orig;
|
||||
}
|
||||
- (void)layoutSubviews {}
|
||||
%end
|
||||
|
||||
%hook YTLightweightQTMButton
|
||||
-(void)setBackgroundColor:(id)arg1 {
|
||||
if([self.nextResponder isKindOfClass:%c(YTShareMainView)]) {
|
||||
arg1 = oledColor;
|
||||
%orig;
|
||||
}
|
||||
}
|
||||
-(void)setCustomTitleColor:(id)arg1 {
|
||||
arg1 = [UIColor whiteColor];
|
||||
%orig;
|
||||
}
|
||||
%end
|
||||
|
||||
%hook YTShareBusyView // sharesheet load
|
||||
-(void)setBackgroundColor:(id)arg1 {
|
||||
arg1 = oledColor;
|
||||
%orig;
|
||||
}
|
||||
%end
|
||||
|
||||
%hook YTPageView
|
||||
-(void)setBackgroundColor:(id)arg1 {
|
||||
arg1 = oledColor;
|
||||
%orig;
|
||||
}
|
||||
%end
|
||||
|
||||
%hook YTWatchView
|
||||
-(void)setBackgroundColor:(id)arg1 {
|
||||
arg1 = oledColor;
|
||||
%orig;
|
||||
}
|
||||
%end
|
||||
|
||||
%hook YTSearchBarView
|
||||
-(void)setBackgroundColor:(id)arg1 {
|
||||
arg1 = oledColor;
|
||||
%orig;
|
||||
}
|
||||
%end
|
||||
|
||||
%hook YTSearchSuggestionCollectionViewCell
|
||||
-(void)updateColors {}
|
||||
%end
|
||||
|
||||
%hook UISearchBarBackground
|
||||
-(void)setBarTintColor:(id)arg1 {
|
||||
arg1 = oledColor;
|
||||
%orig;
|
||||
}
|
||||
%end
|
||||
|
||||
%hook YTELMView // upload videos
|
||||
-(void)layoutSubviews {
|
||||
%orig;
|
||||
self.backgroundColor = oledColor;
|
||||
}
|
||||
%end
|
||||
|
||||
%hook YTMealBarPromoView
|
||||
-(void)setBackgroundColor:(id)arg1 { // Offline
|
||||
arg1 = oledColor;
|
||||
%orig;
|
||||
}
|
||||
%end
|
||||
|
||||
%hook NIAttributedLabel
|
||||
-(void)setBackgroundColor:(id)arg1 {
|
||||
if ([self.nextResponder isKindOfClass:%c(UIScrollView)])
|
||||
arg1 = oledColor;
|
||||
%orig;
|
||||
}
|
||||
%end
|
||||
|
||||
////
|
||||
/*
|
||||
%hook UICollectionView
|
||||
-(void)setBackgroundColor:(id)arg1 {
|
||||
if ([self.nextResponder isKindOfClass:%c(UICollectionViewControllerWrapperView)])
|
||||
arg1 = oledColor;
|
||||
%orig;
|
||||
}
|
||||
%end
|
||||
|
||||
%hook YTShortsGalleryHeaderView // upload videos heaer (gallery)
|
||||
-(void)setBackgroundColor:(id)arg1 {
|
||||
arg1 = oledColor;
|
||||
%orig;
|
||||
}
|
||||
%end
|
||||
|
||||
%hook _ASDisplayView // edit your videos
|
||||
-(void)layoutSubviews {
|
||||
if ([self.nextResponder isKindOfClass:%c(ELMView)])
|
||||
self.backgroundColor = oledColor;
|
||||
}
|
||||
%end
|
||||
|
||||
%hook ASCollectionView
|
||||
-(void)layoutSubviews {
|
||||
self.backgroundColor = oledColor;
|
||||
%orig;
|
||||
}
|
||||
%end
|
||||
|
||||
%hook YTChannelProfileDescriptionEditorView // edit profile Description
|
||||
-(void)setBackgroundColor:(id)arg1 {
|
||||
arg1 = oledColor;
|
||||
%orig;
|
||||
}
|
||||
%end
|
||||
|
||||
%hook YTChannelProfileNameEditorView // edit profile Name
|
||||
-(void)setBackgroundColor:(id)arg1 {
|
||||
arg1 = oledColor;
|
||||
%orig;
|
||||
}
|
||||
%end
|
||||
|
||||
hook GOOTextField
|
||||
-(void)setBackgroundColor:(id)arg1 { // edit profile Description
|
||||
arg1 = oledColor;
|
||||
%orig;
|
||||
}
|
||||
%end
|
||||
|
||||
%hook GOOMultilineTextField//
|
||||
-(void)setBackgroundColor:(id)arg1 { // edit profile Name
|
||||
arg1 = oledColor;
|
||||
%orig;
|
||||
}
|
||||
%end
|
||||
*/
|
||||
%end
|
||||
|
||||
// YTReExplore: https://github.com/PoomSmart/YTReExplore/
|
||||
%group gReExplore
|
||||
static void replaceTab(YTIGuideResponse *response) {
|
||||
NSMutableArray <YTIGuideResponseSupportedRenderers *> *renderers = [response itemsArray];
|
||||
for (YTIGuideResponseSupportedRenderers *guideRenderers in renderers) {
|
||||
YTIPivotBarRenderer *pivotBarRenderer = [guideRenderers pivotBarRenderer];
|
||||
NSMutableArray <YTIPivotBarSupportedRenderers *> *items = [pivotBarRenderer itemsArray];
|
||||
NSUInteger shortIndex = [items indexOfObjectPassingTest:^BOOL(YTIPivotBarSupportedRenderers *renderers, NSUInteger idx, BOOL *stop) {
|
||||
return [[[renderers pivotBarItemRenderer] pivotIdentifier] isEqualToString:@"FEshorts"];
|
||||
}];
|
||||
if (shortIndex != NSNotFound) {
|
||||
[items removeObjectAtIndex:shortIndex];
|
||||
NSUInteger exploreIndex = [items indexOfObjectPassingTest:^BOOL(YTIPivotBarSupportedRenderers *renderers, NSUInteger idx, BOOL *stop) {
|
||||
return [[[renderers pivotBarItemRenderer] pivotIdentifier] isEqualToString:[%c(YTIBrowseRequest) browseIDForExploreTab]];
|
||||
}];
|
||||
if (exploreIndex == NSNotFound) {
|
||||
YTIPivotBarSupportedRenderers *exploreTab = [%c(YTIPivotBarRenderer) pivotSupportedRenderersWithBrowseId:[%c(YTIBrowseRequest) browseIDForExploreTab] title:@"Explore" iconType:292];
|
||||
[items insertObject:exploreTab atIndex:1];
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
%hook YTGuideServiceCoordinator
|
||||
- (void)handleResponse:(YTIGuideResponse *)response withCompletion:(id)completion {
|
||||
replaceTab(response);
|
||||
%orig(response, completion);
|
||||
}
|
||||
- (void)handleResponse:(YTIGuideResponse *)response error:(id)error completion:(id)completion {
|
||||
replaceTab(response);
|
||||
%orig(response, error, completion);
|
||||
}
|
||||
%end
|
||||
%end
|
||||
|
||||
// BigYTMiniPlayer: https://github.com/Galactic-Dev/BigYTMiniPlayer
|
||||
%group Main
|
||||
%hook YTWatchMiniBarView
|
||||
-(void)setWatchMiniPlayerLayout:(int)arg1 {
|
||||
%orig(1);
|
||||
}
|
||||
-(int)watchMiniPlayerLayout {
|
||||
return 1;
|
||||
}
|
||||
-(void)layoutSubviews {
|
||||
%orig;
|
||||
self.frame = CGRectMake(([UIScreen mainScreen].bounds.size.width - self.frame.size.width), self.frame.origin.y, self.frame.size.width, self.frame.size.height);
|
||||
}
|
||||
%end
|
||||
|
||||
%hook YTMainAppVideoPlayerOverlayView
|
||||
-(BOOL)isUserInteractionEnabled {
|
||||
if([[self _viewControllerForAncestor].parentViewController.parentViewController isKindOfClass:%c(YTWatchMiniBarViewController)]) {
|
||||
return NO;
|
||||
}
|
||||
return %orig;
|
||||
}
|
||||
%end
|
||||
%end
|
||||
|
||||
%ctor {
|
||||
%init;
|
||||
if (oled() && ([[NSUserDefaults standardUserDefaults] integerForKey:@"page_style"] == 1)) {
|
||||
%init(gOLED);
|
||||
}
|
||||
if (ReExplore()) {
|
||||
%init(gReExplore)
|
||||
}
|
||||
if (bigYTMiniPlayer() && (UIDevice.currentDevice.userInterfaceIdiom != UIUserInterfaceIdiomPad)) {
|
||||
%init(Main)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user