Compare commits

..
Author SHA1 Message Date
Nguyễn Đạt bcac2c1931 Merge pull request #592 from qnblackcat/3272866751
[Auto-generated] Submodule Updates 3272866751
2022-10-19 21:07:28 +07:00
github-actions e69232105d updating submodules 2022-10-19 14:01:01 +00:00
qnblackcat bcfe9d2891 update strings 2022-10-19 18:00:44 +07:00
Nguyễn Đạt 3f05614fa7 Merge pull request #591 from chimaha/main
Update Japanese localization
2022-10-19 17:32:51 +07:00
chimaha b1554de1a3 Update Japanese localization 2022-10-19 17:39:36 +09:00
Nguyễn Đạt 27e434e2e1 Merge pull request #590 from Thunderz2016/main
Update Simplified Chinese translation
2022-10-19 15:12:08 +07:00
Thunderz2016 ac8983c935 Update Simplified Chinese translation
Reverted a word change.
2022-10-19 13:26:28 +08:00
Thunderz2016 11ea8025b8 Update Simplified Chinese translation
Translated VERSION and VERSION_CHECK.
2022-10-19 13:17:33 +08:00
Nguyễn Đạt 38af87bd72 Merge pull request #588 from VictorxD70/main
Update Portuguese localization
2022-10-19 11:36:08 +07:00
Nguyễn Đạt 5973744c44 Merge pull request #589 from qnblackcat/3272866751
[Auto-generated] Submodule Updates 3272866751
2022-10-19 11:33:52 +07:00
github-actions 44ee4323ca updating submodules 2022-10-19 04:33:23 +00:00
Victor Alves cee7a1a8ca Update Portuguese localization 2022-10-18 13:24:42 -03:00
Nguyễn Đạt 815b1822ed Merge pull request #585 from qnblackcat/3272866751
[Auto-generated] Submodule Updates 3272866751
2022-10-18 22:51:28 +07:00
Nguyễn Đạt d29fafdc63 Merge pull request #584 from moh-ter/patch-1
update Ar localization
2022-10-18 22:51:07 +07:00
github-actions 7b8577c339 updating submodules 2022-10-18 13:56:59 +00:00
Nguyễn Đạt 05b525f40b Merge pull request #583 from qnblackcat/3272866751
[Auto-generated] Submodule Updates 3272866751
2022-10-18 19:16:29 +07:00
moh-ter 70af294bc9 update Ar localization 2022-10-18 14:22:12 +03:00
github-actions d2e11dad1d updating submodules 2022-10-18 11:08:32 +00:00
qnblackcat edd9ca4436 fix compiling 2022-10-17 17:25:12 +07:00
qnblackcat 5cd00bf13c update submodules 2022-10-17 16:55:06 +07:00
Nguyễn Đạt 3569959058 Merge pull request #575 from Yswag/main
update zh_tw localization
2022-10-17 16:06:04 +07:00
Yswag 7c12f67c03 update strings 2022-10-17 09:08:46 +08:00
qnblackcat 5a7189fb95 add YTSpeed 2022-10-17 02:00:22 +07:00
qnblackcat 18ce6e99c5 update Settings/xm 2022-10-17 01:59:41 +07:00
qnblackcat aa46f2da01 YTABConfig and more 2022-10-17 01:58:54 +07:00
qnblackcat c7539edbe2 update strings 2022-10-17 01:58:29 +07:00
qnblackcat 235cbea5eb update Header.h 2022-10-17 01:58:13 +07:00
qnblackcat 272163344f update submodules 2022-10-17 01:57:54 +07:00
qnblackcat 8ed1dab75f remove YTSpeed & add YTABConfig submodule 2022-10-17 01:57:38 +07:00
Nguyễn Đạt c32f00cca2 v17.40.5-2.1, again 2022-10-16 01:05:53 +07:00
qnblackcat a88833a5e4 I'm drunk and it's 1 AM 2022-10-16 01:00:08 +07:00
qnblackcat 631068acfa update submodules 2022-10-16 00:59:40 +07:00
Nguyễn Đạt 5b3580a663 Merge pull request #569 from ewweewwe/main
I'm drunk :/
2022-10-16 00:48:20 +07:00
Nguyễn Đạt 8295fa4842 Update buildapp.yml 2022-10-15 00:52:52 +07:00
Nguyễn Đạt 2f4ea4130c Update buildapp.yml 2022-10-15 00:34:35 +07:00
Nguyễn Đạt e2b31644af Update buildapp.yml 2022-10-15 00:23:25 +07:00
Nguyễn Đạt f4a9aeabb0 Update buildapp.yml 2022-10-14 23:52:24 +07:00
Nguyễn Đạt 398660cd98 Update Makefile 2022-10-14 22:52:22 +07:00
Nguyễn Đạt 3f6f62a3e4 Update Makefile 2022-10-14 22:47:04 +07:00
Nguyễn Đạt 0db40410d8 Update Makefile 2022-10-14 22:37:11 +07:00
Nguyễn Đạt 82c7b1367b Update buildapp.yml 2022-10-14 22:36:07 +07:00
Nguyễn Đạt c04ff7e6d5 Update buildapp.yml 2022-10-14 22:24:57 +07:00
Nguyễn Đạt 0a0f655db5 Update buildapp.yml 2022-10-14 19:07:17 +07:00
PoomSmart 22b45d0627 Updated YouPiP and YTUHD 2022-10-13 10:58:12 +07:00
Nguyễn Đạt 221cc0ee40 Merge pull request #551 from VictorxD70/main
Update Portuguese localization
2022-10-12 20:07:49 +07:00
Victor Alves 54ca35f15e Update Portuguese localization 2022-10-11 13:21:53 -03:00
Nguyễn Đạt 26f6d77584 Merge pull request #539 from chimaha/main
Fix Japanese translation
2022-10-10 15:36:46 +07:00
chimaha 9964988bbb Fix Japanese 2022-10-09 23:36:13 +09:00
Nguyễn Đạt 6526b9f470 Merge pull request #536 from fifi2202/main
Polish translation
2022-10-09 08:03:10 +07:00
Nguyễn Đạt 9eb8ca1950 Update Localizable.strings 2022-10-09 08:03:00 +07:00
fifi2202 cd6a32a778 Update Localizable.strings 2022-10-08 20:09:32 +00:00
fifi2202 a85b50d1ff Create Localizable.strings 2022-10-08 16:58:29 +00:00
Nguyễn Đạt ad0c100c41 Merge pull request #535 from chimaha/main
Update Japanese translation
2022-10-08 23:26:16 +07:00
chimaha 28b0e66841 Update Japanese translation 2022-10-08 17:07:39 +09:00
chimaha 0b9ac11842 Update Japanese translation 2022-10-08 16:59:49 +09:00
PoomSmart 7b4af1d938 Fixed localization in YouPiP 2022-10-07 20:37:15 +07:00
qnblackcat ab09ac27f1 v17.39.5-2.1 2022-10-07 13:20:03 +07:00
Nguyễn Đạt b52aaac2d1 Merge pull request #529 from therealFoxster/main
Update DontEatMyContent (1.0.0 -> 1.0.2)
2022-10-07 10:58:26 +07:00
PoomSmart 7bafd0f5e1 Updated YouPiP, YTUHD, Return YouTube Dislikes submodules 2022-10-07 09:08:30 +07:00
Foxster c39f2b5a69 Update DontEatMyContent (1.0.0 -> 1.0.2)
Add -(void)resetForVideoWithAspectRatio:(double) as fallback in case -(void)singleVideo:(id)aspectRatioDidChange:(CGFloat) never gets called
2022-10-06 14:29:19 -07:00
Nguyễn Đạt f66d9a4de1 Merge pull request #525 from Thunderz2016/main
Add new strings for Simplified Chinese translation
2022-10-06 13:00:40 +07:00
Nguyễn Đạt 04939cde2c Merge pull request #526 from koevoet1221/main
Dutch translations
2022-10-06 13:00:06 +07:00
Nguyễn Đạt a0e453da45 clean up 2022-10-06 12:58:08 +07:00
koevoet1221 6e8a99e733 Delete temp 2022-10-05 21:45:08 +02:00
koevoet1221 383a644864 Update Localizable.strings 2022-10-05 21:40:06 +02:00
koevoet1221 4e71210618 Add files via upload
Dutch translations
2022-10-05 21:38:54 +02:00
koevoet1221 6f26599f2a Create temp
Don’t know how else i can make this folder lol
2022-10-05 21:36:48 +02:00
koevoet1221 d0abd34fe5 Delete nl.lproj 2022-10-05 21:36:39 +02:00
koevoet1221 08437ff883 dutch translations 2022-10-05 21:34:07 +02:00
koevoet1221 252cb10e30 Delete nl.lproy 2022-10-05 21:12:51 +02:00
koevoet1221 5692f87208 Create nl.lproy 2022-10-05 21:12:35 +02:00
Thunderz2016 333b821eca Add new strings to Simplified Chinese translation
Fixed minor wording issue.
2022-10-06 01:12:52 +08:00
Thunderz2016 8e59b59faa Add new strings for Simplified Chinese translation
Translated DontEatMyContent-related strings and used fullwidth parentheses to be grammatically consistent.
2022-10-06 00:34:19 +08:00
Nguyễn Đạt ddcd37be67 Merge pull request #523 from ErSpieltHD/patch-4
fixed duplicates/wrong chars
2022-10-05 20:48:09 +07:00
ErSpieltHD a1f03be5b6 fixed duplicates/wrong chars 2022-10-05 15:28:06 +02:00
Nguyễn Đạt fdea5e55e4 Merge pull request #519 from Koles13/main
Hungarian language translate
2022-10-04 23:27:20 +07:00
Nguyễn Đạt 6652068c9b Merge pull request #518 from ludovi-com/main
Added Italian Language
2022-10-04 23:24:52 +07:00
Laszlo Jozsef Koles 125e8948c7 hu.lproj_repository 2022-10-04 17:24:24 +02:00
Laszlo Jozsef Koles 3d79dfa8fd Rename hu.Iproj to Localizable.strings 2022-10-04 16:59:18 +02:00
Laszlo Jozsef Koles da75038a9c Create hu.Iproj 2022-10-04 16:48:36 +02:00
Ludovico Manto 598c62605b Added Italian Language 2022-10-04 15:01:38 +02:00
Nguyễn Đạt e88eeed035 Merge pull request #515 from 5jd/patch-1
Update French translation
2022-10-04 11:31:05 +07:00
5jd ea61bb0d65 Update Localizable.strings 2022-10-03 23:25:20 +02:00
5jd 6ea9f1b4a7 Update Localizable.strings 2022-10-03 23:22:46 +02:00
5jd e911ee4e4d Remove a space 2022-10-03 21:14:57 +02:00
5jd 314b2aaaf9 Forgot Dynamic Island in a place 2022-10-03 19:16:33 +02:00
5jd 971eff33ff Update French translation
Fixes Spanish strings and simplify YTCastConfirm strings!
2022-10-03 19:11:20 +02:00
qnblackcat 48228e14f0 v17.39.4-2.1 2022-10-03 22:20:32 +07:00
qnblackcat c85d928952 change the default value of some uYou's options 2022-10-03 17:20:30 +07:00
qnblackcat 9ce39051ef update submodules 2022-10-03 09:36:40 +07:00
qnblackcat cb2c7ff951 update strings 2022-10-03 09:36:26 +07:00
Nguyễn Đạt 223a0b094b Merge pull request #512 from moh-ter/main
Update Arabic Localization
2022-10-03 09:12:49 +07:00
moh-ter 36a1f12671 Update Localizable.strings 2022-10-03 01:06:40 +03:00
PoomSmart 6b799b5c01 Copy YTUHD and RYD bundles to the sideloaded app 2022-10-02 09:03:20 +07:00
Nguyễn Đạt fc392e1742 Merge pull request #509 from darkbrow/main
Update Localizable.strings
2022-10-01 23:05:17 +07:00
darkbrow 87813f8acb Update Localizable.strings 2022-10-02 00:59:53 +09:00
Nguyễn Đạt 5f659617e9 Merge pull request #508 from darkbrow/main
Update Korean localization
2022-10-01 22:27:32 +07:00
Jinbong 645036d28e Update Korean localization 2022-10-02 00:04:50 +09:00
Nguyễn Đạt f00e66bded I'm losing my sanity... 2022-09-29 17:40:55 +07:00
qnblackcat f91287b737 update strings 2022-09-28 11:05:31 +07:00
Nguyễn Đạt 58abfbaffd Merge pull request #493 from arichorn/qnblackcat-pull
Add DontEatMyContent by @therealFoxster
2022-09-28 10:59:23 +07:00
Nguyễn Đạt dad5377435 Update Header.h 2022-09-28 10:58:06 +07:00
Nguyễn Đạt a902d90449 clean up 2022-09-28 10:56:55 +07:00
Nguyễn Đạt 2657f8ca7c clean up 2022-09-28 10:52:39 +07:00
qnblackcat dcb41ab74d update submodules 2022-09-28 10:35:46 +07:00
qnblackcat 0147865c53 update template 2022-09-28 10:35:32 +07:00
Aric b56461a439 Merge branch 'qnblackcat:main' into qnblackcat-pull 2022-09-25 10:36:11 -05:00
Aric 9d27a3b9c0 Fixed Duplicate Interface
My apologies, I mistakenly added a duplicate piece of @interface code that would prevent uYouPlus to build but should work now!
2022-09-25 09:03:52 -05:00
qnblackcat ea309fd094 update AltStore link for v17.37.3-2.1 2022-09-25 17:44:49 +07:00
Aric 1bed1db404 Localization Support
English Localization.
2022-09-24 19:49:59 -05:00
Aric c864966f11 DontEatMyContent - @therealFoxster
Prevent the notch/Dynamic Island from munching on 2:1 video content in YouTube
2022-09-24 19:40:50 -05:00
Nguyễn Đạt 409537eba3 Merge pull request #490 from ErSpieltHD/patch-3
Added new options
2022-09-24 07:41:07 +07:00
ErSpieltHD 6604f5e497 Added new options 2022-09-23 20:30:35 +02:00
qnblackcat 0b64741d50 the Github action should not remove binary's entitlements... 2022-09-23 22:34:30 +07:00
qnblackcat 34a66bec01 update submodules 2022-09-23 22:29:39 +07:00
Nguyễn Đạt dcb1a2aba1 Merge pull request #487 from VictorxD70/main
Update Portuguese localization
2022-09-23 10:37:53 +07:00
Victor Alves db1318b576 Update Portuguese localization 2022-09-22 18:17:13 -03:00
qnblackcat ad2c426fe6 typo :/ 2022-09-20 18:25:17 +07:00
qnblackcat e6835b9e33 fix Google sign in, again. Thanks to @AhmedBafkir and @kkirby - https://gist.github.com/AhmedBafkir/0c16b806b3fb233995aa01b93da44f93 2022-09-20 18:16:35 +07:00
qnblackcat 5741ae5584 better explanation 2022-09-20 18:14:56 +07:00
qnblackcat aa338eab73 disable device_challenge_request hack? 2022-09-18 17:00:46 +07:00
qnblackcat 799a98951a v17.36.4-2.1 2022-09-17 10:20:33 +07:00
qnblackcat 8b95b82492 udpate uYouPlus.xm 2022-09-17 10:20:24 +07:00
qnblackcat 4a5f1dae69 update submodules 2022-09-17 10:20:17 +07:00
Nguyễn Đạt e896843357 Merge pull request #451 from VictorxD70/main
Update Portuguese strings
2022-09-14 09:54:29 +07:00
Nguyễn Đạt 4c5a201831 Merge pull request #452 from darkbrow/main
Update Korean localization
2022-09-14 09:54:18 +07:00
Jinbong cce821741d Update Korean localization 2022-09-14 06:33:32 +09:00
Victor Alves c4fd520a3d Update Portuguese strings 2022-09-13 03:51:28 -03:00
Nguyễn Đạt 80c36940f6 v17.36.3-2.1 2022-09-13 13:10:50 +07:00
Nguyễn Đạt 2d17a16aad Merge pull request #450 from moh-ter/main
Update Arabic localization to include the new strings
2022-09-13 07:59:12 +07:00
moh-ter 72a6f1caac Update Localizable.strings 2022-09-12 21:44:36 +03:00
qnblackcat 975cb6005c update submodules 2022-09-10 19:33:15 +07:00
qnblackcat 6180fe7512 update Settings.xm 2022-09-10 19:32:35 +07:00
qnblackcat aed82d4f12 update JA strings 2022-09-10 19:32:09 +07:00
Nguyễn Đạt 44a128d16f Merge pull request #444 from Thunderz2016/main
Update zh_cn translation
2022-09-10 18:04:21 +07:00
Thunderz2016 b1ea29dc6c Add translations for new strings
Translated REPLACE_PREVIOUS_NEXT_BUTTON and FIX_GOOGLE_SIGNIN, corrected quotation marks, and clarified translation for CASTING.
2022-09-10 16:16:31 +08:00
Nguyễn Đạt 85ca0ea633 Merge pull request #436 from qnblackcat/crash-asdisplayview
Fixed app crash on video view (Return YouTube Dislikes)
2022-09-08 16:33:46 +07:00
qnblackcat 377ebec525 v17.35.3-2.1 2022-09-08 16:23:54 +07:00
qnblackcat 35b6374d8c update submodules 2022-09-08 15:48:48 +07:00
PoomSmart 99299cc5bf Switched to main 2022-09-08 12:41:17 +07:00
PoomSmart bb5c02272f Wrapped up 2022-09-08 12:26:12 +07:00
PoomSmart 7a128ab908 Test fixing app crash on video view 2022-09-07 22:47:29 +07:00
qnblackcat 2191478712 an option to replace Previous & Next button with Fast forward & Rewind button 2022-09-07 21:30:15 +07:00
qnblackcat 39849cac51 update strings 2022-09-07 21:29:12 +07:00
qnblackcat 1f5ad62544 for TrollStore user only: add an option to fix Google Sign in 2022-09-06 08:44:11 +07:00
qnblackcat c04f0b7e43 update strings 2022-09-06 08:43:34 +07:00
Nguyễn Đạt 380ee96a71 Merge pull request #433 from clc0321/main
add KILL_APP to zh_tw
2022-09-05 12:38:55 +07:00
clc0321 15124cf1c9 add KILL_APP to zh_tw 2022-09-05 12:36:46 +08:00
Nguyễn Đạt 9bd1be5024 Merge pull request #422 from Sh1hu/patch-2
Update Localizable.strings
2022-09-03 09:30:25 +07:00
Sh1hu eb0a64bd69 Update Localizable.strings 2022-09-02 17:47:35 +09:00
level3tjg 02bfe1ada3 Fix shorts like button showing more menu 2022-09-01 11:02:26 -04:00
qnblackcat b62746061d v17.34.3-2.1 2022-09-01 20:20:40 +07:00
qnblackcat e2cd37a8b6 formating, remove old code, update IAmYouTube 2022-09-01 11:40:09 +07:00
qnblackcat e5b9ff21cf update submodules 2022-09-01 09:23:13 +07:00
level3tjg 2e7fd253a8 just found out isnan() exists 2022-08-30 10:44:48 -04:00
level3tjg 3aa7c57d82 Fix uYou player bar bug 2022-08-28 02:02:18 -04:00
level3tjg 11ddcd421d Workaround for iOS 15 uYou settings bug (#10) 2022-08-27 02:49:20 -04:00
level3tjg 6418f3daeb Make sure we're modifying uYou shorts button 2022-08-27 02:12:18 -04:00
level3tjg 4b283110a6 Various fixes for shorts (#170, #253, #263) 2022-08-26 18:41:33 -04:00
qnblackcat 2615436031 v17.33.2-2.1 2022-08-26 13:20:22 +07:00
qnblackcat 81088fadd3 update Makefile 2022-08-26 13:20:13 +07:00
BandarHelal 5adaec2c93 Update uYouPlus.xm 2022-08-25 19:39:25 +03:00
BandarHelal 7ac253963e Fix Login issue 2022-08-25 18:31:28 +03:00
Nguyễn Đạt 2d2b469f1f Merge pull request #407 from darkbrow/main
Update Korean localization
2022-08-25 08:20:04 +07:00
Jinbong 9e98ad9482 Update Korean localization 2022-08-25 03:17:53 +09:00
BandarHelal 1d5de3cd4c Update uYouPlus.xm
Improve Julioverne's code by specifying YouTube SSOService because "device_challenge_request" can be used in other thinks with the App like Apple Push Service.
2022-08-21 17:03:47 +03:00
Nguyễn Đạt 1266cb5a38 More specifically... 2022-08-21 11:00:59 +07:00
Nguyễn Đạt 4fee21517e Merge pull request #398 from julioverne/main
Completely fix Google Sign-in by julioverne (#319)
2022-08-21 02:23:44 +07:00
julioverne 2ff0f3fb56 Fix Login
Fixes Login Account from Insecure App
2022-08-20 15:28:51 -03:00
qnblackcat 329fb1681a Skips content warning before playing *some videos - @PoomSmart 2022-08-14 02:02:23 +07:00
Nguyễn Đạt c78e5b9fd9 Merge pull request #374 from darkbrow/main
Add Korean localization
2022-08-13 12:59:43 +07:00
Jinbong 7b9fd7dcfb Add Korean localization 2022-08-13 14:02:24 +09:00
Nguyễn Đạt 922ab4e9b7 Merge pull request #373 from Sh1hu/patch-1
Update Japanese localization
2022-08-13 10:20:34 +07:00
Sh1hu c8a4acfff0 Update Japanese localization
The correct Japanese translation of the "Explore" tab is "探索".
Other translation optimizations were made.
2022-08-13 09:56:20 +09:00
35 changed files with 1125 additions and 228 deletions
+7 -5
View File
@@ -1,6 +1,6 @@
--- ---
name: Bug name: Bug
about: Create a report to help us improve about: Make sure you complete the template. Otherwise, it will be closed without further explanation!
title: "[Bug]" title: "[Bug]"
labels: bug labels: bug
assignees: '' assignees: ''
@@ -14,8 +14,8 @@ _Make sure you complete the template. Otherwise, it will be closed without furth
### Device info ### Device info
- iOS/iPadOS version: - iOS/iPadOS version:
- Device model: - Device model:
- Sideload tool (Ex: AltStore, Sideloadly...) - Sideload tool (Ex: AltStore, Sideloadly, TrollStore,...)
- Version of uYouPlus: - The specific version of uYouPlus: _**latest** or **newest** is NOT a version number!!_
### Describe the bug ### Describe the bug
@@ -23,9 +23,11 @@ _Make sure you complete the template. Otherwise, it will be closed without furth
### How to reproduce the bug ### How to reproduce the bug
_(Please attach videos or screenshots if possible)_ _(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...)_
### Are you using the newest version of uYouPlus? If not, why?
_(Developers spend time and effort to fix bugs & add improvements with every release. Why don't you update to the latest version before reporting about an issue???)_
### Does the issue happen with the official YouTube from AppStore? ### Does the issue happen with the official YouTube from AppStore?
_(Well, YouTube itself is buggy sometimes...)_ _(Well, YouTube itself is buggy sometimes...)_
+9 -21
View File
@@ -9,7 +9,7 @@ on:
uyou_version: uyou_version:
description: "The version of uYou" description: "The version of uYou"
default: "2.1" default: "2.1"
required: false required: true
type: string type: string
decrypted_youtube_url: decrypted_youtube_url:
description: "The direct URL to the decrypted YouTube ipa" description: "The direct URL to the decrypted YouTube ipa"
@@ -66,7 +66,7 @@ jobs:
- name: Setup Theos Jailed - name: Setup Theos Jailed
uses: actions/checkout@v3 uses: actions/checkout@v3
with: with:
repository: kabiroberai/theos-jailed repository: qnblackcat/theos-jailed
ref: master ref: master
path: theos-jailed path: theos-jailed
submodules: recursive submodules: recursive
@@ -97,9 +97,10 @@ jobs:
run: | run: |
cd ${{ github.workspace }}/main cd ${{ github.workspace }}/main
(cd ${{ github.workspace }}/main/Tweaks/YouPiP && sed -i '' "14s/$/ AVFoundation UIKit/" Makefile) (cd ${{ github.workspace }}/main/Tweaks/YouPiP && sed -i '' "14s/$/ AVFoundation UIKit/" Makefile)
(cd ${{ github.workspace }}/main/Tweaks/YTABConfig && sed -i '' "12s#.*#YTABConfig_FRAMEWORKS = UIKit#g" 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 "package=$(ls -t packages | head -n1)" >>$GITHUB_OUTPUT
env: env:
THEOS: ${{ github.workspace }}/theos THEOS: ${{ github.workspace }}/theos
UYOU_VERSION: ${{ inputs.uyou_version }} UYOU_VERSION: ${{ inputs.uyou_version }}
@@ -116,28 +117,15 @@ jobs:
if-no-files-found: error if-no-files-found: error
- name: Create Release - name: Create Release
if: ${{ inputs.create_release }}
id: create_release id: create_release
uses: actions/create-release@v1 uses: softprops/action-gh-release@v0.1.14
env: env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
UYOU_VERSION: ${{ inputs.uyou_version }} UYOU_VERSION: ${{ inputs.uyou_version }}
YOUTUBE_VERSION: ${{ inputs.youtube_version }} YOUTUBE_VERSION: ${{ inputs.youtube_version }}
DRAFT: ${{ inputs.create_release }}
with: with:
tag_name: v${{ env.YOUTUBE_VERSION }}-${{ env.UYOU_VERSION }}-(${{ github.run_number }}) tag_name: v${{ env.YOUTUBE_VERSION }}-${{ env.UYOU_VERSION }}-(${{ github.run_number }})
release_name: v${{ env.YOUTUBE_VERSION }}-${{ env.UYOU_VERSION }}-(${{ github.run_number }}) name: v${{ env.YOUTUBE_VERSION }}-${{ env.UYOU_VERSION }}-(${{ github.run_number }})
draft: true files: ./main/packages/*.ipa
prerelease: false draft: ${{ env.DRAFT }}
- name: Upload Release Asset
if: ${{ inputs.create_release }}
uses: actions/upload-release-asset@v1
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
UYOU_VERSION: ${{ inputs.uyou_version }}
YOUTUBE_VERSION: ${{ inputs.youtube_version }}
with:
upload_url: ${{ steps.create_release.outputs.upload_url }}
asset_path: ${{ github.workspace }}/main/packages/${{ steps.build_package.outputs.package }}
asset_name: uYouPlus_${{ env.YOUTUBE_VERSION }}_${{ env.UYOU_VERSION }}.ipa
asset_content_type: application/vnd.debian.binary-package
+4 -4
View File
@@ -26,11 +26,11 @@
path = Tweaks/PSHeader path = Tweaks/PSHeader
url = https://github.com/PoomSmart/PSHeader.git url = https://github.com/PoomSmart/PSHeader.git
branch = master branch = master
[submodule "Tweaks/YTSpeed"]
path = Tweaks/YTSpeed
url = https://github.com/qnblackcat/YTSpeed.git
branch = main
[submodule "Extensions"] [submodule "Extensions"]
path = Extensions path = Extensions
url = https://github.com/CokePokes/YoutubeExtensions.git url = https://github.com/CokePokes/YoutubeExtensions.git
branch = main branch = main
[submodule "Tweaks/YTABConfig"]
path = Tweaks/YTABConfig
url = https://github.com/PoomSmart/YTABConfig.git
branch = main
+68 -1
View File
@@ -3,12 +3,19 @@
#define LOC(x) [tweakBundle localizedStringForKey:x value:nil table:nil] #define LOC(x) [tweakBundle localizedStringForKey:x value:nil table:nil]
#define YT_BUNDLE_ID @"com.google.ios.youtube" #define YT_BUNDLE_ID @"com.google.ios.youtube"
#define YT_NAME @"YouTube" #define YT_NAME @"YouTube"
#define UNSUPPORTED_DEVICES @[@"iPhone14,3", @"iPhone14,6", @"iPhone14,8"] // DontEatMycontent
#define THRESHOLD 1.99 // DontEatMycontent
#define DEFAULT_RATE 2.0f // YTSpeed
// IAmYouTube // IAmYouTube
@interface SSOConfiguration : NSObject @interface SSOConfiguration : NSObject
@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
@@ -26,6 +33,59 @@
@interface FRPSliderCell : UITableViewCell @interface FRPSliderCell : UITableViewCell
@end @end
@interface boolSettingsVC : UIViewController
@end
@interface PlayerManager : NSObject
- (float)progress;
@end
// DontEatMyContent
NSString* deviceName();
BOOL isDeviceSupported();
void activate();
void deactivate();
void center();
@interface YTPlayerView : UIView
- (BOOL)zoomToFill;
- (id)renderingView;
- (id)playerView;
@end
@interface MLHAMSBDLSampleBufferRenderingView : UIView
@end
@interface YTMainAppVideoPlayerOverlayViewController : UIViewController
- (BOOL)isFullscreen;
- (id)videoPlayerOverlayView;
- (id)activeVideoPlayerOverlay;
@end
// YTSpeed
@interface YTVarispeedSwitchControllerOption : NSObject
- (id)initWithTitle:(id)title rate:(float)rate;
@end
@interface MLHAMQueuePlayer : NSObject
@property id playerEventCenter;
@property id delegate;
- (void)setRate:(float)rate;
- (void)internalSetRate;
@end
@interface MLPlayerStickySettings : NSObject
- (void)setRate:(float)rate;
@end
@interface MLPlayerEventCenter : NSObject
- (void)broadcastRateChange:(float)rate;
@end
@interface HAMPlayerInternal : NSObject
- (void)setRate:(float)rate;
@end
// iOS16 fix // iOS16 fix
@interface OBPrivacyLinkButton : UIButton @interface OBPrivacyLinkButton : UIButton
- (instancetype)initWithCaption:(NSString *)caption - (instancetype)initWithCaption:(NSString *)caption
@@ -52,6 +112,13 @@
// YTAutoFullScreen // YTAutoFullScreen
@interface YTPlayerViewController (YTAFS) @interface YTPlayerViewController (YTAFS)
- (void)autoFullscreen; - (void)autoFullscreen;
// DontEatMycontent
- (id)activeVideoPlayerOverlay;
- (id)playerView;
// YTSpeed
@property id activeVideo;
@property float playbackRate;
- (void)singleVideo:(id)video playbackRateDidChange:(float)rate;
@end @end
// OLED Darkmode // OLED Darkmode
@@ -83,4 +150,4 @@
@end @end
@interface UIPredictionViewController : UIViewController @interface UIPredictionViewController : UIViewController
@end @end
+8 -4
View File
@@ -5,26 +5,30 @@ ARCHS = arm64
MODULES = jailed MODULES = jailed
FINALPACKAGE = 1 FINALPACKAGE = 1
CODESIGN_IPA = 0 CODESIGN_IPA = 0
PACKAGE_VERSION = 17.40.5_2.1
TWEAK_NAME = uYouPlus TWEAK_NAME = uYouPlus
DISPLAY_NAME = YouTube DISPLAY_NAME = YouTube
BUNDLE_ID = com.google.ios.youtube 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/YTABConfig.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 uYouPlus_CFLAGS = -fobjc-arc -DTWEAK_VERSION=$(PACKAGE_VERSION)
include $(THEOS)/makefiles/common.mk include $(THEOS)/makefiles/common.mk
include $(THEOS_MAKE_PATH)/tweak.mk include $(THEOS_MAKE_PATH)/tweak.mk
SUBPROJECTS += Tweaks/Alderis Tweaks/iSponsorBlock Tweaks/YTUHD Tweaks/YouPiP Tweaks/Return-YouTube-Dislikes Tweaks/YTSpeed SUBPROJECTS += Tweaks/Alderis Tweaks/iSponsorBlock Tweaks/YTUHD Tweaks/YouPiP Tweaks/Return-YouTube-Dislikes Tweaks/YTABConfig
include $(THEOS_MAKE_PATH)/aggregate.mk include $(THEOS_MAKE_PATH)/aggregate.mk
before-package:: before-package::
@echo -e "==> \033[1mMoving tweak's bundle to Resources/...\033[0m" @echo -e "==> \033[1mMoving tweak's bundle to Resources/...\033[0m"
@mkdir -p Resources/Frameworks/Alderis.framework && find .theos/obj/install/Library/Frameworks/Alderis.framework -maxdepth 1 -type f -exec cp {} Resources/Frameworks/Alderis.framework/ \; @mkdir -p Resources/Frameworks/Alderis.framework && find .theos/obj/install/Library/Frameworks/Alderis.framework -maxdepth 1 -type f -exec cp {} Resources/Frameworks/Alderis.framework/ \;
@cp -R Tweaks/YouPiP/layout/Library/Application\ Support/YouPiP.bundle Resources/ @cp -R Tweaks/YouPiP/layout/Library/Application\ Support/YouPiP.bundle Resources/
@cp -R Tweaks/YTUHD/layout/Library/Application\ Support/YTUHD.bundle Resources/
@cp -R Tweaks/Return-YouTube-Dislikes/layout/Library/Application\ Support/RYD.bundle Resources/
@cp -R Tweaks/YTABConfig/layout/Library/Application\ Support/YTABC.bundle Resources/
@cp -R Tweaks/iSponsorBlock/layout/Library/Application\ Support/iSponsorBlock.bundle Resources/ @cp -R Tweaks/iSponsorBlock/layout/Library/Application\ Support/iSponsorBlock.bundle Resources/
@cp -R Tweaks/uYou/Library/Application\ Support/uYouBundle.bundle Resources/ @cp -R Tweaks/uYou/Library/Application\ Support/uYouBundle.bundle Resources/
@cp -R lang/uYouPlus.bundle Resources/ @cp -R lang/uYouPlus.bundle Resources/
+26 -38
View File
@@ -1,4 +1,4 @@
![cydia-1900000830-iphone-0-1628105716 3](https://user-images.githubusercontent.com/52943116/135612614-3d3138cb-2a3d-4ed1-9244-905bab8f5c9f.PNG) ![IMG_2196](https://user-images.githubusercontent.com/52943116/189822859-8a0952db-9264-4b5b-9cbe-d0a87b2db5a0.PNG)
# Table of Contents # Table of Contents
@@ -25,8 +25,12 @@
- [BandarHL](https://twitter.com/bandarhl) for a bunch of improvements. - [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/)
- [therealFoxster](https://github.com/therealFoxster) for [DontEatMyContent](https://github.com/therealFoxster/DontEatMyContent).
- [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/).
- [theos team](https://github.com/theos/theos) for theos & theos-jailed. - [theos team](https://github.com/theos/theos) for theos & theos-jailed.
@@ -62,6 +66,10 @@
12. **YTMiniplayerEnabler**: enable Miniplayer for all YouTube videos. 12. **YTMiniplayerEnabler**: enable Miniplayer for all YouTube videos.
13. **DontEatMyContent**: Prevent the notch/Dynamic Island from munching on 2:1 video content in YouTube.
14. **YTShortsProgress**: Always enable progress bar and scrubbing in YouTube Shorts (iPhone only).
</details> </details>
# Known issues # Known issues
@@ -72,41 +80,43 @@
# Download # Download
- **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). - **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 AltStore repo: https://qnblackcat.github.io/AltStore/ - My official AltStore repo: https://qnblackcat.github.io/AltStore/
- [Open in AltStore (v17.31.4-2.1)](https://tinyurl.com/2p99amjz) - It will take a while to install because AltStore needs to download the IPA. - [Open in AltStore (v17.40.5-2.1)](https://tinyurl.com/mr6r7z7r) - It will take a while to install because AltStore needs to download the IPA.
- Version info: _(last update: Aug 12)_ - Version info: _(last update: Oct 16)_
<details> <details>
<summary>Expand</summary> <summary>Expand</summary>
| **Tweaks/App** | **Developer** | **Version** | **Open source** | | **Tweaks/App** | **Developer** | **Version** | **Open source** |
| - | - | :-: | :-: | | - | - | :-: | :-: |
| **YouTube** | Google Inc | 17.31.4 | ✖︎ | | **YouTube** | Google Inc | 17.40.5 | ✖︎ |
| [uYou](https://github.com/MiRO92/uYou-for-YouTube) | [MiRO92](https://twitter.com/miro92) | 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) | [CokePokes](https://github.com/CokePokes) | 1.2 | ✖︎ | | [Open in YouTube](https://github.com/CokePokes/YoutubeExtensions) | [CokePokes](https://github.com/CokePokes) | 1.2 | ✖︎ |
| **iSponsorBlock** | [Galactic-Dev](https://github.com/Galactic-Dev) | 1.0-15 | [✔︎](https://github.com/Galactic-Dev/iSponsorBlock) | | **iSponsorBlock** | [Galactic-Dev](https://github.com/Galactic-Dev) | 1.0-15 | [✔︎](https://github.com/Galactic-Dev/iSponsorBlock) |
| **BigYTMiniPlayer** | [Galactic-Dev](https://github.com/Galactic-Dev) | 1.0-1 | [✔︎](https://github.com/Galactic-Dev/BigYTMiniPlayer) | | **BigYTMiniPlayer** | [Galactic-Dev](https://github.com/Galactic-Dev) | 1.0-1 | [✔︎](https://github.com/Galactic-Dev/BigYTMiniPlayer) |
| **YTNoHoverCards** | [level3tjg](https://twitter.com/level3tjg) | 0.0.3 | [✔︎](https://github.com/level3tjg/YTNoHoverCards) | | **YTNoHoverCards** | [level3tjg](https://twitter.com/level3tjg) | 0.0.3 | [✔︎](https://github.com/level3tjg/YTNoHoverCards) |
| **YTMiniplayerEnabler** | [level3tjg](https://twitter.com/level3tjg) | 0.0.2 | [✔︎](https://github.com/level3tjg/YTMiniplayerEnabler) | | **YTMiniplayerEnabler** | [level3tjg](https://twitter.com/level3tjg) | 0.0.2 | [✔︎](https://github.com/level3tjg/YTMiniplayerEnabler) |
| **DontEatMyContent** | [therealFoxster](https://github.com/therealFoxster) | 1.0.2 | [✔︎](https://github.com/therealFoxster/DontEatMyContent) |
| **YTSpeed** | [Lyvendia](https://github.com/Lyvendia) | 1.0.1 | [✔︎](https://github.com/Lyvendia/YTSpeed) | | **YTSpeed** | [Lyvendia](https://github.com/Lyvendia) | 1.0.1 | [✔︎](https://github.com/Lyvendia/YTSpeed) |
| **YTCastConfirm** | [JamieBerghmans](https://github.com/JamieBerghmans) | 1.0.0 | [✔︎](https://github.com/JamieBerghmans/YTCastConfirm) | | **YTCastConfirm** | [JamieBerghmans](https://github.com/JamieBerghmans) | 1.0.0 | [✔︎](https://github.com/JamieBerghmans/YTCastConfirm) |
| **Alderis Color Picker** | [HASHBANG Productions](https://github.com/hbang) | 1.2| [✔︎](https://github.com/hbang/Alderis) | | **Alderis Color Picker** | [HASHBANG Productions](https://github.com/hbang) | 1.2| [✔︎](https://github.com/hbang/Alderis) |
| **YTUHD** | [PoomSmart](https://twitter.com/poomsmart) | 1.2.9 | [✔︎](https://github.com/PoomSmart/YTUHD) | | **YTUHD** | [PoomSmart](https://twitter.com/poomsmart) | 1.3.2 | [✔︎](https://github.com/PoomSmart/YTUHD) |
| **YouPiP** | [PoomSmart](https://twitter.com/poomsmart) | 1.7.7 | [✔︎](https://github.com/PoomSmart/YouPiP) | | **YouPiP** | [PoomSmart](https://twitter.com/poomsmart) | 1.7.12 | [✔︎](https://github.com/PoomSmart/YouPiP) |
| **IAmYouTube** | [PoomSmart](https://twitter.com/poomsmart) | 1.2.0 | [✔︎](https://github.com/PoomSmart/IAmYouTube) | | **IAmYouTube** | [PoomSmart](https://twitter.com/poomsmart) | 1.2.0 | [✔︎](https://github.com/PoomSmart/IAmYouTube) |
| **YTReExplore** | [PoomSmart](https://twitter.com/poomsmart) | 1.0.2 | [✔︎](https://github.com/PoomSmart/YTReExplore) | | **YTReExplore** | [PoomSmart](https://twitter.com/poomsmart) | 1.0.2 | [✔︎](https://github.com/PoomSmart/YTReExplore) |
| **NoYTPremium** | [PoomSmart](https://twitter.com/poomsmart) | 1.0.4 | [✔︎](https://github.com/PoomSmart/NoYTPremium) | | **NoYTPremium** | [PoomSmart](https://twitter.com/poomsmart) | 1.0.4 | [✔︎](https://github.com/PoomSmart/NoYTPremium) |
| **YTNoPaidPromo** | [PoomSmart](https://twitter.com/poomsmart) | 1.0.0 | [✔︎](https://github.com/PoomSmart/YTNoPaidPromo) | | **YTNoPaidPromo** | [PoomSmart](https://twitter.com/poomsmart) | 1.0.0 | [✔︎](https://github.com/PoomSmart/YTNoPaidPromo) |
| **YTAutoFullScreen** | [PoomSmart](https://twitter.com/poomsmart) | 1.0.3 | [✔︎](https://github.com/PoomSmart/YTAutoFullScreen) | | **YTAutoFullScreen** | [PoomSmart](https://twitter.com/poomsmart) | 1.0.3 | [✔︎](https://github.com/PoomSmart/YTAutoFullScreen) |
| **YTShortsProgress** | [PoomSmart](https://twitter.com/poomsmart) | 1.0.0 | [✔︎](https://github.com/PoomSmart/YTShortsProgress) |
| **YouRememberCaption** | [PoomSmart](https://twitter.com/poomsmart) | 1.0.0 | [✔︎](https://poomsmart.github.io/repo/depictions/youremembercaption.html) | | **YouRememberCaption** | [PoomSmart](https://twitter.com/poomsmart) | 1.0.0 | [✔︎](https://poomsmart.github.io/repo/depictions/youremembercaption.html) |
| **YTClassicVideoQuality** | [PoomSmart](https://twitter.com/poomsmart) | 1.0.1 | [✔︎](https://github.com/PoomSmart/YTClassicVideoQuality) | | **YTClassicVideoQuality** | [PoomSmart](https://twitter.com/poomsmart) | 1.0.1 | [✔︎](https://github.com/PoomSmart/YTClassicVideoQuality) |
| **Return YouTube Dislike** | [PoomSmart](https://twitter.com/poomsmart) | 1.6.6 | [✔︎](https://github.com/PoomSmart/Return-YouTube-Dislikes) | | **Return YouTube Dislike** | [PoomSmart](https://twitter.com/poomsmart) | 1.7.1 | [✔︎](https://github.com/PoomSmart/Return-YouTube-Dislikes) |
| **YTNoCheckLocalNetwork** | [PoomSmart](https://twitter.com/poomsmart) | 1.0.2 | [✔︎](https://poomsmart.github.io/repo/depictions/ytnochecklocalnetwork.html) | | **YTNoCheckLocalNetwork** | [PoomSmart](https://twitter.com/poomsmart) | 1.0.2 | [✔︎](https://poomsmart.github.io/repo/depictions/ytnochecklocalnetwork.html) |
</details> </details>
@@ -115,36 +125,14 @@
See [Installation - Wiki](https://github.com/qnblackcat/uYouPlus/wiki/Installation) See [Installation - Wiki](https://github.com/qnblackcat/uYouPlus/wiki/Installation)
# Support the developers # Support the developers
- [**MiRO92**](https://twitter.com/miro92): https://github.com/MiRO92/uYou-for-YouTube#support
<details> - [**Poomsmart**](https://twitter.com/poomsmart): https://poomsmart.github.io
<summary>MiRO92</summary> - [**level3tjg**](https://twitter.com/level3tjg): https://ko-fi.com/level3tjg
- [**BandarHL**](https://twitter.com/bandarhl): https://www.paypal.com/paypalme/BandarHL
- CashApp: https://cash.app/$MiRO92M - [**julioverne**](https://twitter.com/ijulioverne): https://www.patreon.com/julioverne
- [**Galactic-dev**](https://twitter.com/dev_galactic):
- Other payment methods are available in uYou's settings. - Paypal: https://www.paypal.com/paypalme/DBrett684
</details> - Venmo: https://venmo.com/u/DavidBrett
<details>
<summary>PoomSmart</summary>
- Paypal: https://poomsmart.github.io/
</details>
<details>
<summary>Bandar Alruwaili (BandarHL)</summary>
- Paypal: https://www.paypal.com/paypalme/BandarHL
</details>
<details>
<summary>Galactic-dev</summary>
- Paypal: https://www.paypal.com/paypalme/DBrett684
- Venmo: https://venmo.com/u/DavidBrett
</details>
# FAQ # FAQ
+37 -6
View File
@@ -1,6 +1,7 @@
#import "Tweaks/YouTubeHeader/YTSettingsViewController.h" #import "Tweaks/YouTubeHeader/YTSettingsViewController.h"
#import "Tweaks/YouTubeHeader/YTSettingsSectionItem.h" #import "Tweaks/YouTubeHeader/YTSettingsSectionItem.h"
#import "Tweaks/YouTubeHeader/YTSettingsSectionItemManager.h" #import "Tweaks/YouTubeHeader/YTSettingsSectionItemManager.h"
#import "Tweaks/YouTubeHeader/YTUIUtils.h"
#import "Header.h" #import "Header.h"
@interface YTSettingsSectionItemManager (YouPiP) @interface YTSettingsSectionItemManager (YouPiP)
@@ -23,6 +24,9 @@ extern BOOL castConfirm();
extern BOOL ytMiniPlayer(); extern BOOL ytMiniPlayer();
extern BOOL hidePreviousAndNextButton(); extern BOOL hidePreviousAndNextButton();
extern BOOL hidePaidPromotionCard(); extern BOOL hidePaidPromotionCard();
extern BOOL fixGoogleSignIn();
extern BOOL replacePreviousAndNextButton();
extern BOOL dontEatMyContent();
// Settings // Settings
%hook YTAppSettingsPresentationData %hook YTAppSettingsPresentationData
@@ -42,15 +46,42 @@ extern BOOL hidePaidPromotionCard();
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 YTSettingsSectionItem *version = [%c(YTSettingsSectionItem)
itemWithTitle:LOC(@"KILL_APP") itemWithTitle:[NSString stringWithFormat:LOC(@"VERSION"), @(OS_STRINGIFY(TWEAK_VERSION))]
titleDescription:LOC(@"KILL_APP_DESC") titleDescription:LOC(@"VERSION_CHECK")
accessibilityIdentifier:nil accessibilityIdentifier:nil
detailTextBlock:nil detailTextBlock:nil
selectBlock:^BOOL (YTSettingsCell *cell, NSUInteger arg1) { selectBlock:^BOOL (YTSettingsCell *cell, NSUInteger arg1) {
exit(0); return [%c(YTUIUtils) openURL:[NSURL URLWithString:@"https://github.com/qnblackcat/uYouPlus/releases/latest"]];
}]; }];
YTSettingsSectionItem *dontEatMyContent = [[%c(YTSettingsSectionItem) alloc] initWithTitle:LOC(@"DONT_EAT_MY_CONTENT") titleDescription:LOC(@"DONT_EAT_MY_CONTENT_DESC")];
dontEatMyContent.hasSwitch = YES;
dontEatMyContent.switchVisible = YES;
dontEatMyContent.on = [[NSUserDefaults standardUserDefaults] boolForKey:@"dontEatMyContent_enabled"];
dontEatMyContent.switchBlock = ^BOOL (YTSettingsCell *cell, BOOL enabled) {
[[NSUserDefaults standardUserDefaults] setBool:enabled forKey:@"dontEatMyContent_enabled"];
return YES;
};
YTSettingsSectionItem *replacePreviousAndNextButton = [[%c(YTSettingsSectionItem) alloc] initWithTitle:LOC(@"REPLACE_PREVIOUS_NEXT_BUTTON") titleDescription:LOC(@"REPLACE_PREVIOUS_NEXT_BUTTON_DESC")];
replacePreviousAndNextButton.hasSwitch = YES;
replacePreviousAndNextButton.switchVisible = YES;
replacePreviousAndNextButton.on = [[NSUserDefaults standardUserDefaults] boolForKey:@"replacePreviousAndNextButton_enabled"];
replacePreviousAndNextButton.switchBlock = ^BOOL (YTSettingsCell *cell, BOOL enabled) {
[[NSUserDefaults standardUserDefaults] setBool:enabled forKey:@"replacePreviousAndNextButton_enabled"];
return YES;
};
YTSettingsSectionItem *fixGoogleSignIn = [[%c(YTSettingsSectionItem) alloc] initWithTitle:LOC(@"FIX_GOOGLE_SIGNIN") titleDescription:LOC(@"FIX_GOOGLE_SIGNIN_DESC")];
fixGoogleSignIn.hasSwitch = YES;
fixGoogleSignIn.switchVisible = YES;
fixGoogleSignIn.on = [[NSUserDefaults standardUserDefaults] boolForKey:@"fixGoogleSignIn_enabled"];
fixGoogleSignIn.switchBlock = ^BOOL (YTSettingsCell *cell, BOOL enabled) {
[[NSUserDefaults standardUserDefaults] setBool:enabled forKey:@"fixGoogleSignIn_enabled"];
return YES;
};
YTSettingsSectionItem *hidePaidPromotionCard = [[%c(YTSettingsSectionItem) alloc] initWithTitle:LOC(@"HIDE_PAID_PROMOTION_CARDS") titleDescription:LOC(@"HIDE_PAID_PROMOTION_CARDS_DESC")]; YTSettingsSectionItem *hidePaidPromotionCard = [[%c(YTSettingsSectionItem) alloc] initWithTitle:LOC(@"HIDE_PAID_PROMOTION_CARDS") titleDescription:LOC(@"HIDE_PAID_PROMOTION_CARDS_DESC")];
hidePaidPromotionCard.hasSwitch = YES; hidePaidPromotionCard.hasSwitch = YES;
hidePaidPromotionCard.switchVisible = YES; hidePaidPromotionCard.switchVisible = YES;
@@ -168,7 +199,7 @@ extern BOOL hidePaidPromotionCard();
return YES; return YES;
}; };
NSMutableArray <YTSettingsSectionItem *> *sectionItems = [NSMutableArray arrayWithArray:@[killApp, autoFull, castConfirm, ytMiniPlayer, hideAutoplaySwitch, hideCC, hideHUD, hidePaidPromotionCard, hidePreviousAndNextButton, hideHoverCard, bigYTMiniPlayer, oledDarkMode, oledKeyBoard, reExplore]]; NSMutableArray <YTSettingsSectionItem *> *sectionItems = [NSMutableArray arrayWithArray:@[version, autoFull, castConfirm, ytMiniPlayer, fixGoogleSignIn, hideAutoplaySwitch, hideCC, hideHUD, hidePaidPromotionCard, hidePreviousAndNextButton, hideHoverCard, bigYTMiniPlayer, oledDarkMode, oledKeyBoard, dontEatMyContent, replacePreviousAndNextButton, reExplore]];
[delegate setSectionItems:sectionItems forCategory:uYouPlusSection title:@"uYouPlus" titleDescription:nil headerHidden:NO]; [delegate setSectionItems:sectionItems forCategory:uYouPlusSection title:@"uYouPlus" titleDescription:nil headerHidden:NO];
} }
@@ -179,4 +210,4 @@ extern BOOL hidePaidPromotionCard();
} }
%orig; %orig;
} }
%end %end
+1
Submodule Tweaks/YTABConfig added at 9cacdfcf79
Submodule Tweaks/YTSpeed deleted from 3fec2dfcf0
@@ -1,10 +1,18 @@
// Settings // Settings
"VERSION" = "إصدار uYouPlus: %@";
"VERSION_CHECK" = "المس هنا للبحث عن التحديثات!";
"KILL_APP" = "إغلاق تطبيق يوتيوب"; "DONT_EAT_MY_CONTENT" = "منع النوتش/الجزيرة التفاعلية على مقاطع 2:1 (أداة DontEatMyContent)";
"KILL_APP_DESC" = "المس هنا لإغلاق تطبيق يوتيوب!"; "DONT_EAT_MY_CONTENT_DESC" = "منع النوتش/الجزيرة التفاعلية من قص المقاطع التي تكون نسبة العرض إلى الارتفاع فيها تساوي 2:1. يتطلب إعادة تشغيل التطبيق.";
"HIDE_PREVIOUS_AND_NEXT_BUTTON" = "إخفاء زر السابق والتالي"; "REPLACE_PREVIOUS_NEXT_BUTTON" = "تقدم وتراجع بدلاً من السابق والتالي";
"HIDE_PREVIOUS_AND_NEXT_BUTTON_DESC" = "إخفاء زرّي السابق والتالي من أزرار التحكم على الفيديو."; "REPLACE_PREVIOUS_NEXT_BUTTON_DESC" = "استبدال زرّي المقطع السابق والمقطع التالي بزرّي تقدم وتراجع. يتطلب إعادة تشغيل التطبيق.";
"FIX_GOOGLE_SIGNIN" = "إصلاح تسجيل الدخول بحساب جوجل (لمستخدمي TrollStore فقط)";
"FIX_GOOGLE_SIGNIN_DESC" = "هذا الخيار لا يعمل إلا إذا كان التطبيق مثبت بواسطة TrollStore: فعل هذا الخيار لتتمكن من تسجيل الدخول بحساب جوجل. يتطلب إعادة تشغيل التطبيق.";
"HIDE_PREVIOUS_AND_NEXT_BUTTON" = "إخفاء زرّي السابق والتالي";
"HIDE_PREVIOUS_AND_NEXT_BUTTON_DESC" = "إخفاء زرّي المقطع السابق والمقطع التالي من أزرار التحكم على الفيديو.";
"YT_MINIPLAYER" = "السماح بالمشغل المصغّر لكل فيديوهات يوتيوب"; "YT_MINIPLAYER" = "السماح بالمشغل المصغّر لكل فيديوهات يوتيوب";
"YT_MINIPLAYER_DESC" = "عند تصغير فيديوهات الأطفال مثلاً (قبل إغلاق المقطع)."; "YT_MINIPLAYER_DESC" = "عند تصغير فيديوهات الأطفال مثلاً (قبل إغلاق المقطع).";
@@ -46,4 +54,4 @@
"CASTING" = "البث"; "CASTING" = "البث";
"MSG_ARE_YOU_SURE" = "هل أنت متأكد أنك تريد بدء البث؟"; "MSG_ARE_YOU_SURE" = "هل أنت متأكد أنك تريد بدء البث؟";
"MSG_YES" = "نعم"; "MSG_YES" = "نعم";
"MSG_CANCEL" = "إلغاء"; "MSG_CANCEL" = "إلغاء";
@@ -1,16 +1,15 @@
// 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 // Settings
"VERSION" = "uYouPlus's version: %@";
"VERSION_CHECK" = "Tap to check for update!";
"DONT_EAT_MY_CONTENT" = "Zabránit zářezu/ostrovu na videoobsahu 2:1 (DontEatMyContent)";
"DONT_EAT_MY_CONTENT_DESC" = "Zabraňte tomu, aby zářez/Dynamic Island žvýkal video obsah 2:1 na YouTube. Je vyžadován restart aplikace.";
"REPLACE_PREVIOUS_NEXT_BUTTON" = "Nahradit předchozí a další tlačítko";
"REPLACE_PREVIOUS_NEXT_BUTTON_DESC" = "Nahradit předchozí a následující tlačítko tlačítkem Přetočit vpřed a vzad. Je vyžadován restart aplikace.";
"FIX_GOOGLE_SIGNIN" = "Opravit přihlášení přes Google (pouze pro uživatele TrollStore)";
"FIX_GOOGLE_SIGNIN_DESC" = "Tuto možnost zapněte pouze v případě, že se nemůžete přihlásit pomocí svého účtu Google a aplikace byla nainstalována prostřednictvím TrollStore. Pokud se můžete normálně přihlásit, ponechte ji deaktivovanou. Je vyžadován restart aplikace.";
"HIDE_PREVIOUS_AND_NEXT_BUTTON" = "Skrýt tlačítka předchozí a následující"; "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."; "HIDE_PREVIOUS_AND_NEXT_BUTTON_DESC" = "Skryje tlačítka předchozí a následující v překrytí ovládání videa.";
@@ -1,16 +1,27 @@
// Settings // Settings
"VERSION" = "uYouPlus's version: %@";
"VERSION_CHECK" = "Tap to check for update!";
"DONT_EAT_MY_CONTENT" = "Kerbe/Insel bei 2:1-Videoinhalten berücksichtigen (DontEatMyContent)";
"DONT_EAT_MY_CONTENT_DESC" = "Verhindert, dass die Notch/Dynamic Island 2:1-Videoinhalte überdeckt. App-Neustart erforderlich!";
"REPLACE_PREVIOUS_NEXT_BUTTON" = "Vor- und Zurücktasten ersetzen";
"REPLACE_PREVIOUS_NEXT_BUTTON_DESC" = "Tasten zum Vor- und Zurückspringen zwischen Videos durch Vor- und Zurückspultasten ersetzen. App-Neustart erforderlich!";
"FIX_GOOGLE_SIGNIN" = "Google-Anmeldung reparieren (nur für TrollStore-Benutzer!)";
"FIX_GOOGLE_SIGNIN_DESC" = "Aktiviere diese Option nur, wenn Sie sich nicht mit Ihrem Google-Account anmelden können und die App über TrollStore installiert wurde. Wenn Sie sich normal anmelden können, halte diese Option deaktiviert! App-Neustart erforderlich!";
"HIDE_PREVIOUS_AND_NEXT_BUTTON" = "Vor- und Zurücktasten ausblenden"; "HIDE_PREVIOUS_AND_NEXT_BUTTON" = "Vor- und Zurücktasten ausblenden";
"HIDE_PREVIOUS_AND_NEXT_BUTTON_DESC" = "Vor- und Zurückspultasten vom Videoplayer ausblenden."; "HIDE_PREVIOUS_AND_NEXT_BUTTON_DESC" = "Vor- und Zurücktasten vom Videoplayer ausblenden.";
"YT_MINIPLAYER" = "Miniplayer für alle YT Videos aktivieren"; "YT_MINIPLAYER" = "Miniplayer für alle YouTube-Videos aktivieren";
"YT_MINIPLAYER_DESC" = "z.B. bei Videos für Kinder"; "YT_MINIPLAYER_DESC" = "z.B. bei Videos für Kinder.";
"CAST_CONFIRM" = "Warnung vor TV-Übertragungen (YTCastConfirm)"; "CAST_CONFIRM" = "Warnung vor TV-Übertragungen (YTCastConfirm)";
"CAST_CONFIRM_DESC" = "Zeigt eine Warnung an, um eine ausversehene TV-Übertragung 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 des Videos ausblenden."; "HIDE_HOVER_CARD_DESC" = "Creator-Endkarten (Thumbnails) am Ende des Videos ausblenden.";
"NEW_MINIPLAYER_STYLE" = "Neuer Miniplayer Style (BigYTMiniPlayer)"; "NEW_MINIPLAYER_STYLE" = "Neuer Miniplayer Style (BigYTMiniPlayer)";
"NEW_MINIPLAYER_STYLE_DESC" = "App-Neustart erforderlich!"; "NEW_MINIPLAYER_STYLE_DESC" = "App-Neustart erforderlich!";
@@ -28,13 +39,13 @@
"AUTO_FULLSCREEN_DESC" = "Automatisch Videos im Vollbild starten."; "AUTO_FULLSCREEN_DESC" = "Automatisch Videos im Vollbild starten.";
"HIDE_HUD_MESSAGES" = "HUD-Nachrichten ausblenden"; "HIDE_HUD_MESSAGES" = "HUD-Nachrichten ausblenden";
"HIDE_HUD_MESSAGES_DESC" = "z.B.: Untertitel sind akti-/deaktiviert, Videoschleife ist an, ..."; "HIDE_HUD_MESSAGES_DESC" = "z.B.: Untertitel sind aktiviert/deaktiviert, Videoschleife ist an, ...";
"OLED_DARKMODE" = "OLED-Dunkelmodus (Experimental)"; "OLED_DARKMODE" = "OLED-Dunkelmodus (Experimental)";
"OLED_DARKMODE_DESC" = "Könnte in manchen Fällen nicht richtig funktionieren. App-Neustart ist erforderlich, wenn diese Option akti-/deaktiviert wird!"; "OLED_DARKMODE_DESC" = "Könnte in manchen Fällen nicht richtig funktionieren. App-Neustart ist erforderlich, wenn diese Option aktiviert/deaktiviert wird!";
"OLED_KEYBOARD" = "OLED-Tastatur (Experimental)"; "OLED_KEYBOARD" = "OLED-Tastatur (Experimental)";
"OLED_KEYBOARD_DESC" = "Könnte in manchen Fällen nicht richtig funktionieren. App-Neustart erforderlich1"; "OLED_KEYBOARD_DESC" = "Könnte in manchen Fällen nicht richtig funktionieren. App-Neustart erforderlich!";
"HIDE_PAID_PROMOTION_CARDS" = "Enthält bezahlte Werbung Info ausblenden"; "HIDE_PAID_PROMOTION_CARDS" = "Enthält bezahlte Werbung Info ausblenden";
"HIDE_PAID_PROMOTION_CARDS_DESC" = "Enthält bezahlte Werbung Infobanner bei manchen Videos ausblenden."; "HIDE_PAID_PROMOTION_CARDS_DESC" = "Enthält bezahlte Werbung Infobanner bei manchen Videos ausblenden.";
@@ -1,4 +1,15 @@
// Settings // Settings
"VERSION" = "uYouPlus's version: %@";
"VERSION_CHECK" = "Tap to check for update!";
"DONT_EAT_MY_CONTENT" = "Αποτροπή Notch/Island σε περιεχόμενο βίντεο 2:1 (DontEatMyContent)";
"DONT_EAT_MY_CONTENT_DESC" = "Αποτρέψτε το notch/Dynamic Island από το να μασουλάει περιεχόμενο βίντεο 2:1 στο YouTube. Απαιτείται επανεκκίνηση της εφαρμογής.";
"REPLACE_PREVIOUS_NEXT_BUTTON" = "Αντικατάσταση του Προηγούμενου και του Επόμενου Κουμπιού";
"REPLACE_PREVIOUS_NEXT_BUTTON_DESC" = "Αντικατάσταση του Προηγούμενου και του Επόμενου κουμπιού με το κουμπί Γρήγορη κίνηση προς τα εμπρός και προς τα πίσω. Απαιτείται επανεκκίνηση της εφαρμογής.";
"FIX_GOOGLE_SIGNIN" = "Διόρθωση σύνδεσης Google (μόνο για χρήστες του TrollStore)";
"FIX_GOOGLE_SIGNIN_DESC" = "Ενεργοποιήστε αυτήν την επιλογή μόνο όταν δεν μπορείτε να συνδεθείτε με τον λογαριασμό σας Google και η εφαρμογή έχει εγκατασταθεί μέσω του TrollStore. Εάν μπορείτε να συνδεθείτε κανονικά, διατηρήστε την απενεργοποιημένη. Απαιτείται επανεκκίνηση της εφαρμογής.";
"HIDE_PREVIOUS_AND_NEXT_BUTTON" = "Κρύψτε το προηγούμενο και το επόμενο κουμπί"; "HIDE_PREVIOUS_AND_NEXT_BUTTON" = "Κρύψτε το προηγούμενο και το επόμενο κουμπί";
"HIDE_PREVIOUS_AND_NEXT_BUTTON_DESC" = "Κρύψτε το προηγούμενο και το επόμενο κουμπί κατά την αναπαραγωγή βίντεο."; "HIDE_PREVIOUS_AND_NEXT_BUTTON_DESC" = "Κρύψτε το προηγούμενο και το επόμενο κουμπί κατά την αναπαραγωγή βίντεο.";
@@ -1,7 +1,15 @@
// Settings // Settings
"VERSION" = "uYouPlus's version: %@";
"VERSION_CHECK" = "Tap to check for update!";
"KILL_APP" = "Close YouTube"; "DONT_EAT_MY_CONTENT" = "Prevent Notch/Island on 2:1 Video Content (DontEatMyContent)";
"KILL_APP_DESC" = "Tap here to close YouTube!"; "DONT_EAT_MY_CONTENT_DESC" = "Prevent the notch/Dynamic Island from munching on 2:1 video content in YouTube. App restart is required.";
"REPLACE_PREVIOUS_NEXT_BUTTON" = "Replace Previous and Next Button";
"REPLACE_PREVIOUS_NEXT_BUTTON_DESC" = "Replace Previous and Next Button with Fast forward and Rewind button. App restart is required.";
"FIX_GOOGLE_SIGNIN" = "Fix Google Sign in (for TrollStore user only)";
"FIX_GOOGLE_SIGNIN_DESC" = "Turn on this option only when you can't sign in with your Google account and the app was installed via TrollStore. If you can log in normally, keep it disabled. App restart is required.";
"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.";
@@ -1,7 +1,15 @@
// Settings // Settings
"VERSION" = "uYouPlus's version: %@";
"VERSION_CHECK" = "Tap to check for update!";
"KILL_APP" = "Cerrar YouTube"; "DONT_EAT_MY_CONTENT" = "Evitar Notch/Island en contenido de video 2:1 (DontEatMyContent)";
"KILL_APP_DESC" = "Toca aquí para cerrar YouTube!"; "DONT_EAT_MY_CONTENT_DESC" = "Evite que la muesca/Dynamic Island se trague contenido de video 2:1 en YouTube. Es necesario reiniciar la aplicación.";
"REPLACE_PREVIOUS_NEXT_BUTTON" = "Reemplazar botón anterior y siguiente";
"REPLACE_PREVIOUS_NEXT_BUTTON_DESC" = "Reemplace el botón Anterior y Siguiente con el botón Avance rápido y Rebobinado. Es necesario reiniciar la aplicación.";
"FIX_GOOGLE_SIGNIN" = "Reparar el inicio de sesión de Google (solo para usuarios de TrollStore)";
"FIX_GOOGLE_SIGNIN_DESC" = "Active esta opción solo cuando no pueda iniciar sesión con su cuenta de Google y la aplicación se instaló a través de TrollStore. Si puede iniciar sesión normalmente, manténgala desactivada. Es necesario reiniciar la aplicación.";
"HIDE_PREVIOUS_AND_NEXT_BUTTON" = "Ocultar el botón de Anterior y Siguiente"; "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."; "HIDE_PREVIOUS_AND_NEXT_BUTTON_DESC" = "Ocultar el botón de Anterior y Siguiente en los botones superpuestos.";
@@ -1,7 +1,15 @@
// Settings // Settings
"VERSION" = "uYouPlus's version: %@";
"VERSION_CHECK" = "Tap to check for update!";
"KILL_APP" = "Fermer YouTube"; "DONT_EAT_MY_CONTENT" = "Empêcher l'encoche/Dynamic Island de grignoter le contenu vidéo 2:1 (DontEatMyContent)";
"KILL_APP_DESC" = "Appuyez ici pour fermer YouTube !"; "DONT_EAT_MY_CONTENT_DESC" = "Empêche l'encoche/Dynamic Island de grignoter du contenu vidéo 2:1 dans YouTube. Le redémarrage de l'application est nécessaire.";
"REPLACE_PREVIOUS_NEXT_BUTTON" = "Remplacer le bouton précédent et suivant";
"REPLACE_PREVIOUS_NEXT_BUTTON_DESC" = "Remplace les boutons Précédent et Suivant par les boutons Avance rapide et Retour rapide. Le redémarrage de l'application est nécessaire";
"FIX_GOOGLE_SIGNIN" = "Réparer l'identification Google (pour les utilisateurs de TrollStore uniquement)" ;
"FIX_GOOGLE_SIGNIN_DESC" = "Activez cette option uniquement si vous ne pouvez pas vous connecter avec votre compte Google et que l'application a été installée via TrollStore. Si vous pouvez vous connecter normalement, laissez-la désactivée. Le redémarrage de l'application est nécessaire.";
"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";
@@ -43,7 +51,7 @@
"HIDE_PAID_PROMOTION_CARDS_DESC" = "Masque la bannière 'Inclut une communication commerciale' dans certaines vidéos."; "HIDE_PAID_PROMOTION_CARDS_DESC" = "Masque la bannière 'Inclut une communication commerciale' dans certaines vidéos.";
// YTCastConfirm // YTCastConfirm
"CASTING" = "Castings"; "CASTING" = "Cast";
"MSG_ARE_YOU_SURE" = "Êtes-vous sûr de vouloir commencer le casting ?"; "MSG_ARE_YOU_SURE" = "Êtes-vous sûr de vouloir commencer un cast sur votre télévision ?";
"MSG_YES" = "Oui"; "MSG_YES" = "Oui";
"MSG_CANCEL" = "Annuler"; "MSG_CANCEL" = "Annuler";
@@ -1,4 +1,15 @@
// Settings // Settings
"VERSION" = "uYouPlus's version: %@";
"VERSION_CHECK" = "Tap to check for update!";
"DONT_EAT_MY_CONTENT" = "מנע חריץ/אי בתוכן וידאו 2:1 (DontEatMyContent)";
"DONT_EAT_MY_CONTENT_DESC" = "מנע מהחריץ/האי הדינמי ללעוס תוכן וידאו 2:1 ב-YouTube. נדרשת הפעלה מחדש של האפליקציה.";
"REPLACE_PREVIOUS_NEXT_BUTTON" = "החלף את הלחצן הקודם והבא";
"REPLACE_PREVIOUS_NEXT_BUTTON_DESC" = "החלף את הלחצן הקודם והבא בלחצן הרצה קדימה והאחורה. נדרשת הפעלה מחדש של האפליקציה.";
"FIX_GOOGLE_SIGNIN" = "תקן כניסה של Google (עבור משתמש TrollStore בלבד)";
"FIX_GOOGLE_SIGNIN_DESC" = "הפעל אפשרות זו רק כאשר אינך יכול להיכנס עם חשבון Google שלך והאפליקציה הותקנה דרך TrollStore. אם אתה יכול להתחבר כרגיל, השאר אותה מושבתת. נדרשת הפעלה מחדש של האפליקציה.";
"HIDE_PREVIOUS_AND_NEXT_BUTTON" = "הסתר את הקודם והבא"; "HIDE_PREVIOUS_AND_NEXT_BUTTON" = "הסתר את הקודם והבא";
"HIDE_PREVIOUS_AND_NEXT_BUTTON_DESC" = "הסתר את כפתורי הקודם והבא בתצוגת השליטה בסרטון."; "HIDE_PREVIOUS_AND_NEXT_BUTTON_DESC" = "הסתר את כפתורי הקודם והבא בתצוגת השליטה בסרטון.";
@@ -0,0 +1,57 @@
// Settings
"VERSION" = "uYouPlus's version: %@";
"VERSION_CHECK" = "Tap to check for update!";
"DONT_EAT_MY_CONTENT" = "Notch/Island megelőzése 2:1 arányú videótartalomnál (DontEatMyContent)";
"DONT_EAT_MY_CONTENT_DESC" = "Akadályozza meg, hogy a Notch/Dynamic Island 2:1 arányú videótartalmat csámcsogjon a YouTube-on. Az alkalmazás újraindítása szükséges.";
"REPLACE_PREVIOUS_NEXT_BUTTON" = "Előző és Következő gomb cseréje";
"REPLACE_PREVIOUS_NEXT_BUTTON_DESC" = "Cserélje ki az Előző és Következő gombot Gyors előre és visszatekerés gombbal. Az alkalmazás újraindítása szükséges.";
"FIX_GOOGLE_SIGNIN" = "A Google bejelentkezés javítása (csak a TrollStore-felhasználók számára)";
"FIX_GOOGLE_SIGNIN_DESC" = "Csak akkor kapcsolja be ezt az opciót, ha nem tud bejelentkezni Google-fiókjával, és az alkalmazást a TrollStore-on keresztül telepítették. Ha normálisan be tud jelentkezni, tartsa letiltva. Az alkalmazás újraindítása szükséges.";
"HIDE_PREVIOUS_AND_NEXT_BUTTON" = "Előző és Következő gomb elrejtése";
"HIDE_PREVIOUS_AND_NEXT_BUTTON_DESC" = "Az Előző és a Következő gomb elrejtése a videóvezérlők fedvényén.";
"YT_MINIPLAYER" = "Engedélyezze a Minilejátszót az összes YouTube-videóhoz";
"YT_MINIPLAYER_DESC" = "Például gyermekvideók.";
"CAST_CONFIRM" = "Megerősítés átküldés előtt (YTCastConfirm)";
"CAST_CONFIRM_DESC" = "Az átküldés előtt mutasson megerősítő figyelmeztetést, hogy megakadályozza a TV véletlen eltérítését.";
"HIDE_HOVER_CARD" = "A záróképernyők lebegő kártyáinak elrejtése (YTNoHoverCards)";
"HIDE_HOVER_CARD_DESC" = "Az alkotói záróképernyők (bélyegképek) elrejtése a videók végén.";
"NEW_MINIPLAYER_STYLE" = "Új minilejátszó sáv (BigYTMiniPlayer)";
"NEW_MINIPLAYER_STYLE_DESC" = "Az alkalmazás újraindítása szükséges.";
"YT_RE_EXPLORE" = "Cserélje le a Shorts fület a Felfedezés fülre (YTReExplore)";
"YT_RE_EXPLORE_DESC" = "Az alkalmazás újraindítása szükséges.";
"HIDE_SUBTITLES_BUTTON" = "Feliratok elrejtése";
"HIDE_SUBTITLES_BUTTON_DESC" = "A Feliratok gomb elrejtése a videóvezérlők fedvényében.";
"HIDE_AUTOPLAY_SWITCH" = "Az automatikus lejátszás kapcsoló elrejtése";
"HIDE_AUTOPLAY_SWITCH_DESC" = "Az Automatikus lejátszás kapcsoló elrejtése a videovezérlők fedvényében.";
"AUTO_FULLSCREEN" = "Automatikus teljes képernyő (YTAutoFullScreen)";
"AUTO_FULLSCREEN_DESC" = "Videók automatikus lejátszása teljes képernyőn.";
"HIDE_HUD_MESSAGES" = "HUD üzenetek elrejtése";
"HIDE_HUD_MESSAGES_DESC" = "Példa: A CC be/ki van kapcsolva, a videó hurok be van kapcsolva,...";
"OLED_DARKMODE" = "OLED sötét mód (Kísérleti)";
"OLED_DARKMODE_DESC" = "Előfordulhat, hogy bizonyos esetekben nem működik megfelelően. Az alkalmazás újraindítása szükséges az opció engedélyezése/letiltása után.";
"OLED_KEYBOARD" = "OLED Billentyűzet (Kísérleti)";
"OLED_KEYBOARD_DESC" = "Előfordulhat, hogy bizonyos esetekben nem működik megfelelően. Az alkalmazás újraindítása szükséges az opció engedélyezése/letiltása után.";
"HIDE_PAID_PROMOTION_CARDS" = "Fizetett promóciós szalaghirdetés elrejtése";
"HIDE_PAID_PROMOTION_CARDS_DESC" = "A „Fizetett promóciókat tartalmaz” szalaghirdetés elrejtése egyes videóknál.";
// YTCastConfirm
"CASTING" = "Casting";
"MSG_ARE_YOU_SURE" = "Biztos, hogy elkezdi az átküldést?";
"MSG_YES" = "Igen";
"MSG_CANCEL" = "Visszavon";
@@ -0,0 +1,58 @@
// Settings
"VERSION" = "uYouPlus's version: %@";
"VERSION_CHECK" = "Tap to check for update!";
"DONT_EAT_MY_CONTENT" = "Previeni la Tacca/Isola sui Contenuti Video 2:1 (DontEatMyContent)";
"DONT_EAT_MY_CONTENT_DESC" = "Previene alla Tacca/Isola di nascondere parte dei Contenuti Video 2:1 in YouTube. È richiesto un riavvio dell'app.";
"REPLACE_PREVIOUS_NEXT_BUTTON" = "Sostituisci i Bottoni Precedente e Successivo";
"REPLACE_PREVIOUS_NEXT_BUTTON_DESC" = "Sostituisci i Bottoni Precedente e Successivo con Avanti veloce e Indietro veloce. È richiesto un riavvio dell'app.";
"FIX_GOOGLE_SIGNIN" = "Ripara Google Sign in (solo per utenti TrollStore)";
"FIX_GOOGLE_SIGNIN_DESC" = "Attiva questa opzione solo quando non puoi accedere al tuo account Google e l'app è stata installata attraverso TrollStore. Se puoi accedere normalmente, tienila disabilitata. È richiesto un riavvio dell'app.";
"HIDE_PREVIOUS_AND_NEXT_BUTTON" = "Nascondi i bottoni Precedente e Successivo";
"HIDE_PREVIOUS_AND_NEXT_BUTTON_DESC" = "Nasconde i bottoni Precedente e Successivo dai controlli in sovrimpressione al video.";
"YT_MINIPLAYER" = "Abilita il Miniplayer su tutti i video di YouTube";
"YT_MINIPLAYER_DESC" = "Video YouTube Kids per esempio.";
"CAST_CONFIRM" = "Avviso di conferma prima della condivisione su TV (YTCastConfirm)";
"CAST_CONFIRM_DESC" = "Mostra un avviso di conferma prima della condivisione per evitar e di irrompere accidentalmente sulla TV.";
"HIDE_HOVER_CARD" = "Nascondi i riquadri in sovrimpressione a fine video (YTNoHoverCards)";
"HIDE_HOVER_CARD_DESC" = "Nasconde i riquadri (miniature) a fine video proposti dall'autore.";
"NEW_MINIPLAYER_STYLE" = "Nuovo stile per la barra del miniplayer (BigYTMiniPlayer)";
"NEW_MINIPLAYER_STYLE_DESC" = "È richiesto un riavvio dell'app.";
"YT_RE_EXPLORE" = "Sostituisci il tab Shorts con il tab Esplora (YTReExplore)";
"YT_RE_EXPLORE_DESC" = "È richiesto un riavvio dell'app.";
"HIDE_SUBTITLES_BUTTON" = "Nascondi Bottone Sottotitoli";
"HIDE_SUBTITLES_BUTTON_DESC" = "Nasconde il controllo per i sottotitoli in sovrimpressione al video.";
"HIDE_AUTOPLAY_SWITCH" = "Nascondi Interruttore Riproduzione Automatica";
"HIDE_AUTOPLAY_SWITCH_DESC" = "Nasconde il controllo per la riproduzione automatica in sovrimpressione al video.";
"AUTO_FULLSCREEN" = "Auto Schermo Intero (YTAutoFullScreen)";
"AUTO_FULLSCREEN_DESC" = "Riproduce automaticamente video a tutto schermo.";
"HIDE_HUD_MESSAGES" = "Nascondi messaggi in sovrimpressione";
"HIDE_HUD_MESSAGES_DESC" = "Esempio: Sottotitoli attivati/disattivati, Ripetizione video attiva,...";
"OLED_DARKMODE" = "Modalità Scura OLED (Sperimentale)";
"OLED_DARKMODE_DESC" = "Potrebbe non funzionare correttamente in alcuni scenari. È richiesto un riavvio dell'app dopo aver abilitato/disabilitato questa opzione.";
"OLED_KEYBOARD" = "Tastiera OLED (Sperimentale)";
"OLED_KEYBOARD_DESC" = "Potrebbe non funzionare correttamente in alcuni scenari. È richiesto un riavvio dell'app.";
"HIDE_PAID_PROMOTION_CARDS" = "Nascondi i banner sponsorizzati";
"HIDE_PAID_PROMOTION_CARDS_DESC" = "Nasconde il banner 'Include Promozioni a Pagamento' in alcuni video.";
// YTCastConfirm
"CASTING" = "Condivisione su TV";
"MSG_ARE_YOU_SURE" = "Sei sicuro di voler avviare la condivisione?";
"MSG_YES" = "Sì";
"MSG_CANCEL" = "Annulla";
@@ -1,25 +1,33 @@
// Settings // Settings
"VERSION" = "uYouPlusのバージョン: %@";
"VERSION_CHECK" = "ここをタップしてアップデートを確認!";
"KILL_APP" = "YouTubeを閉じる"; "DONT_EAT_MY_CONTENT" = "2:1の動画とノッチ/Dynamic Islandの最適化 (DontEatMyContent)";
"KILL_APP_DESC" = "ここをタップしてYouTubeを終了できます!"; "DONT_EAT_MY_CONTENT_DESC" = "2:1比率の動画とノッチ/Dynamic Islandが干渉することを防ぎます。アプリの再起動が必要です。";
"HIDE_PREVIOUS_AND_NEXT_BUTTON" = "前後の動画のボタンを非表示"; "REPLACE_PREVIOUS_NEXT_BUTTON" = "前後の動画を再生するボタンを置き換える";
"HIDE_PREVIOUS_AND_NEXT_BUTTON_DESC" = "コントロールのオーバーレイで前後の動画のボタンを非表示にします。"; "REPLACE_PREVIOUS_NEXT_BUTTON_DESC" = "次の動画と前の動画を再生するボタンをそれぞれ早送りと巻き戻しボタンに置き換えます。アプリの再起動が必要です。";
"FIX_GOOGLE_SIGNIN" = "Googleのサインインを修正 (TrollStoreユーザーのみ)";
"FIX_GOOGLE_SIGNIN_DESC" = "アプリがTrollStoreでインストールされた場合のみ機能します。このオプションを有効にしてGoogleアカウントでサインインできるようにします。アプリの再起動が必要です。";
"HIDE_PREVIOUS_AND_NEXT_BUTTON" = "前後の動画を再生するボタンを非表示";
"HIDE_PREVIOUS_AND_NEXT_BUTTON_DESC" = "動画コントロールのオーバーレイで次の動画と前の動画を再生するボタンを非表示にします。";
"YT_MINIPLAYER" = "すべての動画でミニプレーヤーを有効にする"; "YT_MINIPLAYER" = "すべての動画でミニプレーヤーを有効にする";
"YT_MINIPLAYER_DESC" = "例: 子供向けの動画"; "YT_MINIPLAYER_DESC" = "例:子ども向けの動画";
"CAST_CONFIRM" = "キャストする前に確認画面を表示する (YTCastConfirm)"; "CAST_CONFIRM" = "キャストする前に確認する (YTCastConfirm)";
"CAST_CONFIRM_DESC" = "誤ってテレビにキャストしないよう、前に確認画面を表示します。"; "CAST_CONFIRM_DESC" = "誤ってテレビにキャストしないように、確認の警告を表示します。";
"HIDE_HOVER_CARD" = "動画終わりのホバーカードを非表示 (YTNoHoverCards)"; "HIDE_HOVER_CARD" = "動画終わりのホバーカードを非表示 (YTNoHoverCards)";
"HIDE_HOVER_CARD_DESC" = "動画終わりのホバーカード(サムネ)を非表示にします。"; "HIDE_HOVER_CARD_DESC" = "動画の最後のホバーカード(サムネイル)を非表示にします。";
"NEW_MINIPLAYER_STYLE" = "新しいミニプレーヤー・バーを使う (BigYTMiniPlayer)"; "NEW_MINIPLAYER_STYLE" = "新しいミニプレーヤー・バーを使う (BigYTMiniPlayer)";
"NEW_MINIPLAYER_STYLE_DESC" = "アプリ再起動してください。"; "NEW_MINIPLAYER_STYLE_DESC" = "アプリ再起動が必要です。";
"YT_RE_EXPLORE" = "ショートタブを「見つける」タブに置き換える (YTReExplore)"; "YT_RE_EXPLORE" = "ショートタブを探索タブに置き換える (YTReExplore)";
"YT_RE_EXPLORE_DESC" = "アプリ再起動してください。"; "YT_RE_EXPLORE_DESC" = "アプリ再起動が必要です。";
"HIDE_SUBTITLES_BUTTON" = "字幕ボタンを非表示"; "HIDE_SUBTITLES_BUTTON" = "字幕ボタンを非表示";
"HIDE_SUBTITLES_BUTTON_DESC" = "動画コントロールのオーバーレイから字幕ボタンを非表示にします。"; "HIDE_SUBTITLES_BUTTON_DESC" = "動画コントロールのオーバーレイから字幕ボタンを非表示にします。";
@@ -31,19 +39,19 @@
"AUTO_FULLSCREEN_DESC" = "動画を自動でフルスクリーンにします。"; "AUTO_FULLSCREEN_DESC" = "動画を自動でフルスクリーンにします。";
"HIDE_HUD_MESSAGES" = "HUDのメッセージを非表示"; "HIDE_HUD_MESSAGES" = "HUDのメッセージを非表示";
"HIDE_HUD_MESSAGES_DESC" = "例: 字幕がon/offです、ループ再生は有効です 等"; "HIDE_HUD_MESSAGES_DESC" = "例字幕がオン/オフになりました、ループ再生はオンになっています、等";
"OLED_DARKMODE" = "有機ELダークモード (実験的機能)"; "OLED_DARKMODE" = "有機ELダークモード (実験的機能)";
"OLED_DARKMODE_DESC" = "一部では正しく動作しない可能性があります。 この設定を変更したあとはアプリ再起動してください。"; "OLED_DARKMODE_DESC" = "正常に動作しない可能性があります。この設定を変更した場合、アプリ再起動が必要です。";
"OLED_KEYBOARD" = "有機ELキーボード (実験的機能)"; "OLED_KEYBOARD" = "有機ELキーボード (実験的機能)";
"OLED_KEYBOARD_DESC" = "一部では正しく動作しない可能性があります。 この設定を変更したあとはアプリ再起動してください。"; "OLED_KEYBOARD_DESC" = "正常に動作しない可能性があります。この設定を変更した場合、アプリ再起動が必要です。";
"HIDE_PAID_PROMOTION_CARDS" = "プロモーションを含む」 のバナーを非表示"; "HIDE_PAID_PROMOTION_CARDS" = "プロモーションバナーを非表示";
"HIDE_PAID_PROMOTION_CARDS_DESC" = "一部の動画にある「プロモーションを含む」 のバナーを非表示にします。"; "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" = "キャンセル";
@@ -0,0 +1,57 @@
// Settings
"VERSION" = "uYouPlus's version: %@";
"VERSION_CHECK" = "Tap to check for update!";
"DONT_EAT_MY_CONTENT" = "노치/아일랜드 영역이 2:1 비율 비디오를 가리지 않게 함 (DontEatMyContent)";
"DONT_EAT_MY_CONTENT_DESC" = "노치/다이내믹 아일랜드 영역이 유튜브의 2:1 비율 영상 일부를 가리는 것을 막아줍니다. 앱을 다시 시작해야 합니다.";
"REPLACE_PREVIOUS_NEXT_BUTTON" = "이전, 다음 재생 버튼 교체";
"REPLACE_PREVIOUS_NEXT_BUTTON_DESC" = "이전 재생, 다음 재생 버튼을 빨리 감기, 되감기 버튼으로 교체합니다. 앱을 다시 시작해야 합니다.";
"FIX_GOOGLE_SIGNIN" = "구글 로그인 문제 수정 (TrollStore 사용자만 해당)";
"FIX_GOOGLE_SIGNIN_DESC" = "TrollStore를 통해 설치된 앱에서만 동작합니다: 구글 계정으로 로그인하려면 이 옵션을 켜 주세요. 앱을 다시 시작해야 합니다.";
"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,57 @@
// Settings
"VERSION" = "uYouPlus's version: %@";
"VERSION_CHECK" = "Tap to check for update!";
"DONT_EAT_MY_CONTENT" = "Voorkom Notch/Eiland Bij 2:1 Video's (DontEatMyContent)";#
"DONT_EAT_MY_CONTENT_DESC" = "Voorkomt dat de video zich achter de Notch/het Dynamische Eiland bevind bij 2:1 video's. Je moet de app opnieuw opstarten om dit te activeren.";
"REPLACE_PREVIOUS_NEXT_BUTTON" = "Vervang Volgende en Vorige knoppen";
"REPLACE_PREVIOUS_NEXT_BUTTON_DESC" = "Vervang de Vorige en Volgende knoppen met spoelknoppen.";
"FIX_GOOGLE_SIGNIN" = "Fix Inloggen met Google (Alleen voor TrollStore gebruikers)";
"FIX_GOOGLE_SIGNIN_DESC" = "Zet dit aan wanneer je niet kan inloggen met je Google account en je de app hebt geïnstalleerd met Trollstore. Als je in kan loggen laat dit dan met rust. Om dit te activeren moet je de app opnieuw opstarten.";
"HIDE_PREVIOUS_AND_NEXT_BUTTON" = "Verberg vorige en volgende knoppen";
"HIDE_PREVIOUS_AND_NEXT_BUTTON_DESC" = "Verberg de vorige en volgende knop in de video speler.";
"YT_MINIPLAYER" = "Schakel de Mini Speler in voor alle video's";
"YT_MINIPLAYER_DESC" = "Video's voor kinderen bijvoorbeeld.";
"CAST_CONFIRM" = "Bevestig casten (YTCastConfirm)";
"CAST_CONFIRM_DESC" = "Toon een melding na het drukken op de cast knop om te voorkomen dat je per ongeluk cast.";
"HIDE_HOVER_CARD" = "Verberg eind scherm hover cards (YTNoHoverCards)";
"HIDE_HOVER_CARD_DESC" = "Verberg eind schermen (thumbnails) aan het einde van video's.";
"NEW_MINIPLAYER_STYLE" = "Nieuwe Mini Speler stijl (BigYTMiniPlayer)";
"NEW_MINIPLAYER_STYLE_DESC" = "Je moet de app opnieuw opstarten om dit te activeren.";
"YT_RE_EXPLORE" = "Vervang Shorts met Ontdekken (YTReExplore)";
"YT_RE_EXPLORE_DESC" = "Je moet de app opnieuw opstarten om dit te activeren.";
"HIDE_SUBTITLES_BUTTON" = "Verberg ondertitels knop";
"HIDE_SUBTITLES_BUTTON_DESC" = "Verberg de ondertitels knop in de video speler.";
"HIDE_AUTOPLAY_SWITCH" = "Verberg Autoplay schakelaar";
"HIDE_AUTOPLAY_SWITCH_DESC" = "Verberg de Autoplay schakelaar in de video speler.";
"AUTO_FULLSCREEN" = "Auto Volledig Scherm (YTAutoFullScreen)";
"AUTO_FULLSCREEN_DESC" = "Automatisch volledig scherm wanneer je een video aan klikt.";
"HIDE_HUD_MESSAGES" = "Verberg HUD Berichten";
"HIDE_HUD_MESSAGES_DESC" = "Bijvoorbeeld: CC is ingeschakeld/uitgeschakeld, Video lus is ingeschakeld,...";
"OLED_DARKMODE" = "OLED Donkere Stand (Experimenteel)";
"OLED_DARKMODE_DESC" = "Werkt mogelijk niet correct in sommige gevallen. Je moet de app opnieuw opstarten om dit te activeren.";
"OLED_KEYBOARD" = "OLED Toetsenbord (Experimenteel)";
"OLED_KEYBOARD_DESC" = "Werkt mogelijk niet correct in sommige gevallen. Je moet de app opnieuw opstarten om dit te activeren.";
"HIDE_PAID_PROMOTION_CARDS" = "Verberg Betaalde Promoties";
"HIDE_PAID_PROMOTION_CARDS_DESC" = "Verberg de 'Bevat Betaalde Promotie' in sommige video's.";
// YTCastConfirm
"CASTING" = "Castings";
"MSG_ARE_YOU_SURE" = "Weet je zeker dat je wilt casten?";
"MSG_YES" = "Ja!";
"MSG_CANCEL" = "Niet casten!";
@@ -0,0 +1,57 @@
// Settings
"VERSION" = "uYouPlus's version: %@";
"VERSION_CHECK" = "Tap to check for update!";
"DONT_EAT_MY_CONTENT" = "Zapobiega przeszkadzaniu Notcha/Island na filmach o proporcjach 2:1 (DontEatMyContent)";
"DONT_EAT_MY_CONTENT_DESC" = "Zapobiega notcha/Dynamic Island przed jedzeniem filmów o proporcjach 2:1 na YouTubie. Restart aplikacji jest wymagany.";
"REPLACE_PREVIOUS_NEXT_BUTTON" = "Zamień przyciski Poprzedni i Następny";
"REPLACE_PREVIOUS_NEXT_BUTTON_DESC" = "Zamienia przyciski Poprzedni i Następny z przyciskami Przewiń w przód i tył. Restart aplikacji jest wymagany.";
"FIX_GOOGLE_SIGNIN" = "Napraw logowanie się z Google (tylko dla użytkowników TrollStore)";
"FIX_GOOGLE_SIGNIN_DESC" = "Włącz tą opcję tylko wtedy, kiedy nie możesz zalogować się swoim kontem Google, a aplikacja została zainstalowana przez TrollStore. Jeżeli da się zalogować normalnie, zostaw to wyłączone. Restart aplikacji jest wymagany.";
"HIDE_PREVIOUS_AND_NEXT_BUTTON" = "Ukryj przyciski Poprzedni i Następny";
"HIDE_PREVIOUS_AND_NEXT_BUTTON_DESC" = "Ukryj przyciski Poprzedni i Następny w okładce sterowania filmu.";
"YT_MINIPLAYER" = "Włącz miniodtwarzach dla wszystkich filmów";
"YT_MINIPLAYER_DESC" = "Np. filmów dla dzieci.";
"CAST_CONFIRM" = "Alert przed przesyłaniem (YTCastConfirm)";
"CAST_CONFIRM_DESC" = "Pokaż alert przed przesyłaniem aby nie łączyć się przez przypadek z telewizorem.";
"HIDE_HOVER_CARD" = "Ukryj ekrany końcowe (YTNoHoverCards)";
"HIDE_HOVER_CARD_DESC" = "Ukryj ekrany końcowe (miniaturki) na końcu filmów.";
"NEW_MINIPLAYER_STYLE" = "Nowy styl miniodtwarzacza (BigYTMiniPlayer)";
"NEW_MINIPLAYER_STYLE_DESC" = "Restart aplikacji jest wymagany.";
"YT_RE_EXPLORE" = "Zamień kartę Shorts na kartę Odkrywaj (YTReExplore)";
"YT_RE_EXPLORE_DESC" = "Restart aplikacji jest wymagany.";
"HIDE_SUBTITLES_BUTTON" = "Ukryj przycisk Napisy";
"HIDE_SUBTITLES_BUTTON_DESC" = "Ukrywa przycisk Napisy w okładce odtwarzacza filmów.";
"HIDE_AUTOPLAY_SWITCH" = "Ukryj przycisk Autoodtwarzanie";
"HIDE_AUTOPLAY_SWITCH_DESC" = "Ukrywa przycisk Autoodtwarzanie w okładce odtwarzacza filmów.";
"AUTO_FULLSCREEN" = "Auto pełny ekran (YTAutoFullScreen)";
"AUTO_FULLSCREEN_DESC" = "Automaczycznie otwórz filmy w pełnym ekranie.";
"HIDE_HUD_MESSAGES" = "Ukryj komunikaty HUD";
"HIDE_HUD_MESSAGES_DESC" = "Np. Napisy są wył/wł, Odtwarzanie w pętli jest włączone, ...";
"OLED_DARKMODE" = "Tryb ciemny OLED (Eksperymentalny)";
"OLED_DARKMODE_DESC" = "Może w niektórych przypadkach nie działać. Restart aplikacji jest wymagany.";
"OLED_KEYBOARD" = "Klawiatura OLED (Eksperymentalna)";
"OLED_KEYBOARD_DESC" = "Może w niektórych przypadkach nie działać. Restart aplikacji jest wymagany.";
"HIDE_PAID_PROMOTION_CARDS" = "Ukryj baner płatnej promocji";
"HIDE_PAID_PROMOTION_CARDS_DESC" = "Ukrywa baner 'Zawiera płatną promocję' w niektórych filmach.";
// YTCastConfirm
"CASTING" = "Przesyłania";
"MSG_ARE_YOU_SURE" = "Czy na pewno chcesz przesyłać?";
"MSG_YES" = "Tak";
"MSG_CANCEL" = "Anuluj";
@@ -1,7 +1,15 @@
// Settings // Settings
"VERSION" = "Versão do uYouPlus: %@";
"VERSION_CHECK" = "Toque para verificar se há atualização!";
"KILL_APP" = "Fechar o YouTube"; "DONT_EAT_MY_CONTENT" = "Evitar o notch/Island em conteúdo de vídeo 2:1 (DontEatMyContent)";
"KILL_APP_DESC" = "Toque aqui para fechar o YouTube!"; "DONT_EAT_MY_CONTENT_DESC" = "Evita que o notch/Dynamic Island coma conteúdo de vídeo 2:1 no YouTube. A reinicialização do app é necessária.";
"REPLACE_PREVIOUS_NEXT_BUTTON" = "Substituir o botão Anterior e Próximo";
"REPLACE_PREVIOUS_NEXT_BUTTON_DESC" = "Substitui o botão Anterior e Próximo pelo botão Avançar e Retroceder. A reinicialização do app é necessária.";
"FIX_GOOGLE_SIGNIN" = "Corrigir o login do Google (somente para usuários da TrollStore)";
"FIX_GOOGLE_SIGNIN_DESC" = "Ative esta opção somente quando você não conseguir fazer login com sua conta do Google e o aplicativo foi instalado via TrollStore. Se você conseguir fazer login normalmente, mantenha-o desativado. A reinicialização do app é necessária.";
"HIDE_PREVIOUS_AND_NEXT_BUTTON" = "Ocultar botão Anterior e Próximo"; "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."; "HIDE_PREVIOUS_AND_NEXT_BUTTON_DESC" = "Oculta o botão Anterior e Próximo na sobreposição de controles de vídeo.";
@@ -1,4 +1,15 @@
/* uYouPlusSettings */ /* uYouPlusSettings */
"VERSION" = "uYouPlus's version: %@";
"VERSION_CHECK" = "Tap to check for update!";
"DONT_EAT_MY_CONTENT" = "Предотвратить выемку/остров на видеоконтенте 2:1 (DontEatMyContent)";
"DONT_EAT_MY_CONTENT_DESC" = "Не позволяйте вырезу/Dynamic Island поглощать видеоконтент 2:1 на YouTube. Требуется перезапуск приложения.";
"REPLACE_PREVIOUS_NEXT_BUTTON" = "Заменить кнопку "Назад" и "Далее";
"REPLACE_PREVIOUS_NEXT_BUTTON_DESC" = "Замените кнопки «Назад» и «Далее» на кнопки «Перемотка вперед» и «Назад». Требуется перезапуск приложения.";
"FIX_GOOGLE_SIGNIN" = "Исправить вход через Google (только для пользователя TrollStore)";
"FIX_GOOGLE_SIGNIN_DESC" = "Включайте эту опцию, только если вы не можете войти в свою учетную запись Google и приложение было установлено через TrollStore. Если вы можете нормально войти в систему, оставьте ее отключенной. Требуется перезапуск приложения.";
"HIDE_PREVIOUS_AND_NEXT_BUTTON" = "Скрыть «Пред.» и «След.»"; "HIDE_PREVIOUS_AND_NEXT_BUTTON" = "Скрыть «Пред.» и «След.»";
"HIDE_PREVIOUS_AND_NEXT_BUTTON_DESC" = "Убирает кнопки переключения видео «Следующий» и «Предыдущий» с плеера."; "HIDE_PREVIOUS_AND_NEXT_BUTTON_DESC" = "Убирает кнопки переключения видео «Следующий» и «Предыдущий» с плеера.";
@@ -1,19 +1,30 @@
// How to translate uYouPlus to your language: /* Read me:
// - How to translate uYouPlus (if your language already exists then feel free to check it and/or improve it):
// 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. 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_639-1_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!
// You can also add your localization to YouPiP here, the process is the same
// https://github.com/PoomSmart/YouPiP/tree/main/layout/Library/Application%20Support/YouPiP.bundle
//
// Settings
"KILL_APP" = "Close YouTube"; - You can also add your localization to YTABConfig, YouPiP, YTUHD, Return YouTube Dislike. The process is the same:
"KILL_APP_DESC" = "Tap here to close YouTube!"; https://github.com/PoomSmart/YTABConfig/tree/main/layout/Library/Application%20Support/YTABC.bundle
https://github.com/PoomSmart/YouPiP/tree/main/layout/Library/Application%20Support/YouPiP.bundle
https://github.com/PoomSmart/YTUHD/tree/master/layout/Library/Application%20Support/YTUHD.bundle
https://github.com/PoomSmart/Return-YouTube-Dislikes/tree/main/layout/Library/Application%20Support/RYD.bundle
*/
// Settings
"VERSION" = "uYouPlus's version: %@";
"VERSION_CHECK" = "Tap to check for update!";
"DONT_EAT_MY_CONTENT" = "Prevent Notch/Island on 2:1 Video Content (DontEatMyContent)";
"DONT_EAT_MY_CONTENT_DESC" = "Prevent the notch/Dynamic Island from munching on 2:1 video content in YouTube. App restart is required.";
"REPLACE_PREVIOUS_NEXT_BUTTON" = "Replace Previous and Next Button";
"REPLACE_PREVIOUS_NEXT_BUTTON_DESC" = "Replace Previous and Next Button with Fast forward and Rewind button. App restart is required.";
"FIX_GOOGLE_SIGNIN" = "Fix Google Sign in (for TrollStore user only)";
"FIX_GOOGLE_SIGNIN_DESC" = "Turn on this option only when you can't sign in with your Google account and the app was installed via TrollStore. If you can log in normally, keep it disabled. App restart is required.";
"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.";
@@ -1,7 +1,15 @@
// Settings // Settings
"VERSION" = "Phiên bản của uYouPlus: %@";
"VERSION_CHECK" = "Chạm để kiểm tra bản cập nhật!";
"KILL_APP" = "Đóng ứng dụng"; "DONT_EAT_MY_CONTENT" = "Ẩn tai thỏ/Dynamic Island (DontEatMyContent)";
"KILL_APP_DESC" = "Chạm để đóng YouTube!"; "DONT_EAT_MY_CONTENT_DESC" = "Ẩn tai thỏ/Dynamic Island chèn vào các video có tỷ lệ 2:1. Cần khởi động lại ứng dụng.";
"REPLACE_PREVIOUS_NEXT_BUTTON" = "Thay thế nút chuyển video";
"REPLACE_PREVIOUS_NEXT_BUTTON_DESC" = "Thay thế nút chuyển video bằng nút tua nhanh. Cần khởi động lại ứng dụng.";
"FIX_GOOGLE_SIGNIN" = "Sửa lỗi không thể đăng nhập tài khoản Google";
"FIX_GOOGLE_SIGNIN_DESC" = "Chỉ bật tính năng này khi bạn không thể đăng nhập tài khoản Google và ứng dụng được cài qua TrollStore. Nếu bạn có thể đăng nhập bình thường thì hãy tắt tính năng này. Cần khởi động lại ứng dụng.";
"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.";
@@ -1,5 +1,17 @@
// Settings // Settings
"VERSION" = "当前uYouPlus插件版本:%@";
"VERSION_CHECK" = "点击此处检查更新!";
"DONT_EAT_MY_CONTENT" = "2:1视频刘海屏/灵动岛优化 DontEatMyContent";
"DONT_EAT_MY_CONTENT_DESC" = "改进部分机型的刘海区域或灵动岛在2:1比例视频中引发的遮挡问题(缺口)。更改本设置后需要重启App。";
"REPLACE_PREVIOUS_NEXT_BUTTON" = "替换上一个/下一个按钮";
"REPLACE_PREVIOUS_NEXT_BUTTON_DESC" = "将视频播放器控制界面上的上一个/下一个按钮替换成快进/快退按钮。更改本设置后需要重启App。";
"FIX_GOOGLE_SIGNIN" = "修复Google账号登录问题(仅TrollStore用户有效)";
"FIX_GOOGLE_SIGNIN_DESC" = "仅在使用TrollStore安装本App的情况下生效:启用本设置后即可正常登录您的Google账号。更改本设置后需要重启App。";
"KILL_APP" = "关闭YouTube"; "KILL_APP" = "关闭YouTube";
"KILL_APP_DESC" = "点击此处关闭YouTube!"; "KILL_APP_DESC" = "点击此处关闭YouTube!";
@@ -9,16 +21,16 @@
"YT_MINIPLAYER" = "为所有YouTube视频启用迷你播放器"; "YT_MINIPLAYER" = "为所有YouTube视频启用迷你播放器";
"YT_MINIPLAYER_DESC" = "例如:面向儿童的视频。"; "YT_MINIPLAYER_DESC" = "例如:面向儿童的视频。";
"CAST_CONFIRM" = "投屏前确认 (YTCastConfirm)"; "CAST_CONFIRM" = "投屏前确认 YTCastConfirm";
"CAST_CONFIRM_DESC" = "在投屏前显示确认对话框以防意外劫屏。"; "CAST_CONFIRM_DESC" = "在投屏前显示确认对话框以防意外劫屏。";
"HIDE_HOVER_CARD" = "隐藏片尾画面悬浮卡片 (YTNoHoverCards)"; "HIDE_HOVER_CARD" = "隐藏片尾画面悬浮卡片 YTNoHoverCards";
"HIDE_HOVER_CARD_DESC" = "隐藏视频结尾处的创作者片尾画面元素(缩略图)。"; "HIDE_HOVER_CARD_DESC" = "隐藏视频结尾处的创作者片尾画面元素(缩略图)。";
"NEW_MINIPLAYER_STYLE" = "新迷你播放器风格 (BigYTMiniPlayer)"; "NEW_MINIPLAYER_STYLE" = "新迷你播放器风格 BigYTMiniPlayer";
"NEW_MINIPLAYER_STYLE_DESC" = "更改本设置后需要重启App。"; "NEW_MINIPLAYER_STYLE_DESC" = "更改本设置后需要重启App。";
"YT_RE_EXPLORE" = "将Shorts选项卡替换成探索选项卡 (YTReExplore)"; "YT_RE_EXPLORE" = "将Shorts选项卡替换成探索选项卡 YTReExplore";
"YT_RE_EXPLORE_DESC" = "更改本设置后需要重启App。"; "YT_RE_EXPLORE_DESC" = "更改本设置后需要重启App。";
"HIDE_SUBTITLES_BUTTON" = "隐藏字幕按钮"; "HIDE_SUBTITLES_BUTTON" = "隐藏字幕按钮";
@@ -27,11 +39,11 @@
"HIDE_AUTOPLAY_SWITCH" = "隐藏自动播放模式开关"; "HIDE_AUTOPLAY_SWITCH" = "隐藏自动播放模式开关";
"HIDE_AUTOPLAY_SWITCH_DESC" = "隐藏视频播放器控制界面上的自动播放开关。"; "HIDE_AUTOPLAY_SWITCH_DESC" = "隐藏视频播放器控制界面上的自动播放开关。";
"AUTO_FULLSCREEN" = "自动全屏 (YTAutoFullScreen)"; "AUTO_FULLSCREEN" = "自动全屏 YTAutoFullScreen";
"AUTO_FULLSCREEN_DESC" = "自动全屏播放视频。"; "AUTO_FULLSCREEN_DESC" = "自动全屏播放视频。";
"HIDE_HUD_MESSAGES" = "隐藏系统提醒"; "HIDE_HUD_MESSAGES" = "隐藏系统提醒";
"HIDE_HUD_MESSAGES_DESC" = "例如:\"已启用/停用字幕\"、\"已开启/关闭视频循环播放\"等。"; "HIDE_HUD_MESSAGES_DESC" = "例如:已启用/停用字幕”、“已开启/关闭视频循环播放等。";
"OLED_DARKMODE" = "OLED 深色模式(实验性功能)"; "OLED_DARKMODE" = "OLED 深色模式(实验性功能)";
"OLED_DARKMODE_DESC" = "在某些情况下可能不会正常工作。更改本设置后需要重启App。"; "OLED_DARKMODE_DESC" = "在某些情况下可能不会正常工作。更改本设置后需要重启App。";
@@ -40,10 +52,10 @@
"OLED_KEYBOARD_DESC" = "在某些情况下可能不会正常工作。更改本设置后需要重启App。"; "OLED_KEYBOARD_DESC" = "在某些情况下可能不会正常工作。更改本设置后需要重启App。";
"HIDE_PAID_PROMOTION_CARDS" = "隐藏付费宣传内容提醒横幅"; "HIDE_PAID_PROMOTION_CARDS" = "隐藏付费宣传内容提醒横幅";
"HIDE_PAID_PROMOTION_CARDS_DESC" = "隐藏出现在部分视频中的\"包含付费宣传内容\"横幅。"; "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" = "取消";
@@ -1,4 +1,15 @@
// Settings // Settings
"VERSION" = "uYouPlus's version: %@";
"VERSION_CHECK" = "Tap to check for update!";
"DONT_EAT_MY_CONTENT" = "2:1影片瀏海/動態島優化 DontEatMyContent";
"DONT_EAT_MY_CONTENT_DESC" = "改進部分機型的瀏海區域或動態島在2:1比例影片中引發的遮擋問題。需要重新啟動應用程式。";
"REPLACE_PREVIOUS_NEXT_BUTTON" = "替換上一個/下一個按鈕";
"REPLACE_PREVIOUS_NEXT_BUTTON_DESC" = "將影片播放器控制介面上的上一個/下一個按鈕替換成快進/快退按鈕。需要重新啟動應用程式。";
"FIX_GOOGLE_SIGNIN" = "修復Google帳號登入問題(僅TrollStore用戶有效)";
"FIX_GOOGLE_SIGNIN_DESC" = "僅在使用TrollStore安裝本App的情況下生效:啟用本設置後即可正常登錄您的Google帳號。需要重新啟動應用程式。";
"HIDE_PREVIOUS_AND_NEXT_BUTTON" = "隱藏上一個和下一個按鈕"; "HIDE_PREVIOUS_AND_NEXT_BUTTON" = "隱藏上一個和下一個按鈕";
"HIDE_PREVIOUS_AND_NEXT_BUTTON_DESC" = "在影片控制層中隱藏上一個和下一個按鈕"; "HIDE_PREVIOUS_AND_NEXT_BUTTON_DESC" = "在影片控制層中隱藏上一個和下一個按鈕";
+464 -66
View File
@@ -2,6 +2,8 @@
#import <Foundation/Foundation.h> #import <Foundation/Foundation.h>
#import <objc/runtime.h> #import <objc/runtime.h>
#import <dlfcn.h> #import <dlfcn.h>
#import <sys/utsname.h>
#import <substrate.h>
#import "Header.h" #import "Header.h"
#import "Tweaks/YouTubeHeader/YTVideoQualitySwitchOriginalController.h" #import "Tweaks/YouTubeHeader/YTVideoQualitySwitchOriginalController.h"
#import "Tweaks/YouTubeHeader/YTPlayerViewController.h" #import "Tweaks/YouTubeHeader/YTPlayerViewController.h"
@@ -12,10 +14,12 @@
#import "Tweaks/YouTubeHeader/YTIPivotBarRenderer.h" #import "Tweaks/YouTubeHeader/YTIPivotBarRenderer.h"
#import "Tweaks/YouTubeHeader/YTIBrowseRequest.h" #import "Tweaks/YouTubeHeader/YTIBrowseRequest.h"
#import "Tweaks/YouTubeHeader/YTCommonColorPalette.h" #import "Tweaks/YouTubeHeader/YTCommonColorPalette.h"
#import "Tweaks/YouTubeHeader/YTColorPalette.h"
#import "Tweaks/YouTubeHeader/ASCollectionView.h" #import "Tweaks/YouTubeHeader/ASCollectionView.h"
#import "Tweaks/YouTubeHeader/YTPlayerOverlay.h" #import "Tweaks/YouTubeHeader/YTPlayerOverlay.h"
#import "Tweaks/YouTubeHeader/YTPlayerOverlayProvider.h" #import "Tweaks/YouTubeHeader/YTPlayerOverlayProvider.h"
#import "Tweaks/YouTubeHeader/YTReelWatchPlaybackOverlayView.h"
#import "Tweaks/YouTubeHeader/YTReelPlayerBottomButton.h"
#import "Tweaks/YouTubeHeader/YTReelPlayerViewController.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() {
@@ -23,12 +27,34 @@ NSBundle *uYouPlusBundle() {
static dispatch_once_t onceToken; static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{ dispatch_once(&onceToken, ^{
NSString *tweakBundlePath = [[NSBundle mainBundle] pathForResource:@"uYouPlus" ofType:@"bundle"]; NSString *tweakBundlePath = [[NSBundle mainBundle] pathForResource:@"uYouPlus" ofType:@"bundle"];
bundle = [NSBundle bundleWithPath:tweakBundlePath]; if (tweakBundlePath)
bundle = [NSBundle bundleWithPath:tweakBundlePath];
else
bundle = [NSBundle bundleWithPath:@"/Library/Application Support/uYouPlus.bundle"];
}); });
return bundle; return bundle;
} }
NSBundle *tweakBundle = uYouPlusBundle(); NSBundle *tweakBundle = uYouPlusBundle();
// Keychain patching
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"];
@@ -72,12 +98,20 @@ BOOL ytMiniPlayer() {
BOOL hidePaidPromotionCard() { BOOL hidePaidPromotionCard() {
return [[NSUserDefaults standardUserDefaults] boolForKey:@"hidePaidPromotionCard_enabled"]; return [[NSUserDefaults standardUserDefaults] boolForKey:@"hidePaidPromotionCard_enabled"];
} }
BOOL fixGoogleSignIn() {
return [[NSUserDefaults standardUserDefaults] boolForKey:@"fixGoogleSignIn_enabled"];
}
BOOL replacePreviousAndNextButton() {
return [[NSUserDefaults standardUserDefaults] boolForKey:@"replacePreviousAndNextButton_enabled"];
}
BOOL dontEatMyContent() {
return [[NSUserDefaults standardUserDefaults] boolForKey:@"dontEatMyContent_enabled"];
}
# pragma mark - Tweaks # pragma mark - Tweaks
// Enable Reorder videos from playlist while on the Watch page - @PoomSmart // Skips content warning before playing *some videos - @PoomSmart
%hook YTIPlaylistPanelVideoRenderer %hook YTPlayabilityResolutionUserActionUIController
%new - (void)showConfirmAlert { [self confirmAlertDidPressConfirm]; }
- (BOOL)canReorder { return YES; }
%end %end
// YTMiniPlayerEnabler: https://github.com/level3tjg/YTMiniplayerEnabler/ // YTMiniPlayerEnabler: https://github.com/level3tjg/YTMiniplayerEnabler/
@@ -88,7 +122,7 @@ BOOL hidePaidPromotionCard() {
} }
%end %end
// Hide CC / Autoplay switch / Next & Previous button // Hide CC / Autoplay switch
%hook YTMainAppControlsOverlayView %hook YTMainAppControlsOverlayView
- (void)setClosedCaptionsOrSubtitlesButtonAvailable:(BOOL)arg1 { // hide CC button - (void)setClosedCaptionsOrSubtitlesButtonAvailable:(BOOL)arg1 { // hide CC button
if (hideCC()) { return %orig(NO); } if (hideCC()) { return %orig(NO); }
@@ -98,15 +132,22 @@ BOOL hidePaidPromotionCard() {
if (hideAutoplaySwitch()) {} if (hideAutoplaySwitch()) {}
else { return %orig; } else { return %orig; }
} }
- (void)layoutSubviews { // hide Next & Previous button %end
%orig;
if (hidePreviousAndNextButton()) { // Hide Next & Previous button
MSHookIvar<YTMainAppControlsOverlayView *>(self, "_nextButton").hidden = YES; %group gHidePreviousAndNextButton
MSHookIvar<YTMainAppControlsOverlayView *>(self, "_previousButton").hidden = YES; %hook YTColdConfig
MSHookIvar<YTTransportControlsButtonView *>(self, "_nextButtonView").hidden = YES; - (BOOL)removeNextPaddleForSingletonVideos { return YES; }
MSHookIvar<YTTransportControlsButtonView *>(self, "_previousButtonView").hidden = YES; - (BOOL)removePreviousPaddleForSingletonVideos { return YES; }
} %end
} %end
// Replace Next & Previous button with Fast forward & Rewind button
%group gReplacePreviousAndNextButton
%hook YTColdConfig
- (BOOL)replaceNextPaddleWithFastForwardButtonForSingletonVods { return YES; }
- (BOOL)replacePreviousPaddleWithRewindButtonForSingletonVods { return YES; }
%end
%end %end
// Hide HUD Messages // Hide HUD Messages
@@ -175,16 +216,18 @@ BOOL hidePaidPromotionCard() {
} }
%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 %end
// Workaround for https://github.com/MiRO92/uYou-for-YouTube/issues/94 // Workaround for https://github.com/MiRO92/uYou-for-YouTube/issues/94
%hook YTELMView %hook UIResponder
%new %new
- (id)entry { - (id)entry {
return nil; return nil;
} }
%end %end
@@ -192,7 +235,17 @@ BOOL hidePaidPromotionCard() {
%hook YTLocalPlaybackController %hook YTLocalPlaybackController
%new %new
- (id)activeVideoController { - (id)activeVideoController {
return [self activeVideo]; 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
@@ -212,7 +265,9 @@ BOOL hidePaidPromotionCard() {
// YouRememberCaption: https://poomsmart.github.io/repo/depictions/youremembercaption.html // YouRememberCaption: https://poomsmart.github.io/repo/depictions/youremembercaption.html
%hook YTColdConfig %hook YTColdConfig
- (BOOL)respectDeviceCaptionSetting { return NO; } - (BOOL)respectDeviceCaptionSetting { return NO; }
- (BOOL)shouldUseAppThemeSetting { return YES; } // v16.xx - (BOOL)isLandscapeEngagementPanelSwipeRightToDismissEnabled { return YES; }
// Fix uYou's label glitching - qnblackcat/uYouPlus#552
- (BOOL)mainAppCoreClientIosTransientVisualGlitchInPivotBarFix { return NO; }
%end %end
// NOYTPremium - https://github.com/PoomSmart/NoYTPremium/ // NOYTPremium - https://github.com/PoomSmart/NoYTPremium/
@@ -242,17 +297,29 @@ BOOL hidePaidPromotionCard() {
- (void)showSurveyWithRenderer:(id)arg1 surveyParentResponder:(id)arg2 {} - (void)showSurveyWithRenderer:(id)arg1 surveyParentResponder:(id)arg2 {}
%end %end
// Enable Shorts scroll bar - @PoomSmart // YTShortsProgress - @PoomSmart - https://github.com/PoomSmart/YTShortsProgress
%hook YTReelPlayerViewController %hook YTReelPlayerViewController
- (BOOL)shouldEnablePlayerBar { return YES; }
- (BOOL)shouldAlwaysEnablePlayerBar { return YES; } - (BOOL)shouldAlwaysEnablePlayerBar { return YES; }
- (BOOL)shouldEnablePlayerBarOnlyOnPause { return NO; }
%end
%hook YTReelPlayerViewControllerSub
- (BOOL)shouldEnablePlayerBar { return YES; }
- (BOOL)shouldAlwaysEnablePlayerBar { return YES; }
- (BOOL)shouldEnablePlayerBarOnlyOnPause { return NO; }
%end %end
%hook YTInlinePlayerBarContainerView %hook YTInlinePlayerBarContainerView
- (void)setUserInteractionEnabled:(BOOL)enabled { %orig(YES); } - (void)setUserInteractionEnabled:(BOOL)enabled { %orig(YES); }
%end %end
%hook YTReelPlayerViewControllerSub // v16.42.3 - @level3tjg: https://reddit.com/r/jailbreak/comments/v29yvk/_/iasl1l0/ %hook YTColdConfig
- (BOOL)shouldEnablePlayerBar { return YES; } - (BOOL)iosEnableVideoPlayerScrubber { return YES; }
%end
%hook YTHotConfig
- (BOOL)enablePlayerBarForVerticalVideoWhenControlsHiddenInFullscreen { return YES; }
%end %end
// Workaround for issue #54 // Workaround for issue #54
@@ -261,7 +328,67 @@ BOOL hidePaidPromotionCard() {
if ([[NSUserDefaults standardUserDefaults] boolForKey:@"relatedVideosAtTheEndOfYTVideos"] == NO) {} if ([[NSUserDefaults standardUserDefaults] boolForKey:@"relatedVideosAtTheEndOfYTVideos"] == NO) {}
else { return %orig; } else { return %orig; }
} }
%end %end
// 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 YTReelContentView
- (void)didTapOverflowButton:(id)sender {
}
%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 // Hide YouTube Shorts banner in Home page? - @MiRO92 - YTNoShorts: https://github.com/MiRO92/YTNoShorts
%hook YTAsyncCollectionView %hook YTAsyncCollectionView
@@ -340,6 +467,14 @@ BOOL hidePaidPromotionCard() {
- (NSString *)bundleId { return YT_BUNDLE_ID; } - (NSString *)bundleId { return YT_BUNDLE_ID; }
%end %end
%hook APMAEU
+ (BOOL)isFAS { return YES; }
%end
%hook GULAppEnvironmentUtil
+ (BOOL)isFromAppStore { return YES; }
%end
%hook SSOConfiguration %hook SSOConfiguration
- (id)initWithClientID:(id)clientID supportedAccountServices:(id)supportedAccountServices { - (id)initWithClientID:(id)clientID supportedAccountServices:(id)supportedAccountServices {
self = %orig; self = %orig;
@@ -369,6 +504,73 @@ BOOL hidePaidPromotionCard() {
} }
%end %end
// Fix "Google couldn't confirm this attempt to sign in is safe. If you think this is a mistake, you can close and try again to sign in" - qnblackcat/uYouPlus#420
// Thanks to @AhmedBafkir and @kkirby - https://github.com/qnblackcat/uYouPlus/discussions/447#discussioncomment-3672881
%group gFixGoogleSignIn
%hook SSORPCService
+ (id)URLFromURL:(id)arg1 withAdditionalFragmentParameters:(NSDictionary *)arg2 {
NSURL *orig = %orig;
NSURLComponents *urlComponents = [[NSURLComponents alloc] initWithURL:orig resolvingAgainstBaseURL:NO];
NSMutableArray *newQueryItems = [urlComponents.queryItems mutableCopy];
for (NSURLQueryItem *queryItem in urlComponents.queryItems) {
if ([queryItem.name isEqualToString:@"system_version"]
|| [queryItem.name isEqualToString:@"app_version"]
|| [queryItem.name isEqualToString:@"kdlc"]
|| [queryItem.name isEqualToString:@"kss"]
|| [queryItem.name isEqualToString:@"lib_ver"]
|| [queryItem.name isEqualToString:@"device_model"]) {
[newQueryItems removeObject:queryItem];
}
}
urlComponents.queryItems = [newQueryItems copy];
return urlComponents.URL;
}
%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
/*
%group gDevice_challenge_request_hack
%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
%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* raisedColor = [UIColor colorWithRed:0.035 green:0.035 blue:0.035 alpha:1.0];
%group gOLED %group gOLED
@@ -411,39 +613,6 @@ UIColor* raisedColor = [UIColor colorWithRed:0.035 green:0.035 blue:0.035 alpha:
} }
%end %end
%hook YTColorPalette // v16.42.3
- (UIColor *)brandBackgroundSolid {
if (self.pageStyle == 1) {
return [UIColor blackColor];
}
return %orig;
}
- (UIColor *)brandBackgroundPrimary {
if (self.pageStyle == 1) {
return [UIColor blackColor];
}
return %orig;
}
- (UIColor *)brandBackgroundSecondary {
if (self.pageStyle == 1) {
return [[UIColor blackColor] colorWithAlphaComponent:0.9];
}
return %orig;
}
- (UIColor *)staticBrandBlack {
if (self.pageStyle == 1) {
return [UIColor blackColor];
}
return %orig;
}
- (UIColor *)generalBackgroundA {
if (self.pageStyle == 1) {
return [UIColor blackColor];
}
return %orig;
}
%end
// Account view controller // Account view controller
%hook YTAccountPanelBodyViewController %hook YTAccountPanelBodyViewController
- (UIColor *)backgroundColor:(NSInteger)pageStyle { - (UIColor *)backgroundColor:(NSInteger)pageStyle {
@@ -469,7 +638,7 @@ UIColor* raisedColor = [UIColor colorWithRed:0.035 green:0.035 blue:0.035 alpha:
- (void)didMoveToWindow { - (void)didMoveToWindow {
%orig; %orig;
if (isDarkMode() && [self.nextResponder isKindOfClass:%c(_ASDisplayView)]) { if (isDarkMode() && [self.nextResponder isKindOfClass:%c(_ASDisplayView)]) {
self.superview.backgroundColor = [UIColor clearColor]; self.superview.backgroundColor = [UIColor blackColor];
} }
} }
%end %end
@@ -594,7 +763,6 @@ UIColor* raisedColor = [UIColor colorWithRed:0.035 green:0.035 blue:0.035 alpha:
if ([self.accessibilityIdentifier isEqualToString:@"rich_header"]) { self.backgroundColor = [UIColor blackColor]; } if ([self.accessibilityIdentifier isEqualToString:@"rich_header"]) { self.backgroundColor = [UIColor blackColor]; }
if ([self.accessibilityIdentifier isEqualToString:@"id.ui.comment_cell"]) { self.backgroundColor = [UIColor blackColor]; } if ([self.accessibilityIdentifier isEqualToString:@"id.ui.comment_cell"]) { self.backgroundColor = [UIColor blackColor]; }
if ([self.accessibilityIdentifier isEqualToString:@"id.ui.cancel.button"]) { self.superview.backgroundColor = [UIColor clearColor]; } if ([self.accessibilityIdentifier isEqualToString:@"id.ui.cancel.button"]) { self.superview.backgroundColor = [UIColor clearColor]; }
if ([self.accessibilityIdentifier isEqualToString:@"id.elements.components.filter_chip_bar"]) { self.backgroundColor = [UIColor blackColor]; }
if ([self.accessibilityIdentifier isEqualToString:@"id.elements.components.comment_composer"]) { self.backgroundColor = [UIColor blackColor]; } 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 = [UIColor blackColor]; } if ([self.accessibilityIdentifier isEqualToString:@"id.elements.components.video_list_entry"]) { self.backgroundColor = [UIColor blackColor]; }
if ([self.accessibilityIdentifier isEqualToString:@"id.comment.guidelines_text"]) { self.superview.backgroundColor = [UIColor blackColor]; } if ([self.accessibilityIdentifier isEqualToString:@"id.comment.guidelines_text"]) { self.superview.backgroundColor = [UIColor blackColor]; }
@@ -627,6 +795,7 @@ UIColor* raisedColor = [UIColor colorWithRed:0.035 green:0.035 blue:0.035 alpha:
- (void)didMoveToWindow { - (void)didMoveToWindow {
%orig; %orig;
if (isDarkMode()) { if (isDarkMode()) {
self.backgroundColor = raisedColor;
self.subviews[1].backgroundColor = raisedColor; self.subviews[1].backgroundColor = raisedColor;
self.superview.backgroundColor = raisedColor; self.superview.backgroundColor = raisedColor;
} }
@@ -728,6 +897,205 @@ static void replaceTab(YTIGuideResponse *response) {
%end %end
%end %end
// DontEatMyContent - @therealFoxster: https://github.com/therealFoxster/DontEatMyContent
double aspectRatio = 16/9;
bool zoomedToFill = false;
MLHAMSBDLSampleBufferRenderingView *renderingView;
NSLayoutConstraint *widthConstraint, *heightConstraint, *centerXConstraint, *centerYConstraint;
%group gDontEatMyContent
%hook YTPlayerViewController
- (void)viewDidAppear:(BOOL)animated {
YTPlayerView *playerView = [self playerView];
UIView *renderingViewContainer = MSHookIvar<UIView *>(playerView, "_renderingViewContainer");
renderingView = [playerView renderingView];
CGFloat constant = 23; // Make renderingView a bit larger since safe area has sizeable margins from the notch and side borders; tested on iPhone 13 mini
widthConstraint = [renderingView.widthAnchor constraintEqualToAnchor:renderingViewContainer.safeAreaLayoutGuide.widthAnchor constant:constant];
heightConstraint = [renderingView.heightAnchor constraintEqualToAnchor:renderingViewContainer.safeAreaLayoutGuide.heightAnchor constant:constant];
centerXConstraint = [renderingView.centerXAnchor constraintEqualToAnchor:renderingViewContainer.centerXAnchor];
centerYConstraint = [renderingView.centerYAnchor constraintEqualToAnchor:renderingViewContainer.centerYAnchor];
// playerView.backgroundColor = [UIColor greenColor];
// renderingViewContainer.backgroundColor = [UIColor redColor];
// renderingView.backgroundColor = [UIColor blueColor];
YTMainAppVideoPlayerOverlayViewController *activeVideoPlayerOverlay = [self activeVideoPlayerOverlay];
// Must check class since YTInlineMutedPlaybackPlayerOverlayViewController doesn't have -(BOOL)isFullscreen
if ([NSStringFromClass([activeVideoPlayerOverlay class]) isEqualToString:@"YTMainAppVideoPlayerOverlayViewController"] && [activeVideoPlayerOverlay isFullscreen]) {
activate();
} else {
center();
}
%orig(animated);
}
- (void)didPressToggleFullscreen {
YTMainAppVideoPlayerOverlayViewController *activeVideoPlayerOverlay = [self activeVideoPlayerOverlay];
if (![activeVideoPlayerOverlay isFullscreen]) // Entering fullscreen
activate();
else // Exiting fullscreen
deactivate();
%orig;
}
- (void)didSwipeToEnterFullscreen {
%orig; activate();
}
- (void)didSwipeToExitFullscreen {
%orig; deactivate();
}
// Get video aspect ratio; doesn't work for some users; see -(void)resetForVideoWithAspectRatio:(double)
- (void)singleVideo:(id)arg1 aspectRatioDidChange:(CGFloat)arg2 {
aspectRatio = arg2;
if (aspectRatio == 0.0) {
// App backgrounded
} else if (aspectRatio < THRESHOLD) {
deactivate();
} else {
activate();
}
%orig(arg1, arg2);
}
%end
%hook YTVideoZoomOverlayView
- (void)didRecognizePinch:(UIPinchGestureRecognizer *)pinchGestureRecognizer {
// %log((CGFloat) [pinchGestureRecognizer scale], (CGFloat) [pinchGestureRecognizer velocity]);
if ([pinchGestureRecognizer velocity] <= 0.0) { // >>Zoom out<<
zoomedToFill = false;
activate();
} else if ([pinchGestureRecognizer velocity] > 0.0) { // <<Zoom in>>
zoomedToFill = true;
deactivate();
}
%orig(pinchGestureRecognizer);
}
- (void)flashAndHideSnapIndicator {}
// https://github.com/lgariv/UniZoom/blob/master/Tweak.xm
- (void)setSnapIndicatorVisible:(bool)arg1 {
%orig(NO);
}
%end
%hook YTVideoZoomOverlayController
// Get video aspect ratio; fallback for -(void)singleVideo:(id)aspectRatioDidChange:(CGFloat)
- (void)resetForVideoWithAspectRatio:(double)arg1 {
aspectRatio = arg1;
%log;
if (aspectRatio == 0.0) {}
else if (aspectRatio < THRESHOLD) {
deactivate();
} else {
activate();
}
%orig(arg1);
}
%end
%end // gDontEatMyContent
// DontEatMycontent - detecting device model
// https://stackoverflow.com/a/11197770/19227228
NSString* deviceName() {
struct utsname systemInfo;
uname(&systemInfo);
return [NSString stringWithCString:systemInfo.machine encoding:NSUTF8StringEncoding];
}
BOOL isDeviceSupported() {
NSString *identifier = deviceName();
NSArray *unsupportedDevices = UNSUPPORTED_DEVICES;
for (NSString *device in unsupportedDevices) {
if ([device isEqualToString:identifier]) {
return NO;
}
}
if ([identifier containsString:@"iPhone"]) {
NSString *model = [identifier stringByReplacingOccurrencesOfString:@"iPhone" withString:@""];
model = [model stringByReplacingOccurrencesOfString:@"," withString:@"."];
if ([identifier isEqualToString:@"iPhone13,1"]) { // iPhone 12 mini
return YES;
} else if ([model floatValue] >= 14.0) { // iPhone 13 series and newer
return YES;
} else return NO;
} else return NO;
}
void activate() {
if (aspectRatio < THRESHOLD || zoomedToFill) return;
// NSLog(@"activate");
center();
renderingView.translatesAutoresizingMaskIntoConstraints = NO;
widthConstraint.active = YES;
heightConstraint.active = YES;
}
void deactivate() {
// NSLog(@"deactivate");
center();
renderingView.translatesAutoresizingMaskIntoConstraints = YES;
widthConstraint.active = NO;
heightConstraint.active = NO;
}
void center() {
centerXConstraint.active = YES;
centerYConstraint.active = YES;
}
// YTSpeed - https://github.com/Lyvendia/YTSpeed
%hook YTVarispeedSwitchController
- (id)init {
id result = %orig;
const int size = 12;
float speeds[] = {0.25, 0.5, 0.75, 1.0, 1.25, 1.5, 1.75, 2.0, 2.25, 2.5, 2.75, 3.0};
id varispeedSwitchControllerOptions[size];
for (int i = 0; i < size; ++i) {
id title = [NSString stringWithFormat:@"%.2fx", speeds[i]];
varispeedSwitchControllerOptions[i] = [[%c(YTVarispeedSwitchControllerOption) alloc] initWithTitle:title rate:speeds[i]];
}
NSUInteger count = sizeof(varispeedSwitchControllerOptions) / sizeof(id);
NSArray *varispeedArray = [NSArray arrayWithObjects:varispeedSwitchControllerOptions count:count];
MSHookIvar<NSArray *>(self, "_options") = varispeedArray;
return result;
}
%end
%hook MLHAMQueuePlayer
- (void)setRate:(float)rate {
MSHookIvar<float>(self, "_rate") = rate;
MSHookIvar<float>(self, "_preferredRate") = rate;
id player = MSHookIvar<HAMPlayerInternal *>(self, "_player");
[player setRate: rate];
id stickySettings = MSHookIvar<MLPlayerStickySettings *>(self, "_stickySettings");
[stickySettings setRate: rate];
[self.playerEventCenter broadcastRateChange: rate];
YTSingleVideoController *singleVideoController = self.delegate;
[singleVideoController playerRateDidChange: rate];
}
%end
%hook YTPlayerViewController
%property float playbackRate;
- (void)singleVideo:(id)video playbackRateDidChange:(float)rate {
%orig;
}
%end
// iOS 16 uYou crash fix - @level3tjg: https://github.com/qnblackcat/uYouPlus/pull/224 // iOS 16 uYou crash fix - @level3tjg: https://github.com/qnblackcat/uYouPlus/pull/224
%group iOS16 %group iOS16
%hook OBPrivacyLinkButton %hook OBPrivacyLinkButton
@@ -750,9 +1118,6 @@ static void replaceTab(YTIGuideResponse *response) {
# pragma mark - ctor # pragma mark - ctor
%ctor { %ctor {
%init; %init;
if (![[[[NSUserDefaults standardUserDefaults] dictionaryRepresentation] allKeys] containsObject:@"relatedVideosAtTheEndOfYTVideos"]) {
[[NSUserDefaults standardUserDefaults] setBool:YES forKey:@"relatedVideosAtTheEndOfYTVideos"];
}
if (oled()) { if (oled()) {
%init(gOLED); %init(gOLED);
} }
@@ -765,7 +1130,40 @@ static void replaceTab(YTIGuideResponse *response) {
if (bigYTMiniPlayer() && (UIDevice.currentDevice.userInterfaceIdiom != UIUserInterfaceIdiomPad)) { if (bigYTMiniPlayer() && (UIDevice.currentDevice.userInterfaceIdiom != UIUserInterfaceIdiomPad)) {
%init(Main); %init(Main);
} }
if (hidePreviousAndNextButton()) {
%init(gHidePreviousAndNextButton);
}
if (replacePreviousAndNextButton()) {
%init(gReplacePreviousAndNextButton);
}
if (dontEatMyContent() && isDeviceSupported()) {
%init(gDontEatMyContent);
}
if (@available(iOS 16, *)) { if (@available(iOS 16, *)) {
%init(iOS16); %init(iOS16);
} }
} if (!fixGoogleSignIn()) {
%init(gFixGoogleSignIn);
}
// Disable broken options of uYou
[[NSUserDefaults standardUserDefaults] setBool:NO forKey:@"removeYouTubeAds"];
[[NSUserDefaults standardUserDefaults] setBool:NO forKey:@"disableAgeRestriction"];
// Change the default value of some uYou's options
if (![[[[NSUserDefaults standardUserDefaults] dictionaryRepresentation] allKeys] containsObject:@"relatedVideosAtTheEndOfYTVideos"]) {
[[NSUserDefaults standardUserDefaults] setBool:YES forKey:@"relatedVideosAtTheEndOfYTVideos"];
}
if (![[[[NSUserDefaults standardUserDefaults] dictionaryRepresentation] allKeys] containsObject:@"uYouButtonVideoControlsOverlay"]) {
[[NSUserDefaults standardUserDefaults] setBool:NO forKey:@"uYouButtonVideoControlsOverlay"];
}
if (![[[[NSUserDefaults standardUserDefaults] dictionaryRepresentation] allKeys] containsObject:@"uYouPiPButtonVideoControlsOverlay"]) {
[[NSUserDefaults standardUserDefaults] setBool:NO forKey:@"uYouPiPButtonVideoControlsOverlay"];
}
// if (![[[[NSUserDefaults standardUserDefaults] dictionaryRepresentation] allKeys] containsObject:@"uYouRepeatButtonVideoControlsOverlay"]) {
// [[NSUserDefaults standardUserDefaults] setBool:NO forKey:@"uYouRepeatButtonVideoControlsOverlay"];
// }
// if (![[[[NSUserDefaults standardUserDefaults] dictionaryRepresentation] allKeys] containsObject:@"uYouRightRotateButtonVideoControlsOverlay"]) {
// [[NSUserDefaults standardUserDefaults] setBool:NO forKey:@"uYouRightRotateButtonVideoControlsOverlay"];
// }
}