Compare commits

...
Author SHA1 Message Date
qnblackcat 5b70271968 v17.18.4-2.1 2022-05-09 15:44:59 +07:00
qnblackcat 968dc841ee improvement 2022-05-09 15:39:34 +07:00
qnblackcat ada2c00338 reorder settings 2022-05-09 15:36:21 +07:00
qnblackcat 0e2ec9a52e Create a new setting category for uYouPlus (by BandarHL), update toggle's description 2022-05-08 11:09:18 +07:00
qnblackcat 274abee25d OLED keyboard (by @ichitaso), code cleanup 2022-05-08 11:08:24 +07:00
Nguyễn Đạt 5b920d7353 Merge pull request #147 from BandarHL/main
Update YouPiP and create new settings category for uYouPlus
2022-05-08 00:31:26 +07:00
BandarHelal 34e34a4fef Move uYouPlus settings to new setting category 2022-05-07 20:04:36 +03:00
BandarHelal 3e4264e3c7 Update YouPiP 2022-05-07 19:53:13 +03:00
qnblackcat e3d779cbf2 code clean up 2022-05-04 11:10:19 +07:00
qnblackcat 314efca54b avoid layoutSubviews 2022-05-04 11:10:06 +07:00
qnblackcat feaeb234cc update .gitignore 2022-05-04 11:09:40 +07:00
Nguyễn Đạt 4502236d64 Merge pull request #138 from PoomSmart/format-cleanup
Code formatting cleanup
2022-05-03 10:52:05 +07:00
PoomSmart 3154b51cf6 Code formatting cleanup 2022-05-03 10:41:26 +07:00
Nguyễn Đạt 4f99b08a63 v17.17.4-2.1 2022-05-02 11:41:57 +07:00
qnblackcat ae1dc1a701 bump version 2022-05-01 03:05:57 +07:00
qnblackcat f1eb708e08 update submodules 2022-04-28 21:52:37 +07:00
qnblackcat 9298cadbf8 clean up 2022-04-28 21:51:30 +07:00
qnblackcat efe8670c51 update description 2022-04-28 21:50:52 +07:00
qnblackcat fb5781865c clean up 2022-04-28 21:47:55 +07:00
qnblackcat afb6bd9842 update buildapp script 2022-04-27 12:45:26 +07:00
qnblackcat 8ee749dad1 add Open in YouTube Extensions 2022-04-27 12:44:27 +07:00
qnblackcat a38e37f6e9 darker? 2022-04-27 12:27:39 +07:00
qnblackcat ff5167af99 v17.16.4-2.1 2022-04-26 00:56:42 +07:00
qnblackcat 62b0168cff update submodules 2022-04-25 17:25:36 +07:00
qnblackcat 5d87e7ee1c update description 2022-04-25 17:03:00 +07:00
qnblackcat 6330c15d2e update submodule 2022-04-25 16:29:01 +07:00
qnblackcat de4f2f7373 clean up code 2022-04-24 22:23:05 +07:00
qnblackcat 67aba1f2ad added YTCastConfirm (JamieBerghmans), hide CC, Autoplay... 2022-04-24 22:22:08 +07:00
qnblackcat d89b146e3d v17.15.2-2.1 2022-04-22 20:21:04 +07:00
12 changed files with 606 additions and 410 deletions
+1
View File
@@ -2,5 +2,6 @@
.DS_Store .DS_Store
packages packages
obj obj
tmp
Tweaks/uYou/* Tweaks/uYou/*
!Tweaks/uYou/.gitkeep !Tweaks/uYou/.gitkeep
+4
View File
@@ -30,3 +30,7 @@
path = Tweaks/YTSpeed path = Tweaks/YTSpeed
url = https://github.com/qnblackcat/YTSpeed.git url = https://github.com/qnblackcat/YTSpeed.git
branch = main branch = main
[submodule "Extensions"]
path = Extensions
url = https://github.com/CokePokes/YoutubeExtensions.git
branch = main
Submodule
+1
Submodule Extensions added at a68d70883d
+45
View File
@@ -0,0 +1,45 @@
#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 NIAttributedLabel : UIView
@end
@interface YTShareMainView : UIView
@end
@interface ASScrollView : UIView
@end
@interface ASCollectionView : UIView
@end
@interface UIKeyboardLayoutStar : UIView
@end
@interface UIKeyboardDockView : UIView
@end
@interface UICandidateViewController : UIViewController
@end
@interface UIPredictionViewController : UIViewController
@end
+2 -2
View File
@@ -10,8 +10,8 @@ TWEAK_NAME = uYouPlus
DISPLAY_NAME = YouTube DISPLAY_NAME = YouTube
BUNDLE_ID = com.google.ios.youtube BUNDLE_ID = com.google.ios.youtube
uYouPlus_FILES = uYouPlus.xm uYouPlus_FILES = uYouPlus.xm Settings.xm
uYouPlus_IPA = /path/to/decrypted/YouTube/IPA uYouPlus_IPA = ./tmp/Payload/YouTube.app
### Important: edit the path to your decrypted YouTube IPA!!! ### Important: edit the path to your decrypted YouTube IPA!!!
include $(THEOS)/makefiles/common.mk include $(THEOS)/makefiles/common.mk
+16 -9
View File
@@ -21,12 +21,14 @@
- [HASHBANG Productions](https://github.com/hbang) for [Alderis Color Picker](https://github.com/hbang/Alderis) - a dependency of iSponsorBlock. - [HASHBANG Productions](https://github.com/hbang) for [Alderis Color Picker](https://github.com/hbang/Alderis) - a dependency of iSponsorBlock.
- [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) - [PoomSmart](https://twitter.com/poomsmart) - the developer of many tweaks used by uYouPlus, include: [NoYTPremium](https://github.com/PoomSmart/NoYTPremium/), [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) - 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/) - [Lyvendia](https://github.com/Lyvendia/) for [YTSpeed](https://github.com/Lyvendia/YTSpeed/)
- [YouTube Extensions](https://github.com/CokePokes/YoutubeExtensions) by [CokePokes](https://github.com/CokePokes/).
- [Al4ise](https://github.com/Al4ise) for [Azule](https://github.com/Al4ise/Azule), a tool used to inject jailbreak tweaks into jailed iOS apps. - [Al4ise](https://github.com/Al4ise) for [Azule](https://github.com/Al4ise/Azule), a tool used to inject jailbreak tweaks into jailed iOS apps.
- [theos team](https://github.com/theos/theos) for theos & theos-jailed. - [theos team](https://github.com/theos/theos) for theos & theos-jailed.
@@ -57,7 +59,9 @@
10. **YouRememberCaption**: make YouTube remember your video caption setting (if not already). 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 11. **NoYTPremium**: remove YouTube Premium upshells.
12. **YTSpeed**: add 2.25, 2.5, 2.75, and 3x playback speed
</details> </details>
@@ -76,31 +80,34 @@
- My official AtlStore repo: https://qnblackcat.github.io/AltStore/ - My official AtlStore repo: https://qnblackcat.github.io/AltStore/
- [Open in AltStore (v17.15.1-2.1)](https://tinyurl.com/bdd57rer) - It will take a while to install because AltStore needs to download the IPA. - [Open in AltStore (v17.18.4-2.1)](https://tinyurl.com/bdzxtdrx) - It will take a while to install because AltStore needs to download the IPA.
- Version info: _(last update: Apr 19)_ - Version info: _(last update: May 09)_
<details> <details>
<summary> Expand</summary> <summary> ▶︎ Expand</summary>
| **Tweaks/App** | **Version** | **Open source** | | **Tweaks/App** | **Version** | **Open source** |
| :------------: | :----------:| :-------------: | | :------------: | :----------:| :-------------: |
| **YouTube** | 17.15.1 | ✖︎ | | **YouTube** | 17.18.4 | ✖︎ |
| **uYou** | 2.1 | ✖︎ | | [uYou](https://github.com/MiRO92/uYou-for-YouTube) | 2.1 | ✖︎ |
| [Open in YouTube](https://github.com/CokePokes/YoutubeExtensions/) | 1.2 | ✖︎ |
| **Return YouTube Dislike** | 1.6.4 | [✔︎](https://github.com/PoomSmart/Return-YouTube-Dislikes) | | **Return YouTube Dislike** | 1.6.4 | [✔︎](https://github.com/PoomSmart/Return-YouTube-Dislikes) |
| **iSponsorBlock** | 1.0-14 | [✔︎](https://github.com/Galactic-Dev/iSponsorBlock) | | **iSponsorBlock** | 1.0-14 | [✔︎](https://github.com/Galactic-Dev/iSponsorBlock) |
| **Alderis Color Picker** | 1.1.2| [✔︎](https://github.com/hbang/Alderis) | | **Alderis Color Picker** | 1.1.2| [✔︎](https://github.com/hbang/Alderis) |
| **NoYTPremium** | 1.0.4 | [✔︎](https://github.com/PoomSmart/NoYTPremium/) |
| **YouRememberCaption** | 1.0.0 | [✔︎](https://poomsmart.github.io/repo/depictions/youremembercaption.html) | | **YouRememberCaption** | 1.0.0 | [✔︎](https://poomsmart.github.io/repo/depictions/youremembercaption.html) |
| **YTClassicVideoQuality** | 1.0.1 | [✔︎](https://github.com/PoomSmart/YTClassicVideoQuality) | | **YTClassicVideoQuality** | 1.0.1 | [✔︎](https://github.com/PoomSmart/YTClassicVideoQuality) |
| **YTNoCheckLocalNetwork** | 1.0.2 | [✔︎](https://poomsmart.github.io/repo/depictions/ytnochecklocalnetwork.html) | | **YTNoCheckLocalNetwork** | 1.0.2 | [✔︎](https://poomsmart.github.io/repo/depictions/ytnochecklocalnetwork.html) |
| **YTNoHoverCards** | 0.0.3 | [✔︎](https://github.com/level3tjg/YTNoHoverCards) | | **YTNoHoverCards** | 0.0.3 | [✔︎](https://github.com/level3tjg/YTNoHoverCards) |
| **YTSystemAppearance** | 1.0.0 | [✔︎](https://poomsmart.github.io/repo/depictions/ytsystemappearance.html) | | **YTSystemAppearance** | 1.0.0 | [✔︎](https://poomsmart.github.io/repo/depictions/ytsystemappearance.html) |
| **YTUHD** | 1.2.6 | [✔︎](https://github.com/PoomSmart/YTUHD) | | **YTUHD** | 1.2.7 | [✔︎](https://github.com/PoomSmart/YTUHD) |
| **YouPiP** | 1.6.9 | [✔︎](https://github.com/PoomSmart/YouPiP) | | **YouPiP** | 1.7.0 | [✔︎](https://github.com/PoomSmart/YouPiP) |
| **YTSpeed** | 1.0.1 | [✔︎](https://github.com/Lyvendia/YTSpeed) | | **YTSpeed** | 1.0.1 | [✔︎](https://github.com/Lyvendia/YTSpeed) |
| **YTAutoFullScreen** | 1.0.3 | [✔︎](https://github.com/PoomSmart/YTAutoFullScreen/) | | **YTAutoFullScreen** | 1.0.3 | [✔︎](https://github.com/PoomSmart/YTAutoFullScreen/) |
| **YTReExplore** | 1.0.2 | [✔︎](https://github.com/PoomSmart/YTReExplore) | | **YTReExplore** | 1.0.2 | [✔︎](https://github.com/PoomSmart/YTReExplore) |
| **BigYTMiniPlayer** | 1.0-1 | [✔︎](https://github.com/Galactic-Dev/BigYTMiniPlayer) | | **BigYTMiniPlayer** | 1.0-1 | [✔︎](https://github.com/Galactic-Dev/BigYTMiniPlayer) |
| **YTCastConfirm** | 1.0.0 | [✔︎](https://github.com/JamieBerghmans/YTCastConfirm) |
</details> </details>
+140
View File
@@ -0,0 +1,140 @@
#import "Tweaks/YouTubeHeader/YTSettingsViewController.h"
#import "Tweaks/YouTubeHeader/YTSettingsSectionItem.h"
#import "Tweaks/YouTubeHeader/YTSettingsSectionItemManager.h"
@interface YTSettingsSectionItemManager (YouPiP)
- (void)updateuYouPlusSectionWithEntry:(id)entry;
@end
static const NSInteger uYouPlusSection = 500;
extern BOOL hideHUD();
extern BOOL oled();
extern BOOL oledKB();
extern BOOL autoFullScreen();
extern BOOL noHoverCard();
extern BOOL ReExplore();
extern BOOL bigYTMiniPlayer();
extern BOOL hideCC();
extern BOOL hideAutoplaySwitch();
extern BOOL castConfirm();
// Settings
%hook YTAppSettingsPresentationData
+ (NSArray *)settingsCategoryOrder {
NSArray *order = %orig;
NSMutableArray *mutableOrder = [order mutableCopy];
NSUInteger insertIndex = [order indexOfObject:@(1)];
if (insertIndex != NSNotFound)
[mutableOrder insertObject:@(uYouPlusSection) atIndex:insertIndex + 1];
return mutableOrder;
}
%end
%hook YTSettingsSectionItemManager
%new - (void)updateuYouPlusSectionWithEntry:(id)entry {
YTSettingsViewController *delegate = [self valueForKey:@"_dataDelegate"];
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;
};
YTSettingsSectionItem *hoverCardItem = [[%c(YTSettingsSectionItem) alloc] initWithTitle:@"Hide End screens hover cards (YTNoHoverCards)" titleDescription:@"Hide creator End screens (thumbnails) 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;
};
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;
};
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;
};
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;
};
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;
};
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;
};
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;
};
YTSettingsSectionItem *oledDarkMode = [[%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)."];
oledDarkMode.hasSwitch = YES;
oledDarkMode.switchVisible = YES;
oledDarkMode.on = [[NSUserDefaults standardUserDefaults] boolForKey:@"oled_enabled"];
oledDarkMode.switchBlock = ^BOOL (YTSettingsCell *cell, BOOL enabled) {
[[NSUserDefaults standardUserDefaults] setBool:enabled forKey:@"oled_enabled"];
return YES;
};
YTSettingsSectionItem *oledKeyBoard = [[%c(YTSettingsSectionItem) alloc] initWithTitle:@"OLED Keyboard" titleDescription:@"Might not working properly in some cases . App restart is required."];
oledKeyBoard.hasSwitch = YES;
oledKeyBoard.switchVisible = YES;
oledKeyBoard.on = [[NSUserDefaults standardUserDefaults] boolForKey:@"oledKeyBoard_enabled"];
oledKeyBoard.switchBlock = ^BOOL (YTSettingsCell *cell, BOOL enabled) {
[[NSUserDefaults standardUserDefaults] setBool:enabled forKey:@"oledKeyBoard_enabled"];
return YES;
};
NSMutableArray <YTSettingsSectionItem *> *sectionItems = [NSMutableArray arrayWithArray:@[autoFull, castConfirm, hideAutoplaySwitch, hideCC, hideHUD, hoverCardItem, bigYTMiniPlayer, oledKeyBoard, oledDarkMode,reExplore]];
[delegate setSectionItems:sectionItems forCategory:uYouPlusSection title:@"uYouPlus" titleDescription:nil headerHidden:NO];
}
- (void)updateSectionForCategory:(NSUInteger)category withEntry:(id)entry {
if (category == uYouPlusSection) {
[self updateuYouPlusSectionWithEntry:entry];
return;
}
%orig;
}
%end
+27 -12
View File
@@ -4,34 +4,49 @@
cd "$(dirname "$0")" cd "$(dirname "$0")"
# Check uYou # Check uYou
if [[ ! -f Tweaks/uYou/com.miro.uyou_2.1_iphoneos-arm.deb ]] if [ ! -f Tweaks/uYou/com.miro.uyou_2.1_iphoneos-arm.deb ]
then then
echo -e "==> \033[1muYou v2.1 is not found. Downloading uYou (v2.1)...\033[0m" echo -e "==> \033[1muYou v2.1 is not found. Downloading uYou (v2.1)...\033[0m"
(set -x ; curl https://miro92.com/repo/debs/com.miro.uyou_2.1_iphoneos-arm.deb --output Tweaks/uYou/com.miro.uyou_2.1_iphoneos-arm.deb) (set -x ; curl https://miro92.com/repo/debs/com.miro.uyou_2.1_iphoneos-arm.deb --output Tweaks/uYou/com.miro.uyou_2.1_iphoneos-arm.deb)
else else
echo -e "==> \033[1mFounded uYou (v2.1)!\033[0m" echo -e "==> \033[1mFounded uYou (v2.1)!\033[0m"
fi fi
# Extract uYou # Extract uYou
echo -e "==> \033[1mExtracting uYou...\033[0m" echo -e "==> \033[1mExtracting uYou...\033[0m"
if (cd Tweaks/uYou && tar -xf com.miro.uyou_2.1_iphoneos-arm.deb && tar -xf data.tar.*) if (cd Tweaks/uYou && tar -xf com.miro.uyou_2.1_iphoneos-arm.deb && tar -xf data.tar.*)
then then
echo -e "\033[1m> Extracted uYou!\033[0m" echo -e "\033[1m> Extracted uYou!\033[0m"
else else
echo "> \033[1mCouldn't extract uYou\033[0m" echo "> \033[1mCouldn't extract uYou\033[0m"
fi fi
# Makefile # Makefile
read -e -p "==> Path to the decrypted YouTube iPA: " PATHTOIPA if [ -d ./tmp ]
if [[ $PATHTOIPA == *.ipa ]] then
rm -rf ./tmp
fi
read -e -p "==> Path to the decrypted YouTube.ipa or YouTube.app: " PATHTOYT
if [[ $PATHTOYT == *.ipa ]]
then 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 make package
open ./packages open ./packages
else else
echo "This is not an iPA" echo "This is not an ipa/app!"
fi fi
# Clean up # Clean up
tput setaf 1 && echo -e "==> \033[1mCleaning up...\033[0m" 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 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
+367 -384
View File
@@ -1,6 +1,7 @@
#import <UIKit/UIKit.h> #import <UIKit/UIKit.h>
#import <Foundation/Foundation.h> #import <Foundation/Foundation.h>
#import <objc/runtime.h> #import <objc/runtime.h>
#import "Header.h"
#import "Tweaks/YouTubeHeader/YTVideoQualitySwitchOriginalController.h" #import "Tweaks/YouTubeHeader/YTVideoQualitySwitchOriginalController.h"
#import "Tweaks/YouTubeHeader/YTSettingsSectionItem.h" #import "Tweaks/YouTubeHeader/YTSettingsSectionItem.h"
#import "Tweaks/YouTubeHeader/YTPlayerViewController.h" #import "Tweaks/YouTubeHeader/YTPlayerViewController.h"
@@ -10,28 +11,6 @@
#import "Tweaks/YouTubeHeader/YTIPivotBarSupportedRenderers.h" #import "Tweaks/YouTubeHeader/YTIPivotBarSupportedRenderers.h"
#import "Tweaks/YouTubeHeader/YTIPivotBarRenderer.h" #import "Tweaks/YouTubeHeader/YTIPivotBarRenderer.h"
#import "Tweaks/YouTubeHeader/YTIBrowseRequest.h" #import "Tweaks/YouTubeHeader/YTIBrowseRequest.h"
#include <RemoteLog.h>
@interface YTMainAppVideoPlayerOverlayView : UIView
-(UIViewController *)_viewControllerForAncestor;
@end
@interface YTWatchMiniBarView : UIView
@end
@interface YTAsyncCollectionView : UIView
@end
@interface YTPlayerViewController (YTAFS)
- (void)autoFullscreen;
@end
@interface ASCollectionView : UIView
@end
@interface YTLightweightQTMButton : UIView
@end
@interface YTELMView : UIView
@end
@interface NIAttributedLabel : UIView
@end
UIColor* oledColor = [UIColor colorWithRed:0.0 green:0.0 blue:0.0 alpha:1.0];
BOOL hideHUD() { BOOL hideHUD() {
return [[NSUserDefaults standardUserDefaults] boolForKey:@"hideHUD_enabled"]; return [[NSUserDefaults standardUserDefaults] boolForKey:@"hideHUD_enabled"];
@@ -39,6 +18,9 @@ BOOL hideHUD() {
BOOL oled() { BOOL oled() {
return [[NSUserDefaults standardUserDefaults] boolForKey:@"oled_enabled"]; return [[NSUserDefaults standardUserDefaults] boolForKey:@"oled_enabled"];
} }
BOOL oledKB() {
return [[NSUserDefaults standardUserDefaults] boolForKey:@"oledKeyBoard_enabled"];
}
BOOL autoFullScreen() { BOOL autoFullScreen() {
return [[NSUserDefaults standardUserDefaults] boolForKey:@"autofull_enabled"]; return [[NSUserDefaults standardUserDefaults] boolForKey:@"autofull_enabled"];
} }
@@ -51,99 +33,42 @@ BOOL ReExplore() {
BOOL bigYTMiniPlayer() { BOOL bigYTMiniPlayer() {
return [[NSUserDefaults standardUserDefaults] boolForKey:@"bigYTMiniPlayer_enabled"]; 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"];
}
//Settings UIColor* oledColor = [UIColor colorWithRed:0.0 green:0.0 blue:0.0 alpha:1.0];
%hook YTSettingsViewController
- (void)setSectionItems:(NSMutableArray <YTSettingsSectionItem *>*)sectionItems forCategory:(NSInteger)category title:(NSString *)title titleDescription:(NSString *)titleDescription headerHidden:(BOOL)headerHidden { // Hide CC / Autoplay switch
if (category == 1) { %hook YTMainAppControlsOverlayView
NSUInteger statsForNerdsIndex = [sectionItems indexOfObjectPassingTest:^BOOL (YTSettingsSectionItem *item, NSUInteger idx, BOOL *stop) { - (void)layoutSubviews {
return item.settingItemId == 265; %orig;
}]; if (hideAutoplaySwitch())
if (statsForNerdsIndex != NSNotFound) { MSHookIvar<UIView *>(self, "_autonavSwitch").hidden = YES;
// if (hideCC())
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."]; MSHookIvar<UIView *>(self, "_closedCaptionsOrSubtitlesButton").hidden = YES;
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 *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 *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 *hideHUD = [[%c(YTSettingsSectionItem) alloc] initWithTitle:@"Hide HUD Messages" titleDescription:@"Example: CC is turned on/off, Video loop is on,... App restart is required."];
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 *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 + 2];
//
YTSettingsSectionItem *Oleditem = [[%c(YTSettingsSectionItem) alloc] initWithTitle:@"OLED Dark mode (Experimental)" titleDescription:@"WARNING: You must set YouTube's appearance to Dark theme before enabling OLED dark mode (iPad is not supported). App restart is required."];
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 %end
// Hide HUD Messages // Hide HUD Messages
%hook YTHUDMessageView %hook YTHUDMessageView
- (id)initWithMessage:(id)arg1 dismissHandler:(id)arg2 { - (id)initWithMessage:(id)arg1 dismissHandler:(id)arg2 {
if (hideHUD()) { return hideHUD() ? nil : %orig;
return NULL;
}
else
return %orig;
} }
%end %end
// YTAutoFullScreen: https://github.com/PoomSmart/YTAutoFullScreen/ // YTAutoFullScreen: https://github.com/PoomSmart/YTAutoFullScreen/
%hook YTPlayerViewController %hook YTPlayerViewController
- (void)loadWithPlayerTransition:(id)arg1 playbackConfig:(id)arg2 { - (void)loadWithPlayerTransition:(id)arg1 playbackConfig:(id)arg2 {
if (autoFullScreen()) {
%orig; %orig;
[NSTimer scheduledTimerWithTimeInterval:0.75 target:self selector:@selector(autoFullscreen) userInfo:nil repeats:NO]; if (autoFullScreen())
} else { return %orig; } [NSTimer scheduledTimerWithTimeInterval:0.75 target:self selector:@selector(autoFullscreen) userInfo:nil repeats:NO];
} }
%new %new
- (void)autoFullscreen { - (void)autoFullscreen {
@@ -155,9 +80,46 @@ BOOL bigYTMiniPlayer() {
// YTNoHoverCards: https://github.com/level3tjg/YTNoHoverCards // YTNoHoverCards: https://github.com/level3tjg/YTNoHoverCards
%hook YTCreatorEndscreenView %hook YTCreatorEndscreenView
- (void)setHidden:(BOOL)hidden { - (void)setHidden:(BOOL)hidden {
if (!noHoverCard()) if (noHoverCard())
hidden = YES; hidden = YES;
%orig; %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];
}
return %orig;
} }
%end %end
@@ -184,6 +146,34 @@ BOOL bigYTMiniPlayer() {
%hook YTColdConfig %hook YTColdConfig
- (BOOL)shouldUseAppThemeSetting { return YES; } - (BOOL)shouldUseAppThemeSetting { return YES; }
- (BOOL)respectDeviceCaptionSetting { return NO; } - (BOOL)respectDeviceCaptionSetting { return NO; }
- (BOOL)isEnhancedSearchBarEnabled { return YES; }
%end
// NOYTPremium - https://github.com/PoomSmart/NoYTPremium/
%hook YTCommerceEventGroupHandler
- (void)addEventHandlers {}
%end
%hook YTInterstitialPromoEventGroupHandler
- (void)addEventHandlers {}
%end
%hook YTPromosheetEventGroupHandler
- (void)addEventHandlers {}
%end
%hook YTPromoThrottleController
- (BOOL)canShowThrottledPromo { return NO; }
- (BOOL)canShowThrottledPromoWithFrequencyCap:(id)arg1 { return NO; }
- (BOOL)canShowThrottledPromoWithFrequencyCaps:(id)arg1 { return NO; }
%end
%hook YTIShowFullscreenInterstitialCommand
- (BOOL)shouldThrottleInterstitial { return YES; }
%end
%hook YTSurveyController
- (void)showSurveyWithRenderer:(id)arg1 surveyParentResponder:(id)arg2 {}
%end %end
// OLED // OLED
@@ -191,64 +181,80 @@ BOOL bigYTMiniPlayer() {
// Thanks sinfool for his flex patch which brings OLED Dark mode for YouTube - "Color Customizer (YouTube) OLED" // Thanks sinfool for his flex patch which brings OLED Dark mode for YouTube - "Color Customizer (YouTube) OLED"
%group gOLED %group gOLED
%hook UIView %hook UIView
-(void)setBackgroundColor:(id)arg1 { - (void)setBackgroundColor:(id)arg1 {
if ([self.nextResponder isKindOfClass:%c(DownloadedVC)]) //uYou if ([self.nextResponder isKindOfClass:%c(YTLinkCell)])
arg1 = oledColor; arg1 = oledColor;
if ([self.nextResponder isKindOfClass:%c(DownloadsPagerVC)]) //uYou if ([self.nextResponder isKindOfClass:%c(YTCommentsHeaderView)])
arg1 = oledColor; arg1 = oledColor;
if ([self.nextResponder isKindOfClass:%c(DownloadingVC)]) //uYou if ([self.nextResponder isKindOfClass:%c(YTSearchView)])
arg1 = oledColor; arg1 = oledColor;
if ([self.nextResponder isKindOfClass:%c(PlayerVC)]) //uYou if ([self.nextResponder isKindOfClass:%c(YTSearchBoxView)])
arg1 = oledColor; arg1 = oledColor;
if ([self.nextResponder isKindOfClass:%c(YTLinkCell)]) if ([self.nextResponder isKindOfClass:%c(YTEngagementPanelHeaderView)])
arg1 = oledColor; arg1 = oledColor;
if ([self.nextResponder isKindOfClass:%c(YTCommentsHeaderView)]) if ([self.nextResponder isKindOfClass:%c(YTEngagementPanelView)])
arg1 = oledColor; arg1 = oledColor;
if ([self.nextResponder isKindOfClass:%c(YTSearchView)]) if ([self.nextResponder isKindOfClass:%c(YTPivotBarView)])
arg1 = oledColor; arg1 = oledColor;
if ([self.nextResponder isKindOfClass:%c(YTSearchBoxView)]) if ([self.nextResponder isKindOfClass:%c(YTHUDMessageView)])
arg1 = oledColor; arg1 = oledColor;
if ([self.nextResponder isKindOfClass:%c(YTEngagementPanelHeaderView)]) if ([self.nextResponder isKindOfClass:%c(YTChipCloudCell)])
arg1 = oledColor; arg1 = oledColor;
if ([self.nextResponder isKindOfClass:%c(YTEngagementPanelView)]) if ([self.nextResponder isKindOfClass:%c(YCHLiveChatTextCell)])
arg1 = oledColor; arg1 = oledColor;
if ([self.nextResponder isKindOfClass:%c(YTPivotBarView)]) if ([self.nextResponder isKindOfClass:%c(YCHLiveChatView)])
arg1 = oledColor; arg1 = oledColor;
if ([self.nextResponder isKindOfClass:%c(YTHUDMessageView)]) if ([self.nextResponder isKindOfClass:%c(YCHLiveChatViewerEngagementCell)])
arg1 = oledColor; arg1 = oledColor;
if ([self.nextResponder isKindOfClass:%c(YTChipCloudCell)]) if ([self.nextResponder isKindOfClass:%c(YTSlideForActionsView)])
arg1 = oledColor; arg1 = oledColor;
if ([self.nextResponder isKindOfClass:%c(YCHLiveChatTextCell)]) if ([self.nextResponder isKindOfClass:%c(YTPlaylistHeaderView)])
arg1 = oledColor; arg1 = oledColor;
if ([self.nextResponder isKindOfClass:%c(YCHLiveChatViewerEngagementCell)]) if ([self.nextResponder isKindOfClass:%c(YTAsyncCollectionView)])
arg1 = oledColor; arg1 = oledColor;
if ([self.nextResponder isKindOfClass:%c(YTSlideForActionsView)]) if ([self.nextResponder isKindOfClass:%c(YTFeedHeaderView)])
arg1 = oledColor; arg1 = oledColor;
if ([self.nextResponder isKindOfClass:%c(YTPlaylistHeaderView)]) if ([self.nextResponder isKindOfClass:%c(YTMessageCell)])
arg1 = oledColor; arg1 = oledColor;
if ([self.nextResponder isKindOfClass:%c(YTAsyncCollectionView)]) if ([self.nextResponder isKindOfClass:%c(YTPlaylistPanelProminentThumbnailVideoCell)])
arg1 = oledColor; arg1 = oledColor;
if ([self.nextResponder isKindOfClass:%c(YTFeedHeaderView)]) if ([self.nextResponder isKindOfClass:%c(ASWAppSwitcherCollectionViewCell)])
arg1 = oledColor; arg1 = oledColor;
if ([self.nextResponder isKindOfClass:%c(YTMessageCell)]) if ([self.nextResponder isKindOfClass:%c(YTEditSheetControllerHeader)])
arg1 = oledColor; arg1 = oledColor;
if ([self.nextResponder isKindOfClass:%c(YTPlaylistPanelProminentThumbnailVideoCell)]) if ([self.nextResponder isKindOfClass:%c(YTDialogContainerScrollView)])
arg1 = oledColor; arg1 = oledColor;
if ([self.nextResponder isKindOfClass:%c(ASWAppSwitcherCollectionViewCell)]) %orig;
arg1 = oledColor; }
if ([self.nextResponder isKindOfClass:%c(YTEditSheetControllerHeader)]) %end
arg1 = oledColor;
%orig; %hook YTLightweightQTMButton
- (void)setBackgroundColor:(id)arg1 {
if ([self.nextResponder isKindOfClass:%c(YTShareMainView)])
arg1 = oledColor;
%orig;
}
- (void)setCustomTitleColor:(id)arg1 { %orig([UIColor whiteColor]); }
%end
%hook NIAttributedLabel
- (void)setBackgroundColor:(id)arg1 {
if ([self.nextResponder isKindOfClass:%c(UIScrollView)])
arg1 = oledColor;
%orig;
}
%end
%hook UIControl // this sucks I know :/
- (void)setBackgroundColor:(id)arg1 {
if ([self.nextResponder isKindOfClass:%c(YTShareMainView)])
arg1 = oledColor;
%orig;
} }
//- (void)layoutSubviews {
// %orig;
// if ([self.nextResponder isKindOfClass:%c(YTALDialog)])
// self.backgroundColor = oledColor;
//}
%end %end
%hook YTAsyncCollectionView %hook YTAsyncCollectionView
-(void)setBackgroundColor:(id)arg1 { - (void)setBackgroundColor:(id)arg1 {
if([self.nextResponder isKindOfClass:%c(YTRelatedVideosCollectionViewController)]) { if([self.nextResponder isKindOfClass:%c(YTRelatedVideosCollectionViewController)]) {
arg1 = [oledColor colorWithAlphaComponent:0.0]; arg1 = [oledColor colorWithAlphaComponent:0.0];
} else if([self.nextResponder isKindOfClass:%c(YTFullscreenMetadataHighlightsCollectionViewController)]) { } else if([self.nextResponder isKindOfClass:%c(YTFullscreenMetadataHighlightsCollectionViewController)]) {
@@ -260,305 +266,279 @@ BOOL bigYTMiniPlayer() {
} }
%end %end
%hook YTTopAlignedView // Example from Dune - https://github.com/Skittyblock/Dune/blob/9b1df9790230115b7553cc9dbadf36889018d7f9/Tweak.xm#L700
-(void)layoutSubviews {
%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 %hook YTWatchMiniBarView
-(void)setBackgroundColor:(id)arg1 { - (void)setBackgroundColor:(id)arg1 {
arg1 = [UIColor colorWithRed:0.0 green:0.0 blue:0.0 alpha:0.9]; arg1 = [UIColor colorWithRed:0.0 green:0.0 blue:0.0 alpha:0.9];
%orig; %orig;
} }
%end %end
%hook YTPlaylistMiniBarView %hook YTPlaylistMiniBarView
-(void)setBackgroundColor:(id)arg1 { - (void)setBackgroundColor:(id)arg1 {
arg1 = [UIColor colorWithRed:0.0 green:0.0 blue:0.0 alpha:0.9]; arg1 = [UIColor colorWithRed:0.0 green:0.0 blue:0.0 alpha:0.9];
%orig; %orig;
} }
%end %end
%hook _LNPopupBarContentView // uYou player %hook _LNPopupBarContentView // uYou player
-(void)setBackgroundColor:(id)arg1 { - (void)setBackgroundColor:(id)arg1 {
arg1 = [UIColor colorWithRed:0.0 green:0.0 blue:0.0 alpha:0.9]; arg1 = [UIColor colorWithRed:0.0 green:0.0 blue:0.0 alpha:0.9];
%orig;
}
%end
%hook YTTopAlignedView
- (void)setBackgroundColor:(id)arg1 { %orig(oledColor); }
- (void)didMoveToWindow { // Dune - https://github.com/Skittyblock/Dune/blob/9b1df9790230115b7553cc9dbadf36889018d7f9/Tweak.xm#L70
MSHookIvar<UIView *>(self, "_contentView").backgroundColor = oledColor;
%orig; %orig;
} }
%end %end
%hook DownloadedVC
- (id)ytBackgroundColor { return oledColor; }
%end
%hook DownloadsPagerVC
- (id)ytBackgroundColor { return oledColor; }
%end
%hook DownloadingVC
- (id)ytBackgroundColor { return oledColor; }
%end
%hook PlayerVC
- (id)ytBackgroundColor { return oledColor; }
%end
%hook ASScrollView // Explore
- (void)didMoveToWindow {
self.backgroundColor = oledColor;
%orig;
}
%end
%hook ASCollectionView // your videos
- (void)didMoveToWindow {
self.backgroundColor = oledColor;
%orig;
}
%end
%hook YTDialogContainerScrollView
- (void)setBackgroundColor:(id)arg1 { %orig(oledColor); }
%end
%hook MDXQueueView // Cast queue
- (void)setBackgroundColor:(id)arg1 { %orig(oledColor); }
%end
%hook YTChannelProfileEditorView
- (void)setBackgroundColor:(id)arg1 { %orig(oledColor); }
%end
%hook YTChannelSubMenuView //
- (void)setBackgroundColor:(id)arg1 { %orig(oledColor); }
%end
%hook YTChannelListSubMenuView // sub -
- (void)setBackgroundColor:(id)arg1 { %orig(oledColor); }
%end
%hook YTCommentView
- (void)setBackgroundColor:(id)arg1 { %orig(oledColor); }
%end
%hook YTCreateCommentAccessoryView
- (void)setBackgroundColor:(id)arg1 { %orig(oledColor); }
%end
%hook YTCreateCommentTextView
- (void)setBackgroundColor:(id)arg1 { %orig(oledColor); }
- (void)setTextColor:(id)arg1 { %orig([UIColor whiteColor]); }
%end
%hook YCHLiveChatActionPanelView
- (void)setBackgroundColor:(id)arg1 { %orig(oledColor); }
%end
%hook YTEmojiTextView
- (void)setBackgroundColor:(id)arg1 { %orig(oledColor); }
%end
%hook YTShareTitleView // Share sheet
- (void)setBackgroundColor:(id)arg1 { %orig(oledColor); }
%end
%hook YTNavigationBar
- (void)setBackgroundColor:(id)arg1 { %orig(oledColor); }
- (void)setBarTintColor:(id)arg1 { %orig(oledColor); }
%end
%hook YTPrivacyTosFooterView
- (void)setBackgroundColor:(id)arg1 { %orig(oledColor); }
%end
%hook YTEngagementPanelHeaderView %hook YTEngagementPanelHeaderView
-(void)setBackgroundColor:(id)arg1 { - (void)setBackgroundColor:(id)arg1 { %orig(oledColor); }
arg1 = oledColor;
%orig;
}
%end %end
%hook YTChannelMobileHeaderView %hook YTChannelMobileHeaderView
-(void)setBackgroundColor:(id)arg1 { - (void)setBackgroundColor:(id)arg1 { %orig(oledColor); }
arg1 = oledColor;
%orig;
}
%end %end
%hook YTInlineSignInView %hook YTInlineSignInView
-(void)setBackgroundColor:(id)arg1 { - (void)setBackgroundColor:(id)arg1 { %orig(oledColor); }
arg1 = oledColor;
%orig;
}
%end %end
%hook YTHeaderView //Stt bar %hook YTHeaderView //Stt bar
-(void)setBackgroundColor:(id)arg1 { - (void)setBackgroundColor:(id)arg1 { %orig(oledColor); }
arg1 = oledColor;
%orig;
}
%end %end
%hook YTTabTitlesView // Tab bar - mychannel %hook YTTabTitlesView // Tab bar - mychannel
-(void)setBackgroundColor:(id)arg1 { - (void)setBackgroundColor:(id)arg1 { %orig(oledColor); }
arg1 = oledColor;
%orig;
}
%end %end
%hook YTSettingsCell // Settings %hook YTSettingsCell // Settings
-(void)setBackgroundColor:(id)arg1 { - (void)setBackgroundColor:(id)arg1 { %orig(oledColor); }
arg1 = oledColor; %end
%orig;
} %hook YTHorizontalCardListView
- (void)setBackgroundColor:(id)arg1 { %orig(oledColor); }
%end
%hook YTShortsGalleryHeaderView // upload videos heaer (gallery)
- (void)setBackgroundColor:(id)arg1 { %orig(oledColor); }
%end %end
%hook GOODialogView // 3 dots menu %hook GOODialogView // 3 dots menu
-(void)setBackgroundColor:(id)arg1 { - (void)setBackgroundColor:(id)arg1 { %orig(oledColor); }
arg1 = oledColor;
%orig;
}
%end %end
%hook YTCollectionView //sharesheet %hook YTCollectionView //sharesheet
-(void)setBackgroundColor:(id)arg1 { - (void)setBackgroundColor:(id)arg1 { %orig(oledColor); }
arg1 = oledColor;
%orig;
}
%end %end
%hook ASWAppSwitchingSheetHeaderView %hook ASWAppSwitchingSheetHeaderView
-(void)setBackgroundColor:(id)arg1 { - (void)setBackgroundColor:(id)arg1 { %orig(oledColor); }
arg1 = oledColor;
%orig;
}
%end %end
%hook ASWAppSwitchingSheetFooterView %hook ASWAppSwitchingSheetFooterView
-(void)setBackgroundColor:(id)arg1 { - (void)setBackgroundColor:(id)arg1 { %orig(oledColor); }
arg1 = oledColor;
%orig;
}
%end %end
%hook YTCollectionSeparatorView %hook YTCollectionSeparatorView
-(void)setBackgroundColor:(id)arg1 { - (void)setBackgroundColor:(id)arg1 { %orig(oledColor); }
arg1 = oledColor; - (void)didMoveToWindow {}
%orig;
}
- (void)layoutSubviews {}
%end
%hook ASCollectionView
-(void)layoutSubviews {
self.backgroundColor = oledColor;
%orig;
}
%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 %end
%hook YTShareBusyView // sharesheet load %hook YTShareBusyView // sharesheet load
-(void)setBackgroundColor:(id)arg1 { - (void)setBackgroundColor:(id)arg1 { %orig(oledColor); }
arg1 = oledColor; %end
%orig;
} %hook YTPageView
- (void)setBackgroundColor:(id)arg1 { %orig(oledColor); }
%end
%hook YTWatchView
- (void)setBackgroundColor:(id)arg1 { %orig(oledColor); }
%end
%hook YTSearchBarView
- (void)setBackgroundColor:(id)arg1 { %orig(oledColor); }
%end
%hook YTSearchBoxView
- (void)setBackgroundColor:(id)arg1 { %orig(oledColor); }
%end %end
%hook YTSearchSuggestionCollectionViewCell %hook YTSearchSuggestionCollectionViewCell
-(void)updateColors {} - (void)updateColors {}
%end %end
%hook UISearchBarBackground %hook UISearchBarBackground
-(void)setBarTintColor:(id)arg1 { - (void)setBarTintColor:(id)arg1 { %orig(oledColor); }
arg1 = oledColor;
%orig;
}
%end %end
%hook YTELMView // upload videos %hook YTMealBarPromoView // Offline
-(void)layoutSubviews { - (void)setBackgroundColor:(id)arg1 { %orig(oledColor); }
%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 %end
////
/* /*
%hook YTShortsGalleryHeaderView // upload videos heaer (gallery) %hook UICollectionView
-(void)setBackgroundColor:(id)arg1 { - (void)setBackgroundColor:(id)arg1 {
if ([self.nextResponder isKindOfClass:%c(UICollectionViewControllerWrapperView)])
arg1 = oledColor; arg1 = oledColor;
%orig; %orig;
} }
%end %end
%hook _ASDisplayView // edit your videos %hook _ASDisplayView // edit your videos
-(void)layoutSubviews { - (void)layoutSubviews {
if ([self.nextResponder isKindOfClass:%c(ELMView)]) //uYou if ([self.nextResponder isKindOfClass:%c(ELMView)])
self.backgroundColor = oledColor; self.backgroundColor = oledColor;
} }
%end %end
%hook YTChannelProfileDescriptionEditorView // edit profile Description %hook YTChannelProfileDescriptionEditorView // edit profile Description
-(void)setBackgroundColor:(id)arg1 { - (void)setBackgroundColor:(id)arg1 { %orig(oledColor); }
arg1 = oledColor;
%orig;
}
%end %end
%hook YTChannelProfileNameEditorView // edit profile Name %hook YTChannelProfileNameEditorView // edit profile Name
-(void)setBackgroundColor:(id)arg1 { - (void)setBackgroundColor:(id)arg1 { %orig(oledColor); }
arg1 = oledColor;
%orig;
}
%end %end
hook GOOTextField hook GOOTextField
-(void)setBackgroundColor:(id)arg1 { // edit profile Description - (void)setBackgroundColor:(id)arg1 { // edit profile Description
arg1 = oledColor; arg1 = oledColor;
%orig; %orig;
} }
%end %end
%hook GOOMultilineTextField// %hook GOOMultilineTextField//
-(void)setBackgroundColor:(id)arg1 { // edit profile Name - (void)setBackgroundColor:(id)arg1 { // edit profile Name
arg1 = oledColor; arg1 = oledColor;
%orig; %orig;
} }
%end %end
*/ */
%end %end
%group gOLEDKB // OLED keyboard by @ichitaso <3 - http://gist.github.com/ichitaso/935100fd53a26f18a9060f7195a1be0e
%hook UIPredictionViewController
- (void)loadView {
%orig;
[self.view setBackgroundColor:oledColor];
}
%end
%hook UICandidateViewController
- (void)loadView {
%orig;
[self.view setBackgroundColor:oledColor];
}
%end
%hook UIKeyboardDockView
- (void)didMoveToWindow {
self.backgroundColor = oledColor;
%orig;
}
%end
%hook UIKeyboardLayoutStar
- (void)didMoveToWindow {
self.backgroundColor = oledColor;
%orig;
}
%end
%hook UIKBRenderConfig // Prediction text color
- (void)setLightKeyboard:(BOOL)arg1 { %orig(NO); }
%end
%end
// YTReExplore: https://github.com/PoomSmart/YTReExplore/ // YTReExplore: https://github.com/PoomSmart/YTReExplore/
%group gReExplore %group gReExplore
static void replaceTab(YTIGuideResponse *response) { static void replaceTab(YTIGuideResponse *response) {
@@ -596,20 +576,20 @@ static void replaceTab(YTIGuideResponse *response) {
// BigYTMiniPlayer: https://github.com/Galactic-Dev/BigYTMiniPlayer // BigYTMiniPlayer: https://github.com/Galactic-Dev/BigYTMiniPlayer
%group Main %group Main
%hook YTWatchMiniBarView %hook YTWatchMiniBarView
-(void)setWatchMiniPlayerLayout:(int)arg1 { - (void)setWatchMiniPlayerLayout:(int)arg1 {
%orig(1); %orig(1);
} }
-(int)watchMiniPlayerLayout { - (int)watchMiniPlayerLayout {
return 1; return 1;
} }
-(void)layoutSubviews { - (void)layoutSubviews {
%orig; %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); 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 %end
%hook YTMainAppVideoPlayerOverlayView %hook YTMainAppVideoPlayerOverlayView
-(BOOL)isUserInteractionEnabled { - (BOOL)isUserInteractionEnabled {
if([[self _viewControllerForAncestor].parentViewController.parentViewController isKindOfClass:%c(YTWatchMiniBarViewController)]) { if([[self _viewControllerForAncestor].parentViewController.parentViewController isKindOfClass:%c(YTWatchMiniBarViewController)]) {
return NO; return NO;
} }
@@ -620,13 +600,16 @@ static void replaceTab(YTIGuideResponse *response) {
%ctor { %ctor {
%init; %init;
if (oled()) { if (oled() && ([[NSUserDefaults standardUserDefaults] integerForKey:@"page_style"] == 1)) {
%init(gOLED); %init(gOLED);
} }
if (oledKB()) {
%init(gOLEDKB);
}
if (ReExplore()) { if (ReExplore()) {
%init(gReExplore) %init(gReExplore);
} }
if (bigYTMiniPlayer() && (UIDevice.currentDevice.userInterfaceIdiom != UIUserInterfaceIdiomPad)) { if (bigYTMiniPlayer() && (UIDevice.currentDevice.userInterfaceIdiom != UIUserInterfaceIdiomPad)) {
%init(Main) %init(Main);
} }
} }