Compare commits

..
Author SHA1 Message Date
qnblackcat 82de8d62ac v17.48.2-2.1 2022-12-12 09:28:46 +07:00
qnblackcat 881d6292aa Hide search ads by @PoomSmart 2022-12-12 09:28:11 +07:00
Nguyễn Đạt 1150659ea1 Merge pull request #754 from qnblackcat/3503754715
[Auto-generated] Submodule Updates 3503754715
2022-12-12 02:18:28 +07:00
github-actions a61882280e updating submodules 2022-12-11 19:17:36 +00:00
Nguyễn Đạt 5aec68985f Merge pull request #753 from qnblackcat/3503754715
[Auto-generated] Submodule Updates 3503754715
2022-12-12 00:57:51 +07:00
github-actions 37bbbbf369 updating submodules 2022-12-11 17:57:37 +00:00
Nguyễn Đạt 33deba766a Merge pull request #695 from olivertzeng/patch-1
update
2022-12-11 11:47:48 +07:00
Oliver Tzeng 1f3707a3f2 done 2022-12-11 11:20:06 +08:00
Nguyễn Đạt 396515d600 Merge pull request #747 from qnblackcat/3503754715
[Auto-generated] Submodule Updates 3503754715
2022-12-10 12:27:20 +07:00
github-actions a61405c3fb updating submodules 2022-12-10 05:25:59 +00:00
Nguyễn Đạt 76837d0ce7 Merge pull request #731 from qnblackcat/3503754715
[Auto-generated] Submodule Updates 3503754715
2022-12-04 21:05:19 +07:00
github-actions 5475c77d52 updating submodules 2022-12-04 14:04:25 +00:00
Nguyễn Đạt e81e6ff159 Merge pull request #723 from qnblackcat/3503754715
[Auto-generated] Submodule Updates 3503754715
2022-11-30 21:18:50 +07:00
github-actions d6694e4e14 updating submodules 2022-11-30 14:18:17 +00:00
qnblackcat 90cd7cd3dd improvements 2022-11-30 21:16:59 +07:00
Nguyễn Đạt dc53dd2578 Merge pull request #720 from yodaluca23/patch-2
Minor changes to bug template
2022-11-29 07:34:34 +07:00
Nguyễn Đạt bd37e43070 Update bug.md 2022-11-29 07:34:00 +07:00
Luca LeBlanc 544f6b57c4 Update bug.md 2022-11-28 18:20:30 -06:00
Luca LeBlanc 43984cc2a6 Minor changes to bug template
Minor changes to the bug template, including clarification of where the title goes as I have seen lots of people change the name of their issue after the original creation.
2022-11-28 17:40:22 -06:00
Nguyễn Đạt 5bfc931a02 Merge pull request #701 from arichorn/patch-1
Update buildapp.yml dependences
2022-11-26 19:35:38 +07:00
Aric 2e2c364b44 Update dependences
also removes Deprecation Errors
2022-11-23 13:55:32 -06:00
Nguyễn Đạt 3e63708ac8 Merge pull request #697 from qnblackcat/3503754715
[Auto-generated] Submodule Updates 3503754715
2022-11-19 20:45:25 +07:00
github-actions fd603e902c updating submodules 2022-11-19 13:44:58 +00:00
Oliver Tzeng f9de2d7b8d update
improvements
2022-11-19 09:52:42 +08:00
Nguyễn Đạt 49ace6eb4d Merge pull request #680 from therealFoxster/main
Update DontEatMyContent (v1.0.4 -> v1.0.5)
2022-11-16 06:39:17 +07:00
foxster-mp4 c42d2b85c9 Update DontEatMyContent (v1.0.4 -> v1.0.5)
Fix engagement panel layout in full screen (check when engagement panel is presented/dismissed and activate/deactivate tweak accordingly)

Use different (proper) method to detect new video played

Refactored
2022-11-15 10:48:36 -08:00
Nguyễn Đạt 880f92f2f6 Merge pull request #674 from qnblackcat/3272866751
[Auto-generated] Submodule Updates 3272866751
2022-11-14 20:58:55 +07:00
github-actions 4387a27214 updating submodules 2022-11-14 13:58:25 +00:00
qnblackcat aed43dc389 edit bundle name/ app name 2022-11-12 20:47:03 +07:00
Nguyễn Đạt 9edcd82315 Merge pull request #670 from therealFoxster/main
Update DontEatMyContent (1.0.3 -> 1.0.4)
2022-11-12 15:35:32 +07:00
foxster-mp4 acc86a1bf6 Update DontEatMyContent (1.0.3 -> 1.0.4)
Compatible with YouTube's pinch-to-zoom feature

Fix crash due to dangly constraint

Better zoomed-to-fill detection

Bye bye backwards compatibility (remove old code that was kept to support older YouTube versions)

Rename & add prefix to functions
2022-11-11 22:04:25 -08:00
Nguyễn Đạt 635b0673b4 Merge pull request #655 from dayanch96/patch-3
Change CastConfirm's alert to YTAlertView
2022-11-12 08:44:40 +07:00
Nguyễn Đạt 6b60f22eaf Update README.md 2022-11-07 21:44:31 +07:00
Nguyễn Đạt 65fd05f5db Update README.md 2022-11-07 21:43:12 +07:00
dayanch96 908caaf047 fixed bundle name 2022-11-07 04:28:16 +02:00
dayanch96 276ce261a5 Change CastConfirm's alert to YTAlertView 2022-11-07 04:25:53 +02:00
Nguyễn Đạt da03ae08a6 Merge pull request #652 from qnblackcat/3272866751
[Auto-generated] Submodule Updates 3272866751
2022-11-06 16:47:42 +07:00
github-actions 2f9b656acd updating submodules 2022-11-06 09:47:18 +00:00
Nguyễn Đạt 9c8486d017 No more hacky fix 2022-11-06 16:46:27 +07:00
qnblackcat e71069e678 fix compiling 2022-11-06 15:06:09 +07:00
qnblackcat 0e1e6d4396 v17.43.1-2.1 2022-11-06 11:22:41 +07:00
qnblackcat 6b3026159c clean up 2022-11-06 11:22:31 +07:00
qnblackcat 8aff0035ac Temporarily disable YTNoCheckLocalNetwork 2022-11-06 11:22:22 +07:00
qnblackcat b846e6e45e update Header.h 2022-11-06 11:22:04 +07:00
Nguyễn Đạt 679ea7046c Merge pull request #650 from qnblackcat/3272866751
[Auto-generated] Submodule Updates 3272866751
2022-11-05 20:51:19 +07:00
github-actions 53b5fde3b7 updating submodules 2022-11-05 13:51:09 +00:00
Nguyễn Đạt 2bd2174ffe Is this that hard to follow? 2022-11-05 17:12:54 +07:00
Nguyễn Đạt 79d9f0920c c‘mon Xcode 14, why don’t you just work!? 2022-11-04 15:40:21 +07:00
Nguyễn Đạt 3c252a79d1 Merge pull request #646 from therealFoxster/main
FIx typo in README.md
2022-11-04 15:38:46 +07:00
Foxster e3326f9adf FIx typo in README.md 2022-11-03 18:36:07 -07:00
Nguyễn Đạt 64bab9b6d5 Merge pull request #641 from 5jd/patch-1
Update French translation
2022-11-03 10:27:19 +07:00
Nguyễn Đạt 9ebbda2671 Merge pull request #643 from therealFoxster/main
Update DontEatMyContent to work with YouTube's redesign (1.0.2 -> 1.0.3)
2022-11-03 10:27:07 +07:00
foxster-mp4 6b62aca494 Update DontEatMyContent (1.0.2 -> 1.0.3)
Update to work with YouTube's redesign

Add another method to get video aspect ratio

Add another method to detect pinch gesture
2022-11-02 20:13:19 -07:00
5jd f4d400d059 Update French translation 2022-11-02 19:37:57 +01:00
qnblackcat 6efdf519f4 clean up 2022-11-02 16:38:03 +07:00
Nguyễn Đạt 684f542aca Merge pull request #636 from qnblackcat/3272866751
[Auto-generated] Submodule Updates 3272866751
2022-11-02 14:36:04 +07:00
github-actions d38993709e updating submodules 2022-11-02 07:35:32 +00:00
Nguyễn Đạt c5cdafd96f Merge pull request #629 from dayanch96/patch-2
Update ru
2022-10-31 18:22:43 +07:00
dayanch96 0635b3cfcf Upd 2022-10-31 00:28:16 +02:00
Nguyễn Đạt 50baafebce Merge pull request #623 from Yswag/main
update zh_tw translation
2022-10-29 21:43:27 +07:00
Yswag 4332070996 update strings 2022-10-29 13:48:37 +08:00
qnblackcat bc286ef74f v17.42.7-2.1 2022-10-29 00:08:42 +07:00
qnblackcat fc6132d261 update YTShortsProgress 2022-10-28 22:55:32 +07:00
qnblackcat f560be0b66 speed improvement 2022-10-28 19:05:01 +07:00
Nguyễn Đạt 2d7f2b7d2a Merge pull request #620 from qnblackcat/3272866751
[Auto-generated] Submodule Updates 3272866751
2022-10-28 16:13:43 +07:00
github-actions df01ad4d48 updating submodules 2022-10-28 09:13:05 +00:00
level3tjg 5a76a9336b Fix uYou theme bug (#617) 2022-10-27 12:42:06 -04:00
Nguyễn Đạt 9a1c8c218d Merge pull request #615 from qnblackcat/3272866751
[Auto-generated] Submodule Updates 3272866751
2022-10-27 17:33:05 +07:00
github-actions a1cf67d8fe updating submodules 2022-10-27 10:32:44 +00:00
qnblackcat c5fc18b755 typos 2022-10-26 21:16:51 +07:00
Nguyễn Đạt 42e3977f36 Merge pull request #614 from qnblackcat/3272866751
[Auto-generated] Submodule Updates 3272866751
2022-10-26 20:47:34 +07:00
github-actions e50c308ec4 updating submodules 2022-10-26 13:46:47 +00:00
qnblackcat c7e24c47e2 add some A/B flags 2022-10-23 01:01:48 +07:00
qnblackcat 9aa506b264 use iOS 15.5 SDK 2022-10-22 21:24:07 +07:00
Nguyễn Đạt bd4fd45cf3 Merge pull request #602 from qnblackcat/3272866751
[Auto-generated] Submodule Updates 3272866751
2022-10-22 21:11:18 +07:00
github-actions 6b0b2133bd updating submodules 2022-10-22 14:09:24 +00:00
Nguyễn Đạt db1f9b6bc6 Merge pull request #594 from arichorn/main-testing
uYouPlusSection Search Bar Support
2022-10-22 21:07:52 +07:00
Nguyễn Đạt 0c62646af2 Merge pull request #601 from qnblackcat/3272866751
[Auto-generated] Submodule Updates 3272866751
2022-10-22 07:40:47 +07:00
github-actions 96517062e1 updating submodules 2022-10-22 00:40:21 +00:00
Nguyễn Đạt a2441bfbc5 Merge pull request #599 from ErSpieltHD/patch-1
VERSION_CHECK
2022-10-22 07:36:20 +07:00
ErSpieltHD e15f540ab0 VERSION_CHECK 2022-10-21 22:41:41 +02:00
Nguyễn Đạt a3877ab91c Merge pull request #598 from matt911/main
Added Romanian localization
2022-10-21 23:52:56 +07:00
Nguyễn Đạt d3c7347d31 Merge pull request #597 from darkbrow/main
Update Korean translation
2022-10-21 23:52:45 +07:00
Nguyễn Đạt 6f4e2a3623 Merge pull request #593 from gototheskinny/main
Turkish translation added
2022-10-21 23:52:35 +07:00
matt911 6981ae9a18 Add Romanian localization 2022-10-21 18:04:41 +03:00
matt911 70e17b3ce0 Revert "Create Localizable.strings"
This reverts commit 46163626ed.
2022-10-21 18:01:46 +03:00
matt911 46163626ed Create Localizable.strings 2022-10-21 17:59:55 +03:00
Jinbong 6b3ddf2915 Update Korean translation 2022-10-21 16:06:09 +09:00
Aric eefb554631 Improvements on Shorts Bar 2022-10-20 22:42:51 -05:00
Aric 12a3290350 Added Settings Search Bar 2022-10-19 15:46:57 -05:00
gototheskinny b5b1e44d46 Turkish translation 2022-10-19 22:28:35 +03:00
qnblackcat 4362a638fe v17.41.2-2.1 2022-10-19 22:05:35 +07:00
qnblackcat b4094e0c07 update uYouPlus.xm 2022-10-19 22:05:17 +07:00
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
40 changed files with 1090 additions and 345 deletions
+3 -3
View File
@@ -1,13 +1,13 @@
---
name: Bug
about: Make sure you complete the template. Otherwise, it will be closed without further explanation!
title: "[Bug]"
title: "[Bug] (Replace this with your title)"
labels: bug
assignees: ''
---
## ⚠️ Have you read the [FAQ](https://github.com/qnblackcat/uYouPlus/wiki/FAQ)? Make sure you visit the FAQ page first!!! ⚠️
## ⚠️ Have you read the [FAQ](https://github.com/qnblackcat/uYouPlus/wiki/FAQ)? Make sure you visit the [FAQ](https://github.com/qnblackcat/uYouPlus/wiki/FAQ) page first!!! ⚠️
_Make sure you complete the template. Otherwise, it will be closed without further explanation!_
@@ -24,7 +24,7 @@ _Make sure you complete the template. Otherwise, it will be closed without furth
_(Please attach videos or screenshots 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 your device's Settings App > Privacy > Analytics & Improvements > Analytics Data > Youtube-xxx-xxx.ips)_
### 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???)_
+2 -1
View File
@@ -7,7 +7,8 @@ assignees: ''
---
## Have you read the FAQ? Make sure you visit the FAQ page before asking any question!!!
## Have you read the FAQ? Any questions that have been answered on the FAQ page will be closed without any explanation!
https://github.com/qnblackcat/uYouPlus/wiki/FAQ
###
+46 -32
View File
@@ -21,9 +21,19 @@ on:
default: ""
required: true
type: string
bundle_id:
description: "Modify the bundle ID. Not recommended"
default: "com.google.ios.youtube"
required: true
type: string
app_name:
description: "Modify the name of the app on the Home Screen. Not recommended"
default: "YouTube"
required: true
type: string
create_release:
description: "Create a draft release"
default: false
default: true
required: false
type: boolean
@@ -34,7 +44,7 @@ concurrency:
jobs:
build:
name: Build uYouPlus
runs-on: macos-latest
runs-on: macos-11
permissions:
contents: write
@@ -55,8 +65,18 @@ jobs:
ref: master
path: theos
submodules: recursive
- name: Caching
id: SDK
uses: actions/cache@v3.0.11
env:
cache-name: iOS-15.5-SDK
with:
path: theos/sdks/
key: ${{ env.cache-name }}
- name: Download iOS 15.5 SDK
if: steps.SDK.outputs.cache-hit != 'true'
run: |
svn checkout -q https://github.com/chrisharper22/sdks/trunk/iPhoneOS15.5.sdk
mv *.sdk $THEOS/sdks
@@ -77,33 +97,40 @@ jobs:
env:
THEOS: ${{ github.workspace }}/theos
- name: Download uYou & prepare YouTube iPA
- name: Download uYou & Prepare YouTube iPA
run: |
curl "https://raw.githubusercontent.com/Muirey03/RemoteLog/master/RemoteLog.h" --output "$THEOS/include/RemoteLog.h"
curl "https://miro92.com/repo/debs/com.miro.uyou_${{ env.UYOU_VERSION }}_iphoneos-arm.deb" --output "./main/Tweaks/uYou/com.miro.uyou_${{ env.UYOU_VERSION }}_iphoneos-arm.deb"
wget "$YOUTUBE_URL" --no-verbose -O ./main/YouTube.ipa
dpkg-deb -x "./main/Tweaks/uYou/com.miro.uyou_${{ env.UYOU_VERSION }}_iphoneos-arm.deb" ./main/Tweaks/uYou/
unzip -q ./main/YouTube.ipa -d ./main/tmp
rm -rf ./main/tmp/Payload/YouTube.app/PlugIns/*
cp -R ./main/Extensions/*.appex ./main/tmp/Payload/YouTube.app/PlugIns
curl "https://miro92.com/repo/debs/com.miro.uyou_${{ env.UYOU_VERSION }}_iphoneos-arm.deb" --output "main/Tweaks/uYou/com.miro.uyou_${{ env.UYOU_VERSION }}_iphoneos-arm.deb"
wget "$YOUTUBE_URL" --no-verbose -O main/YouTube.ipa
dpkg-deb -x "main/Tweaks/uYou/com.miro.uyou_${{ env.UYOU_VERSION }}_iphoneos-arm.deb" main/Tweaks/uYou/
unzip -q main/YouTube.ipa -d main/tmp
rm -rf main/tmp/Payload/YouTube.app/PlugIns/*
cp -R main/Extensions/*.appex main/tmp/Payload/YouTube.app/PlugIns
env:
THEOS: ${{ github.workspace }}/theos
UYOU_VERSION: ${{ inputs.uyou_version }}
YOUTUBE_URL: ${{ inputs.decrypted_youtube_url }}
- name: Fix compiling && Build Package
- name: Fix compiling & Build Package
id: build_package
run: |
(echo 'THEOS_IGNORE_PARALLEL_BUILDING_NOTICE = yes' >> ~/.theosrc)
cd ${{ github.workspace }}/main
(cd ${{ github.workspace }}/main/Tweaks/YouPiP && sed -i '' "14s/$/ AVFoundation UIKit/" Makefile)
sed -i '' "12s#.*#BUNDLE_ID = ${{ env.BUNDLE_ID }}#g" Makefile
sed -i '' "11s#.*#DISPLAY_NAME = ${{ env.APP_NAME }}#g" Makefile
make package FINALPACKAGE=1
(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
echo -e "==> \033[1mSHASUM256: $(shasum -a 256 packages/*.ipa | cut -f1 -d' ')\033[0m"
echo -e "==> \033[1mBundle ID: ${{ env.BUNDLE_ID }}\033[0m"
env:
THEOS: ${{ github.workspace }}/theos
UYOU_VERSION: ${{ inputs.uyou_version }}
YOUTUBE_VERSION: ${{ inputs.youtube_version }}
BUNDLE_ID: ${{ inputs.bundle_id }}
APP_NAME: ${{ inputs.app_name }}
- name: Upload Artifact
uses: actions/upload-artifact@v3
@@ -111,33 +138,20 @@ jobs:
UYOU_VERSION: ${{ inputs.uyou_version }}
YOUTUBE_VERSION: ${{ inputs.youtube_version }}
with:
name: uYouPlus_${{ env.YOUTUBE_VERSION }}_${{ env.UYOU_VERSION }}
name: uYouPlus_${{ env.YOUTUBE_VERSION }}_${{ env.UYOU_VERSION }}
path: ${{ github.workspace }}/main/packages/${{ steps.build_package.outputs.package }}
if-no-files-found: error
- name: Create Release
if: ${{ inputs.create_release }}
id: create_release
uses: actions/create-release@v1
uses: softprops/action-gh-release@v0.1.15
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
UYOU_VERSION: ${{ inputs.uyou_version }}
YOUTUBE_VERSION: ${{ inputs.youtube_version }}
DRAFT: ${{ inputs.create_release }}
with:
tag_name: v${{ env.YOUTUBE_VERSION }}-${{ env.UYOU_VERSION }}-(${{ github.run_number }})
release_name: v${{ env.YOUTUBE_VERSION }}-${{ env.UYOU_VERSION }}-(${{ github.run_number }})
draft: true
prerelease: false
- 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
name: v${{ env.YOUTUBE_VERSION }}-${{ env.UYOU_VERSION }}-(${{ github.run_number }})
files: main/packages/*.ipa
draft: ${{ env.DRAFT }}
+4 -4
View File
@@ -26,11 +26,11 @@
path = Tweaks/PSHeader
url = https://github.com/PoomSmart/PSHeader.git
branch = master
[submodule "Tweaks/YTSpeed"]
path = Tweaks/YTSpeed
url = https://github.com/qnblackcat/YTSpeed.git
branch = main
[submodule "Extensions"]
path = Extensions
url = https://github.com/CokePokes/YoutubeExtensions.git
branch = main
[submodule "Tweaks/YTABConfig"]
path = Tweaks/YTABConfig
url = https://github.com/PoomSmart/YTABConfig.git
branch = main
+64 -16
View File
@@ -1,10 +1,12 @@
#import "Tweaks/YouTubeHeader/YTAppDelegate.h"
#import "Tweaks/YouTubeHeader/YTPlayerViewController.h"
#define LOC(x) [tweakBundle localizedStringForKey:x value:nil table:nil]
#define YT_BUNDLE_ID @"com.google.ios.youtube"
#define YT_NAME @"YouTube"
#define UNSUPPORTED_DEVICES @[@"iPhone14,3", @"iPhone14,6", @"iPhone14,8"] // DontEatMycontent
#define THRESHOLD 1.99 // DontEatMycontent
#define DEMC_UNSUPPORTED_DEVICES @[@"iPhone14,3", @"iPhone14,6", @"iPhone14,8"] // DontEatMycontent
#define DEMC_THRESHOLD 1.99 // DontEatMycontent
#define DEFAULT_RATE 2.0f // YTSpeed
// IAmYouTube
@interface SSOConfiguration : NSObject
@@ -40,25 +42,57 @@
@end
// DontEatMyContent
NSString* deviceName();
BOOL isDeviceSupported();
void activate();
void deactivate();
void center();
BOOL DEMC_deviceIsSupported();
void DEMC_activate();
void DEMC_deactivate();
void DEMC_centerRenderingView();
@interface YTPlayerView : UIView
- (BOOL)zoomToFill;
- (id)renderingView;
- (id)playerView;
@end
@interface MLHAMSBDLSampleBufferRenderingView : UIView
@end
@interface YTMainAppVideoPlayerOverlayViewController : UIViewController
- (BOOL)isFullscreen;
- (id)videoPlayerOverlayView;
- (id)activeVideoPlayerOverlay;
@end
@interface HAMSBDLSampleBufferRenderingView : UIView
@end
@interface MLHAMSBDLSampleBufferRenderingView : HAMSBDLSampleBufferRenderingView
@end
@interface YTMainAppEngagementPanelViewController : UIViewController
- (BOOL)isLandscapeEngagementPanel;
- (BOOL)isPeekingSupported;
@end
@interface YTEngagementPanelContainerViewController : UIViewController
- (BOOL)isLandscapeEngagementPanel;
- (BOOL)isPeekingSupported;
@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
@@ -76,6 +110,12 @@ void center();
- (id)activeVideo;
@end
// uYou theme fix
@interface YTAppDelegate ()
@property(nonatomic, strong) id downloadsVC;
@end
// BigYTMiniPlayer
@interface YTMainAppVideoPlayerOverlayView : UIView
- (UIViewController *)_viewControllerForAncestor;
@@ -87,11 +127,19 @@ void center();
// YTAutoFullScreen
@interface YTPlayerViewController (YTAFS)
- (void)autoFullscreen;
- (id)activeVideoPlayerOverlay; // DontEatMycontent
- (id)playerView; // DontEatMycontent
// DontEatMycontent
- (id)activeVideoPlayerOverlay;
- (id)playerView;
// YTSpeed
@property id activeVideo;
@property float playbackRate;
- (void)singleVideo:(id)video playbackRateDidChange:(float)rate;
@end
// OLED Darkmode
@interface ELMView : UIView
@end
@interface ASWAppSwitcherCollectionViewCell : UIView
@end
+7 -5
View File
@@ -1,24 +1,25 @@
TARGET = iphone:clang:latest:13.0
TARGET = iphone:clang:15.5:14.0
uYouPlus_USE_FLEX = 0
uYouPlus_USE_FISHHOOK = 0
ARCHS = arm64
MODULES = jailed
FINALPACKAGE = 1
CODESIGN_IPA = 0
PACKAGE_VERSION = 17.48.2_2.1
TWEAK_NAME = uYouPlus
DISPLAY_NAME = 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_IPA = ./tmp/Payload/YouTube.app
uYouPlus_IPA = tmp/Payload/YouTube.app
uYouPlus_FRAMEWORKS = UIKit Security
uYouPlus_CFLAGS = -fobjc-arc
uYouPlus_CFLAGS = -fobjc-arc -DTWEAK_VERSION=$(PACKAGE_VERSION)
include $(THEOS)/makefiles/common.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
before-package::
@@ -27,6 +28,7 @@ before-package::
@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/uYou/Library/Application\ Support/uYouBundle.bundle Resources/
@cp -R lang/uYouPlus.bundle Resources/
+138 -32
View File
@@ -1,4 +1,28 @@
![IMG_2196](https://user-images.githubusercontent.com/52943116/189822859-8a0952db-9264-4b5b-9cbe-d0a87b2db5a0.PNG)
***
<p align="center">
<img src="https://img.shields.io/badge/Platform-iOS%20%7C%20iPadOS%2014.0%2B-yellow" alt="Badge"/>
<a href="https://github.com/qnblackcat/uYouPlus/wiki/FAQ"><img src="https://img.shields.io/badge/Question%3F-FAQ-yellow" alt="Badge"></img></a>
<a href="https://github.com/qnblackcat/uYouPlus/wiki/FAQ"><img src="https://custom-icon-badges.demolab.com/badge/translate-blue.svg?logo=translate&logoColor=white" alt="Badge"></img></a>
</p>
<p align="center">
<a href="https://github.com/qnblackcat/uYouPlus/release/latest"><img src="https://custom-icon-badges.demolab.com/github/v/release/qnblackcat/uYouPlus?color=brightgreen&label=Latest%20release" alt="Badge"></img></a>
<a href="https://github.com/qnblackcat/uYouPlus/releases/latest"><img src="https://img.shields.io/github/downloads/qnblackcat/uYouPlus/total?label=Download" alt="Badge"></img></a>
<a href="https://github.com/qnblackcat/uYouPlus/commit"><img src="https://custom-icon-badges.demolab.com/github/last-commit/qnblackcat/uYouPlus?logo=history&logoColor=white&label=Last commit" alt="Badge"></img></a>
<a href="https://github.com/qnblackcat/uYouPlus/issues"><img src="https://custom-icon-badges.demolab.com/github/issues-raw/qnblackcat/uYouPlus?logo=issue-opened&label=Issues" alt="Badge"></img></a>
</p>
<p align="center">
<img src="https://img.shields.io/github/stars/qnblackcat/uYouPlus?style=social" alt="Badge"/>
<img src="https://img.shields.io/github/forks/qnblackcat/uYouPlus?style=social" alt="Badge"/>
<a href="https://github.com/qnblackcat/uYouPlus#support-the-developers"><img src="https://img.shields.io/badge/-Support-lightgrey?style=social&logo=paypal" alt="Badge"></img></a>
</p>
# Table of Contents
@@ -12,28 +36,102 @@
* [Building](#building-optional)
# Credits
- Special thanks to all the developers who have contributed to uYouPlus!
- [MiRO92](https://twitter.com/miro92) for [uYou](https://github.com/MiRO92/uYou-for-YouTube).
- [Galactic-Dev](https://github.com/Galactic-Dev) and [Luewii](https://github.com/Luewii) for [iSponsorBlock](https://github.com/Galactic-Dev/iSponsorBlock) and [BigYTMiniPlayer](https://github.com/Galactic-Dev/BigYTMiniPlayer).
- [HASHBANG Productions](https://github.com/hbang) for [Alderis Color Picker](https://github.com/hbang/Alderis) - a dependency of iSponsorBlock.
- [PoomSmart](https://twitter.com/poomsmart) - the developer of many tweaks used by uYouPlus, see [Version info - Download](#download) for more details.
- [level3tjg](https://twitter.com/level3tjg) for [YTNoHoverCards](https://github.com/level3tjg/YTNoHoverCards), [YTMiniplayerEnabler](https://github.com/level3tjg/YTMiniplayerEnabler) and many hot patches for uYou.
- [BandarHL](https://twitter.com/bandarhl) for a bunch of improvements.
- [Julioverne](https://twitter.com/ijulioverne) for the solution to skip Google's safety warning when logging in.
- [Lyvendia](https://github.com/Lyvendia/) for [YTSpeed](https://github.com/Lyvendia/YTSpeed/)
- [YouTube Extensions](https://github.com/CokePokes/YoutubeExtensions) by [CokePokes](https://github.com/CokePokes/).
- [theos team](https://github.com/theos/theos) for theos & theos-jailed.
- Thanks to all the translators who have contributed to uYouPlus. Your contribution is highly appreciated!
<table id='credit'>
<tr>
<td id='miro92'>
<a href='https://github.com/MiRO92'>
<img src='https://github.com/MiRO92.png' width='140px;'>
</a>
<h4 align='center'><a href='https://twitter.com/miro92'>MiRO92</a></h4>
</td>
<td id='poomsmart'>
<a href='https://github.com/PoomSmart'>
<img src='https://github.com/PoomSmart.png' width='140px;'>
</a>
<h4 align='center'><a href='https://twitter.com/poomsmart'>PoomSmart</a></h4>
</td>
<td id='level3tjg'>
<a href='https://github.com/level3tjg'>
<img src='https://github.com/level3tjg.png' width='140px;'>
</a>
<h4 align='center'><a href='https://twitter.com/level3tjg'>level3tjg</a></h4>
</td>
<td id='bandarHL'>
<a href='https://github.com/BandarHL'>
<img src='https://github.com/BandarHL.png' width='140px;'>
</a>
<h4 align='center'><a href='https://twitter.com/bandarhl'>BandarHelal</a></h4>
</td>
<td id='galactic-dev'>
<a href='https://github.com/Galactic-Dev'>
<img src='https://github.com/Galactic-Dev.png' width='140px;'>
</a>
<h4 align='center'><a href='https://twitter.com/dev_galactic'>galactic</a></h4>
</td>
</tr>
<tr>
<td id='julioverne'>
<a href='https://github.com/julioverne'>
<img src='https://github.com/julioverne.png' width='140px;'>
</a>
<h4 align='center'><a href='https://twitter.com/ijulioverne'>julioverne</a></h4>
</td>
<td id='hbang'>
<a href='https://github.com/hbang'>
<img src='https://github.com/hbang.png' width='140px;'>
</a>
<h4 align='center'><a href='https://twitter.com/hashbang'>HASHBANG</a></h4>
</td>
<td id='lyvendia'>
<a href='https://github.com/Lyvendia'>
<img src='https://github.com/Lyvendia.png' width='140px;'>
</a>
<h4 align='center'><a href='https://github.com/Lyvendia'>Lyvendia</a></h4>
</td>
<td id='foxster'>
<a href='https://github.com/therealFoxster'>
<img src='https://github.com/therealFoxster.png' width='140px;'>
</a>
<h4 align='center'><a href='https://twitter.com/therealFoxster'>Foxster</a></h4>
</td>
<td id='ichitaso'>
<a href='https://github.com/ichitaso'>
<img src='https://github.com/ichitaso.png' width='140px;'>
</a>
<h4 align='center'><a href='https://twitter.com/ichitaso'>ichitaso</a></h4>
</td>
</tr>
<tr>
<td id='ahmed-bafkir'>
<a href='https://github.com/AhmedBafkir'>
<img src='https://github.com/AhmedBafkir.png' width='140px;'>
</a>
<h4 align='center'><a href='https://twitter.com/Peaceful_0'>Ahmed Bafkir</a></h4>
</td>
<td id='cokepokes'>
<a href='https://github.com/CokePokes'>
<img src='https://github.com/CokePokes.png' width='140px;'>
</a>
<h4 align='center'><a href='https://twitter.com/cokepokes'>CokePokes</a></h4>
</td>
<td id='isnackable'>
<a href='https://github.com/ISnackable'>
<img src='https://github.com/ISnackable.png' width='140px;'>
</a>
<h4 align='center'><a href='https://isnackable.me/'>Tommy Teo</a></h4>
</td>
<td id='theos-team'>
<a href='https://github.com/theos/theos'>
<img src='https://github.com/theos.png' width='140px;'>
</a>
<h4 align='center'><a href='https://theos.dev'>theos</a></h4>
</td>
</tr>
</table>
# Features
@@ -58,12 +156,18 @@
9. **YouRememberCaption**: make YouTube remember your video caption setting (if not already).
10. **NoYTPremium**: remove YouTube Premium upshells.
10. **NoYTPremium**: remove YouTube Premium upsells.
11. **YTSpeed**: add 2.25, 2.5, 2.75, and 3x playback speed
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).
15. **YTABConfig**: allow user to control over YouTube A/B testing flags.
</details>
# Known issues
@@ -74,47 +178,49 @@
# 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 14.0 or later. The latest version of **uYouPlus** can be found in the [Release tab](https://github.com/qnblackcat/uYouPlus/releases/latest).
- For AltStore user:
- My official AltStore repo: https://qnblackcat.github.io/AltStore/
- [Open in AltStore (v17.37.3-2.1)](https://tinyurl.com/2p8pd9n7) - It will take a while to install because AltStore needs to download the IPA.
- [Open in AltStore (v17.48.2-2.1)](https://tinyurl.com/59kjzeth) - It will take a while to install because AltStore needs to download the IPA first.
- Version info: _(last update: Sep 24)_
- Version info: _(last update: Dec 12)_
<details>
<summary>Expand</summary>
<summary>Expand </summary>
| **Tweaks/App** | **Developer** | **Version** | **Open source** |
| - | - | :-: | :-: |
| **YouTube** | Google Inc | 17.37.3 | ✖︎ |
| **YouTube** | Google Inc | 17.48.2 | ✖︎ |
| [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 | ✖︎ |
| **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) |
| **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) |
| **DontEatMyContent** | [therealFoxster](https://github.com/therealFoxster) | 1.0.5 | [✔︎](https://github.com/therealFoxster/DontEatMyContent) |
| **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) |
| **Alderis Color Picker** | [HASHBANG Productions](https://github.com/hbang) | 1.2| [✔︎](https://github.com/hbang/Alderis) |
| **YTUHD** | [PoomSmart](https://twitter.com/poomsmart) | 1.2.10 | [✔︎](https://github.com/PoomSmart/YTUHD) |
| **YouPiP** | [PoomSmart](https://twitter.com/poomsmart) | 1.7.9 | [✔︎](https://github.com/PoomSmart/YouPiP) |
| **YTUHD** | [PoomSmart](https://twitter.com/poomsmart) | 1.3.4-2 | [✔︎](https://github.com/PoomSmart/YTUHD) |
| **YouPiP** | [PoomSmart](https://twitter.com/poomsmart) | 1.7.15-2 | [✔︎](https://github.com/PoomSmart/YouPiP) |
| **IAmYouTube** | [PoomSmart](https://twitter.com/poomsmart) | 1.2.0 | [✔︎](https://github.com/PoomSmart/IAmYouTube) |
| **YTABConfig** | [PoomSmart](https://twitter.com/poomsmart) | 1.4.6 | [✔︎](https://github.com/PoomSmart/YTABConfig) |
| **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) |
| **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) |
| **YTShortsProgress** | [PoomSmart](https://twitter.com/poomsmart) | 1.0.2 | [✔︎](https://github.com/PoomSmart/YTShortsProgress) |
| **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) |
| **Return YouTube Dislike** | [PoomSmart](https://twitter.com/poomsmart) | 1.6.8 | [✔︎](https://github.com/PoomSmart/Return-YouTube-Dislikes) |
| **Return YouTube Dislike** | [PoomSmart](https://twitter.com/poomsmart) | 1.9.0 | [✔︎](https://github.com/PoomSmart/Return-YouTube-Dislikes) |
| **YTNoCheckLocalNetwork** | [PoomSmart](https://twitter.com/poomsmart) | 1.0.2 | [✔︎](https://poomsmart.github.io/repo/depictions/ytnochecklocalnetwork.html) |
</details>
# Installation
See [Installation - Wiki](https://github.com/qnblackcat/uYouPlus/wiki/Installation)
See [Installation - Wiki](https://github.com/qnblackcat/uYouPlus/wiki/Installation).
# Support the developers
- [**MiRO92**](https://twitter.com/miro92): https://github.com/MiRO92/uYou-for-YouTube#support
+27 -5
View File
@@ -1,6 +1,8 @@
#import "Tweaks/YouTubeHeader/YTSettingsViewController.h"
#import "Tweaks/YouTubeHeader/YTSearchableSettingsViewController.h"
#import "Tweaks/YouTubeHeader/YTSettingsSectionItem.h"
#import "Tweaks/YouTubeHeader/YTSettingsSectionItemManager.h"
#import "Tweaks/YouTubeHeader/YTUIUtils.h"
#import "Header.h"
@interface YTSettingsSectionItemManager (YouPiP)
@@ -39,19 +41,39 @@ extern BOOL dontEatMyContent();
}
%end
%hook YTSettingsViewController
- (void)loadWithModel:(id)model fromView:(UIView *)view {
%orig;
if ([[self valueForKey:@"_detailsCategoryID"] integerValue] == uYouPlusSection)
MSHookIvar<BOOL>(self, "_shouldShowSearchBar") = YES;
}
- (void)setSectionControllers {
%orig;
if (MSHookIvar<BOOL>(self, "_shouldShowSearchBar")) {
YTSettingsSectionController *settingsSectionController = [self settingsSectionControllers][[self valueForKey:@"_detailsCategoryID"]];
YTSearchableSettingsViewController *searchableVC = [self valueForKey:@"_searchableSettingsViewController"];
if (settingsSectionController)
[searchableVC storeCollectionViewSections:@[settingsSectionController]];
}
}
%end
%hook YTSettingsSectionItemManager
%new
- (void)updateuYouPlusSectionWithEntry:(id)entry {
YTSettingsViewController *delegate = [self valueForKey:@"_dataDelegate"];
NSBundle *tweakBundle = uYouPlusBundle();
YTSettingsSectionItem *killApp = [%c(YTSettingsSectionItem) // https://github.com/PoomSmart/YTABConfig/blob/b74d7f28151c407cffc21cce12908c49e9e65999/Tweak.x#L76
itemWithTitle:LOC(@"KILL_APP")
titleDescription:LOC(@"KILL_APP_DESC")
YTSettingsSectionItem *version = [%c(YTSettingsSectionItem)
itemWithTitle:[NSString stringWithFormat:LOC(@"VERSION"), @(OS_STRINGIFY(TWEAK_VERSION))]
titleDescription:LOC(@"VERSION_CHECK")
accessibilityIdentifier:nil
detailTextBlock:nil
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")];
@@ -198,7 +220,7 @@ extern BOOL dontEatMyContent();
return YES;
};
NSMutableArray <YTSettingsSectionItem *> *sectionItems = [NSMutableArray arrayWithArray:@[killApp, autoFull, castConfirm, ytMiniPlayer, fixGoogleSignIn, hideAutoplaySwitch, hideCC, hideHUD, hidePaidPromotionCard, hidePreviousAndNextButton, hideHoverCard, bigYTMiniPlayer, oledDarkMode, oledKeyBoard, dontEatMyContent, replacePreviousAndNextButton, 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];
}
+1
Submodule Tweaks/YTABConfig added at 24ad4214b4
Submodule Tweaks/YTSpeed deleted from 3fec2dfcf0
+15 -12
View File
@@ -22,31 +22,34 @@ else
fi
# Makefile
if [ -d ./tmp ]
if [ -d tmp ]
then
rm -rf ./tmp
rm -rf tmp
fi
read -e -p "==> Path to the decrypted YouTube.ipa or YouTube.app: " PATHTOYT
if [[ $PATHTOYT == *.ipa ]]
then
unzip -q "$PATHTOYT" -d ./tmp
rm -rf ./tmp/Payload/YouTube.app/PlugIns/*.appex
unzip -q "$PATHTOYT" -d tmp
rm -rf tmp/Payload/YouTube.app/_CodeSignature/CodeResources
rm -rf tmp/Payload/YouTube.app/PlugIns/*.appex
cp -R Extensions/*.appex tmp/Payload/YouTube.app/PlugIns
make package
open ./packages
make package FINALPACKAGE=1
open packages
elif [[ $PATHTOYT == *.app ]]
then
mkdir -p ./tmp/Payload/
cp -R "$PATHTOYT" ./tmp/Payload 2>/dev/null
rm -rf ./tmp/Payload/YouTube.app/PlugIns/*.appex
mkdir -p tmp/Payload/
cp -R "$PATHTOYT" tmp/Payload 2>/dev/null
rm -rf tmp/Payload/YouTube.app/_CodeSignature/CodeResources
rm -rf tmp/Payload/YouTube.app/PlugIns/*.appex
cp -R Extensions/*.appex tmp/Payload/YouTube.app/PlugIns
make package
open ./packages
make package FINALPACKAGE=1
open packages
else
echo "This is not an ipa/app!"
fi
# Clean up
tput setaf 1 && echo -e "==> \033[1mCleaning up...\033[0m"
find Tweaks/uYou -mindepth 1 ! -name "com.miro.uyou_2.1_iphoneos-arm.deb" ! -name ".gitkeep" -exec rm -rf {} \; 2>/dev/null
rm -rf tmp/ Resources .theos/_/Payload
rm -rf tmp/ Resources .theos/_/Payload
echo -e "==> \033[1mSHASUM256: $(shasum -a 256 packages/*.ipa)\033[0m"
@@ -1,4 +1,6 @@
// Settings
"VERSION" = "إصدار uYouPlus: %@";
"VERSION_CHECK" = "المس هنا للبحث عن التحديثات!";
"DONT_EAT_MY_CONTENT" = "منع النوتش/الجزيرة التفاعلية على مقاطع 2:1 (أداة DontEatMyContent)";
"DONT_EAT_MY_CONTENT_DESC" = "منع النوتش/الجزيرة التفاعلية من قص المقاطع التي تكون نسبة العرض إلى الارتفاع فيها تساوي 2:1. يتطلب إعادة تشغيل التطبيق.";
@@ -9,9 +11,6 @@
"FIX_GOOGLE_SIGNIN" = "إصلاح تسجيل الدخول بحساب جوجل (لمستخدمي TrollStore فقط)";
"FIX_GOOGLE_SIGNIN_DESC" = "هذا الخيار لا يعمل إلا إذا كان التطبيق مثبت بواسطة TrollStore: فعل هذا الخيار لتتمكن من تسجيل الدخول بحساب جوجل. يتطلب إعادة تشغيل التطبيق.";
"KILL_APP" = "إغلاق تطبيق يوتيوب";
"KILL_APP_DESC" = "المس هنا لإغلاق تطبيق يوتيوب!";
"HIDE_PREVIOUS_AND_NEXT_BUTTON" = "إخفاء زرّي السابق والتالي";
"HIDE_PREVIOUS_AND_NEXT_BUTTON_DESC" = "إخفاء زرّي المقطع السابق والمقطع التالي من أزرار التحكم على الفيديو.";
@@ -1,4 +1,7 @@
// 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.";
@@ -8,9 +11,6 @@
"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.";
"KILL_APP" = "Zavřít YouTube";
"KILL_APP_DESC" = "Klepnutím sem zavřete YouTube!";
"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.";
@@ -1,25 +1,16 @@
// Settings
"DONT_EAT_MY_CONTENT" = "Kerbe/Insel bei 2:1-Videoinhalten verhindern (DontEatMyContent)";
"DONT_EAT_MY_CONTENT_DESC" = "Verhindert, dass die Notch/Dynamic Island 2:1-Videoinhalte auf YouTube kaut. Neustart der App erforderlich.";
"VERSION" = "uYouPlus-Version: %@";
"VERSION_CHECK" = "Tippen, um nach Updates zu suchen!";
"REPLACE_PREVIOUS_NEXT_BUTTON" = "Zurück- und Weiter-Schaltfläche ersetzen";
"REPLACE_PREVIOUS_NEXT_BUTTON_DESC" = "Ersetzen Sie die Schaltflächen „Zurück“ und „Weiter“ durch die Schaltflächen „Schnellvorlauf“ und „Rücklauf“. App-Neustart ist erforderlich.“;
"FIX_GOOGLE_SIGNIN" = "Google-Anmeldung reparieren (nur für TrollStore-Benutzer)";
"FIX_GOOGLE_SIGNIN_DESC" = "Aktivieren Sie diese Option nur, wenn Sie sich nicht mit Ihrem Google-Konto anmelden können und die App über den TrollStore installiert wurde. Wenn Sie sich normal anmelden können, lassen Sie sie deaktiviert. Ein Neustart der App ist erforderlich.";
"KILL_APP" = "YouTube schließen";
"KILL_APP_DESC" = "Hier tippen, um YouTube zu schließen!";
"DONT_EAT_MY_CONTENT" = "Kerbe/dynamische 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" = "Vor- und Zurücktasten mit Vor- und Zurückspultasten ersetzen. App restart is required.";
"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 beheben (nur für TrollStore Benutzer!)";
"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!";
"KILL_APP" = "YouTube crashen";
"KILL_APP_DESC" = "Tippe hier, um YouTube zum Abstürzen zu bringen!";
"HIDE_PREVIOUS_AND_NEXT_BUTTON" = "Vor- und Zurücktasten ausblenden";
"HIDE_PREVIOUS_AND_NEXT_BUTTON_DESC" = "Vor- und Zurücktasten vom Videoplayer ausblenden.";
@@ -48,10 +39,10 @@
"AUTO_FULLSCREEN_DESC" = "Automatisch Videos im Vollbild starten.";
"HIDE_HUD_MESSAGES" = "HUD-Nachrichten ausblenden";
"HIDE_HUD_MESSAGES_DESC" = "z.B.: Untertitel sind akti-/deaktiviert, Videoschleife ist an, ...";
"HIDE_HUD_MESSAGES_DESC" = "z.B.: Untertitel sind aktiviert/deaktiviert, Videoschleife ist an, ...";
"OLED_DARKMODE" = "OLED-Dunkelmodus (Experimental)";
"OLED_DARKMODE_DESC" = "Könnte in manchen Fällen nicht richtig funktionieren. App-Neustart ist erforderlich, wenn diese Option akti-/deaktiviert wird!";
"OLED_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_DESC" = "Könnte in manchen Fällen nicht richtig funktionieren. App-Neustart erforderlich!";
@@ -1,4 +1,7 @@
// 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. Απαιτείται επανεκκίνηση της εφαρμογής.";
@@ -8,9 +11,6 @@
"FIX_GOOGLE_SIGNIN" = "Διόρθωση σύνδεσης Google (μόνο για χρήστες του TrollStore)";
"FIX_GOOGLE_SIGNIN_DESC" = "Ενεργοποιήστε αυτήν την επιλογή μόνο όταν δεν μπορείτε να συνδεθείτε με τον λογαριασμό σας Google και η εφαρμογή έχει εγκατασταθεί μέσω του TrollStore. Εάν μπορείτε να συνδεθείτε κανονικά, διατηρήστε την απενεργοποιημένη. Απαιτείται επανεκκίνηση της εφαρμογής.";
"KILL_APP" = "Κλείσιμο YouTube";
"KILL_APP_DESC" = "Πατήστε εδώ για να κλείσετε το YouTube!";
"HIDE_PREVIOUS_AND_NEXT_BUTTON" = "Κρύψτε το προηγούμενο και το επόμενο κουμπί";
"HIDE_PREVIOUS_AND_NEXT_BUTTON_DESC" = "Κρύψτε το προηγούμενο και το επόμενο κουμπί κατά την αναπαραγωγή βίντεο.";
@@ -1,30 +1,29 @@
// Settings
"VERSION" = "uYouPlus's version: %@";
"VERSION_CHECK" = "Tap to check for updates!";
"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.";
"REPLACE_PREVIOUS_NEXT_BUTTON" = "Replace Previous and Next button";
"REPLACE_PREVIOUS_NEXT_BUTTON_DESC" = "Replace the Previous and Next button with the 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.";
"KILL_APP" = "Close YouTube";
"KILL_APP_DESC" = "Tap here to close YouTube!";
"FIX_GOOGLE_SIGNIN_DESC" = "Only turn on this option 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_DESC" = "Hide Previous and Next button in video controls overlay.";
"HIDE_PREVIOUS_AND_NEXT_BUTTON_DESC" = "Hide the Previous and Next button in video controls overlay.";
"YT_MINIPLAYER" = "Enable the Miniplayer for all YouTube videos";
"YT_MINIPLAYER" = "Enable the mini player for all YouTube videos";
"YT_MINIPLAYER_DESC" = "Kid videos for example.";
"CAST_CONFIRM" = "Confirm alert before casting (YTCastConfirm)";
"CAST_CONFIRM_DESC" = "Show a confirm alert before casting to prevent accidentally hijacking TV.";
"HIDE_HOVER_CARD" = "Hide End screens hover cards (YTNoHoverCards)";
"HIDE_HOVER_CARD_DESC" = "Hide creator End screens (thumbnails) at the end of videos.";
"HIDE_HOVER_CARD_DESC" = "Hide the creator End screens (thumbnails) at the end of videos.";
"NEW_MINIPLAYER_STYLE" = "New miniplayer bar style (BigYTMiniPlayer)";
"NEW_MINIPLAYER_STYLE" = "New mini player bar style (BigYTMiniPlayer)";
"NEW_MINIPLAYER_STYLE_DESC" = "App restart is required.";
"YT_RE_EXPLORE" = "Replace Shorts tab with Explore tab (YTReExplore)";
@@ -43,10 +42,10 @@
"HIDE_HUD_MESSAGES_DESC" = "Example: CC is turned on/off, Video loop is on,...";
"OLED_DARKMODE" = "OLED Dark mode (Experimental)";
"OLED_DARKMODE_DESC" = "Might not working correctly in some cases. App restart is required after you enable/disable this option.";
"OLED_DARKMODE_DESC" = "Might not work correctly in some cases. App restart is required after you enable/disable this option.";
"OLED_KEYBOARD" = "OLED Keyboard (Experimental)";
"OLED_KEYBOARD_DESC" = "Might not working correctly in some cases. App restart is required.";
"OLED_KEYBOARD_DESC" = "Might not work correctly in some cases. App restart is required.";
"HIDE_PAID_PROMOTION_CARDS" = "Hide Paid Promotion banner";
"HIDE_PAID_PROMOTION_CARDS_DESC" = "Hide the 'Includes Paid Promotions' banner in some videos.";
@@ -1,4 +1,7 @@
// Settings
"VERSION" = "uYouPlus's version: %@";
"VERSION_CHECK" = "Tap to check for update!";
"DONT_EAT_MY_CONTENT" = "Evitar Notch/Island en contenido de video 2:1 (DontEatMyContent)";
"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.";
@@ -8,9 +11,6 @@
"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.";
"KILL_APP" = "Cerrar YouTube";
"KILL_APP_DESC" = "Toca aquí para cerrar YouTube!";
"HIDE_PREVIOUS_AND_NEXT_BUTTON" = "Ocultar el botón de Anterior y Siguiente";
"HIDE_PREVIOUS_AND_NEXT_BUTTON_DESC" = "Ocultar el botón de Anterior y Siguiente en los botones superpuestos.";
@@ -1,15 +1,15 @@
// Settings
"DONT_EAT_MY_CONTENT" = "Evitar Notch/Island en contenido de video 2:1 (DontEatMyContent)";
"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.";
"VERSION" = "Version de uYouPlus : %@";
"VERSION_CHECK" = "Appuyez pour vérifier les mises à jour !";
"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.";
"DONT_EAT_MY_CONTENT" = "Empêcher l'encoche/Dynamic Island de grignoter le contenu vidéo 2:1 (DontEatMyContent)";
"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.";
"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.";
"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";
"KILL_APP" = "Fermer YouTube";
"KILL_APP_DESC" = "Appuyez ici pour fermer YouTube !";
"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_DESC" = "Masquer les boutons Précédent et Suivant dans la superposition des contrôles vidéo";
@@ -51,7 +51,7 @@
"HIDE_PAID_PROMOTION_CARDS_DESC" = "Masque la bannière 'Inclut une communication commerciale' dans certaines vidéos.";
// YTCastConfirm
"CASTING" = "Castings";
"MSG_ARE_YOU_SURE" = "Êtes-vous sûr de vouloir commencer le casting ?";
"CASTING" = "Cast";
"MSG_ARE_YOU_SURE" = "Êtes-vous sûr de vouloir commencer un cast sur votre télévision ?";
"MSG_YES" = "Oui";
"MSG_CANCEL" = "Annuler";
@@ -1,4 +1,7 @@
// 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. נדרשת הפעלה מחדש של האפליקציה.";
@@ -8,9 +11,6 @@
"FIX_GOOGLE_SIGNIN" = "תקן כניסה של Google (עבור משתמש TrollStore בלבד)";
"FIX_GOOGLE_SIGNIN_DESC" = "הפעל אפשרות זו רק כאשר אינך יכול להיכנס עם חשבון Google שלך והאפליקציה הותקנה דרך TrollStore. אם אתה יכול להתחבר כרגיל, השאר אותה מושבתת. נדרשת הפעלה מחדש של האפליקציה.";
"KILL_APP" = "סגור את YouTube";
"KILL_APP_DESC" = "הקש כאן כדי לסגור את YouTube!";
"HIDE_PREVIOUS_AND_NEXT_BUTTON" = "הסתר את הקודם והבא";
"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,19 +1,21 @@
// Settings
"VERSION" = "uYouPlusのバージョン: %@";
"VERSION_CHECK" = "ここをタップしてアップデートを確認!";
"REPLACE_PREVIOUS_NEXT_BUTTON" = "前後の動画のボタンを置き換える";
"REPLACE_PREVIOUS_NEXT_BUTTON_DESC" = "前後の動画を再生するボタンを早送り、巻き戻しボタンに置き換えます。アプリの再起動が必要です。";
"DONT_EAT_MY_CONTENT" = "2:1の動画とノッチ/Dynamic Islandの最適化 (DontEatMyContent)";
"DONT_EAT_MY_CONTENT_DESC" = "2:1比率の動画とノッチ/Dynamic Islandが干渉することを防ぎます。アプリの再起動が必要です。";
"FIX_GOOGLE_SIGNIN" = "Googleのサインイン (TrollStoreユーザーのみ)";
"REPLACE_PREVIOUS_NEXT_BUTTON" = "前後の動画を再生するボタンを置き換える";
"REPLACE_PREVIOUS_NEXT_BUTTON_DESC" = "次の動画と前の動画を再生するボタンをそれぞれ早送りと巻き戻しボタンに置き換えます。アプリの再起動が必要です。";
"FIX_GOOGLE_SIGNIN" = "Googleのサインインを修正 (TrollStoreユーザーのみ)";
"FIX_GOOGLE_SIGNIN_DESC" = "アプリがTrollStoreでインストールされた場合のみ機能します。このオプションを有効にしてGoogleアカウントでサインインできるようにします。アプリの再起動が必要です。";
"KILL_APP" = "YouTubeを閉じる";
"KILL_APP_DESC" = "ここをタップしてYouTubeを終了できます";
"HIDE_PREVIOUS_AND_NEXT_BUTTON" = "前後の動画のボタンを非表示";
"HIDE_PREVIOUS_AND_NEXT_BUTTON_DESC" = "動画コントロールのオーバーレイで前後の動画のボタンを非表示にします。";
"HIDE_PREVIOUS_AND_NEXT_BUTTON" = "前後の動画を再生するボタンを非表示";
"HIDE_PREVIOUS_AND_NEXT_BUTTON_DESC" = "動画コントロールのオーバーレイで次の動画と前の動画を再生するボタンを非表示にします";
"YT_MINIPLAYER" = "すべての動画でミニプレーヤーを有効にする";
"YT_MINIPLAYER_DESC" = "例: 子ども向けの動画";
"YT_MINIPLAYER_DESC" = "例子ども向けの動画";
"CAST_CONFIRM" = "キャストする前に確認をする (YTCastConfirm)";
"CAST_CONFIRM_DESC" = "誤ってテレビにキャストしないように、確認の警告を表示します。";
@@ -37,13 +39,13 @@
"AUTO_FULLSCREEN_DESC" = "動画を自動でフルスクリーンにします。";
"HIDE_HUD_MESSAGES" = "HUDのメッセージを非表示";
"HIDE_HUD_MESSAGES_DESC" = "例: 字幕がオン/オフになりました、ループ再生はオンになっています、等";
"HIDE_HUD_MESSAGES_DESC" = "例字幕がオン/オフになりました、ループ再生はオンになっています、等";
"OLED_DARKMODE" = "有機ELダークモード (実験的機能)";
"OLED_DARKMODE_DESC" = "正しく動作しない可能性があります。この設定を変更した場合、アプリの再起動が必要です。";
"OLED_DARKMODE_DESC" = "正常に動作しない可能性があります。この設定を変更した場合、アプリの再起動が必要です。";
"OLED_KEYBOARD" = "有機ELキーボード (実験的機能)";
"OLED_KEYBOARD_DESC" = "正しく動作しない可能性があります。この設定を変更した場合、アプリの再起動が必要です。";
"OLED_KEYBOARD_DESC" = "正常に動作しない可能性があります。この設定を変更した場合、アプリの再起動が必要です。";
"HIDE_PAID_PROMOTION_CARDS" = "プロモーションバナーを非表示";
"HIDE_PAID_PROMOTION_CARDS_DESC" = "一部の動画で表示される「プロモーションを含みます」のバナーを非表示にします。";
@@ -1,4 +1,7 @@
// Settings
"VERSION" = "uYouPlus 버전: %@";
"VERSION_CHECK" = "업데이트하려면 탭하세요!";
"DONT_EAT_MY_CONTENT" = "노치/아일랜드 영역이 2:1 비율 비디오를 가리지 않게 함 (DontEatMyContent)";
"DONT_EAT_MY_CONTENT_DESC" = "노치/다이내믹 아일랜드 영역이 유튜브의 2:1 비율 영상 일부를 가리는 것을 막아줍니다. 앱을 다시 시작해야 합니다.";
@@ -8,9 +11,6 @@
"FIX_GOOGLE_SIGNIN" = "구글 로그인 문제 수정 (TrollStore 사용자만 해당)";
"FIX_GOOGLE_SIGNIN_DESC" = "TrollStore를 통해 설치된 앱에서만 동작합니다: 구글 계정으로 로그인하려면 이 옵션을 켜 주세요. 앱을 다시 시작해야 합니다.";
"KILL_APP" = "YouTube 닫기";
"KILL_APP_DESC" = "YouTube 앱을 닫으려면 여기를 탭하세요!";
"HIDE_PREVIOUS_AND_NEXT_BUTTON" = "이전, 다음 재생 버튼 숨기기";
"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" = "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,4 +1,9 @@
// Settings
"VERSION" = "Versão do uYouPlus: %@";
"VERSION_CHECK" = "Toque para verificar se há atualização!";
"DONT_EAT_MY_CONTENT" = "Evitar o notch/Island em conteúdo de vídeo 2:1 (DontEatMyContent)";
"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.";
@@ -6,9 +11,6 @@
"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.";
"KILL_APP" = "Fechar o YouTube";
"KILL_APP_DESC" = "Toque aqui para fechar o YouTube!";
"HIDE_PREVIOUS_AND_NEXT_BUTTON" = "Ocultar botão Anterior e Próximo";
"HIDE_PREVIOUS_AND_NEXT_BUTTON_DESC" = "Oculta o botão Anterior e Próximo na sobreposição de controles de vídeo.";
@@ -0,0 +1,57 @@
// Settings
"VERSION" = "Versiune uYouPlus: %@";
"VERSION_CHECK" = "Căutare actualizări";
"DONT_EAT_MY_CONTENT" = "Previne apariția Notch/Island pe content video 2:1 (DontEatMyContent)";
"DONT_EAT_MY_CONTENT_DESC" = "Previne tăierea conținutului video 2:1 de către Notch/Dynamic Island . Este necesară repornirea aplicației.";
"REPLACE_PREVIOUS_NEXT_BUTTON" = "Înlocuire butoane Înainte/Înapoi";
"REPLACE_PREVIOUS_NEXT_BUTTON_DESC" = "Înlocuiește butoanele Înainte/Înapoi cu butoanele derulare Înainte/Înapoi. Este necesară repornirea aplicației.";
"FIX_GOOGLE_SIGNIN" = "Rezolvare problemă autentificare cont Google (doar pentru utilizatorii TrollStore)";
"FIX_GOOGLE_SIGNIN_DESC" = "Activează această opțiune doar în cazul în care nu te poți autentifica în contul tău Google și apariția a fost instalată via TrollStore. Dacă te poți autentifica fără probleme, țineți setarea dezactivată. Este necesară repornirea aplicației.";
"HIDE_PREVIOUS_AND_NEXT_BUTTON" = "Ascunde butoanele Înainte/Înapoi";
"HIDE_PREVIOUS_AND_NEXT_BUTTON_DESC" = "Ascunde butoanele Înainte/Înapoi din controalele video.";
"YT_MINIPLAYER" = "Activare Miniplayer pentru toate videoclipurile YouTube";
"YT_MINIPLAYER_DESC" = "De exemplu, videoclipurile destinate pentri copii";
"CAST_CONFIRM" = "Alertă de confirmare înainte de proiectare (YTCastConfirm)";
"CAST_CONFIRM_DESC" = "Afișează o alertă de confirmare înainte de a proiecta, pentru a preveni deturnarea accidentală a TV-ului.";
"HIDE_HOVER_CARD" = "Ascunde ecranele de final (YTNoHoverCards)";
"HIDE_HOVER_CARD_DESC" = "Ascunde ecranele de final de la sfârșitul videoclipurilor.";
"NEW_MINIPLAYER_STYLE" = "Stil nou bară Miniplayer (BigYTMiniPlayer)";
"NEW_MINIPLAYER_STYLE_DESC" = "Este necesară repornirea aplicației.";
"YT_RE_EXPLORE" = "Înlocuire fila Shorts cu fila Explore (YTReExplore)";
"YT_RE_EXPLORE_DESC" = "Este necesară repornirea aplicației.";
"HIDE_SUBTITLES_BUTTON" = "Ascunde butonul Subtitrări";
"HIDE_SUBTITLES_BUTTON_DESC" = "Ascunde butonul Subtitrări din controalele video.";
"HIDE_AUTOPLAY_SWITCH" = "Ascunde comutatorul Redare automată";
"HIDE_AUTOPLAY_SWITCH_DESC" = "Ascunde comutatorul Redare automată din controalele video.";
"AUTO_FULLSCREEN" = "Auto Ecran Întreg (YTAutoFullScreen)";
"AUTO_FULLSCREEN_DESC" = "Redare automată video pe ecran complet.";
"HIDE_HUD_MESSAGES" = "Ascundere Mesaje HUD";
"HIDE_HUD_MESSAGES_DESC" = "Exemplu: Subtitrările sunt activate/dezactivate, Redarea în buclă este activată,...";
"OLED_DARKMODE" = "Mod Întunecat OLED (Experimental)";
"OLED_DARKMODE_DESC" = "Este posibil să nu funcționeze corect în anumite cazuri. Este necesară repornirea aplicației după ce această opțiune este activată/dezactivată.";
"OLED_KEYBOARD" = "Tastatură OLED (Experimental)";
"OLED_KEYBOARD_DESC" = "Este posibil să nu funcționeze corect în anumite cazuri. Este necesară repornirea aplicației.";
"HIDE_PAID_PROMOTION_CARDS" = "Ascunde banner-ul Promovare Plătită";
"HIDE_PAID_PROMOTION_CARDS_DESC" = "Ascunde banner-ul 'Include Promovare Plătită' în unele videoclipuri.";
// YTCastConfirm
"CASTING" = "Proiectare";
"MSG_ARE_YOU_SURE" = "Sunteți sigur că doriți să proiectați?";
"MSG_YES" = "Da";
"MSG_CANCEL" = "Anulare";
@@ -1,17 +1,17 @@
/* uYouPlusSettings */
"DONT_EAT_MY_CONTENT" = "Предотвратить выемку/остров на видеоконтенте 2:1 (DontEatMyContent)";
"DONT_EAT_MY_CONTENT_DESC" = "Не позволяйте вырезу/Dynamic Island поглощать видеоконтент 2:1 на YouTube. Требуется перезапуск приложения.";
"VERSION" = "Версия uYouPlus: %@";
"VERSION_CHECK" = "Нажмите, чтобы проверить доступные обновления.";
"REPLACE_PREVIOUS_NEXT_BUTTON" = "Заменить кнопку "Назад" и "Далее";
"REPLACE_PREVIOUS_NEXT_BUTTON_DESC" = "Замените кнопки «Назад» и «Далее» на кнопки «Перемотка вперед» и «Назад». Требуется перезапуск приложения.";
"DONT_EAT_MY_CONTENT" = "Запретить обрезку контента (DontEatMyContent)";
"DONT_EAT_MY_CONTENT_DESC" = "Запрещает обрезать контент с соотношением сторон 2:1 на устройствах с вырезом. Потребуется перезагрузка.";
"FIX_GOOGLE_SIGNIN" = "Исправить вход через Google (только для пользователя TrollStore)";
"FIX_GOOGLE_SIGNIN_DESC" = "Включайте эту опцию, только если вы не можете войти в свою учетную запись Google и приложение было установлено через TrollStore. Если вы можете нормально войти в систему, оставьте ее отключенной. Требуется перезапуск приложения.";
"REPLACE_PREVIOUS_NEXT_BUTTON" = "Кнопки перемотки вместо «Пред.» и «След.»";
"REPLACE_PREVIOUS_NEXT_BUTTON_DESC" = "Заменяет переключатели «Следующий» и «Предыдущий» на кнопки перемотки на 10 сек. Потребуется перезагрузка.";
"KILL_APP" = "Закрыть YouTube";
"KILL_APP_DESC" = "Нажмите здесь, чтобы закрыть YouTube!";
"FIX_GOOGLE_SIGNIN" = "Исправить авторизацию (TrollStore)";
"FIX_GOOGLE_SIGNIN_DESC" = "Включите данную опцию только не можете войти в учетную запись Google, а приложение установлено через TrollStore. Если удается авторизоваться как обычно, оставьте данную опцию отключенной. Потребуется перезагрузка.";
"HIDE_PREVIOUS_AND_NEXT_BUTTON" = "Скрыть «Пред.» и «След.»";
"HIDE_PREVIOUS_AND_NEXT_BUTTON" = "Скрыть «След.» и «Пред.»";
"HIDE_PREVIOUS_AND_NEXT_BUTTON_DESC" = "Убирает кнопки переключения видео «Следующий» и «Предыдущий» с плеера.";
"YT_MINIPLAYER" = "Мини-плеер для всех видео";
@@ -1,43 +1,44 @@
/* 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 this 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_639-1_codes
3. Translate each line below after each =
3. Translate each line below after each =
4. Open a Pull Request
- You can also add your localization to YouPiP, YTUHD and Return YouTube Dislike. The process is the same:
- You can also add your localization to YTABConfig, YouPiP, YTUHD, and Return YouTube Dislike. The process is the same:
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 updates!";
"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.";
"REPLACE_PREVIOUS_NEXT_BUTTON" = "Replace Previous and Next button";
"REPLACE_PREVIOUS_NEXT_BUTTON_DESC" = "Replace the Previous and Next button with the 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.";
"KILL_APP" = "Close YouTube";
"KILL_APP_DESC" = "Tap here to close YouTube!";
"FIX_GOOGLE_SIGNIN_DESC" = "Only turn on this option 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_DESC" = "Hide Previous and Next button in video controls overlay.";
"HIDE_PREVIOUS_AND_NEXT_BUTTON_DESC" = "Hide the Previous and Next button in video controls overlay.";
"YT_MINIPLAYER" = "Enable the Miniplayer for all YouTube videos";
"YT_MINIPLAYER" = "Enable the mini player for all YouTube videos";
"YT_MINIPLAYER_DESC" = "Kid videos for example.";
"CAST_CONFIRM" = "Confirm alert before casting (YTCastConfirm)";
"CAST_CONFIRM_DESC" = "Show a confirm alert before casting to prevent accidentally hijacking TV.";
"HIDE_HOVER_CARD" = "Hide End screens hover cards (YTNoHoverCards)";
"HIDE_HOVER_CARD_DESC" = "Hide creator End screens (thumbnails) at the end of videos.";
"HIDE_HOVER_CARD_DESC" = "Hide the creator End screens (thumbnails) at the end of videos.";
"NEW_MINIPLAYER_STYLE" = "New miniplayer bar style (BigYTMiniPlayer)";
"NEW_MINIPLAYER_STYLE" = "New mini player bar style (BigYTMiniPlayer)";
"NEW_MINIPLAYER_STYLE_DESC" = "App restart is required.";
"YT_RE_EXPLORE" = "Replace Shorts tab with Explore tab (YTReExplore)";
@@ -56,10 +57,10 @@ https://github.com/PoomSmart/Return-YouTube-Dislikes/tree/main/layout/Library/Ap
"HIDE_HUD_MESSAGES_DESC" = "Example: CC is turned on/off, Video loop is on,...";
"OLED_DARKMODE" = "OLED Dark mode (Experimental)";
"OLED_DARKMODE_DESC" = "Might not working correctly in some cases. App restart is required after you enable/disable this option.";
"OLED_DARKMODE_DESC" = "Might not work correctly in some cases. App restart is required after you enable/disable this option.";
"OLED_KEYBOARD" = "OLED Keyboard (Experimental)";
"OLED_KEYBOARD_DESC" = "Might not working correctly in some cases. App restart is required.";
"OLED_KEYBOARD_DESC" = "Might not work correctly in some cases. App restart is required.";
"HIDE_PAID_PROMOTION_CARDS" = "Hide Paid Promotion banner";
"HIDE_PAID_PROMOTION_CARDS_DESC" = "Hide the 'Includes Paid Promotions' banner in some videos.";
@@ -0,0 +1,72 @@
/* 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
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
3. Translate each line below after each =
4. Open a Pull Request
- You can also add your localization to YTABConfig, YouPiP, YTUHD, Return YouTube Dislike. The process is the same:
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'ın sürümü: %@";
"VERSION_CHECK" = "Güncellemeyi kontrol etmek için dokunun!";
"DONT_EAT_MY_CONTENT" = "2:1 Video İçeriğinde Çentik/Ada Önleme (DontEatMyContent)";
"DONT_EAT_MY_CONTENT_DESC" = "Çentik/Dinamik Ada'nın YouTube'daki 2:1 video içeriğini yemesini önleyin. Uygulamanın yeniden başlatılması gerekir.";
"REPLACE_PREVIOUS_NEXT_BUTTON" = "Önceki ve Sonraki Düğmelerini Değiştir";
"REPLACE_PREVIOUS_NEXT_BUTTON_DESC" = "Önceki ve Sonraki Düğmelerini Hızlı ileri ve Geri Sar düğmeleriyle değiştirin. Uygulamanın yeniden başlatılması gerekir.";
"FIX_GOOGLE_SIGNIN" = "Google Oturumu Açma'yı düzeltin (yalnızca TrollStore kullanıcıları için)";
"FIX_GOOGLE_SIGNIN_DESC" = "Bu seçeneği yalnızca Google hesabınızla oturum açamadığınızda ve uygulama TrollStore aracılığıyla yüklendiyse açın. Normal olarak giriş yapabiliyorsanız, devre dışı bırakın. Uygulamanın yeniden başlatılması gerekir.";
"HIDE_PREVIOUS_AND_NEXT_BUTTON" = "Önceki ve Sonraki düğmelerini gizle";
"HIDE_PREVIOUS_AND_NEXT_BUTTON_DESC" = "Video kontrolleri katmanında Önceki ve Sonraki düğmelerini gizler.";
"YT_MINIPLAYER" = "Tüm YouTube videoları için Mini Oynatıcıyı etkinleştirin";
"YT_MINIPLAYER_DESC" = "Örneğin çocuk videoları.";
"CAST_CONFIRM" = "Yayınlamadan önce uyarıyı onaylayın (YTCastConfirm)";
"CAST_CONFIRM_DESC" = "TV'nin yanlışlıkla ele geçirilmesini önlemek için yayınlamadan önce bir onay uyarısı gösterir.";
"HIDE_HOVER_CARD" = "Bitiş ekranlarının üzerine gelen kartları gizle.(YTNoHoverCards)";
"HIDE_HOVER_CARD_DESC" = "Videoların sonundaki içerik oluşturucu bitiş ekranlarını (küçük resimler) gizler.";
"NEW_MINIPLAYER_STYLE" = "Yeni mini oynatıcı bar stili. (BigYTMiniPlayer)";
"NEW_MINIPLAYER_STYLE_DESC" = "Uygulamanın yeniden başlatılması gerekir.";
"YT_RE_EXPLORE" = "Shorts sekmesini Keşfet sekmesiyle değiştirin (YTReExplore)";
"YT_RE_EXPLORE_DESC" = "Uygulamanın yeniden başlatılması gerekir.";
"HIDE_SUBTITLES_BUTTON" = "Altyazıları düğmesini gizle";
"HIDE_SUBTITLES_BUTTON_DESC" = "Video kontrolleri katmanındaki Altyazılar düğmesini gizler.";
"HIDE_AUTOPLAY_SWITCH" = "Otomatik oynatma anahtarını gizle";
"HIDE_AUTOPLAY_SWITCH_DESC" = "Otomatik oynat anahtarını video kontrolleri katmanından gizler.";
"AUTO_FULLSCREEN" = "Otomatik Tam Ekran (YTAutoFullScreen)";
"AUTO_FULLSCREEN_DESC" = "Videoları otomatik olarak tam ekranda oynatır.";
"HIDE_HUD_MESSAGES" = "Gösterge Paneli Mesajlarını gizle";
"HIDE_HUD_MESSAGES_DESC" = "Örnek: Altyazılar açıldı/kapandı, Video döngüsü açık,...";
"OLED_DARKMODE" = "OLED Karanlık modu (Deneysel)";
"OLED_DARKMODE_DESC" = "Bazı durumlarda düzgün çalışmayabilir. Bu seçeneği etkinleştirdikten/devre dışı bıraktıktan sonra uygulamanın yeniden başlatılması gerekir.";
"OLED_KEYBOARD" = "OLED Klavye (Deneysel)";
"OLED_KEYBOARD_DESC" = "Bazı durumlarda düzgün çalışmayabilir. Uygulamanın yeniden başlatılması gerekir.";
"HIDE_PAID_PROMOTION_CARDS" = "Ücretli Promosyon afişini gizle";
"HIDE_PAID_PROMOTION_CARDS_DESC" = "Bazı videolarda 'Ücretli Promosyonları İçerir' afişini gizler.";
// YTCastConfirm
"CASTING" = "Yayınlar";
"MSG_ARE_YOU_SURE" = "Yayınlamaya başlamak istediğinizden emin misiniz?";
"MSG_YES" = "Evet";
"MSG_CANCEL" = "İptal";
@@ -1,4 +1,7 @@
// Settings
"VERSION" = "Phiên bản của uYouPlus: %@";
"VERSION_CHECK" = "Chạm để kiểm tra bản cập nhật!";
"DONT_EAT_MY_CONTENT" = "Ẩn tai thỏ/Dynamic Island (DontEatMyContent)";
"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.";
@@ -8,9 +11,6 @@
"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.";
"KILL_APP" = "Đóng ứng dụng";
"KILL_APP_DESC" = "Chạm để đóng YouTube!";
"HIDE_PREVIOUS_AND_NEXT_BUTTON" = "Ẩn nút Next và nút Previous";
"HIDE_PREVIOUS_AND_NEXT_BUTTON_DESC" = "Ẩn nút Next và nút Previous trong trình phát video.";
@@ -1,10 +1,16 @@
// Settings
"REPLACE_PREVIOUS_NEXT_BUTTON" = "替换上一个/下一个按钮";
"REPLACE_PREVIOUS_NEXT_BUTTON_DESC" = "将播放器控制界面上的上一个/下一个按钮替换成快进/快退按钮。更改本设置后需要重启App。";
"VERSION" = "当前uYouPlus插件版本:%@";
"VERSION_CHECK" = "点击此处检查更新!";
"FIX_GOOGLE_SIGNIN" = "修复Google账号登录问题(仅针对TrollStore用户";
"FIX_GOOGLE_SIGNIN_DESC" = "仅在使用TrollStore安装本App的情况下生效:启用本选项后可正常登录您的Google账号。更改本设置后需要重启App。";
"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_DESC" = "点击此处关闭YouTube!";
@@ -15,16 +21,16 @@
"YT_MINIPLAYER" = "为所有YouTube视频启用迷你播放器";
"YT_MINIPLAYER_DESC" = "例如:面向儿童的视频。";
"CAST_CONFIRM" = "投屏前确认 (YTCastConfirm)";
"CAST_CONFIRM" = "投屏前确认 YTCastConfirm";
"CAST_CONFIRM_DESC" = "在投屏前显示确认对话框以防意外劫屏。";
"HIDE_HOVER_CARD" = "隐藏片尾画面悬浮卡片 (YTNoHoverCards)";
"HIDE_HOVER_CARD" = "隐藏片尾画面悬浮卡片 YTNoHoverCards";
"HIDE_HOVER_CARD_DESC" = "隐藏视频结尾处的创作者片尾画面元素(缩略图)。";
"NEW_MINIPLAYER_STYLE" = "新迷你播放器风格 (BigYTMiniPlayer)";
"NEW_MINIPLAYER_STYLE" = "新迷你播放器风格 BigYTMiniPlayer";
"NEW_MINIPLAYER_STYLE_DESC" = "更改本设置后需要重启App。";
"YT_RE_EXPLORE" = "将Shorts选项卡替换成探索选项卡 (YTReExplore)";
"YT_RE_EXPLORE" = "将Shorts选项卡替换成探索选项卡 YTReExplore";
"YT_RE_EXPLORE_DESC" = "更改本设置后需要重启App。";
"HIDE_SUBTITLES_BUTTON" = "隐藏字幕按钮";
@@ -33,7 +39,7 @@
"HIDE_AUTOPLAY_SWITCH" = "隐藏自动播放模式开关";
"HIDE_AUTOPLAY_SWITCH_DESC" = "隐藏视频播放器控制界面上的自动播放开关。";
"AUTO_FULLSCREEN" = "自动全屏 (YTAutoFullScreen)";
"AUTO_FULLSCREEN" = "自动全屏 YTAutoFullScreen";
"AUTO_FULLSCREEN_DESC" = "自动全屏播放视频。";
"HIDE_HUD_MESSAGES" = "隐藏系统提醒";
@@ -1,7 +1,15 @@
// Settings
"VERSION" = "uYouPlus 版本為: %@";
"VERSION_CHECK" = "查看最新版本";
"KILL_APP" = "關閉YouTube";
"KILL_APP_DESC" = "按這裡關閉YouTube!";
"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 安裝此應用程式時有效:啟用本設定後即可正常登入 Google 帳號,需要重新啟動應用程式。";
"HIDE_PREVIOUS_AND_NEXT_BUTTON" = "隱藏上一個和下一個按鈕";
"HIDE_PREVIOUS_AND_NEXT_BUTTON_DESC" = "在影片控制層中隱藏上一個和下一個按鈕";
@@ -10,40 +18,40 @@
"YT_MINIPLAYER_DESC" = "例如兒童影片";
"CAST_CONFIRM" = "投放前確認 (YTCastConfirm)";
"CAST_CONFIRM_DESC" = "在投放前顯示確認訊息,以防止意外攔劫電視。";
"CAST_CONFIRM_DESC" = "在投放前顯示確認訊息,以防止家人幹樵。";
"HIDE_HOVER_CARD" = "隱藏片尾畫面懸浮卡片 (YTNoHoverCards)";
"HIDE_HOVER_CARD_DESC" = "在影片結尾隱藏創作者結束畫面(縮略圖)。";
"HIDE_HOVER_CARD_DESC" = "在影片結尾隱藏創作者結束畫面。";
"NEW_MINIPLAYER_STYLE" = "新的迷你播放器控制列風格 (BigYTMiniPlayer)";
"NEW_MINIPLAYER_STYLE" = "迷你播放器 (BigYTMiniPlayer)";
"NEW_MINIPLAYER_STYLE_DESC" = "需要重新啟動應用程式。";
"YT_RE_EXPLORE" = "用探索選項卡替換Shorts選項卡 (YTReExplore)";
"YT_RE_EXPLORE" = "用探索選項卡代替 Shorts 選項卡 (YTReExplore)";
"YT_RE_EXPLORE_DESC" = "需要重新啟動應用程式。";
"HIDE_SUBTITLES_BUTTON" = "隱藏字幕按鈕";
"HIDE_SUBTITLES_BUTTON_DESC" = "隱藏影片控制層中的字幕按鈕。";
"HIDE_AUTOPLAY_SWITCH" = "隱藏自動播放開關";
"HIDE_AUTOPLAY_SWITCH_DESC" = "在影片控制中隱藏自動播放開關。";
"HIDE_AUTOPLAY_SWITCH_DESC" = "在影片控制中隱藏自動播放開關。";
"AUTO_FULLSCREEN" = "自動全螢幕 (YTAutoFullScreen)";
"AUTO_FULLSCREEN_DESC" = "自動全螢幕播放影片。";
"HIDE_HUD_MESSAGES" = "隱藏 HUD 訊息";
"HIDE_HUD_MESSAGES_DESC" = "舉例來說CC字幕 開啟/關閉影片循環開啟...";
"HIDE_HUD_MESSAGES_DESC" = "例如CC字幕開啟/關閉影片循環開啟...";
"OLED_DARKMODE" = "OLED 深色模式(實驗性)";
"OLED_DARKMODE_DESC" = "在某些情況下可能無法正常作。啟用/禁用此選項後,需要重新啟動應用程式。";
"OLED_DARKMODE_DESC" = "在某些情況下無法正常作。更動此選項後,需要重新啟動應用程式。";
"OLED_KEYBOARD" = "OLED 鍵盤(實驗性)";
"OLED_KEYBOARD_DESC" = "在某些情況下可能無法正常作。需要重新啟動應用程式。";
"OLED_KEYBOARD_DESC" = "在某些情況下可能無法正常作。需要重新啟動應用程式。";
"HIDE_PAID_PROMOTION_CARDS" = "隱藏付費促銷橫幅";
"HIDE_PAID_PROMOTION_CARDS_DESC" = "在某些影片中隱藏包括付費促銷橫幅。";
"HIDE_PAID_PROMOTION_CARDS" = "隱藏付費橫幅YTNoPaidPromo";
"HIDE_PAID_PROMOTION_CARDS_DESC" = "在某些影片中隱藏包括付費促銷橫幅。";
// YTCastConfirm
"CASTING" = "投放中";
"MSG_ARE_YOU_SURE" = "確定要開始投放嗎?";
"MSG_ARE_YOU_SURE" = "是否開始投放嗎?";
"MSG_YES" = "確定";
"MSG_CANCEL" = "取消";
+290 -107
View File
@@ -19,6 +19,9 @@
#import "Tweaks/YouTubeHeader/YTPlayerOverlayProvider.h"
#import "Tweaks/YouTubeHeader/YTReelWatchPlaybackOverlayView.h"
#import "Tweaks/YouTubeHeader/YTReelPlayerBottomButton.h"
#import "Tweaks/YouTubeHeader/YTReelPlayerViewController.h"
#import "Tweaks/YouTubeHeader/YTAlertView.h"
#import "Tweaks/YouTubeHeader/YTIElementRenderer.h"
// Tweak's bundle for Localizations support - @PoomSmart - https://github.com/PoomSmart/YouPiP/commit/aea2473f64c75d73cab713e1e2d5d0a77675024f
NSBundle *uYouPlusBundle() {
@@ -26,7 +29,13 @@ NSBundle *uYouPlusBundle() {
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
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"];
if (!bundle)
bundle = [NSBundle bundleWithPath:@"/var/jb/Library/Application Support/uYouPlus.bundle"];
}
});
return bundle;
}
@@ -180,35 +189,16 @@ BOOL dontEatMyContent() {
%hook MDXPlaybackRouteButtonController
- (void)didPressButton:(id)arg1 {
if (castConfirm()) {
UIAlertController* alertController = [%c(UIAlertController) alertControllerWithTitle:LOC(@"CASTING")
message:LOC(@"MSG_ARE_YOU_SURE")
preferredStyle:UIAlertControllerStyleAlert];
UIAlertAction* defaultAction = [%c(UIAlertAction) actionWithTitle:LOC(@"MSG_YES") style:UIAlertActionStyleDefault handler:^(UIAlertAction * action) {
NSBundle *tweakBundle = uYouPlusBundle();
YTAlertView *alertView = [%c(YTAlertView) confirmationDialogWithAction:^{
%orig;
}];
UIAlertAction* noButton = [%c(UIAlertAction)
actionWithTitle:LOC(@"MSG_CANCEL")
style:UIAlertActionStyleDefault
handler: ^(UIAlertAction * action) {
return;
}];
[alertController addAction:defaultAction];
[alertController addAction:noButton];
id rootViewController = [%c(UIApplication) sharedApplication].delegate.window.rootViewController;
if ([rootViewController isKindOfClass:[%c(UINavigationController) class]]) {
rootViewController = ((UINavigationController *)rootViewController).viewControllers.firstObject;
}
if ([rootViewController isKindOfClass:[%c(UITabBarController) class]]) {
rootViewController = ((UITabBarController *)rootViewController).selectedViewController;
}
if ([rootViewController presentedViewController] != nil) {
rootViewController = [rootViewController presentedViewController];
}
[rootViewController presentViewController:alertController animated:YES completion:nil];
} else { return %orig; }
} actionTitle:LOC(@"MSG_YES")];
alertView.title = LOC(@"CASTING");
alertView.subtitle = LOC(@"MSG_ARE_YOU_SURE");
[alertView show];
} else {
return %orig;
}
}
%end
@@ -219,6 +209,29 @@ BOOL dontEatMyContent() {
}
%end
// Hide search ads by @PoomSmart - https://github.com/PoomSmart/YouTube-X
BOOL didLateHook = NO;
%group LateHook
%hook YTIElementRenderer
- (NSData *)elementData {
if (self.hasCompatibilityOptions && self.compatibilityOptions.hasAdLoggingData)
return nil;
return %orig;
}
%end
%end
%hook YTSectionListViewController
- (void)loadWithModel:(id)model {
if (!didLateHook) {
%init(LateHook);
didLateHook = YES;
}
%orig;
}
%end
// Workaround for https://github.com/MiRO92/uYou-for-YouTube/issues/94
%hook UIResponder
%new
@@ -254,14 +267,16 @@ BOOL dontEatMyContent() {
%end
// YTNoCheckLocalNetwork: https://poomsmart.github.io/repo/depictions/ytnochecklocalnetwork.html
%hook YTHotConfig
- (BOOL)isPromptForLocalNetworkPermissionsEnabled { return NO; }
%end
// %hook YTHotConfig
// - (BOOL)isPromptForLocalNetworkPermissionsEnabled { return NO; }
// %end
// YouRememberCaption: https://poomsmart.github.io/repo/depictions/youremembercaption.html
%hook YTColdConfig
- (BOOL)respectDeviceCaptionSetting { return NO; }
- (BOOL)isLandscapeEngagementPanelSwipeRightToDismissEnabled { return YES; }
// A/B flags
%hook YTColdConfig
- (BOOL)respectDeviceCaptionSetting { return NO; } // YouRememberCaption: https://poomsmart.github.io/repo/depictions/youremembercaption.html
- (BOOL)isLandscapeEngagementPanelSwipeRightToDismissEnabled { return YES; } // Swipe right to dismiss the right panel in fullscreen mode
- (BOOL)mainAppCoreClientIosTransientVisualGlitchInPivotBarFix { return NO; } // Fix uYou's label glitching - qnblackcat/uYouPlus#552
- (BOOL)enableSwipeToRemoveInPlaylistWatchEp { return YES; } // Enable swipe right to remove video in Playlist.
%end
// NOYTPremium - https://github.com/PoomSmart/NoYTPremium/
@@ -291,13 +306,26 @@ BOOL dontEatMyContent() {
- (void)showSurveyWithRenderer:(id)arg1 surveyParentResponder:(id)arg2 {}
%end
// Enable Shorts scroll bar - @PoomSmart
// YTShortsProgress - @PoomSmart - https://github.com/PoomSmart/YTShortsProgress
%hook YTReelPlayerViewController
- (BOOL)shouldEnablePlayerBar { return YES; }
- (BOOL)shouldAlwaysEnablePlayerBar { return YES; }
- (BOOL)shouldEnablePlayerBarOnlyOnPause { return NO; }
%end
%hook YTInlinePlayerBarContainerView
- (void)setUserInteractionEnabled:(BOOL)enabled { %orig(YES); }
%hook YTReelPlayerViewControllerSub
- (BOOL)shouldEnablePlayerBar { return YES; }
- (BOOL)shouldAlwaysEnablePlayerBar { return YES; }
- (BOOL)shouldEnablePlayerBarOnlyOnPause { return NO; }
%end
%hook YTColdConfig
- (BOOL)iosEnableVideoPlayerScrubber { return YES; }
- (BOOL)mobileShortsTabInlined { return YES; }
%end
%hook YTHotConfig
- (BOOL)enablePlayerBarForVerticalVideoWhenControlsHiddenInFullscreen { return YES; }
%end
// Workaround for issue #54
@@ -621,6 +649,16 @@ UIColor* raisedColor = [UIColor colorWithRed:0.035 green:0.035 blue:0.035 alpha:
}
%end
// Sub menu?
%hook ELMView
- (void)didMoveToWindow {
%orig;
if (isDarkMode()) {
self.subviews[0].backgroundColor = [UIColor clearColor];
}
}
%end
// iSponsorBlock
%hook SponsorBlockSettingsController
- (void)viewDidLoad {
@@ -731,6 +769,16 @@ UIColor* raisedColor = [UIColor colorWithRed:0.035 green:0.035 blue:0.035 alpha:
}
%end
//
%hook YTBackstageCreateRepostDetailView
- (void)setBackgroundColor:(UIColor *)color {
if (isDarkMode()) {
return %orig([UIColor blackColor]);
}
return %orig;
}
%end
// Others
%hook _ASDisplayView
- (void)didMoveToWindow {
@@ -779,6 +827,11 @@ UIColor* raisedColor = [UIColor colorWithRed:0.035 green:0.035 blue:0.035 alpha:
}
}
%end
// Incompatibility with the new YT Dark theme
%hook YTColdConfig
- (BOOL)uiSystemsClientGlobalConfigUseDarkerPaletteBgColorForNative { return NO; }
%end
%end
# pragma mark - OLED keyboard by @ichitaso <3 - http://gist.github.com/ichitaso/935100fd53a26f18a9060f7195a1be0e
@@ -876,141 +929,271 @@ static void replaceTab(YTIGuideResponse *response) {
%end
// DontEatMyContent - @therealFoxster: https://github.com/therealFoxster/DontEatMyContent
double aspectRatio = 16/9;
bool zoomedToFill = false;
static double videoAspectRatio = 16/9;
static bool zoomedToFill = false;
static bool engagementPanelIsVisible = false, removeEngagementPanelViewControllerWithIdentifierCalled = false;
MLHAMSBDLSampleBufferRenderingView *renderingView;
NSLayoutConstraint *widthConstraint, *heightConstraint, *centerXConstraint, *centerYConstraint;
static MLHAMSBDLSampleBufferRenderingView *renderingView;
static NSLayoutConstraint *widthConstraint, *heightConstraint, *centerXConstraint, *centerYConstraint;
%group gDontEatMyContent
// Retrieve video aspect ratio
%hook YTPlayerView
- (void)setAspectRatio:(CGFloat)aspectRatio {
%orig(aspectRatio);
videoAspectRatio = aspectRatio;
}
%end
%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
// Making renderingView a bit larger since constraining to safe area leaves a gap between the notch and video
CGFloat constant = 24.5; // 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];
// playerView.backgroundColor = [UIColor blueColor];
// renderingViewContainer.backgroundColor = [UIColor greenColor];
// renderingView.backgroundColor = [UIColor redColor];
YTMainAppVideoPlayerOverlayViewController *activeVideoPlayerOverlay = [self activeVideoPlayerOverlay];
// Must check class since YTInlineMutedPlaybackPlayerOverlayViewController doesn't have -(BOOL)isFullscreen
if ([NSStringFromClass([activeVideoPlayerOverlay class]) isEqualToString:@"YTMainAppVideoPlayerOverlayViewController"] && [activeVideoPlayerOverlay isFullscreen]) {
activate();
if ([NSStringFromClass([activeVideoPlayerOverlay class]) isEqualToString:@"YTMainAppVideoPlayerOverlayViewController"] // isKindOfClass doesn't work for some reason
&& [activeVideoPlayerOverlay isFullscreen]) {
if (!zoomedToFill && !engagementPanelIsVisible) DEMC_activate();
} else {
center();
DEMC_centerRenderingView();
}
%orig(animated);
}
- (void)didPressToggleFullscreen {
YTMainAppVideoPlayerOverlayViewController *activeVideoPlayerOverlay = [self activeVideoPlayerOverlay];
if (![activeVideoPlayerOverlay isFullscreen]) // Entering fullscreen
activate();
else // Exiting fullscreen
deactivate();
- (void)didPressToggleFullscreen {
%orig;
if (![[self activeVideoPlayerOverlay] isFullscreen]) { // Entering full screen
if (!zoomedToFill && !engagementPanelIsVisible) DEMC_activate();
} else { // Exiting full screen
DEMC_deactivate();
}
%orig;
}
- (void)didSwipeToEnterFullscreen {
%orig; activate();
- (void)didSwipeToEnterFullscreen {
%orig;
if (!zoomedToFill && !engagementPanelIsVisible) DEMC_activate();
}
- (void)didSwipeToExitFullscreen {
%orig; deactivate();
%orig;
DEMC_deactivate();
}
- (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);
// New video played
-(void)playbackController:(id)playbackController didActivateVideo:(id)video withPlaybackData:(id)playbackData {
%orig(playbackController, video, playbackData);
if ([[self activeVideoPlayerOverlay] isFullscreen]) // New video played while in full screen (landscape)
// Activate since new videos played in full screen aren't zoomed-to-fill by default
// (i.e. the notch/Dynamic Island will cut into content when playing a new video in full screen)
DEMC_activate();
engagementPanelIsVisible = false;
removeEngagementPanelViewControllerWithIdentifierCalled = false;
}
%end
%hook YTVideoZoomOverlayView
// Pinch to zoom
%hook YTVideoFreeZoomOverlayView
- (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();
}
DEMC_deactivate();
%orig(pinchGestureRecognizer);
}
- (void)flashAndHideSnapIndicator {}
// https://github.com/lgariv/UniZoom/blob/master/Tweak.xm
- (void)setSnapIndicatorVisible:(bool)arg1 {
%orig(NO);
// Detect zoom to fill
- (void)showLabelForSnapState:(NSInteger)snapState {
if (snapState == 0) { // Original
zoomedToFill = false;
DEMC_activate();
} else if (snapState == 1) { // Zoomed to fill
zoomedToFill = true;
// No need to deactivate constraints as it's already done in -(void)didRecognizePinch:(UIPinchGestureRecognizer *)
}
%orig(snapState);
}
%end
%end // gDontEatMyContent
// DontEatMycontent - detecting device model
// https://stackoverflow.com/a/11197770/19227228
NSString* deviceName() {
// Mini bar dismiss
%hook YTWatchMiniBarViewController
- (void)dismissMiniBarWithVelocity:(CGFloat)velocity gestureType:(int)gestureType {
%orig(velocity, gestureType);
zoomedToFill = false; // Setting to false since YouTube undoes zoom-to-fill when mini bar is dismissed
}
- (void)dismissMiniBarWithVelocity:(CGFloat)velocity gestureType:(int)gestureType skipShouldDismissCheck:(BOOL)skipShouldDismissCheck {
%orig(velocity, gestureType, skipShouldDismissCheck);
zoomedToFill = false;
}
%end
%hook YTMainAppEngagementPanelViewController
// Engagement panel (comment, description, etc.) about to show up
- (void)viewWillAppear:(BOOL)animated {
if ([self isPeekingSupported]) {
// Shorts (only Shorts support peeking, I think)
} else {
// Everything else
engagementPanelIsVisible = true;
if ([self isLandscapeEngagementPanel]) {
DEMC_deactivate();
}
}
%orig(animated);
}
// Engagement panel about to dismiss
// - (void)viewDidDisappear:(BOOL)animated { %orig; %log; } // Called too late & isn't reliable so sometimes constraints aren't activated even when engagement panel is closed
%end
%hook YTEngagementPanelContainerViewController
// Engagement panel about to dismiss
- (void)notifyEngagementPanelContainerControllerWillHideFinalPanel { // Called in time but crashes if plays new video while in full screen causing engagement panel dismissal
// Must check if engagement panel was dismissed because new video played
// (i.e. if -(void)removeEngagementPanelViewControllerWithIdentifier:(id) was called prior)
if (![self isPeekingSupported] && !removeEngagementPanelViewControllerWithIdentifierCalled) {
engagementPanelIsVisible = false;
if ([self isLandscapeEngagementPanel] && !zoomedToFill) {
DEMC_activate();
}
}
%orig;
}
- (void)removeEngagementPanelViewControllerWithIdentifier:(id)identifier {
// Usually called when engagement panel is open & new video is played or mini bar is dismissed
removeEngagementPanelViewControllerWithIdentifierCalled = true;
%orig(identifier);
}
%end
%end// group gDontEatMyContent
BOOL DEMC_deviceIsSupported() {
// Get device model identifier (e.g. iPhone14,4)
// https://stackoverflow.com/a/11197770/19227228
struct utsname systemInfo;
uname(&systemInfo);
return [NSString stringWithCString:systemInfo.machine encoding:NSUTF8StringEncoding];
}
BOOL isDeviceSupported() {
NSString *identifier = deviceName();
NSArray *unsupportedDevices = UNSUPPORTED_DEVICES;
NSString *deviceModelID = [NSString stringWithCString:systemInfo.machine encoding:NSUTF8StringEncoding];
for (NSString *device in unsupportedDevices) {
if ([device isEqualToString:identifier]) {
NSArray *unsupportedModelIDs = DEMC_UNSUPPORTED_DEVICES;
for (NSString *identifier in unsupportedModelIDs) {
if ([deviceModelID 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
if ([deviceModelID containsString:@"iPhone"]) {
if ([deviceModelID isEqualToString:@"iPhone13,1"]) {
// iPhone 12 mini
return YES;
} else if ([model floatValue] >= 14.0) { // iPhone 13 series and newer
}
NSString *modelNumber = [[deviceModelID stringByReplacingOccurrencesOfString:@"iPhone" withString:@""] stringByReplacingOccurrencesOfString:@"," withString:@"."];
if ([modelNumber floatValue] >= 14.0) {
// iPhone 13 series and newer
return YES;
} else return NO;
} else return NO;
}
void activate() {
if (aspectRatio < THRESHOLD || zoomedToFill) return;
void DEMC_activate() {
if (videoAspectRatio < DEMC_THRESHOLD) {
DEMC_deactivate();
return;
}
// NSLog(@"activate");
center();
DEMC_centerRenderingView();
renderingView.translatesAutoresizingMaskIntoConstraints = NO;
widthConstraint.active = YES;
heightConstraint.active = YES;
}
void deactivate() {
void DEMC_deactivate() {
// NSLog(@"deactivate");
center();
DEMC_centerRenderingView();
renderingView.translatesAutoresizingMaskIntoConstraints = YES;
widthConstraint.active = NO;
heightConstraint.active = NO;
}
void center() {
void DEMC_centerRenderingView() {
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
// Workaround for qnblackcat/uYouPlus#617
static BOOL didFinishLaunching;
%hook YTAppDelegate
- (BOOL)application:(UIApplication *)application
didFinishLaunchingWithOptions:(NSDictionary<UIApplicationLaunchOptionsKey, id> *)launchOptions {
didFinishLaunching = %orig;
self.downloadsVC = [self.downloadsVC init];
return didFinishLaunching;
}
%end
%hook DownloadsPagerVC
- (instancetype)init {
return didFinishLaunching ? %orig : self;
}
%end
// iOS 16 uYou crash fix - @level3tjg: https://github.com/qnblackcat/uYouPlus/pull/224
%group iOS16
%hook OBPrivacyLinkButton
@@ -1051,7 +1234,7 @@ void center() {
if (replacePreviousAndNextButton()) {
%init(gReplacePreviousAndNextButton);
}
if (dontEatMyContent() && isDeviceSupported()) {
if (dontEatMyContent() && DEMC_deviceIsSupported()) {
%init(gDontEatMyContent);
}
if (@available(iOS 16, *)) {