Compare commits
106
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
e2cd37a8b6 | ||
|
|
e5b9ff21cf | ||
|
|
2e7fd253a8 | ||
|
|
3aa7c57d82 | ||
|
|
11ddcd421d | ||
|
|
6418f3daeb | ||
|
|
4b283110a6 | ||
|
|
2615436031 | ||
|
|
81088fadd3 | ||
|
|
5adaec2c93 | ||
|
|
7ac253963e | ||
|
|
2d2b469f1f | ||
|
|
9e98ad9482 | ||
|
|
1d5de3cd4c | ||
|
|
1266cb5a38 | ||
|
|
4fee21517e | ||
|
|
2ff0f3fb56 | ||
|
|
329fb1681a | ||
|
|
c78e5b9fd9 | ||
|
|
7b9fd7dcfb | ||
|
|
922ab4e9b7 | ||
|
|
c8a4acfff0 | ||
|
|
d53b400235 | ||
|
|
3cabc4405d | ||
|
|
d3a347a914 | ||
|
|
17adfaf534 | ||
|
|
edc1ac3912 | ||
|
|
21d3e74f9f | ||
|
|
3bd1914a36 | ||
|
|
7ff88f4106 | ||
|
|
b6304bf20a | ||
|
|
0db3c368a0 | ||
|
|
9bd31e7189 | ||
|
|
58488a1d89 | ||
|
|
c9547cae78 | ||
|
|
f8336d0352 | ||
|
|
e549c1e9e9 | ||
|
|
afb5cf1cb6 | ||
|
|
f275f72413 | ||
|
|
46b4ea6a27 | ||
|
|
23ba60a3ba | ||
|
|
93b7aa9258 | ||
|
|
0db1e09917 | ||
|
|
6a8798597b | ||
|
|
ac6fa7b853 | ||
|
|
49b75626b9 | ||
|
|
8ec1cb8cba | ||
|
|
12f80fa7ee | ||
|
|
09b765d7d9 | ||
|
|
fd8dc7a61d | ||
|
|
1036272ce3 | ||
|
|
41ae9ef959 | ||
|
|
2b141cb50f | ||
|
|
02addcb00c | ||
|
|
53f62444ba | ||
|
|
922b86a749 | ||
|
|
976c103dce | ||
|
|
8dc2ed3166 | ||
|
|
932cae3473 | ||
|
|
3d05302b9b | ||
|
|
40af55583f | ||
|
|
e389801893 | ||
|
|
ee98ec6237 | ||
|
|
516749e081 | ||
|
|
c5935309ca | ||
|
|
94fdb176ea | ||
|
|
a2b9a6ac73 | ||
|
|
96b62b5791 | ||
|
|
49615dd41c | ||
|
|
96c528fa72 | ||
|
|
d959269a3b | ||
|
|
7045e82565 | ||
|
|
11308d59b5 | ||
|
|
e6622b7e74 | ||
|
|
f8a02e11d7 | ||
|
|
43d593d88d | ||
|
|
f4bf32bcad | ||
|
|
b16c54cd63 | ||
|
|
f45f1946b4 | ||
|
|
f325a31196 | ||
|
|
cab48bbe9e | ||
|
|
5424e4a9e8 | ||
|
|
d7a7c90cf0 | ||
|
|
fe45ebaac1 | ||
|
|
4590369aa1 | ||
|
|
36bf21ad2e | ||
|
|
c2d1581698 | ||
|
|
ca0650d73a | ||
|
|
ad29207afd | ||
|
|
64c7717b38 | ||
|
|
25f66162c5 | ||
|
|
5becdf5a85 | ||
|
|
9145301cc8 | ||
|
|
b2b14305eb | ||
|
|
02ec80256c | ||
|
|
b37f1e1a24 | ||
|
|
244e5a3576 | ||
|
|
3a532cfa63 | ||
|
|
ef153f5d9c | ||
|
|
4258986378 | ||
|
|
dae08da6bf | ||
|
|
7f0e749030 | ||
|
|
c6dd02a759 | ||
|
|
23d745e869 | ||
|
|
2116d96e6a | ||
|
|
f2cb699e3b |
@@ -15,7 +15,7 @@ _Make sure you complete the template. Otherwise, it will be closed without furth
|
|||||||
- iOS/iPadOS version:
|
- iOS/iPadOS version:
|
||||||
- Device model:
|
- Device model:
|
||||||
- Sideload tool (Ex: AltStore, Sideloadly...)
|
- Sideload tool (Ex: AltStore, Sideloadly...)
|
||||||
- Version of uYouPlus:
|
- Version of uYouPlus: _**latest** or **newest** is NOT a version number!!_
|
||||||
|
|
||||||
### Describe the bug
|
### Describe the bug
|
||||||
|
|
||||||
@@ -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:
|
||||||
|
|
||||||
|
|||||||
@@ -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)"
|
||||||
|
|||||||
@@ -9,6 +9,10 @@
|
|||||||
@end
|
@end
|
||||||
|
|
||||||
// uYouPlus
|
// uYouPlus
|
||||||
|
@interface YTPlayabilityResolutionUserActionUIController : NSObject // Skips content warning before playing *some videos - @PoomSmart
|
||||||
|
- (void)confirmAlertDidPressConfirm;
|
||||||
|
@end
|
||||||
|
|
||||||
@interface YTMainAppControlsOverlayView : UIView
|
@interface YTMainAppControlsOverlayView : UIView
|
||||||
@end
|
@end
|
||||||
|
|
||||||
@@ -23,9 +27,15 @@
|
|||||||
- (void)removeShortsAndFeaturesAdsAtIndexPath:(NSIndexPath *)indexPath;
|
- (void)removeShortsAndFeaturesAdsAtIndexPath:(NSIndexPath *)indexPath;
|
||||||
@end
|
@end
|
||||||
|
|
||||||
// @interface YTPlaylistHeaderViewController : UIViewController
|
@interface FRPSliderCell : UITableViewCell
|
||||||
// @property (nonatomic, strong, readwrite) UIView *downloadsButton;
|
@end
|
||||||
// @end
|
|
||||||
|
@interface boolSettingsVC : UIViewController
|
||||||
|
@end
|
||||||
|
|
||||||
|
@interface PlayerManager : NSObject
|
||||||
|
- (float)progress;
|
||||||
|
@end
|
||||||
|
|
||||||
// iOS16 fix
|
// iOS16 fix
|
||||||
@interface OBPrivacyLinkButton : UIButton
|
@interface OBPrivacyLinkButton : UIButton
|
||||||
@@ -37,6 +47,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;
|
||||||
@@ -66,6 +81,9 @@
|
|||||||
@interface _ASDisplayView : UIView
|
@interface _ASDisplayView : UIView
|
||||||
@end
|
@end
|
||||||
|
|
||||||
|
@interface YTCommentDetailHeaderCell : UIView
|
||||||
|
@end
|
||||||
|
|
||||||
@interface SponsorBlockSettingsController : UITableViewController
|
@interface SponsorBlockSettingsController : UITableViewController
|
||||||
@end
|
@end
|
||||||
|
|
||||||
|
|||||||
@@ -13,7 +13,8 @@ BUNDLE_ID = com.google.ios.youtube
|
|||||||
uYouPlus_INJECT_DYLIBS = Tweaks/uYou/Library/MobileSubstrate/DynamicLibraries/uYou.dylib .theos/obj/libcolorpicker.dylib .theos/obj/iSponsorBlock.dylib .theos/obj/YTUHD.dylib .theos/obj/YouPiP.dylib .theos/obj/YouTubeDislikesReturn.dylib .theos/obj/YoutubeSpeed.dylib
|
uYouPlus_INJECT_DYLIBS = Tweaks/uYou/Library/MobileSubstrate/DynamicLibraries/uYou.dylib .theos/obj/libcolorpicker.dylib .theos/obj/iSponsorBlock.dylib .theos/obj/YTUHD.dylib .theos/obj/YouPiP.dylib .theos/obj/YouTubeDislikesReturn.dylib .theos/obj/YoutubeSpeed.dylib
|
||||||
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 Security
|
||||||
|
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
|
||||||
|
|||||||
@@ -19,18 +19,22 @@
|
|||||||
|
|
||||||
- [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.
|
||||||
|
|
||||||
|
- [Julioverne](https://twitter.com/ijulioverne) for the solution to skip Google's safety warning when logging in.
|
||||||
|
|
||||||
- [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 +54,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 +74,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.24.4-2.1)](https://tinyurl.com/277rhd8n) - It will take a while to install because AltStore needs to download the IPA.
|
- [Open in AltStore (v17.33.2-2.1)](https://tinyurl.com/33mv77u6) - It will take a while to install because AltStore needs to download the IPA.
|
||||||
|
|
||||||
- Version info: _(last update: June 22)_
|
- Version info: _(last update: Aug 26)_
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
<summary>Expand</summary>
|
<summary>Expand</summary>
|
||||||
|
|
||||||
| **Tweaks/App** | **Version** | **Open source** |
|
| **Tweaks/App** | **Developer** | **Version** | **Open source** |
|
||||||
| :------------: | :----------:| :-------------: |
|
| - | - | :-: | :-: |
|
||||||
| **YouTube** | 17.24.4 | ✖︎ |
|
| **YouTube** | Google Inc | 17.33.2 | ✖︎ |
|
||||||
| [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.4 | [✔︎](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>
|
||||||
|
|
||||||
@@ -119,18 +121,22 @@ See [Installation - Wiki](https://github.com/qnblackcat/uYouPlus/wiki/Installati
|
|||||||
<details>
|
<details>
|
||||||
<summary>MiRO92</summary>
|
<summary>MiRO92</summary>
|
||||||
|
|
||||||
- CashApp: https://cash.app/$MiRO92M
|
- https://github.com/MiRO92/uYou-for-YouTube#support
|
||||||
|
|
||||||
- Other payment methods are available in uYou's settings.
|
|
||||||
</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
@@ -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];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+1
-1
Submodule Tweaks/Alderis updated: 978ca5c483...c5b3ed5761
Submodule Tweaks/Return-YouTube-Dislikes updated: 5f86ef7d91...deae67afea
+1
-1
Submodule Tweaks/YTSpeed updated: 7c11d9c916...3fec2dfcf0
+1
-1
Submodule Tweaks/YTUHD updated: 00c5e38ca9...b0d24c0859
+1
-1
Submodule Tweaks/YouPiP updated: 7000428368...77bed4f3fb
+1
-1
Submodule Tweaks/YouTubeHeader updated: 14b3975371...fa1fb5a993
+1
-1
Submodule Tweaks/iSponsorBlock updated: a936217c38...82d717878f
@@ -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";
|
||||||
@@ -1,53 +1,46 @@
|
|||||||
// How to translate uYouPlus to your languate:
|
// Settings
|
||||||
//
|
|
||||||
// 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!
|
|
||||||
//
|
|
||||||
// Settings
|
|
||||||
|
|
||||||
"HIDE_PREVIOUS_AND_NEXT_BUTTON" = "Spultasten ausblenden";
|
"HIDE_PREVIOUS_AND_NEXT_BUTTON" = "Vor- und Zurücktasten ausblenden";
|
||||||
"HIDE_PREVIOUS_AND_NEXT_BUTTON_DESC" = "Spultasten im Overlay der Videosteuerung ausblenden";
|
"HIDE_PREVIOUS_AND_NEXT_BUTTON_DESC" = "Vor- und Zurückspultasten vom Videoplayer ausblenden.";
|
||||||
|
|
||||||
"YT_MINIPLAYER" = "Miniplayer für alle YouTube-Videos aktivieren";
|
"YT_MINIPLAYER" = "Miniplayer für alle YT Videos aktivieren";
|
||||||
"YT_MINIPLAYER_DESC" = "Zum Beispiel bei Videos für Kinder.";
|
"YT_MINIPLAYER_DESC" = "z.B. bei Videos für Kinder";
|
||||||
|
|
||||||
"CAST_CONFIRM" = "Warnung vor Starten einer Übertragung (YTCastConfirm)";
|
"CAST_CONFIRM" = "Warnung vor TV-Übertragungen (YTCastConfirm)";
|
||||||
"CAST_CONFIRM_DESC" = "Warnung vor Starten einer Übertragung, um ein versehentliches Übernehmen des TVs zu verhindern.";
|
"CAST_CONFIRM_DESC" = "Zeigt eine Warnung an, um eine ausversehene TV-Übertragung zu verhindern.";
|
||||||
|
|
||||||
"HIDE_HOVER_CARD" = "Endkarten ausblenden (YTNoHoverCards)";
|
"HIDE_HOVER_CARD" = "Endkarten ausblenden (YTNoHoverCards)";
|
||||||
"HIDE_HOVER_CARD_DESC" = "Endkarten (Thumbnails) am Ende von Videos ausblenden.";
|
"HIDE_HOVER_CARD_DESC" = "Endkarten (Thumbnails) am Ende des Videos ausblenden.";
|
||||||
|
|
||||||
"NEW_MINIPLAYER_STYLE" = "Neue Miniplayer-Leiste (BigYTMiniPlayer)";
|
"NEW_MINIPLAYER_STYLE" = "Neuer Miniplayer Style (BigYTMiniPlayer)";
|
||||||
"NEW_MINIPLAYER_STYLE_DESC" = "App-Neustart erforderlich.";
|
"NEW_MINIPLAYER_STYLE_DESC" = "App-Neustart erforderlich!";
|
||||||
|
|
||||||
"YT_RE_EXPLORE" = "Registerkarte 'Shorts' durch Registerkarte 'Entdecken' ersetzen (YTReExplore)";
|
"YT_RE_EXPLORE" = "Shorts-Tab durch Entdecken-Tab ersetzen (YTReExplore)";
|
||||||
"YT_RE_EXPLORE_DESC" = "App-Neustart erforderlich.";
|
"YT_RE_EXPLORE_DESC" = "App-Neustart erforderlich!";
|
||||||
|
|
||||||
"HIDE_SUBTITLES_BUTTON" = "Schaltfläche 'Untertitel' ausblenden";
|
"HIDE_SUBTITLES_BUTTON" = "Untertitel-Button ausblenden";
|
||||||
"HIDE_SUBTITLES_BUTTON_DESC" = "Schaltfläche 'Untertitel' im Overlay der Videosteuerung ausblenden.";
|
"HIDE_SUBTITLES_BUTTON_DESC" = "Untertitel-Button vom Videoplayer ausblenden.";
|
||||||
|
|
||||||
"HIDE_AUTOPLAY_SWITCH" = "Schaltfläche 'Autoplay' ausblenden";
|
"HIDE_AUTOPLAY_SWITCH" = "Autoplay-Schalter ausblenden";
|
||||||
"HIDE_AUTOPLAY_SWITCH_DESC" = Schaltfläche 'Autoplay' im Overlay der Videosteuerung ausblenden.";
|
"HIDE_AUTOPLAY_SWITCH_DESC" = "Autoplay-Schalter vom Videoplayer ausblenden.";
|
||||||
|
|
||||||
"AUTO_FULLSCREEN" = "Auto-Vollbild (YTAutoFullScreen)";
|
"AUTO_FULLSCREEN" = "Automatisches Vollbild (YTAutoFullScreen)";
|
||||||
"AUTO_FULLSCREEN_DESC" = "Auto. Videos im Vollbild starten.";
|
"AUTO_FULLSCREEN_DESC" = "Automatisch Videos im Vollbild starten.";
|
||||||
|
|
||||||
"HIDE_HUD_MESSAGES" = "HUD-Meldungen ausblenden";
|
"HIDE_HUD_MESSAGES" = "HUD-Nachrichten ausblenden";
|
||||||
"HIDE_HUD_MESSAGES_DESC" = "Beispiel: CC ist ein/ausgeschaltet, Videoschleife ist eingeschaltet,...";
|
"HIDE_HUD_MESSAGES_DESC" = "z.B.: Untertitel sind akti-/deaktiviert, Videoschleife ist an, ...";
|
||||||
|
|
||||||
"OLED_DARKMODE" = "OLED-Dunkelmodus (Experimentell)";
|
"OLED_DARKMODE" = "OLED-Dunkelmodus (Experimental)";
|
||||||
"OLED_DARKMODE_DESC" = "Funktioniert in einigen Fällen möglicherweise nicht richtig. Ein App-Neustart ist nach Aktiv-/Deaktivierung erforderlich.";
|
"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 (Experimentell)";
|
"OLED_KEYBOARD" = "OLED-Tastatur (Experimental)";
|
||||||
"OLED_KEYBOARD_DESC" = "Funktioniert in einigen Fällen möglicherweise nicht richtig. App-Neustart erforderlich.";
|
"OLED_KEYBOARD_DESC" = "Könnte in manchen Fällen nicht richtig funktionieren. App-Neustart erforderlich1";
|
||||||
|
|
||||||
// YTCastConfirm
|
"HIDE_PAID_PROMOTION_CARDS" = "Enthält bezahlte Werbung Info ausblenden";
|
||||||
"CASTING" = "Übertragen";
|
"HIDE_PAID_PROMOTION_CARDS_DESC" = "Enthält bezahlte Werbung Infobanner bei manchen Videos ausblenden.";
|
||||||
"MSG_ARE_YOU_SURE" = "Sind Sie sicher, dass Sie mit der Übertragung beginnen wollen?";
|
|
||||||
"MSG_YES" = "Ja";
|
// YTCastConfirm
|
||||||
"MSG_CANCEL" = "Abbrechen";
|
"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" = "例: 字幕がオン/オフになりました、ループ再生はオンになっています 等";
|
||||||
|
|
||||||
|
"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" = "YouTube 닫기";
|
||||||
|
"KILL_APP_DESC" = "YouTube 앱을 닫으려면 여기를 탭하세요!";
|
||||||
|
|
||||||
|
"HIDE_PREVIOUS_AND_NEXT_BUTTON" = "이전, 다음 재생 버튼 숨기기";
|
||||||
|
"HIDE_PREVIOUS_AND_NEXT_BUTTON_DESC" = "비디오 재생 오버레이에서 이전 재생, 다음 재생 버튼을 숨깁니다.";
|
||||||
|
|
||||||
|
"YT_MINIPLAYER" = "모든 YouTube 영상에서 미니 플레이어 활성화";
|
||||||
|
"YT_MINIPLAYER_DESC" = "아동용 영상일 경우.";
|
||||||
|
|
||||||
|
"CAST_CONFIRM" = "TV 전송 알림 (YTCastConfirm)";
|
||||||
|
"CAST_CONFIRM_DESC" = "의도치 않게 TV로 영상을 전송하지 않도록 보내기 전에 확인 메시지를 표시합니다.";
|
||||||
|
|
||||||
|
"HIDE_HOVER_CARD" = "영상 끝 부분의 호버카드 숨기기 (YTNoHoverCards)";
|
||||||
|
"HIDE_HOVER_CARD_DESC" = "영상의 끝 부분에서 게시자가 표시한 영상 썸네일을 숨깁니다.";
|
||||||
|
|
||||||
|
"NEW_MINIPLAYER_STYLE" = "새로운 스타일의 미니 플레이어 (BigYTMiniPlayer)";
|
||||||
|
"NEW_MINIPLAYER_STYLE_DESC" = "앱을 다시 시작해야 합니다.";
|
||||||
|
|
||||||
|
"YT_RE_EXPLORE" = "Shorts 탭 대신 탐색 탭 보이기 (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" = "TV로 전송";
|
||||||
|
"MSG_ARE_YOU_SURE" = "TV로 영상 전송을 시작하겠습니까?";
|
||||||
|
"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,23 +24,26 @@
|
|||||||
"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";
|
||||||
"MSG_ARE_YOU_SURE" = "Bạn có muốn bắt đầu truyền video không?";
|
"MSG_ARE_YOU_SURE" = "Bạn có muốn bắt đầu truyền video không?";
|
||||||
"MSG_YES" = "Có";
|
"MSG_YES" = "Có";
|
||||||
"MSG_CANCEL" = "Không";
|
"MSG_CANCEL" = "Không";
|
||||||
|
|||||||
@@ -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" = "取消";
|
||||||
|
|||||||
+270
-86
@@ -13,6 +13,10 @@
|
|||||||
#import "Tweaks/YouTubeHeader/YTIBrowseRequest.h"
|
#import "Tweaks/YouTubeHeader/YTIBrowseRequest.h"
|
||||||
#import "Tweaks/YouTubeHeader/YTCommonColorPalette.h"
|
#import "Tweaks/YouTubeHeader/YTCommonColorPalette.h"
|
||||||
#import "Tweaks/YouTubeHeader/ASCollectionView.h"
|
#import "Tweaks/YouTubeHeader/ASCollectionView.h"
|
||||||
|
#import "Tweaks/YouTubeHeader/YTPlayerOverlay.h"
|
||||||
|
#import "Tweaks/YouTubeHeader/YTPlayerOverlayProvider.h"
|
||||||
|
#import "Tweaks/YouTubeHeader/YTReelWatchPlaybackOverlayView.h"
|
||||||
|
#import "Tweaks/YouTubeHeader/YTReelPlayerBottomButton.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() {
|
||||||
@@ -26,7 +30,24 @@ NSBundle *uYouPlusBundle() {
|
|||||||
}
|
}
|
||||||
NSBundle *tweakBundle = uYouPlusBundle();
|
NSBundle *tweakBundle = uYouPlusBundle();
|
||||||
|
|
||||||
//
|
static NSString *accessGroupID() {
|
||||||
|
NSDictionary *query = [NSDictionary dictionaryWithObjectsAndKeys:
|
||||||
|
(__bridge NSString *)kSecClassGenericPassword, (__bridge NSString *)kSecClass,
|
||||||
|
@"bundleSeedID", kSecAttrAccount,
|
||||||
|
@"", kSecAttrService,
|
||||||
|
(id)kCFBooleanTrue, kSecReturnAttributes,
|
||||||
|
nil];
|
||||||
|
CFDictionaryRef result = nil;
|
||||||
|
OSStatus status = SecItemCopyMatching((__bridge CFDictionaryRef)query, (CFTypeRef *)&result);
|
||||||
|
if (status == errSecItemNotFound)
|
||||||
|
status = SecItemAdd((__bridge CFDictionaryRef)query, (CFTypeRef *)&result);
|
||||||
|
if (status != errSecSuccess)
|
||||||
|
return nil;
|
||||||
|
NSString *accessGroup = [(__bridge NSDictionary *)result objectForKey:(__bridge NSString *)kSecAttrAccessGroup];
|
||||||
|
|
||||||
|
return accessGroup;
|
||||||
|
}
|
||||||
|
|
||||||
BOOL hideHUD() {
|
BOOL hideHUD() {
|
||||||
return [[NSUserDefaults standardUserDefaults] boolForKey:@"hideHUD_enabled"];
|
return [[NSUserDefaults standardUserDefaults] boolForKey:@"hideHUD_enabled"];
|
||||||
}
|
}
|
||||||
@@ -66,8 +87,22 @@ 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
|
||||||
|
|
||||||
|
// Skips content warning before playing *some videos - @PoomSmart
|
||||||
|
%hook YTPlayabilityResolutionUserActionUIController
|
||||||
|
- (void)showConfirmAlert { [self confirmAlertDidPressConfirm]; }
|
||||||
|
%end
|
||||||
|
|
||||||
// YTMiniPlayerEnabler: https://github.com/level3tjg/YTMiniplayerEnabler/
|
// YTMiniPlayerEnabler: https://github.com/level3tjg/YTMiniplayerEnabler/
|
||||||
%hook YTWatchMiniBarViewController
|
%hook YTWatchMiniBarViewController
|
||||||
- (void)updateMiniBarPlayerStateFromRenderer {
|
- (void)updateMiniBarPlayerStateFromRenderer {
|
||||||
@@ -91,9 +126,8 @@ 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;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
%end
|
%end
|
||||||
@@ -164,9 +198,37 @@ BOOL ytMiniPlayer() {
|
|||||||
}
|
}
|
||||||
%end
|
%end
|
||||||
|
|
||||||
// Workaround for https://github.com/MiRO92/uYou-for-YouTube/issues/12
|
// Workaround for MiRO92/uYou-for-YouTube#12, qnblackcat/uYouPlus#263
|
||||||
%hook YTAdsInnerTubeContextDecorator
|
%hook YTDataUtils
|
||||||
- (void)decorateContext:(id)arg1 { %orig(nil); }
|
+ (NSMutableDictionary *)spamSignalsDictionary {
|
||||||
|
return nil;
|
||||||
|
}
|
||||||
|
%end
|
||||||
|
|
||||||
|
// Workaround for https://github.com/MiRO92/uYou-for-YouTube/issues/94
|
||||||
|
%hook UIResponder
|
||||||
|
%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
|
||||||
|
|
||||||
|
// Workaround for qnblackcat/uYouPlus#10
|
||||||
|
%hook boolSettingsVC
|
||||||
|
- (instancetype)initWithTitle:(NSString *)title sections:(NSArray *)sections footer:(NSString *)footer {
|
||||||
|
if (@available(iOS 15, *))
|
||||||
|
if (![self valueForKey:@"_lastNotifiedTraitCollection"])
|
||||||
|
[self setValue:[UITraitCollection currentTraitCollection] forKey:@"_lastNotifiedTraitCollection"];
|
||||||
|
return %orig;
|
||||||
|
}
|
||||||
%end
|
%end
|
||||||
|
|
||||||
// YTClassicVideoQuality: https://github.com/PoomSmart/YTClassicVideoQuality
|
// YTClassicVideoQuality: https://github.com/PoomSmart/YTClassicVideoQuality
|
||||||
@@ -182,12 +244,9 @@ 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; }
|
|
||||||
%end
|
%end
|
||||||
|
|
||||||
// NOYTPremium - https://github.com/PoomSmart/NoYTPremium/
|
// NOYTPremium - https://github.com/PoomSmart/NoYTPremium/
|
||||||
@@ -217,19 +276,14 @@ 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;
|
|
||||||
// self.downloadsButton.hidden = YES;
|
|
||||||
// }
|
|
||||||
// %end
|
|
||||||
|
|
||||||
// Workaround for issue #54
|
// Workaround for issue #54
|
||||||
%hook YTMainAppVideoPlayerOverlayViewController
|
%hook YTMainAppVideoPlayerOverlayViewController
|
||||||
@@ -237,9 +291,64 @@ BOOL ytMiniPlayer() {
|
|||||||
if ([[NSUserDefaults standardUserDefaults] boolForKey:@"relatedVideosAtTheEndOfYTVideos"] == NO) {}
|
if ([[NSUserDefaults standardUserDefaults] boolForKey:@"relatedVideosAtTheEndOfYTVideos"] == NO) {}
|
||||||
else { return %orig; }
|
else { return %orig; }
|
||||||
}
|
}
|
||||||
%end
|
%end
|
||||||
|
|
||||||
// Hide YouTube Shorts banner in Home page? - MiRO92 - YTNoShorts: https://github.com/MiRO92/YTNoShorts
|
// Workaround for qnblackcat/uYouPlus#253, qnblackcat/uYouPlus#170
|
||||||
|
%hook YTReelWatchPlaybackOverlayView
|
||||||
|
- (YTQTMButton *)overflowButton {
|
||||||
|
if ([self respondsToSelector:@selector(orderedRightSideButtons)] &&
|
||||||
|
[self orderedRightSideButtons].count != 0)
|
||||||
|
return [self orderedRightSideButtons][0];
|
||||||
|
return %orig;
|
||||||
|
}
|
||||||
|
%end
|
||||||
|
|
||||||
|
%hook NSLayoutConstraint
|
||||||
|
+ (instancetype)constraintWithItem:(UIView *)view1
|
||||||
|
attribute:(NSLayoutAttribute)attr1
|
||||||
|
relatedBy:(NSLayoutRelation)relation
|
||||||
|
toItem:(UIView *)view2
|
||||||
|
attribute:(NSLayoutAttribute)attr2
|
||||||
|
multiplier:(CGFloat)multiplier
|
||||||
|
constant:(CGFloat)c {
|
||||||
|
if (![view1 isKindOfClass:%c(YTReelPlayerBottomButton)] &&
|
||||||
|
![view1.accessibilityIdentifier isEqualToString:@"com.miro.uyou"])
|
||||||
|
return %orig;
|
||||||
|
if (!view2) {
|
||||||
|
view1.hidden = YES;
|
||||||
|
return [NSLayoutConstraint alloc];
|
||||||
|
}
|
||||||
|
YTReelPlayerBottomButton *uYouButton = (YTReelPlayerBottomButton *)view1;
|
||||||
|
YTReelPlayerBottomButton *topButton = (YTReelPlayerBottomButton *)view2;
|
||||||
|
NSString *uYouButtonTitle =
|
||||||
|
[view2.accessibilityIdentifier isEqualToString:@"com.miro.uyou"]
|
||||||
|
? @"uYou"
|
||||||
|
: @"uYouLocal";
|
||||||
|
uYouButton.accessibilityLabel = uYouButtonTitle;
|
||||||
|
uYouButton.uppercaseTitle = NO;
|
||||||
|
[uYouButton setTitle:uYouButtonTitle forState:UIControlStateNormal];
|
||||||
|
[uYouButton
|
||||||
|
setTitleTypeKind:MSHookIvar<NSInteger>(topButton, "_typeKind")
|
||||||
|
typeVariant:MSHookIvar<NSInteger>(topButton, "_typeVariant")];
|
||||||
|
uYouButton.applyRightSideLayoutImageSize = topButton.applyRightSideLayoutImageSize;
|
||||||
|
uYouButton.buttonImageTitlePadding = topButton.buttonImageTitlePadding;
|
||||||
|
uYouButton.buttonLayoutStyle = topButton.buttonLayoutStyle;
|
||||||
|
uYouButton.sizeWithPaddingAndInsets = topButton.sizeWithPaddingAndInsets;
|
||||||
|
uYouButton.verticalContentPadding = topButton.verticalContentPadding;
|
||||||
|
return %orig;
|
||||||
|
}
|
||||||
|
%end
|
||||||
|
|
||||||
|
// Prevent uYou player bar from showing when not playing downloaded media
|
||||||
|
%hook PlayerManager
|
||||||
|
- (void)pause {
|
||||||
|
if (isnan([self progress]))
|
||||||
|
return;
|
||||||
|
%orig;
|
||||||
|
}
|
||||||
|
%end
|
||||||
|
|
||||||
|
// Hide YouTube Shorts banner in Home page? - @MiRO92 - YTNoShorts: https://github.com/MiRO92/YTNoShorts
|
||||||
%hook YTAsyncCollectionView
|
%hook YTAsyncCollectionView
|
||||||
- (id)cellForItemAtIndexPath:(NSIndexPath *)indexPath {
|
- (id)cellForItemAtIndexPath:(NSIndexPath *)indexPath {
|
||||||
UICollectionViewCell *cell = %orig;
|
UICollectionViewCell *cell = %orig;
|
||||||
@@ -252,12 +361,44 @@ BOOL ytMiniPlayer() {
|
|||||||
}
|
}
|
||||||
return %orig;
|
return %orig;
|
||||||
}
|
}
|
||||||
|
|
||||||
%new
|
%new
|
||||||
- (void)removeShortsAndFeaturesAdsAtIndexPath:(NSIndexPath *)indexPath {
|
- (void)removeShortsAndFeaturesAdsAtIndexPath:(NSIndexPath *)indexPath {
|
||||||
[self deleteItemsAtIndexPaths:[NSArray arrayWithObject:indexPath]];
|
[self deleteItemsAtIndexPaths:[NSArray arrayWithObject:indexPath]];
|
||||||
}
|
}
|
||||||
%end
|
%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; }
|
||||||
@@ -293,6 +434,14 @@ BOOL ytMiniPlayer() {
|
|||||||
}
|
}
|
||||||
%end
|
%end
|
||||||
|
|
||||||
|
%hook APMAEU
|
||||||
|
+ (BOOL)isFAS { return YES; }
|
||||||
|
%end
|
||||||
|
|
||||||
|
%hook GULAppEnvironmentUtil
|
||||||
|
+ (BOOL)isFromAppStore { return YES; }
|
||||||
|
%end
|
||||||
|
|
||||||
%hook NSBundle
|
%hook NSBundle
|
||||||
- (NSString *)bundleIdentifier {
|
- (NSString *)bundleIdentifier {
|
||||||
NSArray *address = [NSThread callStackReturnAddresses];
|
NSArray *address = [NSThread callStackReturnAddresses];
|
||||||
@@ -313,39 +462,83 @@ BOOL ytMiniPlayer() {
|
|||||||
}
|
}
|
||||||
%end
|
%end
|
||||||
|
|
||||||
|
// Fix "You can't sign in to this app because Google can't confirm that it's safe" warning when signing in. by julioverne & PoomSmart
|
||||||
|
// https://gist.github.com/PoomSmart/ef5b172fd4c5371764e027bea2613f93
|
||||||
|
// https://github.com/qnblackcat/uYouPlus/pull/398
|
||||||
|
%hook SSOService
|
||||||
|
+ (id)fetcherWithRequest:(NSMutableURLRequest *)request configuration:(id)configuration {
|
||||||
|
if ([request isKindOfClass:[NSMutableURLRequest class]] && request.HTTPBody) {
|
||||||
|
NSError *error = nil;
|
||||||
|
NSMutableDictionary *body = [NSJSONSerialization JSONObjectWithData:request.HTTPBody options:NSJSONReadingMutableContainers error:&error];
|
||||||
|
if (!error && [body isKindOfClass:[NSMutableDictionary class]]) {
|
||||||
|
[body removeObjectForKey:@"device_challenge_request"];
|
||||||
|
request.HTTPBody = [NSJSONSerialization dataWithJSONObject:body options:kNilOptions error:&error];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return %orig;
|
||||||
|
}
|
||||||
|
%end
|
||||||
|
|
||||||
|
// Fix login for YouTube 17.33.2 and higher
|
||||||
|
%hook SSOKeychainCore
|
||||||
|
+ (NSString *)accessGroup {
|
||||||
|
return accessGroupID();
|
||||||
|
}
|
||||||
|
|
||||||
|
+ (NSString *)sharedAccessGroup {
|
||||||
|
return accessGroupID();
|
||||||
|
}
|
||||||
|
%end
|
||||||
|
|
||||||
|
// Fix App Group Directory by move it to document directory
|
||||||
|
%hook NSFileManager
|
||||||
|
- (NSURL *)containerURLForSecurityApplicationGroupIdentifier:(NSString *)groupIdentifier {
|
||||||
|
if (groupIdentifier != nil) {
|
||||||
|
NSArray *paths = [[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask];
|
||||||
|
NSURL *documentsURL = [paths lastObject];
|
||||||
|
return [documentsURL URLByAppendingPathComponent:@"AppGroup"];
|
||||||
|
}
|
||||||
|
return %orig(groupIdentifier);
|
||||||
|
}
|
||||||
|
%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;
|
return %orig;
|
||||||
}
|
}
|
||||||
@@ -355,16 +548,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;
|
||||||
}
|
}
|
||||||
@@ -373,8 +557,8 @@ 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 {
|
||||||
if (isDarkMode()) {
|
%orig;
|
||||||
%orig;
|
if (isDarkMode()) {
|
||||||
self.backgroundColor = [UIColor clearColor];
|
self.backgroundColor = [UIColor clearColor];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -383,9 +567,9 @@ 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 blackColor];
|
||||||
self.superview.backgroundColor = [UIColor clearColor];
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
%end
|
%end
|
||||||
@@ -395,7 +579,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
|
||||||
@@ -404,26 +588,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;
|
||||||
}
|
}
|
||||||
@@ -433,7 +607,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;
|
||||||
}
|
}
|
||||||
@@ -443,7 +617,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;
|
||||||
}
|
}
|
||||||
@@ -452,7 +626,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;
|
||||||
}
|
}
|
||||||
@@ -461,7 +635,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;
|
||||||
}
|
}
|
||||||
@@ -473,6 +647,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()) {
|
||||||
@@ -486,7 +669,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;
|
||||||
}
|
}
|
||||||
@@ -495,28 +678,27 @@ 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.nextResponder isKindOfClass:%c(ASScrollView)]) { self.backgroundColor = [UIColor clearColor]; }
|
if ([self.nextResponder isKindOfClass:%c(ASScrollView)]) { self.backgroundColor = [UIColor clearColor]; }
|
||||||
if ([self.accessibilityIdentifier isEqualToString:@"eml.cvr"]) { self.backgroundColor = oledColor; }
|
if ([self.accessibilityIdentifier isEqualToString:@"eml.cvr"]) { self.backgroundColor = [UIColor blackColor]; }
|
||||||
if ([self.accessibilityIdentifier isEqualToString:@"rich_header"]) { 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:@"id.ui.cancel.button"]) { self.superview.backgroundColor = oledColor; }
|
if ([self.accessibilityIdentifier isEqualToString:@"id.ui.cancel.button"]) { self.superview.backgroundColor = [UIColor clearColor]; }
|
||||||
if ([self.accessibilityIdentifier isEqualToString:@"id.elements.components.comment_composer"]) { self.backgroundColor = oledColor; }
|
if ([self.accessibilityIdentifier isEqualToString:@"id.elements.components.comment_composer"]) { self.backgroundColor = [UIColor blackColor]; }
|
||||||
if ([self.accessibilityIdentifier isEqualToString:@"id.elements.components.video_list_entry"]) { self.backgroundColor = oledColor; }
|
if ([self.accessibilityIdentifier isEqualToString:@"id.elements.components.video_list_entry"]) { self.backgroundColor = [UIColor blackColor]; }
|
||||||
if ([self.accessibilityIdentifier isEqualToString:@"id.elements.components.filter_chip_bar"]) { self.backgroundColor = oledColor; }
|
if ([self.accessibilityIdentifier isEqualToString:@"id.comment.guidelines_text"]) { self.superview.backgroundColor = [UIColor blackColor]; }
|
||||||
if ([self.accessibilityIdentifier isEqualToString:@"id.comment.guidelines_text"]) { self.superview.backgroundColor = oledColor; }
|
if ([self.accessibilityIdentifier isEqualToString:@"id.comment.channel_guidelines_bottom_sheet_container"]) { self.backgroundColor = [UIColor blackColor]; }
|
||||||
if ([self.accessibilityIdentifier isEqualToString:@"id.comment.channel_guidelines_bottom_sheet_container"]) { self.backgroundColor = oledColor; }
|
if ([self.accessibilityIdentifier isEqualToString:@"id.comment.channel_guidelines_entry_banner_container"]) { self.backgroundColor = [UIColor blackColor]; }
|
||||||
if ([self.accessibilityIdentifier isEqualToString:@"id.comment.channel_guidelines_entry_banner_container"]) { self.superview.backgroundColor = oledColor; }
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
%end
|
%end
|
||||||
@@ -525,25 +707,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
|
||||||
@@ -554,28 +738,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
|
||||||
|
|
||||||
@@ -683,4 +867,4 @@ static void replaceTab(YTIGuideResponse *response) {
|
|||||||
if (@available(iOS 16, *)) {
|
if (@available(iOS 16, *)) {
|
||||||
%init(iOS16);
|
%init(iOS16);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user