Compare commits
313
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
679ea7046c | ||
|
|
53b5fde3b7 | ||
|
|
2bd2174ffe | ||
|
|
79d9f0920c | ||
|
|
3c252a79d1 | ||
|
|
e3326f9adf | ||
|
|
64bab9b6d5 | ||
|
|
9ebbda2671 | ||
|
|
6b62aca494 | ||
|
|
f4d400d059 | ||
|
|
6efdf519f4 | ||
|
|
684f542aca | ||
|
|
d38993709e | ||
|
|
c5cdafd96f | ||
|
|
0635b3cfcf | ||
|
|
50baafebce | ||
|
|
4332070996 | ||
|
|
bc286ef74f | ||
|
|
fc6132d261 | ||
|
|
f560be0b66 | ||
|
|
2d7f2b7d2a | ||
|
|
df01ad4d48 | ||
|
|
5a76a9336b | ||
|
|
9a1c8c218d | ||
|
|
a1cf67d8fe | ||
|
|
c5fc18b755 | ||
|
|
42e3977f36 | ||
|
|
e50c308ec4 | ||
|
|
c7e24c47e2 | ||
|
|
9aa506b264 | ||
|
|
bd4fd45cf3 | ||
|
|
6b0b2133bd | ||
|
|
db1f9b6bc6 | ||
|
|
0c62646af2 | ||
|
|
96517062e1 | ||
|
|
a2441bfbc5 | ||
|
|
e15f540ab0 | ||
|
|
a3877ab91c | ||
|
|
d3c7347d31 | ||
|
|
6f4e2a3623 | ||
|
|
6981ae9a18 | ||
|
|
70e17b3ce0 | ||
|
|
46163626ed | ||
|
|
6b3ddf2915 | ||
|
|
eefb554631 | ||
|
|
12a3290350 | ||
|
|
b5b1e44d46 | ||
|
|
4362a638fe | ||
|
|
b4094e0c07 | ||
|
|
bcac2c1931 | ||
|
|
e69232105d | ||
|
|
bcfe9d2891 | ||
|
|
3f05614fa7 | ||
|
|
b1554de1a3 | ||
|
|
27e434e2e1 | ||
|
|
ac8983c935 | ||
|
|
11ea8025b8 | ||
|
|
38af87bd72 | ||
|
|
5973744c44 | ||
|
|
44ee4323ca | ||
|
|
cee7a1a8ca | ||
|
|
815b1822ed | ||
|
|
d29fafdc63 | ||
|
|
7b8577c339 | ||
|
|
05b525f40b | ||
|
|
70af294bc9 | ||
|
|
d2e11dad1d | ||
|
|
edd9ca4436 | ||
|
|
5cd00bf13c | ||
|
|
3569959058 | ||
|
|
7c12f67c03 | ||
|
|
5a7189fb95 | ||
|
|
18ce6e99c5 | ||
|
|
aa46f2da01 | ||
|
|
c7539edbe2 | ||
|
|
235cbea5eb | ||
|
|
272163344f | ||
|
|
8ed1dab75f | ||
|
|
c32f00cca2 | ||
|
|
a88833a5e4 | ||
|
|
631068acfa | ||
|
|
5b3580a663 | ||
|
|
8295fa4842 | ||
|
|
2f4ea4130c | ||
|
|
e2b31644af | ||
|
|
f4a9aeabb0 | ||
|
|
398660cd98 | ||
|
|
3f6f62a3e4 | ||
|
|
0db40410d8 | ||
|
|
82c7b1367b | ||
|
|
c04ff7e6d5 | ||
|
|
0a0f655db5 | ||
|
|
22b45d0627 | ||
|
|
221cc0ee40 | ||
|
|
54ca35f15e | ||
|
|
26f6d77584 | ||
|
|
9964988bbb | ||
|
|
6526b9f470 | ||
|
|
9eb8ca1950 | ||
|
|
cd6a32a778 | ||
|
|
a85b50d1ff | ||
|
|
ad0c100c41 | ||
|
|
28b0e66841 | ||
|
|
0b9ac11842 | ||
|
|
7b4af1d938 | ||
|
|
ab09ac27f1 | ||
|
|
b52aaac2d1 | ||
|
|
7bafd0f5e1 | ||
|
|
c39f2b5a69 | ||
|
|
f66d9a4de1 | ||
|
|
04939cde2c | ||
|
|
a0e453da45 | ||
|
|
6e8a99e733 | ||
|
|
383a644864 | ||
|
|
4e71210618 | ||
|
|
6f26599f2a | ||
|
|
d0abd34fe5 | ||
|
|
08437ff883 | ||
|
|
252cb10e30 | ||
|
|
5692f87208 | ||
|
|
333b821eca | ||
|
|
8e59b59faa | ||
|
|
ddcd37be67 | ||
|
|
a1f03be5b6 | ||
|
|
fdea5e55e4 | ||
|
|
6652068c9b | ||
|
|
125e8948c7 | ||
|
|
3d79dfa8fd | ||
|
|
da75038a9c | ||
|
|
598c62605b | ||
|
|
e88eeed035 | ||
|
|
ea61bb0d65 | ||
|
|
6ea9f1b4a7 | ||
|
|
e911ee4e4d | ||
|
|
314b2aaaf9 | ||
|
|
971eff33ff | ||
|
|
48228e14f0 | ||
|
|
c85d928952 | ||
|
|
9ce39051ef | ||
|
|
cb2c7ff951 | ||
|
|
223a0b094b | ||
|
|
36a1f12671 | ||
|
|
6b799b5c01 | ||
|
|
fc392e1742 | ||
|
|
87813f8acb | ||
|
|
5f659617e9 | ||
|
|
645036d28e | ||
|
|
f00e66bded | ||
|
|
f91287b737 | ||
|
|
58abfbaffd | ||
|
|
dad5377435 | ||
|
|
a902d90449 | ||
|
|
2657f8ca7c | ||
|
|
dcb41ab74d | ||
|
|
0147865c53 | ||
|
|
b56461a439 | ||
|
|
9d27a3b9c0 | ||
|
|
ea309fd094 | ||
|
|
1bed1db404 | ||
|
|
c864966f11 | ||
|
|
409537eba3 | ||
|
|
6604f5e497 | ||
|
|
0b64741d50 | ||
|
|
34a66bec01 | ||
|
|
dcb1a2aba1 | ||
|
|
db1318b576 | ||
|
|
ad2c426fe6 | ||
|
|
e6835b9e33 | ||
|
|
5741ae5584 | ||
|
|
aa338eab73 | ||
|
|
799a98951a | ||
|
|
8b95b82492 | ||
|
|
4a5f1dae69 | ||
|
|
e896843357 | ||
|
|
4c5a201831 | ||
|
|
cce821741d | ||
|
|
c4fd520a3d | ||
|
|
80c36940f6 | ||
|
|
2d17a16aad | ||
|
|
72a6f1caac | ||
|
|
975cb6005c | ||
|
|
6180fe7512 | ||
|
|
aed82d4f12 | ||
|
|
44a128d16f | ||
|
|
b1ea29dc6c | ||
|
|
85ca0ea633 | ||
|
|
377ebec525 | ||
|
|
35b6374d8c | ||
|
|
99299cc5bf | ||
|
|
bb5c02272f | ||
|
|
7a128ab908 | ||
|
|
2191478712 | ||
|
|
39849cac51 | ||
|
|
1f5ad62544 | ||
|
|
c04f0b7e43 | ||
|
|
380ee96a71 | ||
|
|
15124cf1c9 | ||
|
|
9bd1be5024 | ||
|
|
eb0a64bd69 | ||
|
|
02bfe1ada3 | ||
|
|
b62746061d | ||
|
|
e2cd37a8b6 | ||
|
|
e5b9ff21cf | ||
|
|
2e7fd253a8 | ||
|
|
3aa7c57d82 | ||
|
|
11ddcd421d | ||
|
|
6418f3daeb | ||
|
|
4b283110a6 | ||
|
|
2615436031 | ||
|
|
81088fadd3 | ||
|
|
5adaec2c93 | ||
|
|
7ac253963e | ||
|
|
2d2b469f1f | ||
|
|
9e98ad9482 | ||
|
|
1d5de3cd4c | ||
|
|
1266cb5a38 | ||
|
|
4fee21517e | ||
|
|
2ff0f3fb56 | ||
|
|
329fb1681a | ||
|
|
c78e5b9fd9 | ||
|
|
7b9fd7dcfb | ||
|
|
922ab4e9b7 | ||
|
|
c8a4acfff0 | ||
|
|
d53b400235 | ||
|
|
3cabc4405d | ||
|
|
d3a347a914 | ||
|
|
17adfaf534 | ||
|
|
edc1ac3912 | ||
|
|
21d3e74f9f | ||
|
|
3bd1914a36 | ||
|
|
7ff88f4106 | ||
|
|
b6304bf20a | ||
|
|
0db3c368a0 | ||
|
|
9bd31e7189 | ||
|
|
58488a1d89 | ||
|
|
c9547cae78 | ||
|
|
f8336d0352 | ||
|
|
e549c1e9e9 | ||
|
|
afb5cf1cb6 | ||
|
|
f275f72413 | ||
|
|
46b4ea6a27 | ||
|
|
23ba60a3ba | ||
|
|
93b7aa9258 | ||
|
|
0db1e09917 | ||
|
|
6a8798597b | ||
|
|
ac6fa7b853 | ||
|
|
49b75626b9 | ||
|
|
8ec1cb8cba | ||
|
|
12f80fa7ee | ||
|
|
09b765d7d9 | ||
|
|
fd8dc7a61d | ||
|
|
1036272ce3 | ||
|
|
41ae9ef959 | ||
|
|
2b141cb50f | ||
|
|
02addcb00c | ||
|
|
53f62444ba | ||
|
|
922b86a749 | ||
|
|
976c103dce | ||
|
|
8dc2ed3166 | ||
|
|
932cae3473 | ||
|
|
3d05302b9b | ||
|
|
40af55583f | ||
|
|
e389801893 | ||
|
|
ee98ec6237 | ||
|
|
516749e081 | ||
|
|
c5935309ca | ||
|
|
94fdb176ea | ||
|
|
a2b9a6ac73 | ||
|
|
96b62b5791 | ||
|
|
49615dd41c | ||
|
|
96c528fa72 | ||
|
|
d959269a3b | ||
|
|
7045e82565 | ||
|
|
11308d59b5 | ||
|
|
e6622b7e74 | ||
|
|
f8a02e11d7 | ||
|
|
43d593d88d | ||
|
|
f4bf32bcad | ||
|
|
b16c54cd63 | ||
|
|
f45f1946b4 | ||
|
|
f325a31196 | ||
|
|
cab48bbe9e | ||
|
|
5424e4a9e8 | ||
|
|
d7a7c90cf0 | ||
|
|
fe45ebaac1 | ||
|
|
4590369aa1 | ||
|
|
36bf21ad2e | ||
|
|
c2d1581698 | ||
|
|
ca0650d73a | ||
|
|
ad29207afd | ||
|
|
64c7717b38 | ||
|
|
25f66162c5 | ||
|
|
5becdf5a85 | ||
|
|
9145301cc8 | ||
|
|
b2b14305eb | ||
|
|
02ec80256c | ||
|
|
b37f1e1a24 | ||
|
|
244e5a3576 | ||
|
|
3a532cfa63 | ||
|
|
ef153f5d9c | ||
|
|
4258986378 | ||
|
|
dae08da6bf | ||
|
|
7f0e749030 | ||
|
|
c6dd02a759 | ||
|
|
23d745e869 | ||
|
|
2116d96e6a | ||
|
|
f2cb699e3b | ||
|
|
fbafccf1bd | ||
|
|
029ab22b9f | ||
|
|
f4215a7b0b | ||
|
|
0d1e7bad8e | ||
|
|
e97ada36c1 | ||
|
|
4d1b478606 |
@@ -1,6 +1,6 @@
|
|||||||
---
|
---
|
||||||
name: Bug
|
name: Bug
|
||||||
about: Create a report to help us improve
|
about: Make sure you complete the template. Otherwise, it will be closed without further explanation!
|
||||||
title: "[Bug]"
|
title: "[Bug]"
|
||||||
labels: bug
|
labels: bug
|
||||||
assignees: ''
|
assignees: ''
|
||||||
@@ -14,8 +14,8 @@ _Make sure you complete the template. Otherwise, it will be closed without furth
|
|||||||
### Device info
|
### Device info
|
||||||
- iOS/iPadOS version:
|
- iOS/iPadOS version:
|
||||||
- Device model:
|
- Device model:
|
||||||
- Sideload tool (Ex: AltStore, Sideloadly...)
|
- Sideload tool (Ex: AltStore, Sideloadly, TrollStore,...)
|
||||||
- Version of uYouPlus:
|
- The specific version of uYouPlus: _**latest** or **newest** is NOT a version number!!_
|
||||||
|
|
||||||
### Describe the bug
|
### Describe the bug
|
||||||
|
|
||||||
@@ -23,10 +23,13 @@ _Make sure you complete the template. Otherwise, it will be closed without furth
|
|||||||
### How to reproduce the bug
|
### How to reproduce the bug
|
||||||
_(Please attach videos or screenshots if possible)_
|
_(Please attach videos or screenshots if possible)_
|
||||||
|
|
||||||
|
|
||||||
### Crash log (if possible)
|
### Crash log (if possible)
|
||||||
_(The crash log can be found in the Settings app - Privacy - Analytics & Improvements - Analytics Data - Youtube...)_
|
_(The crash log can be found in the Settings app > Privacy > Analytics & Improvements > Analytics Data > Youtube...)_
|
||||||
|
|
||||||
|
### Are you using the newest version of uYouPlus? If not, why?
|
||||||
|
_(Developers spend time and effort to fix bugs & add improvements with every release. Why don't you update to the latest version before reporting about an issue???)_
|
||||||
|
|
||||||
### Additional context:
|
### Does the issue happen with the official YouTube from AppStore?
|
||||||
|
_(Well, YouTube itself is buggy sometimes...)_
|
||||||
|
|
||||||
|
### Additional context:
|
||||||
|
|||||||
@@ -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
|
https://github.com/qnblackcat/uYouPlus/wiki/FAQ
|
||||||
|
|
||||||
###
|
###
|
||||||
|
|||||||
@@ -9,7 +9,7 @@ on:
|
|||||||
uyou_version:
|
uyou_version:
|
||||||
description: "The version of uYou"
|
description: "The version of uYou"
|
||||||
default: "2.1"
|
default: "2.1"
|
||||||
required: false
|
required: true
|
||||||
type: string
|
type: string
|
||||||
decrypted_youtube_url:
|
decrypted_youtube_url:
|
||||||
description: "The direct URL to the decrypted YouTube ipa"
|
description: "The direct URL to the decrypted YouTube ipa"
|
||||||
@@ -23,7 +23,7 @@ on:
|
|||||||
type: string
|
type: string
|
||||||
create_release:
|
create_release:
|
||||||
description: "Create a draft release"
|
description: "Create a draft release"
|
||||||
default: false
|
default: true
|
||||||
required: false
|
required: false
|
||||||
type: boolean
|
type: boolean
|
||||||
|
|
||||||
@@ -34,7 +34,7 @@ concurrency:
|
|||||||
jobs:
|
jobs:
|
||||||
build:
|
build:
|
||||||
name: Build uYouPlus
|
name: Build uYouPlus
|
||||||
runs-on: macos-latest
|
runs-on: macos-11
|
||||||
permissions:
|
permissions:
|
||||||
contents: write
|
contents: write
|
||||||
|
|
||||||
@@ -55,21 +55,28 @@ jobs:
|
|||||||
ref: master
|
ref: master
|
||||||
path: theos
|
path: theos
|
||||||
submodules: recursive
|
submodules: recursive
|
||||||
|
|
||||||
- name: Download iOS 15 SDK
|
- 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: |
|
run: |
|
||||||
curl -LO https://github.com/chrisharper22/sdks/archive/main.zip
|
svn checkout -q https://github.com/chrisharper22/sdks/trunk/iPhoneOS15.5.sdk
|
||||||
TMP=$(mktemp -d)
|
mv *.sdk $THEOS/sdks
|
||||||
unzip -qq main.zip -d $TMP
|
|
||||||
mv $TMP/sdks-main/*.sdk $THEOS/sdks
|
|
||||||
rm -r main.zip $TMP
|
|
||||||
env:
|
env:
|
||||||
THEOS: ${{ github.workspace }}/theos
|
THEOS: ${{ github.workspace }}/theos
|
||||||
|
|
||||||
- name: Setup Theos Jailed
|
- name: Setup Theos Jailed
|
||||||
uses: actions/checkout@v3
|
uses: actions/checkout@v3
|
||||||
with:
|
with:
|
||||||
repository: kabiroberai/theos-jailed
|
repository: qnblackcat/theos-jailed
|
||||||
ref: master
|
ref: master
|
||||||
path: theos-jailed
|
path: theos-jailed
|
||||||
submodules: recursive
|
submodules: recursive
|
||||||
@@ -80,7 +87,7 @@ jobs:
|
|||||||
env:
|
env:
|
||||||
THEOS: ${{ github.workspace }}/theos
|
THEOS: ${{ github.workspace }}/theos
|
||||||
|
|
||||||
- name: Download Dylibs
|
- name: Download uYou & Prepare YouTube iPA
|
||||||
run: |
|
run: |
|
||||||
curl "https://raw.githubusercontent.com/Muirey03/RemoteLog/master/RemoteLog.h" --output "$THEOS/include/RemoteLog.h"
|
curl "https://raw.githubusercontent.com/Muirey03/RemoteLog/master/RemoteLog.h" --output "$THEOS/include/RemoteLog.h"
|
||||||
curl "https://miro92.com/repo/debs/com.miro.uyou_${{ env.UYOU_VERSION }}_iphoneos-arm.deb" --output "./main/Tweaks/uYou/com.miro.uyou_${{ env.UYOU_VERSION }}_iphoneos-arm.deb"
|
curl "https://miro92.com/repo/debs/com.miro.uyou_${{ env.UYOU_VERSION }}_iphoneos-arm.deb" --output "./main/Tweaks/uYou/com.miro.uyou_${{ env.UYOU_VERSION }}_iphoneos-arm.deb"
|
||||||
@@ -95,14 +102,16 @@ jobs:
|
|||||||
UYOU_VERSION: ${{ inputs.uyou_version }}
|
UYOU_VERSION: ${{ inputs.uyou_version }}
|
||||||
YOUTUBE_URL: ${{ inputs.decrypted_youtube_url }}
|
YOUTUBE_URL: ${{ inputs.decrypted_youtube_url }}
|
||||||
|
|
||||||
- name: Fix compiling && Build Package
|
- name: Fix compiling & Build Package
|
||||||
id: build_package
|
id: build_package
|
||||||
run: |
|
run: |
|
||||||
|
(echo 'THEOS_IGNORE_PARALLEL_BUILDING_NOTICE = yes' >> ~/.theosrc)
|
||||||
cd ${{ github.workspace }}/main
|
cd ${{ github.workspace }}/main
|
||||||
(cd ${{ github.workspace }}/main/Tweaks/YouPiP && sed -i '' "14s#.*#YouPiP_FRAMEWORKS = AVKit AVFoundation UIKit#g" ./Makefile)
|
(cd ${{ github.workspace }}/main/Tweaks/YouPiP && sed -i '' "14s/$/ AVFoundation UIKit/" Makefile)
|
||||||
|
(cd ${{ github.workspace }}/main/Tweaks/YTABConfig && sed -i '' "12s#.*#YTABConfig_FRAMEWORKS = UIKit#g" Makefile)
|
||||||
make package FINALPACKAGE=1
|
make package FINALPACKAGE=1
|
||||||
(mv "packages/$(ls -t packages | head -n1)" "packages/uYouPlus_${{ env.YOUTUBE_VERSION }}_${{ env.UYOU_VERSION }}.ipa")
|
(mv "packages/$(ls -t packages | head -n1)" "packages/uYouPlus_${{ env.YOUTUBE_VERSION }}_${{ env.UYOU_VERSION }}.ipa")
|
||||||
echo "::set-output name=package::$(ls -t packages | head -n1)"
|
echo "package=$(ls -t packages | head -n1)" >>$GITHUB_OUTPUT
|
||||||
env:
|
env:
|
||||||
THEOS: ${{ github.workspace }}/theos
|
THEOS: ${{ github.workspace }}/theos
|
||||||
UYOU_VERSION: ${{ inputs.uyou_version }}
|
UYOU_VERSION: ${{ inputs.uyou_version }}
|
||||||
@@ -114,33 +123,20 @@ jobs:
|
|||||||
UYOU_VERSION: ${{ inputs.uyou_version }}
|
UYOU_VERSION: ${{ inputs.uyou_version }}
|
||||||
YOUTUBE_VERSION: ${{ inputs.youtube_version }}
|
YOUTUBE_VERSION: ${{ inputs.youtube_version }}
|
||||||
with:
|
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 }}
|
path: ${{ github.workspace }}/main/packages/${{ steps.build_package.outputs.package }}
|
||||||
if-no-files-found: error
|
if-no-files-found: error
|
||||||
|
|
||||||
- name: Create Release
|
- name: Create Release
|
||||||
if: ${{ inputs.create_release }}
|
|
||||||
id: create_release
|
id: create_release
|
||||||
uses: actions/create-release@v1
|
uses: softprops/action-gh-release@v0.1.14
|
||||||
env:
|
env:
|
||||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||||
UYOU_VERSION: ${{ inputs.uyou_version }}
|
UYOU_VERSION: ${{ inputs.uyou_version }}
|
||||||
YOUTUBE_VERSION: ${{ inputs.youtube_version }}
|
YOUTUBE_VERSION: ${{ inputs.youtube_version }}
|
||||||
|
DRAFT: ${{ inputs.create_release }}
|
||||||
with:
|
with:
|
||||||
tag_name: v${{ env.YOUTUBE_VERSION }}-${{ env.UYOU_VERSION }}-(${{ github.run_number }})
|
tag_name: v${{ env.YOUTUBE_VERSION }}-${{ env.UYOU_VERSION }}-(${{ github.run_number }})
|
||||||
release_name: v${{ env.YOUTUBE_VERSION }}-${{ env.UYOU_VERSION }}-(${{ github.run_number }})
|
name: v${{ env.YOUTUBE_VERSION }}-${{ env.UYOU_VERSION }}-(${{ github.run_number }})
|
||||||
draft: true
|
files: ./main/packages/*.ipa
|
||||||
prerelease: false
|
draft: ${{ env.DRAFT }}
|
||||||
|
|
||||||
- name: Upload Release Asset
|
|
||||||
if: ${{ inputs.create_release }}
|
|
||||||
uses: actions/upload-release-asset@v1
|
|
||||||
env:
|
|
||||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
||||||
UYOU_VERSION: ${{ inputs.uyou_version }}
|
|
||||||
YOUTUBE_VERSION: ${{ inputs.youtube_version }}
|
|
||||||
with:
|
|
||||||
upload_url: ${{ steps.create_release.outputs.upload_url }}
|
|
||||||
asset_path: ${{ github.workspace }}/main/packages/${{ steps.build_package.outputs.package }}
|
|
||||||
asset_name: uYouPlus_${{ env.YOUTUBE_VERSION }}_${{ env.UYOU_VERSION }}.ipa
|
|
||||||
asset_content_type: application/vnd.debian.binary-package
|
|
||||||
|
|||||||
+4
-4
@@ -26,11 +26,11 @@
|
|||||||
path = Tweaks/PSHeader
|
path = Tweaks/PSHeader
|
||||||
url = https://github.com/PoomSmart/PSHeader.git
|
url = https://github.com/PoomSmart/PSHeader.git
|
||||||
branch = master
|
branch = master
|
||||||
[submodule "Tweaks/YTSpeed"]
|
|
||||||
path = Tweaks/YTSpeed
|
|
||||||
url = https://github.com/qnblackcat/YTSpeed.git
|
|
||||||
branch = main
|
|
||||||
[submodule "Extensions"]
|
[submodule "Extensions"]
|
||||||
path = Extensions
|
path = Extensions
|
||||||
url = https://github.com/CokePokes/YoutubeExtensions.git
|
url = https://github.com/CokePokes/YoutubeExtensions.git
|
||||||
branch = main
|
branch = main
|
||||||
|
[submodule "Tweaks/YTABConfig"]
|
||||||
|
path = Tweaks/YTABConfig
|
||||||
|
url = https://github.com/PoomSmart/YTABConfig.git
|
||||||
|
branch = main
|
||||||
|
|||||||
@@ -1,24 +1,94 @@
|
|||||||
|
#import "Tweaks/YouTubeHeader/YTAppDelegate.h"
|
||||||
#import "Tweaks/YouTubeHeader/YTPlayerViewController.h"
|
#import "Tweaks/YouTubeHeader/YTPlayerViewController.h"
|
||||||
|
|
||||||
#define LOC(x) [tweakBundle localizedStringForKey:x value:nil table:nil]
|
#define LOC(x) [tweakBundle localizedStringForKey:x value:nil table:nil]
|
||||||
#define YT_BUNDLE_ID @"com.google.ios.youtube"
|
#define YT_BUNDLE_ID @"com.google.ios.youtube"
|
||||||
#define YT_NAME @"YouTube"
|
#define YT_NAME @"YouTube"
|
||||||
|
#define UNSUPPORTED_DEVICES @[@"iPhone14,3", @"iPhone14,6", @"iPhone14,8"] // DontEatMycontent
|
||||||
|
#define THRESHOLD 1.99 // DontEatMycontent
|
||||||
|
#define DEFAULT_RATE 2.0f // YTSpeed
|
||||||
|
|
||||||
// IAmYouTube
|
// IAmYouTube
|
||||||
@interface SSOConfiguration : NSObject
|
@interface SSOConfiguration : NSObject
|
||||||
@end
|
@end
|
||||||
|
|
||||||
// uYouPlus
|
// uYouPlus
|
||||||
|
@interface YTPlayabilityResolutionUserActionUIController : NSObject // Skips content warning before playing *some videos - @PoomSmart
|
||||||
|
- (void)confirmAlertDidPressConfirm;
|
||||||
|
@end
|
||||||
|
|
||||||
@interface YTMainAppControlsOverlayView : UIView
|
@interface YTMainAppControlsOverlayView : UIView
|
||||||
@end
|
@end
|
||||||
|
|
||||||
@interface YTTransportControlsButtonView : UIView
|
@interface YTTransportControlsButtonView : UIView
|
||||||
@end
|
@end
|
||||||
|
|
||||||
// @interface YTPlaylistHeaderViewController : UIViewController
|
@interface _ASCollectionViewCell : UICollectionViewCell
|
||||||
// @property (nonatomic, strong, readwrite) UIView *downloadsButton;
|
- (id)node;
|
||||||
// @end
|
@end
|
||||||
|
|
||||||
|
@interface YTAsyncCollectionView : UICollectionView
|
||||||
|
- (void)removeShortsAndFeaturesAdsAtIndexPath:(NSIndexPath *)indexPath;
|
||||||
|
@end
|
||||||
|
|
||||||
|
@interface FRPSliderCell : UITableViewCell
|
||||||
|
@end
|
||||||
|
|
||||||
|
@interface boolSettingsVC : UIViewController
|
||||||
|
@end
|
||||||
|
|
||||||
|
@interface PlayerManager : NSObject
|
||||||
|
- (float)progress;
|
||||||
|
@end
|
||||||
|
|
||||||
|
// DontEatMyContent
|
||||||
|
NSString* deviceName();
|
||||||
|
void aspectRatioChanged(CGFloat arg);
|
||||||
|
BOOL deviceIsSupported();
|
||||||
|
void activate();
|
||||||
|
void deactivate();
|
||||||
|
void center();
|
||||||
|
|
||||||
|
@interface YTPlayerView : UIView
|
||||||
|
- (BOOL)zoomToFill;
|
||||||
|
- (id)renderingView;
|
||||||
|
- (id)playerView;
|
||||||
|
@end
|
||||||
|
|
||||||
|
@interface MLHAMSBDLSampleBufferRenderingView : UIView
|
||||||
|
@end
|
||||||
|
|
||||||
|
@interface YTMainAppVideoPlayerOverlayViewController : UIViewController
|
||||||
|
- (BOOL)isFullscreen;
|
||||||
|
- (id)videoPlayerOverlayView;
|
||||||
|
- (id)activeVideoPlayerOverlay;
|
||||||
|
@end
|
||||||
|
|
||||||
|
// YTSpeed
|
||||||
|
@interface YTVarispeedSwitchControllerOption : NSObject
|
||||||
|
- (id)initWithTitle:(id)title rate:(float)rate;
|
||||||
|
@end
|
||||||
|
|
||||||
|
@interface MLHAMQueuePlayer : NSObject
|
||||||
|
@property id playerEventCenter;
|
||||||
|
@property id delegate;
|
||||||
|
- (void)setRate:(float)rate;
|
||||||
|
- (void)internalSetRate;
|
||||||
|
@end
|
||||||
|
|
||||||
|
@interface MLPlayerStickySettings : NSObject
|
||||||
|
- (void)setRate:(float)rate;
|
||||||
|
@end
|
||||||
|
|
||||||
|
@interface MLPlayerEventCenter : NSObject
|
||||||
|
- (void)broadcastRateChange:(float)rate;
|
||||||
|
@end
|
||||||
|
|
||||||
|
@interface HAMPlayerInternal : NSObject
|
||||||
|
- (void)setRate:(float)rate;
|
||||||
|
@end
|
||||||
|
|
||||||
|
// iOS16 fix
|
||||||
@interface OBPrivacyLinkButton : UIButton
|
@interface OBPrivacyLinkButton : UIButton
|
||||||
- (instancetype)initWithCaption:(NSString *)caption
|
- (instancetype)initWithCaption:(NSString *)caption
|
||||||
buttonText:(NSString *)buttonText
|
buttonText:(NSString *)buttonText
|
||||||
@@ -28,6 +98,17 @@
|
|||||||
displayLanguage:(NSString *)displayLanguage;
|
displayLanguage:(NSString *)displayLanguage;
|
||||||
@end
|
@end
|
||||||
|
|
||||||
|
// uYouLocal fix
|
||||||
|
@interface YTLocalPlaybackController : NSObject
|
||||||
|
- (id)activeVideo;
|
||||||
|
@end
|
||||||
|
|
||||||
|
// uYou theme fix
|
||||||
|
@interface YTAppDelegate ()
|
||||||
|
@property(nonatomic, strong) id downloadsVC;
|
||||||
|
@end
|
||||||
|
|
||||||
|
|
||||||
// BigYTMiniPlayer
|
// BigYTMiniPlayer
|
||||||
@interface YTMainAppVideoPlayerOverlayView : UIView
|
@interface YTMainAppVideoPlayerOverlayView : UIView
|
||||||
- (UIViewController *)_viewControllerForAncestor;
|
- (UIViewController *)_viewControllerForAncestor;
|
||||||
@@ -39,6 +120,13 @@
|
|||||||
// YTAutoFullScreen
|
// YTAutoFullScreen
|
||||||
@interface YTPlayerViewController (YTAFS)
|
@interface YTPlayerViewController (YTAFS)
|
||||||
- (void)autoFullscreen;
|
- (void)autoFullscreen;
|
||||||
|
// DontEatMycontent
|
||||||
|
- (id)activeVideoPlayerOverlay;
|
||||||
|
- (id)playerView;
|
||||||
|
// YTSpeed
|
||||||
|
@property id activeVideo;
|
||||||
|
@property float playbackRate;
|
||||||
|
- (void)singleVideo:(id)video playbackRateDidChange:(float)rate;
|
||||||
@end
|
@end
|
||||||
|
|
||||||
// OLED Darkmode
|
// OLED Darkmode
|
||||||
@@ -57,6 +145,9 @@
|
|||||||
@interface _ASDisplayView : UIView
|
@interface _ASDisplayView : UIView
|
||||||
@end
|
@end
|
||||||
|
|
||||||
|
@interface YTCommentDetailHeaderCell : UIView
|
||||||
|
@end
|
||||||
|
|
||||||
@interface SponsorBlockSettingsController : UITableViewController
|
@interface SponsorBlockSettingsController : UITableViewController
|
||||||
@end
|
@end
|
||||||
|
|
||||||
@@ -67,4 +158,4 @@
|
|||||||
@end
|
@end
|
||||||
|
|
||||||
@interface UIPredictionViewController : UIViewController
|
@interface UIPredictionViewController : UIViewController
|
||||||
@end
|
@end
|
||||||
|
|||||||
@@ -1,29 +1,34 @@
|
|||||||
TARGET = iphone:clang:latest:13.0
|
TARGET = iphone:clang:15.5:14.0
|
||||||
uYouPlus_USE_FLEX = 0
|
uYouPlus_USE_FLEX = 0
|
||||||
uYouPlus_USE_FISHHOOK = 0
|
uYouPlus_USE_FISHHOOK = 0
|
||||||
ARCHS = arm64
|
ARCHS = arm64
|
||||||
MODULES = jailed
|
MODULES = jailed
|
||||||
FINALPACKAGE = 1
|
FINALPACKAGE = 1
|
||||||
CODESIGN_IPA = 0
|
CODESIGN_IPA = 0
|
||||||
|
PACKAGE_VERSION = 17.42.7_2.1
|
||||||
|
|
||||||
TWEAK_NAME = uYouPlus
|
TWEAK_NAME = uYouPlus
|
||||||
DISPLAY_NAME = YouTube
|
DISPLAY_NAME = YouTube
|
||||||
BUNDLE_ID = com.google.ios.youtube
|
BUNDLE_ID = com.google.ios.youtube
|
||||||
|
|
||||||
uYouPlus_INJECT_DYLIBS = Tweaks/uYou/Library/MobileSubstrate/DynamicLibraries/uYou.dylib .theos/obj/libcolorpicker.dylib .theos/obj/iSponsorBlock.dylib .theos/obj/YTUHD.dylib .theos/obj/YouPiP.dylib .theos/obj/YouTubeDislikesReturn.dylib .theos/obj/YoutubeSpeed.dylib
|
uYouPlus_INJECT_DYLIBS = Tweaks/uYou/Library/MobileSubstrate/DynamicLibraries/uYou.dylib .theos/obj/libcolorpicker.dylib .theos/obj/iSponsorBlock.dylib .theos/obj/YTUHD.dylib .theos/obj/YouPiP.dylib .theos/obj/YouTubeDislikesReturn.dylib .theos/obj/YTABConfig.dylib
|
||||||
uYouPlus_FILES = uYouPlus.xm Settings.xm
|
uYouPlus_FILES = uYouPlus.xm Settings.xm
|
||||||
uYouPlus_IPA = ./tmp/Payload/YouTube.app
|
uYouPlus_IPA = ./tmp/Payload/YouTube.app
|
||||||
uYouPlus_FRAMEWORKS = UIKit
|
uYouPlus_FRAMEWORKS = UIKit Security
|
||||||
|
uYouPlus_CFLAGS = -fobjc-arc -DTWEAK_VERSION=$(PACKAGE_VERSION)
|
||||||
|
|
||||||
include $(THEOS)/makefiles/common.mk
|
include $(THEOS)/makefiles/common.mk
|
||||||
include $(THEOS_MAKE_PATH)/tweak.mk
|
include $(THEOS_MAKE_PATH)/tweak.mk
|
||||||
SUBPROJECTS += Tweaks/Alderis Tweaks/iSponsorBlock Tweaks/YTUHD Tweaks/YouPiP Tweaks/Return-YouTube-Dislikes Tweaks/YTSpeed
|
SUBPROJECTS += Tweaks/Alderis Tweaks/iSponsorBlock Tweaks/YTUHD Tweaks/YouPiP Tweaks/Return-YouTube-Dislikes Tweaks/YTABConfig
|
||||||
include $(THEOS_MAKE_PATH)/aggregate.mk
|
include $(THEOS_MAKE_PATH)/aggregate.mk
|
||||||
|
|
||||||
before-package::
|
before-package::
|
||||||
@echo -e "==> \033[1mMoving tweak's bundle to Resources/...\033[0m"
|
@echo -e "==> \033[1mMoving tweak's bundle to Resources/...\033[0m"
|
||||||
@mkdir -p Resources/Frameworks/Alderis.framework && find .theos/obj/install/Library/Frameworks/Alderis.framework -maxdepth 1 -type f -exec cp {} Resources/Frameworks/Alderis.framework/ \;
|
@mkdir -p Resources/Frameworks/Alderis.framework && find .theos/obj/install/Library/Frameworks/Alderis.framework -maxdepth 1 -type f -exec cp {} Resources/Frameworks/Alderis.framework/ \;
|
||||||
@cp -R Tweaks/YouPiP/layout/Library/Application\ Support/YouPiP.bundle Resources/
|
@cp -R Tweaks/YouPiP/layout/Library/Application\ Support/YouPiP.bundle Resources/
|
||||||
|
@cp -R Tweaks/YTUHD/layout/Library/Application\ Support/YTUHD.bundle Resources/
|
||||||
|
@cp -R Tweaks/Return-YouTube-Dislikes/layout/Library/Application\ Support/RYD.bundle Resources/
|
||||||
|
@cp -R Tweaks/YTABConfig/layout/Library/Application\ Support/YTABC.bundle Resources/
|
||||||
@cp -R Tweaks/iSponsorBlock/layout/Library/Application\ Support/iSponsorBlock.bundle Resources/
|
@cp -R Tweaks/iSponsorBlock/layout/Library/Application\ Support/iSponsorBlock.bundle Resources/
|
||||||
@cp -R Tweaks/uYou/Library/Application\ Support/uYouBundle.bundle Resources/
|
@cp -R Tweaks/uYou/Library/Application\ Support/uYouBundle.bundle Resources/
|
||||||
@cp -R lang/uYouPlus.bundle Resources/
|
@cp -R lang/uYouPlus.bundle Resources/
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||

|

|
||||||
|
|
||||||
# Table of Contents
|
# Table of Contents
|
||||||
|
|
||||||
@@ -12,24 +12,102 @@
|
|||||||
* [Building](#building-optional)
|
* [Building](#building-optional)
|
||||||
|
|
||||||
# Credits
|
# 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).
|
<table id='credit'>
|
||||||
|
<tr>
|
||||||
- [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).
|
<td id='miro92'>
|
||||||
|
<a href='https://github.com/MiRO92'>
|
||||||
- [HASHBANG Productions](https://github.com/hbang) for [Alderis Color Picker](https://github.com/hbang/Alderis) - a dependency of iSponsorBlock.
|
<img src='https://github.com/MiRO92.png' width='140px;'>
|
||||||
|
</a>
|
||||||
- [PoomSmart](https://twitter.com/poomsmart) - the developer of many tweaks used by uYouPlus, include: [NoYTPremium](https://github.com/PoomSmart/NoYTPremium/), [YouRememberCaption](https://www.ios-repo-updates.com/repository/poomsmart/package/com.ps.youremembercaption/), [YTClassicVideoQuality](https://poomsmart.github.io/repo/depictions/ytclassicvideoquality.html), [YTNoCheckLocalNetwork](https://poomsmart.github.io/repo/depictions/ytnochecklocalnetwork.html), [YTSystemAppearance](https://poomsmart.github.io/repo/depictions/ytsystemappearance.html), [YTAutoFullScreen](https://github.com/PoomSmart/YTAutoFullScreen/), [YTReExplore](https://github.com/PoomSmart/YTReExplore/), [IAmYouTube](https://github.com/PoomSmart/IAmYouTube), [YTUHD](https://poomsmart.github.io/repo/depictions/ytuhd.html), [YouPiP](https://poomsmart.github.io/repo/depictions/youpip.html), and [Return YouTube Dislike](https://github.com/PoomSmart/Return-YouTube-Dislikes)
|
<h4 align='center'><a href='https://twitter.com/miro92'>MiRO92</a></h4>
|
||||||
|
</td>
|
||||||
- [level3tjg](https://twitter.com/level3tjg) - for [YTNoHoverCards](https://github.com/level3tjg/YTNoHoverCards) and [YTMiniplayerEnabler](https://github.com/level3tjg/YTMiniplayerEnabler).
|
<td id='poomsmart'>
|
||||||
|
<a href='https://github.com/PoomSmart'>
|
||||||
- [Lyvendia](https://github.com/Lyvendia/) for [YTSpeed](https://github.com/Lyvendia/YTSpeed/)
|
<img src='https://github.com/PoomSmart.png' width='140px;'>
|
||||||
|
</a>
|
||||||
- [YouTube Extensions](https://github.com/CokePokes/YoutubeExtensions) by [CokePokes](https://github.com/CokePokes/).
|
<h4 align='center'><a href='https://twitter.com/poomsmart'>PoomSmart</a></h4>
|
||||||
|
</td>
|
||||||
- [Al4ise](https://github.com/Al4ise) for [Azule](https://github.com/Al4ise/Azule), a tool used to inject jailbreak tweaks into jailed iOS apps.
|
<td id='level3tjg'>
|
||||||
|
<a href='https://github.com/level3tjg'>
|
||||||
- [theos team](https://github.com/theos/theos) for theos & theos-jailed.
|
<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
|
# Features
|
||||||
|
|
||||||
@@ -50,17 +128,21 @@
|
|||||||
|
|
||||||
7. **YTNoHoverCards:** offer an option to enable/disable the annoying suggested videos show up at the end of the videos.
|
7. **YTNoHoverCards:** offer an option to enable/disable the annoying suggested videos show up at the end of the videos.
|
||||||
|
|
||||||
8. **YTSystemAppearance**: sync the YouTube theme (dark/light) with the system theme.
|
8. **YTNoCheckLocalNetwork**: block the Local Network permission popup.
|
||||||
|
|
||||||
9. **YTNoCheckLocalNetwork**: block the Local Network permission popup.
|
9. **YouRememberCaption**: make YouTube remember your video caption setting (if not already).
|
||||||
|
|
||||||
10. **YouRememberCaption**: make YouTube remember your video caption setting (if not already).
|
10. **NoYTPremium**: remove YouTube Premium upsells.
|
||||||
|
|
||||||
11. **NoYTPremium**: remove YouTube Premium upshells.
|
11. **YTSpeed**: add 2.25, 2.5, 2.75, and 3x playback speed
|
||||||
|
|
||||||
12. **YTSpeed**: add 2.25, 2.5, 2.75, and 3x playback speed
|
12. **YTMiniplayerEnabler**: enable Miniplayer for all YouTube videos.
|
||||||
|
|
||||||
13. **YTMiniplayerEnabler**: enable Miniplayer for all YouTube videos.
|
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>
|
</details>
|
||||||
|
|
||||||
@@ -72,73 +154,59 @@
|
|||||||
|
|
||||||
# Download
|
# Download
|
||||||
|
|
||||||
- **uYouPlus** (or you can call it uYou+) requires iOS & iPadOS 13.0 or later. The latest version of **uYouPlus** can be found in the [Release tab](https://github.com/qnblackcat/uYouPlus/releases).
|
- **uYouPlus** (or you can call it uYou+) requires iOS or iPadOS 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:
|
- For AltStore user:
|
||||||
|
|
||||||
- My official AtlStore repo: https://qnblackcat.github.io/AltStore/
|
- My official AltStore repo: https://qnblackcat.github.io/AltStore/
|
||||||
|
|
||||||
- [Open in AltStore (v17.23.6-2.1)](https://tinyurl.com/5upjtvbv) - It will take a while to install because AltStore needs to download the IPA.
|
- [Open in AltStore (v17.42.7-2.1)](https://tinyurl.com/4j5nyb6z) - It will take a while to install because AltStore needs to download the IPA first.
|
||||||
|
|
||||||
- Version info: _(last update: June 14)_
|
- Version info: _(last update: Oct 28)_
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
<summary>Expand</summary>
|
<summary>Expand ℹ️</summary>
|
||||||
|
|
||||||
| **Tweaks/App** | **Version** | **Open source** |
|
| **Tweaks/App** | **Developer** | **Version** | **Open source** |
|
||||||
| :------------: | :----------:| :-------------: |
|
| - | - | :-: | :-: |
|
||||||
| **YouTube** | 17.23.6 | ✖︎ |
|
| **YouTube** | Google Inc | 17.42.7 | ✖︎ |
|
||||||
| [uYou](https://github.com/MiRO92/uYou-for-YouTube) | 2.1 | ✖︎ |
|
| [uYou](https://github.com/MiRO92/uYou-for-YouTube) | [MiRO92](https://twitter.com/miro92) | 2.1 | ✖︎ |
|
||||||
| [Open in YouTube](https://github.com/CokePokes/YoutubeExtensions/) | 1.2 | ✖︎ |
|
| [Open in YouTube](https://github.com/CokePokes/YoutubeExtensions) | [CokePokes](https://github.com/CokePokes) | 1.2 | ✖︎ |
|
||||||
| **Return YouTube Dislike** | 1.6.5 | [✔︎](https://github.com/PoomSmart/Return-YouTube-Dislikes) |
|
| **iSponsorBlock** | [Galactic-Dev](https://github.com/Galactic-Dev) | 1.0-15 | [✔︎](https://github.com/Galactic-Dev/iSponsorBlock) |
|
||||||
| **iSponsorBlock** | 1.0-14 | [✔︎](https://github.com/Galactic-Dev/iSponsorBlock) |
|
| **BigYTMiniPlayer** | [Galactic-Dev](https://github.com/Galactic-Dev) | 1.0-1 | [✔︎](https://github.com/Galactic-Dev/BigYTMiniPlayer) |
|
||||||
| **Alderis Color Picker** | 1.2| [✔︎](https://github.com/hbang/Alderis) |
|
| **YTNoHoverCards** | [level3tjg](https://twitter.com/level3tjg) | 0.0.3 | [✔︎](https://github.com/level3tjg/YTNoHoverCards) |
|
||||||
| **NoYTPremium** | 1.0.4 | [✔︎](https://github.com/PoomSmart/NoYTPremium/) |
|
| **YTMiniplayerEnabler** | [level3tjg](https://twitter.com/level3tjg) | 0.0.2 | [✔︎](https://github.com/level3tjg/YTMiniplayerEnabler) |
|
||||||
| **YouRememberCaption** | 1.0.0 | [✔︎](https://poomsmart.github.io/repo/depictions/youremembercaption.html) |
|
| **DontEatMyContent** | [therealFoxster](https://github.com/therealFoxster) | 1.0.2 | [✔︎](https://github.com/therealFoxster/DontEatMyContent) |
|
||||||
| **YTClassicVideoQuality** | 1.0.1 | [✔︎](https://github.com/PoomSmart/YTClassicVideoQuality) |
|
| **YTSpeed** | [Lyvendia](https://github.com/Lyvendia) | 1.0.1 | [✔︎](https://github.com/Lyvendia/YTSpeed) |
|
||||||
| **YTNoCheckLocalNetwork** | 1.0.2 | [✔︎](https://poomsmart.github.io/repo/depictions/ytnochecklocalnetwork.html) |
|
| **YTCastConfirm** | [JamieBerghmans](https://github.com/JamieBerghmans) | 1.0.0 | [✔︎](https://github.com/JamieBerghmans/YTCastConfirm) |
|
||||||
| **YTNoHoverCards** | 0.0.3 | [✔︎](https://github.com/level3tjg/YTNoHoverCards) |
|
| **Alderis Color Picker** | [HASHBANG Productions](https://github.com/hbang) | 1.2| [✔︎](https://github.com/hbang/Alderis) |
|
||||||
| **YTSystemAppearance** | 1.0.0 | [✔︎](https://poomsmart.github.io/repo/depictions/ytsystemappearance.html) |
|
| **YTUHD** | [PoomSmart](https://twitter.com/poomsmart) | 1.3.4 | [✔︎](https://github.com/PoomSmart/YTUHD) |
|
||||||
| **YTUHD** | 1.2.7 | [✔︎](https://github.com/PoomSmart/YTUHD) |
|
| **YouPiP** | [PoomSmart](https://twitter.com/poomsmart) | 1.7.14 | [✔︎](https://github.com/PoomSmart/YouPiP) |
|
||||||
| **YouPiP** | 1.7.3 | [✔︎](https://github.com/PoomSmart/YouPiP) |
|
| **IAmYouTube** | [PoomSmart](https://twitter.com/poomsmart) | 1.2.0 | [✔︎](https://github.com/PoomSmart/IAmYouTube) |
|
||||||
| **IAmYouTube** | 1.2.0 | [✔︎](https://github.com/PoomSmart/IAmYouTube) |
|
| **YTABConfig** | [PoomSmart](https://twitter.com/poomsmart) | 1.4.2 | [✔︎](https://github.com/PoomSmart/YTABConfig) |
|
||||||
| **YTSpeed** | 1.0.1 | [✔︎](https://github.com/Lyvendia/YTSpeed) |
|
| **YTReExplore** | [PoomSmart](https://twitter.com/poomsmart) | 1.0.2 | [✔︎](https://github.com/PoomSmart/YTReExplore) |
|
||||||
| **YTAutoFullScreen** | 1.0.3 | [✔︎](https://github.com/PoomSmart/YTAutoFullScreen/) |
|
| **NoYTPremium** | [PoomSmart](https://twitter.com/poomsmart) | 1.0.4 | [✔︎](https://github.com/PoomSmart/NoYTPremium) |
|
||||||
| **YTReExplore** | 1.0.2 | [✔︎](https://github.com/PoomSmart/YTReExplore) |
|
| **YTNoPaidPromo** | [PoomSmart](https://twitter.com/poomsmart) | 1.0.0 | [✔︎](https://github.com/PoomSmart/YTNoPaidPromo) |
|
||||||
| **BigYTMiniPlayer** | 1.0-1 | [✔︎](https://github.com/Galactic-Dev/BigYTMiniPlayer) |
|
| **YTAutoFullScreen** | [PoomSmart](https://twitter.com/poomsmart) | 1.0.3 | [✔︎](https://github.com/PoomSmart/YTAutoFullScreen) |
|
||||||
| **YTCastConfirm** | 1.0.0 | [✔︎](https://github.com/JamieBerghmans/YTCastConfirm) |
|
| **YTShortsProgress** | [PoomSmart](https://twitter.com/poomsmart) | 1.0.2 | [✔︎](https://github.com/PoomSmart/YTShortsProgress) |
|
||||||
| **YTMiniplayerEnabler** | 0.0.2 | [✔︎](https://github.com/level3tjg/YTMiniplayerEnabler) |
|
| **YouRememberCaption** | [PoomSmart](https://twitter.com/poomsmart) | 1.0.0 | [✔︎](https://poomsmart.github.io/repo/depictions/youremembercaption.html) |
|
||||||
|
| **Return YouTube Dislike** | [PoomSmart](https://twitter.com/poomsmart) | 1.7.3 | [✔︎](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>
|
</details>
|
||||||
|
|
||||||
# Installation
|
# Installation
|
||||||
See [Installation - Wiki](https://github.com/qnblackcat/uYouPlus/wiki/Installation)
|
See [Installation - Wiki](https://github.com/qnblackcat/uYouPlus/wiki/Installation).
|
||||||
|
|
||||||
# Support the developers
|
# Support the developers
|
||||||
|
- [**MiRO92**](https://twitter.com/miro92): https://github.com/MiRO92/uYou-for-YouTube#support
|
||||||
<details>
|
- [**Poomsmart**](https://twitter.com/poomsmart): https://poomsmart.github.io
|
||||||
<summary>MiRO92</summary>
|
- [**level3tjg**](https://twitter.com/level3tjg): https://ko-fi.com/level3tjg
|
||||||
|
- [**BandarHL**](https://twitter.com/bandarhl): https://www.paypal.com/paypalme/BandarHL
|
||||||
- CashApp: https://cash.app/$MiRO92M
|
- [**julioverne**](https://twitter.com/ijulioverne): https://www.patreon.com/julioverne
|
||||||
|
- [**Galactic-dev**](https://twitter.com/dev_galactic):
|
||||||
- Other payment methods are available in uYou's settings.
|
- Paypal: https://www.paypal.com/paypalme/DBrett684
|
||||||
</details>
|
- Venmo: https://venmo.com/u/DavidBrett
|
||||||
|
|
||||||
<details>
|
|
||||||
<summary>Poomsmart</summary>
|
|
||||||
|
|
||||||
- Paypal: https://poomsmart.github.io/
|
|
||||||
|
|
||||||
</details>
|
|
||||||
|
|
||||||
<details>
|
|
||||||
<summary>Galactic-dev</summary>
|
|
||||||
|
|
||||||
- Paypal: https://www.paypal.com/paypalme/DBrett684
|
|
||||||
|
|
||||||
- Venmo: https://venmo.com/u/DavidBrett
|
|
||||||
</details>
|
|
||||||
|
|
||||||
|
|
||||||
# FAQ
|
# FAQ
|
||||||
|
|
||||||
|
|||||||
+73
-2
@@ -1,6 +1,8 @@
|
|||||||
#import "Tweaks/YouTubeHeader/YTSettingsViewController.h"
|
#import "Tweaks/YouTubeHeader/YTSettingsViewController.h"
|
||||||
|
#import "Tweaks/YouTubeHeader/YTSearchableSettingsViewController.h"
|
||||||
#import "Tweaks/YouTubeHeader/YTSettingsSectionItem.h"
|
#import "Tweaks/YouTubeHeader/YTSettingsSectionItem.h"
|
||||||
#import "Tweaks/YouTubeHeader/YTSettingsSectionItemManager.h"
|
#import "Tweaks/YouTubeHeader/YTSettingsSectionItemManager.h"
|
||||||
|
#import "Tweaks/YouTubeHeader/YTUIUtils.h"
|
||||||
#import "Header.h"
|
#import "Header.h"
|
||||||
|
|
||||||
@interface YTSettingsSectionItemManager (YouPiP)
|
@interface YTSettingsSectionItemManager (YouPiP)
|
||||||
@@ -22,6 +24,10 @@ extern BOOL hideAutoplaySwitch();
|
|||||||
extern BOOL castConfirm();
|
extern BOOL castConfirm();
|
||||||
extern BOOL ytMiniPlayer();
|
extern BOOL ytMiniPlayer();
|
||||||
extern BOOL hidePreviousAndNextButton();
|
extern BOOL hidePreviousAndNextButton();
|
||||||
|
extern BOOL hidePaidPromotionCard();
|
||||||
|
extern BOOL fixGoogleSignIn();
|
||||||
|
extern BOOL replacePreviousAndNextButton();
|
||||||
|
extern BOOL dontEatMyContent();
|
||||||
|
|
||||||
// Settings
|
// Settings
|
||||||
%hook YTAppSettingsPresentationData
|
%hook YTAppSettingsPresentationData
|
||||||
@@ -35,12 +41,77 @@ extern BOOL hidePreviousAndNextButton();
|
|||||||
}
|
}
|
||||||
%end
|
%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
|
%hook YTSettingsSectionItemManager
|
||||||
%new
|
%new
|
||||||
- (void)updateuYouPlusSectionWithEntry:(id)entry {
|
- (void)updateuYouPlusSectionWithEntry:(id)entry {
|
||||||
YTSettingsViewController *delegate = [self valueForKey:@"_dataDelegate"];
|
YTSettingsViewController *delegate = [self valueForKey:@"_dataDelegate"];
|
||||||
NSBundle *tweakBundle = uYouPlusBundle();
|
NSBundle *tweakBundle = uYouPlusBundle();
|
||||||
|
|
||||||
|
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) {
|
||||||
|
return [%c(YTUIUtils) openURL:[NSURL URLWithString:@"https://github.com/qnblackcat/uYouPlus/releases/latest"]];
|
||||||
|
}];
|
||||||
|
|
||||||
|
YTSettingsSectionItem *dontEatMyContent = [[%c(YTSettingsSectionItem) alloc] initWithTitle:LOC(@"DONT_EAT_MY_CONTENT") titleDescription:LOC(@"DONT_EAT_MY_CONTENT_DESC")];
|
||||||
|
dontEatMyContent.hasSwitch = YES;
|
||||||
|
dontEatMyContent.switchVisible = YES;
|
||||||
|
dontEatMyContent.on = [[NSUserDefaults standardUserDefaults] boolForKey:@"dontEatMyContent_enabled"];
|
||||||
|
dontEatMyContent.switchBlock = ^BOOL (YTSettingsCell *cell, BOOL enabled) {
|
||||||
|
[[NSUserDefaults standardUserDefaults] setBool:enabled forKey:@"dontEatMyContent_enabled"];
|
||||||
|
return YES;
|
||||||
|
};
|
||||||
|
|
||||||
|
YTSettingsSectionItem *replacePreviousAndNextButton = [[%c(YTSettingsSectionItem) alloc] initWithTitle:LOC(@"REPLACE_PREVIOUS_NEXT_BUTTON") titleDescription:LOC(@"REPLACE_PREVIOUS_NEXT_BUTTON_DESC")];
|
||||||
|
replacePreviousAndNextButton.hasSwitch = YES;
|
||||||
|
replacePreviousAndNextButton.switchVisible = YES;
|
||||||
|
replacePreviousAndNextButton.on = [[NSUserDefaults standardUserDefaults] boolForKey:@"replacePreviousAndNextButton_enabled"];
|
||||||
|
replacePreviousAndNextButton.switchBlock = ^BOOL (YTSettingsCell *cell, BOOL enabled) {
|
||||||
|
[[NSUserDefaults standardUserDefaults] setBool:enabled forKey:@"replacePreviousAndNextButton_enabled"];
|
||||||
|
return YES;
|
||||||
|
};
|
||||||
|
|
||||||
|
YTSettingsSectionItem *fixGoogleSignIn = [[%c(YTSettingsSectionItem) alloc] initWithTitle:LOC(@"FIX_GOOGLE_SIGNIN") titleDescription:LOC(@"FIX_GOOGLE_SIGNIN_DESC")];
|
||||||
|
fixGoogleSignIn.hasSwitch = YES;
|
||||||
|
fixGoogleSignIn.switchVisible = YES;
|
||||||
|
fixGoogleSignIn.on = [[NSUserDefaults standardUserDefaults] boolForKey:@"fixGoogleSignIn_enabled"];
|
||||||
|
fixGoogleSignIn.switchBlock = ^BOOL (YTSettingsCell *cell, BOOL enabled) {
|
||||||
|
[[NSUserDefaults standardUserDefaults] setBool:enabled forKey:@"fixGoogleSignIn_enabled"];
|
||||||
|
return YES;
|
||||||
|
};
|
||||||
|
|
||||||
|
YTSettingsSectionItem *hidePaidPromotionCard = [[%c(YTSettingsSectionItem) alloc] initWithTitle:LOC(@"HIDE_PAID_PROMOTION_CARDS") titleDescription:LOC(@"HIDE_PAID_PROMOTION_CARDS_DESC")];
|
||||||
|
hidePaidPromotionCard.hasSwitch = YES;
|
||||||
|
hidePaidPromotionCard.switchVisible = YES;
|
||||||
|
hidePaidPromotionCard.on = [[NSUserDefaults standardUserDefaults] boolForKey:@"hidePaidPromotionCard_enabled"];
|
||||||
|
hidePaidPromotionCard.switchBlock = ^BOOL (YTSettingsCell *cell, BOOL enabled) {
|
||||||
|
[[NSUserDefaults standardUserDefaults] setBool:enabled forKey:@"hidePaidPromotionCard_enabled"];
|
||||||
|
return YES;
|
||||||
|
};
|
||||||
|
|
||||||
YTSettingsSectionItem *hidePreviousAndNextButton = [[%c(YTSettingsSectionItem) alloc] initWithTitle:LOC(@"HIDE_PREVIOUS_AND_NEXT_BUTTON") titleDescription:LOC(@"HIDE_PREVIOUS_AND_NEXT_BUTTON_DESC")];
|
YTSettingsSectionItem *hidePreviousAndNextButton = [[%c(YTSettingsSectionItem) alloc] initWithTitle:LOC(@"HIDE_PREVIOUS_AND_NEXT_BUTTON") titleDescription:LOC(@"HIDE_PREVIOUS_AND_NEXT_BUTTON_DESC")];
|
||||||
hidePreviousAndNextButton.hasSwitch = YES;
|
hidePreviousAndNextButton.hasSwitch = YES;
|
||||||
hidePreviousAndNextButton.switchVisible = YES;
|
hidePreviousAndNextButton.switchVisible = YES;
|
||||||
@@ -149,7 +220,7 @@ extern BOOL hidePreviousAndNextButton();
|
|||||||
return YES;
|
return YES;
|
||||||
};
|
};
|
||||||
|
|
||||||
NSMutableArray <YTSettingsSectionItem *> *sectionItems = [NSMutableArray arrayWithArray:@[autoFull, castConfirm, ytMiniPlayer, hideAutoplaySwitch, hideCC, hideHUD, hidePreviousAndNextButton, hideHoverCard, bigYTMiniPlayer, oledDarkMode, oledKeyBoard, reExplore]];
|
NSMutableArray <YTSettingsSectionItem *> *sectionItems = [NSMutableArray arrayWithArray:@[version, autoFull, castConfirm, ytMiniPlayer, fixGoogleSignIn, hideAutoplaySwitch, hideCC, hideHUD, hidePaidPromotionCard, hidePreviousAndNextButton, hideHoverCard, bigYTMiniPlayer, oledDarkMode, oledKeyBoard, dontEatMyContent, replacePreviousAndNextButton, reExplore]];
|
||||||
[delegate setSectionItems:sectionItems forCategory:uYouPlusSection title:@"uYouPlus" titleDescription:nil headerHidden:NO];
|
[delegate setSectionItems:sectionItems forCategory:uYouPlusSection title:@"uYouPlus" titleDescription:nil headerHidden:NO];
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -160,4 +231,4 @@ extern BOOL hidePreviousAndNextButton();
|
|||||||
}
|
}
|
||||||
%orig;
|
%orig;
|
||||||
}
|
}
|
||||||
%end
|
%end
|
||||||
|
|||||||
+1
-1
Submodule Tweaks/Alderis updated: 978ca5c483...7992b3b57e
Submodule Tweaks/Return-YouTube-Dislikes updated: 5f86ef7d91...85ad2058c2
Submodule
+1
Submodule Tweaks/YTABConfig added at 7764a326c0
Submodule Tweaks/YTSpeed deleted from 7c11d9c916
+1
-1
Submodule Tweaks/YTUHD updated: 00c5e38ca9...96af5b5a38
+1
-1
Submodule Tweaks/YouPiP updated: 7000428368...d6bcbe00f1
+1
-1
Submodule Tweaks/YouTubeHeader updated: 14b3975371...43fdc1ff31
+1
-1
Submodule Tweaks/iSponsorBlock updated: a936217c38...997d792317
@@ -0,0 +1,57 @@
|
|||||||
|
// Settings
|
||||||
|
"VERSION" = "إصدار uYouPlus: %@";
|
||||||
|
"VERSION_CHECK" = "المس هنا للبحث عن التحديثات!";
|
||||||
|
|
||||||
|
"DONT_EAT_MY_CONTENT" = "منع النوتش/الجزيرة التفاعلية على مقاطع 2:1 (أداة DontEatMyContent)";
|
||||||
|
"DONT_EAT_MY_CONTENT_DESC" = "منع النوتش/الجزيرة التفاعلية من قص المقاطع التي تكون نسبة العرض إلى الارتفاع فيها تساوي 2:1. يتطلب إعادة تشغيل التطبيق.";
|
||||||
|
|
||||||
|
"REPLACE_PREVIOUS_NEXT_BUTTON" = "تقدم وتراجع بدلاً من السابق والتالي";
|
||||||
|
"REPLACE_PREVIOUS_NEXT_BUTTON_DESC" = "استبدال زرّي المقطع السابق والمقطع التالي بزرّي تقدم وتراجع. يتطلب إعادة تشغيل التطبيق.";
|
||||||
|
|
||||||
|
"FIX_GOOGLE_SIGNIN" = "إصلاح تسجيل الدخول بحساب جوجل (لمستخدمي TrollStore فقط)";
|
||||||
|
"FIX_GOOGLE_SIGNIN_DESC" = "هذا الخيار لا يعمل إلا إذا كان التطبيق مثبت بواسطة TrollStore: فعل هذا الخيار لتتمكن من تسجيل الدخول بحساب جوجل. يتطلب إعادة تشغيل التطبيق.";
|
||||||
|
|
||||||
|
"HIDE_PREVIOUS_AND_NEXT_BUTTON" = "إخفاء زرّي السابق والتالي";
|
||||||
|
"HIDE_PREVIOUS_AND_NEXT_BUTTON_DESC" = "إخفاء زرّي المقطع السابق والمقطع التالي من أزرار التحكم على الفيديو.";
|
||||||
|
|
||||||
|
"YT_MINIPLAYER" = "السماح بالمشغل المصغّر لكل فيديوهات يوتيوب";
|
||||||
|
"YT_MINIPLAYER_DESC" = "عند تصغير فيديوهات الأطفال مثلاً (قبل إغلاق المقطع).";
|
||||||
|
|
||||||
|
"CAST_CONFIRM" = "التأكيد قبل البث (أداة YTCastConfirm)";
|
||||||
|
"CAST_CONFIRM_DESC" = "إظهار تنبيه للتأكيد قبل البث، من أجل منع البث للتلفاز عن طريق الخطأ.";
|
||||||
|
|
||||||
|
"HIDE_HOVER_CARD" = "إخفاء صور المقاطع الأخرى في نهاية المقاطع (أداة YTNoHoverCards)";
|
||||||
|
"HIDE_HOVER_CARD_DESC" = "إخفاء الصور المصغرة الظاهرة على مشغل الفيديو في نهاية المقطع.";
|
||||||
|
|
||||||
|
"NEW_MINIPLAYER_STYLE" = "تغيير شكل المشغّل المصغر (أداة BigYTMiniPlayer)";
|
||||||
|
"NEW_MINIPLAYER_STYLE_DESC" = "تغيير شكل المشغّل المصغر في الآيفون إلى نفس شكله في الآيباد - تتطلب إغلاق التطبيق وإعادة فتحه.";
|
||||||
|
|
||||||
|
"YT_RE_EXPLORE" = "استبدال تبويب Shorts بتبويب Explore (أداة YTReExplore)";
|
||||||
|
"YT_RE_EXPLORE_DESC" = " تتطلب إغلاق التطبيق وإعادة فتحه.";
|
||||||
|
|
||||||
|
"HIDE_SUBTITLES_BUTTON" = "إخفاء زر الترجمة";
|
||||||
|
"HIDE_SUBTITLES_BUTTON_DESC" = "إخفاء زر الترجمة من أزرار التحكم على الفيديو.";
|
||||||
|
|
||||||
|
"HIDE_AUTOPLAY_SWITCH" = "إخفاء زر التشغيل التلقائي";
|
||||||
|
"HIDE_AUTOPLAY_SWITCH_DESC" = "إخفاء زر التشغيل التلقائي من أزرار التحكم على الفيديو.";
|
||||||
|
|
||||||
|
"AUTO_FULLSCREEN" = "كامل الشاشة تلقائياً (أداة YTAutoFullScreen)";
|
||||||
|
"AUTO_FULLSCREEN_DESC" = "تشغيل الفيديوهات تلقائياً بكامل الشاشة.";
|
||||||
|
|
||||||
|
"HIDE_HUD_MESSAGES" = "إخفاء رسائل المعلومات";
|
||||||
|
"HIDE_HUD_MESSAGES_DESC" = "مثلاً: تم إيقاف الترجمة...";
|
||||||
|
|
||||||
|
"OLED_DARKMODE" = "وضغ داكن OLED (ميزة تجريبية)";
|
||||||
|
"OLED_DARKMODE_DESC" = "قد لا تعمل في كل الحالات. يجب إعادة تشغيل التطبيق عند تشغيل أو إيقاف هذه الخاصية.";
|
||||||
|
|
||||||
|
"OLED_KEYBOARD" = "لوحة مفاتيح داكنة OLED (ميزة تجريبية)";
|
||||||
|
"OLED_KEYBOARD_DESC" = "قد لا تعمل في كل الحالات. يجب إعادة تشغيل التطبيق عند تشغيل أو إيقاف هذه الخاصية.";
|
||||||
|
|
||||||
|
"HIDE_PAID_PROMOTION_CARDS" = "إخفاء شريط الترويج المدفوع";
|
||||||
|
"HIDE_PAID_PROMOTION_CARDS_DESC" = "إخفاء عبارة يتضمن ترويجاً مدفوعاً الظاهرة على بعض الفيديوهات.";
|
||||||
|
|
||||||
|
// YTCastConfirm
|
||||||
|
"CASTING" = "البث";
|
||||||
|
"MSG_ARE_YOU_SURE" = "هل أنت متأكد أنك تريد بدء البث؟";
|
||||||
|
"MSG_YES" = "نعم";
|
||||||
|
"MSG_CANCEL" = "إلغاء";
|
||||||
@@ -0,0 +1,57 @@
|
|||||||
|
// Settings
|
||||||
|
"VERSION" = "uYouPlus's version: %@";
|
||||||
|
"VERSION_CHECK" = "Tap to check for update!";
|
||||||
|
|
||||||
|
"DONT_EAT_MY_CONTENT" = "Zabránit zářezu/ostrovu na videoobsahu 2:1 (DontEatMyContent)";
|
||||||
|
"DONT_EAT_MY_CONTENT_DESC" = "Zabraňte tomu, aby zářez/Dynamic Island žvýkal video obsah 2:1 na YouTube. Je vyžadován restart aplikace.";
|
||||||
|
|
||||||
|
"REPLACE_PREVIOUS_NEXT_BUTTON" = "Nahradit předchozí a další tlačítko";
|
||||||
|
"REPLACE_PREVIOUS_NEXT_BUTTON_DESC" = "Nahradit předchozí a následující tlačítko tlačítkem Přetočit vpřed a vzad. Je vyžadován restart aplikace.";
|
||||||
|
|
||||||
|
"FIX_GOOGLE_SIGNIN" = "Opravit přihlášení přes Google (pouze pro uživatele TrollStore)";
|
||||||
|
"FIX_GOOGLE_SIGNIN_DESC" = "Tuto možnost zapněte pouze v případě, že se nemůžete přihlásit pomocí svého účtu Google a aplikace byla nainstalována prostřednictvím TrollStore. Pokud se můžete normálně přihlásit, ponechte ji deaktivovanou. Je vyžadován restart aplikace.";
|
||||||
|
|
||||||
|
"HIDE_PREVIOUS_AND_NEXT_BUTTON" = "Skrýt tlačítka předchozí a následující";
|
||||||
|
"HIDE_PREVIOUS_AND_NEXT_BUTTON_DESC" = "Skryje tlačítka předchozí a následující v překrytí ovládání videa.";
|
||||||
|
|
||||||
|
"YT_MINIPLAYER" = "Povolit Minipřehrávač pro všechna videa";
|
||||||
|
"YT_MINIPLAYER_DESC" = "Například u videa pro děti";
|
||||||
|
|
||||||
|
"CAST_CONFIRM" = "Zobrazit potvrzení před začátkem sdílení obrazu (YTCastConfirm)";
|
||||||
|
"CAST_CONFIRM_DESC" = "Zobrazí potvrzení aby se zamezilo nechtěnému sdílení do televize.";
|
||||||
|
|
||||||
|
"HIDE_HOVER_CARD" = "Skrýt karty na konci videa (YTNoHoverCards)";
|
||||||
|
"HIDE_HOVER_CARD_DESC" = "Skryje náhledy jiných videjí na konci videa.";
|
||||||
|
|
||||||
|
"NEW_MINIPLAYER_STYLE" = "Nový styl minipřehrávače (BigYTMiniPlayer)";
|
||||||
|
"NEW_MINIPLAYER_STYLE_DESC" = "Je potřeba restart aplikace.";
|
||||||
|
|
||||||
|
"YT_RE_EXPLORE" = "Nahradit záložku Shorts tab záložkou Explore (YTReExplore)";
|
||||||
|
"YT_RE_EXPLORE_DESC" = "Je potřeba restart aplikace.";
|
||||||
|
|
||||||
|
"HIDE_SUBTITLES_BUTTON" = "Skrýt tlačítko titulky";
|
||||||
|
"HIDE_SUBTITLES_BUTTON_DESC" = "Skryje tlačítko titulky v překrytí ovládání videa.";
|
||||||
|
|
||||||
|
"HIDE_AUTOPLAY_SWITCH" = "Skrýt přepínač automatického přehrávání";
|
||||||
|
"HIDE_AUTOPLAY_SWITCH_DESC" = "Skryje přepínač automatického přehrávání v překrytí ovládání videa.";
|
||||||
|
|
||||||
|
"AUTO_FULLSCREEN" = "Přes celou obrazovku (YTAutoFullScreen)";
|
||||||
|
"AUTO_FULLSCREEN_DESC" = "Automaticky spouští videa přes celou obrazovku.";
|
||||||
|
|
||||||
|
"HIDE_HUD_MESSAGES" = "Skrýt vyskakující zprávy";
|
||||||
|
"HIDE_HUD_MESSAGES_DESC" = "Příklad: Titulky zapnuty/vypnuty, Smyčka videa zapnuta,...";
|
||||||
|
|
||||||
|
"OLED_DARKMODE" = "Tmavý OLED režim (Experimentální)";
|
||||||
|
"OLED_DARKMODE_DESC" = "Mohou se vyskytnout chyby. Je potřeba restart aplikace.";
|
||||||
|
|
||||||
|
"OLED_KEYBOARD" = "OLED Klávesnice (Experimentální)";
|
||||||
|
"OLED_KEYBOARD_DESC" = "Mohou se vyskytnout chyby. Je potřeba restart aplikace.";
|
||||||
|
|
||||||
|
"HIDE_PAID_PROMOTION_CARDS" = "Skrýt kartu placené propagace";
|
||||||
|
"HIDE_PAID_PROMOTION_CARDS_DESC" = "Skryje 'Obsahuje placenou propagaci' u některých videjí.";
|
||||||
|
|
||||||
|
// YTCastConfirm
|
||||||
|
"CASTING" = "Sdílení obrazu";
|
||||||
|
"MSG_ARE_YOU_SURE" = "Opravdu chcete začít sdílet obraz?";
|
||||||
|
"MSG_YES" = "Ano";
|
||||||
|
"MSG_CANCEL" = "Zrušit";
|
||||||
@@ -0,0 +1,57 @@
|
|||||||
|
// Settings
|
||||||
|
"VERSION" = "uYouPlus-Version: %@";
|
||||||
|
"VERSION_CHECK" = "Tippen, um nach Updates zu suchen!";
|
||||||
|
|
||||||
|
"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" = "Tasten zum Vor- und Zurückspringen zwischen Videos durch Vor- und Zurückspultasten ersetzen. App-Neustart erforderlich!";
|
||||||
|
|
||||||
|
"FIX_GOOGLE_SIGNIN" = "Google-Anmeldung reparieren (nur für TrollStore-Benutzer!)";
|
||||||
|
"FIX_GOOGLE_SIGNIN_DESC" = "Aktiviere diese Option nur, wenn Sie sich nicht mit Ihrem Google-Account anmelden können und die App über TrollStore installiert wurde. Wenn Sie sich normal anmelden können, halte diese Option deaktiviert! App-Neustart erforderlich!";
|
||||||
|
|
||||||
|
"HIDE_PREVIOUS_AND_NEXT_BUTTON" = "Vor- und Zurücktasten ausblenden";
|
||||||
|
"HIDE_PREVIOUS_AND_NEXT_BUTTON_DESC" = "Vor- und Zurücktasten vom Videoplayer ausblenden.";
|
||||||
|
|
||||||
|
"YT_MINIPLAYER" = "Miniplayer für alle YouTube-Videos aktivieren";
|
||||||
|
"YT_MINIPLAYER_DESC" = "z.B. bei Videos für Kinder.";
|
||||||
|
|
||||||
|
"CAST_CONFIRM" = "Warnung vor TV-Übertragungen (YTCastConfirm)";
|
||||||
|
"CAST_CONFIRM_DESC" = "Zeigt eine Warnung an, um eine ausversehene TV-Übertragung zu verhindern.";
|
||||||
|
|
||||||
|
"HIDE_HOVER_CARD" = "Endkarten ausblenden (YTNoHoverCards)";
|
||||||
|
"HIDE_HOVER_CARD_DESC" = "Creator-Endkarten (Thumbnails) am Ende des Videos ausblenden.";
|
||||||
|
|
||||||
|
"NEW_MINIPLAYER_STYLE" = "Neuer Miniplayer Style (BigYTMiniPlayer)";
|
||||||
|
"NEW_MINIPLAYER_STYLE_DESC" = "App-Neustart erforderlich!";
|
||||||
|
|
||||||
|
"YT_RE_EXPLORE" = "Shorts-Tab durch Entdecken-Tab ersetzen (YTReExplore)";
|
||||||
|
"YT_RE_EXPLORE_DESC" = "App-Neustart erforderlich!";
|
||||||
|
|
||||||
|
"HIDE_SUBTITLES_BUTTON" = "Untertitel-Button ausblenden";
|
||||||
|
"HIDE_SUBTITLES_BUTTON_DESC" = "Untertitel-Button vom Videoplayer ausblenden.";
|
||||||
|
|
||||||
|
"HIDE_AUTOPLAY_SWITCH" = "Autoplay-Schalter ausblenden";
|
||||||
|
"HIDE_AUTOPLAY_SWITCH_DESC" = "Autoplay-Schalter vom Videoplayer ausblenden.";
|
||||||
|
|
||||||
|
"AUTO_FULLSCREEN" = "Automatisches Vollbild (YTAutoFullScreen)";
|
||||||
|
"AUTO_FULLSCREEN_DESC" = "Automatisch Videos im Vollbild starten.";
|
||||||
|
|
||||||
|
"HIDE_HUD_MESSAGES" = "HUD-Nachrichten ausblenden";
|
||||||
|
"HIDE_HUD_MESSAGES_DESC" = "z.B.: Untertitel sind 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 aktiviert/deaktiviert wird!";
|
||||||
|
|
||||||
|
"OLED_KEYBOARD" = "OLED-Tastatur (Experimental)";
|
||||||
|
"OLED_KEYBOARD_DESC" = "Könnte in manchen Fällen nicht richtig funktionieren. App-Neustart erforderlich!";
|
||||||
|
|
||||||
|
"HIDE_PAID_PROMOTION_CARDS" = "Enthält bezahlte Werbung Info ausblenden";
|
||||||
|
"HIDE_PAID_PROMOTION_CARDS_DESC" = "Enthält bezahlte Werbung Infobanner bei manchen Videos ausblenden.";
|
||||||
|
|
||||||
|
// YTCastConfirm
|
||||||
|
"CASTING" = "TV-Übertragung";
|
||||||
|
"MSG_ARE_YOU_SURE" = "Sind Sie sicher, dass Sie mit der Videoübertragung beginnen wollen?";
|
||||||
|
"MSG_YES" = "Ja";
|
||||||
|
"MSG_CANCEL" = "Abbrechen";
|
||||||
@@ -1,4 +1,15 @@
|
|||||||
// Settings
|
// Settings
|
||||||
|
"VERSION" = "uYouPlus's version: %@";
|
||||||
|
"VERSION_CHECK" = "Tap to check for update!";
|
||||||
|
|
||||||
|
"DONT_EAT_MY_CONTENT" = "Αποτροπή Notch/Island σε περιεχόμενο βίντεο 2:1 (DontEatMyContent)";
|
||||||
|
"DONT_EAT_MY_CONTENT_DESC" = "Αποτρέψτε το notch/Dynamic Island από το να μασουλάει περιεχόμενο βίντεο 2:1 στο YouTube. Απαιτείται επανεκκίνηση της εφαρμογής.";
|
||||||
|
|
||||||
|
"REPLACE_PREVIOUS_NEXT_BUTTON" = "Αντικατάσταση του Προηγούμενου και του Επόμενου Κουμπιού";
|
||||||
|
"REPLACE_PREVIOUS_NEXT_BUTTON_DESC" = "Αντικατάσταση του Προηγούμενου και του Επόμενου κουμπιού με το κουμπί Γρήγορη κίνηση προς τα εμπρός και προς τα πίσω. Απαιτείται επανεκκίνηση της εφαρμογής.";
|
||||||
|
|
||||||
|
"FIX_GOOGLE_SIGNIN" = "Διόρθωση σύνδεσης Google (μόνο για χρήστες του TrollStore)";
|
||||||
|
"FIX_GOOGLE_SIGNIN_DESC" = "Ενεργοποιήστε αυτήν την επιλογή μόνο όταν δεν μπορείτε να συνδεθείτε με τον λογαριασμό σας Google και η εφαρμογή έχει εγκατασταθεί μέσω του TrollStore. Εάν μπορείτε να συνδεθείτε κανονικά, διατηρήστε την απενεργοποιημένη. Απαιτείται επανεκκίνηση της εφαρμογής.";
|
||||||
|
|
||||||
"HIDE_PREVIOUS_AND_NEXT_BUTTON" = "Κρύψτε το προηγούμενο και το επόμενο κουμπί";
|
"HIDE_PREVIOUS_AND_NEXT_BUTTON" = "Κρύψτε το προηγούμενο και το επόμενο κουμπί";
|
||||||
"HIDE_PREVIOUS_AND_NEXT_BUTTON_DESC" = "Κρύψτε το προηγούμενο και το επόμενο κουμπί κατά την αναπαραγωγή βίντεο.";
|
"HIDE_PREVIOUS_AND_NEXT_BUTTON_DESC" = "Κρύψτε το προηγούμενο και το επόμενο κουμπί κατά την αναπαραγωγή βίντεο.";
|
||||||
|
|||||||
@@ -1,18 +1,29 @@
|
|||||||
// Settings
|
// 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 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" = "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" = "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.";
|
"YT_MINIPLAYER_DESC" = "Kid videos for example.";
|
||||||
|
|
||||||
"CAST_CONFIRM" = "Confirm alert before casting (YTCastConfirm)";
|
"CAST_CONFIRM" = "Confirm alert before casting (YTCastConfirm)";
|
||||||
"CAST_CONFIRM_DESC" = "Show a confirm alert before casting to prevent accidentally hijacking TV.";
|
"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" = "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.";
|
"NEW_MINIPLAYER_STYLE_DESC" = "App restart is required.";
|
||||||
|
|
||||||
"YT_RE_EXPLORE" = "Replace Shorts tab with Explore tab (YTReExplore)";
|
"YT_RE_EXPLORE" = "Replace Shorts tab with Explore tab (YTReExplore)";
|
||||||
@@ -31,10 +42,13 @@
|
|||||||
"HIDE_HUD_MESSAGES_DESC" = "Example: CC is turned on/off, Video loop is on,...";
|
"HIDE_HUD_MESSAGES_DESC" = "Example: CC is turned on/off, Video loop is on,...";
|
||||||
|
|
||||||
"OLED_DARKMODE" = "OLED Dark mode (Experimental)";
|
"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" = "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.";
|
||||||
|
|
||||||
// YTCastConfirm
|
// YTCastConfirm
|
||||||
"CASTING" = "Castings";
|
"CASTING" = "Castings";
|
||||||
|
|||||||
@@ -0,0 +1,57 @@
|
|||||||
|
// 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.";
|
||||||
|
|
||||||
|
"REPLACE_PREVIOUS_NEXT_BUTTON" = "Reemplazar botón anterior y siguiente";
|
||||||
|
"REPLACE_PREVIOUS_NEXT_BUTTON_DESC" = "Reemplace el botón Anterior y Siguiente con el botón Avance rápido y Rebobinado. Es necesario reiniciar la aplicación.";
|
||||||
|
|
||||||
|
"FIX_GOOGLE_SIGNIN" = "Reparar el inicio de sesión de Google (solo para usuarios de TrollStore)";
|
||||||
|
"FIX_GOOGLE_SIGNIN_DESC" = "Active esta opción solo cuando no pueda iniciar sesión con su cuenta de Google y la aplicación se instaló a través de TrollStore. Si puede iniciar sesión normalmente, manténgala desactivada. Es necesario reiniciar la aplicación.";
|
||||||
|
|
||||||
|
"HIDE_PREVIOUS_AND_NEXT_BUTTON" = "Ocultar el botón de Anterior y Siguiente";
|
||||||
|
"HIDE_PREVIOUS_AND_NEXT_BUTTON_DESC" = "Ocultar el botón de Anterior y Siguiente en los botones superpuestos.";
|
||||||
|
|
||||||
|
"YT_MINIPLAYER" = "Activar el minirreproductor para todos los vídeos de YouTube";
|
||||||
|
"YT_MINIPLAYER_DESC" = "Vídeos infantiles por ejemplo.";
|
||||||
|
|
||||||
|
"CAST_CONFIRM" = "Alerta de confirmación antes de Enviar contenido (YTCastConfirm)";
|
||||||
|
"CAST_CONFIRM_DESC" = "Mostrar una alerta de confirmación antes de Enviar contenido para prevenir el secuestro accidental del TV.";
|
||||||
|
|
||||||
|
"HIDE_HOVER_CARD" = "Ocultar tarjetas flotantes en las pantallas finales (YTNoHoverCards)";
|
||||||
|
"HIDE_HOVER_CARD_DESC" = "Ocultar tarjetas flotantes del creador (miniaturas) al final de los vídeos.";
|
||||||
|
|
||||||
|
"NEW_MINIPLAYER_STYLE" = "Nuevo estilo de barra del minirreproductor (BigYTMiniPlayer)";
|
||||||
|
"NEW_MINIPLAYER_STYLE_DESC" = "Requiere reiniciar la app.";
|
||||||
|
|
||||||
|
"YT_RE_EXPLORE" = "Reemplazar pestaña de Cortos con pestaña de Explorar (YTReExplore)";
|
||||||
|
"YT_RE_EXPLORE_DESC" = "Requiere reiniciar la app.";
|
||||||
|
|
||||||
|
"HIDE_SUBTITLES_BUTTON" = "Ocultar botón de Subtítulos";
|
||||||
|
"HIDE_SUBTITLES_BUTTON_DESC" = "Ocultar el botón de Subtítulos en los botones superpuestos.";
|
||||||
|
|
||||||
|
"HIDE_AUTOPLAY_SWITCH" = "Ocultar interruptor de Reproducir automáticamente";
|
||||||
|
"HIDE_AUTOPLAY_SWITCH_DESC" = "Ocultar el interruptor de Reproducir automáticamente en los botones superpuestos.";
|
||||||
|
|
||||||
|
"AUTO_FULLSCREEN" = "Pantalla completa automática (YTAutoFullScreen)";
|
||||||
|
"AUTO_FULLSCREEN_DESC" = "Reproducir vídeos en pantalla completa automáticamente.";
|
||||||
|
|
||||||
|
"HIDE_HUD_MESSAGES" = "Ocultar mensajes HUD";
|
||||||
|
"HIDE_HUD_MESSAGES_DESC" = "Ejemplo: CC está activado/desactivado, Vídeo en bucle está activado,...";
|
||||||
|
|
||||||
|
"OLED_DARKMODE" = "Modo oscuro OLED (Experimental)";
|
||||||
|
"OLED_DARKMODE_DESC" = "Puede no funcionar correctamente en algunos casos. Requiere reiniciar la app después de activar/desactivar esta opción.";
|
||||||
|
|
||||||
|
"OLED_KEYBOARD" = "Teclado OLED (Experimental)";
|
||||||
|
"OLED_KEYBOARD_DESC" = "Puede no funcionar correctamente en algunos casos. Requiere reiniciar la app.";
|
||||||
|
|
||||||
|
"HIDE_PAID_PROMOTION_CARDS" = "Ocultar banner de contenido promocional";
|
||||||
|
"HIDE_PAID_PROMOTION_CARDS_DESC" = "Ocultar el banner de 'Incluye contenido promocional' en algunos vídeos.";
|
||||||
|
|
||||||
|
// YTCastConfirm
|
||||||
|
"CASTING" = "Enviar contenido";
|
||||||
|
"MSG_ARE_YOU_SURE" = "¿Estás seguro de que deseas Enviar contenido?";
|
||||||
|
"MSG_YES" = "Sí";
|
||||||
|
"MSG_CANCEL" = "Cancelar";
|
||||||
@@ -1,4 +1,15 @@
|
|||||||
// Settings
|
// Settings
|
||||||
|
"VERSION" = "Version de uYouPlus : %@";
|
||||||
|
"VERSION_CHECK" = "Appuyez pour vérifier les mises à jour !";
|
||||||
|
|
||||||
|
"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.";
|
||||||
|
|
||||||
|
"REPLACE_PREVIOUS_NEXT_BUTTON" = "Remplacer le bouton précédent et suivant";
|
||||||
|
"REPLACE_PREVIOUS_NEXT_BUTTON_DESC" = "Remplace les boutons Précédent et Suivant par les boutons Avance rapide et Retour rapide. Le redémarrage de l'application est nécessaire";
|
||||||
|
|
||||||
|
"FIX_GOOGLE_SIGNIN" = "Réparer l'identification Google (pour les utilisateurs de TrollStore uniquement)";
|
||||||
|
"FIX_GOOGLE_SIGNIN_DESC" = "Activez cette option uniquement si vous ne pouvez pas vous connecter avec votre compte Google et que l'application a été installée via TrollStore. Si vous pouvez vous connecter normalement, laissez-la désactivée. Le redémarrage de l'application est nécessaire.";
|
||||||
|
|
||||||
"HIDE_PREVIOUS_AND_NEXT_BUTTON" = "Masquer les boutons Précédent et Suivant";
|
"HIDE_PREVIOUS_AND_NEXT_BUTTON" = "Masquer les boutons Précédent et Suivant";
|
||||||
"HIDE_PREVIOUS_AND_NEXT_BUTTON_DESC" = "Masquer les boutons Précédent et Suivant dans la superposition des contrôles vidéo";
|
"HIDE_PREVIOUS_AND_NEXT_BUTTON_DESC" = "Masquer les boutons Précédent et Suivant dans la superposition des contrôles vidéo";
|
||||||
@@ -36,8 +47,11 @@
|
|||||||
"OLED_KEYBOARD" = "Clavier OLED (Expérimental)";
|
"OLED_KEYBOARD" = "Clavier OLED (Expérimental)";
|
||||||
"OLED_KEYBOARD_DESC" = "Peut ne pas fonctionner correctement dans certains cas. Un redémarrage de l'application est nécessaire.";
|
"OLED_KEYBOARD_DESC" = "Peut ne pas fonctionner correctement dans certains cas. Un redémarrage de l'application est nécessaire.";
|
||||||
|
|
||||||
|
"HIDE_PAID_PROMOTION_CARDS" = "Masquer la bannière des communications commerciales";
|
||||||
|
"HIDE_PAID_PROMOTION_CARDS_DESC" = "Masque la bannière 'Inclut une communication commerciale' dans certaines vidéos.";
|
||||||
|
|
||||||
// YTCastConfirm
|
// YTCastConfirm
|
||||||
"CASTING" = "Castings";
|
"CASTING" = "Cast";
|
||||||
"MSG_ARE_YOU_SURE" = "Êtes-vous sûr de vouloir commencer le casting ?";
|
"MSG_ARE_YOU_SURE" = "Êtes-vous sûr de vouloir commencer un cast sur votre télévision ?";
|
||||||
"MSG_YES" = "Oui";
|
"MSG_YES" = "Oui";
|
||||||
"MSG_CANCEL" = "Annuler";
|
"MSG_CANCEL" = "Annuler";
|
||||||
|
|||||||
@@ -1,4 +1,15 @@
|
|||||||
// Settings
|
// Settings
|
||||||
|
"VERSION" = "uYouPlus's version: %@";
|
||||||
|
"VERSION_CHECK" = "Tap to check for update!";
|
||||||
|
|
||||||
|
"DONT_EAT_MY_CONTENT" = "מנע חריץ/אי בתוכן וידאו 2:1 (DontEatMyContent)";
|
||||||
|
"DONT_EAT_MY_CONTENT_DESC" = "מנע מהחריץ/האי הדינמי ללעוס תוכן וידאו 2:1 ב-YouTube. נדרשת הפעלה מחדש של האפליקציה.";
|
||||||
|
|
||||||
|
"REPLACE_PREVIOUS_NEXT_BUTTON" = "החלף את הלחצן הקודם והבא";
|
||||||
|
"REPLACE_PREVIOUS_NEXT_BUTTON_DESC" = "החלף את הלחצן הקודם והבא בלחצן הרצה קדימה והאחורה. נדרשת הפעלה מחדש של האפליקציה.";
|
||||||
|
|
||||||
|
"FIX_GOOGLE_SIGNIN" = "תקן כניסה של Google (עבור משתמש TrollStore בלבד)";
|
||||||
|
"FIX_GOOGLE_SIGNIN_DESC" = "הפעל אפשרות זו רק כאשר אינך יכול להיכנס עם חשבון Google שלך והאפליקציה הותקנה דרך TrollStore. אם אתה יכול להתחבר כרגיל, השאר אותה מושבתת. נדרשת הפעלה מחדש של האפליקציה.";
|
||||||
|
|
||||||
"HIDE_PREVIOUS_AND_NEXT_BUTTON" = "הסתר את הקודם והבא";
|
"HIDE_PREVIOUS_AND_NEXT_BUTTON" = "הסתר את הקודם והבא";
|
||||||
"HIDE_PREVIOUS_AND_NEXT_BUTTON_DESC" = "הסתר את כפתורי הקודם והבא בתצוגת השליטה בסרטון.";
|
"HIDE_PREVIOUS_AND_NEXT_BUTTON_DESC" = "הסתר את כפתורי הקודם והבא בתצוגת השליטה בסרטון.";
|
||||||
|
|||||||
@@ -0,0 +1,57 @@
|
|||||||
|
// Settings
|
||||||
|
"VERSION" = "uYouPlus's version: %@";
|
||||||
|
"VERSION_CHECK" = "Tap to check for update!";
|
||||||
|
|
||||||
|
"DONT_EAT_MY_CONTENT" = "Notch/Island megelőzése 2:1 arányú videótartalomnál (DontEatMyContent)";
|
||||||
|
"DONT_EAT_MY_CONTENT_DESC" = "Akadályozza meg, hogy a Notch/Dynamic Island 2:1 arányú videótartalmat csámcsogjon a YouTube-on. Az alkalmazás újraindítása szükséges.";
|
||||||
|
|
||||||
|
"REPLACE_PREVIOUS_NEXT_BUTTON" = "Előző és Következő gomb cseréje";
|
||||||
|
"REPLACE_PREVIOUS_NEXT_BUTTON_DESC" = "Cserélje ki az Előző és Következő gombot Gyors előre és visszatekerés gombbal. Az alkalmazás újraindítása szükséges.";
|
||||||
|
|
||||||
|
"FIX_GOOGLE_SIGNIN" = "A Google bejelentkezés javítása (csak a TrollStore-felhasználók számára)";
|
||||||
|
"FIX_GOOGLE_SIGNIN_DESC" = "Csak akkor kapcsolja be ezt az opciót, ha nem tud bejelentkezni Google-fiókjával, és az alkalmazást a TrollStore-on keresztül telepítették. Ha normálisan be tud jelentkezni, tartsa letiltva. Az alkalmazás újraindítása szükséges.";
|
||||||
|
|
||||||
|
"HIDE_PREVIOUS_AND_NEXT_BUTTON" = "Előző és Következő gomb elrejtése";
|
||||||
|
"HIDE_PREVIOUS_AND_NEXT_BUTTON_DESC" = "Az Előző és a Következő gomb elrejtése a videóvezérlők fedvényén.";
|
||||||
|
|
||||||
|
"YT_MINIPLAYER" = "Engedélyezze a Minilejátszót az összes YouTube-videóhoz";
|
||||||
|
"YT_MINIPLAYER_DESC" = "Például gyermekvideók.";
|
||||||
|
|
||||||
|
"CAST_CONFIRM" = "Megerősítés átküldés előtt (YTCastConfirm)";
|
||||||
|
"CAST_CONFIRM_DESC" = "Az átküldés előtt mutasson megerősítő figyelmeztetést, hogy megakadályozza a TV véletlen eltérítését.";
|
||||||
|
|
||||||
|
"HIDE_HOVER_CARD" = "A záróképernyők lebegő kártyáinak elrejtése (YTNoHoverCards)";
|
||||||
|
"HIDE_HOVER_CARD_DESC" = "Az alkotói záróképernyők (bélyegképek) elrejtése a videók végén.";
|
||||||
|
|
||||||
|
"NEW_MINIPLAYER_STYLE" = "Új minilejátszó sáv (BigYTMiniPlayer)";
|
||||||
|
"NEW_MINIPLAYER_STYLE_DESC" = "Az alkalmazás újraindítása szükséges.";
|
||||||
|
|
||||||
|
"YT_RE_EXPLORE" = "Cserélje le a Shorts fület a Felfedezés fülre (YTReExplore)";
|
||||||
|
"YT_RE_EXPLORE_DESC" = "Az alkalmazás újraindítása szükséges.";
|
||||||
|
|
||||||
|
"HIDE_SUBTITLES_BUTTON" = "Feliratok elrejtése";
|
||||||
|
"HIDE_SUBTITLES_BUTTON_DESC" = "A Feliratok gomb elrejtése a videóvezérlők fedvényében.";
|
||||||
|
|
||||||
|
"HIDE_AUTOPLAY_SWITCH" = "Az automatikus lejátszás kapcsoló elrejtése";
|
||||||
|
"HIDE_AUTOPLAY_SWITCH_DESC" = "Az Automatikus lejátszás kapcsoló elrejtése a videovezérlők fedvényében.";
|
||||||
|
|
||||||
|
"AUTO_FULLSCREEN" = "Automatikus teljes képernyő (YTAutoFullScreen)";
|
||||||
|
"AUTO_FULLSCREEN_DESC" = "Videók automatikus lejátszása teljes képernyőn.";
|
||||||
|
|
||||||
|
"HIDE_HUD_MESSAGES" = "HUD üzenetek elrejtése";
|
||||||
|
"HIDE_HUD_MESSAGES_DESC" = "Példa: A CC be/ki van kapcsolva, a videó hurok be van kapcsolva,...";
|
||||||
|
|
||||||
|
"OLED_DARKMODE" = "OLED sötét mód (Kísérleti)";
|
||||||
|
"OLED_DARKMODE_DESC" = "Előfordulhat, hogy bizonyos esetekben nem működik megfelelően. Az alkalmazás újraindítása szükséges az opció engedélyezése/letiltása után.";
|
||||||
|
|
||||||
|
"OLED_KEYBOARD" = "OLED Billentyűzet (Kísérleti)";
|
||||||
|
"OLED_KEYBOARD_DESC" = "Előfordulhat, hogy bizonyos esetekben nem működik megfelelően. Az alkalmazás újraindítása szükséges az opció engedélyezése/letiltása után.";
|
||||||
|
|
||||||
|
"HIDE_PAID_PROMOTION_CARDS" = "Fizetett promóciós szalaghirdetés elrejtése";
|
||||||
|
"HIDE_PAID_PROMOTION_CARDS_DESC" = "A „Fizetett promóciókat tartalmaz” szalaghirdetés elrejtése egyes videóknál.";
|
||||||
|
|
||||||
|
// YTCastConfirm
|
||||||
|
"CASTING" = "Casting";
|
||||||
|
"MSG_ARE_YOU_SURE" = "Biztos, hogy elkezdi az átküldést?";
|
||||||
|
"MSG_YES" = "Igen";
|
||||||
|
"MSG_CANCEL" = "Visszavon";
|
||||||
@@ -0,0 +1,58 @@
|
|||||||
|
// Settings
|
||||||
|
"VERSION" = "uYouPlus's version: %@";
|
||||||
|
"VERSION_CHECK" = "Tap to check for update!";
|
||||||
|
|
||||||
|
"DONT_EAT_MY_CONTENT" = "Previeni la Tacca/Isola sui Contenuti Video 2:1 (DontEatMyContent)";
|
||||||
|
"DONT_EAT_MY_CONTENT_DESC" = "Previene alla Tacca/Isola di nascondere parte dei Contenuti Video 2:1 in YouTube. È richiesto un riavvio dell'app.";
|
||||||
|
|
||||||
|
"REPLACE_PREVIOUS_NEXT_BUTTON" = "Sostituisci i Bottoni Precedente e Successivo";
|
||||||
|
"REPLACE_PREVIOUS_NEXT_BUTTON_DESC" = "Sostituisci i Bottoni Precedente e Successivo con Avanti veloce e Indietro veloce. È richiesto un riavvio dell'app.";
|
||||||
|
|
||||||
|
"FIX_GOOGLE_SIGNIN" = "Ripara Google Sign in (solo per utenti TrollStore)";
|
||||||
|
"FIX_GOOGLE_SIGNIN_DESC" = "Attiva questa opzione solo quando non puoi accedere al tuo account Google e l'app è stata installata attraverso TrollStore. Se puoi accedere normalmente, tienila disabilitata. È richiesto un riavvio dell'app.";
|
||||||
|
|
||||||
|
|
||||||
|
"HIDE_PREVIOUS_AND_NEXT_BUTTON" = "Nascondi i bottoni Precedente e Successivo";
|
||||||
|
"HIDE_PREVIOUS_AND_NEXT_BUTTON_DESC" = "Nasconde i bottoni Precedente e Successivo dai controlli in sovrimpressione al video.";
|
||||||
|
|
||||||
|
"YT_MINIPLAYER" = "Abilita il Miniplayer su tutti i video di YouTube";
|
||||||
|
"YT_MINIPLAYER_DESC" = "Video YouTube Kids per esempio.";
|
||||||
|
|
||||||
|
"CAST_CONFIRM" = "Avviso di conferma prima della condivisione su TV (YTCastConfirm)";
|
||||||
|
"CAST_CONFIRM_DESC" = "Mostra un avviso di conferma prima della condivisione per evitar e di irrompere accidentalmente sulla TV.";
|
||||||
|
|
||||||
|
"HIDE_HOVER_CARD" = "Nascondi i riquadri in sovrimpressione a fine video (YTNoHoverCards)";
|
||||||
|
"HIDE_HOVER_CARD_DESC" = "Nasconde i riquadri (miniature) a fine video proposti dall'autore.";
|
||||||
|
|
||||||
|
"NEW_MINIPLAYER_STYLE" = "Nuovo stile per la barra del miniplayer (BigYTMiniPlayer)";
|
||||||
|
"NEW_MINIPLAYER_STYLE_DESC" = "È richiesto un riavvio dell'app.";
|
||||||
|
|
||||||
|
"YT_RE_EXPLORE" = "Sostituisci il tab Shorts con il tab Esplora (YTReExplore)";
|
||||||
|
"YT_RE_EXPLORE_DESC" = "È richiesto un riavvio dell'app.";
|
||||||
|
|
||||||
|
"HIDE_SUBTITLES_BUTTON" = "Nascondi Bottone Sottotitoli";
|
||||||
|
"HIDE_SUBTITLES_BUTTON_DESC" = "Nasconde il controllo per i sottotitoli in sovrimpressione al video.";
|
||||||
|
|
||||||
|
"HIDE_AUTOPLAY_SWITCH" = "Nascondi Interruttore Riproduzione Automatica";
|
||||||
|
"HIDE_AUTOPLAY_SWITCH_DESC" = "Nasconde il controllo per la riproduzione automatica in sovrimpressione al video.";
|
||||||
|
|
||||||
|
"AUTO_FULLSCREEN" = "Auto Schermo Intero (YTAutoFullScreen)";
|
||||||
|
"AUTO_FULLSCREEN_DESC" = "Riproduce automaticamente video a tutto schermo.";
|
||||||
|
|
||||||
|
"HIDE_HUD_MESSAGES" = "Nascondi messaggi in sovrimpressione";
|
||||||
|
"HIDE_HUD_MESSAGES_DESC" = "Esempio: Sottotitoli attivati/disattivati, Ripetizione video attiva,...";
|
||||||
|
|
||||||
|
"OLED_DARKMODE" = "Modalità Scura OLED (Sperimentale)";
|
||||||
|
"OLED_DARKMODE_DESC" = "Potrebbe non funzionare correttamente in alcuni scenari. È richiesto un riavvio dell'app dopo aver abilitato/disabilitato questa opzione.";
|
||||||
|
|
||||||
|
"OLED_KEYBOARD" = "Tastiera OLED (Sperimentale)";
|
||||||
|
"OLED_KEYBOARD_DESC" = "Potrebbe non funzionare correttamente in alcuni scenari. È richiesto un riavvio dell'app.";
|
||||||
|
|
||||||
|
"HIDE_PAID_PROMOTION_CARDS" = "Nascondi i banner sponsorizzati";
|
||||||
|
"HIDE_PAID_PROMOTION_CARDS_DESC" = "Nasconde il banner 'Include Promozioni a Pagamento' in alcuni video.";
|
||||||
|
|
||||||
|
// YTCastConfirm
|
||||||
|
"CASTING" = "Condivisione su TV";
|
||||||
|
"MSG_ARE_YOU_SURE" = "Sei sicuro di voler avviare la condivisione?";
|
||||||
|
"MSG_YES" = "Sì";
|
||||||
|
"MSG_CANCEL" = "Annulla";
|
||||||
@@ -0,0 +1,57 @@
|
|||||||
|
// Settings
|
||||||
|
"VERSION" = "uYouPlusのバージョン: %@";
|
||||||
|
"VERSION_CHECK" = "ここをタップしてアップデートを確認!";
|
||||||
|
|
||||||
|
"DONT_EAT_MY_CONTENT" = "2:1の動画とノッチ/Dynamic Islandの最適化 (DontEatMyContent)";
|
||||||
|
"DONT_EAT_MY_CONTENT_DESC" = "2:1比率の動画とノッチ/Dynamic Islandが干渉することを防ぎます。アプリの再起動が必要です。";
|
||||||
|
|
||||||
|
"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" = "動画コントロールのオーバーレイで次の動画と前の動画を再生するボタンを非表示にします。";
|
||||||
|
|
||||||
|
"YT_MINIPLAYER" = "すべての動画でミニプレーヤーを有効にする";
|
||||||
|
"YT_MINIPLAYER_DESC" = "例:子ども向けの動画";
|
||||||
|
|
||||||
|
"CAST_CONFIRM" = "キャストする前に確認をする (YTCastConfirm)";
|
||||||
|
"CAST_CONFIRM_DESC" = "誤ってテレビにキャストしないように、確認の警告を表示します。";
|
||||||
|
|
||||||
|
"HIDE_HOVER_CARD" = "動画終わりのホバーカードを非表示 (YTNoHoverCards)";
|
||||||
|
"HIDE_HOVER_CARD_DESC" = "動画の最後のホバーカード(サムネイル)を非表示にします。";
|
||||||
|
|
||||||
|
"NEW_MINIPLAYER_STYLE" = "新しいミニプレーヤー・バーを使う (BigYTMiniPlayer)";
|
||||||
|
"NEW_MINIPLAYER_STYLE_DESC" = "アプリの再起動が必要です。";
|
||||||
|
|
||||||
|
"YT_RE_EXPLORE" = "ショートタブを探索タブに置き換える (YTReExplore)";
|
||||||
|
"YT_RE_EXPLORE_DESC" = "アプリの再起動が必要です。";
|
||||||
|
|
||||||
|
"HIDE_SUBTITLES_BUTTON" = "字幕ボタンを非表示";
|
||||||
|
"HIDE_SUBTITLES_BUTTON_DESC" = "動画コントロールのオーバーレイから字幕ボタンを非表示にします。";
|
||||||
|
|
||||||
|
"HIDE_AUTOPLAY_SWITCH" = "自動再生ボタンを非表示";
|
||||||
|
"HIDE_AUTOPLAY_SWITCH_DESC" = "動画コントロールのオーバーレイから自動再生ボタンを非表示にします。";
|
||||||
|
|
||||||
|
"AUTO_FULLSCREEN" = "自動でフルスクリーンにする (YTAutoFullScreen)";
|
||||||
|
"AUTO_FULLSCREEN_DESC" = "動画を自動でフルスクリーンにします。";
|
||||||
|
|
||||||
|
"HIDE_HUD_MESSAGES" = "HUDのメッセージを非表示";
|
||||||
|
"HIDE_HUD_MESSAGES_DESC" = "例:字幕がオン/オフになりました、ループ再生はオンになっています、等";
|
||||||
|
|
||||||
|
"OLED_DARKMODE" = "有機ELダークモード (実験的機能)";
|
||||||
|
"OLED_DARKMODE_DESC" = "正常に動作しない可能性があります。この設定を変更した場合、アプリの再起動が必要です。";
|
||||||
|
|
||||||
|
"OLED_KEYBOARD" = "有機ELキーボード (実験的機能)";
|
||||||
|
"OLED_KEYBOARD_DESC" = "正常に動作しない可能性があります。この設定を変更した場合、アプリの再起動が必要です。";
|
||||||
|
|
||||||
|
"HIDE_PAID_PROMOTION_CARDS" = "プロモーションバナーを非表示";
|
||||||
|
"HIDE_PAID_PROMOTION_CARDS_DESC" = "一部の動画で表示される「プロモーションを含みます」のバナーを非表示にします。";
|
||||||
|
|
||||||
|
// YTCastConfirm
|
||||||
|
"CASTING" = "キャスト";
|
||||||
|
"MSG_ARE_YOU_SURE" = "本当にキャストを開始しますか?";
|
||||||
|
"MSG_YES" = "はい";
|
||||||
|
"MSG_CANCEL" = "キャンセル";
|
||||||
@@ -0,0 +1,57 @@
|
|||||||
|
// Settings
|
||||||
|
"VERSION" = "uYouPlus 버전: %@";
|
||||||
|
"VERSION_CHECK" = "업데이트하려면 탭하세요!";
|
||||||
|
|
||||||
|
"DONT_EAT_MY_CONTENT" = "노치/아일랜드 영역이 2:1 비율 비디오를 가리지 않게 함 (DontEatMyContent)";
|
||||||
|
"DONT_EAT_MY_CONTENT_DESC" = "노치/다이내믹 아일랜드 영역이 유튜브의 2:1 비율 영상 일부를 가리는 것을 막아줍니다. 앱을 다시 시작해야 합니다.";
|
||||||
|
|
||||||
|
"REPLACE_PREVIOUS_NEXT_BUTTON" = "이전, 다음 재생 버튼 교체";
|
||||||
|
"REPLACE_PREVIOUS_NEXT_BUTTON_DESC" = "이전 재생, 다음 재생 버튼을 빨리 감기, 되감기 버튼으로 교체합니다. 앱을 다시 시작해야 합니다.";
|
||||||
|
|
||||||
|
"FIX_GOOGLE_SIGNIN" = "구글 로그인 문제 수정 (TrollStore 사용자만 해당)";
|
||||||
|
"FIX_GOOGLE_SIGNIN_DESC" = "TrollStore를 통해 설치된 앱에서만 동작합니다: 구글 계정으로 로그인하려면 이 옵션을 켜 주세요. 앱을 다시 시작해야 합니다.";
|
||||||
|
|
||||||
|
"HIDE_PREVIOUS_AND_NEXT_BUTTON" = "이전, 다음 재생 버튼 숨기기";
|
||||||
|
"HIDE_PREVIOUS_AND_NEXT_BUTTON_DESC" = "비디오 재생 오버레이에서 이전 재생, 다음 재생 버튼을 숨깁니다.";
|
||||||
|
|
||||||
|
"YT_MINIPLAYER" = "모든 YouTube 영상에서 미니 플레이어 활성화";
|
||||||
|
"YT_MINIPLAYER_DESC" = "유튜브 키즈의 영상 같은 경우.";
|
||||||
|
|
||||||
|
"CAST_CONFIRM" = "TV 전송 알림 (YTCastConfirm)";
|
||||||
|
"CAST_CONFIRM_DESC" = "의도치 않게 TV로 영상을 전송하지 않도록 보내기 전에 확인 메시지를 표시합니다.";
|
||||||
|
|
||||||
|
"HIDE_HOVER_CARD" = "영상 끝 부분의 호버카드 숨기기 (YTNoHoverCards)";
|
||||||
|
"HIDE_HOVER_CARD_DESC" = "영상의 끝 부분에서 게시자가 표시한 영상 썸네일을 숨깁니다.";
|
||||||
|
|
||||||
|
"NEW_MINIPLAYER_STYLE" = "새로운 스타일의 미니 플레이어 (BigYTMiniPlayer)";
|
||||||
|
"NEW_MINIPLAYER_STYLE_DESC" = "앱을 다시 시작해야 합니다.";
|
||||||
|
|
||||||
|
"YT_RE_EXPLORE" = "Shorts 탭 대신 탐색 탭 보이기 (YTReExplore)";
|
||||||
|
"YT_RE_EXPLORE_DESC" = "앱을 다시 시작해야 합니다.";
|
||||||
|
|
||||||
|
"HIDE_SUBTITLES_BUTTON" = "자막 버튼 숨기기";
|
||||||
|
"HIDE_SUBTITLES_BUTTON_DESC" = "비디오 재생 오버레이에서 자막 버튼을 숨깁니다.";
|
||||||
|
|
||||||
|
"HIDE_AUTOPLAY_SWITCH" = "자동재생 스위치 숨기기";
|
||||||
|
"HIDE_AUTOPLAY_SWITCH_DESC" = "비디오 재생 오버레이에서 자동재생 스위치를 숨깁니다.";
|
||||||
|
|
||||||
|
"AUTO_FULLSCREEN" = "자동 전체화면 재생 (YTAutoFullScreen)";
|
||||||
|
"AUTO_FULLSCREEN_DESC" = "자동으로 전체화면에서 재생합니다.";
|
||||||
|
|
||||||
|
"HIDE_HUD_MESSAGES" = "화면 메시지 숨기기";
|
||||||
|
"HIDE_HUD_MESSAGES_DESC" = "예: 자막 사용 설정됨/중지됨, 반복재생 설정됨,...";
|
||||||
|
|
||||||
|
"OLED_DARKMODE" = "OLED 다크모드 (실험실)";
|
||||||
|
"OLED_DARKMODE_DESC" = "몇몇 경우 제대로 동작하지 않을 수도 있습니다. 이 기능을 켜거나 끄는 경우 앱을 다시 시작해야 합니다.";
|
||||||
|
|
||||||
|
"OLED_KEYBOARD" = "OLED 키보드 (실험실)";
|
||||||
|
"OLED_KEYBOARD_DESC" = "몇몇 경우 제대로 동작하지 않을 수도 있습니다. 앱을 다시 시작해야 합니다.";
|
||||||
|
|
||||||
|
"HIDE_PAID_PROMOTION_CARDS" = "유료 광고 배너 숨기기";
|
||||||
|
"HIDE_PAID_PROMOTION_CARDS_DESC" = "'유료 광고 포함' 배너를 숨깁니다.";
|
||||||
|
|
||||||
|
// YTCastConfirm
|
||||||
|
"CASTING" = "TV로 전송";
|
||||||
|
"MSG_ARE_YOU_SURE" = "TV로 영상 전송을 시작하겠습니까?";
|
||||||
|
"MSG_YES" = "예";
|
||||||
|
"MSG_CANCEL" = "취소";
|
||||||
@@ -0,0 +1,57 @@
|
|||||||
|
// Settings
|
||||||
|
"VERSION" = "uYouPlus's version: %@";
|
||||||
|
"VERSION_CHECK" = "Tap to check for update!";
|
||||||
|
|
||||||
|
"DONT_EAT_MY_CONTENT" = "Voorkom Notch/Eiland Bij 2:1 Video's (DontEatMyContent)";#
|
||||||
|
"DONT_EAT_MY_CONTENT_DESC" = "Voorkomt dat de video zich achter de Notch/het Dynamische Eiland bevind bij 2:1 video's. Je moet de app opnieuw opstarten om dit te activeren.";
|
||||||
|
|
||||||
|
"REPLACE_PREVIOUS_NEXT_BUTTON" = "Vervang Volgende en Vorige knoppen";
|
||||||
|
"REPLACE_PREVIOUS_NEXT_BUTTON_DESC" = "Vervang de Vorige en Volgende knoppen met spoelknoppen.";
|
||||||
|
|
||||||
|
"FIX_GOOGLE_SIGNIN" = "Fix Inloggen met Google (Alleen voor TrollStore gebruikers)";
|
||||||
|
"FIX_GOOGLE_SIGNIN_DESC" = "Zet dit aan wanneer je niet kan inloggen met je Google account en je de app hebt geïnstalleerd met Trollstore. Als je in kan loggen laat dit dan met rust. Om dit te activeren moet je de app opnieuw opstarten.";
|
||||||
|
|
||||||
|
"HIDE_PREVIOUS_AND_NEXT_BUTTON" = "Verberg vorige en volgende knoppen";
|
||||||
|
"HIDE_PREVIOUS_AND_NEXT_BUTTON_DESC" = "Verberg de vorige en volgende knop in de video speler.";
|
||||||
|
|
||||||
|
"YT_MINIPLAYER" = "Schakel de Mini Speler in voor alle video's";
|
||||||
|
"YT_MINIPLAYER_DESC" = "Video's voor kinderen bijvoorbeeld.";
|
||||||
|
|
||||||
|
"CAST_CONFIRM" = "Bevestig casten (YTCastConfirm)";
|
||||||
|
"CAST_CONFIRM_DESC" = "Toon een melding na het drukken op de cast knop om te voorkomen dat je per ongeluk cast.";
|
||||||
|
|
||||||
|
"HIDE_HOVER_CARD" = "Verberg eind scherm hover cards (YTNoHoverCards)";
|
||||||
|
"HIDE_HOVER_CARD_DESC" = "Verberg eind schermen (thumbnails) aan het einde van video's.";
|
||||||
|
|
||||||
|
"NEW_MINIPLAYER_STYLE" = "Nieuwe Mini Speler stijl (BigYTMiniPlayer)";
|
||||||
|
"NEW_MINIPLAYER_STYLE_DESC" = "Je moet de app opnieuw opstarten om dit te activeren.";
|
||||||
|
|
||||||
|
"YT_RE_EXPLORE" = "Vervang Shorts met Ontdekken (YTReExplore)";
|
||||||
|
"YT_RE_EXPLORE_DESC" = "Je moet de app opnieuw opstarten om dit te activeren.";
|
||||||
|
|
||||||
|
"HIDE_SUBTITLES_BUTTON" = "Verberg ondertitels knop";
|
||||||
|
"HIDE_SUBTITLES_BUTTON_DESC" = "Verberg de ondertitels knop in de video speler.";
|
||||||
|
|
||||||
|
"HIDE_AUTOPLAY_SWITCH" = "Verberg Autoplay schakelaar";
|
||||||
|
"HIDE_AUTOPLAY_SWITCH_DESC" = "Verberg de Autoplay schakelaar in de video speler.";
|
||||||
|
|
||||||
|
"AUTO_FULLSCREEN" = "Auto Volledig Scherm (YTAutoFullScreen)";
|
||||||
|
"AUTO_FULLSCREEN_DESC" = "Automatisch volledig scherm wanneer je een video aan klikt.";
|
||||||
|
|
||||||
|
"HIDE_HUD_MESSAGES" = "Verberg HUD Berichten";
|
||||||
|
"HIDE_HUD_MESSAGES_DESC" = "Bijvoorbeeld: CC is ingeschakeld/uitgeschakeld, Video lus is ingeschakeld,...";
|
||||||
|
|
||||||
|
"OLED_DARKMODE" = "OLED Donkere Stand (Experimenteel)";
|
||||||
|
"OLED_DARKMODE_DESC" = "Werkt mogelijk niet correct in sommige gevallen. Je moet de app opnieuw opstarten om dit te activeren.";
|
||||||
|
|
||||||
|
"OLED_KEYBOARD" = "OLED Toetsenbord (Experimenteel)";
|
||||||
|
"OLED_KEYBOARD_DESC" = "Werkt mogelijk niet correct in sommige gevallen. Je moet de app opnieuw opstarten om dit te activeren.";
|
||||||
|
|
||||||
|
"HIDE_PAID_PROMOTION_CARDS" = "Verberg Betaalde Promoties";
|
||||||
|
"HIDE_PAID_PROMOTION_CARDS_DESC" = "Verberg de 'Bevat Betaalde Promotie' in sommige video's.";
|
||||||
|
|
||||||
|
// YTCastConfirm
|
||||||
|
"CASTING" = "Castings";
|
||||||
|
"MSG_ARE_YOU_SURE" = "Weet je zeker dat je wilt casten?";
|
||||||
|
"MSG_YES" = "Ja!";
|
||||||
|
"MSG_CANCEL" = "Niet casten!";
|
||||||
@@ -0,0 +1,57 @@
|
|||||||
|
// Settings
|
||||||
|
"VERSION" = "uYouPlus's version: %@";
|
||||||
|
"VERSION_CHECK" = "Tap to check for update!";
|
||||||
|
|
||||||
|
"DONT_EAT_MY_CONTENT" = "Zapobiega przeszkadzaniu Notcha/Island na filmach o proporcjach 2:1 (DontEatMyContent)";
|
||||||
|
"DONT_EAT_MY_CONTENT_DESC" = "Zapobiega notcha/Dynamic Island przed jedzeniem filmów o proporcjach 2:1 na YouTubie. Restart aplikacji jest wymagany.";
|
||||||
|
|
||||||
|
"REPLACE_PREVIOUS_NEXT_BUTTON" = "Zamień przyciski Poprzedni i Następny";
|
||||||
|
"REPLACE_PREVIOUS_NEXT_BUTTON_DESC" = "Zamienia przyciski Poprzedni i Następny z przyciskami Przewiń w przód i tył. Restart aplikacji jest wymagany.";
|
||||||
|
|
||||||
|
"FIX_GOOGLE_SIGNIN" = "Napraw logowanie się z Google (tylko dla użytkowników TrollStore)";
|
||||||
|
"FIX_GOOGLE_SIGNIN_DESC" = "Włącz tą opcję tylko wtedy, kiedy nie możesz zalogować się swoim kontem Google, a aplikacja została zainstalowana przez TrollStore. Jeżeli da się zalogować normalnie, zostaw to wyłączone. Restart aplikacji jest wymagany.";
|
||||||
|
|
||||||
|
"HIDE_PREVIOUS_AND_NEXT_BUTTON" = "Ukryj przyciski Poprzedni i Następny";
|
||||||
|
"HIDE_PREVIOUS_AND_NEXT_BUTTON_DESC" = "Ukryj przyciski Poprzedni i Następny w okładce sterowania filmu.";
|
||||||
|
|
||||||
|
"YT_MINIPLAYER" = "Włącz miniodtwarzach dla wszystkich filmów";
|
||||||
|
"YT_MINIPLAYER_DESC" = "Np. filmów dla dzieci.";
|
||||||
|
|
||||||
|
"CAST_CONFIRM" = "Alert przed przesyłaniem (YTCastConfirm)";
|
||||||
|
"CAST_CONFIRM_DESC" = "Pokaż alert przed przesyłaniem aby nie łączyć się przez przypadek z telewizorem.";
|
||||||
|
|
||||||
|
"HIDE_HOVER_CARD" = "Ukryj ekrany końcowe (YTNoHoverCards)";
|
||||||
|
"HIDE_HOVER_CARD_DESC" = "Ukryj ekrany końcowe (miniaturki) na końcu filmów.";
|
||||||
|
|
||||||
|
"NEW_MINIPLAYER_STYLE" = "Nowy styl miniodtwarzacza (BigYTMiniPlayer)";
|
||||||
|
"NEW_MINIPLAYER_STYLE_DESC" = "Restart aplikacji jest wymagany.";
|
||||||
|
|
||||||
|
"YT_RE_EXPLORE" = "Zamień kartę Shorts na kartę Odkrywaj (YTReExplore)";
|
||||||
|
"YT_RE_EXPLORE_DESC" = "Restart aplikacji jest wymagany.";
|
||||||
|
|
||||||
|
"HIDE_SUBTITLES_BUTTON" = "Ukryj przycisk Napisy";
|
||||||
|
"HIDE_SUBTITLES_BUTTON_DESC" = "Ukrywa przycisk Napisy w okładce odtwarzacza filmów.";
|
||||||
|
|
||||||
|
"HIDE_AUTOPLAY_SWITCH" = "Ukryj przycisk Autoodtwarzanie";
|
||||||
|
"HIDE_AUTOPLAY_SWITCH_DESC" = "Ukrywa przycisk Autoodtwarzanie w okładce odtwarzacza filmów.";
|
||||||
|
|
||||||
|
"AUTO_FULLSCREEN" = "Auto pełny ekran (YTAutoFullScreen)";
|
||||||
|
"AUTO_FULLSCREEN_DESC" = "Automaczycznie otwórz filmy w pełnym ekranie.";
|
||||||
|
|
||||||
|
"HIDE_HUD_MESSAGES" = "Ukryj komunikaty HUD";
|
||||||
|
"HIDE_HUD_MESSAGES_DESC" = "Np. Napisy są wył/wł, Odtwarzanie w pętli jest włączone, ...";
|
||||||
|
|
||||||
|
"OLED_DARKMODE" = "Tryb ciemny OLED (Eksperymentalny)";
|
||||||
|
"OLED_DARKMODE_DESC" = "Może w niektórych przypadkach nie działać. Restart aplikacji jest wymagany.";
|
||||||
|
|
||||||
|
"OLED_KEYBOARD" = "Klawiatura OLED (Eksperymentalna)";
|
||||||
|
"OLED_KEYBOARD_DESC" = "Może w niektórych przypadkach nie działać. Restart aplikacji jest wymagany.";
|
||||||
|
|
||||||
|
"HIDE_PAID_PROMOTION_CARDS" = "Ukryj baner płatnej promocji";
|
||||||
|
"HIDE_PAID_PROMOTION_CARDS_DESC" = "Ukrywa baner 'Zawiera płatną promocję' w niektórych filmach.";
|
||||||
|
|
||||||
|
// YTCastConfirm
|
||||||
|
"CASTING" = "Przesyłania";
|
||||||
|
"MSG_ARE_YOU_SURE" = "Czy na pewno chcesz przesyłać?";
|
||||||
|
"MSG_YES" = "Tak";
|
||||||
|
"MSG_CANCEL" = "Anuluj";
|
||||||
@@ -0,0 +1,57 @@
|
|||||||
|
// 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.";
|
||||||
|
|
||||||
|
"FIX_GOOGLE_SIGNIN" = "Corrigir o login do Google (somente para usuários da TrollStore)";
|
||||||
|
"FIX_GOOGLE_SIGNIN_DESC" = "Ative esta opção somente quando você não conseguir fazer login com sua conta do Google e o aplicativo foi instalado via TrollStore. Se você conseguir fazer login normalmente, mantenha-o desativado. A reinicialização do app é necessária.";
|
||||||
|
|
||||||
|
"HIDE_PREVIOUS_AND_NEXT_BUTTON" = "Ocultar botão Anterior e Próximo";
|
||||||
|
"HIDE_PREVIOUS_AND_NEXT_BUTTON_DESC" = "Oculta o botão Anterior e Próximo na sobreposição de controles de vídeo.";
|
||||||
|
|
||||||
|
"YT_MINIPLAYER" = "Ative o Miniplayer para todos os vídeos do YouTube";
|
||||||
|
"YT_MINIPLAYER_DESC" = "Vídeos infantis, por exemplo.";
|
||||||
|
|
||||||
|
"CAST_CONFIRM" = "Alerta de confirmação antes de transmitir (YTCastConfirm)";
|
||||||
|
"CAST_CONFIRM_DESC" = "Mostra um alerta de confirmação antes da transmissão para evitar o sequestro acidental da TV.";
|
||||||
|
|
||||||
|
"HIDE_HOVER_CARD" = "Ocultar Cartões flutuantes de telas finais (YTNoHoverCards)";
|
||||||
|
"HIDE_HOVER_CARD_DESC" = "Oculta telas finais do criador (miniaturas) no final dos vídeos.";
|
||||||
|
|
||||||
|
"NEW_MINIPLAYER_STYLE" = "Novo estilo de barra de miniplayer (BigYTMiniPlayer)";
|
||||||
|
"NEW_MINIPLAYER_STYLE_DESC" = "A reinicialização do app é necessária.";
|
||||||
|
|
||||||
|
"YT_RE_EXPLORE" = "Substituir a guia Shorts pela guia Explorar (YTReExplore)";
|
||||||
|
"YT_RE_EXPLORE_DESC" = "A reinicialização do app é necessária.";
|
||||||
|
|
||||||
|
"HIDE_SUBTITLES_BUTTON" = "Ocultar botão de Legendas";
|
||||||
|
"HIDE_SUBTITLES_BUTTON_DESC" = "Oculta o botão de Legendas na sobreposição de controles de vídeo.";
|
||||||
|
|
||||||
|
"HIDE_AUTOPLAY_SWITCH" = "Ocultar interruptor de Reprodução automática";
|
||||||
|
"HIDE_AUTOPLAY_SWITCH_DESC" = "Oculta o interruptor de Reprodução automática na sobreposição de controles de vídeo.";
|
||||||
|
|
||||||
|
"AUTO_FULLSCREEN" = "Tela cheia automática (YTAutoFullScreen)";
|
||||||
|
"AUTO_FULLSCREEN_DESC" = "Reproduz videos em tela cheia automaticamente.";
|
||||||
|
|
||||||
|
"HIDE_HUD_MESSAGES" = "Ocultar Mensagens do HUD";
|
||||||
|
"HIDE_HUD_MESSAGES_DESC" = "Exemplo: Legendas/CC ativadas/desativadas, A repetição do vídeo está ativada,...";
|
||||||
|
|
||||||
|
"OLED_DARKMODE" = "Modo escuro OLED (Experimental)";
|
||||||
|
"OLED_DARKMODE_DESC" = "Pode não funcionar corretamente em alguns casos. A reinicialização do app é necessária após você ativar/desativar essa opção.";
|
||||||
|
|
||||||
|
"OLED_KEYBOARD" = "Teclado OLED (Experimental)";
|
||||||
|
"OLED_KEYBOARD_DESC" = "Pode não funcionar corretamente em alguns casos. A reinicialização do app é necessária.";
|
||||||
|
|
||||||
|
"HIDE_PAID_PROMOTION_CARDS" = "Ocultar Banner de promoção paga";
|
||||||
|
"HIDE_PAID_PROMOTION_CARDS_DESC" = "Oculta o banner 'Contém promoção paga' em alguns vídeos.";
|
||||||
|
|
||||||
|
// YTCastConfirm
|
||||||
|
"CASTING" = "Transmissão";
|
||||||
|
"MSG_ARE_YOU_SURE" = "Tem certeza de que deseja começar a transmitir?";
|
||||||
|
"MSG_YES" = "Sim";
|
||||||
|
"MSG_CANCEL" = "Cancelar";
|
||||||
@@ -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,6 +1,17 @@
|
|||||||
/* uYouPlusSettings */
|
/* uYouPlusSettings */
|
||||||
|
"VERSION" = "Версия uYouPlus: %@";
|
||||||
|
"VERSION_CHECK" = "Нажмите, чтобы проверить доступные обновления.";
|
||||||
|
|
||||||
"HIDE_PREVIOUS_AND_NEXT_BUTTON" = "Скрыть «Пред.» и «След.»";
|
"DONT_EAT_MY_CONTENT" = "Запретить обрезку контента (DontEatMyContent)";
|
||||||
|
"DONT_EAT_MY_CONTENT_DESC" = "Запрещает обрезать контент с соотношением сторон 2:1 на устройствах с вырезом. Потребуется перезагрузка.";
|
||||||
|
|
||||||
|
"REPLACE_PREVIOUS_NEXT_BUTTON" = "Кнопки перемотки вместо «Пред.» и «След.»";
|
||||||
|
"REPLACE_PREVIOUS_NEXT_BUTTON_DESC" = "Заменяет переключатели «Следующий» и «Предыдущий» на кнопки перемотки на 10 сек. Потребуется перезагрузка.";
|
||||||
|
|
||||||
|
"FIX_GOOGLE_SIGNIN" = "Исправить авторизацию (TrollStore)";
|
||||||
|
"FIX_GOOGLE_SIGNIN_DESC" = "Включите данную опцию только не можете войти в учетную запись Google, а приложение установлено через TrollStore. Если удается авторизоваться как обычно, оставьте данную опцию отключенной. Потребуется перезагрузка.";
|
||||||
|
|
||||||
|
"HIDE_PREVIOUS_AND_NEXT_BUTTON" = "Скрыть «След.» и «Пред.»";
|
||||||
"HIDE_PREVIOUS_AND_NEXT_BUTTON_DESC" = "Убирает кнопки переключения видео «Следующий» и «Предыдущий» с плеера.";
|
"HIDE_PREVIOUS_AND_NEXT_BUTTON_DESC" = "Убирает кнопки переключения видео «Следующий» и «Предыдущий» с плеера.";
|
||||||
|
|
||||||
"YT_MINIPLAYER" = "Мини-плеер для всех видео";
|
"YT_MINIPLAYER" = "Мини-плеер для всех видео";
|
||||||
|
|||||||
@@ -1,53 +1,72 @@
|
|||||||
// How to translate uYouPlus to your languate:
|
/* 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
|
2. Duplicate the template.lproj folder, and edit the duplicated folder's name to your <lang_code>.lproj id.
|
||||||
// for Russia. For more details, visit: https://en.wikipedia.org/wiki/List_of_ISO_3166_country_codes
|
For example: <ru.lproj> for Russia. For more details, visit: https://en.wikipedia.org/wiki/List_of_ISO_639-1_codes
|
||||||
// 3. Translate each line below after each =
|
3. Translate each line below after each =
|
||||||
// 4. Open a Pull Request
|
4. Open a Pull Request
|
||||||
//
|
|
||||||
// If your language already exists then feel free to check it and/or improve it!
|
|
||||||
//
|
|
||||||
// Settings
|
|
||||||
|
|
||||||
"HIDE_PREVIOUS_AND_NEXT_BUTTON" = "Hide Previous and Next button";
|
- You can also add your localization to YTABConfig, YouPiP, YTUHD, and Return YouTube Dislike. The process is the same:
|
||||||
"HIDE_PREVIOUS_AND_NEXT_BUTTON_DESC" = "Hide Previous and Next button in video controls overlay.";
|
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
|
||||||
|
*/
|
||||||
|
|
||||||
"YT_MINIPLAYER" = "Enable the Miniplayer for all YouTube videos";
|
// Settings
|
||||||
"YT_MINIPLAYER_DESC" = "Kid videos for example.";
|
"VERSION" = "uYouPlus's version: %@";
|
||||||
|
"VERSION_CHECK" = "Tap to check for updates!";
|
||||||
|
|
||||||
"CAST_CONFIRM" = "Confirm alert before casting (YTCastConfirm)";
|
"DONT_EAT_MY_CONTENT" = "Prevent Notch/Island on 2:1 Video Content (DontEatMyContent)";
|
||||||
"CAST_CONFIRM_DESC" = "Show a confirm alert before casting to prevent accidentally hijacking TV.";
|
"DONT_EAT_MY_CONTENT_DESC" = "Prevent the notch/Dynamic Island from munching on 2:1 video content in YouTube. App restart is required.";
|
||||||
|
|
||||||
"HIDE_HOVER_CARD" = "Hide End screens hover cards (YTNoHoverCards)";
|
"REPLACE_PREVIOUS_NEXT_BUTTON" = "Replace Previous and Next button";
|
||||||
"HIDE_HOVER_CARD_DESC" = "Hide creator End screens (thumbnails) at the end of videos.";
|
"REPLACE_PREVIOUS_NEXT_BUTTON_DESC" = "Replace the Previous and Next button with the Fast forward and Rewind button. App restart is required.";
|
||||||
|
|
||||||
"NEW_MINIPLAYER_STYLE" = "New miniplayer bar style (BigYTMiniPlayer)";
|
"FIX_GOOGLE_SIGNIN" = "Fix Google Sign in (for TrollStore user only)";
|
||||||
"NEW_MINIPLAYER_STYLE_DESC" = "App restart is required.";
|
"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.";
|
||||||
|
|
||||||
"YT_RE_EXPLORE" = "Replace Shorts tab with Explore tab (YTReExplore)";
|
"HIDE_PREVIOUS_AND_NEXT_BUTTON" = "Hide Previous and Next button";
|
||||||
"YT_RE_EXPLORE_DESC" = "App restart is required.";
|
"HIDE_PREVIOUS_AND_NEXT_BUTTON_DESC" = "Hide the Previous and Next button in video controls overlay.";
|
||||||
|
|
||||||
"HIDE_SUBTITLES_BUTTON" = "Hide Subtitles button";
|
"YT_MINIPLAYER" = "Enable the mini player for all YouTube videos";
|
||||||
"HIDE_SUBTITLES_BUTTON_DESC" = "Hide the Subtitles button in video controls overlay.";
|
"YT_MINIPLAYER_DESC" = "Kid videos for example.";
|
||||||
|
|
||||||
"HIDE_AUTOPLAY_SWITCH" = "Hide Autoplay switch";
|
"CAST_CONFIRM" = "Confirm alert before casting (YTCastConfirm)";
|
||||||
"HIDE_AUTOPLAY_SWITCH_DESC" = "Hide the Autoplay switch in video controls overlay.";
|
"CAST_CONFIRM_DESC" = "Show a confirm alert before casting to prevent accidentally hijacking TV.";
|
||||||
|
|
||||||
"AUTO_FULLSCREEN" = "Auto Full Screen (YTAutoFullScreen)";
|
"HIDE_HOVER_CARD" = "Hide End screens hover cards (YTNoHoverCards)";
|
||||||
"AUTO_FULLSCREEN_DESC" = "Autoplay videos at full screen.";
|
"HIDE_HOVER_CARD_DESC" = "Hide the creator End screens (thumbnails) at the end of videos.";
|
||||||
|
|
||||||
"HIDE_HUD_MESSAGES" = "Hide HUD Messages";
|
"NEW_MINIPLAYER_STYLE" = "New mini player bar style (BigYTMiniPlayer)";
|
||||||
"HIDE_HUD_MESSAGES_DESC" = "Example: CC is turned on/off, Video loop is on,...";
|
"NEW_MINIPLAYER_STYLE_DESC" = "App restart is required.";
|
||||||
|
|
||||||
"OLED_DARKMODE" = "OLED Dark mode (Experimental)";
|
"YT_RE_EXPLORE" = "Replace Shorts tab with Explore tab (YTReExplore)";
|
||||||
"OLED_DARKMODE_DESC" = "Might not working correctly in some cases. App restart is required after you enable/disable this option.";
|
"YT_RE_EXPLORE_DESC" = "App restart is required.";
|
||||||
|
|
||||||
"OLED_KEYBOARD" = "OLED Keyboard (Experimental)";
|
"HIDE_SUBTITLES_BUTTON" = "Hide Subtitles button";
|
||||||
"OLED_KEYBOARD_DESC" = "Might not working correctly in some cases. App restart is required.";
|
"HIDE_SUBTITLES_BUTTON_DESC" = "Hide the Subtitles button in video controls overlay.";
|
||||||
|
|
||||||
// YTCastConfirm
|
"HIDE_AUTOPLAY_SWITCH" = "Hide Autoplay switch";
|
||||||
"CASTING" = "Castings";
|
"HIDE_AUTOPLAY_SWITCH_DESC" = "Hide the Autoplay switch in video controls overlay.";
|
||||||
"MSG_ARE_YOU_SURE" = "Are you sure you want to start casting?";
|
|
||||||
"MSG_YES" = "Yes";
|
"AUTO_FULLSCREEN" = "Auto Full Screen (YTAutoFullScreen)";
|
||||||
"MSG_CANCEL" = "Cancel";
|
"AUTO_FULLSCREEN_DESC" = "Autoplay videos at full screen.";
|
||||||
|
|
||||||
|
"HIDE_HUD_MESSAGES" = "Hide HUD Messages";
|
||||||
|
"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 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 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.";
|
||||||
|
|
||||||
|
// YTCastConfirm
|
||||||
|
"CASTING" = "Castings";
|
||||||
|
"MSG_ARE_YOU_SURE" = "Are you sure you want to start casting?";
|
||||||
|
"MSG_YES" = "Yes";
|
||||||
|
"MSG_CANCEL" = "Cancel";
|
||||||
|
|||||||
@@ -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,16 +1,27 @@
|
|||||||
// Settings
|
// 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.";
|
||||||
|
|
||||||
|
"REPLACE_PREVIOUS_NEXT_BUTTON" = "Thay thế nút chuyển video";
|
||||||
|
"REPLACE_PREVIOUS_NEXT_BUTTON_DESC" = "Thay thế nút chuyển video bằng nút tua nhanh. Cần khởi động lại ứng dụng.";
|
||||||
|
|
||||||
|
"FIX_GOOGLE_SIGNIN" = "Sửa lỗi không thể đăng nhập tài khoản Google";
|
||||||
|
"FIX_GOOGLE_SIGNIN_DESC" = "Chỉ bật tính năng này khi bạn không thể đăng nhập tài khoản Google và ứng dụng được cài qua TrollStore. Nếu bạn có thể đăng nhập bình thường thì hãy tắt tính năng này. Cần khởi động lại ứng dụng.";
|
||||||
|
|
||||||
"HIDE_PREVIOUS_AND_NEXT_BUTTON" = "Ẩn nút Next và nút Previous";
|
"HIDE_PREVIOUS_AND_NEXT_BUTTON" = "Ẩn nút Next và nút Previous";
|
||||||
"HIDE_PREVIOUS_AND_NEXT_BUTTON_DESC" = "Ẩn nút Next và nút Previous trong trình phát video.";
|
"HIDE_PREVIOUS_AND_NEXT_BUTTON_DESC" = "Ẩn nút Next và nút Previous trong trình phát video.";
|
||||||
|
|
||||||
"YT_MINIPLAYER" = "Cho phép trình phát thu nhỏ chạy với mọi video";
|
"YT_MINIPLAYER" = "Cho phép sử dụng trình phát thu nhỏ với mọi video";
|
||||||
"YT_MINIPLAYER_DESC" = "Ví dụ: Video cho trẻ em.";
|
"YT_MINIPLAYER_DESC" = "Ví dụ: Video cho trẻ em.";
|
||||||
|
|
||||||
"CAST_CONFIRM" = "Xác nhận trước khi cast video (YTCastConfirm)";
|
"CAST_CONFIRM" = "Xác nhận trước khi cast video (YTCastConfirm)";
|
||||||
"CAST_CONFIRM_DESC" = "Hiện hộp thoại xác nhận trước khi cast video sang TV để ngăn việc vô tình làm gián đoạn TV.";
|
"CAST_CONFIRM_DESC" = "Hiện hộp thoại xác nhận trước khi cast video sang TV để tránh vô tình chiếm quyền điều khiển TV.";
|
||||||
|
|
||||||
"HIDE_HOVER_CARD" = "Ẩn video dạng thumbnails (YTNoHoverCards)";
|
"HIDE_HOVER_CARD" = "Ẩn video dạng thumbnails (YTNoHoverCards)";
|
||||||
"HIDE_HOVER_CARD_DESC" = "Ẩn các video dạng thu nhỏ (thumbnails) xuất hiện ở gần cuối video.";
|
"HIDE_HOVER_CARD_DESC" = "Ẩn thumbnail của các video đề xuất xuất hiện ở cuối video.";
|
||||||
|
|
||||||
"NEW_MINIPLAYER_STYLE" = "Giao diện trình phát thu nhỏ kiểu mới (BigYTMiniPlayer)";
|
"NEW_MINIPLAYER_STYLE" = "Giao diện trình phát thu nhỏ kiểu mới (BigYTMiniPlayer)";
|
||||||
"NEW_MINIPLAYER_STYLE_DESC" = "Cần khởi động lại ứng dụng.";
|
"NEW_MINIPLAYER_STYLE_DESC" = "Cần khởi động lại ứng dụng.";
|
||||||
@@ -21,23 +32,26 @@
|
|||||||
"HIDE_SUBTITLES_BUTTON" = "Ẩn nút bật Phụ đề";
|
"HIDE_SUBTITLES_BUTTON" = "Ẩn nút bật Phụ đề";
|
||||||
"HIDE_SUBTITLES_BUTTON_DESC" = "Ẩn nút bật phụ đề trong trình phát video.";
|
"HIDE_SUBTITLES_BUTTON_DESC" = "Ẩn nút bật phụ đề trong trình phát video.";
|
||||||
|
|
||||||
"HIDE_AUTOPLAY_SWITCH" = "Ẩn công tắc Tự động phát";
|
"HIDE_AUTOPLAY_SWITCH" = "Ẩn nút Tự động phát";
|
||||||
"HIDE_AUTOPLAY_SWITCH_DESC" = "Ẩn công tắc Tự động phát trong trình phát video.";
|
"HIDE_AUTOPLAY_SWITCH_DESC" = "Ẩn nút Tự động phát trong trình phát video.";
|
||||||
|
|
||||||
"AUTO_FULLSCREEN" = "Tự động toàn màn hình (YTAutoFullScreen)";
|
"AUTO_FULLSCREEN" = "Tự động toàn màn hình (YTAutoFullScreen)";
|
||||||
"AUTO_FULLSCREEN_DESC" = "Tự động phát video ở chế độ toàn màn hình.";
|
"AUTO_FULLSCREEN_DESC" = "Tự động phát video ở chế độ toàn màn hình.";
|
||||||
|
|
||||||
"HIDE_HUD_MESSAGES" = "Ẩn tin nhắn HUD";
|
"HIDE_HUD_MESSAGES" = "Ẩn thông báo HUD";
|
||||||
"HIDE_HUD_MESSAGES_DESC" = "Ví dụ: Đã bật/tắt phụ đề, Tính năng phát video lặp lại đang bật,...";
|
"HIDE_HUD_MESSAGES_DESC" = "Ví dụ: Đã bật/tắt phụ đề, Tính năng phát video lặp lại đang bật,...";
|
||||||
|
|
||||||
"OLED_DARKMODE" = "Chế độ tối OLED (Thử nghiệm)";
|
"OLED_DARKMODE" = "Chế độ tối cho màn OLED (Thử nghiệm)";
|
||||||
"OLED_DARKMODE_DESC" = "Cần khởi động lại ứng dụng nếu bạn bật/tắt tính năng này, nhưng không cần khởi động lại ứng dụng nếu chuyển giữa chế độ Sáng và chế độ Tối.";
|
"OLED_DARKMODE_DESC" = "Có thể không hoạt động tốt trong một số trường hợp. Cần khởi động lại ứng dụng nếu bạn bật/tắt tính năng này, nhưng không cần khởi động lại ứng dụng nếu chuyển giữa chế độ Sáng và chế độ Tối.";
|
||||||
|
|
||||||
"OLED_KEYBOARD" = "Bàn phím OLED (Thử nghiệm)";
|
"OLED_KEYBOARD" = "Bàn phím tối cho màn OLED (Thử nghiệm)";
|
||||||
"OLED_KEYBOARD_DESC" = "Tính năng này có thể không hoạt động tốt trong một vài trường hợp. Cần khởi động lại ứng dụng.";
|
"OLED_KEYBOARD_DESC" = "Có thể không hoạt động tốt trong một vài trường hợp. Cần khởi động lại ứng dụng.";
|
||||||
|
|
||||||
|
"HIDE_PAID_PROMOTION_CARDS" = "Ẩn banner quảng cáo được trả tiền";
|
||||||
|
"HIDE_PAID_PROMOTION_CARDS_DESC" = "Ẩn banner 'Chứa nội dung được trả tiền để quảng cáo' trong một số video.";
|
||||||
|
|
||||||
// YTCastConfirm
|
// YTCastConfirm
|
||||||
"CASTING" = "Truyền video";
|
"CASTING" = "Truyền video";
|
||||||
"MSG_ARE_YOU_SURE" = "Bạn có muốn bắt đầu truyền video không?";
|
"MSG_ARE_YOU_SURE" = "Bạn có muốn bắt đầu truyền video không?";
|
||||||
"MSG_YES" = "Có";
|
"MSG_YES" = "Có";
|
||||||
"MSG_CANCEL" = "Không";
|
"MSG_CANCEL" = "Không";
|
||||||
|
|||||||
@@ -0,0 +1,61 @@
|
|||||||
|
// Settings
|
||||||
|
|
||||||
|
"VERSION" = "当前uYouPlus插件版本:%@";
|
||||||
|
"VERSION_CHECK" = "点击此处检查更新!";
|
||||||
|
|
||||||
|
"DONT_EAT_MY_CONTENT" = "2:1视频刘海屏/灵动岛优化 (DontEatMyContent)";
|
||||||
|
"DONT_EAT_MY_CONTENT_DESC" = "改进部分机型的刘海区域或灵动岛在2:1比例视频中引发的遮挡问题(缺口)。更改本设置后需要重启App。";
|
||||||
|
|
||||||
|
"REPLACE_PREVIOUS_NEXT_BUTTON" = "替换上一个/下一个按钮";
|
||||||
|
"REPLACE_PREVIOUS_NEXT_BUTTON_DESC" = "将视频播放器控制界面上的上一个/下一个按钮替换成快进/快退按钮。更改本设置后需要重启App。";
|
||||||
|
|
||||||
|
"FIX_GOOGLE_SIGNIN" = "修复Google账号登录问题(仅TrollStore用户有效)";
|
||||||
|
"FIX_GOOGLE_SIGNIN_DESC" = "仅在使用TrollStore安装本App的情况下生效:启用本设置后即可正常登录您的Google账号。更改本设置后需要重启App。";
|
||||||
|
|
||||||
|
"KILL_APP" = "关闭YouTube";
|
||||||
|
"KILL_APP_DESC" = "点击此处关闭YouTube!";
|
||||||
|
|
||||||
|
"HIDE_PREVIOUS_AND_NEXT_BUTTON" = "隐藏上一个/下一个按钮";
|
||||||
|
"HIDE_PREVIOUS_AND_NEXT_BUTTON_DESC" = "隐藏视频播放器控制界面上的上一个/下一个按钮。";
|
||||||
|
|
||||||
|
"YT_MINIPLAYER" = "为所有YouTube视频启用迷你播放器";
|
||||||
|
"YT_MINIPLAYER_DESC" = "例如:面向儿童的视频。";
|
||||||
|
|
||||||
|
"CAST_CONFIRM" = "投屏前确认 (YTCastConfirm)";
|
||||||
|
"CAST_CONFIRM_DESC" = "在投屏前显示确认对话框以防意外劫屏。";
|
||||||
|
|
||||||
|
"HIDE_HOVER_CARD" = "隐藏片尾画面悬浮卡片 (YTNoHoverCards)";
|
||||||
|
"HIDE_HOVER_CARD_DESC" = "隐藏视频结尾处的创作者片尾画面元素(缩略图)。";
|
||||||
|
|
||||||
|
"NEW_MINIPLAYER_STYLE" = "新迷你播放器风格 (BigYTMiniPlayer)";
|
||||||
|
"NEW_MINIPLAYER_STYLE_DESC" = "更改本设置后需要重启App。";
|
||||||
|
|
||||||
|
"YT_RE_EXPLORE" = "将Shorts选项卡替换成探索选项卡 (YTReExplore)";
|
||||||
|
"YT_RE_EXPLORE_DESC" = "更改本设置后需要重启App。";
|
||||||
|
|
||||||
|
"HIDE_SUBTITLES_BUTTON" = "隐藏字幕按钮";
|
||||||
|
"HIDE_SUBTITLES_BUTTON_DESC" = "隐藏视频播放器控制界面上的字幕按钮。";
|
||||||
|
|
||||||
|
"HIDE_AUTOPLAY_SWITCH" = "隐藏自动播放模式开关";
|
||||||
|
"HIDE_AUTOPLAY_SWITCH_DESC" = "隐藏视频播放器控制界面上的自动播放开关。";
|
||||||
|
|
||||||
|
"AUTO_FULLSCREEN" = "自动全屏 (YTAutoFullScreen)";
|
||||||
|
"AUTO_FULLSCREEN_DESC" = "自动全屏播放视频。";
|
||||||
|
|
||||||
|
"HIDE_HUD_MESSAGES" = "隐藏系统提醒";
|
||||||
|
"HIDE_HUD_MESSAGES_DESC" = "例如:“已启用/停用字幕”、“已开启/关闭视频循环播放”等。";
|
||||||
|
|
||||||
|
"OLED_DARKMODE" = "OLED 深色模式(实验性功能)";
|
||||||
|
"OLED_DARKMODE_DESC" = "在某些情况下可能不会正常工作。更改本设置后需要重启App。";
|
||||||
|
|
||||||
|
"OLED_KEYBOARD" = "OLED 键盘(实验性功能)";
|
||||||
|
"OLED_KEYBOARD_DESC" = "在某些情况下可能不会正常工作。更改本设置后需要重启App。";
|
||||||
|
|
||||||
|
"HIDE_PAID_PROMOTION_CARDS" = "隐藏付费宣传内容提醒横幅";
|
||||||
|
"HIDE_PAID_PROMOTION_CARDS_DESC" = "隐藏出现在部分视频中的“包含付费宣传内容”横幅。";
|
||||||
|
|
||||||
|
// YTCastConfirm
|
||||||
|
"CASTING" = "准备投屏";
|
||||||
|
"MSG_ARE_YOU_SURE" = "您确定要开始投屏吗?";
|
||||||
|
"MSG_YES" = "确定";
|
||||||
|
"MSG_CANCEL" = "取消";
|
||||||
@@ -1,4 +1,15 @@
|
|||||||
// Settings
|
// Settings
|
||||||
|
"VERSION" = "您的uYouPlus版本為: %@";
|
||||||
|
"VERSION_CHECK" = "點擊查看最新版本!";
|
||||||
|
|
||||||
|
"DONT_EAT_MY_CONTENT" = "2:1影片瀏海/動態島優化 (DontEatMyContent)";
|
||||||
|
"DONT_EAT_MY_CONTENT_DESC" = "改進部分機型的瀏海區域或動態島在2:1比例影片中引發的遮擋問題。需要重新啟動應用程式。";
|
||||||
|
|
||||||
|
"REPLACE_PREVIOUS_NEXT_BUTTON" = "替換上一個/下一個按鈕";
|
||||||
|
"REPLACE_PREVIOUS_NEXT_BUTTON_DESC" = "將影片播放器控制介面上的上一個/下一個按鈕替換成快進/快退按鈕。需要重新啟動應用程式。";
|
||||||
|
|
||||||
|
"FIX_GOOGLE_SIGNIN" = "修復Google帳號登入問題(僅TrollStore用戶有效)";
|
||||||
|
"FIX_GOOGLE_SIGNIN_DESC" = "僅在使用TrollStore安裝本App的情況下生效:啟用本設置後即可正常登錄您的Google帳號。需要重新啟動應用程式。";
|
||||||
|
|
||||||
"HIDE_PREVIOUS_AND_NEXT_BUTTON" = "隱藏上一個和下一個按鈕";
|
"HIDE_PREVIOUS_AND_NEXT_BUTTON" = "隱藏上一個和下一個按鈕";
|
||||||
"HIDE_PREVIOUS_AND_NEXT_BUTTON_DESC" = "在影片控制層中隱藏上一個和下一個按鈕";
|
"HIDE_PREVIOUS_AND_NEXT_BUTTON_DESC" = "在影片控制層中隱藏上一個和下一個按鈕";
|
||||||
@@ -36,8 +47,11 @@
|
|||||||
"OLED_KEYBOARD" = "OLED 鍵盤(實驗性)";
|
"OLED_KEYBOARD" = "OLED 鍵盤(實驗性)";
|
||||||
"OLED_KEYBOARD_DESC" = "在某些情況下可能無法正常工作。需要重新啟動應用程式。";
|
"OLED_KEYBOARD_DESC" = "在某些情況下可能無法正常工作。需要重新啟動應用程式。";
|
||||||
|
|
||||||
|
"HIDE_PAID_PROMOTION_CARDS" = "隱藏付費促銷橫幅";
|
||||||
|
"HIDE_PAID_PROMOTION_CARDS_DESC" = "在某些影片中隱藏“包括付費促銷”橫幅。";
|
||||||
|
|
||||||
// YTCastConfirm
|
// YTCastConfirm
|
||||||
"CASTING" = "投放中";
|
"CASTING" = "投放中";
|
||||||
"MSG_ARE_YOU_SURE" = "確定要開始投放嗎?";
|
"MSG_ARE_YOU_SURE" = "確定要開始投放嗎?";
|
||||||
"MSG_YES" = "是";
|
"MSG_YES" = "確定";
|
||||||
"MSG_CANCEL" = "取消";
|
"MSG_CANCEL" = "取消";
|
||||||
|
|||||||
+638
-98
@@ -2,6 +2,8 @@
|
|||||||
#import <Foundation/Foundation.h>
|
#import <Foundation/Foundation.h>
|
||||||
#import <objc/runtime.h>
|
#import <objc/runtime.h>
|
||||||
#import <dlfcn.h>
|
#import <dlfcn.h>
|
||||||
|
#import <sys/utsname.h>
|
||||||
|
#import <substrate.h>
|
||||||
#import "Header.h"
|
#import "Header.h"
|
||||||
#import "Tweaks/YouTubeHeader/YTVideoQualitySwitchOriginalController.h"
|
#import "Tweaks/YouTubeHeader/YTVideoQualitySwitchOriginalController.h"
|
||||||
#import "Tweaks/YouTubeHeader/YTPlayerViewController.h"
|
#import "Tweaks/YouTubeHeader/YTPlayerViewController.h"
|
||||||
@@ -13,6 +15,11 @@
|
|||||||
#import "Tweaks/YouTubeHeader/YTIBrowseRequest.h"
|
#import "Tweaks/YouTubeHeader/YTIBrowseRequest.h"
|
||||||
#import "Tweaks/YouTubeHeader/YTCommonColorPalette.h"
|
#import "Tweaks/YouTubeHeader/YTCommonColorPalette.h"
|
||||||
#import "Tweaks/YouTubeHeader/ASCollectionView.h"
|
#import "Tweaks/YouTubeHeader/ASCollectionView.h"
|
||||||
|
#import "Tweaks/YouTubeHeader/YTPlayerOverlay.h"
|
||||||
|
#import "Tweaks/YouTubeHeader/YTPlayerOverlayProvider.h"
|
||||||
|
#import "Tweaks/YouTubeHeader/YTReelWatchPlaybackOverlayView.h"
|
||||||
|
#import "Tweaks/YouTubeHeader/YTReelPlayerBottomButton.h"
|
||||||
|
#import "Tweaks/YouTubeHeader/YTReelPlayerViewController.h"
|
||||||
|
|
||||||
// Tweak's bundle for Localizations support - @PoomSmart - https://github.com/PoomSmart/YouPiP/commit/aea2473f64c75d73cab713e1e2d5d0a77675024f
|
// Tweak's bundle for Localizations support - @PoomSmart - https://github.com/PoomSmart/YouPiP/commit/aea2473f64c75d73cab713e1e2d5d0a77675024f
|
||||||
NSBundle *uYouPlusBundle() {
|
NSBundle *uYouPlusBundle() {
|
||||||
@@ -20,12 +27,37 @@ NSBundle *uYouPlusBundle() {
|
|||||||
static dispatch_once_t onceToken;
|
static dispatch_once_t onceToken;
|
||||||
dispatch_once(&onceToken, ^{
|
dispatch_once(&onceToken, ^{
|
||||||
NSString *tweakBundlePath = [[NSBundle mainBundle] pathForResource:@"uYouPlus" ofType:@"bundle"];
|
NSString *tweakBundlePath = [[NSBundle mainBundle] pathForResource:@"uYouPlus" ofType:@"bundle"];
|
||||||
bundle = [NSBundle bundleWithPath:tweakBundlePath];
|
if (tweakBundlePath)
|
||||||
|
bundle = [NSBundle bundleWithPath:tweakBundlePath];
|
||||||
|
else {
|
||||||
|
bundle = [NSBundle bundleWithPath:@"/Library/Application Support/uYouPlus.bundle"];
|
||||||
|
if (!bundle)
|
||||||
|
bundle = [NSBundle bundleWithPath:@"/var/jb/Library/Application Support/uYouPlus.bundle"];
|
||||||
|
}
|
||||||
});
|
});
|
||||||
return bundle;
|
return bundle;
|
||||||
}
|
}
|
||||||
NSBundle *tweakBundle = uYouPlusBundle();
|
NSBundle *tweakBundle = uYouPlusBundle();
|
||||||
|
|
||||||
|
// Keychain patching
|
||||||
|
static NSString *accessGroupID() {
|
||||||
|
NSDictionary *query = [NSDictionary dictionaryWithObjectsAndKeys:
|
||||||
|
(__bridge NSString *)kSecClassGenericPassword, (__bridge NSString *)kSecClass,
|
||||||
|
@"bundleSeedID", kSecAttrAccount,
|
||||||
|
@"", kSecAttrService,
|
||||||
|
(id)kCFBooleanTrue, kSecReturnAttributes,
|
||||||
|
nil];
|
||||||
|
CFDictionaryRef result = nil;
|
||||||
|
OSStatus status = SecItemCopyMatching((__bridge CFDictionaryRef)query, (CFTypeRef *)&result);
|
||||||
|
if (status == errSecItemNotFound)
|
||||||
|
status = SecItemAdd((__bridge CFDictionaryRef)query, (CFTypeRef *)&result);
|
||||||
|
if (status != errSecSuccess)
|
||||||
|
return nil;
|
||||||
|
NSString *accessGroup = [(__bridge NSDictionary *)result objectForKey:(__bridge NSString *)kSecAttrAccessGroup];
|
||||||
|
|
||||||
|
return accessGroup;
|
||||||
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
BOOL hideHUD() {
|
BOOL hideHUD() {
|
||||||
return [[NSUserDefaults standardUserDefaults] boolForKey:@"hideHUD_enabled"];
|
return [[NSUserDefaults standardUserDefaults] boolForKey:@"hideHUD_enabled"];
|
||||||
@@ -66,8 +98,25 @@ BOOL castConfirm() {
|
|||||||
BOOL ytMiniPlayer() {
|
BOOL ytMiniPlayer() {
|
||||||
return [[NSUserDefaults standardUserDefaults] boolForKey:@"ytMiniPlayer_enabled"];
|
return [[NSUserDefaults standardUserDefaults] boolForKey:@"ytMiniPlayer_enabled"];
|
||||||
}
|
}
|
||||||
|
BOOL hidePaidPromotionCard() {
|
||||||
|
return [[NSUserDefaults standardUserDefaults] boolForKey:@"hidePaidPromotionCard_enabled"];
|
||||||
|
}
|
||||||
|
BOOL fixGoogleSignIn() {
|
||||||
|
return [[NSUserDefaults standardUserDefaults] boolForKey:@"fixGoogleSignIn_enabled"];
|
||||||
|
}
|
||||||
|
BOOL replacePreviousAndNextButton() {
|
||||||
|
return [[NSUserDefaults standardUserDefaults] boolForKey:@"replacePreviousAndNextButton_enabled"];
|
||||||
|
}
|
||||||
|
BOOL dontEatMyContent() {
|
||||||
|
return [[NSUserDefaults standardUserDefaults] boolForKey:@"dontEatMyContent_enabled"];
|
||||||
|
}
|
||||||
|
|
||||||
# pragma mark - Tweaks
|
# pragma mark - Tweaks
|
||||||
|
// Skips content warning before playing *some videos - @PoomSmart
|
||||||
|
%hook YTPlayabilityResolutionUserActionUIController
|
||||||
|
- (void)showConfirmAlert { [self confirmAlertDidPressConfirm]; }
|
||||||
|
%end
|
||||||
|
|
||||||
// YTMiniPlayerEnabler: https://github.com/level3tjg/YTMiniplayerEnabler/
|
// YTMiniPlayerEnabler: https://github.com/level3tjg/YTMiniplayerEnabler/
|
||||||
%hook YTWatchMiniBarViewController
|
%hook YTWatchMiniBarViewController
|
||||||
- (void)updateMiniBarPlayerStateFromRenderer {
|
- (void)updateMiniBarPlayerStateFromRenderer {
|
||||||
@@ -76,7 +125,7 @@ BOOL ytMiniPlayer() {
|
|||||||
}
|
}
|
||||||
%end
|
%end
|
||||||
|
|
||||||
// Hide CC / Autoplay switch / Next & Previous button
|
// Hide CC / Autoplay switch
|
||||||
%hook YTMainAppControlsOverlayView
|
%hook YTMainAppControlsOverlayView
|
||||||
- (void)setClosedCaptionsOrSubtitlesButtonAvailable:(BOOL)arg1 { // hide CC button
|
- (void)setClosedCaptionsOrSubtitlesButtonAvailable:(BOOL)arg1 { // hide CC button
|
||||||
if (hideCC()) { return %orig(NO); }
|
if (hideCC()) { return %orig(NO); }
|
||||||
@@ -86,16 +135,22 @@ BOOL ytMiniPlayer() {
|
|||||||
if (hideAutoplaySwitch()) {}
|
if (hideAutoplaySwitch()) {}
|
||||||
else { return %orig; }
|
else { return %orig; }
|
||||||
}
|
}
|
||||||
- (void)layoutSubviews { // hide Next & Previous button
|
%end
|
||||||
%orig;
|
|
||||||
if (hidePreviousAndNextButton()) {
|
// Hide Next & Previous button
|
||||||
MSHookIvar<YTMainAppControlsOverlayView *>(self, "_nextButton").hidden = YES;
|
%group gHidePreviousAndNextButton
|
||||||
MSHookIvar<YTMainAppControlsOverlayView *>(self, "_previousButton").hidden = YES;
|
%hook YTColdConfig
|
||||||
// YouTube love beta testing :/
|
- (BOOL)removeNextPaddleForSingletonVideos { return YES; }
|
||||||
MSHookIvar<YTTransportControlsButtonView *>(self, "_nextButtonView").hidden = YES;
|
- (BOOL)removePreviousPaddleForSingletonVideos { return YES; }
|
||||||
MSHookIvar<YTTransportControlsButtonView *>(self, "_previousButtonView").hidden = YES;
|
%end
|
||||||
}
|
%end
|
||||||
}
|
|
||||||
|
// Replace Next & Previous button with Fast forward & Rewind button
|
||||||
|
%group gReplacePreviousAndNextButton
|
||||||
|
%hook YTColdConfig
|
||||||
|
- (BOOL)replaceNextPaddleWithFastForwardButtonForSingletonVods { return YES; }
|
||||||
|
- (BOOL)replacePreviousPaddleWithRewindButtonForSingletonVods { return YES; }
|
||||||
|
%end
|
||||||
%end
|
%end
|
||||||
|
|
||||||
// Hide HUD Messages
|
// Hide HUD Messages
|
||||||
@@ -164,9 +219,37 @@ BOOL ytMiniPlayer() {
|
|||||||
}
|
}
|
||||||
%end
|
%end
|
||||||
|
|
||||||
// Workaround for https://github.com/MiRO92/uYou-for-YouTube/issues/12
|
// Workaround for MiRO92/uYou-for-YouTube#12, qnblackcat/uYouPlus#263
|
||||||
%hook YTAdsInnerTubeContextDecorator
|
%hook YTDataUtils
|
||||||
- (void)decorateContext:(id)arg1 { %orig(nil); }
|
+ (NSMutableDictionary *)spamSignalsDictionary {
|
||||||
|
return nil;
|
||||||
|
}
|
||||||
|
%end
|
||||||
|
|
||||||
|
// Workaround for https://github.com/MiRO92/uYou-for-YouTube/issues/94
|
||||||
|
%hook UIResponder
|
||||||
|
%new
|
||||||
|
- (id)entry {
|
||||||
|
return nil;
|
||||||
|
}
|
||||||
|
%end
|
||||||
|
|
||||||
|
// Workaround for https://github.com/MiRO92/uYou-for-YouTube/issues/140
|
||||||
|
%hook YTLocalPlaybackController
|
||||||
|
%new
|
||||||
|
- (id)activeVideoController {
|
||||||
|
return [self activeVideo];
|
||||||
|
}
|
||||||
|
%end
|
||||||
|
|
||||||
|
// Workaround for qnblackcat/uYouPlus#10
|
||||||
|
%hook boolSettingsVC
|
||||||
|
- (instancetype)initWithTitle:(NSString *)title sections:(NSArray *)sections footer:(NSString *)footer {
|
||||||
|
if (@available(iOS 15, *))
|
||||||
|
if (![self valueForKey:@"_lastNotifiedTraitCollection"])
|
||||||
|
[self setValue:[UITraitCollection currentTraitCollection] forKey:@"_lastNotifiedTraitCollection"];
|
||||||
|
return %orig;
|
||||||
|
}
|
||||||
%end
|
%end
|
||||||
|
|
||||||
// YTClassicVideoQuality: https://github.com/PoomSmart/YTClassicVideoQuality
|
// YTClassicVideoQuality: https://github.com/PoomSmart/YTClassicVideoQuality
|
||||||
@@ -182,12 +265,12 @@ BOOL ytMiniPlayer() {
|
|||||||
- (BOOL)isPromptForLocalNetworkPermissionsEnabled { return NO; }
|
- (BOOL)isPromptForLocalNetworkPermissionsEnabled { return NO; }
|
||||||
%end
|
%end
|
||||||
|
|
||||||
// YTSystemAppearance: https://poomsmart.github.io/repo/depictions/ytsystemappearance.html
|
// A/B flags
|
||||||
// YouRememberCaption: https://poomsmart.github.io/repo/depictions/youremembercaption.html
|
%hook YTColdConfig
|
||||||
%hook YTColdConfig
|
- (BOOL)respectDeviceCaptionSetting { return NO; } // YouRememberCaption: https://poomsmart.github.io/repo/depictions/youremembercaption.html
|
||||||
- (BOOL)shouldUseAppThemeSetting { return YES; }
|
- (BOOL)isLandscapeEngagementPanelSwipeRightToDismissEnabled { return YES; } // Swipe right to dismiss the right panel in fullscreen mode
|
||||||
- (BOOL)respectDeviceCaptionSetting { return NO; }
|
- (BOOL)mainAppCoreClientIosTransientVisualGlitchInPivotBarFix { return NO; } // Fix uYou's label glitching - qnblackcat/uYouPlus#552
|
||||||
- (BOOL)isEnhancedSearchBarEnabled { return YES; }
|
- (BOOL)enableSwipeToRemoveInPlaylistWatchEp { return YES; } // Enable swipe right to remove video in Playlist.
|
||||||
%end
|
%end
|
||||||
|
|
||||||
// NOYTPremium - https://github.com/PoomSmart/NoYTPremium/
|
// NOYTPremium - https://github.com/PoomSmart/NoYTPremium/
|
||||||
@@ -217,19 +300,27 @@ BOOL ytMiniPlayer() {
|
|||||||
- (void)showSurveyWithRenderer:(id)arg1 surveyParentResponder:(id)arg2 {}
|
- (void)showSurveyWithRenderer:(id)arg1 surveyParentResponder:(id)arg2 {}
|
||||||
%end
|
%end
|
||||||
|
|
||||||
// Enable Shorts scroll bar - level3tjg - https://reddit.com/r/jailbreak/comments/v29yvk/_/iasl1l0/
|
// YTShortsProgress - @PoomSmart - https://github.com/PoomSmart/YTShortsProgress
|
||||||
%hook YTReelPlayerViewControllerSub
|
%hook YTReelPlayerViewController
|
||||||
- (BOOL)shouldEnablePlayerBar { return YES; }
|
- (BOOL)shouldEnablePlayerBar { return YES; }
|
||||||
|
- (BOOL)shouldAlwaysEnablePlayerBar { return YES; }
|
||||||
|
- (BOOL)shouldEnablePlayerBarOnlyOnPause { return NO; }
|
||||||
%end
|
%end
|
||||||
|
|
||||||
// Hide the download playlist button of uYou cuz it's broken ?!
|
%hook YTReelPlayerViewControllerSub
|
||||||
// Why aren't you working?? :/
|
- (BOOL)shouldEnablePlayerBar { return YES; }
|
||||||
// %hook YTPlaylistHeaderViewController
|
- (BOOL)shouldAlwaysEnablePlayerBar { return YES; }
|
||||||
// - (void)viewDidLoad {
|
- (BOOL)shouldEnablePlayerBarOnlyOnPause { return NO; }
|
||||||
// %orig;
|
%end
|
||||||
// self.downloadsButton.hidden = YES;
|
|
||||||
// }
|
%hook YTColdConfig
|
||||||
// %end
|
- (BOOL)iosEnableVideoPlayerScrubber { return YES; }
|
||||||
|
- (BOOL)mobileShortsTabInlined { return YES; }
|
||||||
|
%end
|
||||||
|
|
||||||
|
%hook YTHotConfig
|
||||||
|
- (BOOL)enablePlayerBarForVerticalVideoWhenControlsHiddenInFullscreen { return YES; }
|
||||||
|
%end
|
||||||
|
|
||||||
// Workaround for issue #54
|
// Workaround for issue #54
|
||||||
%hook YTMainAppVideoPlayerOverlayViewController
|
%hook YTMainAppVideoPlayerOverlayViewController
|
||||||
@@ -237,7 +328,118 @@ BOOL ytMiniPlayer() {
|
|||||||
if ([[NSUserDefaults standardUserDefaults] boolForKey:@"relatedVideosAtTheEndOfYTVideos"] == NO) {}
|
if ([[NSUserDefaults standardUserDefaults] boolForKey:@"relatedVideosAtTheEndOfYTVideos"] == NO) {}
|
||||||
else { return %orig; }
|
else { return %orig; }
|
||||||
}
|
}
|
||||||
%end
|
%end
|
||||||
|
|
||||||
|
// Workaround for qnblackcat/uYouPlus#253, qnblackcat/uYouPlus#170
|
||||||
|
%hook YTReelWatchPlaybackOverlayView
|
||||||
|
- (YTQTMButton *)overflowButton {
|
||||||
|
if ([self respondsToSelector:@selector(orderedRightSideButtons)] &&
|
||||||
|
[self orderedRightSideButtons].count != 0)
|
||||||
|
return [self orderedRightSideButtons][0];
|
||||||
|
return %orig;
|
||||||
|
}
|
||||||
|
%end
|
||||||
|
|
||||||
|
%hook YTReelContentView
|
||||||
|
- (void)didTapOverflowButton:(id)sender {
|
||||||
|
}
|
||||||
|
%end
|
||||||
|
|
||||||
|
%hook NSLayoutConstraint
|
||||||
|
+ (instancetype)constraintWithItem:(UIView *)view1
|
||||||
|
attribute:(NSLayoutAttribute)attr1
|
||||||
|
relatedBy:(NSLayoutRelation)relation
|
||||||
|
toItem:(UIView *)view2
|
||||||
|
attribute:(NSLayoutAttribute)attr2
|
||||||
|
multiplier:(CGFloat)multiplier
|
||||||
|
constant:(CGFloat)c {
|
||||||
|
if (![view1 isKindOfClass:%c(YTReelPlayerBottomButton)] &&
|
||||||
|
![view1.accessibilityIdentifier isEqualToString:@"com.miro.uyou"])
|
||||||
|
return %orig;
|
||||||
|
if (!view2) {
|
||||||
|
view1.hidden = YES;
|
||||||
|
return [NSLayoutConstraint alloc];
|
||||||
|
}
|
||||||
|
YTReelPlayerBottomButton *uYouButton = (YTReelPlayerBottomButton *)view1;
|
||||||
|
YTReelPlayerBottomButton *topButton = (YTReelPlayerBottomButton *)view2;
|
||||||
|
NSString *uYouButtonTitle =
|
||||||
|
[view2.accessibilityIdentifier isEqualToString:@"com.miro.uyou"]
|
||||||
|
? @"uYou"
|
||||||
|
: @"uYouLocal";
|
||||||
|
uYouButton.accessibilityLabel = uYouButtonTitle;
|
||||||
|
uYouButton.uppercaseTitle = NO;
|
||||||
|
[uYouButton setTitle:uYouButtonTitle forState:UIControlStateNormal];
|
||||||
|
[uYouButton
|
||||||
|
setTitleTypeKind:MSHookIvar<NSInteger>(topButton, "_typeKind")
|
||||||
|
typeVariant:MSHookIvar<NSInteger>(topButton, "_typeVariant")];
|
||||||
|
uYouButton.applyRightSideLayoutImageSize = topButton.applyRightSideLayoutImageSize;
|
||||||
|
uYouButton.buttonImageTitlePadding = topButton.buttonImageTitlePadding;
|
||||||
|
uYouButton.buttonLayoutStyle = topButton.buttonLayoutStyle;
|
||||||
|
uYouButton.sizeWithPaddingAndInsets = topButton.sizeWithPaddingAndInsets;
|
||||||
|
uYouButton.verticalContentPadding = topButton.verticalContentPadding;
|
||||||
|
return %orig;
|
||||||
|
}
|
||||||
|
%end
|
||||||
|
|
||||||
|
// Prevent uYou player bar from showing when not playing downloaded media
|
||||||
|
%hook PlayerManager
|
||||||
|
- (void)pause {
|
||||||
|
if (isnan([self progress]))
|
||||||
|
return;
|
||||||
|
%orig;
|
||||||
|
}
|
||||||
|
%end
|
||||||
|
|
||||||
|
// Hide YouTube Shorts banner in Home page? - @MiRO92 - YTNoShorts: https://github.com/MiRO92/YTNoShorts
|
||||||
|
%hook YTAsyncCollectionView
|
||||||
|
- (id)cellForItemAtIndexPath:(NSIndexPath *)indexPath {
|
||||||
|
UICollectionViewCell *cell = %orig;
|
||||||
|
if ([cell isKindOfClass:NSClassFromString(@"_ASCollectionViewCell")]) {
|
||||||
|
_ASCollectionViewCell *cell = %orig;
|
||||||
|
if ([cell respondsToSelector:@selector(node)]) {
|
||||||
|
if ([[[cell node] accessibilityIdentifier] isEqualToString:@"statement_banner.view"]) { [self removeShortsAndFeaturesAdsAtIndexPath:indexPath]; }
|
||||||
|
if ([[[cell node] accessibilityIdentifier] isEqualToString:@"compact.view"]) { [self removeShortsAndFeaturesAdsAtIndexPath:indexPath]; }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return %orig;
|
||||||
|
}
|
||||||
|
|
||||||
|
%new
|
||||||
|
- (void)removeShortsAndFeaturesAdsAtIndexPath:(NSIndexPath *)indexPath {
|
||||||
|
[self deleteItemsAtIndexPaths:[NSArray arrayWithObject:indexPath]];
|
||||||
|
}
|
||||||
|
%end
|
||||||
|
|
||||||
|
// uYou's slide settings?
|
||||||
|
%hook FRPSliderCell
|
||||||
|
- (void)didMoveToWindow {
|
||||||
|
%orig;
|
||||||
|
if (self.traitCollection.userInterfaceStyle == UIUserInterfaceStyleDark) {
|
||||||
|
MSHookIvar<UILabel *>(self, "_lLabel").textColor = [UIColor whiteColor];
|
||||||
|
MSHookIvar<UILabel *>(self, "_rLabel").textColor = [UIColor whiteColor];
|
||||||
|
MSHookIvar<UILabel *>(self, "_cLabel").textColor = [UIColor whiteColor];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
%end
|
||||||
|
|
||||||
|
// YTNoPaidPromo: https://github.com/PoomSmart/YTNoPaidPromo
|
||||||
|
%hook YTMainAppVideoPlayerOverlayViewController
|
||||||
|
- (void)setPaidContentWithPlayerData:(id)data {
|
||||||
|
if (hidePaidPromotionCard()) {}
|
||||||
|
else { return %orig; }
|
||||||
|
}
|
||||||
|
- (void)playerOverlayProvider:(YTPlayerOverlayProvider *)provider didInsertPlayerOverlay:(YTPlayerOverlay *)overlay {
|
||||||
|
if ([[overlay overlayIdentifier] isEqualToString:@"player_overlay_paid_content"] && hidePaidPromotionCard()) return;
|
||||||
|
%orig;
|
||||||
|
}
|
||||||
|
%end
|
||||||
|
|
||||||
|
%hook YTInlineMutedPlaybackPlayerOverlayViewController
|
||||||
|
- (void)setPaidContentWithPlayerData:(id)data {
|
||||||
|
if (hidePaidPromotionCard()) {}
|
||||||
|
else { return %orig; }
|
||||||
|
}
|
||||||
|
%end
|
||||||
|
|
||||||
# pragma mark - IAmYouTube - https://github.com/PoomSmart/IAmYouTube/
|
# pragma mark - IAmYouTube - https://github.com/PoomSmart/IAmYouTube/
|
||||||
%hook YTVersionUtils
|
%hook YTVersionUtils
|
||||||
@@ -265,6 +467,14 @@ BOOL ytMiniPlayer() {
|
|||||||
- (NSString *)bundleId { return YT_BUNDLE_ID; }
|
- (NSString *)bundleId { return YT_BUNDLE_ID; }
|
||||||
%end
|
%end
|
||||||
|
|
||||||
|
%hook APMAEU
|
||||||
|
+ (BOOL)isFAS { return YES; }
|
||||||
|
%end
|
||||||
|
|
||||||
|
%hook GULAppEnvironmentUtil
|
||||||
|
+ (BOOL)isFromAppStore { return YES; }
|
||||||
|
%end
|
||||||
|
|
||||||
%hook SSOConfiguration
|
%hook SSOConfiguration
|
||||||
- (id)initWithClientID:(id)clientID supportedAccountServices:(id)supportedAccountServices {
|
- (id)initWithClientID:(id)clientID supportedAccountServices:(id)supportedAccountServices {
|
||||||
self = %orig;
|
self = %orig;
|
||||||
@@ -294,39 +504,110 @@ BOOL ytMiniPlayer() {
|
|||||||
}
|
}
|
||||||
%end
|
%end
|
||||||
|
|
||||||
|
// Fix "Google couldn't confirm this attempt to sign in is safe. If you think this is a mistake, you can close and try again to sign in" - qnblackcat/uYouPlus#420
|
||||||
|
// Thanks to @AhmedBafkir and @kkirby - https://github.com/qnblackcat/uYouPlus/discussions/447#discussioncomment-3672881
|
||||||
|
%group gFixGoogleSignIn
|
||||||
|
%hook SSORPCService
|
||||||
|
+ (id)URLFromURL:(id)arg1 withAdditionalFragmentParameters:(NSDictionary *)arg2 {
|
||||||
|
NSURL *orig = %orig;
|
||||||
|
NSURLComponents *urlComponents = [[NSURLComponents alloc] initWithURL:orig resolvingAgainstBaseURL:NO];
|
||||||
|
NSMutableArray *newQueryItems = [urlComponents.queryItems mutableCopy];
|
||||||
|
for (NSURLQueryItem *queryItem in urlComponents.queryItems) {
|
||||||
|
if ([queryItem.name isEqualToString:@"system_version"]
|
||||||
|
|| [queryItem.name isEqualToString:@"app_version"]
|
||||||
|
|| [queryItem.name isEqualToString:@"kdlc"]
|
||||||
|
|| [queryItem.name isEqualToString:@"kss"]
|
||||||
|
|| [queryItem.name isEqualToString:@"lib_ver"]
|
||||||
|
|| [queryItem.name isEqualToString:@"device_model"]) {
|
||||||
|
[newQueryItems removeObject:queryItem];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
urlComponents.queryItems = [newQueryItems copy];
|
||||||
|
return urlComponents.URL;
|
||||||
|
}
|
||||||
|
%end
|
||||||
|
%end
|
||||||
|
|
||||||
|
// Fix "You can't sign in to this app because Google can't confirm that it's safe" warning when signing in. by julioverne & PoomSmart
|
||||||
|
// https://gist.github.com/PoomSmart/ef5b172fd4c5371764e027bea2613f93
|
||||||
|
// https://github.com/qnblackcat/uYouPlus/pull/398
|
||||||
|
/*
|
||||||
|
%group gDevice_challenge_request_hack
|
||||||
|
%hook SSOService
|
||||||
|
+ (id)fetcherWithRequest:(NSMutableURLRequest *)request configuration:(id)configuration {
|
||||||
|
if ([request isKindOfClass:[NSMutableURLRequest class]] && request.HTTPBody) {
|
||||||
|
NSError *error = nil;
|
||||||
|
NSMutableDictionary *body = [NSJSONSerialization JSONObjectWithData:request.HTTPBody options:NSJSONReadingMutableContainers error:&error];
|
||||||
|
if (!error && [body isKindOfClass:[NSMutableDictionary class]]) {
|
||||||
|
[body removeObjectForKey:@"device_challenge_request"];
|
||||||
|
request.HTTPBody = [NSJSONSerialization dataWithJSONObject:body options:kNilOptions error:&error];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return %orig;
|
||||||
|
}
|
||||||
|
%end
|
||||||
|
%end
|
||||||
|
*/
|
||||||
|
|
||||||
|
// Fix login for YouTube 17.33.2 and higher
|
||||||
|
%hook SSOKeychainCore
|
||||||
|
+ (NSString *)accessGroup {
|
||||||
|
return accessGroupID();
|
||||||
|
}
|
||||||
|
+ (NSString *)sharedAccessGroup {
|
||||||
|
return accessGroupID();
|
||||||
|
}
|
||||||
|
%end
|
||||||
|
|
||||||
|
// Fix App Group Directory by move it to document directory
|
||||||
|
%hook NSFileManager
|
||||||
|
- (NSURL *)containerURLForSecurityApplicationGroupIdentifier:(NSString *)groupIdentifier {
|
||||||
|
if (groupIdentifier != nil) {
|
||||||
|
NSArray *paths = [[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask];
|
||||||
|
NSURL *documentsURL = [paths lastObject];
|
||||||
|
return [documentsURL URLByAppendingPathComponent:@"AppGroup"];
|
||||||
|
}
|
||||||
|
return %orig(groupIdentifier);
|
||||||
|
}
|
||||||
|
%end
|
||||||
|
|
||||||
# pragma mark - OLED dark mode by BandarHL
|
# pragma mark - OLED dark mode by BandarHL
|
||||||
|
UIColor* raisedColor = [UIColor colorWithRed:0.035 green:0.035 blue:0.035 alpha:1.0];
|
||||||
UIColor* oledColor = [UIColor colorWithRed:0.0 green:0.0 blue:0.0 alpha:1.0];
|
|
||||||
|
|
||||||
%group gOLED
|
%group gOLED
|
||||||
%hook YTCommonColorPalette
|
%hook YTCommonColorPalette
|
||||||
- (UIColor *)brandBackgroundSolid {
|
- (UIColor *)brandBackgroundSolid {
|
||||||
if (self.pageStyle == 1) {
|
if (self.pageStyle == 1) {
|
||||||
return oledColor;
|
return [UIColor blackColor];
|
||||||
}
|
}
|
||||||
return %orig;
|
return %orig;
|
||||||
}
|
}
|
||||||
- (UIColor *)brandBackgroundPrimary {
|
- (UIColor *)brandBackgroundPrimary {
|
||||||
if (self.pageStyle == 1) {
|
if (self.pageStyle == 1) {
|
||||||
return oledColor;
|
return [UIColor blackColor];
|
||||||
}
|
}
|
||||||
return %orig;
|
return %orig;
|
||||||
}
|
}
|
||||||
- (UIColor *)brandBackgroundSecondary {
|
- (UIColor *)brandBackgroundSecondary {
|
||||||
if (self.pageStyle == 1) {
|
if (self.pageStyle == 1) {
|
||||||
return oledColor;
|
return [[UIColor blackColor] colorWithAlphaComponent:0.9];
|
||||||
|
}
|
||||||
|
return %orig;
|
||||||
|
}
|
||||||
|
- (UIColor *)raisedBackground {
|
||||||
|
if (self.pageStyle == 1) {
|
||||||
|
return [UIColor blackColor];
|
||||||
}
|
}
|
||||||
return %orig;
|
return %orig;
|
||||||
}
|
}
|
||||||
- (UIColor *)staticBrandBlack {
|
- (UIColor *)staticBrandBlack {
|
||||||
if (self.pageStyle == 1) {
|
if (self.pageStyle == 1) {
|
||||||
return oledColor;
|
return [UIColor blackColor];
|
||||||
}
|
}
|
||||||
return %orig;
|
return %orig;
|
||||||
}
|
}
|
||||||
- (UIColor *)generalBackgroundA {
|
- (UIColor *)generalBackgroundA {
|
||||||
if (self.pageStyle == 1) {
|
if (self.pageStyle == 1) {
|
||||||
return oledColor;
|
return [UIColor blackColor];
|
||||||
}
|
}
|
||||||
return %orig;
|
return %orig;
|
||||||
}
|
}
|
||||||
@@ -336,16 +617,7 @@ UIColor* oledColor = [UIColor colorWithRed:0.0 green:0.0 blue:0.0 alpha:1.0];
|
|||||||
%hook YTAccountPanelBodyViewController
|
%hook YTAccountPanelBodyViewController
|
||||||
- (UIColor *)backgroundColor:(NSInteger)pageStyle {
|
- (UIColor *)backgroundColor:(NSInteger)pageStyle {
|
||||||
if (pageStyle == 1) {
|
if (pageStyle == 1) {
|
||||||
return oledColor;
|
return [UIColor blackColor];
|
||||||
}
|
|
||||||
return %orig;
|
|
||||||
}
|
|
||||||
%end
|
|
||||||
|
|
||||||
%hook YTInnerTubeCollectionViewController
|
|
||||||
- (UIColor *)backgroundColor:(NSInteger)pageStyle {
|
|
||||||
if (pageStyle == 1) {
|
|
||||||
return oledColor;
|
|
||||||
}
|
}
|
||||||
return %orig;
|
return %orig;
|
||||||
}
|
}
|
||||||
@@ -354,9 +626,9 @@ UIColor* oledColor = [UIColor colorWithRed:0.0 green:0.0 blue:0.0 alpha:1.0];
|
|||||||
// Explore
|
// Explore
|
||||||
%hook ASScrollView
|
%hook ASScrollView
|
||||||
- (void)didMoveToWindow {
|
- (void)didMoveToWindow {
|
||||||
if (isDarkMode()) {
|
%orig;
|
||||||
%orig;
|
if (isDarkMode()) {
|
||||||
self.backgroundColor = oledColor;
|
self.backgroundColor = [UIColor clearColor];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
%end
|
%end
|
||||||
@@ -364,9 +636,9 @@ UIColor* oledColor = [UIColor colorWithRed:0.0 green:0.0 blue:0.0 alpha:1.0];
|
|||||||
// Your videos
|
// Your videos
|
||||||
%hook ASCollectionView
|
%hook ASCollectionView
|
||||||
- (void)didMoveToWindow {
|
- (void)didMoveToWindow {
|
||||||
|
%orig;
|
||||||
if (isDarkMode() && [self.nextResponder isKindOfClass:%c(_ASDisplayView)]) {
|
if (isDarkMode() && [self.nextResponder isKindOfClass:%c(_ASDisplayView)]) {
|
||||||
%orig;
|
self.superview.backgroundColor = [UIColor blackColor];
|
||||||
self.superview.backgroundColor = [UIColor clearColor];
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
%end
|
%end
|
||||||
@@ -376,7 +648,7 @@ UIColor* oledColor = [UIColor colorWithRed:0.0 green:0.0 blue:0.0 alpha:1.0];
|
|||||||
- (void)viewDidLoad {
|
- (void)viewDidLoad {
|
||||||
if (self.traitCollection.userInterfaceStyle == UIUserInterfaceStyleDark) {
|
if (self.traitCollection.userInterfaceStyle == UIUserInterfaceStyleDark) {
|
||||||
%orig;
|
%orig;
|
||||||
self.tableView.backgroundColor = oledColor;
|
self.tableView.backgroundColor = [UIColor blackColor];
|
||||||
} else { return %orig; }
|
} else { return %orig; }
|
||||||
}
|
}
|
||||||
%end
|
%end
|
||||||
@@ -385,26 +657,16 @@ UIColor* oledColor = [UIColor colorWithRed:0.0 green:0.0 blue:0.0 alpha:1.0];
|
|||||||
- (void)viewDidLoad {
|
- (void)viewDidLoad {
|
||||||
if (self.traitCollection.userInterfaceStyle == UIUserInterfaceStyleDark) {
|
if (self.traitCollection.userInterfaceStyle == UIUserInterfaceStyleDark) {
|
||||||
%orig;
|
%orig;
|
||||||
self.view.backgroundColor = oledColor;
|
self.view.backgroundColor = [UIColor blackColor];
|
||||||
} else { return %orig; }
|
} else { return %orig; }
|
||||||
}
|
}
|
||||||
%end
|
%end
|
||||||
|
|
||||||
// YT Miniplayer
|
|
||||||
%hook YTWatchMiniBarView
|
|
||||||
- (void)setBackgroundColor:(UIColor *)color {
|
|
||||||
if (isDarkMode()) {
|
|
||||||
return %orig([UIColor colorWithRed:0.0 green:0.0 blue:0.0 alpha:0.9]);
|
|
||||||
}
|
|
||||||
return %orig;
|
|
||||||
}
|
|
||||||
%end
|
|
||||||
|
|
||||||
// Search View
|
// Search View
|
||||||
%hook YTSearchBarView
|
%hook YTSearchBarView
|
||||||
- (void)setBackgroundColor:(UIColor *)color {
|
- (void)setBackgroundColor:(UIColor *)color {
|
||||||
if (isDarkMode()) {
|
if (isDarkMode()) {
|
||||||
return %orig(oledColor);
|
return %orig([UIColor blackColor]);
|
||||||
}
|
}
|
||||||
return %orig;
|
return %orig;
|
||||||
}
|
}
|
||||||
@@ -414,7 +676,7 @@ UIColor* oledColor = [UIColor colorWithRed:0.0 green:0.0 blue:0.0 alpha:1.0];
|
|||||||
%hook YTSearchBoxView
|
%hook YTSearchBoxView
|
||||||
- (void)setBackgroundColor:(UIColor *)color {
|
- (void)setBackgroundColor:(UIColor *)color {
|
||||||
if (isDarkMode()) {
|
if (isDarkMode()) {
|
||||||
return %orig(oledColor);
|
return %orig([UIColor blackColor]);
|
||||||
}
|
}
|
||||||
return %orig;
|
return %orig;
|
||||||
}
|
}
|
||||||
@@ -424,7 +686,7 @@ UIColor* oledColor = [UIColor colorWithRed:0.0 green:0.0 blue:0.0 alpha:1.0];
|
|||||||
%hook YTCommentView
|
%hook YTCommentView
|
||||||
- (void)setBackgroundColor:(UIColor *)color {
|
- (void)setBackgroundColor:(UIColor *)color {
|
||||||
if (isDarkMode()) {
|
if (isDarkMode()) {
|
||||||
return %orig(oledColor);
|
return %orig([UIColor blackColor]);
|
||||||
}
|
}
|
||||||
return %orig;
|
return %orig;
|
||||||
}
|
}
|
||||||
@@ -433,7 +695,7 @@ UIColor* oledColor = [UIColor colorWithRed:0.0 green:0.0 blue:0.0 alpha:1.0];
|
|||||||
%hook YTCreateCommentAccessoryView
|
%hook YTCreateCommentAccessoryView
|
||||||
- (void)setBackgroundColor:(UIColor *)color {
|
- (void)setBackgroundColor:(UIColor *)color {
|
||||||
if (isDarkMode()) {
|
if (isDarkMode()) {
|
||||||
return %orig(oledColor);
|
return %orig([UIColor blackColor]);
|
||||||
}
|
}
|
||||||
return %orig;
|
return %orig;
|
||||||
}
|
}
|
||||||
@@ -442,7 +704,7 @@ UIColor* oledColor = [UIColor colorWithRed:0.0 green:0.0 blue:0.0 alpha:1.0];
|
|||||||
%hook YTCreateCommentTextView
|
%hook YTCreateCommentTextView
|
||||||
- (void)setBackgroundColor:(UIColor *)color {
|
- (void)setBackgroundColor:(UIColor *)color {
|
||||||
if (isDarkMode()) {
|
if (isDarkMode()) {
|
||||||
return %orig(oledColor);
|
return %orig([UIColor blackColor]);
|
||||||
}
|
}
|
||||||
return %orig;
|
return %orig;
|
||||||
}
|
}
|
||||||
@@ -454,6 +716,15 @@ UIColor* oledColor = [UIColor colorWithRed:0.0 green:0.0 blue:0.0 alpha:1.0];
|
|||||||
}
|
}
|
||||||
%end
|
%end
|
||||||
|
|
||||||
|
%hook YTCommentDetailHeaderCell
|
||||||
|
- (void)didMoveToWindow {
|
||||||
|
%orig;
|
||||||
|
if (isDarkMode()) {
|
||||||
|
self.subviews[2].backgroundColor = [UIColor blackColor];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
%end
|
||||||
|
|
||||||
%hook YTFormattedStringLabel // YT is werid...
|
%hook YTFormattedStringLabel // YT is werid...
|
||||||
- (void)setBackgroundColor:(UIColor *)color {
|
- (void)setBackgroundColor:(UIColor *)color {
|
||||||
if (isDarkMode()) {
|
if (isDarkMode()) {
|
||||||
@@ -467,7 +738,7 @@ UIColor* oledColor = [UIColor colorWithRed:0.0 green:0.0 blue:0.0 alpha:1.0];
|
|||||||
%hook YCHLiveChatActionPanelView
|
%hook YCHLiveChatActionPanelView
|
||||||
- (void)setBackgroundColor:(UIColor *)color {
|
- (void)setBackgroundColor:(UIColor *)color {
|
||||||
if (isDarkMode()) {
|
if (isDarkMode()) {
|
||||||
return %orig(oledColor);
|
return %orig([UIColor blackColor]);
|
||||||
}
|
}
|
||||||
return %orig;
|
return %orig;
|
||||||
}
|
}
|
||||||
@@ -476,26 +747,27 @@ UIColor* oledColor = [UIColor colorWithRed:0.0 green:0.0 blue:0.0 alpha:1.0];
|
|||||||
%hook YTEmojiTextView
|
%hook YTEmojiTextView
|
||||||
- (void)setBackgroundColor:(UIColor *)color {
|
- (void)setBackgroundColor:(UIColor *)color {
|
||||||
if (isDarkMode()) {
|
if (isDarkMode()) {
|
||||||
return %orig(oledColor);
|
return %orig([UIColor blackColor]);
|
||||||
}
|
}
|
||||||
return %orig;
|
return %orig;
|
||||||
}
|
}
|
||||||
%end
|
%end
|
||||||
|
|
||||||
// Nasty stuff :/
|
// Others
|
||||||
%hook _ASDisplayView
|
%hook _ASDisplayView
|
||||||
- (void)didMoveToWindow {
|
- (void)didMoveToWindow {
|
||||||
%orig;
|
%orig;
|
||||||
if (isDarkMode()) {
|
if (isDarkMode()) {
|
||||||
if ([self.accessibilityIdentifier isEqualToString:@"id.elements.components.comment_composer"]) { self.backgroundColor = oledColor; }
|
if ([self.nextResponder isKindOfClass:%c(ASScrollView)]) { self.backgroundColor = [UIColor clearColor]; }
|
||||||
if ([self.accessibilityIdentifier isEqualToString:@"id.elements.components.video_list_entry"]) { self.backgroundColor = oledColor; }
|
if ([self.accessibilityIdentifier isEqualToString:@"eml.cvr"]) { self.backgroundColor = [UIColor blackColor]; }
|
||||||
if ([self.accessibilityIdentifier isEqualToString:@"id.elements.components.filter_chip_bar"]) { self.backgroundColor = oledColor; }
|
if ([self.accessibilityIdentifier isEqualToString:@"rich_header"]) { self.backgroundColor = [UIColor blackColor]; }
|
||||||
if ([self.accessibilityIdentifier isEqualToString:@"id.ui.comment_cell"]) { self.backgroundColor = oledColor; }
|
if ([self.accessibilityIdentifier isEqualToString:@"id.ui.comment_cell"]) { self.backgroundColor = [UIColor blackColor]; }
|
||||||
if ([self.accessibilityIdentifier isEqualToString:@"eml.cvr"]) { self.backgroundColor = oledColor; }
|
if ([self.accessibilityIdentifier isEqualToString:@"id.ui.cancel.button"]) { self.superview.backgroundColor = [UIColor clearColor]; }
|
||||||
if ([self.accessibilityIdentifier isEqualToString:@"rich_header"]) { self.backgroundColor = oledColor; }
|
if ([self.accessibilityIdentifier isEqualToString:@"id.elements.components.comment_composer"]) { self.backgroundColor = [UIColor blackColor]; }
|
||||||
if ([self.accessibilityIdentifier isEqualToString:@"id.comment.channel_guidelines_bottom_sheet_container"]) { self.backgroundColor = oledColor; }
|
if ([self.accessibilityIdentifier isEqualToString:@"id.elements.components.video_list_entry"]) { self.backgroundColor = [UIColor blackColor]; }
|
||||||
if ([self.accessibilityIdentifier isEqualToString:@"id.comment.channel_guidelines_entry_banner_container"]) { self.backgroundColor = oledColor; }
|
if ([self.accessibilityIdentifier isEqualToString:@"id.comment.guidelines_text"]) { self.superview.backgroundColor = [UIColor blackColor]; }
|
||||||
if ([self.accessibilityIdentifier isEqualToString:@"id.comment.guidelines_text"]) { self.superview.backgroundColor = oledColor; }
|
if ([self.accessibilityIdentifier isEqualToString:@"id.comment.channel_guidelines_bottom_sheet_container"]) { self.backgroundColor = [UIColor blackColor]; }
|
||||||
|
if ([self.accessibilityIdentifier isEqualToString:@"id.comment.channel_guidelines_entry_banner_container"]) { self.backgroundColor = [UIColor blackColor]; }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
%end
|
%end
|
||||||
@@ -504,28 +776,36 @@ UIColor* oledColor = [UIColor colorWithRed:0.0 green:0.0 blue:0.0 alpha:1.0];
|
|||||||
%hook ASWAppSwitchingSheetHeaderView
|
%hook ASWAppSwitchingSheetHeaderView
|
||||||
- (void)setBackgroundColor:(UIColor *)color {
|
- (void)setBackgroundColor:(UIColor *)color {
|
||||||
if (isDarkMode()) {
|
if (isDarkMode()) {
|
||||||
return %orig(oledColor);
|
return %orig(raisedColor);
|
||||||
}
|
}
|
||||||
|
return %orig;
|
||||||
}
|
}
|
||||||
%end
|
%end
|
||||||
|
|
||||||
%hook ASWAppSwitchingSheetFooterView
|
%hook ASWAppSwitchingSheetFooterView
|
||||||
- (void)setBackgroundColor:(UIColor *)color {
|
- (void)setBackgroundColor:(UIColor *)color {
|
||||||
if (isDarkMode()) {
|
if (isDarkMode()) {
|
||||||
return %orig(oledColor);
|
return %orig(raisedColor);
|
||||||
}
|
}
|
||||||
|
return %orig;
|
||||||
}
|
}
|
||||||
%end
|
%end
|
||||||
|
|
||||||
%hook ASWAppSwitcherCollectionViewCell
|
%hook ASWAppSwitcherCollectionViewCell
|
||||||
- (void)didMoveToWindow {
|
- (void)didMoveToWindow {
|
||||||
|
%orig;
|
||||||
if (isDarkMode()) {
|
if (isDarkMode()) {
|
||||||
%orig;
|
self.backgroundColor = raisedColor;
|
||||||
self.subviews[1].backgroundColor = oledColor;
|
self.subviews[1].backgroundColor = raisedColor;
|
||||||
self.superview.backgroundColor = oledColor;
|
self.superview.backgroundColor = raisedColor;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
%end
|
%end
|
||||||
|
|
||||||
|
// Incompatibility with the new YT Dark theme
|
||||||
|
%hook YTColdConfig
|
||||||
|
- (BOOL)uiSystemsClientGlobalConfigUseDarkerPaletteBgColorForNative { return NO; }
|
||||||
|
%end
|
||||||
%end
|
%end
|
||||||
|
|
||||||
# pragma mark - OLED keyboard by @ichitaso <3 - http://gist.github.com/ichitaso/935100fd53a26f18a9060f7195a1be0e
|
# pragma mark - OLED keyboard by @ichitaso <3 - http://gist.github.com/ichitaso/935100fd53a26f18a9060f7195a1be0e
|
||||||
@@ -533,28 +813,28 @@ UIColor* oledColor = [UIColor colorWithRed:0.0 green:0.0 blue:0.0 alpha:1.0];
|
|||||||
%hook UIPredictionViewController
|
%hook UIPredictionViewController
|
||||||
- (void)loadView {
|
- (void)loadView {
|
||||||
%orig;
|
%orig;
|
||||||
[self.view setBackgroundColor:oledColor];
|
[self.view setBackgroundColor:[UIColor blackColor]];
|
||||||
}
|
}
|
||||||
%end
|
%end
|
||||||
|
|
||||||
%hook UICandidateViewController
|
%hook UICandidateViewController
|
||||||
- (void)loadView {
|
- (void)loadView {
|
||||||
%orig;
|
%orig;
|
||||||
[self.view setBackgroundColor:oledColor];
|
[self.view setBackgroundColor:[UIColor blackColor]];
|
||||||
}
|
}
|
||||||
%end
|
%end
|
||||||
|
|
||||||
%hook UIKeyboardDockView
|
%hook UIKeyboardDockView
|
||||||
- (void)didMoveToWindow {
|
- (void)didMoveToWindow {
|
||||||
%orig;
|
%orig;
|
||||||
self.backgroundColor = oledColor;
|
self.backgroundColor = [UIColor blackColor];
|
||||||
}
|
}
|
||||||
%end
|
%end
|
||||||
|
|
||||||
%hook UIKeyboardLayoutStar
|
%hook UIKeyboardLayoutStar
|
||||||
- (void)didMoveToWindow {
|
- (void)didMoveToWindow {
|
||||||
%orig;
|
%orig;
|
||||||
self.backgroundColor = oledColor;
|
self.backgroundColor = [UIColor blackColor];
|
||||||
}
|
}
|
||||||
%end
|
%end
|
||||||
|
|
||||||
@@ -622,7 +902,237 @@ static void replaceTab(YTIGuideResponse *response) {
|
|||||||
%end
|
%end
|
||||||
%end
|
%end
|
||||||
|
|
||||||
// iOS 16 uYou crash fix
|
// DontEatMyContent - @therealFoxster: https://github.com/therealFoxster/DontEatMyContent
|
||||||
|
double aspectRatio = 16/9;
|
||||||
|
bool zoomedToFill = false;
|
||||||
|
|
||||||
|
MLHAMSBDLSampleBufferRenderingView *renderingView;
|
||||||
|
NSLayoutConstraint *widthConstraint, *heightConstraint, *centerXConstraint, *centerYConstraint;
|
||||||
|
|
||||||
|
%group gDontEatMyContent
|
||||||
|
%hook YTPlayerViewController
|
||||||
|
- (void)viewDidAppear:(BOOL)animated {
|
||||||
|
YTPlayerView *playerView = [self playerView];
|
||||||
|
UIView *renderingViewContainer = MSHookIvar<UIView *>(playerView, "_renderingViewContainer");
|
||||||
|
renderingView = [playerView renderingView];
|
||||||
|
|
||||||
|
CGFloat constant = 23; // Make renderingView a bit larger since safe area has sizeable margins from the notch and side borders; tested on iPhone 13 mini
|
||||||
|
|
||||||
|
widthConstraint = [renderingView.widthAnchor constraintEqualToAnchor:renderingViewContainer.safeAreaLayoutGuide.widthAnchor constant:constant];
|
||||||
|
heightConstraint = [renderingView.heightAnchor constraintEqualToAnchor:renderingViewContainer.safeAreaLayoutGuide.heightAnchor constant:constant];
|
||||||
|
centerXConstraint = [renderingView.centerXAnchor constraintEqualToAnchor:renderingViewContainer.centerXAnchor];
|
||||||
|
centerYConstraint = [renderingView.centerYAnchor constraintEqualToAnchor:renderingViewContainer.centerYAnchor];
|
||||||
|
|
||||||
|
// playerView.backgroundColor = [UIColor greenColor];
|
||||||
|
// renderingViewContainer.backgroundColor = [UIColor redColor];
|
||||||
|
// renderingView.backgroundColor = [UIColor blueColor];
|
||||||
|
|
||||||
|
YTMainAppVideoPlayerOverlayViewController *activeVideoPlayerOverlay = [self activeVideoPlayerOverlay];
|
||||||
|
|
||||||
|
// Must check class since YTInlineMutedPlaybackPlayerOverlayViewController doesn't have -(BOOL)isFullscreen
|
||||||
|
if ([NSStringFromClass([activeVideoPlayerOverlay class]) isEqualToString:@"YTMainAppVideoPlayerOverlayViewController"] && [activeVideoPlayerOverlay isFullscreen]) {
|
||||||
|
activate();
|
||||||
|
} else {
|
||||||
|
center();
|
||||||
|
}
|
||||||
|
|
||||||
|
%orig(animated);
|
||||||
|
}
|
||||||
|
- (void)didPressToggleFullscreen {
|
||||||
|
YTMainAppVideoPlayerOverlayViewController *activeVideoPlayerOverlay = [self activeVideoPlayerOverlay];
|
||||||
|
if (![activeVideoPlayerOverlay isFullscreen]) // Entering fullscreen
|
||||||
|
activate();
|
||||||
|
else // Exiting fullscreen
|
||||||
|
deactivate();
|
||||||
|
|
||||||
|
%orig;
|
||||||
|
}
|
||||||
|
- (void)didSwipeToEnterFullscreen { %orig; activate(); }
|
||||||
|
- (void)didSwipeToExitFullscreen { %orig; deactivate(); }
|
||||||
|
|
||||||
|
// Retrieve video aspect ratio (1) (no longer works but kept for backwards compatibility)
|
||||||
|
- (void)singleVideo:(id)arg1 aspectRatioDidChange:(CGFloat)arg2 {
|
||||||
|
%orig(arg1, arg2);
|
||||||
|
aspectRatioChanged(arg2);
|
||||||
|
}
|
||||||
|
%end
|
||||||
|
|
||||||
|
// Retrieve video aspect ratio (2) (no longer works but kept for backwards compatibility)
|
||||||
|
%hook YTVideoZoomOverlayController
|
||||||
|
- (void)resetForVideoWithAspectRatio:(double)arg1 {
|
||||||
|
%orig(arg1);
|
||||||
|
aspectRatioChanged(arg1);
|
||||||
|
}
|
||||||
|
%end
|
||||||
|
|
||||||
|
// Retrieve video aspect ratio (3)
|
||||||
|
%hook YTPlayerView
|
||||||
|
- (void)setAspectRatio:(CGFloat)arg1 {
|
||||||
|
%orig(arg1);
|
||||||
|
aspectRatioChanged(arg1);
|
||||||
|
// %log((CGFloat) aspectRatio);
|
||||||
|
}
|
||||||
|
%end
|
||||||
|
|
||||||
|
// Detect pinch gesture (1) (no longer works but kept for backwards compatibility)
|
||||||
|
%hook YTVideoZoomOverlayView
|
||||||
|
- (void)didRecognizePinch:(UIPinchGestureRecognizer *)pinchGestureRecognizer {
|
||||||
|
// %log((CGFloat) [pinchGestureRecognizer scale], (CGFloat) [pinchGestureRecognizer velocity]);
|
||||||
|
if ([pinchGestureRecognizer velocity] <= 0.0) { // >>Zoom out<<
|
||||||
|
zoomedToFill = false;
|
||||||
|
activate();
|
||||||
|
} else if ([pinchGestureRecognizer velocity] > 0.0) { // <<Zoom in>>
|
||||||
|
zoomedToFill = true;
|
||||||
|
deactivate();
|
||||||
|
}
|
||||||
|
%orig(pinchGestureRecognizer);
|
||||||
|
}
|
||||||
|
%end
|
||||||
|
|
||||||
|
// Detect pinch gesture (2)
|
||||||
|
%hook YTVideoFreeZoomOverlayView
|
||||||
|
- (void)didRecognizePinch:(UIPinchGestureRecognizer *)pinchGestureRecognizer {
|
||||||
|
if ([pinchGestureRecognizer velocity] <= 0.0) { // >>Zoom out<<
|
||||||
|
zoomedToFill = false;
|
||||||
|
activate();
|
||||||
|
} else if ([pinchGestureRecognizer velocity] > 0.0) { // <<Zoom in>>
|
||||||
|
zoomedToFill = true;
|
||||||
|
deactivate();
|
||||||
|
}
|
||||||
|
%orig(pinchGestureRecognizer);
|
||||||
|
}
|
||||||
|
%end
|
||||||
|
|
||||||
|
%end // gDontEatMyContent
|
||||||
|
|
||||||
|
// DontEatMycontent - detecting device model
|
||||||
|
// https://stackoverflow.com/a/11197770/19227228
|
||||||
|
NSString* deviceName() {
|
||||||
|
struct utsname systemInfo;
|
||||||
|
uname(&systemInfo);
|
||||||
|
return [NSString stringWithCString:systemInfo.machine encoding:NSUTF8StringEncoding];
|
||||||
|
}
|
||||||
|
|
||||||
|
BOOL deviceIsSupported() {
|
||||||
|
NSString *identifier = deviceName();
|
||||||
|
NSArray *unsupportedDevices = UNSUPPORTED_DEVICES;
|
||||||
|
|
||||||
|
for (NSString *device in unsupportedDevices) {
|
||||||
|
if ([device isEqualToString:identifier]) {
|
||||||
|
return NO;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if ([identifier containsString:@"iPhone"]) {
|
||||||
|
NSString *model = [identifier stringByReplacingOccurrencesOfString:@"iPhone" withString:@""];
|
||||||
|
model = [model stringByReplacingOccurrencesOfString:@"," withString:@"."];
|
||||||
|
if ([identifier isEqualToString:@"iPhone13,1"]) { // iPhone 12 mini
|
||||||
|
return YES;
|
||||||
|
} else if ([model floatValue] >= 14.0) { // iPhone 13 series and newer
|
||||||
|
return YES;
|
||||||
|
} else return NO;
|
||||||
|
} else return NO;
|
||||||
|
}
|
||||||
|
|
||||||
|
void aspectRatioChanged(CGFloat arg) {
|
||||||
|
aspectRatio = arg;
|
||||||
|
if (aspectRatio == 0.0) {
|
||||||
|
// App backgrounded or something went wrong
|
||||||
|
} else if (aspectRatio < THRESHOLD) {
|
||||||
|
deactivate();
|
||||||
|
} else {
|
||||||
|
activate();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void activate() {
|
||||||
|
if (aspectRatio < THRESHOLD || zoomedToFill) return;
|
||||||
|
// NSLog(@"activate");
|
||||||
|
center();
|
||||||
|
renderingView.translatesAutoresizingMaskIntoConstraints = NO;
|
||||||
|
widthConstraint.active = YES;
|
||||||
|
heightConstraint.active = YES;
|
||||||
|
}
|
||||||
|
|
||||||
|
void deactivate() {
|
||||||
|
// NSLog(@"deactivate");
|
||||||
|
center();
|
||||||
|
renderingView.translatesAutoresizingMaskIntoConstraints = YES;
|
||||||
|
widthConstraint.active = NO;
|
||||||
|
heightConstraint.active = NO;
|
||||||
|
}
|
||||||
|
|
||||||
|
void center() {
|
||||||
|
centerXConstraint.active = YES;
|
||||||
|
centerYConstraint.active = YES;
|
||||||
|
}
|
||||||
|
|
||||||
|
// YTSpeed - https://github.com/Lyvendia/YTSpeed
|
||||||
|
%hook YTVarispeedSwitchController
|
||||||
|
- (id)init {
|
||||||
|
id result = %orig;
|
||||||
|
|
||||||
|
const int size = 12;
|
||||||
|
float speeds[] = {0.25, 0.5, 0.75, 1.0, 1.25, 1.5, 1.75, 2.0, 2.25, 2.5, 2.75, 3.0};
|
||||||
|
id varispeedSwitchControllerOptions[size];
|
||||||
|
|
||||||
|
for (int i = 0; i < size; ++i) {
|
||||||
|
id title = [NSString stringWithFormat:@"%.2fx", speeds[i]];
|
||||||
|
varispeedSwitchControllerOptions[i] = [[%c(YTVarispeedSwitchControllerOption) alloc] initWithTitle:title rate:speeds[i]];
|
||||||
|
}
|
||||||
|
|
||||||
|
NSUInteger count = sizeof(varispeedSwitchControllerOptions) / sizeof(id);
|
||||||
|
NSArray *varispeedArray = [NSArray arrayWithObjects:varispeedSwitchControllerOptions count:count];
|
||||||
|
MSHookIvar<NSArray *>(self, "_options") = varispeedArray;
|
||||||
|
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
%end
|
||||||
|
|
||||||
|
%hook MLHAMQueuePlayer
|
||||||
|
- (void)setRate:(float)rate {
|
||||||
|
MSHookIvar<float>(self, "_rate") = rate;
|
||||||
|
MSHookIvar<float>(self, "_preferredRate") = rate;
|
||||||
|
|
||||||
|
id player = MSHookIvar<HAMPlayerInternal *>(self, "_player");
|
||||||
|
[player setRate: rate];
|
||||||
|
|
||||||
|
id stickySettings = MSHookIvar<MLPlayerStickySettings *>(self, "_stickySettings");
|
||||||
|
[stickySettings setRate: rate];
|
||||||
|
|
||||||
|
[self.playerEventCenter broadcastRateChange: rate];
|
||||||
|
|
||||||
|
YTSingleVideoController *singleVideoController = self.delegate;
|
||||||
|
[singleVideoController playerRateDidChange: rate];
|
||||||
|
}
|
||||||
|
%end
|
||||||
|
|
||||||
|
%hook YTPlayerViewController
|
||||||
|
%property float playbackRate;
|
||||||
|
- (void)singleVideo:(id)video playbackRateDidChange:(float)rate {
|
||||||
|
%orig;
|
||||||
|
}
|
||||||
|
%end
|
||||||
|
|
||||||
|
// 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
|
%group iOS16
|
||||||
%hook OBPrivacyLinkButton
|
%hook OBPrivacyLinkButton
|
||||||
%new
|
%new
|
||||||
@@ -644,9 +1154,6 @@ static void replaceTab(YTIGuideResponse *response) {
|
|||||||
# pragma mark - ctor
|
# pragma mark - ctor
|
||||||
%ctor {
|
%ctor {
|
||||||
%init;
|
%init;
|
||||||
if (![[[[NSUserDefaults standardUserDefaults] dictionaryRepresentation] allKeys] containsObject:@"relatedVideosAtTheEndOfYTVideos"]) {
|
|
||||||
[[NSUserDefaults standardUserDefaults] setBool:YES forKey:@"relatedVideosAtTheEndOfYTVideos"];
|
|
||||||
}
|
|
||||||
if (oled()) {
|
if (oled()) {
|
||||||
%init(gOLED);
|
%init(gOLED);
|
||||||
}
|
}
|
||||||
@@ -659,7 +1166,40 @@ static void replaceTab(YTIGuideResponse *response) {
|
|||||||
if (bigYTMiniPlayer() && (UIDevice.currentDevice.userInterfaceIdiom != UIUserInterfaceIdiomPad)) {
|
if (bigYTMiniPlayer() && (UIDevice.currentDevice.userInterfaceIdiom != UIUserInterfaceIdiomPad)) {
|
||||||
%init(Main);
|
%init(Main);
|
||||||
}
|
}
|
||||||
|
if (hidePreviousAndNextButton()) {
|
||||||
|
%init(gHidePreviousAndNextButton);
|
||||||
|
}
|
||||||
|
if (replacePreviousAndNextButton()) {
|
||||||
|
%init(gReplacePreviousAndNextButton);
|
||||||
|
}
|
||||||
|
if (dontEatMyContent() && deviceIsSupported()) {
|
||||||
|
%init(gDontEatMyContent);
|
||||||
|
}
|
||||||
if (@available(iOS 16, *)) {
|
if (@available(iOS 16, *)) {
|
||||||
%init(iOS16);
|
%init(iOS16);
|
||||||
}
|
}
|
||||||
}
|
if (!fixGoogleSignIn()) {
|
||||||
|
%init(gFixGoogleSignIn);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Disable broken options of uYou
|
||||||
|
[[NSUserDefaults standardUserDefaults] setBool:NO forKey:@"removeYouTubeAds"];
|
||||||
|
[[NSUserDefaults standardUserDefaults] setBool:NO forKey:@"disableAgeRestriction"];
|
||||||
|
|
||||||
|
// Change the default value of some uYou's options
|
||||||
|
if (![[[[NSUserDefaults standardUserDefaults] dictionaryRepresentation] allKeys] containsObject:@"relatedVideosAtTheEndOfYTVideos"]) {
|
||||||
|
[[NSUserDefaults standardUserDefaults] setBool:YES forKey:@"relatedVideosAtTheEndOfYTVideos"];
|
||||||
|
}
|
||||||
|
if (![[[[NSUserDefaults standardUserDefaults] dictionaryRepresentation] allKeys] containsObject:@"uYouButtonVideoControlsOverlay"]) {
|
||||||
|
[[NSUserDefaults standardUserDefaults] setBool:NO forKey:@"uYouButtonVideoControlsOverlay"];
|
||||||
|
}
|
||||||
|
if (![[[[NSUserDefaults standardUserDefaults] dictionaryRepresentation] allKeys] containsObject:@"uYouPiPButtonVideoControlsOverlay"]) {
|
||||||
|
[[NSUserDefaults standardUserDefaults] setBool:NO forKey:@"uYouPiPButtonVideoControlsOverlay"];
|
||||||
|
}
|
||||||
|
// if (![[[[NSUserDefaults standardUserDefaults] dictionaryRepresentation] allKeys] containsObject:@"uYouRepeatButtonVideoControlsOverlay"]) {
|
||||||
|
// [[NSUserDefaults standardUserDefaults] setBool:NO forKey:@"uYouRepeatButtonVideoControlsOverlay"];
|
||||||
|
// }
|
||||||
|
// if (![[[[NSUserDefaults standardUserDefaults] dictionaryRepresentation] allKeys] containsObject:@"uYouRightRotateButtonVideoControlsOverlay"]) {
|
||||||
|
// [[NSUserDefaults standardUserDefaults] setBool:NO forKey:@"uYouRightRotateButtonVideoControlsOverlay"];
|
||||||
|
// }
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user