Compare commits

..
Author SHA1 Message Date
qnblackcat d53b400235 v17.31.4-2.1 2022-08-12 22:00:53 +07:00
qnblackcat 3cabc4405d update uYouPlus.xm 2022-08-12 22:00:36 +07:00
qnblackcat d3a347a914 add Japan localization, credit: @Haerumastu - Twitter 2022-08-10 21:41:59 +07:00
Nguyễn Đạt 17adfaf534 Merge pull request #362 from fefifofum/main
Add Spanish translation
2022-08-10 21:38:09 +07:00
Nguyễn Đạt edc1ac3912 Update Localizable.strings 2022-08-10 21:37:47 +07:00
Nguyễn Đạt 21d3e74f9f Merge pull request #361 from Thunderz2016/main
Add Simplified Chinese (zh_cn) translation
2022-08-10 21:37:14 +07:00
qnblackcat 3bd1914a36 update submodules 2022-08-10 21:30:43 +07:00
fefifofum 7ff88f4106 Add Spanish translation 2022-08-10 10:36:01 +02:00
Thunderz2016 b6304bf20a Added Simplified Chinese translation
Minor grammar improvements.
2022-08-09 23:32:07 -07:00
Thunderz2016 0db3c368a0 Added Simplified Chinese translation
Deleted comments that contain instructions to create translations.
2022-08-09 23:21:20 -07:00
Thunderz2016 9bd31e7189 Added Simplified Chinese translation 2022-08-09 23:16:28 -07:00
Nguyễn Đạt 58488a1d89 Merge pull request #350 from moh-ter/main
Update Ar Translation
2022-08-07 08:34:08 +07:00
moh-ter c9547cae78 Merge branch 'qnblackcat:main' into main 2022-08-06 16:53:16 +03:00
moh-ter f8336d0352 Fix Ar Translation + add "Kill App" translation
Fix Ar Translation .. sorry for the mistake.

+ add translation for the new strings
2022-08-06 16:23:35 +03:00
qnblackcat e549c1e9e9 fixed missing scroll bar in Shorts (#343) 2022-08-06 11:31:20 +07:00
qnblackcat afb5cf1cb6 update submodules 2022-08-06 11:28:53 +07:00
qnblackcat f275f72413 use iOS 15.5 SDK 2022-08-05 23:20:17 +07:00
qnblackcat 46b4ea6a27 update submodules 2022-08-05 23:18:20 +07:00
qnblackcat 23ba60a3ba v17.30.3-2.1 (pre-release) 2022-08-05 23:17:09 +07:00
qnblackcat 93b7aa9258 update Settings.xm 2022-08-04 23:20:29 +07:00
qnblackcat 0db1e09917 update submodules 2022-08-04 20:56:57 +07:00
Nguyễn Đạt 6a8798597b Merge pull request #336 from 5jd/patch-1
Update French translation
2022-08-04 20:54:34 +07:00
5jd ac6fa7b853 Add close Youtube French translation
Adds the Close Youtube French translation
2022-08-04 14:09:35 +02:00
Nguyễn Đạt 49b75626b9 Merge pull request #329 from VictorxD70/main
Add Portuguese Brazilian translation
2022-08-03 16:50:47 +07:00
Victor Alves 8ec1cb8cba Set lang code to 'pt' to stay right with youtube app 2022-08-03 05:15:24 -03:00
Victor Alves 12f80fa7ee Add Portuguese Brazilian translation 2022-08-02 15:42:11 -03:00
qnblackcat 09b765d7d9 update strings 2022-08-02 23:34:38 +07:00
qnblackcat fd8dc7a61d close app button 2022-08-02 23:34:25 +07:00
qnblackcat 1036272ce3 update submodules 2022-08-02 23:33:46 +07:00
qnblackcat 41ae9ef959 update submodules 2022-08-02 22:41:19 +07:00
qnblackcat 2b141cb50f minor improvements 2022-07-30 17:45:58 +07:00
qnblackcat 02addcb00c update submodules 2022-07-30 17:45:13 +07:00
Nguyễn Đạt 53f62444ba Merge pull request #317 from ErSpieltHD/patch-2
Retranslation + Paid Promo Banner (de)
2022-07-29 09:36:45 +07:00
ErSpieltHD 922b86a749 Retranslation + Paid Promo Banner 2022-07-28 21:45:12 +02:00
Nguyễn Đạt 976c103dce Merge pull request #312 from clc0321/main
update zh_tw translation
2022-07-27 21:57:59 +07:00
clc0321 8dc2ed3166 Update Localizable.strings 2022-07-27 22:01:13 +08:00
clc0321 932cae3473 Update zh_tw translation
fix some minor issues
2022-07-27 21:58:43 +08:00
BandarHelal 3d05302b9b Fix typo 2022-07-26 00:07:01 +03:00
Nguyễn Đạt 40af55583f Merge pull request #305 from manhbi18112005/patch-1
Update Vietnamese localization
2022-07-25 20:26:28 +07:00
Nguyễn Đạt e389801893 update Vietnamese localization 2022-07-25 20:25:38 +07:00
๖ۣۜŇŇ_MyTツ ee98ec6237 Update Localizable.strings 2022-07-25 18:10:28 +07:00
Nguyễn Đạt 516749e081 Merge pull request #298 from miraficus/main
Czech Language
2022-07-25 17:23:42 +07:00
Nguyễn Đạt c5935309ca Update bug.md 2022-07-25 17:23:07 +07:00
Miraficus 94fdb176ea Revert "Changed name to YoutubePlus"
This reverts commit 11308d59b5.
2022-07-24 20:18:46 +02:00
Miraficus a2b9a6ac73 Merge branch 'qnblackcat:main' into main 2022-07-24 20:15:44 +02:00
qnblackcat 96b62b5791 update strings 2022-07-23 23:36:08 +07:00
Nguyễn Đạt 49615dd41c Merge pull request #301 from 5jd/patch-1
Add the french translation for HIDE_PAID_PROMOTION_CARDS
2022-07-23 23:22:55 +07:00
5jd 96c528fa72 Add the translation for HIDE_PAID_PROMOTION_CARDS 2022-07-23 18:03:08 +02:00
Nguyễn Đạt d959269a3b Merge pull request #300 from moh-ter/main
Arabic Translation
2022-07-23 21:21:39 +07:00
moh-ter 7045e82565 Ar Translation 2022-07-23 16:39:53 +03:00
Miraficus 11308d59b5 Changed name to YoutubePlus 2022-07-21 20:40:35 +02:00
Miraficus e6622b7e74 Fixed typo 2022-07-21 20:17:28 +02:00
Miraficus f8a02e11d7 Czech translation 2022-07-21 20:15:10 +02:00
qnblackcat 43d593d88d Merge branch 'main' of https://github.com/qnblackcat/uYouPlus 2022-07-20 08:48:23 +07:00
qnblackcat f4bf32bcad Enable Reorder videos from playlist by @PoomSmart 2022-07-20 08:44:23 +07:00
Nguyễn Đạt b16c54cd63 Merge pull request #279 from UnrealThingTriesCode/patch-1
couple spelling corrections, keep up the good work
2022-07-13 11:57:08 +07:00
Sunka f45f1946b4 couple spelling corrections, keep up the good work 2022-07-12 21:04:10 +02:00
qnblackcat f325a31196 v17.26.2-2.1 2022-07-11 20:20:26 +07:00
qnblackcat cab48bbe9e update submodules 2022-07-11 19:57:05 +07:00
qnblackcat 5424e4a9e8 use ARC 2022-07-01 10:06:34 +07:00
qnblackcat d7a7c90cf0 update localization 2022-07-01 10:05:19 +07:00
qnblackcat fe45ebaac1 update Header.h 2022-07-01 10:05:02 +07:00
qnblackcat 4590369aa1 clean up 2022-07-01 10:04:55 +07:00
qnblackcat 36bf21ad2e update localization 2022-06-30 10:28:38 +07:00
qnblackcat c2d1581698 hide Paid promotion card by @PoomSmart 2022-06-30 10:28:19 +07:00
qnblackcat ca0650d73a update submodules 2022-06-30 10:24:49 +07:00
qnblackcat ad29207afd v17.25.1-2.1 2022-06-29 21:06:26 +07:00
qnblackcat 64c7717b38 update submodules 2022-06-29 21:05:59 +07:00
qnblackcat 25f66162c5 update submodule 2022-06-28 15:36:23 +07:00
qnblackcat 5becdf5a85 Merge branch 'main' of https://github.com/qnblackcat/uYouPlus 2022-06-27 09:11:54 +07:00
qnblackcat 9145301cc8 support YT v17.25.1 2022-06-27 09:11:10 +07:00
qnblackcat b2b14305eb update Header.h 2022-06-27 08:50:15 +07:00
Nguyễn Đạt 02ec80256c Merge pull request #245 from ErSpieltHD/patch-1
Update German translation
2022-06-27 01:19:04 +07:00
Nguyễn Đạt b37f1e1a24 update German localization 2022-06-27 01:18:43 +07:00
ErSpieltHD 244e5a3576 German translation 2022-06-26 17:43:15 +02:00
qnblackcat 3a532cfa63 update Header.h 2022-06-26 10:12:50 +07:00
qnblackcat ef153f5d9c clean up 2022-06-26 10:11:19 +07:00
qnblackcat 4258986378 update submodules 2022-06-26 10:06:12 +07:00
qnblackcat dae08da6bf update workflow 2022-06-26 10:00:28 +07:00
qnblackcat 7f0e749030 Merge branch 'main' of https://github.com/qnblackcat/uYouPlus 2022-06-24 10:47:24 +07:00
qnblackcat c6dd02a759 update submodules 2022-06-24 10:47:11 +07:00
Nguyễn Đạt 23d745e869 Merge pull request #240 from level3tjg/main
uYou crash workarounds
2022-06-24 10:45:55 +07:00
level3tjg 2116d96e6a uYouLocal crash workaround 2022-06-23 12:42:28 -04:00
level3tjg f2cb699e3b Notification menu crash workaround 2022-06-23 12:19:22 -04:00
qnblackcat fbafccf1bd v17.24.4-2.1 2022-06-22 09:26:17 +07:00
qnblackcat 029ab22b9f update Header.h 2022-06-22 09:26:06 +07:00
qnblackcat f4215a7b0b code format 2022-06-22 09:25:54 +07:00
qnblackcat 0d1e7bad8e Merge branch 'ErSpieltHD-main' 2022-06-19 21:42:50 +07:00
ErSpieltHD e97ada36c1 Update Localizable.strings 2022-06-19 16:05:39 +02:00
ErSpieltHD 4d1b478606 Create Localizable.strings 2022-06-19 15:31:55 +02:00
26 changed files with 712 additions and 188 deletions
+2 -1
View File
@@ -27,6 +27,7 @@ _(Please attach videos or screenshots if possible)_
### Crash log (if possible) ### Crash log (if possible)
_(The crash log can be found in the Settings app - Privacy - Analytics & Improvements - Analytics Data - Youtube...)_ _(The crash log can be found in the Settings app - Privacy - Analytics & Improvements - Analytics Data - Youtube...)_
### Does the issue happen with the official YouTube from AppStore?
_(Well, YouTube itself is buggy sometimes...)_
### Additional context: ### Additional context:
+5 -8
View File
@@ -56,13 +56,10 @@ jobs:
path: theos path: theos
submodules: recursive submodules: recursive
- name: Download iOS 15 SDK - name: Download iOS 15.5 SDK
run: | run: |
curl -LO https://github.com/chrisharper22/sdks/archive/main.zip svn checkout -q https://github.com/chrisharper22/sdks/trunk/iPhoneOS15.5.sdk
TMP=$(mktemp -d) mv *.sdk $THEOS/sdks
unzip -qq main.zip -d $TMP
mv $TMP/sdks-main/*.sdk $THEOS/sdks
rm -r main.zip $TMP
env: env:
THEOS: ${{ github.workspace }}/theos THEOS: ${{ github.workspace }}/theos
@@ -80,7 +77,7 @@ jobs:
env: env:
THEOS: ${{ github.workspace }}/theos THEOS: ${{ github.workspace }}/theos
- name: Download Dylibs - name: Download uYou & prepare YouTube iPA
run: | run: |
curl "https://raw.githubusercontent.com/Muirey03/RemoteLog/master/RemoteLog.h" --output "$THEOS/include/RemoteLog.h" curl "https://raw.githubusercontent.com/Muirey03/RemoteLog/master/RemoteLog.h" --output "$THEOS/include/RemoteLog.h"
curl "https://miro92.com/repo/debs/com.miro.uyou_${{ env.UYOU_VERSION }}_iphoneos-arm.deb" --output "./main/Tweaks/uYou/com.miro.uyou_${{ env.UYOU_VERSION }}_iphoneos-arm.deb" curl "https://miro92.com/repo/debs/com.miro.uyou_${{ env.UYOU_VERSION }}_iphoneos-arm.deb" --output "./main/Tweaks/uYou/com.miro.uyou_${{ env.UYOU_VERSION }}_iphoneos-arm.deb"
@@ -99,7 +96,7 @@ jobs:
id: build_package id: build_package
run: | run: |
cd ${{ github.workspace }}/main cd ${{ github.workspace }}/main
(cd ${{ github.workspace }}/main/Tweaks/YouPiP && sed -i '' "14s#.*#YouPiP_FRAMEWORKS = AVKit AVFoundation UIKit#g" ./Makefile) (cd ${{ github.workspace }}/main/Tweaks/YouPiP && sed -i '' "14s/$/ AVFoundation UIKit/" Makefile)
make package FINALPACKAGE=1 make package FINALPACKAGE=1
(mv "packages/$(ls -t packages | head -n1)" "packages/uYouPlus_${{ env.YOUTUBE_VERSION }}_${{ env.UYOU_VERSION }}.ipa") (mv "packages/$(ls -t packages | head -n1)" "packages/uYouPlus_${{ env.YOUTUBE_VERSION }}_${{ env.UYOU_VERSION }}.ipa")
echo "::set-output name=package::$(ls -t packages | head -n1)" echo "::set-output name=package::$(ls -t packages | head -n1)"
+19 -3
View File
@@ -15,10 +15,18 @@
@interface YTTransportControlsButtonView : UIView @interface YTTransportControlsButtonView : UIView
@end @end
// @interface YTPlaylistHeaderViewController : UIViewController @interface _ASCollectionViewCell : UICollectionViewCell
// @property (nonatomic, strong, readwrite) UIView *downloadsButton; - (id)node;
// @end @end
@interface YTAsyncCollectionView : UICollectionView
- (void)removeShortsAndFeaturesAdsAtIndexPath:(NSIndexPath *)indexPath;
@end
@interface FRPSliderCell : UITableViewCell
@end
// iOS16 fix
@interface OBPrivacyLinkButton : UIButton @interface OBPrivacyLinkButton : UIButton
- (instancetype)initWithCaption:(NSString *)caption - (instancetype)initWithCaption:(NSString *)caption
buttonText:(NSString *)buttonText buttonText:(NSString *)buttonText
@@ -28,6 +36,11 @@
displayLanguage:(NSString *)displayLanguage; displayLanguage:(NSString *)displayLanguage;
@end @end
// uYouLocal fix
@interface YTLocalPlaybackController : NSObject
- (id)activeVideo;
@end
// BigYTMiniPlayer // BigYTMiniPlayer
@interface YTMainAppVideoPlayerOverlayView : UIView @interface YTMainAppVideoPlayerOverlayView : UIView
- (UIViewController *)_viewControllerForAncestor; - (UIViewController *)_viewControllerForAncestor;
@@ -57,6 +70,9 @@
@interface _ASDisplayView : UIView @interface _ASDisplayView : UIView
@end @end
@interface YTCommentDetailHeaderCell : UIView
@end
@interface SponsorBlockSettingsController : UITableViewController @interface SponsorBlockSettingsController : UITableViewController
@end @end
+1
View File
@@ -14,6 +14,7 @@ uYouPlus_INJECT_DYLIBS = Tweaks/uYou/Library/MobileSubstrate/DynamicLibraries/uY
uYouPlus_FILES = uYouPlus.xm Settings.xm uYouPlus_FILES = uYouPlus.xm Settings.xm
uYouPlus_IPA = ./tmp/Payload/YouTube.app uYouPlus_IPA = ./tmp/Payload/YouTube.app
uYouPlus_FRAMEWORKS = UIKit uYouPlus_FRAMEWORKS = UIKit
uYouPlus_CFLAGS = -fobjc-arc
include $(THEOS)/makefiles/common.mk include $(THEOS)/makefiles/common.mk
include $(THEOS_MAKE_PATH)/tweak.mk include $(THEOS_MAKE_PATH)/tweak.mk
+45 -39
View File
@@ -19,18 +19,20 @@
- [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: [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/), [IAmYouTube](https://github.com/PoomSmart/IAmYouTube), [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, see [Version info - Download](#download) for more details.
- [level3tjg](https://twitter.com/level3tjg) - for [YTNoHoverCards](https://github.com/level3tjg/YTNoHoverCards) and [YTMiniplayerEnabler](https://github.com/level3tjg/YTMiniplayerEnabler). - [level3tjg](https://twitter.com/level3tjg) for [YTNoHoverCards](https://github.com/level3tjg/YTNoHoverCards), [YTMiniplayerEnabler](https://github.com/level3tjg/YTMiniplayerEnabler) and many hot patches for uYou.
- [BandarHL](https://twitter.com/bandarhl) for a bunch of improvements.
- [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/). - [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.
- [theos team](https://github.com/theos/theos) for theos & theos-jailed. - [theos team](https://github.com/theos/theos) for theos & theos-jailed.
- Thanks to all the translators who have contributed to uYouPlus. Your contribution is highly appreciated!
# Features # Features
1. **uYou:** uYou has a ton of features that I can't list them all. Visit [here](https://miro92.com/repo/depictions/?p=com.miro.uyou) for more info! 1. **uYou:** uYou has a ton of features that I can't list them all. Visit [here](https://miro92.com/repo/depictions/?p=com.miro.uyou) for more info!
@@ -50,17 +52,15 @@
7. **YTNoHoverCards:** offer an option to enable/disable the annoying suggested videos show up at the end of the videos. 7. **YTNoHoverCards:** offer an option to enable/disable the annoying suggested videos show up at the end of the videos.
8. **YTSystemAppearance**: sync the YouTube theme (dark/light) with the system theme. 8. **YTNoCheckLocalNetwork**: block the Local Network permission popup.
9. **YTNoCheckLocalNetwork**: block the Local Network permission popup. 9. **YouRememberCaption**: make YouTube remember your video caption setting (if not already).
10. **YouRememberCaption**: make YouTube remember your video caption setting (if not already). 10. **NoYTPremium**: remove YouTube Premium upshells.
11. **NoYTPremium**: remove YouTube Premium upshells. 11. **YTSpeed**: add 2.25, 2.5, 2.75, and 3x playback speed
12. **YTSpeed**: add 2.25, 2.5, 2.75, and 3x playback speed 12. **YTMiniplayerEnabler**: enable Miniplayer for all YouTube videos.
13. **YTMiniplayerEnabler**: enable Miniplayer for all YouTube videos.
</details> </details>
@@ -72,42 +72,42 @@
# Download # Download
- **uYouPlus** (or you can call it uYou+) requires iOS & iPadOS 13.0 or later. The latest version of **uYouPlus** can be found in the [Release tab](https://github.com/qnblackcat/uYouPlus/releases). - **uYouPlus** (or you can call it uYou+) requires iOS or iPadOS 13.0 or later. The latest version of **uYouPlus** can be found in the [Release tab](https://github.com/qnblackcat/uYouPlus/releases).
- For AltStore user: - For AltStore user:
- My official AtlStore repo: https://qnblackcat.github.io/AltStore/ - My official AltStore repo: https://qnblackcat.github.io/AltStore/
- [Open in AltStore (v17.23.6-2.1)](https://tinyurl.com/5upjtvbv) - It will take a while to install because AltStore needs to download the IPA. - [Open in AltStore (v17.31.4-2.1)](https://tinyurl.com/2p99amjz) - It will take a while to install because AltStore needs to download the IPA.
- Version info: _(last update: June 14)_ - Version info: _(last update: Aug 12)_
<details> <details>
<summary>Expand</summary> <summary>Expand</summary>
| **Tweaks/App** | **Version** | **Open source** | | **Tweaks/App** | **Developer** | **Version** | **Open source** |
| :------------: | :----------:| :-------------: | | - | - | :-: | :-: |
| **YouTube** | 17.23.6 | ✖︎ | | **YouTube** | Google Inc | 17.31.4 | ✖︎ |
| [uYou](https://github.com/MiRO92/uYou-for-YouTube) | 2.1 | ✖︎ | | [uYou](https://github.com/MiRO92/uYou-for-YouTube) | [MiRO92](https://twitter.com/miro92) | 2.1 | ✖︎ |
| [Open in YouTube](https://github.com/CokePokes/YoutubeExtensions/) | 1.2 | ✖︎ | | [Open in YouTube](https://github.com/CokePokes/YoutubeExtensions) | [CokePokes](https://github.com/CokePokes) | 1.2 | ✖︎ |
| **Return YouTube Dislike** | 1.6.5 | [✔︎](https://github.com/PoomSmart/Return-YouTube-Dislikes) | | **iSponsorBlock** | [Galactic-Dev](https://github.com/Galactic-Dev) | 1.0-15 | [✔︎](https://github.com/Galactic-Dev/iSponsorBlock) |
| **iSponsorBlock** | 1.0-14 | [✔︎](https://github.com/Galactic-Dev/iSponsorBlock) | | **BigYTMiniPlayer** | [Galactic-Dev](https://github.com/Galactic-Dev) | 1.0-1 | [✔︎](https://github.com/Galactic-Dev/BigYTMiniPlayer) |
| **Alderis Color Picker** | 1.2| [✔︎](https://github.com/hbang/Alderis) | | **YTNoHoverCards** | [level3tjg](https://twitter.com/level3tjg) | 0.0.3 | [✔︎](https://github.com/level3tjg/YTNoHoverCards) |
| **NoYTPremium** | 1.0.4 | [✔︎](https://github.com/PoomSmart/NoYTPremium/) | | **YTMiniplayerEnabler** | [level3tjg](https://twitter.com/level3tjg) | 0.0.2 | [✔︎](https://github.com/level3tjg/YTMiniplayerEnabler) |
| **YouRememberCaption** | 1.0.0 | [✔︎](https://poomsmart.github.io/repo/depictions/youremembercaption.html) | | **YTSpeed** | [Lyvendia](https://github.com/Lyvendia) | 1.0.1 | [✔︎](https://github.com/Lyvendia/YTSpeed) |
| **YTClassicVideoQuality** | 1.0.1 | [✔︎](https://github.com/PoomSmart/YTClassicVideoQuality) | | **YTCastConfirm** | [JamieBerghmans](https://github.com/JamieBerghmans) | 1.0.0 | [✔︎](https://github.com/JamieBerghmans/YTCastConfirm) |
| **YTNoCheckLocalNetwork** | 1.0.2 | [✔︎](https://poomsmart.github.io/repo/depictions/ytnochecklocalnetwork.html) | | **Alderis Color Picker** | [HASHBANG Productions](https://github.com/hbang) | 1.2| [✔︎](https://github.com/hbang/Alderis) |
| **YTNoHoverCards** | 0.0.3 | [✔︎](https://github.com/level3tjg/YTNoHoverCards) | | **YTUHD** | [PoomSmart](https://twitter.com/poomsmart) | 1.2.9 | [✔︎](https://github.com/PoomSmart/YTUHD) |
| **YTSystemAppearance** | 1.0.0 | [✔︎](https://poomsmart.github.io/repo/depictions/ytsystemappearance.html) | | **YouPiP** | [PoomSmart](https://twitter.com/poomsmart) | 1.7.7 | [✔︎](https://github.com/PoomSmart/YouPiP) |
| **YTUHD** | 1.2.7 | [✔︎](https://github.com/PoomSmart/YTUHD) | | **IAmYouTube** | [PoomSmart](https://twitter.com/poomsmart) | 1.2.0 | [✔︎](https://github.com/PoomSmart/IAmYouTube) |
| **YouPiP** | 1.7.3 | [✔︎](https://github.com/PoomSmart/YouPiP) | | **YTReExplore** | [PoomSmart](https://twitter.com/poomsmart) | 1.0.2 | [✔︎](https://github.com/PoomSmart/YTReExplore) |
| **IAmYouTube** | 1.2.0 | [✔︎](https://github.com/PoomSmart/IAmYouTube) | | **NoYTPremium** | [PoomSmart](https://twitter.com/poomsmart) | 1.0.4 | [✔︎](https://github.com/PoomSmart/NoYTPremium) |
| **YTSpeed** | 1.0.1 | [✔︎](https://github.com/Lyvendia/YTSpeed) | | **YTNoPaidPromo** | [PoomSmart](https://twitter.com/poomsmart) | 1.0.0 | [✔︎](https://github.com/PoomSmart/YTNoPaidPromo) |
| **YTAutoFullScreen** | 1.0.3 | [✔︎](https://github.com/PoomSmart/YTAutoFullScreen/) | | **YTAutoFullScreen** | [PoomSmart](https://twitter.com/poomsmart) | 1.0.3 | [✔︎](https://github.com/PoomSmart/YTAutoFullScreen) |
| **YTReExplore** | 1.0.2 | [✔︎](https://github.com/PoomSmart/YTReExplore) | | **YouRememberCaption** | [PoomSmart](https://twitter.com/poomsmart) | 1.0.0 | [✔︎](https://poomsmart.github.io/repo/depictions/youremembercaption.html) |
| **BigYTMiniPlayer** | 1.0-1 | [✔︎](https://github.com/Galactic-Dev/BigYTMiniPlayer) | | **YTClassicVideoQuality** | [PoomSmart](https://twitter.com/poomsmart) | 1.0.1 | [✔︎](https://github.com/PoomSmart/YTClassicVideoQuality) |
| **YTCastConfirm** | 1.0.0 | [✔︎](https://github.com/JamieBerghmans/YTCastConfirm) | | **Return YouTube Dislike** | [PoomSmart](https://twitter.com/poomsmart) | 1.6.6 | [✔︎](https://github.com/PoomSmart/Return-YouTube-Dislikes) |
| **YTMiniplayerEnabler** | 0.0.2 | [✔︎](https://github.com/level3tjg/YTMiniplayerEnabler) | | **YTNoCheckLocalNetwork** | [PoomSmart](https://twitter.com/poomsmart) | 1.0.2 | [✔︎](https://poomsmart.github.io/repo/depictions/ytnochecklocalnetwork.html) |
</details> </details>
@@ -125,12 +125,18 @@ See [Installation - Wiki](https://github.com/qnblackcat/uYouPlus/wiki/Installati
</details> </details>
<details> <details>
<summary>Poomsmart</summary> <summary>PoomSmart</summary>
- Paypal: https://poomsmart.github.io/ - Paypal: https://poomsmart.github.io/
</details> </details>
<details>
<summary>Bandar Alruwaili (BandarHL)</summary>
- Paypal: https://www.paypal.com/paypalme/BandarHL
</details>
<details> <details>
<summary>Galactic-dev</summary> <summary>Galactic-dev</summary>
+20 -1
View File
@@ -22,6 +22,7 @@ extern BOOL hideAutoplaySwitch();
extern BOOL castConfirm(); extern BOOL castConfirm();
extern BOOL ytMiniPlayer(); extern BOOL ytMiniPlayer();
extern BOOL hidePreviousAndNextButton(); extern BOOL hidePreviousAndNextButton();
extern BOOL hidePaidPromotionCard();
// Settings // Settings
%hook YTAppSettingsPresentationData %hook YTAppSettingsPresentationData
@@ -41,6 +42,24 @@ extern BOOL hidePreviousAndNextButton();
YTSettingsViewController *delegate = [self valueForKey:@"_dataDelegate"]; YTSettingsViewController *delegate = [self valueForKey:@"_dataDelegate"];
NSBundle *tweakBundle = uYouPlusBundle(); NSBundle *tweakBundle = uYouPlusBundle();
YTSettingsSectionItem *killApp = [%c(YTSettingsSectionItem) // https://github.com/PoomSmart/YTABConfig/blob/b74d7f28151c407cffc21cce12908c49e9e65999/Tweak.x#L76
itemWithTitle:LOC(@"KILL_APP")
titleDescription:LOC(@"KILL_APP_DESC")
accessibilityIdentifier:nil
detailTextBlock:nil
selectBlock:^BOOL (YTSettingsCell *cell, NSUInteger arg1) {
exit(0);
}];
YTSettingsSectionItem *hidePaidPromotionCard = [[%c(YTSettingsSectionItem) alloc] initWithTitle:LOC(@"HIDE_PAID_PROMOTION_CARDS") titleDescription:LOC(@"HIDE_PAID_PROMOTION_CARDS_DESC")];
hidePaidPromotionCard.hasSwitch = YES;
hidePaidPromotionCard.switchVisible = YES;
hidePaidPromotionCard.on = [[NSUserDefaults standardUserDefaults] boolForKey:@"hidePaidPromotionCard_enabled"];
hidePaidPromotionCard.switchBlock = ^BOOL (YTSettingsCell *cell, BOOL enabled) {
[[NSUserDefaults standardUserDefaults] setBool:enabled forKey:@"hidePaidPromotionCard_enabled"];
return YES;
};
YTSettingsSectionItem *hidePreviousAndNextButton = [[%c(YTSettingsSectionItem) alloc] initWithTitle:LOC(@"HIDE_PREVIOUS_AND_NEXT_BUTTON") titleDescription:LOC(@"HIDE_PREVIOUS_AND_NEXT_BUTTON_DESC")]; YTSettingsSectionItem *hidePreviousAndNextButton = [[%c(YTSettingsSectionItem) alloc] initWithTitle:LOC(@"HIDE_PREVIOUS_AND_NEXT_BUTTON") titleDescription:LOC(@"HIDE_PREVIOUS_AND_NEXT_BUTTON_DESC")];
hidePreviousAndNextButton.hasSwitch = YES; hidePreviousAndNextButton.hasSwitch = YES;
hidePreviousAndNextButton.switchVisible = YES; hidePreviousAndNextButton.switchVisible = YES;
@@ -149,7 +168,7 @@ extern BOOL hidePreviousAndNextButton();
return YES; return YES;
}; };
NSMutableArray <YTSettingsSectionItem *> *sectionItems = [NSMutableArray arrayWithArray:@[autoFull, castConfirm, ytMiniPlayer, hideAutoplaySwitch, hideCC, hideHUD, hidePreviousAndNextButton, hideHoverCard, bigYTMiniPlayer, oledDarkMode, oledKeyBoard, reExplore]]; NSMutableArray <YTSettingsSectionItem *> *sectionItems = [NSMutableArray arrayWithArray:@[killApp, autoFull, castConfirm, ytMiniPlayer, hideAutoplaySwitch, hideCC, hideHUD, hidePaidPromotionCard, hidePreviousAndNextButton, hideHoverCard, bigYTMiniPlayer, oledDarkMode, oledKeyBoard, reExplore]];
[delegate setSectionItems:sectionItems forCategory:uYouPlusSection title:@"uYouPlus" titleDescription:nil headerHidden:NO]; [delegate setSectionItems:sectionItems forCategory:uYouPlusSection title:@"uYouPlus" titleDescription:nil headerHidden:NO];
} }
@@ -0,0 +1,49 @@
// Settings
"KILL_APP" = "إغلاق تطبيق يوتيوب";
"KILL_APP_DESC" = "المس هنا لإغلاق تطبيق يوتيوب!";
"HIDE_PREVIOUS_AND_NEXT_BUTTON" = "إخفاء زر السابق والتالي";
"HIDE_PREVIOUS_AND_NEXT_BUTTON_DESC" = "إخفاء زرّي السابق والتالي من أزرار التحكم على الفيديو.";
"YT_MINIPLAYER" = "السماح بالمشغل المصغّر لكل فيديوهات يوتيوب";
"YT_MINIPLAYER_DESC" = "عند تصغير فيديوهات الأطفال مثلاً (قبل إغلاق المقطع).";
"CAST_CONFIRM" = "التأكيد قبل البث (أداة YTCastConfirm)";
"CAST_CONFIRM_DESC" = "إظهار تنبيه للتأكيد قبل البث، من أجل منع البث للتلفاز عن طريق الخطأ.";
"HIDE_HOVER_CARD" = "إخفاء صور المقاطع الأخرى في نهاية المقاطع (أداة YTNoHoverCards)";
"HIDE_HOVER_CARD_DESC" = "إخفاء الصور المصغرة الظاهرة على مشغل الفيديو في نهاية المقطع.";
"NEW_MINIPLAYER_STYLE" = "تغيير شكل المشغّل المصغر (أداة BigYTMiniPlayer)";
"NEW_MINIPLAYER_STYLE_DESC" = "تغيير شكل المشغّل المصغر في الآيفون إلى نفس شكله في الآيباد - تتطلب إغلاق التطبيق وإعادة فتحه.";
"YT_RE_EXPLORE" = "استبدال تبويب Shorts بتبويب Explore (أداة YTReExplore)";
"YT_RE_EXPLORE_DESC" = " تتطلب إغلاق التطبيق وإعادة فتحه.";
"HIDE_SUBTITLES_BUTTON" = "إخفاء زر الترجمة";
"HIDE_SUBTITLES_BUTTON_DESC" = "إخفاء زر الترجمة من أزرار التحكم على الفيديو.";
"HIDE_AUTOPLAY_SWITCH" = "إخفاء زر التشغيل التلقائي";
"HIDE_AUTOPLAY_SWITCH_DESC" = "إخفاء زر التشغيل التلقائي من أزرار التحكم على الفيديو.";
"AUTO_FULLSCREEN" = "كامل الشاشة تلقائياً (أداة YTAutoFullScreen)";
"AUTO_FULLSCREEN_DESC" = "تشغيل الفيديوهات تلقائياً بكامل الشاشة.";
"HIDE_HUD_MESSAGES" = "إخفاء رسائل المعلومات";
"HIDE_HUD_MESSAGES_DESC" = "مثلاً: تم إيقاف الترجمة...";
"OLED_DARKMODE" = "وضغ داكن OLED (ميزة تجريبية)";
"OLED_DARKMODE_DESC" = "قد لا تعمل في كل الحالات. يجب إعادة تشغيل التطبيق عند تشغيل أو إيقاف هذه الخاصية.";
"OLED_KEYBOARD" = "لوحة مفاتيح داكنة OLED (ميزة تجريبية)";
"OLED_KEYBOARD_DESC" = "قد لا تعمل في كل الحالات. يجب إعادة تشغيل التطبيق عند تشغيل أو إيقاف هذه الخاصية.";
"HIDE_PAID_PROMOTION_CARDS" = "إخفاء شريط الترويج المدفوع";
"HIDE_PAID_PROMOTION_CARDS_DESC" = "إخفاء عبارة يتضمن ترويجاً مدفوعاً الظاهرة على بعض الفيديوهات.";
// YTCastConfirm
"CASTING" = "البث";
"MSG_ARE_YOU_SURE" = "هل أنت متأكد أنك تريد بدء البث؟";
"MSG_YES" = "نعم";
"MSG_CANCEL" = "إلغاء";
@@ -0,0 +1,58 @@
// How to translate uYouPlus to your languate:
//
// 1. Fork uYouPlus repo
// 2. Duplicate the template.lproj folder, and edit the duplicated folder's name to your <lang_code>.lproj id.
// For example: <ru.lproj> for Russia. For more details, visit: https://en.wikipedia.org/wiki/List_of_ISO_3166_country_codes
// 3. Translate each line below after each =
// 4. Open a Pull Request
//
// If your language already exists then feel free to check it and/or improve it!
// You can also add your localiztion to YouPiP here, the process is the same
// https://github.com/PoomSmart/YouPiP/tree/main/layout/Library/Application%20Support/YouPiP.bundle
//
// Settings
"HIDE_PREVIOUS_AND_NEXT_BUTTON" = "Skrýt tlačítka předchozí a následující";
"HIDE_PREVIOUS_AND_NEXT_BUTTON_DESC" = "Skryje tlačítka předchozí a následující v překrytí ovládání videa.";
"YT_MINIPLAYER" = "Povolit Minipřehrávač pro všechna videa";
"YT_MINIPLAYER_DESC" = "Například u videa pro děti";
"CAST_CONFIRM" = "Zobrazit potvrzení před začátkem sdílení obrazu (YTCastConfirm)";
"CAST_CONFIRM_DESC" = "Zobrazí potvrzení aby se zamezilo nechtěnému sdílení do televize.";
"HIDE_HOVER_CARD" = "Skrýt karty na konci videa (YTNoHoverCards)";
"HIDE_HOVER_CARD_DESC" = "Skryje náhledy jiných videjí na konci videa.";
"NEW_MINIPLAYER_STYLE" = "Nový styl minipřehrávače (BigYTMiniPlayer)";
"NEW_MINIPLAYER_STYLE_DESC" = "Je potřeba restart aplikace.";
"YT_RE_EXPLORE" = "Nahradit záložku Shorts tab záložkou Explore (YTReExplore)";
"YT_RE_EXPLORE_DESC" = "Je potřeba restart aplikace.";
"HIDE_SUBTITLES_BUTTON" = "Skrýt tlačítko titulky";
"HIDE_SUBTITLES_BUTTON_DESC" = "Skryje tlačítko titulky v překrytí ovládání videa.";
"HIDE_AUTOPLAY_SWITCH" = "Skrýt přepínač automatického přehrávání";
"HIDE_AUTOPLAY_SWITCH_DESC" = "Skryje přepínač automatického přehrávání v překrytí ovládání videa.";
"AUTO_FULLSCREEN" = "Přes celou obrazovku (YTAutoFullScreen)";
"AUTO_FULLSCREEN_DESC" = "Automaticky spouští videa přes celou obrazovku.";
"HIDE_HUD_MESSAGES" = "Skrýt vyskakující zprávy";
"HIDE_HUD_MESSAGES_DESC" = "Příklad: Titulky zapnuty/vypnuty, Smyčka videa zapnuta,...";
"OLED_DARKMODE" = "Tmavý OLED režim (Experimentální)";
"OLED_DARKMODE_DESC" = "Mohou se vyskytnout chyby. Je potřeba restart aplikace.";
"OLED_KEYBOARD" = "OLED Klávesnice (Experimentální)";
"OLED_KEYBOARD_DESC" = "Mohou se vyskytnout chyby. Je potřeba restart aplikace.";
"HIDE_PAID_PROMOTION_CARDS" = "Skrýt kartu placené propagace";
"HIDE_PAID_PROMOTION_CARDS_DESC" = "Skryje 'Obsahuje placenou propagaci' u některých videjí.";
// YTCastConfirm
"CASTING" = "Sdílení obrazu";
"MSG_ARE_YOU_SURE" = "Opravdu chcete začít sdílet obraz?";
"MSG_YES" = "Ano";
"MSG_CANCEL" = "Zrušit";
@@ -0,0 +1,46 @@
// Settings
"HIDE_PREVIOUS_AND_NEXT_BUTTON" = "Vor- und Zurücktasten ausblenden";
"HIDE_PREVIOUS_AND_NEXT_BUTTON_DESC" = "Vor- und Zurückspultasten vom Videoplayer ausblenden.";
"YT_MINIPLAYER" = "Miniplayer für alle YT Videos aktivieren";
"YT_MINIPLAYER_DESC" = "z.B. bei Videos für Kinder";
"CAST_CONFIRM" = "Warnung vor TV-Übertragungen (YTCastConfirm)";
"CAST_CONFIRM_DESC" = "Zeigt eine Warnung an, um eine ausversehene TV-Übertragung zu verhindern.";
"HIDE_HOVER_CARD" = "Endkarten ausblenden (YTNoHoverCards)";
"HIDE_HOVER_CARD_DESC" = "Endkarten (Thumbnails) am Ende des Videos ausblenden.";
"NEW_MINIPLAYER_STYLE" = "Neuer Miniplayer Style (BigYTMiniPlayer)";
"NEW_MINIPLAYER_STYLE_DESC" = "App-Neustart erforderlich!";
"YT_RE_EXPLORE" = "Shorts-Tab durch Entdecken-Tab ersetzen (YTReExplore)";
"YT_RE_EXPLORE_DESC" = "App-Neustart erforderlich!";
"HIDE_SUBTITLES_BUTTON" = "Untertitel-Button ausblenden";
"HIDE_SUBTITLES_BUTTON_DESC" = "Untertitel-Button vom Videoplayer ausblenden.";
"HIDE_AUTOPLAY_SWITCH" = "Autoplay-Schalter ausblenden";
"HIDE_AUTOPLAY_SWITCH_DESC" = "Autoplay-Schalter vom Videoplayer ausblenden.";
"AUTO_FULLSCREEN" = "Automatisches Vollbild (YTAutoFullScreen)";
"AUTO_FULLSCREEN_DESC" = "Automatisch Videos im Vollbild starten.";
"HIDE_HUD_MESSAGES" = "HUD-Nachrichten ausblenden";
"HIDE_HUD_MESSAGES_DESC" = "z.B.: Untertitel sind akti-/deaktiviert, Videoschleife ist an, ...";
"OLED_DARKMODE" = "OLED-Dunkelmodus (Experimental)";
"OLED_DARKMODE_DESC" = "Könnte in manchen Fällen nicht richtig funktionieren. App-Neustart ist erforderlich, wenn diese Option akti-/deaktiviert wird!";
"OLED_KEYBOARD" = "OLED-Tastatur (Experimental)";
"OLED_KEYBOARD_DESC" = "Könnte in manchen Fällen nicht richtig funktionieren. App-Neustart erforderlich1";
"HIDE_PAID_PROMOTION_CARDS" = "Enthält bezahlte Werbung Info ausblenden";
"HIDE_PAID_PROMOTION_CARDS_DESC" = "Enthält bezahlte Werbung Infobanner bei manchen Videos ausblenden.";
// YTCastConfirm
"CASTING" = "TV-Übertragung";
"MSG_ARE_YOU_SURE" = "Sind Sie sicher, dass Sie mit der Videoübertragung beginnen wollen?";
"MSG_YES" = "Ja";
"MSG_CANCEL" = "Abbrechen";
@@ -1,5 +1,8 @@
// Settings // Settings
"KILL_APP" = "Close YouTube";
"KILL_APP_DESC" = "Tap here to close YouTube!";
"HIDE_PREVIOUS_AND_NEXT_BUTTON" = "Hide Previous and Next button"; "HIDE_PREVIOUS_AND_NEXT_BUTTON" = "Hide Previous and Next button";
"HIDE_PREVIOUS_AND_NEXT_BUTTON_DESC" = "Hide Previous and Next button in video controls overlay."; "HIDE_PREVIOUS_AND_NEXT_BUTTON_DESC" = "Hide Previous and Next button in video controls overlay.";
@@ -36,6 +39,9 @@
"OLED_KEYBOARD" = "OLED Keyboard (Experimental)"; "OLED_KEYBOARD" = "OLED Keyboard (Experimental)";
"OLED_KEYBOARD_DESC" = "Might not working correctly in some cases. App restart is required."; "OLED_KEYBOARD_DESC" = "Might not working correctly in some cases. App restart is required.";
"HIDE_PAID_PROMOTION_CARDS" = "Hide Paid Promotion banner";
"HIDE_PAID_PROMOTION_CARDS_DESC" = "Hide the 'Includes Paid Promotions' banner in some videos.";
// YTCastConfirm // YTCastConfirm
"CASTING" = "Castings"; "CASTING" = "Castings";
"MSG_ARE_YOU_SURE" = "Are you sure you want to start casting?"; "MSG_ARE_YOU_SURE" = "Are you sure you want to start casting?";
@@ -0,0 +1,49 @@
// Settings
"KILL_APP" = "Cerrar YouTube";
"KILL_APP_DESC" = "Toca aquí para cerrar YouTube!";
"HIDE_PREVIOUS_AND_NEXT_BUTTON" = "Ocultar el botón de Anterior y Siguiente";
"HIDE_PREVIOUS_AND_NEXT_BUTTON_DESC" = "Ocultar el botón de Anterior y Siguiente en los botones superpuestos.";
"YT_MINIPLAYER" = "Activar el minirreproductor para todos los vídeos de YouTube";
"YT_MINIPLAYER_DESC" = "Vídeos infantiles por ejemplo.";
"CAST_CONFIRM" = "Alerta de confirmación antes de Enviar contenido (YTCastConfirm)";
"CAST_CONFIRM_DESC" = "Mostrar una alerta de confirmación antes de Enviar contenido para prevenir el secuestro accidental del TV.";
"HIDE_HOVER_CARD" = "Ocultar tarjetas flotantes en las pantallas finales (YTNoHoverCards)";
"HIDE_HOVER_CARD_DESC" = "Ocultar tarjetas flotantes del creador (miniaturas) al final de los vídeos.";
"NEW_MINIPLAYER_STYLE" = "Nuevo estilo de barra del minirreproductor (BigYTMiniPlayer)";
"NEW_MINIPLAYER_STYLE_DESC" = "Requiere reiniciar la app.";
"YT_RE_EXPLORE" = "Reemplazar pestaña de Cortos con pestaña de Explorar (YTReExplore)";
"YT_RE_EXPLORE_DESC" = "Requiere reiniciar la app.";
"HIDE_SUBTITLES_BUTTON" = "Ocultar botón de Subtítulos";
"HIDE_SUBTITLES_BUTTON_DESC" = "Ocultar el botón de Subtítulos en los botones superpuestos.";
"HIDE_AUTOPLAY_SWITCH" = "Ocultar interruptor de Reproducir automáticamente";
"HIDE_AUTOPLAY_SWITCH_DESC" = "Ocultar el interruptor de Reproducir automáticamente en los botones superpuestos.";
"AUTO_FULLSCREEN" = "Pantalla completa automática (YTAutoFullScreen)";
"AUTO_FULLSCREEN_DESC" = "Reproducir vídeos en pantalla completa automáticamente.";
"HIDE_HUD_MESSAGES" = "Ocultar mensajes HUD";
"HIDE_HUD_MESSAGES_DESC" = "Ejemplo: CC está activado/desactivado, Vídeo en bucle está activado,...";
"OLED_DARKMODE" = "Modo oscuro OLED (Experimental)";
"OLED_DARKMODE_DESC" = "Puede no funcionar correctamente en algunos casos. Requiere reiniciar la app después de activar/desactivar esta opción.";
"OLED_KEYBOARD" = "Teclado OLED (Experimental)";
"OLED_KEYBOARD_DESC" = "Puede no funcionar correctamente en algunos casos. Requiere reiniciar la app.";
"HIDE_PAID_PROMOTION_CARDS" = "Ocultar banner de contenido promocional";
"HIDE_PAID_PROMOTION_CARDS_DESC" = "Ocultar el banner de 'Incluye contenido promocional' en algunos vídeos.";
// YTCastConfirm
"CASTING" = "Enviar contenido";
"MSG_ARE_YOU_SURE" = "¿Estás seguro de que deseas Enviar contenido?";
"MSG_YES" = "Sí";
"MSG_CANCEL" = "Cancelar";
@@ -1,5 +1,8 @@
// Settings // Settings
"KILL_APP" = "Fermer YouTube";
"KILL_APP_DESC" = "Appuyez ici pour fermer YouTube !";
"HIDE_PREVIOUS_AND_NEXT_BUTTON" = "Masquer les boutons Précédent et Suivant"; "HIDE_PREVIOUS_AND_NEXT_BUTTON" = "Masquer les boutons Précédent et Suivant";
"HIDE_PREVIOUS_AND_NEXT_BUTTON_DESC" = "Masquer les boutons Précédent et Suivant dans la superposition des contrôles vidéo"; "HIDE_PREVIOUS_AND_NEXT_BUTTON_DESC" = "Masquer les boutons Précédent et Suivant dans la superposition des contrôles vidéo";
@@ -36,6 +39,9 @@
"OLED_KEYBOARD" = "Clavier OLED (Expérimental)"; "OLED_KEYBOARD" = "Clavier OLED (Expérimental)";
"OLED_KEYBOARD_DESC" = "Peut ne pas fonctionner correctement dans certains cas. Un redémarrage de l'application est nécessaire."; "OLED_KEYBOARD_DESC" = "Peut ne pas fonctionner correctement dans certains cas. Un redémarrage de l'application est nécessaire.";
"HIDE_PAID_PROMOTION_CARDS" = "Masquer la bannière des communications commerciales";
"HIDE_PAID_PROMOTION_CARDS_DESC" = "Masque la bannière 'Inclut une communication commerciale' dans certaines vidéos.";
// YTCastConfirm // YTCastConfirm
"CASTING" = "Castings"; "CASTING" = "Castings";
"MSG_ARE_YOU_SURE" = "Êtes-vous sûr de vouloir commencer le casting ?"; "MSG_ARE_YOU_SURE" = "Êtes-vous sûr de vouloir commencer le casting ?";
@@ -0,0 +1,49 @@
// Settings
"KILL_APP" = "YouTubeを閉じる";
"KILL_APP_DESC" = "ここをタップしてYouTubeを終了できます!";
"HIDE_PREVIOUS_AND_NEXT_BUTTON" = "前後の動画のボタンを非表示";
"HIDE_PREVIOUS_AND_NEXT_BUTTON_DESC" = "コントロールのオーバーレイで前後の動画のボタンを非表示にします。";
"YT_MINIPLAYER" = "すべての動画でミニプレーヤーを有効にする";
"YT_MINIPLAYER_DESC" = "例: 子供向けの動画";
"CAST_CONFIRM" = "キャストする前に確認画面を表示する (YTCastConfirm)";
"CAST_CONFIRM_DESC" = "誤ってテレビにキャストしないよう、前に確認画面を表示します。";
"HIDE_HOVER_CARD" = "動画終わりのホバーカードを非表示 (YTNoHoverCards)";
"HIDE_HOVER_CARD_DESC" = "動画終わりのホバーカード(サムネ)を非表示にします。";
"NEW_MINIPLAYER_STYLE" = "新しいミニプレーヤー・バーを使う (BigYTMiniPlayer)";
"NEW_MINIPLAYER_STYLE_DESC" = "アプリを再起動してください。";
"YT_RE_EXPLORE" = "ショートのタブを「見つける」タブに置き換える (YTReExplore)";
"YT_RE_EXPLORE_DESC" = "アプリを再起動してください。";
"HIDE_SUBTITLES_BUTTON" = "字幕ボタンを非表示";
"HIDE_SUBTITLES_BUTTON_DESC" = "動画コントロールのオーバーレイから字幕ボタンを非表示にします。";
"HIDE_AUTOPLAY_SWITCH" = "自動再生ボタンを非表示";
"HIDE_AUTOPLAY_SWITCH_DESC" = "動画コントロールのオーバーレイから自動再生ボタンを非表示にします。";
"AUTO_FULLSCREEN" = "自動でフルスクリーンにする (YTAutoFullScreen)";
"AUTO_FULLSCREEN_DESC" = "動画を自動でフルスクリーンにします。";
"HIDE_HUD_MESSAGES" = "HUDのメッセージを非表示";
"HIDE_HUD_MESSAGES_DESC" = "例: 字幕がon/offです、ループ再生は有効です 等";
"OLED_DARKMODE" = "有機ELダークモード (実験的機能)";
"OLED_DARKMODE_DESC" = "一部では正しく動作しない可能性があります。 この設定を変更したあとはアプリを再起動してください。";
"OLED_KEYBOARD" = "有機ELキーボード (実験的機能)";
"OLED_KEYBOARD_DESC" = "一部では正しく動作しない可能性があります。 この設定を変更したあとはアプリを再起動してください。";
"HIDE_PAID_PROMOTION_CARDS" = "「プロモーションを含む」 のバナーを非表示";
"HIDE_PAID_PROMOTION_CARDS_DESC" = "一部の動画にある「プロモーションを含む」 のバナーを非表示にします。";
// YTCastConfirm
"CASTING" = "キャスト";
"MSG_ARE_YOU_SURE" = "本当にキャストを開始しますか?";
"MSG_YES" = "はい";
"MSG_CANCEL" = "キャンセル";
@@ -0,0 +1,49 @@
// Settings
"KILL_APP" = "Fechar o YouTube";
"KILL_APP_DESC" = "Toque aqui para fechar o YouTube!";
"HIDE_PREVIOUS_AND_NEXT_BUTTON" = "Ocultar botão Anterior e Próximo";
"HIDE_PREVIOUS_AND_NEXT_BUTTON_DESC" = "Oculta o botão Anterior e Próximo na sobreposição de controles de vídeo.";
"YT_MINIPLAYER" = "Ative o Miniplayer para todos os vídeos do YouTube";
"YT_MINIPLAYER_DESC" = "Vídeos infantis, por exemplo.";
"CAST_CONFIRM" = "Alerta de confirmação antes de transmitir (YTCastConfirm)";
"CAST_CONFIRM_DESC" = "Mostra um alerta de confirmação antes da transmissão para evitar o sequestro acidental da TV.";
"HIDE_HOVER_CARD" = "Ocultar Cartões flutuantes de telas finais (YTNoHoverCards)";
"HIDE_HOVER_CARD_DESC" = "Oculta telas finais do criador (miniaturas) no final dos vídeos.";
"NEW_MINIPLAYER_STYLE" = "Novo estilo de barra de miniplayer (BigYTMiniPlayer)";
"NEW_MINIPLAYER_STYLE_DESC" = "A reinicialização do app é necessária.";
"YT_RE_EXPLORE" = "Substituir a guia Shorts pela guia Explorar (YTReExplore)";
"YT_RE_EXPLORE_DESC" = "A reinicialização do app é necessária.";
"HIDE_SUBTITLES_BUTTON" = "Ocultar botão de Legendas";
"HIDE_SUBTITLES_BUTTON_DESC" = "Oculta o botão de Legendas na sobreposição de controles de vídeo.";
"HIDE_AUTOPLAY_SWITCH" = "Ocultar interruptor de Reprodução automática";
"HIDE_AUTOPLAY_SWITCH_DESC" = "Oculta o interruptor de Reprodução automática na sobreposição de controles de vídeo.";
"AUTO_FULLSCREEN" = "Tela cheia automática (YTAutoFullScreen)";
"AUTO_FULLSCREEN_DESC" = "Reproduz videos em tela cheia automaticamente.";
"HIDE_HUD_MESSAGES" = "Ocultar Mensagens do HUD";
"HIDE_HUD_MESSAGES_DESC" = "Exemplo: Legendas/CC ativadas/desativadas, A repetição do vídeo está ativada,...";
"OLED_DARKMODE" = "Modo escuro OLED (Experimental)";
"OLED_DARKMODE_DESC" = "Pode não funcionar corretamente em alguns casos. A reinicialização do app é necessária após você ativar/desativar essa opção.";
"OLED_KEYBOARD" = "Teclado OLED (Experimental)";
"OLED_KEYBOARD_DESC" = "Pode não funcionar corretamente em alguns casos. A reinicialização do app é necessária.";
"HIDE_PAID_PROMOTION_CARDS" = "Ocultar Banner de promoção paga";
"HIDE_PAID_PROMOTION_CARDS_DESC" = "Oculta o banner 'Contém promoção paga' em alguns vídeos.";
// YTCastConfirm
"CASTING" = "Transmissão";
"MSG_ARE_YOU_SURE" = "Tem certeza de que deseja começar a transmitir?";
"MSG_YES" = "Sim";
"MSG_CANCEL" = "Cancelar";
@@ -1,53 +1,61 @@
// How to translate uYouPlus to your languate: // How to translate uYouPlus to your language:
// //
// 1. Fork uYouPlus repo // 1. Fork uYouPlus repo
// 2. Duplicate the template.lproj folder, and edit the duplicated folder's name to your <lang_code>.lproj id. For example: ru.lproj // 2. Duplicate the template.lproj folder, and edit the duplicated folder's name to your <lang_code>.lproj id.
// for Russia. For more details, visit: https://en.wikipedia.org/wiki/List_of_ISO_3166_country_codes // For example: <ru.lproj> for Russia. For more details, visit: https://en.wikipedia.org/wiki/List_of_ISO_639-1_codes
// 3. Translate each line below after each = // 3. Translate each line below after each =
// 4. Open a Pull Request // 4. Open a Pull Request
// //
// If your language already exists then feel free to check it and/or improve it! // If your language already exists then feel free to check it and/or improve it!
// // You can also add your localization to YouPiP here, the process is the same
// Settings // https://github.com/PoomSmart/YouPiP/tree/main/layout/Library/Application%20Support/YouPiP.bundle
//
// Settings
"HIDE_PREVIOUS_AND_NEXT_BUTTON" = "Hide Previous and Next button"; "KILL_APP" = "Close YouTube";
"HIDE_PREVIOUS_AND_NEXT_BUTTON_DESC" = "Hide Previous and Next button in video controls overlay."; "KILL_APP_DESC" = "Tap here to close YouTube!";
"YT_MINIPLAYER" = "Enable the Miniplayer for all YouTube videos"; "HIDE_PREVIOUS_AND_NEXT_BUTTON" = "Hide Previous and Next button";
"YT_MINIPLAYER_DESC" = "Kid videos for example."; "HIDE_PREVIOUS_AND_NEXT_BUTTON_DESC" = "Hide Previous and Next button in video controls overlay.";
"CAST_CONFIRM" = "Confirm alert before casting (YTCastConfirm)"; "YT_MINIPLAYER" = "Enable the Miniplayer for all YouTube videos";
"CAST_CONFIRM_DESC" = "Show a confirm alert before casting to prevent accidentally hijacking TV."; "YT_MINIPLAYER_DESC" = "Kid videos for example.";
"HIDE_HOVER_CARD" = "Hide End screens hover cards (YTNoHoverCards)"; "CAST_CONFIRM" = "Confirm alert before casting (YTCastConfirm)";
"HIDE_HOVER_CARD_DESC" = "Hide creator End screens (thumbnails) at the end of videos."; "CAST_CONFIRM_DESC" = "Show a confirm alert before casting to prevent accidentally hijacking TV.";
"NEW_MINIPLAYER_STYLE" = "New miniplayer bar style (BigYTMiniPlayer)"; "HIDE_HOVER_CARD" = "Hide End screens hover cards (YTNoHoverCards)";
"NEW_MINIPLAYER_STYLE_DESC" = "App restart is required."; "HIDE_HOVER_CARD_DESC" = "Hide creator End screens (thumbnails) at the end of videos.";
"YT_RE_EXPLORE" = "Replace Shorts tab with Explore tab (YTReExplore)"; "NEW_MINIPLAYER_STYLE" = "New miniplayer bar style (BigYTMiniPlayer)";
"YT_RE_EXPLORE_DESC" = "App restart is required."; "NEW_MINIPLAYER_STYLE_DESC" = "App restart is required.";
"HIDE_SUBTITLES_BUTTON" = "Hide Subtitles button"; "YT_RE_EXPLORE" = "Replace Shorts tab with Explore tab (YTReExplore)";
"HIDE_SUBTITLES_BUTTON_DESC" = "Hide the Subtitles button in video controls overlay."; "YT_RE_EXPLORE_DESC" = "App restart is required.";
"HIDE_AUTOPLAY_SWITCH" = "Hide Autoplay switch"; "HIDE_SUBTITLES_BUTTON" = "Hide Subtitles button";
"HIDE_AUTOPLAY_SWITCH_DESC" = "Hide the Autoplay switch in video controls overlay."; "HIDE_SUBTITLES_BUTTON_DESC" = "Hide the Subtitles button in video controls overlay.";
"AUTO_FULLSCREEN" = "Auto Full Screen (YTAutoFullScreen)"; "HIDE_AUTOPLAY_SWITCH" = "Hide Autoplay switch";
"AUTO_FULLSCREEN_DESC" = "Autoplay videos at full screen."; "HIDE_AUTOPLAY_SWITCH_DESC" = "Hide the Autoplay switch in video controls overlay.";
"HIDE_HUD_MESSAGES" = "Hide HUD Messages"; "AUTO_FULLSCREEN" = "Auto Full Screen (YTAutoFullScreen)";
"HIDE_HUD_MESSAGES_DESC" = "Example: CC is turned on/off, Video loop is on,..."; "AUTO_FULLSCREEN_DESC" = "Autoplay videos at full screen.";
"OLED_DARKMODE" = "OLED Dark mode (Experimental)"; "HIDE_HUD_MESSAGES" = "Hide HUD Messages";
"OLED_DARKMODE_DESC" = "Might not working correctly in some cases. App restart is required after you enable/disable this option."; "HIDE_HUD_MESSAGES_DESC" = "Example: CC is turned on/off, Video loop is on,...";
"OLED_KEYBOARD" = "OLED Keyboard (Experimental)"; "OLED_DARKMODE" = "OLED Dark mode (Experimental)";
"OLED_KEYBOARD_DESC" = "Might not working correctly in some cases. App restart is required."; "OLED_DARKMODE_DESC" = "Might not working correctly in some cases. App restart is required after you enable/disable this option.";
// YTCastConfirm "OLED_KEYBOARD" = "OLED Keyboard (Experimental)";
"CASTING" = "Castings"; "OLED_KEYBOARD_DESC" = "Might not working correctly in some cases. App restart is required.";
"MSG_ARE_YOU_SURE" = "Are you sure you want to start casting?";
"MSG_YES" = "Yes"; "HIDE_PAID_PROMOTION_CARDS" = "Hide Paid Promotion banner";
"MSG_CANCEL" = "Cancel"; "HIDE_PAID_PROMOTION_CARDS_DESC" = "Hide the 'Includes Paid Promotions' banner in some videos.";
// YTCastConfirm
"CASTING" = "Castings";
"MSG_ARE_YOU_SURE" = "Are you sure you want to start casting?";
"MSG_YES" = "Yes";
"MSG_CANCEL" = "Cancel";
@@ -1,16 +1,19 @@
// Settings // Settings
"KILL_APP" = "Đóng ứng dụng";
"KILL_APP_DESC" = "Chạm để đóng YouTube!";
"HIDE_PREVIOUS_AND_NEXT_BUTTON" = "Ẩn nút Next và nút Previous"; "HIDE_PREVIOUS_AND_NEXT_BUTTON" = "Ẩn nút Next và nút Previous";
"HIDE_PREVIOUS_AND_NEXT_BUTTON_DESC" = "Ẩn nút Next và nút Previous trong trình phát video."; "HIDE_PREVIOUS_AND_NEXT_BUTTON_DESC" = "Ẩn nút Next và nút Previous trong trình phát video.";
"YT_MINIPLAYER" = "Cho phép trình phát thu nhỏ chạy với mọi video"; "YT_MINIPLAYER" = "Cho phép sử dụng trình phát thu nhỏ với mọi video";
"YT_MINIPLAYER_DESC" = "Ví dụ: Video cho trẻ em."; "YT_MINIPLAYER_DESC" = "Ví dụ: Video cho trẻ em.";
"CAST_CONFIRM" = "Xác nhận trước khi cast video (YTCastConfirm)"; "CAST_CONFIRM" = "Xác nhận trước khi cast video (YTCastConfirm)";
"CAST_CONFIRM_DESC" = "Hiện hộp thoại xác nhận trước khi cast video sang TV để ngăn việc vô tình làm gián đoạn TV."; "CAST_CONFIRM_DESC" = "Hiện hộp thoại xác nhận trước khi cast video sang TV để tránh vô tình chiếm quyền điều khiển TV.";
"HIDE_HOVER_CARD" = "Ẩn video dạng thumbnails (YTNoHoverCards)"; "HIDE_HOVER_CARD" = "Ẩn video dạng thumbnails (YTNoHoverCards)";
"HIDE_HOVER_CARD_DESC" = "Ẩn các video dạng thu nhỏ (thumbnails) xuất hiện ở gần cuối video."; "HIDE_HOVER_CARD_DESC" = "Ẩn thumbnail của các video đề xuất xuất hiện ở cuối video.";
"NEW_MINIPLAYER_STYLE" = "Giao diện trình phát thu nhỏ kiểu mới (BigYTMiniPlayer)"; "NEW_MINIPLAYER_STYLE" = "Giao diện trình phát thu nhỏ kiểu mới (BigYTMiniPlayer)";
"NEW_MINIPLAYER_STYLE_DESC" = "Cần khởi động lại ứng dụng."; "NEW_MINIPLAYER_STYLE_DESC" = "Cần khởi động lại ứng dụng.";
@@ -21,20 +24,23 @@
"HIDE_SUBTITLES_BUTTON" = "Ẩn nút bật Phụ đề"; "HIDE_SUBTITLES_BUTTON" = "Ẩn nút bật Phụ đề";
"HIDE_SUBTITLES_BUTTON_DESC" = "Ẩn nút bật phụ đề trong trình phát video."; "HIDE_SUBTITLES_BUTTON_DESC" = "Ẩn nút bật phụ đề trong trình phát video.";
"HIDE_AUTOPLAY_SWITCH" = "Ẩn công tắc Tự động phát"; "HIDE_AUTOPLAY_SWITCH" = "Ẩn nút Tự động phát";
"HIDE_AUTOPLAY_SWITCH_DESC" = "Ẩn công tắc Tự động phát trong trình phát video."; "HIDE_AUTOPLAY_SWITCH_DESC" = "Ẩn nút Tự động phát trong trình phát video.";
"AUTO_FULLSCREEN" = "Tự động toàn màn hình (YTAutoFullScreen)"; "AUTO_FULLSCREEN" = "Tự động toàn màn hình (YTAutoFullScreen)";
"AUTO_FULLSCREEN_DESC" = "Tự động phát video ở chế độ toàn màn hình."; "AUTO_FULLSCREEN_DESC" = "Tự động phát video ở chế độ toàn màn hình.";
"HIDE_HUD_MESSAGES" = "Ẩn tin nhắn HUD"; "HIDE_HUD_MESSAGES" = "Ẩn thông báo HUD";
"HIDE_HUD_MESSAGES_DESC" = "Ví dụ: Đã bật/tắt phụ đề, Tính năng phát video lặp lại đang bật,..."; "HIDE_HUD_MESSAGES_DESC" = "Ví dụ: Đã bật/tắt phụ đề, Tính năng phát video lặp lại đang bật,...";
"OLED_DARKMODE" = "Chế độ tối OLED (Thử nghiệm)"; "OLED_DARKMODE" = "Chế độ tối cho màn OLED (Thử nghiệm)";
"OLED_DARKMODE_DESC" = "Cần khởi động lại ứng dụng nếu bạn bật/tắt tính năng này, nhưng không cần khởi động lại ứng dụng nếu chuyển giữa chế độ Sáng và chế độ Tối."; "OLED_DARKMODE_DESC" = "Có thể không hoạt động tốt trong một số trường hợp. Cần khởi động lại ứng dụng nếu bạn bật/tắt tính năng này, nhưng không cần khởi động lại ứng dụng nếu chuyển giữa chế độ Sáng và chế độ Tối.";
"OLED_KEYBOARD" = "Bàn phím OLED (Thử nghiệm)"; "OLED_KEYBOARD" = "Bàn phím tối cho màn OLED (Thử nghiệm)";
"OLED_KEYBOARD_DESC" = "Tính năng này có thể không hoạt động tốt trong một vài trường hợp. Cần khởi động lại ứng dụng."; "OLED_KEYBOARD_DESC" = "Có thể không hoạt động tốt trong một vài trường hợp. Cần khởi động lại ứng dụng.";
"HIDE_PAID_PROMOTION_CARDS" = "Ẩn banner quảng cáo được trả tiền";
"HIDE_PAID_PROMOTION_CARDS_DESC" = "Ẩn banner 'Chứa nội dung được trả tiền để quảng cáo' trong một số video.";
// YTCastConfirm // YTCastConfirm
"CASTING" = "Truyền video"; "CASTING" = "Truyền video";
@@ -0,0 +1,49 @@
// Settings
"KILL_APP" = "关闭YouTube";
"KILL_APP_DESC" = "点击此处关闭YouTube!";
"HIDE_PREVIOUS_AND_NEXT_BUTTON" = "隐藏上一个/下一个按钮";
"HIDE_PREVIOUS_AND_NEXT_BUTTON_DESC" = "隐藏视频播放器控制界面上的上一个/下一个按钮。";
"YT_MINIPLAYER" = "为所有YouTube视频启用迷你播放器";
"YT_MINIPLAYER_DESC" = "例如:面向儿童的视频。";
"CAST_CONFIRM" = "投屏前确认 (YTCastConfirm)";
"CAST_CONFIRM_DESC" = "在投屏前显示确认对话框以防意外劫屏。";
"HIDE_HOVER_CARD" = "隐藏片尾画面悬浮卡片 (YTNoHoverCards)";
"HIDE_HOVER_CARD_DESC" = "隐藏视频结尾处的创作者片尾画面元素(缩略图)。";
"NEW_MINIPLAYER_STYLE" = "新迷你播放器风格 (BigYTMiniPlayer)";
"NEW_MINIPLAYER_STYLE_DESC" = "更改本设置后需要重启App。";
"YT_RE_EXPLORE" = "将Shorts选项卡替换成探索选项卡 (YTReExplore)";
"YT_RE_EXPLORE_DESC" = "更改本设置后需要重启App。";
"HIDE_SUBTITLES_BUTTON" = "隐藏字幕按钮";
"HIDE_SUBTITLES_BUTTON_DESC" = "隐藏视频播放器控制界面上的字幕按钮。";
"HIDE_AUTOPLAY_SWITCH" = "隐藏自动播放模式开关";
"HIDE_AUTOPLAY_SWITCH_DESC" = "隐藏视频播放器控制界面上的自动播放开关。";
"AUTO_FULLSCREEN" = "自动全屏 (YTAutoFullScreen)";
"AUTO_FULLSCREEN_DESC" = "自动全屏播放视频。";
"HIDE_HUD_MESSAGES" = "隐藏系统提醒";
"HIDE_HUD_MESSAGES_DESC" = "例如:\"已启用/停用字幕\"、\"已开启/关闭视频循环播放\"等。";
"OLED_DARKMODE" = "OLED 深色模式(实验性功能)";
"OLED_DARKMODE_DESC" = "在某些情况下可能不会正常工作。更改本设置后需要重启App。";
"OLED_KEYBOARD" = "OLED 键盘(实验性功能)";
"OLED_KEYBOARD_DESC" = "在某些情况下可能不会正常工作。更改本设置后需要重启App。";
"HIDE_PAID_PROMOTION_CARDS" = "隐藏付费宣传内容提醒横幅";
"HIDE_PAID_PROMOTION_CARDS_DESC" = "隐藏出现在部分视频中的\"包含付费宣传内容\"横幅。";
// YTCastConfirm
"CASTING" = "正在投屏";
"MSG_ARE_YOU_SURE" = "您确定要开始投屏吗?";
"MSG_YES" = "确定";
"MSG_CANCEL" = "取消";
@@ -36,8 +36,11 @@
"OLED_KEYBOARD" = "OLED 鍵盤(實驗性)"; "OLED_KEYBOARD" = "OLED 鍵盤(實驗性)";
"OLED_KEYBOARD_DESC" = "在某些情況下可能無法正常工作。需要重新啟動應用程式。"; "OLED_KEYBOARD_DESC" = "在某些情況下可能無法正常工作。需要重新啟動應用程式。";
"HIDE_PAID_PROMOTION_CARDS" = "隱藏付費促銷橫幅";
"HIDE_PAID_PROMOTION_CARDS_DESC" = "在某些影片中隱藏“包括付費促銷”橫幅。";
// YTCastConfirm // YTCastConfirm
"CASTING" = "投放中"; "CASTING" = "投放中";
"MSG_ARE_YOU_SURE" = "確定要開始投放嗎?"; "MSG_ARE_YOU_SURE" = "確定要開始投放嗎?";
"MSG_YES" = ""; "MSG_YES" = "確定";
"MSG_CANCEL" = "取消"; "MSG_CANCEL" = "取消";
+181 -75
View File
@@ -12,7 +12,10 @@
#import "Tweaks/YouTubeHeader/YTIPivotBarRenderer.h" #import "Tweaks/YouTubeHeader/YTIPivotBarRenderer.h"
#import "Tweaks/YouTubeHeader/YTIBrowseRequest.h" #import "Tweaks/YouTubeHeader/YTIBrowseRequest.h"
#import "Tweaks/YouTubeHeader/YTCommonColorPalette.h" #import "Tweaks/YouTubeHeader/YTCommonColorPalette.h"
#import "Tweaks/YouTubeHeader/YTColorPalette.h"
#import "Tweaks/YouTubeHeader/ASCollectionView.h" #import "Tweaks/YouTubeHeader/ASCollectionView.h"
#import "Tweaks/YouTubeHeader/YTPlayerOverlay.h"
#import "Tweaks/YouTubeHeader/YTPlayerOverlayProvider.h"
// Tweak's bundle for Localizations support - @PoomSmart - https://github.com/PoomSmart/YouPiP/commit/aea2473f64c75d73cab713e1e2d5d0a77675024f // Tweak's bundle for Localizations support - @PoomSmart - https://github.com/PoomSmart/YouPiP/commit/aea2473f64c75d73cab713e1e2d5d0a77675024f
NSBundle *uYouPlusBundle() { NSBundle *uYouPlusBundle() {
@@ -66,8 +69,17 @@ BOOL castConfirm() {
BOOL ytMiniPlayer() { BOOL ytMiniPlayer() {
return [[NSUserDefaults standardUserDefaults] boolForKey:@"ytMiniPlayer_enabled"]; return [[NSUserDefaults standardUserDefaults] boolForKey:@"ytMiniPlayer_enabled"];
} }
BOOL hidePaidPromotionCard() {
return [[NSUserDefaults standardUserDefaults] boolForKey:@"hidePaidPromotionCard_enabled"];
}
# pragma mark - Tweaks # pragma mark - Tweaks
// Enable Reorder videos from playlist while on the Watch page - @PoomSmart
%hook YTIPlaylistPanelVideoRenderer
%new
- (BOOL)canReorder { return YES; }
%end
// YTMiniPlayerEnabler: https://github.com/level3tjg/YTMiniplayerEnabler/ // YTMiniPlayerEnabler: https://github.com/level3tjg/YTMiniplayerEnabler/
%hook YTWatchMiniBarViewController %hook YTWatchMiniBarViewController
- (void)updateMiniBarPlayerStateFromRenderer { - (void)updateMiniBarPlayerStateFromRenderer {
@@ -91,7 +103,6 @@ BOOL ytMiniPlayer() {
if (hidePreviousAndNextButton()) { if (hidePreviousAndNextButton()) {
MSHookIvar<YTMainAppControlsOverlayView *>(self, "_nextButton").hidden = YES; MSHookIvar<YTMainAppControlsOverlayView *>(self, "_nextButton").hidden = YES;
MSHookIvar<YTMainAppControlsOverlayView *>(self, "_previousButton").hidden = YES; MSHookIvar<YTMainAppControlsOverlayView *>(self, "_previousButton").hidden = YES;
// YouTube love beta testing :/
MSHookIvar<YTTransportControlsButtonView *>(self, "_nextButtonView").hidden = YES; MSHookIvar<YTTransportControlsButtonView *>(self, "_nextButtonView").hidden = YES;
MSHookIvar<YTTransportControlsButtonView *>(self, "_previousButtonView").hidden = YES; MSHookIvar<YTTransportControlsButtonView *>(self, "_previousButtonView").hidden = YES;
} }
@@ -169,6 +180,22 @@ BOOL ytMiniPlayer() {
- (void)decorateContext:(id)arg1 { %orig(nil); } - (void)decorateContext:(id)arg1 { %orig(nil); }
%end %end
// Workaround for https://github.com/MiRO92/uYou-for-YouTube/issues/94
%hook YTELMView
%new
- (id)entry {
return nil;
}
%end
// Workaround for https://github.com/MiRO92/uYou-for-YouTube/issues/140
%hook YTLocalPlaybackController
%new
- (id)activeVideoController {
return [self activeVideo];
}
%end
// YTClassicVideoQuality: https://github.com/PoomSmart/YTClassicVideoQuality // YTClassicVideoQuality: https://github.com/PoomSmart/YTClassicVideoQuality
%hook YTVideoQualitySwitchControllerFactory %hook YTVideoQualitySwitchControllerFactory
- (id)videoQualitySwitchControllerWithParentResponder:(id)responder { - (id)videoQualitySwitchControllerWithParentResponder:(id)responder {
@@ -182,12 +209,10 @@ BOOL ytMiniPlayer() {
- (BOOL)isPromptForLocalNetworkPermissionsEnabled { return NO; } - (BOOL)isPromptForLocalNetworkPermissionsEnabled { return NO; }
%end %end
// YTSystemAppearance: https://poomsmart.github.io/repo/depictions/ytsystemappearance.html
// YouRememberCaption: https://poomsmart.github.io/repo/depictions/youremembercaption.html // YouRememberCaption: https://poomsmart.github.io/repo/depictions/youremembercaption.html
%hook YTColdConfig %hook YTColdConfig
- (BOOL)shouldUseAppThemeSetting { return YES; }
- (BOOL)respectDeviceCaptionSetting { return NO; } - (BOOL)respectDeviceCaptionSetting { return NO; }
- (BOOL)isEnhancedSearchBarEnabled { return YES; } - (BOOL)shouldUseAppThemeSetting { return YES; } // v16.xx
%end %end
// NOYTPremium - https://github.com/PoomSmart/NoYTPremium/ // NOYTPremium - https://github.com/PoomSmart/NoYTPremium/
@@ -217,19 +242,18 @@ BOOL ytMiniPlayer() {
- (void)showSurveyWithRenderer:(id)arg1 surveyParentResponder:(id)arg2 {} - (void)showSurveyWithRenderer:(id)arg1 surveyParentResponder:(id)arg2 {}
%end %end
// Enable Shorts scroll bar - level3tjg - https://reddit.com/r/jailbreak/comments/v29yvk/_/iasl1l0/ // Enable Shorts scroll bar - @PoomSmart
%hook YTReelPlayerViewControllerSub %hook YTReelPlayerViewController
- (BOOL)shouldEnablePlayerBar { return YES; } - (BOOL)shouldAlwaysEnablePlayerBar { return YES; }
%end %end
// Hide the download playlist button of uYou cuz it's broken ?! %hook YTInlinePlayerBarContainerView
// Why aren't you working?? :/ - (void)setUserInteractionEnabled:(BOOL)enabled { %orig(YES); }
// %hook YTPlaylistHeaderViewController %end
// - (void)viewDidLoad {
// %orig; %hook YTReelPlayerViewControllerSub // v16.42.3 - @level3tjg: https://reddit.com/r/jailbreak/comments/v29yvk/_/iasl1l0/
// self.downloadsButton.hidden = YES; - (BOOL)shouldEnablePlayerBar { return YES; }
// } %end
// %end
// Workaround for issue #54 // Workaround for issue #54
%hook YTMainAppVideoPlayerOverlayViewController %hook YTMainAppVideoPlayerOverlayViewController
@@ -239,6 +263,57 @@ BOOL ytMiniPlayer() {
} }
%end %end
// Hide YouTube Shorts banner in Home page? - @MiRO92 - YTNoShorts: https://github.com/MiRO92/YTNoShorts
%hook YTAsyncCollectionView
- (id)cellForItemAtIndexPath:(NSIndexPath *)indexPath {
UICollectionViewCell *cell = %orig;
if ([cell isKindOfClass:NSClassFromString(@"_ASCollectionViewCell")]) {
_ASCollectionViewCell *cell = %orig;
if ([cell respondsToSelector:@selector(node)]) {
if ([[[cell node] accessibilityIdentifier] isEqualToString:@"statement_banner.view"]) { [self removeShortsAndFeaturesAdsAtIndexPath:indexPath]; }
if ([[[cell node] accessibilityIdentifier] isEqualToString:@"compact.view"]) { [self removeShortsAndFeaturesAdsAtIndexPath:indexPath]; }
}
}
return %orig;
}
%new
- (void)removeShortsAndFeaturesAdsAtIndexPath:(NSIndexPath *)indexPath {
[self deleteItemsAtIndexPaths:[NSArray arrayWithObject:indexPath]];
}
%end
// uYou's slide settings?
%hook FRPSliderCell
- (void)didMoveToWindow {
%orig;
if (self.traitCollection.userInterfaceStyle == UIUserInterfaceStyleDark) {
MSHookIvar<UILabel *>(self, "_lLabel").textColor = [UIColor whiteColor];
MSHookIvar<UILabel *>(self, "_rLabel").textColor = [UIColor whiteColor];
MSHookIvar<UILabel *>(self, "_cLabel").textColor = [UIColor whiteColor];
}
}
%end
// YTNoPaidPromo: https://github.com/PoomSmart/YTNoPaidPromo
%hook YTMainAppVideoPlayerOverlayViewController
- (void)setPaidContentWithPlayerData:(id)data {
if (hidePaidPromotionCard()) {}
else { return %orig; }
}
- (void)playerOverlayProvider:(YTPlayerOverlayProvider *)provider didInsertPlayerOverlay:(YTPlayerOverlay *)overlay {
if ([[overlay overlayIdentifier] isEqualToString:@"player_overlay_paid_content"] && hidePaidPromotionCard()) return;
%orig;
}
%end
%hook YTInlineMutedPlaybackPlayerOverlayViewController
- (void)setPaidContentWithPlayerData:(id)data {
if (hidePaidPromotionCard()) {}
else { return %orig; }
}
%end
# pragma mark - IAmYouTube - https://github.com/PoomSmart/IAmYouTube/ # pragma mark - IAmYouTube - https://github.com/PoomSmart/IAmYouTube/
%hook YTVersionUtils %hook YTVersionUtils
+ (NSString *)appName { return YT_NAME; } + (NSString *)appName { return YT_NAME; }
@@ -295,38 +370,75 @@ BOOL ytMiniPlayer() {
%end %end
# pragma mark - OLED dark mode by BandarHL # pragma mark - OLED dark mode by BandarHL
UIColor* raisedColor = [UIColor colorWithRed:0.035 green:0.035 blue:0.035 alpha:1.0];
UIColor* oledColor = [UIColor colorWithRed:0.0 green:0.0 blue:0.0 alpha:1.0];
%group gOLED %group gOLED
%hook YTCommonColorPalette %hook YTCommonColorPalette
- (UIColor *)brandBackgroundSolid { - (UIColor *)brandBackgroundSolid {
if (self.pageStyle == 1) { if (self.pageStyle == 1) {
return oledColor; return [UIColor blackColor];
} }
return %orig; return %orig;
} }
- (UIColor *)brandBackgroundPrimary { - (UIColor *)brandBackgroundPrimary {
if (self.pageStyle == 1) { if (self.pageStyle == 1) {
return oledColor; return [UIColor blackColor];
} }
return %orig; return %orig;
} }
- (UIColor *)brandBackgroundSecondary { - (UIColor *)brandBackgroundSecondary {
if (self.pageStyle == 1) { if (self.pageStyle == 1) {
return oledColor; return [[UIColor blackColor] colorWithAlphaComponent:0.9];
}
return %orig;
}
- (UIColor *)raisedBackground {
if (self.pageStyle == 1) {
return [UIColor blackColor];
} }
return %orig; return %orig;
} }
- (UIColor *)staticBrandBlack { - (UIColor *)staticBrandBlack {
if (self.pageStyle == 1) { if (self.pageStyle == 1) {
return oledColor; return [UIColor blackColor];
} }
return %orig; return %orig;
} }
- (UIColor *)generalBackgroundA { - (UIColor *)generalBackgroundA {
if (self.pageStyle == 1) { if (self.pageStyle == 1) {
return oledColor; return [UIColor blackColor];
}
return %orig;
}
%end
%hook YTColorPalette // v16.42.3
- (UIColor *)brandBackgroundSolid {
if (self.pageStyle == 1) {
return [UIColor blackColor];
}
return %orig;
}
- (UIColor *)brandBackgroundPrimary {
if (self.pageStyle == 1) {
return [UIColor blackColor];
}
return %orig;
}
- (UIColor *)brandBackgroundSecondary {
if (self.pageStyle == 1) {
return [[UIColor blackColor] colorWithAlphaComponent:0.9];
}
return %orig;
}
- (UIColor *)staticBrandBlack {
if (self.pageStyle == 1) {
return [UIColor blackColor];
}
return %orig;
}
- (UIColor *)generalBackgroundA {
if (self.pageStyle == 1) {
return [UIColor blackColor];
} }
return %orig; return %orig;
} }
@@ -336,16 +448,7 @@ UIColor* oledColor = [UIColor colorWithRed:0.0 green:0.0 blue:0.0 alpha:1.0];
%hook YTAccountPanelBodyViewController %hook YTAccountPanelBodyViewController
- (UIColor *)backgroundColor:(NSInteger)pageStyle { - (UIColor *)backgroundColor:(NSInteger)pageStyle {
if (pageStyle == 1) { if (pageStyle == 1) {
return oledColor; return [UIColor blackColor];
}
return %orig;
}
%end
%hook YTInnerTubeCollectionViewController
- (UIColor *)backgroundColor:(NSInteger)pageStyle {
if (pageStyle == 1) {
return oledColor;
} }
return %orig; return %orig;
} }
@@ -354,9 +457,9 @@ UIColor* oledColor = [UIColor colorWithRed:0.0 green:0.0 blue:0.0 alpha:1.0];
// Explore // Explore
%hook ASScrollView %hook ASScrollView
- (void)didMoveToWindow { - (void)didMoveToWindow {
%orig;
if (isDarkMode()) { if (isDarkMode()) {
%orig; self.backgroundColor = [UIColor clearColor];
self.backgroundColor = oledColor;
} }
} }
%end %end
@@ -364,8 +467,8 @@ UIColor* oledColor = [UIColor colorWithRed:0.0 green:0.0 blue:0.0 alpha:1.0];
// Your videos // Your videos
%hook ASCollectionView %hook ASCollectionView
- (void)didMoveToWindow { - (void)didMoveToWindow {
%orig;
if (isDarkMode() && [self.nextResponder isKindOfClass:%c(_ASDisplayView)]) { if (isDarkMode() && [self.nextResponder isKindOfClass:%c(_ASDisplayView)]) {
%orig;
self.superview.backgroundColor = [UIColor clearColor]; self.superview.backgroundColor = [UIColor clearColor];
} }
} }
@@ -376,7 +479,7 @@ UIColor* oledColor = [UIColor colorWithRed:0.0 green:0.0 blue:0.0 alpha:1.0];
- (void)viewDidLoad { - (void)viewDidLoad {
if (self.traitCollection.userInterfaceStyle == UIUserInterfaceStyleDark) { if (self.traitCollection.userInterfaceStyle == UIUserInterfaceStyleDark) {
%orig; %orig;
self.tableView.backgroundColor = oledColor; self.tableView.backgroundColor = [UIColor blackColor];
} else { return %orig; } } else { return %orig; }
} }
%end %end
@@ -385,26 +488,16 @@ UIColor* oledColor = [UIColor colorWithRed:0.0 green:0.0 blue:0.0 alpha:1.0];
- (void)viewDidLoad { - (void)viewDidLoad {
if (self.traitCollection.userInterfaceStyle == UIUserInterfaceStyleDark) { if (self.traitCollection.userInterfaceStyle == UIUserInterfaceStyleDark) {
%orig; %orig;
self.view.backgroundColor = oledColor; self.view.backgroundColor = [UIColor blackColor];
} else { return %orig; } } else { return %orig; }
} }
%end %end
// YT Miniplayer
%hook YTWatchMiniBarView
- (void)setBackgroundColor:(UIColor *)color {
if (isDarkMode()) {
return %orig([UIColor colorWithRed:0.0 green:0.0 blue:0.0 alpha:0.9]);
}
return %orig;
}
%end
// Search View // Search View
%hook YTSearchBarView %hook YTSearchBarView
- (void)setBackgroundColor:(UIColor *)color { - (void)setBackgroundColor:(UIColor *)color {
if (isDarkMode()) { if (isDarkMode()) {
return %orig(oledColor); return %orig([UIColor blackColor]);
} }
return %orig; return %orig;
} }
@@ -414,7 +507,7 @@ UIColor* oledColor = [UIColor colorWithRed:0.0 green:0.0 blue:0.0 alpha:1.0];
%hook YTSearchBoxView %hook YTSearchBoxView
- (void)setBackgroundColor:(UIColor *)color { - (void)setBackgroundColor:(UIColor *)color {
if (isDarkMode()) { if (isDarkMode()) {
return %orig(oledColor); return %orig([UIColor blackColor]);
} }
return %orig; return %orig;
} }
@@ -424,7 +517,7 @@ UIColor* oledColor = [UIColor colorWithRed:0.0 green:0.0 blue:0.0 alpha:1.0];
%hook YTCommentView %hook YTCommentView
- (void)setBackgroundColor:(UIColor *)color { - (void)setBackgroundColor:(UIColor *)color {
if (isDarkMode()) { if (isDarkMode()) {
return %orig(oledColor); return %orig([UIColor blackColor]);
} }
return %orig; return %orig;
} }
@@ -433,7 +526,7 @@ UIColor* oledColor = [UIColor colorWithRed:0.0 green:0.0 blue:0.0 alpha:1.0];
%hook YTCreateCommentAccessoryView %hook YTCreateCommentAccessoryView
- (void)setBackgroundColor:(UIColor *)color { - (void)setBackgroundColor:(UIColor *)color {
if (isDarkMode()) { if (isDarkMode()) {
return %orig(oledColor); return %orig([UIColor blackColor]);
} }
return %orig; return %orig;
} }
@@ -442,7 +535,7 @@ UIColor* oledColor = [UIColor colorWithRed:0.0 green:0.0 blue:0.0 alpha:1.0];
%hook YTCreateCommentTextView %hook YTCreateCommentTextView
- (void)setBackgroundColor:(UIColor *)color { - (void)setBackgroundColor:(UIColor *)color {
if (isDarkMode()) { if (isDarkMode()) {
return %orig(oledColor); return %orig([UIColor blackColor]);
} }
return %orig; return %orig;
} }
@@ -454,6 +547,15 @@ UIColor* oledColor = [UIColor colorWithRed:0.0 green:0.0 blue:0.0 alpha:1.0];
} }
%end %end
%hook YTCommentDetailHeaderCell
- (void)didMoveToWindow {
%orig;
if (isDarkMode()) {
self.subviews[2].backgroundColor = [UIColor blackColor];
}
}
%end
%hook YTFormattedStringLabel // YT is werid... %hook YTFormattedStringLabel // YT is werid...
- (void)setBackgroundColor:(UIColor *)color { - (void)setBackgroundColor:(UIColor *)color {
if (isDarkMode()) { if (isDarkMode()) {
@@ -467,7 +569,7 @@ UIColor* oledColor = [UIColor colorWithRed:0.0 green:0.0 blue:0.0 alpha:1.0];
%hook YCHLiveChatActionPanelView %hook YCHLiveChatActionPanelView
- (void)setBackgroundColor:(UIColor *)color { - (void)setBackgroundColor:(UIColor *)color {
if (isDarkMode()) { if (isDarkMode()) {
return %orig(oledColor); return %orig([UIColor blackColor]);
} }
return %orig; return %orig;
} }
@@ -476,26 +578,28 @@ UIColor* oledColor = [UIColor colorWithRed:0.0 green:0.0 blue:0.0 alpha:1.0];
%hook YTEmojiTextView %hook YTEmojiTextView
- (void)setBackgroundColor:(UIColor *)color { - (void)setBackgroundColor:(UIColor *)color {
if (isDarkMode()) { if (isDarkMode()) {
return %orig(oledColor); return %orig([UIColor blackColor]);
} }
return %orig; return %orig;
} }
%end %end
// Nasty stuff :/ // Others
%hook _ASDisplayView %hook _ASDisplayView
- (void)didMoveToWindow { - (void)didMoveToWindow {
%orig; %orig;
if (isDarkMode()) { if (isDarkMode()) {
if ([self.accessibilityIdentifier isEqualToString:@"id.elements.components.comment_composer"]) { self.backgroundColor = oledColor; } if ([self.nextResponder isKindOfClass:%c(ASScrollView)]) { self.backgroundColor = [UIColor clearColor]; }
if ([self.accessibilityIdentifier isEqualToString:@"id.elements.components.video_list_entry"]) { self.backgroundColor = oledColor; } if ([self.accessibilityIdentifier isEqualToString:@"eml.cvr"]) { self.backgroundColor = [UIColor blackColor]; }
if ([self.accessibilityIdentifier isEqualToString:@"id.elements.components.filter_chip_bar"]) { self.backgroundColor = oledColor; } if ([self.accessibilityIdentifier isEqualToString:@"rich_header"]) { self.backgroundColor = [UIColor blackColor]; }
if ([self.accessibilityIdentifier isEqualToString:@"id.ui.comment_cell"]) { self.backgroundColor = oledColor; } if ([self.accessibilityIdentifier isEqualToString:@"id.ui.comment_cell"]) { self.backgroundColor = [UIColor blackColor]; }
if ([self.accessibilityIdentifier isEqualToString:@"eml.cvr"]) { self.backgroundColor = oledColor; } if ([self.accessibilityIdentifier isEqualToString:@"id.ui.cancel.button"]) { self.superview.backgroundColor = [UIColor clearColor]; }
if ([self.accessibilityIdentifier isEqualToString:@"rich_header"]) { self.backgroundColor = oledColor; } if ([self.accessibilityIdentifier isEqualToString:@"id.elements.components.filter_chip_bar"]) { self.backgroundColor = [UIColor blackColor]; }
if ([self.accessibilityIdentifier isEqualToString:@"id.comment.channel_guidelines_bottom_sheet_container"]) { self.backgroundColor = oledColor; } if ([self.accessibilityIdentifier isEqualToString:@"id.elements.components.comment_composer"]) { self.backgroundColor = [UIColor blackColor]; }
if ([self.accessibilityIdentifier isEqualToString:@"id.comment.channel_guidelines_entry_banner_container"]) { self.backgroundColor = oledColor; } if ([self.accessibilityIdentifier isEqualToString:@"id.elements.components.video_list_entry"]) { self.backgroundColor = [UIColor blackColor]; }
if ([self.accessibilityIdentifier isEqualToString:@"id.comment.guidelines_text"]) { self.superview.backgroundColor = oledColor; } if ([self.accessibilityIdentifier isEqualToString:@"id.comment.guidelines_text"]) { self.superview.backgroundColor = [UIColor blackColor]; }
if ([self.accessibilityIdentifier isEqualToString:@"id.comment.channel_guidelines_bottom_sheet_container"]) { self.backgroundColor = [UIColor blackColor]; }
if ([self.accessibilityIdentifier isEqualToString:@"id.comment.channel_guidelines_entry_banner_container"]) { self.backgroundColor = [UIColor blackColor]; }
} }
} }
%end %end
@@ -504,25 +608,27 @@ UIColor* oledColor = [UIColor colorWithRed:0.0 green:0.0 blue:0.0 alpha:1.0];
%hook ASWAppSwitchingSheetHeaderView %hook ASWAppSwitchingSheetHeaderView
- (void)setBackgroundColor:(UIColor *)color { - (void)setBackgroundColor:(UIColor *)color {
if (isDarkMode()) { if (isDarkMode()) {
return %orig(oledColor); return %orig(raisedColor);
} }
return %orig;
} }
%end %end
%hook ASWAppSwitchingSheetFooterView %hook ASWAppSwitchingSheetFooterView
- (void)setBackgroundColor:(UIColor *)color { - (void)setBackgroundColor:(UIColor *)color {
if (isDarkMode()) { if (isDarkMode()) {
return %orig(oledColor); return %orig(raisedColor);
} }
return %orig;
} }
%end %end
%hook ASWAppSwitcherCollectionViewCell %hook ASWAppSwitcherCollectionViewCell
- (void)didMoveToWindow { - (void)didMoveToWindow {
%orig;
if (isDarkMode()) { if (isDarkMode()) {
%orig; self.subviews[1].backgroundColor = raisedColor;
self.subviews[1].backgroundColor = oledColor; self.superview.backgroundColor = raisedColor;
self.superview.backgroundColor = oledColor;
} }
} }
%end %end
@@ -533,28 +639,28 @@ UIColor* oledColor = [UIColor colorWithRed:0.0 green:0.0 blue:0.0 alpha:1.0];
%hook UIPredictionViewController %hook UIPredictionViewController
- (void)loadView { - (void)loadView {
%orig; %orig;
[self.view setBackgroundColor:oledColor]; [self.view setBackgroundColor:[UIColor blackColor]];
} }
%end %end
%hook UICandidateViewController %hook UICandidateViewController
- (void)loadView { - (void)loadView {
%orig; %orig;
[self.view setBackgroundColor:oledColor]; [self.view setBackgroundColor:[UIColor blackColor]];
} }
%end %end
%hook UIKeyboardDockView %hook UIKeyboardDockView
- (void)didMoveToWindow { - (void)didMoveToWindow {
%orig; %orig;
self.backgroundColor = oledColor; self.backgroundColor = [UIColor blackColor];
} }
%end %end
%hook UIKeyboardLayoutStar %hook UIKeyboardLayoutStar
- (void)didMoveToWindow { - (void)didMoveToWindow {
%orig; %orig;
self.backgroundColor = oledColor; self.backgroundColor = [UIColor blackColor];
} }
%end %end
@@ -622,7 +728,7 @@ static void replaceTab(YTIGuideResponse *response) {
%end %end
%end %end
// iOS 16 uYou crash fix // iOS 16 uYou crash fix - @level3tjg: https://github.com/qnblackcat/uYouPlus/pull/224
%group iOS16 %group iOS16
%hook OBPrivacyLinkButton %hook OBPrivacyLinkButton
%new %new