Compare commits
327 commits
main
...
main-night
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
4db6189451 | ||
|
|
2a0ed287b5 | ||
|
|
8c5ed914ce | ||
|
|
9ebf28df77 | ||
|
|
0e0fedc418 | ||
|
|
a1f8eb92be | ||
|
|
de98e58bac | ||
|
|
935d0d9703 | ||
|
|
44d855e42a | ||
|
|
1d61542513 | ||
|
|
2251049401 | ||
|
|
10282a2d9f | ||
|
|
680ae2a7f8 | ||
|
|
58afb4be52 | ||
|
|
5fb36e29bb | ||
|
|
e7fa6191cb | ||
|
|
49777351e0 | ||
|
|
0b113fc70a | ||
|
|
1bce31bf4d | ||
|
|
467991ec8d | ||
|
|
b6356182d1 | ||
|
|
a98cc7ad40 | ||
|
|
9c85621b2d | ||
|
|
91d3529261 | ||
|
|
1986600d46 | ||
|
|
e3b4187766 | ||
|
|
c2c1f38662 | ||
|
|
012725efa6 | ||
|
|
1dca562a22 | ||
|
|
8d03828478 | ||
|
|
cd0c125feb | ||
|
|
39fd5b783b | ||
|
|
bf83324ff2 | ||
|
|
ccc112f835 | ||
|
|
5d3cec9711 | ||
|
|
ea04a38b7e | ||
|
|
f135505f1e | ||
|
|
3cfdf5ac8e | ||
|
|
0b04b91ef2 | ||
|
|
8ae42fef4d | ||
|
|
66191f3edf | ||
|
|
c3e8f75839 | ||
|
|
4edc1dd440 | ||
|
|
353a549e83 | ||
|
|
89174aa328 | ||
|
|
513abdbc22 | ||
|
|
81f7a55bde | ||
|
|
0f0f86115e | ||
|
|
ed5da99036 | ||
|
|
b3bf06ce7e | ||
|
|
8cbbc3093f | ||
|
|
ad33154c18 | ||
|
|
ab43d84951 | ||
|
|
33c9508607 | ||
|
|
bdc046b211 | ||
|
|
8f68e0c363 | ||
|
|
beb9dcbd13 | ||
|
|
baf9d06677 | ||
|
|
c90b56d8d3 | ||
|
|
d04cf5a24d | ||
|
|
1804a2cfa5 | ||
|
|
bb28191fe4 | ||
|
|
32d047a1e8 | ||
|
|
da90055059 | ||
|
|
a3581bf3ba | ||
|
|
5197eacd2a | ||
|
|
69dc003517 | ||
|
|
5e83c4ca98 | ||
|
|
a94ee4f855 | ||
|
|
92d5eaa10f | ||
|
|
7b5e4fa6a1 | ||
|
|
efe3e3ce0f | ||
|
|
ae2793db39 | ||
|
|
effb18e2c1 | ||
|
|
8c11ff11df | ||
|
|
6ff27ebf94 | ||
|
|
a0343b34b8 | ||
|
|
efe8503241 | ||
|
|
4cb8c9b5da | ||
|
|
8d56ee85c8 | ||
|
|
6763948779 | ||
|
|
f2f63981e7 | ||
|
|
b2fefd2ff8 | ||
|
|
0805fe053a | ||
|
|
877d969580 | ||
|
|
1793c4b031 | ||
|
|
e64368002c | ||
|
|
551fdfcb4e | ||
|
|
e0c49c3ed6 | ||
|
|
cb04600613 | ||
|
|
df1681f34f | ||
|
|
d08f3babd6 | ||
|
|
1b8edc7818 | ||
|
|
52249ae259 | ||
|
|
d8858c92aa | ||
|
|
df964d39c3 | ||
|
|
05936f1426 | ||
|
|
9702239dd1 | ||
|
|
f7c98d1f23 | ||
|
|
ad0d875fb5 | ||
|
|
de3d4320e6 | ||
|
|
fbf66f9031 | ||
|
|
bc234732b8 | ||
|
|
d87b0d1763 | ||
|
|
f516ddeca4 | ||
|
|
1cf8221c8d | ||
|
|
27ac05851f | ||
|
|
24f90271d1 | ||
|
|
5e46d9936d | ||
|
|
30ce254ce5 | ||
|
|
ed20d9e5f5 | ||
|
|
b0e5a8f82f | ||
|
|
73f4fc5edd | ||
|
|
0150082a31 | ||
|
|
49f12a0b66 | ||
|
|
33d150e739 | ||
|
|
bc08c77664 | ||
|
|
9c11a8d6af | ||
|
|
91ea6c8fe1 | ||
|
|
118f4fd556 | ||
|
|
25e7b84541 | ||
|
|
87900e01a5 | ||
|
|
0f726cfa32 | ||
|
|
72401dcd13 | ||
|
|
1905439eda | ||
|
|
4398c49258 | ||
|
|
ef93afd234 | ||
|
|
d56dc8a86a | ||
|
|
93b3397e01 | ||
|
|
97c6d103d8 | ||
|
|
851f831b73 | ||
|
|
4bfbcd5f6a | ||
|
|
a40becdb44 | ||
|
|
4641328c9b | ||
|
|
24bf80cef5 | ||
|
|
c0257e801e | ||
|
|
a8440ab26e | ||
|
|
05e24f733f | ||
|
|
ee54600327 | ||
|
|
815cd96302 | ||
|
|
d2fb05bf86 | ||
|
|
4b2c982160 | ||
|
|
bc862d88ac | ||
|
|
1e63361f48 | ||
|
|
7369ee0ac1 | ||
|
|
6936a8fb2b | ||
|
|
15af3980f0 | ||
|
|
7d873944a6 | ||
|
|
43b542d697 | ||
|
|
ce82c117db | ||
|
|
8c9097db1d | ||
|
|
2aaf7dd4f7 | ||
|
|
d870bb5123 | ||
|
|
2c063e85a9 | ||
|
|
19e771714b | ||
|
|
3a79b638fa | ||
|
|
5a8703ef55 | ||
|
|
1d431bb927 | ||
|
|
e53fb5e6df | ||
|
|
df8f59c21d | ||
|
|
70a14e827a | ||
|
|
5b70455b4b | ||
|
|
ba128dd024 | ||
|
|
56e22c8a21 | ||
|
|
1cf7480a9e | ||
|
|
72d172b3d9 | ||
|
|
97301ee2d9 | ||
|
|
932289221d | ||
|
|
4bd10955fa | ||
|
|
c105310e71 | ||
|
|
6af6a382ab | ||
|
|
3d245dc784 | ||
|
|
948f478229 | ||
|
|
90eff9f385 | ||
|
|
6f4f979a2d | ||
|
|
78c2ddaaea | ||
|
|
04c212f915 | ||
|
|
61ae8e720a | ||
|
|
f5f0748d91 | ||
|
|
de3eb16662 | ||
|
|
6bfab35e2d | ||
|
|
ac1004e906 | ||
|
|
f6c3d055db | ||
|
|
b5c404572d | ||
|
|
b31c2337b1 | ||
|
|
be8b1b7637 | ||
|
|
e7547e4d06 | ||
|
|
c1d5762afd | ||
|
|
10008aa9af | ||
|
|
c0cf0237fc | ||
|
|
c651c58736 | ||
|
|
c1e75b443c | ||
|
|
3d2310589a | ||
|
|
d461c3ef89 | ||
|
|
d5880ea00e | ||
|
|
cfe83e471a | ||
|
|
d1a88de0dc | ||
|
|
a89beaa189 | ||
|
|
7d5af8e99a | ||
|
|
1be0c249cc | ||
|
|
d743657492 | ||
|
|
b57483c17b | ||
|
|
343b334f14 | ||
|
|
1f343d67b0 | ||
|
|
a99e10ba04 | ||
|
|
37a1461742 | ||
|
|
f8bfcffbef | ||
|
|
566ad93bf0 | ||
|
|
d1cd5e68a1 | ||
|
|
99c5aa0d5a | ||
|
|
5df593c7e7 | ||
|
|
bc1a3fd1af | ||
|
|
413cb22444 | ||
|
|
1371927937 | ||
|
|
732fa3a4d5 | ||
|
|
b91e6d1d6d | ||
|
|
986be79147 | ||
|
|
ade503ebb3 | ||
|
|
8f7a6a7a68 | ||
|
|
f8c3428eb6 | ||
|
|
ef6912212f | ||
|
|
7ed046a8fc | ||
|
|
055da8f17b | ||
|
|
69cf94cb44 | ||
|
|
4b46e44b52 | ||
|
|
4ac0afed6f | ||
|
|
361de02ff1 | ||
|
|
fa313c15cd | ||
|
|
3bca764334 | ||
|
|
f03ab2fe3d | ||
|
|
cec0e27e55 | ||
|
|
4be9549d42 | ||
|
|
ccd6826de4 | ||
|
|
4020ab10a7 | ||
|
|
99a3416652 | ||
|
|
2de374dbe8 | ||
|
|
2a1975d069 | ||
|
|
b9ef23f9dd | ||
|
|
a0c50c4dea | ||
|
|
f66e962b06 | ||
|
|
c2d69b97a6 | ||
|
|
4ab1b0573f | ||
|
|
f59f4243be | ||
|
|
88dd1b711f | ||
|
|
9afbdb2dac | ||
|
|
10ce2d1bd8 | ||
|
|
ef025bd3ac | ||
|
|
9c52e27b9a | ||
|
|
4512d43e42 | ||
|
|
a194b345f8 | ||
|
|
2215e3bd5f | ||
|
|
c27a33ccff | ||
|
|
ccda2827a9 | ||
|
|
95095dbddd | ||
|
|
c9d32fd2c3 | ||
|
|
619223cc90 | ||
|
|
eae46196ed | ||
|
|
e4fc237941 | ||
|
|
defe4a0f8c | ||
|
|
7681af2aaf | ||
|
|
65d96a84e1 | ||
|
|
359ce0e29d | ||
|
|
d8a0f921a4 | ||
|
|
5b1ff83bdd | ||
|
|
2254c8511a | ||
|
|
db1a29a0e3 | ||
|
|
dd015adea7 | ||
|
|
1d2be63a9e | ||
|
|
2bd5aed405 | ||
|
|
c7d141c3d3 | ||
|
|
e5b3fdbb3b | ||
|
|
f6dc419db7 | ||
|
|
36c05f3678 | ||
|
|
0fac075d6c | ||
|
|
fe0b4f7ab0 | ||
|
|
91eb0d1a42 | ||
|
|
cfcfcf05b2 | ||
|
|
1a307df502 | ||
|
|
8127b3da9d | ||
|
|
432ebc879f | ||
|
|
cd401daa37 | ||
|
|
9126bbe2b6 | ||
|
|
5819451c4f | ||
|
|
1eff0b0fd4 | ||
|
|
63624a49f9 | ||
|
|
efeb36f1e6 | ||
|
|
d20263bf35 | ||
|
|
0c414df932 | ||
|
|
107a5e35d6 | ||
|
|
12f9830817 | ||
|
|
aa69f5161c | ||
|
|
3c5c6536c0 | ||
|
|
7af1e4368b | ||
|
|
c00a28aba9 | ||
|
|
aaee12c551 | ||
|
|
7e8fbc10da | ||
|
|
10d879fe11 | ||
|
|
3861f57711 | ||
|
|
b3cb53e998 | ||
|
|
7f4faf44ed | ||
|
|
bbeb521b04 | ||
|
|
29dcffb0e8 | ||
|
|
bbf056a051 | ||
|
|
afe0955072 | ||
|
|
9c099faa10 | ||
|
|
fa6e26fa2e | ||
|
|
a39798499f | ||
|
|
8777cf41fe | ||
|
|
0a4e56c0c4 | ||
|
|
15051b2e42 | ||
|
|
b0341f5596 | ||
|
|
1525f7c0fb | ||
|
|
3ff69825b2 | ||
|
|
cfac3d25e6 | ||
|
|
bf49a3a8d7 | ||
|
|
22f68d61e6 | ||
|
|
70d757bc6f | ||
|
|
13e72a298f | ||
|
|
8f2c87ce33 | ||
|
|
26cd4536cb | ||
|
|
254704fbd5 | ||
|
|
a6e87b94d5 | ||
|
|
cee5ffca3c | ||
|
|
42cad3f974 | ||
|
|
470e95e605 | ||
|
|
98085815f7 | ||
|
|
a9943de261 |
62 changed files with 6070 additions and 742 deletions
68
.github/workflows/buildapp.yml
vendored
68
.github/workflows/buildapp.yml
vendored
|
|
@ -1,11 +1,21 @@
|
|||
# Original idea by @ISnackable. Thanks to him for handling the hardest parts!
|
||||
# https://github.com/ISnackable/CercubePlus/blob/main/.github/workflows/Build.yml
|
||||
# https://github.com/ISnackable/YTCubePlus/blob/main/.github/workflows/Build.yml
|
||||
|
||||
name: Build and Release uYouPlus
|
||||
name: Build and Release uYouPlusExtra
|
||||
|
||||
on:
|
||||
workflow_dispatch:
|
||||
inputs:
|
||||
sdk_version:
|
||||
description: "iOS SDK version to be used during build"
|
||||
default: "16.2"
|
||||
required: true
|
||||
type: string
|
||||
youtube_version:
|
||||
description: "The version of YouTube"
|
||||
default: ""
|
||||
required: true
|
||||
type: string
|
||||
uyou_version:
|
||||
description: "The version of uYou"
|
||||
default: "3.0.1"
|
||||
|
|
@ -16,11 +26,11 @@ on:
|
|||
default: ""
|
||||
required: true
|
||||
type: string
|
||||
youtube_version:
|
||||
description: "The version of YouTube"
|
||||
default: ""
|
||||
required: true
|
||||
type: string
|
||||
create_release:
|
||||
description: "Create a draft release"
|
||||
default: true
|
||||
required: false
|
||||
type: boolean
|
||||
bundle_id:
|
||||
description: "Modify the bundle ID. Not recommended"
|
||||
default: "com.google.ios.youtube"
|
||||
|
|
@ -31,11 +41,6 @@ on:
|
|||
default: "YouTube"
|
||||
required: true
|
||||
type: string
|
||||
create_release:
|
||||
description: "Create a draft release"
|
||||
default: true
|
||||
required: false
|
||||
type: boolean
|
||||
|
||||
concurrency:
|
||||
group: ${{ github.workflow }}-${{ github.ref }}
|
||||
|
|
@ -44,50 +49,51 @@ concurrency:
|
|||
jobs:
|
||||
build:
|
||||
name: Build uYouPlus
|
||||
runs-on: macos-11
|
||||
runs-on: macos-latest
|
||||
permissions:
|
||||
contents: write
|
||||
|
||||
steps:
|
||||
- name: Install Dependencies
|
||||
run: brew install bzip2 curl dpkg jq ldid make node svn wget xz
|
||||
|
||||
- name: Set PATH environment variable
|
||||
run: echo "$(brew --prefix make)/libexec/gnubin" >> $GITHUB_PATH
|
||||
|
||||
- name: Checkout Main
|
||||
uses: actions/checkout@v3.2.0
|
||||
uses: actions/checkout@v4.1.1
|
||||
with:
|
||||
path: main
|
||||
submodules: recursive
|
||||
|
||||
- name: Install Dependencies
|
||||
run: brew install ldid dpkg make
|
||||
|
||||
- name: Set PATH environment variable
|
||||
run: echo "$(brew --prefix make)/libexec/gnubin" >> $GITHUB_PATH
|
||||
|
||||
- name: Setup Theos
|
||||
uses: actions/checkout@v3.2.0
|
||||
uses: actions/checkout@v4.1.1
|
||||
with:
|
||||
repository: theos/theos
|
||||
ref: master
|
||||
ref: 3da31488281ecf4394d10302d2629607f4a1aa07
|
||||
path: theos
|
||||
submodules: recursive
|
||||
|
||||
- name: Caching
|
||||
- name: SDK Caching
|
||||
id: SDK
|
||||
uses: actions/cache@v3.2.0
|
||||
uses: actions/cache@v3.3.2
|
||||
env:
|
||||
cache-name: iOS-15.5-SDK
|
||||
cache-name: iOS-${{ inputs.sdk_version }}-SDK
|
||||
with:
|
||||
path: theos/sdks/
|
||||
key: ${{ env.cache-name }}
|
||||
restore-keys: ${{ env.cache-name }}
|
||||
|
||||
- name: Download iOS 15.5 SDK
|
||||
- name: Download iOS SDK
|
||||
if: steps.SDK.outputs.cache-hit != 'true'
|
||||
run: |
|
||||
svn checkout -q https://github.com/chrisharper22/sdks/trunk/iPhoneOS15.5.sdk
|
||||
svn checkout -q https://github.com/arichorn/sdks/trunk/iPhoneOS${{ inputs.sdk_version }}.sdk
|
||||
mv *.sdk $THEOS/sdks
|
||||
env:
|
||||
THEOS: ${{ github.workspace }}/theos
|
||||
|
||||
- name: Setup Theos Jailed
|
||||
uses: actions/checkout@v3.2.0
|
||||
uses: actions/checkout@v4.1.1
|
||||
with:
|
||||
repository: qnblackcat/theos-jailed
|
||||
ref: master
|
||||
|
|
@ -116,7 +122,7 @@ jobs:
|
|||
sed -i '' "27s#.*#BUNDLE_ID = ${{ env.BUNDLE_ID }}#g" Makefile
|
||||
sed -i '' "26s#.*#DISPLAY_NAME = ${{ env.APP_NAME }}#g" Makefile
|
||||
make package IPA=YouTube.ipa 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/uYouPlusExtra_${{ env.YOUTUBE_VERSION }}_${{ env.UYOU_VERSION }}.ipa")
|
||||
echo "package=$(ls -t packages | head -n1)" >>$GITHUB_OUTPUT
|
||||
echo -e "==> \033[1mSHASUM256: $(shasum -a 256 packages/*.ipa | cut -f1 -d' ')\033[0m"
|
||||
echo -e "==> \033[1mBundle ID: ${{ env.BUNDLE_ID }}\033[0m"
|
||||
|
|
@ -129,12 +135,12 @@ jobs:
|
|||
APP_NAME: ${{ inputs.app_name }}
|
||||
|
||||
- name: Upload Artifact
|
||||
uses: actions/upload-artifact@v3.1.1
|
||||
uses: actions/upload-artifact@v3.1.3
|
||||
env:
|
||||
UYOU_VERSION: ${{ inputs.uyou_version }}
|
||||
YOUTUBE_VERSION: ${{ inputs.youtube_version }}
|
||||
with:
|
||||
name: uYouPlus_${{ env.YOUTUBE_VERSION }}_${{ env.UYOU_VERSION }}
|
||||
name: uYouPlusExtra_${{ env.YOUTUBE_VERSION }}_${{ env.UYOU_VERSION }}
|
||||
path: ${{ github.workspace }}/main/packages/${{ steps.build_package.outputs.package }}
|
||||
if-no-files-found: error
|
||||
|
||||
|
|
|
|||
59
.github/workflows/delete-workflow-runs.yml
vendored
Normal file
59
.github/workflows/delete-workflow-runs.yml
vendored
Normal file
|
|
@ -0,0 +1,59 @@
|
|||
name: Delete Workflow Runs
|
||||
on:
|
||||
workflow_dispatch:
|
||||
inputs:
|
||||
days:
|
||||
description: 'Number of days.'
|
||||
required: true
|
||||
default: 0
|
||||
minimum_runs:
|
||||
description: 'The minimum runs to keep for each workflow.'
|
||||
required: true
|
||||
default: 0
|
||||
delete_workflow_pattern:
|
||||
description: 'The name or filename of the workflow. if not set then it will target all workflows.'
|
||||
required: false
|
||||
delete_workflow_by_state_pattern:
|
||||
description: 'Remove workflow by state: active, deleted, disabled_fork, disabled_inactivity, disabled_manually'
|
||||
required: true
|
||||
default: "All"
|
||||
type: choice
|
||||
options:
|
||||
- "All"
|
||||
- active
|
||||
- deleted
|
||||
- disabled_inactivity
|
||||
- disabled_manually
|
||||
delete_run_by_conclusion_pattern:
|
||||
description: 'Remove workflow by conclusion: action_required, cancelled, failure, skipped, success'
|
||||
required: true
|
||||
default: "All"
|
||||
type: choice
|
||||
options:
|
||||
- "All"
|
||||
- action_required
|
||||
- cancelled
|
||||
- failure
|
||||
- skipped
|
||||
- success
|
||||
dry_run:
|
||||
description: 'Only log actions, do not perform any delete operations.'
|
||||
required: false
|
||||
|
||||
jobs:
|
||||
del_runs:
|
||||
runs-on: ubuntu-latest
|
||||
permissions:
|
||||
actions: write
|
||||
steps:
|
||||
- name: Delete workflow runs
|
||||
uses: Mattraks/delete-workflow-runs@v2
|
||||
with:
|
||||
token: ${{ github.token }}
|
||||
repository: ${{ github.repository }}
|
||||
retain_days: ${{ github.event.inputs.days }}
|
||||
keep_minimum_runs: ${{ github.event.inputs.minimum_runs }}
|
||||
delete_workflow_pattern: ${{ github.event.inputs.delete_workflow_pattern }}
|
||||
delete_workflow_by_state_pattern: ${{ github.event.inputs.delete_workflow_by_state_pattern }}
|
||||
delete_run_by_conclusion_pattern: ${{ github.event.inputs.delete_run_by_conclusion_pattern }}
|
||||
dry_run: ${{ github.event.inputs.dry_run }}
|
||||
83
.github/workflows/update-submodules.yml
vendored
83
.github/workflows/update-submodules.yml
vendored
|
|
@ -1,43 +1,58 @@
|
|||
---
|
||||
name: Update submodules!
|
||||
name: Update Submodules
|
||||
|
||||
#############################
|
||||
# Start the job on all push #
|
||||
#############################
|
||||
on:
|
||||
schedule:
|
||||
- cron: "0 0 */7 * *"
|
||||
workflow_dispatch:
|
||||
|
||||
###############
|
||||
# Set the Job #
|
||||
###############
|
||||
jobs:
|
||||
build:
|
||||
name: Update submodules
|
||||
update-submodules:
|
||||
runs-on: ubuntu-latest
|
||||
env:
|
||||
PARENT_REPOSITORY: 'qnblackcat/uYouPlus'
|
||||
CHECKOUT_BRANCH: 'main'
|
||||
PR_AGAINST_BRANCH: 'main'
|
||||
OWNER: 'qnblackcat'
|
||||
|
||||
steps:
|
||||
##########################
|
||||
# Checkout the code base #
|
||||
##########################
|
||||
- name: Checkout Code
|
||||
uses: actions/checkout@v3
|
||||
- name: Checkout code
|
||||
uses: actions/checkout@v4.1.1
|
||||
|
||||
####################################
|
||||
# Run the action against code base #
|
||||
####################################
|
||||
- name: run action
|
||||
id: run_action
|
||||
uses: qnblackcat/github-action-create-pr-parent-submodule@main
|
||||
with:
|
||||
github_token: ${{ secrets.RELEASE_HUB_SECRET }}
|
||||
parent_repository: ${{ env.PARENT_REPOSITORY }}
|
||||
checkout_branch: ${{ env.CHECKOUT_BRANCH }}
|
||||
pr_against_branch: ${{ env.PR_AGAINST_BRANCH }}
|
||||
owner: ${{ env.OWNER }}
|
||||
- name: Set up Git
|
||||
run: |
|
||||
git config --global user.email "actions@github.com"
|
||||
git config --global user.name "GitHub Actions"
|
||||
|
||||
- name: Update submodules
|
||||
run: |
|
||||
git submodule update --init --recursive --remote Tweaks/Alderis
|
||||
git add .
|
||||
git submodule update --init --recursive --remote Tweaks/DontEatMyContent
|
||||
git add .
|
||||
git submodule update --init --recursive --remote Tweaks/YTHoldForSpeed
|
||||
git add .
|
||||
git submodule update --init --recursive --remote Tweaks/PSHeader
|
||||
git add .
|
||||
git submodule update --init --recursive --remote Tweaks/Return-YouTube-Dislikes
|
||||
git add .
|
||||
git submodule update --init --recursive --remote Tweaks/YTABConfig
|
||||
git add .
|
||||
git submodule update --init --recursive --remote Tweaks/YTUHD
|
||||
git add .
|
||||
git submodule update --init --recursive --remote Tweaks/YTVideoOverlay
|
||||
git add .
|
||||
git submodule update --init --recursive --remote Tweaks/YouMute
|
||||
git add .
|
||||
git submodule update --init --recursive --remote Tweaks/YouPiP
|
||||
git add .
|
||||
git submodule update --init --recursive --remote Tweaks/YouQuality
|
||||
git add .
|
||||
git submodule update --init --recursive --remote Tweaks/YouTubeHeader
|
||||
git add .
|
||||
git submodule update --init --recursive --remote Tweaks/iSponsorBlock
|
||||
git add .
|
||||
git submodule update --init --recursive
|
||||
git commit -m "updated submodules"
|
||||
git push
|
||||
continue-on-error: true
|
||||
|
||||
- name: Check exit code
|
||||
run: |
|
||||
exit_code=$?
|
||||
if [ $exit_code -ne 0 ]; then
|
||||
echo "Submodule update failed with exit code $exit_code"
|
||||
exit 1
|
||||
fi
|
||||
|
|
|
|||
19
.gitmodules
vendored
19
.gitmodules
vendored
|
|
@ -20,8 +20,8 @@
|
|||
branch = main
|
||||
[submodule "Tweaks/Return-YouTube-Dislikes"]
|
||||
path = Tweaks/Return-YouTube-Dislikes
|
||||
url = https://github.com/PoomSmart/Return-YouTube-Dislikes.git
|
||||
branch = main
|
||||
url = https://github.com/arichorn/Return-YouTube-Dislikes.git
|
||||
branch = uYouPlusExtra
|
||||
[submodule "Tweaks/YouTubeHeader"]
|
||||
path = Tweaks/YouTubeHeader
|
||||
url = https://github.com/PoomSmart/YouTubeHeader.git
|
||||
|
|
@ -36,11 +36,8 @@
|
|||
branch = main
|
||||
[submodule "Tweaks/YTABConfig"]
|
||||
path = Tweaks/YTABConfig
|
||||
url = https://github.com/PoomSmart/YTABConfig.git
|
||||
url = https://github.com/arichorn/YTABConfig.git
|
||||
branch = main
|
||||
[submodule "Tweaks/FLEXing"]
|
||||
path = Tweaks/FLEXing
|
||||
url = https://github.com/NSExceptional/FLEXing
|
||||
[submodule "Tweaks/Alderis"]
|
||||
path = Tweaks/Alderis
|
||||
url = https://github.com/hbang/Alderis.git
|
||||
|
|
@ -54,3 +51,13 @@
|
|||
path = Tweaks/iSponsorBlock
|
||||
url = https://github.com/Galactic-Dev/iSponsorBlock.git
|
||||
branch = master
|
||||
[submodule "Tweaks/MrBeastify"]
|
||||
path = Tweaks/MrBeastify
|
||||
url = https://github.com/arichorn/MrBeastify.git
|
||||
branch = main
|
||||
[submodule "Tweaks/FLEXing"]
|
||||
path = Tweaks/FLEXing
|
||||
url = https://github.com/PoomSmart/FLEXing
|
||||
[submodule "Tweaks/YTHoldForSpeed"]
|
||||
path = Tweaks/YTHoldForSpeed
|
||||
url = https://github.com/arichorn/YTHoldForSpeed.git
|
||||
|
|
|
|||
1
Bundles/YTHoldForSpeed.bundle
Symbolic link
1
Bundles/YTHoldForSpeed.bundle
Symbolic link
|
|
@ -0,0 +1 @@
|
|||
../Tweaks/YTHoldForSpeed/layout/Library/Application Support/YTHoldForSpeed.bundle
|
||||
1
Bundles/YTNoCommunityPosts.bundle
Symbolic link
1
Bundles/YTNoCommunityPosts.bundle
Symbolic link
|
|
@ -0,0 +1 @@
|
|||
../Tweaks/YTNoCommunityPosts/layout/Library/Application Support/YTNoCommunityPosts.bundle
|
||||
1
Bundles/YTVideoOverlay.bundle
Symbolic link
1
Bundles/YTVideoOverlay.bundle
Symbolic link
|
|
@ -0,0 +1 @@
|
|||
../Tweaks/YTVideoOverlay/layout/Library/Application Support/YTVideoOverlay.bundle
|
||||
1
Bundles/YouMute.bundle
Symbolic link
1
Bundles/YouMute.bundle
Symbolic link
|
|
@ -0,0 +1 @@
|
|||
../Tweaks/YouMute/layout/Library/Application Support/YouMute.bundle
|
||||
1
Bundles/YouQuality.bundle
Symbolic link
1
Bundles/YouQuality.bundle
Symbolic link
|
|
@ -0,0 +1 @@
|
|||
../Tweaks/YouQuality/layout/Library/Application Support/YouQuality.bundle
|
||||
14
Makefile
14
Makefile
|
|
@ -1,4 +1,4 @@
|
|||
export TARGET = iphone:clang:15.5:14.0
|
||||
export TARGET = iphone:clang:16.2:14.0
|
||||
export ARCHS = arm64
|
||||
|
||||
export libcolorpicker_ARCHS = arm64
|
||||
|
|
@ -14,7 +14,7 @@ MODULES = jailed
|
|||
endif
|
||||
|
||||
ifndef YOUTUBE_VERSION
|
||||
YOUTUBE_VERSION = 18.32.2
|
||||
YOUTUBE_VERSION = 18.46.3
|
||||
endif
|
||||
ifndef UYOU_VERSION
|
||||
UYOU_VERSION = 3.0.1
|
||||
|
|
@ -26,10 +26,10 @@ TWEAK_NAME = uYouPlus
|
|||
DISPLAY_NAME = YouTube
|
||||
BUNDLE_ID = com.google.ios.youtube
|
||||
|
||||
$(TWEAK_NAME)_FILES = uYouPlus.xm Settings.xm
|
||||
$(TWEAK_NAME)_FILES = uYouPlus.xm Settings.xm $(shell find Source -name '*.xm' -o -name '*.x' -o -name '*.m')
|
||||
$(TWEAK_NAME)_FRAMEWORKS = UIKit Security
|
||||
$(TWEAK_NAME)_CFLAGS = -fobjc-arc -DTWEAK_VERSION=\"$(PACKAGE_VERSION)\"
|
||||
$(TWEAK_NAME)_INJECT_DYLIBS = Tweaks/uYou/Library/MobileSubstrate/DynamicLibraries/uYou.dylib $(THEOS_OBJ_DIR)/libFLEX.dylib $(THEOS_OBJ_DIR)/iSponsorBlock.dylib $(THEOS_OBJ_DIR)/YouPiP.dylib $(THEOS_OBJ_DIR)/YouTubeDislikesReturn.dylib $(THEOS_OBJ_DIR)/YTABConfig.dylib $(THEOS_OBJ_DIR)/YTUHD.dylib $(THEOS_OBJ_DIR)/DontEatMyContent.dylib
|
||||
$(TWEAK_NAME)_INJECT_DYLIBS = Tweaks/uYou/Library/MobileSubstrate/DynamicLibraries/uYou.dylib $(THEOS_OBJ_DIR)/libFLEX.dylib $(THEOS_OBJ_DIR)/iSponsorBlock.dylib $(THEOS_OBJ_DIR)/YouPiP.dylib $(THEOS_OBJ_DIR)/YouTubeDislikesReturn.dylib $(THEOS_OBJ_DIR)/YTABConfig.dylib $(THEOS_OBJ_DIR)/YTUHD.dylib $(THEOS_OBJ_DIR)/DontEatMyContent.dylib .theos/obj/YTHoldForSpeed.dylib $(THEOS_OBJ_DIR)/YTNoCommunityPosts.dylib $(THEOS_OBJ_DIR)/YTVideoOverlay.dylib $(THEOS_OBJ_DIR)/YouMute.dylib $(THEOS_OBJ_DIR)/YouQuality.dylib
|
||||
$(TWEAK_NAME)_EMBED_LIBRARIES = $(THEOS_OBJ_DIR)/libcolorpicker.dylib
|
||||
$(TWEAK_NAME)_EMBED_FRAMEWORKS = $(_THEOS_LOCAL_DATA_DIR)/$(THEOS_OBJ_DIR_NAME)/install/Library/Frameworks/Alderis.framework
|
||||
$(TWEAK_NAME)_EMBED_BUNDLES = $(wildcard Bundles/*.bundle)
|
||||
|
|
@ -37,7 +37,7 @@ $(TWEAK_NAME)_EMBED_EXTENSIONS = $(wildcard Extensions/*.appex)
|
|||
|
||||
include $(THEOS)/makefiles/common.mk
|
||||
ifneq ($(JAILBROKEN),1)
|
||||
SUBPROJECTS += Tweaks/Alderis Tweaks/FLEXing/libflex Tweaks/iSponsorBlock Tweaks/Return-YouTube-Dislikes Tweaks/YouPiP Tweaks/YTABConfig Tweaks/YTUHD Tweaks/DontEatMyContent Tweaks/YTVideoOverlay Tweaks/YouMute Tweaks/YouQuality
|
||||
SUBPROJECTS += Tweaks/Alderis Tweaks/FLEXing/libflex Tweaks/iSponsorBlock Tweaks/Return-YouTube-Dislikes Tweaks/YouPiP Tweaks/YTABConfig Tweaks/YTUHD Tweaks/DontEatMyContent Tweaks/YTHoldForSpeed Tweaks/YTVideoOverlay Tweaks/YouMute Tweaks/YouQuality
|
||||
include $(THEOS_MAKE_PATH)/aggregate.mk
|
||||
endif
|
||||
include $(THEOS_MAKE_PATH)/tweak.mk
|
||||
|
|
@ -61,8 +61,8 @@ before-all::
|
|||
fi
|
||||
before-all::
|
||||
@if [[ ! -f $(UYOU_DEB) ]]; then \
|
||||
curl -s https://miro92.com/repo/debs/com.miro.uyou_$(UYOU_VERSION)_iphoneos-arm.deb -o $(UYOU_DEB); \
|
||||
fi; \
|
||||
curl -s -L "https://www.dropbox.com/scl/fi/5f0esi1en9so7t8lhmyjm/com.miro.uyou_$(UYOU_VERSION)_iphoneos-arm.deb?rlkey=00nncobda6tcfvhzid5or1lnn&dl=1" -o $(UYOU_DEB); \
|
||||
fi; \
|
||||
if [[ ! -f $(UYOU_DYLIB) || ! -d $(UYOU_BUNDLE) ]]; then \
|
||||
tar -xf Tweaks/uYou/com.miro.uyou_$(UYOU_VERSION)_iphoneos-arm.deb -C Tweaks/uYou; tar -xf Tweaks/uYou/data.tar* -C Tweaks/uYou; \
|
||||
if [[ ! -f $(UYOU_DYLIB) || ! -d $(UYOU_BUNDLE) ]]; then \
|
||||
|
|
|
|||
291
README.md
291
README.md
|
|
@ -1,134 +1,180 @@
|
|||

|
||||
***
|
||||
<h4> What shall be the new Tweak Name to replace the name uYouPlusExtra? https://github.com/arichorn/uYouPlusExtra/discussions/236 </h4>
|
||||
|
||||
<p align="center">
|
||||
<img src="https://img.shields.io/badge/Platform-iOS%20%7C%20iPadOS%2014.0%2B-yellow" alt="Badge"/>
|
||||
<a href="https://github.com/qnblackcat/uYouPlus/wiki/FAQ"><img src="https://img.shields.io/badge/Question%3F-FAQ-yellow" alt="Badge"></img></a>
|
||||
<a href="https://github.com/qnblackcat/uYouPlus/wiki/FAQ"><img src="https://custom-icon-badges.demolab.com/badge/translate-blue.svg?logo=translate&logoColor=white" alt="Badge"></img></a>
|
||||
|
||||
|
||||
|
||||
<a href="https://user-images.githubusercontent.com/78001398/271790092-006e81cc-715a-4fbc-aff6-15832e2da8c4.png">
|
||||
<img src="https://user-images.githubusercontent.com/78001398/271790092-006e81cc-715a-4fbc-aff6-15832e2da8c4.png" alt="UYOUPLUS_LOGO" width="200" height="200">
|
||||
</a>
|
||||
</p>
|
||||
|
||||
<p align="center">
|
||||
<a href="https://github.com/qnblackcat/uYouPlus/releases/latest"><img src="https://custom-icon-badges.demolab.com/github/v/release/qnblackcat/uYouPlus?color=brightgreen&label=Latest%20release" alt="Badge"></img></a>
|
||||
<a href="https://github.com/qnblackcat/uYouPlus/releases/latest"><img src="https://img.shields.io/github/downloads/qnblackcat/uYouPlus/total?label=Download" alt="Badge"></img></a>
|
||||
<a href="https://github.com/qnblackcat/uYouPlus/commit"><img src="https://custom-icon-badges.demolab.com/github/last-commit/qnblackcat/uYouPlus?logo=history&logoColor=white&label=Last commit" alt="Badge"></img></a>
|
||||
<a href="https://github.com/qnblackcat/uYouPlus/issues"><img src="https://custom-icon-badges.demolab.com/github/issues-raw/qnblackcat/uYouPlus?logo=issue-opened&label=Issues" alt="Badge"></img></a>
|
||||
|
||||
<a href="https://user-images.githubusercontent.com/52943116/189822859-8a0952db-9264-4b5b-9cbe-d0a87b2db5a0.PNG">
|
||||
<img src="https://user-images.githubusercontent.com/78001398/271856328-dc45c8de-fb9c-403f-b287-3b9b270b84eb.png" alt="UYOUPLUS_SCREENSHOTS">
|
||||
</a>
|
||||
</p>
|
||||
|
||||
<p align="center">
|
||||
<img src="https://img.shields.io/github/stars/qnblackcat/uYouPlus?style=social" alt="Badge"/>
|
||||
<img src="https://img.shields.io/github/forks/qnblackcat/uYouPlus?style=social" alt="Badge"/>
|
||||
<a href="https://github.com/qnblackcat/uYouPlus#support-the-developers"><img src="https://img.shields.io/badge/-Support-lightgrey?style=social&logo=paypal" alt="Badge"></img></a>
|
||||
<img src="https://img.shields.io/badge/Platform-iOS%20%7C%20iPadOS%2014.0%2B-yellow?logo=apple&logoColor=darkgray" alt="Platform Badge">
|
||||
</p>
|
||||
|
||||
<p align="center">
|
||||
<a href="https://github.com/arichorn/uYouPlusExtra/releases/latest"><img src="https://custom-icon-badges.demolab.com/github/v/release/arichorn/uYouPlusExtra?logo=youtube&color=%23e81e8a&label=Latest%20Release" alt="Latest Release Badge"></a>
|
||||
<a href="https://github.com/arichorn/uYouPlusExtra/releases/latest"><img src="https://img.shields.io/github/downloads/qnblackcat/uYouPlus/total?color=%23e81e8a&label=Downloads&logo=cloudsmith&logoColor=white" alt="Download Badge"></a>
|
||||
<a href="https://github.com/arichorn/uYouPlusExtra/commit"><img src="https://custom-icon-badges.demolab.com/github/last-commit/arichorn/uYouPlusExtra?logo=history&logoColor=white&color=%23e81e8a&label=Last%20Commit" alt="Last Commit Badge"></a>
|
||||
<a href="https://github.com/arichorn/uYouPlusExtra/issues"><img src="https://custom-icon-badges.demolab.com/github/issues-raw/arichorn/uYouPlusExtra?logo=issue-opened&logoColor=white&color=%23e81e8a&label=Issues" alt="Issues Badge"></a>
|
||||
</p>
|
||||
|
||||
<p align="center">
|
||||
<a href="https://github.com/arichorn/uYouPlusExtra/stargazers"><img src="https://custom-icon-badges.demolab.com/github/stars/arichorn/uYouPlusExtra?logo=star&logoColor=white&color=%23e81e8a&label=Stars" alt="Stars Badge"></img></a>
|
||||
<a href="https://github.com/arichorn/uYouPlusExtra/network/members"><img src="https://custom-icon-badges.demolab.com/github/forks/arichorn/uYouPlusExtra?logo=github&logoColor=white&color=%23e81e8a&label=Forks"></a>
|
||||
</p>
|
||||
|
||||
# Table of Contents
|
||||
|
||||
* [Credits](#credits)
|
||||
* [Features](#features)
|
||||
* [Known issues](#known-issues)
|
||||
* [Download](#download)
|
||||
* [Installation](#installation)
|
||||
* [Support the developers!](#support-the-developers)
|
||||
* [FAQ](#faq)
|
||||
* [Building](#building-optional)
|
||||
[](#credits)<br>
|
||||
[](#features)<br>
|
||||
[](#known-issues)<br>
|
||||
[](#download)<br>
|
||||
[](#installation)<br>
|
||||
[](#support-the-developers)<br>
|
||||
[](#faq)<br>
|
||||
[](#building-optional)
|
||||
|
||||
# Credits
|
||||
- Special thanks to all the developers who have contributed to uYouPlus!
|
||||
- Special thanks to all the developers who have worked on uYouPlus/uYouPlusExtra!
|
||||
|
||||
<table id='credit'>
|
||||
<tr>
|
||||
<td id='miro92'>
|
||||
<td align="center">
|
||||
<a href='https://github.com/MiRO92'>
|
||||
<img src='https://github.com/MiRO92.png' width='140px;'>
|
||||
<img src='https://user-images.githubusercontent.com/78001398/271811861-da79accc-095c-4cb3-b7b4-8d48b1449259.png' width='110px'>
|
||||
</a>
|
||||
<h4 align='center'><a href='https://twitter.com/miro92'>MiRO92</a></h4>
|
||||
<br>
|
||||
<a href='https://twitter.com/miro92'>MiRO92</a>
|
||||
</td>
|
||||
<td id='poomsmart'>
|
||||
<td align="center">
|
||||
<a href='https://github.com/qnblackcat'>
|
||||
<img src='https://user-images.githubusercontent.com/78001398/271812521-e52ebf96-7272-4ec0-a149-8e721c053508.png' width='110px'>
|
||||
</a>
|
||||
<br>
|
||||
<a href='https://twitter.com/qnblackcat'>qnblackcat</a>
|
||||
</td>
|
||||
<td align="center">
|
||||
<a href='https://github.com/PoomSmart'>
|
||||
<img src='https://github.com/PoomSmart.png' width='140px;'>
|
||||
<img src='https://user-images.githubusercontent.com/78001398/271811615-96093202-4aec-4e50-a750-8c7b83f3862c.png' width='110px'>
|
||||
</a>
|
||||
<h4 align='center'><a href='https://twitter.com/poomsmart'>PoomSmart</a></h4>
|
||||
<br>
|
||||
<a href='https://twitter.com/poomsmart'>PoomSmart</a>
|
||||
</td>
|
||||
<td id='level3tjg'>
|
||||
<td align="center">
|
||||
<a href='https://github.com/level3tjg'>
|
||||
<img src='https://github.com/level3tjg.png' width='140px;'>
|
||||
<img src='https://user-images.githubusercontent.com/78001398/271812596-7854996a-3825-4971-a9ff-1001b4d153cb.png' width='110px'>
|
||||
</a>
|
||||
<h4 align='center'><a href='https://twitter.com/level3tjg'>level3tjg</a></h4>
|
||||
<br>
|
||||
<a href='https://twitter.com/level3tjg'>level3tjg</a>
|
||||
</td>
|
||||
<td id='bandarHL'>
|
||||
<td align="center">
|
||||
<a href='https://github.com/BandarHL'>
|
||||
<img src='https://github.com/BandarHL.png' width='140px;'>
|
||||
<img src='https://user-images.githubusercontent.com/78001398/271812729-2bb63da0-5239-43a4-aa3e-e1daa67e8dc2.png' width='110px'>
|
||||
</a>
|
||||
<h4 align='center'><a href='https://twitter.com/bandarhl'>BandarHelal</a></h4>
|
||||
<br>
|
||||
<a href='https://twitter.com/bandarhl'>BandarHelal</a>
|
||||
</td>
|
||||
<td id='galactic-dev'>
|
||||
<td align="center">
|
||||
<a href='https://github.com/Galactic-Dev'>
|
||||
<img src='https://github.com/Galactic-Dev.png' width='140px;'>
|
||||
<img src='https://user-images.githubusercontent.com/78001398/271812231-5b7d5d9f-6d19-4174-8478-8f07379ee1ca.png' width='110px'>
|
||||
</a>
|
||||
<h4 align='center'><a href='https://twitter.com/dev_galactic'>galactic</a></h4>
|
||||
<br>
|
||||
<a href='https://twitter.com/dev_galactic'>galactic</a>
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td id='julioverne'>
|
||||
<td align="center">
|
||||
<a href='https://github.com/julioverne'>
|
||||
<img src='https://github.com/julioverne.png' width='140px;'>
|
||||
<img src='https://user-images.githubusercontent.com/78001398/271812914-bf26d603-2d94-49f4-9702-f5e66af3f44a.png' width='110px'>
|
||||
</a>
|
||||
<h4 align='center'><a href='https://twitter.com/ijulioverne'>julioverne</a></h4>
|
||||
<br>
|
||||
<a href='https://twitter.com/ijulioverne'>julioverne</a>
|
||||
</td>
|
||||
<td id='hbang'>
|
||||
<td align="center">
|
||||
<a href='https://github.com/hbang'>
|
||||
<img src='https://github.com/hbang.png' width='140px;'>
|
||||
<img src='https://user-images.githubusercontent.com/78001398/271813035-2e168ee5-fc47-43a6-9307-0fc20c7fca60.png' width='110px'>
|
||||
</a>
|
||||
<h4 align='center'><a href='https://twitter.com/hashbang'>HASHBANG</a></h4>
|
||||
<br>
|
||||
<a href='https://twitter.com/hashbang'>HASHBANG</a>
|
||||
</td>
|
||||
<td id='lyvendia'>
|
||||
<td align="center">
|
||||
<a href='https://github.com/Lyvendia'>
|
||||
<img src='https://github.com/Lyvendia.png' width='140px;'>
|
||||
<img src='https://user-images.githubusercontent.com/78001398/271812187-1c0d5b24-caba-4616-b875-4c458d10ca55.png' width='110px'>
|
||||
</a>
|
||||
<h4 align='center'><a href='https://github.com/Lyvendia'>Lyvendia</a></h4>
|
||||
<br>
|
||||
<a href='https://github.com/Lyvendia'>Lyvendia</a>
|
||||
</td>
|
||||
<td id='foxster'>
|
||||
<td align="center">
|
||||
<a href='https://github.com/therealFoxster'>
|
||||
<img src='https://github.com/therealFoxster.png' width='140px;'>
|
||||
<img src='https://user-images.githubusercontent.com/78001398/271812075-923038a7-5ffa-4ea4-9de4-fdf4e5d556c2.png' width='110px'>
|
||||
</a>
|
||||
<h4 align='center'><a href='https://twitter.com/therealFoxster'>Foxster</a></h4>
|
||||
<br>
|
||||
<a href='https://twitter.com/therealFoxster'>Foxster</a>
|
||||
</td>
|
||||
<td id='ichitaso'>
|
||||
<td align="center">
|
||||
<a href='https://github.com/ichitaso'>
|
||||
<img src='https://github.com/ichitaso.png' width='140px;'>
|
||||
<img src='https://user-images.githubusercontent.com/78001398/271812398-c7e40fa3-4e0b-4be2-aa51-900444d59abd.png' width='110px'>
|
||||
</a>
|
||||
<h4 align='center'><a href='https://twitter.com/ichitaso'>ichitaso</a></h4>
|
||||
<br>
|
||||
<a href='https://twitter.com/ichitaso'>ichitaso</a>
|
||||
</td>
|
||||
<td align="center">
|
||||
<a href='https://github.com/AhmedBafkir'>
|
||||
<img src='https://user-images.githubusercontent.com/78001398/271813114-dcb005f7-b83b-40e6-a9cb-9b661dd6b33b.png' width='110px'>
|
||||
</a>
|
||||
<br>
|
||||
<a href='https://twitter.com/Peaceful_0'>Ahmed Bafkir</a>
|
||||
</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'>
|
||||
<td align="center">
|
||||
<a href='https://github.com/CokePokes'>
|
||||
<img src='https://github.com/CokePokes.png' width='140px;'>
|
||||
<img src='https://user-images.githubusercontent.com/78001398/271813228-d28471b4-cb67-442c-bd63-276f1641a14e.png' width='110px'>
|
||||
</a>
|
||||
<h4 align='center'><a href='https://twitter.com/cokepokes'>CokePokes</a></h4>
|
||||
<br>
|
||||
<a href='https://twitter.com/cokepokes'>CokePokes</a>
|
||||
</td>
|
||||
<td id='isnackable'>
|
||||
<td align="center">
|
||||
<a href='https://github.com/ISnackable'>
|
||||
<img src='https://github.com/ISnackable.png' width='140px;'>
|
||||
<img src='https://user-images.githubusercontent.com/78001398/271813311-2027a8de-a08d-4f1b-97a4-167f4bcef497.png' width='110px'>
|
||||
</a>
|
||||
<h4 align='center'><a href='https://isnackable.me/'>Tommy Teo</a></h4>
|
||||
<br>
|
||||
<a href='https://isnackable.me/'>Tommy Teo</a>
|
||||
</td>
|
||||
<td id='theos-team'>
|
||||
<a href='https://github.com/theos/theos'>
|
||||
<img src='https://github.com/theos.png' width='140px;'>
|
||||
<td align="center">
|
||||
<a href='https://github.com/dayanch96'>
|
||||
<img src='https://user-images.githubusercontent.com/78001398/271853514-129334b3-498f-4804-aceb-392bf5e373e6.png' width='110px;'>
|
||||
</a>
|
||||
<h4 align='center'><a href='https://theos.dev'>theos</a></h4>
|
||||
<br>
|
||||
<a href='https://github.com/dayanch96'>dayanch96</a>
|
||||
</td>
|
||||
<td align="center">
|
||||
<a href='https://github.com/ssuesskind'>
|
||||
<img src='https://user-images.githubusercontent.com/78001398/271853585-77271641-b825-43b1-af57-d9f5b12fe8ff.png' width='110px;'>
|
||||
</a>
|
||||
<br>
|
||||
<a href='https://github.com/ssuesskind'>ssuesskind</a>
|
||||
</td>
|
||||
<td align="center">
|
||||
<a href='https://github.com/balackburn'>
|
||||
<img src='https://user-images.githubusercontent.com/78001398/271853318-3005deb3-b484-4b2b-a093-44c2af79b9af.png' width='110px;'>
|
||||
</a>
|
||||
<br>
|
||||
<a href='https://github.com/balackburn'>balackburn</a>
|
||||
</td>
|
||||
<td align="center">
|
||||
<a href='https://github.com/theos/theos'>
|
||||
<img src='https://user-images.githubusercontent.com/78001398/271813393-56a63730-a56d-41ba-b473-4d37761526c9.png' width='110px'>
|
||||
</a>
|
||||
<br>
|
||||
<a href='https://theos.dev'>theos</a>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
|
@ -146,85 +192,96 @@
|
|||
<details>
|
||||
<summary>And many more...!</summary>
|
||||
|
||||
5. **YTClassicVideoQuality:** since YouTube v16.xx, you need one more step to change the video quality. YTClassicVideoQuality brings back the old video quality selector, which is a lot better than the new one.
|
||||
5. **YTClassicVideoQuality:** Since YouTube v16.xx, changing video quality requires an extra step. YTClassicVideoQuality brings back the old video quality selector, which is more user-friendly than the new one.
|
||||
|
||||
6. **YTNoHoverCards:** offer an option to enable/disable the annoying suggested videos show up at the end of the videos.
|
||||
6. **YTNoHoverCards:** This tweak offers the option to enable or disable the annoying suggested videos that appear at the end of YouTube videos.
|
||||
|
||||
7. **YouRememberCaption**: make YouTube remember your video caption setting (if not already).
|
||||
7. **YouRememberCaption:** YouRememberCaption makes YouTube remember your video caption setting (if not already).
|
||||
|
||||
8. **NoYTPremium**: remove YouTube Premium upsells.
|
||||
8. **NoYTPremium:** NoYTPremium removes YouTube Premium upsells, preventing the ads and promotions for YouTube Premium from appearing.
|
||||
|
||||
9. **YTSpeed**: add 2.25, 2.5, 2.75, and 3x playback speed
|
||||
9. **YTSpeed:** YTSpeed adds additional playback speed options of 2.25x, 2.5x, 2.75x, 3x and more to the YouTube app, providing more flexibility in video playback speed.
|
||||
|
||||
10. **YTMiniplayerEnabler**: enable Miniplayer for all YouTube videos.
|
||||
10. **YTMiniplayerEnabler:** YTMiniplayerEnabler enables the Miniplayer feature for all YouTube videos.
|
||||
|
||||
11. **DontEatMyContent**: prevent the notch/Dynamic Island from munching on 2:1 video content in YouTube.
|
||||
11. **DontEatMyContent:** This tweak prevents the notch or Dynamic Island from obstructing 2:1 video content on YouTube, ensuring a better viewing experience.
|
||||
|
||||
12. **YTABConfig**: allow user to control over YouTube A/B testing flags.
|
||||
12. **YTABConfig:** This tweak gives users control over YouTube's A/B testing flags, allowing them to enable or disable experimental features.
|
||||
|
||||
13. **YouMute**: mute YouTube videos via a button.
|
||||
13. **YouMute:** YouMute provides a button to mute YouTube videos in the video player, offering a convenient way to toggle the audio on and off.
|
||||
|
||||
14. **YouQuality**: change video quality via a button.
|
||||
14. **YouQuality:** YouQuality offers a button to change the video quality of YouTube videos in the video player, allowing quick access to different quality options.
|
||||
|
||||
15. **YTVideoOverlay**: add buttons to overlay the video.
|
||||
15. **YTVideoOverlay:** YTVideoOverlay adds buttons to overlay the video, providing quick access to features like captions, speed control, and quality settings.
|
||||
|
||||
16. **LowContrastMode:** LowContrastMode is a tweak that allows users to darken the text in the YouTube app, making it easier to read. **<-- uYouPlusExtra Exclusive Feature (subject to change)**
|
||||
|
||||
</details>
|
||||
|
||||
# Known issues
|
||||
# Known issues
|
||||
|
||||
- **uYou**: all the known-issues of uYou are listed [here](https://github.com/MiRO92/uYou-for-YouTube/issues). Make sure you take a look at it before reporting any bugs! ***Also, keep in mind that uYou+ is a modified version of uYou, DO NOT bother MiRO92 with problems unrelated to uYou!!!***
|
||||
- **uYou**: All the known issues of uYou are listed [here](https://github.com/MiRO92/uYou-for-YouTube/issues). Make sure you take a look at it before reporting any bugs! Also, keep in mind that uYou+ is a modified version of uYou. DO NOT bother MiRO92 with problems unrelated to uYou!
|
||||
|
||||
- Issues that related to **uYouPlus** are [here](https://github.com/qnblackcat/uYouPlus/issues/)
|
||||
- Issues related to **uYouPlus** can be found [here](https://github.com/qnblackcat/uYouPlus/issues/), or issues related to **uYouPlusExtra** can be found [here](https://github.com/arichorn/uYouPlusExtra/issues/).
|
||||
|
||||
# Download
|
||||
|
||||
- **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).
|
||||
- **uYouPlusExtra** (or you can just call it uYou+) requires iOS or iPadOS 14.0 or later. The latest version of **uYouPlusExtra** ipa can be found in the [Release tab](https://github.com/arichorn/uYouPlusExtra/releases/latest).
|
||||
|
||||
<!-- - For AltStore user:
|
||||
- For AltStore user:
|
||||
|
||||
- My official AltStore repo: https://qnblackcat.github.io/AltStore/
|
||||
- My official AltStore repo: https://therealfoxster.github.io/altsource-viewer/index.html?source=https://raw.githubusercontent.com/arichorn/arichorn.github.io/main/apps.json
|
||||
|
||||
- [Open in AltStore (v18.14.1-3.0)](https://tinyurl.com/yv6wrxjz) - It will take a while to install because AltStore needs to download the IPA first. -->
|
||||
- [Open in AltStore (v18.46.3-3.0.1-F2)](https://tinyurl.com/mutewwdb) - It will take a while to install because AltStore needs to download the IPA first.
|
||||
|
||||
- Version info: _(last update: Aug 5)_
|
||||
- Version info: _(last update: Dec 2 2023)_
|
||||
|
||||
<details>
|
||||
<summary>Expand ℹ️</summary>
|
||||
|
||||
| **Tweaks/App** | **Developer** | **Version** | **Open source** |
|
||||
| - | - | :-: | :-: |
|
||||
| **YouTube** | Google Inc | 18.30.7 | ✖︎ |
|
||||
| [uYou](https://github.com/MiRO92/uYou-for-YouTube) | [MiRO92](https://twitter.com/miro92) | 3.0 | ✖︎ |
|
||||
| **YouTube** | Google Inc | 18.46.3 | ✖︎ |
|
||||
| [uYou](https://github.com/MiRO92/uYou-for-YouTube) | [MiRO92](https://twitter.com/miro92) | 3.0.1 | ✖︎ |
|
||||
| **Open in YouTube** | [CokePokes](https://github.com/CokePokes) | 1.2 | [✔︎](https://github.com/CokePokes/YoutubeExtensions) |
|
||||
| **iSponsorBlock** | [Galactic-Dev](https://github.com/Galactic-Dev) | 1.0-15 | [✔︎](https://github.com/Galactic-Dev/iSponsorBlock) |
|
||||
| **iSponsorBlock** | [Galactic-Dev](https://github.com/Galactic-Dev) | 1.2.1 | [✔︎](https://github.com/Galactic-Dev/iSponsorBlock) |
|
||||
| **BigYTMiniPlayer** | [Galactic-Dev](https://github.com/Galactic-Dev) | 1.0-1 | [✔︎](https://github.com/Galactic-Dev/BigYTMiniPlayer) |
|
||||
| **YTNoHoverCards** | [level3tjg](https://twitter.com/level3tjg) | 0.0.3 | [✔︎](https://github.com/level3tjg/YTNoHoverCards) |
|
||||
| **YTMiniplayerEnabler** | [level3tjg](https://twitter.com/level3tjg) | 0.0.2 | [✔︎](https://github.com/level3tjg/YTMiniplayerEnabler) |
|
||||
| **DontEatMyContent** | [therealFoxster](https://github.com/therealFoxster) | 1.0.6 | [✔︎](https://github.com/therealFoxster/DontEatMyContent) |
|
||||
| **DontEatMyContent** | [therealFoxster](https://github.com/therealFoxster) | 1.0.11 | [✔︎](https://github.com/therealFoxster/DontEatMyContent) |
|
||||
| **YTSpeed** | [Lyvendia](https://github.com/Lyvendia) | 1.0.1 | [✔︎](https://github.com/Lyvendia/YTSpeed) |
|
||||
| **YTCastConfirm** | [JamieBerghmans](https://github.com/JamieBerghmans) | 1.0.0 | [✔︎](https://github.com/JamieBerghmans/YTCastConfirm) |
|
||||
| **Alderis Color Picker** | [HASHBANG Productions](https://github.com/hbang) | 1.2| [✔︎](https://github.com/hbang/Alderis) |
|
||||
| **YTUHD** | [PoomSmart](https://twitter.com/poomsmart) | 1.3.5-1 | [✔︎](https://github.com/PoomSmart/YTUHD) |
|
||||
| **YouPiP** | [PoomSmart](https://twitter.com/poomsmart) | 1.7.19-1 | [✔︎](https://github.com/PoomSmart/YouPiP) |
|
||||
| **Alderis Color Picker** | [HASHBANG Productions](https://github.com/hbang) | 1.2 | [✔︎](https://github.com/hbang/Alderis) |
|
||||
| **YTUHD** | [PoomSmart](https://twitter.com/poomsmart) | 1.4.0-1 | [✔︎](https://github.com/PoomSmart/YTUHD) |
|
||||
| **YouPiP** | [PoomSmart](https://twitter.com/poomsmart) | 1.7.22 | [✔︎](https://github.com/PoomSmart/YouPiP) |
|
||||
| **IAmYouTube** | [PoomSmart](https://twitter.com/poomsmart) | 1.2.0 | [✔︎](https://github.com/PoomSmart/IAmYouTube) |
|
||||
| **YTABConfig** | [PoomSmart](https://twitter.com/poomsmart) | 1.5.0 | [✔︎](https://github.com/PoomSmart/YTABConfig) |
|
||||
| **YTABConfig** | [PoomSmart](https://twitter.com/poomsmart) | 1.5.0-2 | [✔︎](https://github.com/PoomSmart/YTABConfig) |
|
||||
| **YTReExplore** | [PoomSmart](https://twitter.com/poomsmart) | 1.0.2 | [✔︎](https://github.com/PoomSmart/YTReExplore) |
|
||||
| **NoYTPremium** | [PoomSmart](https://twitter.com/poomsmart) | 1.0.4 | [✔︎](https://github.com/PoomSmart/NoYTPremium) |
|
||||
| **YTNoPaidPromo** | [PoomSmart](https://twitter.com/poomsmart) | 1.0.0 | [✔︎](https://github.com/PoomSmart/YTNoPaidPromo) |
|
||||
| **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.11.3 | [✔︎](https://github.com/PoomSmart/Return-YouTube-Dislikes) |
|
||||
| **Return YouTube Dislike** | [PoomSmart](https://twitter.com/poomsmart) | 1.11.4 | [✔︎](https://github.com/PoomSmart/Return-YouTube-Dislikes) |
|
||||
| **YouMute** | [PoomSmart](https://twitter.com/poomsmart) | 1.2.1-2 | [✔︎](https://github.com/PoomSmart/YouMute) |
|
||||
| **YouQuality** | [PoomSmart](https://twitter.com/poomsmart) | 1.1.4 | [✔︎](https://github.com/PoomSmart/YouQuality) |
|
||||
| **YTVideoOverlay** | [PoomSmart](https://twitter.com/poomsmart) | 1.1.0-2 | [✔︎](https://github.com/PoomSmart/YTVideoOverlay) |
|
||||
| **YTVideoOverlay** | [PoomSmart](https://twitter.com/poomsmart) | 1.1.1-1 | [✔︎](https://github.com/PoomSmart/YTVideoOverlay) |
|
||||
| **YTHoldForSpeed** | [joshuaseltzer](https://github.com/joshuaseltzer) | 1.0.7 | [✔︎](https://github.com/joshuaseltzer/YTHoldForSpeed) |
|
||||
| **LowContrastMode** | [arichorn](https://github.com/arichorn) | 1.5.1 | [✔︎](https://github.com/arichorn/YTLowContrastMode) |
|
||||
|
||||
</details>
|
||||
|
||||
# uYou Tweak Compatibility List
|
||||
|
||||
| Developer | Tweak Name and Version | App Version Compatibility | iOS Version Compatibility |
|
||||
|-----------|-----------------------|--------------------------|--------------------------|
|
||||
| MiRO92 | uYou 2.1/2.3~1 | v16.42.3 - 18.01.6 | iOS 13 - iOS 15 |
|
||||
| MiRO92 | uYou 3.0 | v18.06.6 - 18.18.2 | iOS 14 - iOS 15 |
|
||||
| MiRO92 | uYou 3.0.1 | v18.28.3 - v18.41.5 | iOS 14 - iOS 17 |
|
||||
|
||||
# Installation
|
||||
See [Installation - Wiki](https://github.com/qnblackcat/uYouPlus/wiki/Installation).
|
||||
|
||||
# Support the developers
|
||||
- [**MiRO92**](https://twitter.com/miro92): https://github.com/MiRO92/uYou-for-YouTube#support
|
||||
- [**Poomsmart**](https://twitter.com/poomsmart): https://poomsmart.github.io
|
||||
- [**level3tjg**](https://twitter.com/level3tjg): https://ko-fi.com/level3tjg
|
||||
- [**BandarHL**](https://twitter.com/bandarhl): https://www.paypal.com/paypalme/BandarHL
|
||||
- [**julioverne**](https://twitter.com/ijulioverne): https://www.patreon.com/julioverne
|
||||
|
|
@ -238,4 +295,32 @@ See [FAQ - Wiki](https://github.com/qnblackcat/uYouPlus/wiki/FAQ).
|
|||
|
||||
# Building (optional)
|
||||
|
||||
See [Building - Wiki](https://github.com/qnblackcat/uYouPlus/wiki/Building).
|
||||
See [qnblackcat/Building - Wiki](https://github.com/qnblackcat/uYouPlus/wiki/Building)
|
||||
or [arichorn/Building - Wiki](https://github.com/arichorn/uYouPlusExtra/wiki/Building).
|
||||
|
||||
<details>
|
||||
<summary>Balackburn's YTLitePlus</summary><br>
|
||||
- Change from uYouPlus/uYouPlusExtra to YTLitePlus (optional)
|
||||
|
||||
Hello, this is here to showcase this tweak. I have been seeing the YTLitePlus tweak on Reddit for quite some time now and decided to join in. Before you download the tweak, you should take a look at the pros and cons below to learn more about the tweak.
|
||||
|
||||
https://github.com/Balackburn/YTLitePlus/releases
|
||||
|
||||
**Pros**
|
||||
|
||||
- YTLitePlus is stable and more customizable than uYouPlus/uYouPlusExtra.
|
||||
|
||||
- YTLitePlus provides more features in YTLite & YTLitePlus Sections in Settings that uYouPlus/uYouPlusExtra may not have.
|
||||
|
||||
- YTLitePlus includes a lightweight version of the App Version Spoofer, making it easier to use.
|
||||
|
||||
- YTLitePlus does not cause your device to overheat, unlike uYouPlusExtra.
|
||||
|
||||
**Cons**
|
||||
|
||||
- No custom video downloading feature in YTLitePlus.
|
||||
|
||||
- Video quality on WiFi option is not available in YTLitePlus.
|
||||
|
||||
- Reordering the pivot bar tabs such as ‘Home‘, ‘Shorts‘, ‘Explore‘, ‘Trending‘, Create‘, ‘Subscriptions‘ & ‘You‘ is not available in YTLitePlus.
|
||||
</details>
|
||||
|
|
|
|||
20
SECURITY.md
Normal file
20
SECURITY.md
Normal file
|
|
@ -0,0 +1,20 @@
|
|||
# Security Policy for This Repostory
|
||||
If I verify a reported security vulnerability, my policy is:
|
||||
|
||||
- Contributors are allowed to make patches only to the main branch, unless an additional branch is involved. This policy applies to the implementation of custom features/options, updated features/options, and grammar errors.
|
||||
|
||||
- uYouPlusExtra does not support Localization pull requests. While it may seem like a sudden change, maintaining localization becomes challenging when the branch needs to be reset due to the changes from qnblackcat/uYouPlus repostory. Therefore, it is difficult to preserve any localization changes that were added on uYouPlusExtra.
|
||||
|
||||
- The Users **qnblackcat** and **PoomSmart** are prohibited from utilizing any new code introduced in the uYouPlusExtra fork, but I'll allow you to use any type of submodules and allow you to utize the code you made. but Violation of this rule from the ones I don't allow will result in appropriate consequences, including but not limited to account suspension, access revocation, or other disciplinary actions as deemed necessary by the project administrators. Furthermore, it is strictly forbidden to publicly share or showcase the content of this policy on any social media platforms. Any breach of this restriction may result in similar disciplinary actions. This was policy was made to keep any rejected features on uYouPlusExtra.
|
||||
|
||||
## Supported Versions
|
||||
|
||||
these versions of the project are
|
||||
currently being supported with security/feature updates.
|
||||
|
||||
| Version | LTS Support of the uYouPlusExtra Tweak | YT Version Supported by Google | App Stability | uYou Functionality |
|
||||
| ------- | -------------------------------------- | ------------------------------ | -------------------- | ------------------ |
|
||||
| [latest](https://github.com/arichorn/uYouPlusExtra/releases/latest) | ✅ | ✅ | The latest version is stable! |
|
||||
| [18.08.1-3.0.1 LTS](https://github.com/arichorn/uYouPlusExtra/releases/tag/v18.08.1-3.0.1-F4) | ✅ | ✅ | This new LTS Release is only here to give users the version **18.08.1** of YouTube and also helps fix any new issues that uYou 3.0.1 Users originally had. |
|
||||
| [17.38.10-2.1 LTS](https://github.com/arichorn/uYouPlusExtra/releases/latest) | N/A | ✅ | This new LTS Release will soon to replace and discontinue **16.42.3-2.1** next year. | uYou Video/Audio Downloading is Offline. / kCFErrorDomainCFNetwork error 303 🚫 |
|
||||
| [16.42.3-2.1 LTS](https://github.com/arichorn/uYouPlusExtra/releases/tag/v16.42.3-2.1-F20) | Depends| ✅ until 2024+ | If you're using iOS 16 or later, please note that Stage Manager may not be sized correctly when videos are playing in the video player. Additionally, the App Pivot Bar may not hide correctly when playing videos. also iOS 16 or newer has compatibility issues of other factors within the app. However, this version of YouTube can still receive new some features from Google, such as Shorts, the Continue Watching Section, the Watch It Again Section, Handles, and more. Overall and the removal of the ‘Channels‘ & 'About‘ Tabs in the Channel Page. and this YouTube version probably remains functional and up-to-date or probably still supported by Google. | uYou Video/Audio Downloading is Offline. / kCFErrorDomainCFNetwork error 303 🚫 |
|
||||
1529
Settings.xm
1529
Settings.xm
File diff suppressed because it is too large
Load diff
7
Source/Extractor.h
Normal file
7
Source/Extractor.h
Normal file
|
|
@ -0,0 +1,7 @@
|
|||
// Extractor.h was made by @LillieH1000 from https://www.github.com/LillieH1000/YouTube-Reborn
|
||||
|
||||
#import <Foundation/Foundation.h>
|
||||
|
||||
@interface Extractor : NSObject
|
||||
+ (NSDictionary *)youtubePlayerRequest :(NSString *)client :(NSString *)videoID;
|
||||
@end
|
||||
44
Source/Extractor.xm
Normal file
44
Source/Extractor.xm
Normal file
|
|
@ -0,0 +1,44 @@
|
|||
// Extractor.xm was made by @LillieH1000 from https://www.github.com/LillieH1000/YouTube-Reborn
|
||||
|
||||
#import "Extractor.h"
|
||||
|
||||
@implementation Extractor
|
||||
|
||||
+ (NSDictionary *)youtubePlayerRequest :(NSString *)client :(NSString *)videoID {
|
||||
NSLocale *locale = [NSLocale currentLocale];
|
||||
NSString *countryCode = [locale objectForKey:NSLocaleCountryCode];
|
||||
|
||||
NSURL *requestURL;
|
||||
if ([client isEqual:@"android"]) {
|
||||
requestURL = [NSURL URLWithString:@"https://www.youtube.com/youtubei/v1/player?key=AIzaSyA8eiZmM1FaDVjRy-df2KTyQ_vz_yYM39w&prettyPrint=false"];
|
||||
} else if ([client isEqual:@"ios"]) {
|
||||
requestURL = [NSURL URLWithString:@"https://www.youtube.com/youtubei/v1/player?key=AIzaSyB-63vPrdThhKuerbB2N_l7Kwwcxj6yUAc&prettyPrint=false"];
|
||||
}
|
||||
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:requestURL];
|
||||
[request setHTTPMethod:@"POST"];
|
||||
[request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
|
||||
if ([client isEqual:@"android"]) {
|
||||
[request setValue:@"com.google.android.youtube/17.31.35 (Linux; U; Android 11) gzip" forHTTPHeaderField:@"User-Agent"];
|
||||
NSString *jsonBody = [NSString stringWithFormat:@"{\"context\":{\"client\":{\"hl\":\"en\",\"gl\":\"%@\",\"clientName\":\"ANDROID\",\"clientVersion\":\"17.31.35\",\"androidSdkVersion\":30,\"playbackContext\":{\"contentPlaybackContext\":{\"vis\":0,\"splay\":false,\"autoCaptionsDefaultOn\":false,\"autonavState\":\"STATE_OFF\",\"signatureTimestamp\":\"sts\",\"html5Preference\":\"HTML5_PREF_WANTS\",\"lactMilliseconds\":\"-1\"}}}},\"contentCheckOk\":true,\"racyCheckOk\":true,\"videoId\":\"%@\"}", countryCode, videoID];
|
||||
[request setHTTPBody:[jsonBody dataUsingEncoding:NSASCIIStringEncoding allowLossyConversion:YES]];
|
||||
} else if ([client isEqual:@"ios"]) {
|
||||
[request setValue:@"com.google.ios.youtube/17.33.2 (iPhone14,3; U; CPU iOS 15_6 like Mac OS X)" forHTTPHeaderField:@"User-Agent"];
|
||||
NSString *jsonBody = [NSString stringWithFormat:@"{\"context\":{\"client\":{\"hl\":\"en\",\"gl\":\"%@\",\"clientName\":\"IOS\",\"clientVersion\":\"17.33.2\",\"deviceModel\":\"iPhone14,3\",\"playbackContext\":{\"contentPlaybackContext\":{\"vis\":0,\"splay\":false,\"autoCaptionsDefaultOn\":false,\"autonavState\":\"STATE_OFF\",\"signatureTimestamp\":\"sts\",\"html5Preference\":\"HTML5_PREF_WANTS\",\"lactMilliseconds\":\"-1\"}}}},\"contentCheckOk\":true,\"racyCheckOk\":true,\"videoId\":\"%@\"}", countryCode, videoID];
|
||||
[request setHTTPBody:[jsonBody dataUsingEncoding:NSASCIIStringEncoding allowLossyConversion:YES]];
|
||||
}
|
||||
|
||||
__block NSData *requestData;
|
||||
__block BOOL requestFinished = NO;
|
||||
[[[NSURLSession sharedSession] dataTaskWithRequest:request completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
|
||||
requestData = data;
|
||||
requestFinished = YES;
|
||||
}] resume];
|
||||
|
||||
while (!requestFinished) {
|
||||
[NSThread sleepForTimeInterval:0.02];
|
||||
}
|
||||
|
||||
return [NSJSONSerialization JSONObjectWithData:requestData options:0 error:nil];
|
||||
}
|
||||
|
||||
@end
|
||||
43
Source/LowContrastMode.swift
Normal file
43
Source/LowContrastMode.swift
Normal file
|
|
@ -0,0 +1,43 @@
|
|||
import UIKit
|
||||
|
||||
class ViewController: UIViewController {
|
||||
|
||||
@IBOutlet weak var textField: UITextField!
|
||||
@IBOutlet weak var colorButton: UIButton!
|
||||
|
||||
var textColor: UIColor = (red: 0.56, green: 0.56, blue: 0.56, alpha: 1.00)
|
||||
|
||||
override func viewDidLoad() {
|
||||
super.viewDidLoad()
|
||||
|
||||
// Configure Text Field
|
||||
textField.placeholder = "YouTube"
|
||||
|
||||
// Configure Color Button
|
||||
colorButton.setTitleColor(textColor, for: .normal)
|
||||
}
|
||||
|
||||
@IBAction func onColorButtonTap(_ sender: Any) {
|
||||
let colorPicker = UIColorPickerViewController()
|
||||
colorPicker.delegate = self
|
||||
present(colorPicker, animated: true, completion: nil)
|
||||
}
|
||||
}
|
||||
|
||||
extension ViewController: UITextFieldDelegate {
|
||||
|
||||
func textFieldShouldReturn(_ textField: UITextField) -> Bool {
|
||||
textField.resignFirstResponder()
|
||||
return true
|
||||
}
|
||||
}
|
||||
|
||||
extension ViewController: UIColorPickerViewControllerDelegate {
|
||||
|
||||
func colorPickerViewControllerDidSelectColor(_ viewController: UIColorPickerViewController) {
|
||||
textColor = viewController.selectedColor
|
||||
colorButton.setTitleColor(textColor, for: .normal)
|
||||
}
|
||||
|
||||
func colorPickerViewControllerDidFinish(_ viewController: UIColorPickerViewController) {
|
||||
dismiss
|
||||
580
Source/LowContrastMode.xm
Normal file
580
Source/LowContrastMode.xm
Normal file
|
|
@ -0,0 +1,580 @@
|
|||
#import "../uYouPlus.h"
|
||||
|
||||
//
|
||||
static BOOL IsEnabled(NSString *key) {
|
||||
return [[NSUserDefaults standardUserDefaults] boolForKey:key];
|
||||
}
|
||||
static int contrastMode() {
|
||||
return [[NSUserDefaults standardUserDefaults] integerForKey:@"lcm"];
|
||||
}
|
||||
static BOOL lowContrastMode() {
|
||||
return IsEnabled(@"lowContrastMode_enabled") && contrastMode() == 0;
|
||||
}
|
||||
/*
|
||||
static BOOL customContrastMode() {
|
||||
return IsEnabled(@"lowContrastMode_enabled") && contrastMode() == 1;
|
||||
}
|
||||
*/
|
||||
|
||||
UIColor *lcmHexColor;
|
||||
|
||||
%group gLowContrastMode // Low Contrast Mode v1.5.1 (Compatible with only YouTube v16.05.7-v17.38.10)
|
||||
%hook UIColor
|
||||
+ (UIColor *)whiteColor { // Dark Theme Color
|
||||
return [UIColor colorWithRed: 0.56 green: 0.56 blue: 0.56 alpha: 1.00];
|
||||
}
|
||||
+ (UIColor *)lightTextColor {
|
||||
return [UIColor colorWithRed: 0.56 green: 0.56 blue: 0.56 alpha: 1.00];
|
||||
}
|
||||
+ (UIColor *)lightGrayColor {
|
||||
return [UIColor colorWithRed: 0.56 green: 0.56 blue: 0.56 alpha: 1.00];
|
||||
}
|
||||
+ (UIColor *)ychGrey7 {
|
||||
return [UIColor colorWithRed: 0.56 green: 0.56 blue: 0.56 alpha: 1.00];
|
||||
}
|
||||
+ (UIColor *)skt_chipBackgroundColor {
|
||||
return [UIColor colorWithRed: 0.56 green: 0.56 blue: 0.56 alpha: 1.00];
|
||||
}
|
||||
+ (UIColor *)placeholderTextColor {
|
||||
return [UIColor colorWithRed: 0.56 green: 0.56 blue: 0.56 alpha: 1.00];
|
||||
}
|
||||
+ (UIColor *)systemLightGrayColor {
|
||||
return [UIColor colorWithRed: 0.56 green: 0.56 blue: 0.56 alpha: 1.00];
|
||||
}
|
||||
+ (UIColor *)systemExtraLightGrayColor {
|
||||
return [UIColor colorWithRed: 0.56 green: 0.56 blue: 0.56 alpha: 1.00];
|
||||
}
|
||||
+ (UIColor *)labelColor {
|
||||
return [UIColor colorWithRed: 0.56 green: 0.56 blue: 0.56 alpha: 1.00];
|
||||
}
|
||||
+ (UIColor *)secondaryLabelColor {
|
||||
return [UIColor colorWithRed: 0.56 green: 0.56 blue: 0.56 alpha: 1.00];
|
||||
}
|
||||
+ (UIColor *)tertiaryLabelColor {
|
||||
return [UIColor colorWithRed: 0.56 green: 0.56 blue: 0.56 alpha: 1.00];
|
||||
}
|
||||
+ (UIColor *)quaternaryLabelColor {
|
||||
return [UIColor colorWithRed: 0.56 green: 0.56 blue: 0.56 alpha: 1.00];
|
||||
}
|
||||
%end
|
||||
%hook YTCommonColorPalette
|
||||
- (UIColor *)textPrimary {
|
||||
return self.pageStyle == 1 ? [UIColor whiteColor] : %orig;
|
||||
}
|
||||
- (UIColor *)textSecondary {
|
||||
return self.pageStyle == 1 ? [UIColor whiteColor] : %orig;
|
||||
}
|
||||
- (UIColor *)overlayTextPrimary {
|
||||
return self.pageStyle == 1 ? [UIColor whiteColor] : %orig;
|
||||
}
|
||||
- (UIColor *)overlayTextSecondary {
|
||||
return self.pageStyle == 1 ? [UIColor whiteColor] : %orig;
|
||||
}
|
||||
- (UIColor *)iconActive {
|
||||
return self.pageStyle == 1 ? [UIColor whiteColor] : %orig;
|
||||
}
|
||||
- (UIColor *)iconActiveOther {
|
||||
return self.pageStyle == 1 ? [UIColor whiteColor] : %orig;
|
||||
}
|
||||
- (UIColor *)brandIconActive {
|
||||
return self.pageStyle == 1 ? [UIColor whiteColor] : %orig;
|
||||
}
|
||||
- (UIColor *)staticBrandWhite {
|
||||
return self.pageStyle == 1 ? [UIColor whiteColor] : %orig;
|
||||
}
|
||||
- (UIColor *)overlayIconActiveOther {
|
||||
return self.pageStyle == 1 ? [UIColor whiteColor] : %orig;
|
||||
}
|
||||
- (UIColor *)overlayIconInactive {
|
||||
return self.pageStyle == 1 ? [[UIColor whiteColor] colorWithAlphaComponent:0.7] : %orig;
|
||||
}
|
||||
- (UIColor *)overlayIconDisabled {
|
||||
return self.pageStyle == 1 ? [[UIColor whiteColor] colorWithAlphaComponent:0.3] : %orig;
|
||||
}
|
||||
- (UIColor *)overlayFilledButtonActive {
|
||||
return self.pageStyle == 1 ? [[UIColor whiteColor] colorWithAlphaComponent:0.2] : %orig;
|
||||
}
|
||||
%end
|
||||
%hook YTColor
|
||||
+ (BOOL)darkerPaletteTextColorEnabled {
|
||||
return NO;
|
||||
}
|
||||
+ (UIColor *)white2 {
|
||||
return [UIColor whiteColor];
|
||||
}
|
||||
+ (UIColor *)white3 {
|
||||
return [UIColor whiteColor];
|
||||
}
|
||||
+ (UIColor *)white4 {
|
||||
return [UIColor whiteColor];
|
||||
}
|
||||
+ (UIColor *)white5 {
|
||||
return [UIColor whiteColor];
|
||||
}
|
||||
+ (UIColor *)grey1 {
|
||||
return [UIColor whiteColor];
|
||||
}
|
||||
+ (UIColor *)grey2 {
|
||||
return [UIColor whiteColor];
|
||||
}
|
||||
%end
|
||||
%hook QTMColorGroup
|
||||
- (UIColor *)tint100 {
|
||||
return [UIColor whiteColor];
|
||||
}
|
||||
- (UIColor *)tint300 {
|
||||
return [UIColor whiteColor];
|
||||
}
|
||||
- (UIColor *)tint500 {
|
||||
return [UIColor whiteColor];
|
||||
}
|
||||
- (UIColor *)tint700 {
|
||||
return [UIColor whiteColor];
|
||||
}
|
||||
- (UIColor *)accent200 {
|
||||
return [UIColor whiteColor];
|
||||
}
|
||||
- (UIColor *)accent400 {
|
||||
return [UIColor whiteColor];
|
||||
}
|
||||
- (UIColor *)accentColor {
|
||||
return [UIColor whiteColor];
|
||||
}
|
||||
- (UIColor *)brightAccentColor {
|
||||
return [UIColor whiteColor];
|
||||
}
|
||||
- (UIColor *)regularColor {
|
||||
return [UIColor whiteColor];
|
||||
}
|
||||
- (UIColor *)darkerColor {
|
||||
return [UIColor whiteColor];
|
||||
}
|
||||
- (UIColor *)bodyTextColor {
|
||||
return [UIColor whiteColor];
|
||||
}
|
||||
- (UIColor *)lightBodyTextColor {
|
||||
return [UIColor whiteColor];
|
||||
}
|
||||
- (UIColor *)bodyTextColorOnRegularColor {
|
||||
return [UIColor whiteColor];
|
||||
}
|
||||
- (UIColor *)bodyTextColorOnLighterColor {
|
||||
return [UIColor whiteColor];
|
||||
}
|
||||
- (UIColor *)bodyTextColorOnDarkerColor {
|
||||
return [UIColor whiteColor];
|
||||
}
|
||||
- (UIColor *)bodyTextColorOnAccentColor {
|
||||
return [UIColor whiteColor];
|
||||
}
|
||||
- (UIColor *)buttonBackgroundColor {
|
||||
return [UIColor whiteColor];
|
||||
}
|
||||
%end
|
||||
%hook YTQTMButton
|
||||
- (void)setImage:(UIImage *)image {
|
||||
UIImage *currentImage = [image imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate];
|
||||
[self setTintColor:[UIColor whiteColor]];
|
||||
%orig(currentImage);
|
||||
}
|
||||
%end
|
||||
%hook UIExtendedSRGColorSpace
|
||||
- (void)setTextColor:(UIColor *)textColor {
|
||||
textColor = [[UIColor whiteColor] colorWithAlphaComponent:0.9];
|
||||
%orig();
|
||||
}
|
||||
%end
|
||||
%hook UIExtendedSRGBColorSpace
|
||||
- (void)setTextColor:(UIColor *)textColor {
|
||||
textColor = [[UIColor whiteColor] colorWithAlphaComponent:1.0];
|
||||
%orig();
|
||||
}
|
||||
%end
|
||||
%hook UIExtendedGrayColorSpace
|
||||
- (void)setTextColor:(UIColor *)textColor {
|
||||
textColor = [[UIColor whiteColor] colorWithAlphaComponent:1.0];
|
||||
%orig();
|
||||
}
|
||||
%end
|
||||
%hook VideoTitleLabel
|
||||
- (void)setTextColor:(UIColor *)textColor {
|
||||
textColor = [UIColor whiteColor];
|
||||
%orig(textColor);
|
||||
}
|
||||
%end
|
||||
%hook UILabel
|
||||
+ (void)load {
|
||||
@autoreleasepool {
|
||||
[[UILabel appearance] setTextColor:[UIColor whiteColor]];
|
||||
}
|
||||
}
|
||||
- (void)setTextColor:(UIColor *)textColor {
|
||||
%log;
|
||||
textColor = [UIColor whiteColor];
|
||||
%orig(textColor);
|
||||
}
|
||||
%end
|
||||
%hook UITextField
|
||||
- (void)setTextColor:(UIColor *)textColor {
|
||||
%log;
|
||||
textColor = [UIColor whiteColor];
|
||||
%orig(textColor);
|
||||
}
|
||||
%end
|
||||
%hook UITextView
|
||||
- (void)setTextColor:(UIColor *)textColor {
|
||||
%log;
|
||||
textColor = [UIColor whiteColor];
|
||||
%orig(textColor);
|
||||
}
|
||||
%end
|
||||
%hook UISearchBar
|
||||
- (void)setTextColor:(UIColor *)textColor {
|
||||
textColor = [UIColor whiteColor];
|
||||
%orig(textColor);
|
||||
}
|
||||
%end
|
||||
%hook UISegmentedControl
|
||||
- (void)setTitleTextAttributes:(NSDictionary *)attributes forState:(UIControlState)state {
|
||||
NSMutableDictionary *modifiedAttributes = [NSMutableDictionary dictionaryWithDictionary:attributes];
|
||||
[modifiedAttributes setObject:[UIColor whiteColor] forKey:NSForegroundColorAttributeName];
|
||||
%orig(modifiedAttributes, state);
|
||||
}
|
||||
%end
|
||||
%hook UIButton
|
||||
- (void)setTitleColor:(UIColor *)color forState:(UIControlState)state {
|
||||
color = [UIColor whiteColor];
|
||||
%orig(color, state);
|
||||
}
|
||||
%end
|
||||
%hook UIBarButtonItem
|
||||
- (void)setTitleTextAttributes:(NSDictionary *)attributes forState:(UIControlState)state {
|
||||
NSMutableDictionary *modifiedAttributes = [NSMutableDictionary dictionaryWithDictionary:attributes];
|
||||
[modifiedAttributes setObject:[UIColor whiteColor] forKey:NSForegroundColorAttributeName];
|
||||
%orig(modifiedAttributes, state);
|
||||
}
|
||||
%end
|
||||
%hook NSAttributedString
|
||||
- (instancetype)initWithString:(NSString *)str attributes:(NSDictionary<NSAttributedStringKey, id> *)attrs {
|
||||
NSMutableDictionary *modifiedAttributes = [NSMutableDictionary dictionaryWithDictionary:attrs];
|
||||
[modifiedAttributes setObject:[UIColor whiteColor] forKey:NSForegroundColorAttributeName];
|
||||
return %orig(str, modifiedAttributes);
|
||||
}
|
||||
%end
|
||||
%hook CATextLayer
|
||||
- (void)setTextColor:(CGColorRef)textColor {
|
||||
%orig([UIColor whiteColor].CGColor);
|
||||
}
|
||||
%end
|
||||
%hook ASTextNode
|
||||
- (NSAttributedString *)attributedString {
|
||||
NSAttributedString *originalAttributedString = %orig;
|
||||
NSMutableAttributedString *newAttributedString = [originalAttributedString mutableCopy];
|
||||
[newAttributedString addAttribute:NSForegroundColorAttributeName value:[UIColor whiteColor] range:NSMakeRange(0, newAttributedString.length)];
|
||||
return newAttributedString;
|
||||
}
|
||||
%end
|
||||
%hook ASTextFieldNode
|
||||
- (void)setTextColor:(UIColor *)textColor {
|
||||
%orig([UIColor whiteColor]);
|
||||
}
|
||||
%end
|
||||
%hook ASTextView
|
||||
- (void)setTextColor:(UIColor *)textColor {
|
||||
%orig([UIColor whiteColor]);
|
||||
}
|
||||
%end
|
||||
%hook ASButtonNode
|
||||
- (void)setTextColor:(UIColor *)textColor {
|
||||
%orig([UIColor whiteColor]);
|
||||
}
|
||||
%end
|
||||
%end
|
||||
|
||||
/*
|
||||
%group gCustomContrastMode // Custom Contrast Mode (Hex Color)
|
||||
%hook UIColor
|
||||
+ (UIColor *)whiteColor {
|
||||
return lcmHexColor;
|
||||
}
|
||||
+ (UIColor *)lightTextColor {
|
||||
return lcmHexColor;
|
||||
}
|
||||
+ (UIColor *)lightGrayColor {
|
||||
return lcmHexColor;
|
||||
}
|
||||
+ (UIColor *)ychGrey7 {
|
||||
return lcmHexColor;
|
||||
}
|
||||
+ (UIColor *)skt_chipBackgroundColor {
|
||||
return lcmHexColor;
|
||||
}
|
||||
+ (UIColor *)placeholderTextColor {
|
||||
return lcmHexColor;
|
||||
}
|
||||
+ (UIColor *)systemLightGrayColor {
|
||||
return lcmHexColor;
|
||||
}
|
||||
+ (UIColor *)systemExtraLightGrayColor {
|
||||
return lcmHexColor;
|
||||
}
|
||||
+ (UIColor *)labelColor {
|
||||
return lcmHexColor;
|
||||
}
|
||||
+ (UIColor *)secondaryLabelColor {
|
||||
return lcmHexColor;
|
||||
}
|
||||
+ (UIColor *)tertiaryLabelColor {
|
||||
return lcmHexColor;
|
||||
}
|
||||
+ (UIColor *)quaternaryLabelColor {
|
||||
return lcmHexColor;
|
||||
}
|
||||
%end
|
||||
%hook YTCommonColorPalette
|
||||
- (UIColor *)textPrimary {
|
||||
return self.pageStyle == 1 ? [UIColor whiteColor] : %orig;
|
||||
}
|
||||
- (UIColor *)textSecondary {
|
||||
return self.pageStyle == 1 ? [UIColor whiteColor] : %orig;
|
||||
}
|
||||
- (UIColor *)overlayTextPrimary {
|
||||
return self.pageStyle == 1 ? [UIColor whiteColor] : %orig;
|
||||
}
|
||||
- (UIColor *)overlayTextSecondary {
|
||||
return self.pageStyle == 1 ? [UIColor whiteColor] : %orig;
|
||||
}
|
||||
- (UIColor *)iconActive {
|
||||
return self.pageStyle == 1 ? [UIColor whiteColor] : %orig;
|
||||
}
|
||||
- (UIColor *)iconActiveOther {
|
||||
return self.pageStyle == 1 ? [UIColor whiteColor] : %orig;
|
||||
}
|
||||
- (UIColor *)brandIconActive {
|
||||
return self.pageStyle == 1 ? [UIColor whiteColor] : %orig;
|
||||
}
|
||||
- (UIColor *)staticBrandWhite {
|
||||
return self.pageStyle == 1 ? [UIColor whiteColor] : %orig;
|
||||
}
|
||||
- (UIColor *)overlayIconActiveOther {
|
||||
return self.pageStyle == 1 ? [UIColor whiteColor] : %orig;
|
||||
}
|
||||
- (UIColor *)overlayIconInactive {
|
||||
return self.pageStyle == 1 ? [[UIColor whiteColor] colorWithAlphaComponent:0.7] : %orig;
|
||||
}
|
||||
- (UIColor *)overlayIconDisabled {
|
||||
return self.pageStyle == 1 ? [[UIColor whiteColor] colorWithAlphaComponent:0.3] : %orig;
|
||||
}
|
||||
- (UIColor *)overlayFilledButtonActive {
|
||||
return self.pageStyle == 1 ? [[UIColor whiteColor] colorWithAlphaComponent:0.2] : %orig;
|
||||
}
|
||||
%end
|
||||
%hook YTColor
|
||||
+ (BOOL)darkerPaletteTextColorEnabled {
|
||||
return NO;
|
||||
}
|
||||
+ (UIColor *)white2 {
|
||||
return [UIColor whiteColor];
|
||||
}
|
||||
+ (UIColor *)white3 {
|
||||
return [UIColor whiteColor];
|
||||
}
|
||||
+ (UIColor *)white4 {
|
||||
return [UIColor whiteColor];
|
||||
}
|
||||
+ (UIColor *)white5 {
|
||||
return [UIColor whiteColor];
|
||||
}
|
||||
+ (UIColor *)grey1 {
|
||||
return [UIColor whiteColor];
|
||||
}
|
||||
+ (UIColor *)grey2 {
|
||||
return [UIColor whiteColor];
|
||||
}
|
||||
%end
|
||||
%hook QTMColorGroup
|
||||
- (UIColor *)tint100 {
|
||||
return [UIColor whiteColor];
|
||||
}
|
||||
- (UIColor *)tint300 {
|
||||
return [UIColor whiteColor];
|
||||
}
|
||||
- (UIColor *)tint500 {
|
||||
return [UIColor whiteColor];
|
||||
}
|
||||
- (UIColor *)tint700 {
|
||||
return [UIColor whiteColor];
|
||||
}
|
||||
- (UIColor *)accent200 {
|
||||
return [UIColor whiteColor];
|
||||
}
|
||||
- (UIColor *)accent400 {
|
||||
return [UIColor whiteColor];
|
||||
}
|
||||
- (UIColor *)accentColor {
|
||||
return [UIColor whiteColor];
|
||||
}
|
||||
- (UIColor *)brightAccentColor {
|
||||
return [UIColor whiteColor];
|
||||
}
|
||||
- (UIColor *)regularColor {
|
||||
return [UIColor whiteColor];
|
||||
}
|
||||
- (UIColor *)darkerColor {
|
||||
return [UIColor whiteColor];
|
||||
}
|
||||
- (UIColor *)bodyTextColor {
|
||||
return [UIColor whiteColor];
|
||||
}
|
||||
- (UIColor *)lightBodyTextColor {
|
||||
return [UIColor whiteColor];
|
||||
}
|
||||
- (UIColor *)bodyTextColorOnRegularColor {
|
||||
return [UIColor whiteColor];
|
||||
}
|
||||
- (UIColor *)bodyTextColorOnLighterColor {
|
||||
return [UIColor whiteColor];
|
||||
}
|
||||
- (UIColor *)bodyTextColorOnDarkerColor {
|
||||
return [UIColor whiteColor];
|
||||
}
|
||||
- (UIColor *)bodyTextColorOnAccentColor {
|
||||
return [UIColor whiteColor];
|
||||
}
|
||||
- (UIColor *)buttonBackgroundColor {
|
||||
return [UIColor whiteColor];
|
||||
}
|
||||
%end
|
||||
%hook YTQTMButton
|
||||
- (void)setImage:(UIImage *)image {
|
||||
UIImage *currentImage = [image imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate];
|
||||
[self setTintColor:[UIColor whiteColor]];
|
||||
%orig(currentImage);
|
||||
}
|
||||
%end
|
||||
%hook UIExtendedSRGColorSpace
|
||||
- (void)setTextColor:(UIColor *)textColor {
|
||||
textColor = [[UIColor whiteColor] colorWithAlphaComponent:0.9];
|
||||
%orig();
|
||||
}
|
||||
%end
|
||||
%hook UIExtendedSRGBColorSpace
|
||||
- (void)setTextColor:(UIColor *)textColor {
|
||||
textColor = [[UIColor whiteColor] colorWithAlphaComponent:1.0];
|
||||
%orig();
|
||||
}
|
||||
%end
|
||||
%hook UIExtendedGrayColorSpace
|
||||
- (void)setTextColor:(UIColor *)textColor {
|
||||
textColor = [[UIColor whiteColor] colorWithAlphaComponent:1.0];
|
||||
%orig();
|
||||
}
|
||||
%end
|
||||
%hook VideoTitleLabel
|
||||
- (void)setTextColor:(UIColor *)textColor {
|
||||
textColor = [UIColor whiteColor];
|
||||
%orig(textColor);
|
||||
}
|
||||
%end
|
||||
%hook UILabel
|
||||
+ (void)load {
|
||||
@autoreleasepool {
|
||||
[[UILabel appearance] setTextColor:[UIColor whiteColor]];
|
||||
}
|
||||
}
|
||||
- (void)setTextColor:(UIColor *)textColor {
|
||||
%log;
|
||||
textColor = [UIColor whiteColor];
|
||||
%orig(textColor);
|
||||
}
|
||||
%end
|
||||
%hook UITextField
|
||||
- (void)setTextColor:(UIColor *)textColor {
|
||||
%log;
|
||||
textColor = [UIColor whiteColor];
|
||||
%orig(textColor);
|
||||
}
|
||||
%end
|
||||
%hook UITextView
|
||||
- (void)setTextColor:(UIColor *)textColor {
|
||||
%log;
|
||||
textColor = [UIColor whiteColor];
|
||||
%orig(textColor);
|
||||
}
|
||||
%end
|
||||
%hook UISearchBar
|
||||
- (void)setTextColor:(UIColor *)textColor {
|
||||
textColor = [UIColor whiteColor];
|
||||
%orig(textColor);
|
||||
}
|
||||
%end
|
||||
%hook UISegmentedControl
|
||||
- (void)setTitleTextAttributes:(NSDictionary *)attributes forState:(UIControlState)state {
|
||||
NSMutableDictionary *modifiedAttributes = [NSMutableDictionary dictionaryWithDictionary:attributes];
|
||||
[modifiedAttributes setObject:[UIColor whiteColor] forKey:NSForegroundColorAttributeName];
|
||||
%orig(modifiedAttributes, state);
|
||||
}
|
||||
%end
|
||||
%hook UIButton
|
||||
- (void)setTitleColor:(UIColor *)color forState:(UIControlState)state {
|
||||
color = [UIColor whiteColor];
|
||||
%orig(color, state);
|
||||
}
|
||||
%end
|
||||
%hook UIBarButtonItem
|
||||
- (void)setTitleTextAttributes:(NSDictionary *)attributes forState:(UIControlState)state {
|
||||
NSMutableDictionary *modifiedAttributes = [NSMutableDictionary dictionaryWithDictionary:attributes];
|
||||
[modifiedAttributes setObject:[UIColor whiteColor] forKey:NSForegroundColorAttributeName];
|
||||
%orig(modifiedAttributes, state);
|
||||
}
|
||||
%end
|
||||
%hook NSAttributedString
|
||||
- (instancetype)initWithString:(NSString *)str attributes:(NSDictionary<NSAttributedStringKey, id> *)attrs {
|
||||
NSMutableDictionary *modifiedAttributes = [NSMutableDictionary dictionaryWithDictionary:attrs];
|
||||
[modifiedAttributes setObject:[UIColor whiteColor] forKey:NSForegroundColorAttributeName];
|
||||
return %orig(str, modifiedAttributes);
|
||||
}
|
||||
%end
|
||||
%hook CATextLayer
|
||||
- (void)setTextColor:(CGColorRef)textColor {
|
||||
%orig([UIColor whiteColor].CGColor);
|
||||
}
|
||||
%end
|
||||
%hook ASTextNode
|
||||
- (NSAttributedString *)attributedString {
|
||||
NSAttributedString *originalAttributedString = %orig;
|
||||
NSMutableAttributedString *newAttributedString = [originalAttributedString mutableCopy];
|
||||
[newAttributedString addAttribute:NSForegroundColorAttributeName value:[UIColor whiteColor] range:NSMakeRange(0, newAttributedString.length)];
|
||||
return newAttributedString;
|
||||
}
|
||||
%end
|
||||
%hook ASTextFieldNode
|
||||
- (void)setTextColor:(UIColor *)textColor {
|
||||
%orig([UIColor whiteColor]);
|
||||
}
|
||||
%end
|
||||
%hook ASTextView
|
||||
- (void)setTextColor:(UIColor *)textColor {
|
||||
%orig([UIColor whiteColor]);
|
||||
}
|
||||
%end
|
||||
%hook ASButtonNode
|
||||
- (void)setTextColor:(UIColor *)textColor {
|
||||
%orig([UIColor whiteColor]);
|
||||
}
|
||||
%end
|
||||
%end
|
||||
*/
|
||||
|
||||
# pragma mark - ctor
|
||||
%ctor {
|
||||
%init;
|
||||
if (lowContrastMode()) {
|
||||
%init(gLowContrastMode);
|
||||
}
|
||||
/*
|
||||
if (customContrastMode()) {
|
||||
%init(gCustomContrastMode);
|
||||
}
|
||||
*/
|
||||
}
|
||||
645
Source/Themes.xm
Normal file
645
Source/Themes.xm
Normal file
|
|
@ -0,0 +1,645 @@
|
|||
#import "../uYouPlus.h"
|
||||
|
||||
static BOOL IsEnabled(NSString *key) {
|
||||
return [[NSUserDefaults standardUserDefaults] boolForKey:key];
|
||||
}
|
||||
static BOOL isDarkMode() {
|
||||
return ([[NSUserDefaults standardUserDefaults] integerForKey:@"page_style"] == 1);
|
||||
}
|
||||
static BOOL oledDarkTheme() {
|
||||
return ([[NSUserDefaults standardUserDefaults] integerForKey:@"appTheme"] == 1);
|
||||
}
|
||||
static BOOL oldDarkTheme() {
|
||||
return ([[NSUserDefaults standardUserDefaults] integerForKey:@"appTheme"] == 2);
|
||||
}
|
||||
|
||||
// Themes.xm - Theme Options
|
||||
// Old dark theme (gray)
|
||||
%group gOldDarkTheme
|
||||
UIColor *originalColor = [UIColor colorWithRed:0.129 green:0.129 blue:0.129 alpha:1.0];
|
||||
%hook YTCommonColorPalette
|
||||
- (UIColor *)background1 {
|
||||
return self.pageStyle == 1 ? originalColor : %orig;
|
||||
}
|
||||
- (UIColor *)background2 {
|
||||
return self.pageStyle == 1 ? originalColor : %orig;
|
||||
}
|
||||
- (UIColor *)background3 {
|
||||
return self.pageStyle == 1 ? originalColor : %orig;
|
||||
}
|
||||
- (UIColor *)baseBackground {
|
||||
return self.pageStyle == 1 ? originalColor : %orig;
|
||||
}
|
||||
- (UIColor *)brandBackgroundSolid {
|
||||
return self.pageStyle == 1 ? originalColor : %orig;
|
||||
}
|
||||
- (UIColor *)brandBackgroundPrimary {
|
||||
return self.pageStyle == 1 ? originalColor : %orig;
|
||||
}
|
||||
- (UIColor *)brandBackgroundSecondary {
|
||||
return self.pageStyle == 1 ? [originalColor colorWithAlphaComponent:0.9] : %orig;
|
||||
}
|
||||
- (UIColor *)raisedBackground {
|
||||
return self.pageStyle == 1 ? originalColor : %orig;
|
||||
}
|
||||
- (UIColor *)staticBrandBlack {
|
||||
return self.pageStyle == 1 ? originalColor : %orig;
|
||||
}
|
||||
- (UIColor *)generalBackgroundA {
|
||||
return self.pageStyle == 1 ? originalColor : %orig;
|
||||
}
|
||||
- (UIColor *)generalBackgroundB {
|
||||
return self.pageStyle == 1 ? originalColor : %orig;
|
||||
}
|
||||
- (UIColor *)menuBackground {
|
||||
return self.pageStyle == 1 ? originalColor : %orig;
|
||||
}
|
||||
%end
|
||||
|
||||
%hook YTInnerTubeCollectionViewController
|
||||
- (UIColor *)backgroundColor:(NSInteger)pageStyle {
|
||||
return pageStyle == 1 ? originalColor : %orig;
|
||||
}
|
||||
%end
|
||||
|
||||
// Explore
|
||||
%hook ASScrollView
|
||||
- (void)didMoveToWindow {
|
||||
%orig;
|
||||
if (isDarkMode()) {
|
||||
self.backgroundColor = [UIColor clearColor];
|
||||
}
|
||||
}
|
||||
%end
|
||||
|
||||
// Your videos
|
||||
%hook ASCollectionView
|
||||
- (void)didMoveToWindow {
|
||||
%orig;
|
||||
if (isDarkMode() && [self.nextResponder isKindOfClass:%c(_ASDisplayView)]) {
|
||||
self.superview.backgroundColor = originalColor;
|
||||
}
|
||||
}
|
||||
%end
|
||||
|
||||
// Sub menu?
|
||||
%hook ELMView
|
||||
- (void)didMoveToWindow {
|
||||
%orig;
|
||||
if (isDarkMode()) {
|
||||
self.subviews[0].backgroundColor = [UIColor clearColor];
|
||||
}
|
||||
}
|
||||
%end
|
||||
|
||||
// iSponsorBlock
|
||||
%hook SponsorBlockSettingsController
|
||||
- (void)viewDidLoad {
|
||||
if (self.traitCollection.userInterfaceStyle == UIUserInterfaceStyleDark) {
|
||||
%orig;
|
||||
self.tableView.backgroundColor = originalColor;
|
||||
} else { return %orig; }
|
||||
}
|
||||
%end
|
||||
|
||||
%hook SponsorBlockViewController
|
||||
- (void)viewDidLoad {
|
||||
if (self.traitCollection.userInterfaceStyle == UIUserInterfaceStyleDark) {
|
||||
%orig;
|
||||
self.view.backgroundColor = originalColor;
|
||||
} else { return %orig; }
|
||||
}
|
||||
%end
|
||||
|
||||
// Search View
|
||||
%hook YTSearchBarView
|
||||
- (void)setBackgroundColor:(UIColor *)color {
|
||||
return isDarkMode() ? %orig(originalColor) : %orig;
|
||||
}
|
||||
%end
|
||||
|
||||
// History Search view
|
||||
%hook YTSearchBoxView
|
||||
- (void)setBackgroundColor:(UIColor *)color {
|
||||
return isDarkMode() ? %orig(originalColor) : %orig;
|
||||
|
||||
}
|
||||
%end
|
||||
|
||||
// Comment view
|
||||
%hook YTCommentView
|
||||
- (void)setBackgroundColor:(UIColor *)color {
|
||||
return isDarkMode() ? %orig(originalColor) : %orig;
|
||||
}
|
||||
%end
|
||||
|
||||
%hook YTCreateCommentAccessoryView
|
||||
- (void)setBackgroundColor:(UIColor *)color {
|
||||
return isDarkMode() ? %orig(originalColor) : %orig;
|
||||
}
|
||||
%end
|
||||
|
||||
%hook YTCreateCommentTextView
|
||||
- (void)setBackgroundColor:(UIColor *)color {
|
||||
return isDarkMode() ? %orig(originalColor) : %orig;
|
||||
}
|
||||
- (void)setTextColor:(UIColor *)color { // fix black text in #Shorts video's comment
|
||||
return isDarkMode() ? %orig([UIColor whiteColor]) : %orig;
|
||||
}
|
||||
%end
|
||||
|
||||
%hook YTCommentDetailHeaderCell
|
||||
- (void)didMoveToWindow {
|
||||
%orig;
|
||||
if (isDarkMode()) {
|
||||
self.subviews[2].backgroundColor = originalColor;
|
||||
}
|
||||
}
|
||||
%end
|
||||
|
||||
%hook YTAsyncCollectionView
|
||||
- (void)layoutSubviews {
|
||||
%orig();
|
||||
if ([self.nextResponder isKindOfClass:NSClassFromString(@"YTWatchNextResultsViewController")]) {
|
||||
if (isDarkMode()) {
|
||||
self.subviews[0].subviews[0].backgroundColor = originalColor;
|
||||
}
|
||||
}
|
||||
}
|
||||
%end
|
||||
|
||||
%hook YTFormattedStringLabel // YT is werid...
|
||||
- (void)setBackgroundColor:(UIColor *)color {
|
||||
return isDarkMode() ? %orig([UIColor clearColor]) : %orig;
|
||||
}
|
||||
%end
|
||||
|
||||
// Live chat comment
|
||||
%hook YCHLiveChatActionPanelView
|
||||
- (void)setBackgroundColor:(UIColor *)color {
|
||||
return isDarkMode() ? %orig(originalColor) : %orig;
|
||||
}
|
||||
%end
|
||||
|
||||
%hook YCHLiveChatView
|
||||
- (void)setBackgroundColor:(UIColor *)color {
|
||||
return isDarkMode() ? %orig(originalColor) : %orig;
|
||||
}
|
||||
- (void)didMoveToWindow {
|
||||
%orig;
|
||||
if (isDarkMode()) {
|
||||
self.subviews[1].backgroundColor = originalColor;
|
||||
}
|
||||
}
|
||||
%end
|
||||
|
||||
%hook YTEmojiTextView
|
||||
- (void)setBackgroundColor:(UIColor *)color {
|
||||
return isDarkMode() ? %orig(originalColor) : %orig;
|
||||
}
|
||||
%end
|
||||
|
||||
%hook YTAppView
|
||||
- (void)setBackgroundColor:(UIColor *)color {
|
||||
return isDarkMode() ? %orig(originalColor) : %orig;
|
||||
}
|
||||
%end
|
||||
|
||||
%hook YTCollectionView
|
||||
- (void)setBackgroundColor:(UIColor *)color {
|
||||
return isDarkMode() ? %orig(originalColor) : %orig;
|
||||
}
|
||||
%end
|
||||
|
||||
%hook YTChannelListSubMenuView
|
||||
- (void)setBackgroundColor:(UIColor *)color {
|
||||
return isDarkMode() ? %orig(originalColor) : %orig;
|
||||
}
|
||||
%end
|
||||
|
||||
%hook YTChannelSubMenuView
|
||||
- (void)setBackgroundColor:(UIColor *)color {
|
||||
return isDarkMode() ? %orig(originalColor) : %orig;
|
||||
}
|
||||
%end
|
||||
|
||||
%hook YTWrapperSplitView
|
||||
- (void)setBackgroundColor:(UIColor *)color {
|
||||
return isDarkMode() ? %orig(originalColor) : %orig;
|
||||
}
|
||||
%end
|
||||
|
||||
%hook YTPageView
|
||||
- (void)setBackgroundColor:(UIColor *)color {
|
||||
return isDarkMode() ? %orig(originalColor) : %orig;
|
||||
}
|
||||
%end
|
||||
|
||||
%hook YTWatchView
|
||||
- (void)setBackgroundColor:(UIColor *)color {
|
||||
return isDarkMode() ? %orig(originalColor) : %orig;
|
||||
}
|
||||
%end
|
||||
|
||||
%hook YTPrivacyTosFooterView
|
||||
- (void)setBackgroundColor:(UIColor *)color {
|
||||
return isDarkMode() ? %orig(originalColor) : %orig;
|
||||
}
|
||||
%end
|
||||
|
||||
//
|
||||
%hook YTBackstageCreateRepostDetailView
|
||||
- (void)setBackgroundColor:(UIColor *)color {
|
||||
return isDarkMode() ? %orig(originalColor) : %orig;
|
||||
}
|
||||
%end
|
||||
|
||||
// Others
|
||||
%hook _ASDisplayView
|
||||
- (void)layoutSubviews {
|
||||
%orig;
|
||||
if (isDarkMode()) {
|
||||
UIResponder *responder = [self nextResponder];
|
||||
while (responder != nil) {
|
||||
if ([responder isKindOfClass:NSClassFromString(@"YTActionSheetDialogViewController")]) {
|
||||
self.backgroundColor = originalColor;
|
||||
}
|
||||
if ([responder isKindOfClass:NSClassFromString(@"YTPanelLoadingStrategyViewController")]) {
|
||||
self.backgroundColor = originalColor;
|
||||
}
|
||||
if ([responder isKindOfClass:NSClassFromString(@"YTTabHeaderElementsViewController")]) {
|
||||
self.backgroundColor = originalColor;
|
||||
}
|
||||
if ([responder isKindOfClass:NSClassFromString(@"YTEditSheetControllerElementsContentViewController")]) {
|
||||
self.backgroundColor = originalColor;
|
||||
}
|
||||
responder = [responder nextResponder];
|
||||
}
|
||||
}
|
||||
}
|
||||
- (void)didMoveToWindow {
|
||||
%orig;
|
||||
if (isDarkMode()) {
|
||||
if ([self.nextResponder isKindOfClass:%c(ASScrollView)]) { self.backgroundColor = [UIColor clearColor]; }
|
||||
if ([self.accessibilityIdentifier isEqualToString:@"brand_promo.view"]) { self.superview.backgroundColor = originalColor; }
|
||||
if ([self.accessibilityIdentifier isEqualToString:@"eml.cvr"]) { self.backgroundColor = originalColor; }
|
||||
if ([self.accessibilityIdentifier isEqualToString:@"eml.topic_channel_details"]) { self.backgroundColor = originalColor; }
|
||||
if ([self.accessibilityIdentifier isEqualToString:@"eml.live_chat_text_message"]) { self.backgroundColor = originalColor; }
|
||||
if ([self.accessibilityIdentifier isEqualToString:@"rich_header"]) { self.backgroundColor = originalColor; }
|
||||
if ([self.accessibilityIdentifier isEqualToString:@"id.ui.comment_cell"]) { self.backgroundColor = originalColor; }
|
||||
if ([self.accessibilityIdentifier isEqualToString:@"id.ui.comment_thread"]) { self.backgroundColor = originalColor; }
|
||||
if ([self.accessibilityIdentifier isEqualToString:@"id.ui.cancel.button"]) { self.superview.backgroundColor = [UIColor clearColor]; }
|
||||
if ([self.accessibilityIdentifier isEqualToString:@"id.elements.components.comment_composer"]) { self.backgroundColor = originalColor; }
|
||||
if ([self.accessibilityIdentifier isEqualToString:@"id.elements.components.filter_chip_bar"]) { self.backgroundColor = originalColor; }
|
||||
if ([self.accessibilityIdentifier isEqualToString:@"id.elements.components.video_list_entry"]) { self.backgroundColor = originalColor; }
|
||||
if ([self.accessibilityIdentifier isEqualToString:@"id.comment.guidelines_text"]) { self.superview.backgroundColor = originalColor; }
|
||||
if ([self.accessibilityIdentifier isEqualToString:@"id.comment.timed_comments_welcome"]) { self.superview.backgroundColor = self.backgroundColor = originalColor; }
|
||||
if ([self.accessibilityIdentifier isEqualToString:@"id.comment.channel_guidelines_bottom_sheet_container"]) { self.backgroundColor = originalColor; }
|
||||
if ([self.accessibilityIdentifier isEqualToString:@"id.comment.channel_guidelines_entry_banner_container"]) { self.superview.backgroundColor = self.backgroundColor = originalColor; }
|
||||
if ([self.accessibilityIdentifier isEqualToString:@"id.comment.comment_group_detail_container"]) { self.backgroundColor = [UIColor clearColor]; }
|
||||
}
|
||||
}
|
||||
%end
|
||||
%end
|
||||
|
||||
// OLED dark mode by @BandarHL
|
||||
UIColor* raisedColor = [UIColor blackColor];
|
||||
%group gOLED
|
||||
%hook YTCommonColorPalette
|
||||
- (UIColor *)background1 {
|
||||
return self.pageStyle == 1 ? [UIColor blackColor] : %orig;
|
||||
}
|
||||
- (UIColor *)background2 {
|
||||
return self.pageStyle == 1 ? [UIColor blackColor] : %orig;
|
||||
}
|
||||
- (UIColor *)background3 {
|
||||
return self.pageStyle == 1 ? [UIColor blackColor] : %orig;
|
||||
}
|
||||
- (UIColor *)baseBackground {
|
||||
return self.pageStyle == 1 ? [UIColor blackColor] : %orig;
|
||||
}
|
||||
- (UIColor *)brandBackgroundSolid {
|
||||
return self.pageStyle == 1 ? [UIColor blackColor] : %orig;
|
||||
}
|
||||
- (UIColor *)brandBackgroundPrimary {
|
||||
return self.pageStyle == 1 ? [UIColor blackColor] : %orig;
|
||||
}
|
||||
- (UIColor *)brandBackgroundSecondary {
|
||||
return self.pageStyle == 1 ? [[UIColor blackColor] colorWithAlphaComponent:0.9] : %orig;
|
||||
}
|
||||
- (UIColor *)raisedBackground {
|
||||
return self.pageStyle == 1 ? [UIColor blackColor] : %orig;
|
||||
}
|
||||
- (UIColor *)staticBrandBlack {
|
||||
return self.pageStyle == 1 ? [UIColor blackColor] : %orig;
|
||||
}
|
||||
- (UIColor *)generalBackgroundA {
|
||||
return self.pageStyle == 1 ? [UIColor blackColor] : %orig;
|
||||
}
|
||||
- (UIColor *)generalBackgroundB {
|
||||
return self.pageStyle == 1 ? [UIColor blackColor] : %orig;
|
||||
}
|
||||
- (UIColor *)menuBackground {
|
||||
return self.pageStyle == 1 ? [UIColor blackColor] : %orig;
|
||||
}
|
||||
%end
|
||||
|
||||
/*
|
||||
// uYou settings (Conflicts iSponsorBlock)
|
||||
%hook UITableViewCell
|
||||
- (void)_layoutSystemBackgroundView {
|
||||
%orig;
|
||||
UIView *systemBackgroundView = [self valueForKey:@"_systemBackgroundView"];
|
||||
NSString *backgroundViewKey = class_getInstanceVariable(systemBackgroundView.class, "_colorView") ? @"_colorView" : @"_backgroundView";
|
||||
((UIView *)[systemBackgroundView valueForKey:backgroundViewKey]).backgroundColor = [UIColor blackColor];
|
||||
}
|
||||
- (void)_layoutSystemBackgroundView:(BOOL)arg1 {
|
||||
%orig;
|
||||
((UIView *)[[self valueForKey:@"_systemBackgroundView"] valueForKey:@"_colorView"]).backgroundColor = [UIColor blackColor];
|
||||
}
|
||||
%end
|
||||
|
||||
%hook settingsReorderTable
|
||||
- (void)viewDidLayoutSubviews {
|
||||
%orig;
|
||||
self.tableView.backgroundColor = [UIColor blackColor];
|
||||
}
|
||||
%end
|
||||
|
||||
%hook FRPSelectListTable
|
||||
- (void)viewDidLayoutSubviews {
|
||||
%orig;
|
||||
self.tableView.backgroundColor = [UIColor blackColor];
|
||||
}
|
||||
%end
|
||||
|
||||
%hook FRPreferences
|
||||
- (void)viewDidLayoutSubviews {
|
||||
%orig;
|
||||
self.tableView.backgroundColor = [UIColor blackColor];
|
||||
}
|
||||
%end
|
||||
*/
|
||||
|
||||
%hook YTInnerTubeCollectionViewController
|
||||
- (UIColor *)backgroundColor:(NSInteger)pageStyle {
|
||||
return pageStyle == 1 ? [UIColor blackColor] : %orig;
|
||||
}
|
||||
%end
|
||||
|
||||
// Explore
|
||||
%hook ASScrollView
|
||||
- (void)didMoveToWindow {
|
||||
%orig;
|
||||
if (isDarkMode()) {
|
||||
self.backgroundColor = [UIColor clearColor];
|
||||
}
|
||||
}
|
||||
%end
|
||||
|
||||
// Your videos
|
||||
%hook ASCollectionView
|
||||
- (void)didMoveToWindow {
|
||||
%orig;
|
||||
if (isDarkMode() && [self.nextResponder isKindOfClass:%c(_ASDisplayView)]) {
|
||||
self.superview.backgroundColor = [UIColor blackColor];
|
||||
}
|
||||
}
|
||||
%end
|
||||
|
||||
// Sub menu?
|
||||
%hook ELMView
|
||||
- (void)didMoveToWindow {
|
||||
%orig;
|
||||
if (isDarkMode()) {
|
||||
self.subviews[0].backgroundColor = [UIColor clearColor];
|
||||
}
|
||||
}
|
||||
%end
|
||||
|
||||
// iSponsorBlock
|
||||
%hook SponsorBlockSettingsController
|
||||
- (void)viewDidLoad {
|
||||
if (self.traitCollection.userInterfaceStyle == UIUserInterfaceStyleDark) {
|
||||
%orig;
|
||||
self.tableView.backgroundColor = [UIColor blackColor];
|
||||
} else { return %orig; }
|
||||
}
|
||||
%end
|
||||
|
||||
%hook SponsorBlockViewController
|
||||
- (void)viewDidLoad {
|
||||
if (self.traitCollection.userInterfaceStyle == UIUserInterfaceStyleDark) {
|
||||
%orig;
|
||||
self.view.backgroundColor = [UIColor blackColor];
|
||||
} else { return %orig; }
|
||||
}
|
||||
%end
|
||||
|
||||
// Search View
|
||||
%hook YTSearchBarView
|
||||
- (void)setBackgroundColor:(UIColor *)color {
|
||||
return isDarkMode() ? %orig([UIColor blackColor]) : %orig;
|
||||
}
|
||||
%end
|
||||
|
||||
// History Search view
|
||||
%hook YTSearchBoxView
|
||||
- (void)setBackgroundColor:(UIColor *)color {
|
||||
return isDarkMode() ? %orig([UIColor blackColor]) : %orig;
|
||||
|
||||
}
|
||||
%end
|
||||
|
||||
// Comment view
|
||||
%hook YTCommentView
|
||||
- (void)setBackgroundColor:(UIColor *)color {
|
||||
return isDarkMode() ? %orig([UIColor blackColor]) : %orig;
|
||||
}
|
||||
%end
|
||||
|
||||
%hook YTCreateCommentAccessoryView
|
||||
- (void)setBackgroundColor:(UIColor *)color {
|
||||
return isDarkMode() ? %orig([UIColor blackColor]) : %orig;
|
||||
}
|
||||
%end
|
||||
|
||||
%hook YTCreateCommentTextView
|
||||
- (void)setBackgroundColor:(UIColor *)color {
|
||||
return isDarkMode() ? %orig([UIColor blackColor]) : %orig;
|
||||
}
|
||||
- (void)setTextColor:(UIColor *)color { // fix black text in #Shorts video's comment
|
||||
return isDarkMode() ? %orig([UIColor whiteColor]) : %orig;
|
||||
}
|
||||
%end
|
||||
|
||||
%hook YTCommentDetailHeaderCell
|
||||
- (void)didMoveToWindow {
|
||||
%orig;
|
||||
if (isDarkMode()) {
|
||||
self.subviews[2].backgroundColor = [UIColor blackColor];
|
||||
}
|
||||
}
|
||||
%end
|
||||
|
||||
%hook YTFormattedStringLabel // YT is werid...
|
||||
- (void)setBackgroundColor:(UIColor *)color {
|
||||
return isDarkMode() ? %orig([UIColor clearColor]) : %orig;
|
||||
}
|
||||
%end
|
||||
|
||||
// Live chat comment
|
||||
%hook YCHLiveChatActionPanelView
|
||||
- (void)setBackgroundColor:(UIColor *)color {
|
||||
return isDarkMode() ? %orig([UIColor blackColor]) : %orig;
|
||||
}
|
||||
%end
|
||||
|
||||
%hook YTEmojiTextView
|
||||
- (void)setBackgroundColor:(UIColor *)color {
|
||||
return isDarkMode() ? %orig([UIColor blackColor]) : %orig;
|
||||
}
|
||||
%end
|
||||
|
||||
%hook YCHLiveChatView
|
||||
- (void)didMoveToWindow {
|
||||
%orig;
|
||||
if (isDarkMode()) {
|
||||
self.subviews[1].backgroundColor = [UIColor blackColor];
|
||||
}
|
||||
}
|
||||
%end
|
||||
|
||||
%hook YTCollectionView
|
||||
- (void)setBackgroundColor:(UIColor *)color {
|
||||
return isDarkMode() ? %orig([UIColor blackColor]) : %orig;
|
||||
}
|
||||
%end
|
||||
|
||||
//
|
||||
%hook YTBackstageCreateRepostDetailView
|
||||
- (void)setBackgroundColor:(UIColor *)color {
|
||||
return isDarkMode() ? %orig([UIColor blackColor]) : %orig;
|
||||
}
|
||||
%end
|
||||
|
||||
// Others
|
||||
%hook _ASDisplayView
|
||||
- (void)layoutSubviews {
|
||||
%orig;
|
||||
if (isDarkMode()) {
|
||||
UIResponder *responder = [self nextResponder];
|
||||
while (responder != nil) {
|
||||
if ([responder isKindOfClass:NSClassFromString(@"YTActionSheetDialogViewController")]) {
|
||||
self.backgroundColor = [UIColor blackColor];
|
||||
}
|
||||
if ([responder isKindOfClass:NSClassFromString(@"YTPanelLoadingStrategyViewController")]) {
|
||||
self.backgroundColor = [UIColor blackColor];
|
||||
}
|
||||
if ([responder isKindOfClass:NSClassFromString(@"YTTabHeaderElementsViewController")]) {
|
||||
self.backgroundColor = [UIColor blackColor];
|
||||
}
|
||||
if ([responder isKindOfClass:NSClassFromString(@"YTEditSheetControllerElementsContentViewController")]) {
|
||||
self.backgroundColor = [UIColor blackColor];
|
||||
}
|
||||
responder = [responder nextResponder];
|
||||
}
|
||||
}
|
||||
}
|
||||
- (void)didMoveToWindow {
|
||||
%orig;
|
||||
if (isDarkMode()) {
|
||||
if ([self.nextResponder isKindOfClass:%c(ASScrollView)]) { self.backgroundColor = [UIColor clearColor]; }
|
||||
if ([self.accessibilityIdentifier isEqualToString:@"brand_promo.view"]) { self.backgroundColor = [UIColor blackColor]; }
|
||||
if ([self.accessibilityIdentifier isEqualToString:@"eml.cvr"]) { self.backgroundColor = [UIColor blackColor]; }
|
||||
if ([self.accessibilityIdentifier isEqualToString:@"eml.topic_channel_details"]) { self.backgroundColor = [UIColor blackColor]; }
|
||||
if ([self.accessibilityIdentifier isEqualToString:@"eml.live_chat_text_message"]) { self.backgroundColor = [UIColor blackColor]; }
|
||||
if ([self.accessibilityIdentifier isEqualToString:@"rich_header"]) { self.backgroundColor = [UIColor blackColor]; }
|
||||
if ([self.accessibilityIdentifier isEqualToString:@"id.ui.comment_cell"]) { self.backgroundColor = [UIColor blackColor]; }
|
||||
if ([self.accessibilityIdentifier isEqualToString:@"id.ui.comment_thread"]) { self.backgroundColor = [UIColor blackColor]; }
|
||||
if ([self.accessibilityIdentifier isEqualToString:@"id.ui.cancel.button"]) { self.superview.backgroundColor = [UIColor clearColor]; }
|
||||
if ([self.accessibilityIdentifier isEqualToString:@"id.elements.components.comment_composer"]) { self.backgroundColor = [UIColor blackColor]; }
|
||||
if ([self.accessibilityIdentifier isEqualToString:@"id.elements.components.filter_chip_bar"]) { self.backgroundColor = [UIColor blackColor]; }
|
||||
if ([self.accessibilityIdentifier isEqualToString:@"id.elements.components.video_list_entry"]) { self.backgroundColor = [UIColor blackColor]; }
|
||||
if ([self.accessibilityIdentifier isEqualToString:@"id.comment.guidelines_text"]) { self.superview.backgroundColor = [UIColor blackColor]; }
|
||||
if ([self.accessibilityIdentifier isEqualToString:@"id.comment.timed_comments_welcome"]) { self.superview.backgroundColor = self.backgroundColor = [UIColor blackColor]; }
|
||||
if ([self.accessibilityIdentifier isEqualToString:@"id.comment.channel_guidelines_bottom_sheet_container"]) { self.backgroundColor = [UIColor blackColor]; }
|
||||
if ([self.accessibilityIdentifier isEqualToString:@"id.comment.channel_guidelines_entry_banner_container"]) { self.superview.backgroundColor = self.backgroundColor = [UIColor blackColor]; }
|
||||
if ([self.accessibilityIdentifier isEqualToString:@"id.comment.comment_group_detail_container"]) { self.backgroundColor = [UIColor clearColor]; }
|
||||
}
|
||||
}
|
||||
%end
|
||||
|
||||
// Open link with...
|
||||
%hook ASWAppSwitchingSheetHeaderView
|
||||
- (void)setBackgroundColor:(UIColor *)color {
|
||||
return isDarkMode() ? %orig(raisedColor) : %orig;
|
||||
}
|
||||
%end
|
||||
|
||||
%hook ASWAppSwitchingSheetFooterView
|
||||
- (void)setBackgroundColor:(UIColor *)color {
|
||||
return isDarkMode() ? %orig(raisedColor) : %orig;
|
||||
}
|
||||
%end
|
||||
|
||||
%hook ASWAppSwitcherCollectionViewCell
|
||||
- (void)didMoveToWindow {
|
||||
%orig;
|
||||
if (isDarkMode()) {
|
||||
self.backgroundColor = raisedColor;
|
||||
self.subviews[1].backgroundColor = raisedColor;
|
||||
self.superview.backgroundColor = raisedColor;
|
||||
}
|
||||
}
|
||||
%end
|
||||
%end
|
||||
|
||||
// OLED keyboard by @ichitaso <3 - http://gist.github.com/ichitaso/935100fd53a26f18a9060f7195a1be0e
|
||||
%group gOLEDKB
|
||||
%hook UIPredictionViewController
|
||||
- (void)loadView {
|
||||
%orig;
|
||||
[self.view setBackgroundColor:[UIColor blackColor]];
|
||||
}
|
||||
%end
|
||||
|
||||
%hook UICandidateViewController
|
||||
- (void)loadView {
|
||||
%orig;
|
||||
[self.view setBackgroundColor:[UIColor blackColor]];
|
||||
}
|
||||
%end
|
||||
|
||||
%hook UIKeyboardDockView
|
||||
- (void)didMoveToWindow {
|
||||
%orig;
|
||||
self.backgroundColor = [UIColor blackColor];
|
||||
}
|
||||
%end
|
||||
|
||||
%hook UIKeyboardLayoutStar
|
||||
- (void)didMoveToWindow {
|
||||
%orig;
|
||||
self.backgroundColor = [UIColor blackColor];
|
||||
}
|
||||
%end
|
||||
|
||||
%hook UIKBRenderConfig // Prediction text color
|
||||
- (void)setLightKeyboard:(BOOL)arg1 { %orig(NO); }
|
||||
%end
|
||||
%end
|
||||
|
||||
# pragma mark - ctor
|
||||
%ctor {
|
||||
%init;
|
||||
if (IsEnabled(@"oledKeyBoard_enabled")) {
|
||||
%init(gOLEDKB);
|
||||
}
|
||||
if (oledDarkTheme()) {
|
||||
%init(gOLED);
|
||||
}
|
||||
if (oldDarkTheme()) {
|
||||
%init(gOldDarkTheme);
|
||||
}
|
||||
}
|
||||
1682
Source/VersionSpoofer.xm
Normal file
1682
Source/VersionSpoofer.xm
Normal file
File diff suppressed because it is too large
Load diff
86
Source/update-submodules.txt
Normal file
86
Source/update-submodules.txt
Normal file
|
|
@ -0,0 +1,86 @@
|
|||
// Template for whenever I refresh the main branch. and to re-add the submodules afterwards.
|
||||
|
||||
name: Update Submodules
|
||||
|
||||
on:
|
||||
workflow_dispatch:
|
||||
|
||||
jobs:
|
||||
update-submodules:
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
steps:
|
||||
- name: Checkout code
|
||||
uses: actions/checkout@v4.1.1
|
||||
|
||||
- name: Set up Git
|
||||
run: |
|
||||
git config --global user.email "actions@github.com"
|
||||
git config --global user.name "GitHub Actions"
|
||||
|
||||
- name: Add uYouPlusExtra submodules
|
||||
run: |
|
||||
git submodule add https://github.com/PoomSmart/FLEXing.git Tweaks/FLEXing
|
||||
git submodule add https://github.com/arichorn/YTHoldForSpeed.git Tweaks/YTHoldForSpeed
|
||||
git add .
|
||||
git commit -m "added uYouPlusExtra submodules"
|
||||
git push origin
|
||||
|
||||
# - name: Update submodules
|
||||
# run: |
|
||||
# git submodule update --init --recursive --remote
|
||||
# git add .
|
||||
# git commit -m "updated submodules"
|
||||
# git push origin
|
||||
# continue-on-error: true
|
||||
|
||||
- name: Update submodules
|
||||
run: |
|
||||
git submodule update --init --recursive --remote Tweaks/Alderis
|
||||
git add .
|
||||
git submodule update --init --recursive --remote Tweaks/DontEatMyContent
|
||||
git add .
|
||||
git submodule update --init --recursive --remote Tweaks/YTHoldForSpeed
|
||||
git add .
|
||||
git submodule update --init --recursive --remote Tweaks/PSHeader
|
||||
git add .
|
||||
git submodule update --init --recursive --remote Tweaks/Return-YouTube-Dislikes
|
||||
git add .
|
||||
git submodule update --init --recursive --remote Tweaks/YTABConfig
|
||||
git add .
|
||||
git submodule update --init --recursive --remote Tweaks/YTUHD
|
||||
git add .
|
||||
git submodule update --init --recursive --remote Tweaks/YTVideoOverlay
|
||||
git add .
|
||||
git submodule update --init --recursive --remote Tweaks/YouMute
|
||||
git add .
|
||||
git submodule update --init --recursive --remote Tweaks/YouPiP
|
||||
git add .
|
||||
git submodule update --init --recursive --remote Tweaks/YouQuality
|
||||
git add .
|
||||
git submodule update --init --recursive --remote Tweaks/YouTubeHeader
|
||||
git add .
|
||||
git submodule update --init --recursive --remote Tweaks/iSponsorBlock
|
||||
git add .
|
||||
git commit -m "updated submodules"
|
||||
git push origin
|
||||
continue-on-error: true
|
||||
|
||||
- name: Make .bundle files
|
||||
run: |
|
||||
cd Bundles
|
||||
ln -s ../Tweaks/YTHoldForSpeed/layout/Library/Application\ Support/YTHoldForSpeed.bundle YTHoldForSpeed.bundle
|
||||
ln -s ../Tweaks/YTVideoOverlay/layout/Library/Application\ Support/YTVideoOverlay.bundle YTVideoOverlay.bundle
|
||||
ln -s ../Tweaks/YouMute/layout/Library/Application\ Support/YouMute.bundle YouMute.bundle
|
||||
ln -s ../Tweaks/YouQuality/layout/Library/Application\ Support/YouQuality.bundle YouQuality.bundle
|
||||
git add .
|
||||
git commit -m "Added bundles"
|
||||
git push origin
|
||||
|
||||
- name: Check exit code
|
||||
run: |
|
||||
exit_code=$?
|
||||
if [ $exit_code -ne 0 ]; then
|
||||
echo "Submodule update failed with exit code $exit_code"
|
||||
exit 1
|
||||
fi
|
||||
|
|
@ -1 +1 @@
|
|||
Subproject commit a514fbe4e063a1157da6e68fc05633ef9cec0f44
|
||||
Subproject commit fe65d50f16e978e97dc0c0022133235d5cebab80
|
||||
|
|
@ -1 +1 @@
|
|||
Subproject commit 07d0ad67c5abe370f3731ecdc0961ae5dae8b487
|
||||
Subproject commit f7a65cf89b92ca1d35bf8b499acc4419eef7bc13
|
||||
1
Tweaks/MrBeastify
Submodule
1
Tweaks/MrBeastify
Submodule
|
|
@ -0,0 +1 @@
|
|||
Subproject commit 4fba874a3e1c2f9e392d650554536fc4baebc9c2
|
||||
|
|
@ -1 +1 @@
|
|||
Subproject commit 91fc25a8504faa62eca55dae451fe11ac7d1602d
|
||||
Subproject commit 6ef3de0db741a11055aed2df359e7e5df2d2b593
|
||||
|
|
@ -1 +1 @@
|
|||
Subproject commit ae9d1345f045482b1ab4367ffaec9136e74c84c2
|
||||
Subproject commit ef2acc4f6d425e6611cd3ce0653167fe1537860b
|
||||
1
Tweaks/YTHoldForSpeed
Submodule
1
Tweaks/YTHoldForSpeed
Submodule
|
|
@ -0,0 +1 @@
|
|||
Subproject commit 6a8dce915e3cd54c066f4ad79d27f18cb90cee96
|
||||
|
|
@ -1 +1 @@
|
|||
Subproject commit ed71ce0dbbcb2246defdd2198014846572baea35
|
||||
Subproject commit adf6ba1446aeb2077ea10e32b6ae5c453e6acd7d
|
||||
|
|
@ -1 +1 @@
|
|||
Subproject commit 23dcadf5b418c4da60fb1dd76192f38f68530c48
|
||||
Subproject commit f4938e9a44ca125adbbeb3d9fd1b386f5ebe6a92
|
||||
|
|
@ -1 +1 @@
|
|||
Subproject commit 327d272a36988ae22ad1d118e67e72ee434127b8
|
||||
Subproject commit 519a8988bca40aeb00ee3c3ecef4a1c4ba350e51
|
||||
|
|
@ -1 +1 @@
|
|||
Subproject commit 8b23971bbf40f28acecda2855171918d241929c9
|
||||
Subproject commit bb32e79bee64febe61e48a75a71db2732abc8020
|
||||
|
|
@ -1 +1 @@
|
|||
Subproject commit 99bb00ebbf77267567938787cb8bd775a07641de
|
||||
Subproject commit dffb3fd293351319833a24fc0cd9819be2691c6f
|
||||
|
|
@ -1 +1 @@
|
|||
Subproject commit 96954d578d56e6762f0b179a2b837598a542d40c
|
||||
Subproject commit 2c85fcecd813027894ad001e9002a9f8420e3016
|
||||
|
|
@ -1,8 +0,0 @@
|
|||
read -p $'\e[34m==> \e[1;39mPath to the decrypted YouTube.ipa or YouTube.app: ' PATHTOYT
|
||||
make package IPA=$PATHTOYT FINALPACKAGE=1
|
||||
if [[ $? -eq 0 ]]; then
|
||||
open packages
|
||||
echo "\033[0;32m==> \033[1;39mSHASUM256: $(shasum -a 256 packages/*.ipa)"
|
||||
else
|
||||
echo "\033[0;31m==> \033[1;39mFailed building uYouPlus"
|
||||
fi
|
||||
8
control
8
control
|
|
@ -1,8 +1,8 @@
|
|||
Package: com.qnblackcat.uyouplus
|
||||
Name: uYouPlus
|
||||
Package: com.arichorn.uyouplusextra
|
||||
Name: uYouPlusExtra
|
||||
Architecture: iphoneos-arm
|
||||
Description: Modified version of uYou
|
||||
Maintainer: qnblackcat
|
||||
Description: Modified version of uYouPlus
|
||||
Maintainer: arichorn
|
||||
Author: qnblackcat
|
||||
Section: Tweaks
|
||||
Depends: mobilesubstrate (>= 0.9.5000), com.miro.uyou
|
||||
|
|
|
|||
|
|
@ -130,6 +130,9 @@
|
|||
"HIDE_CHIP_BAR" = "إخفاء الشريط العلوي";
|
||||
"HIDE_CHIP_BAR_DESC" = "إخفاء الشريط العلوي من تبويب الصفحة الرئيسية (موسيقى، ألعاب فيديو، تشكيلات ...) ومن تبويب الاشتراكات (كل الفيديوهات، متابعة المشاهدة,...). تتطلب إعادة تشغيل التطبيق.";
|
||||
|
||||
"HIDE_PLAY_NEXT_IN_QUEUE" = "إخفاء \"تشغيل المقطع التالي من قائمة الانتظار\"";
|
||||
"HIDE_PLAY_NEXT_IN_QUEUE_DESC" = "إخفاء خيار \"تشغيل التالي من قائمة الانتظار\" من قائمة السياق في حسابات يوتيوب المدفوعة";
|
||||
|
||||
"NEW_MINIPLAYER_STYLE" = "تغيير شكل المشغّل المصغر (أداة BigYTMiniPlayer)";
|
||||
"NEW_MINIPLAYER_STYLE_DESC" = "تغيير شكل المشغّل المصغر في الآيفون إلى نفس شكله في الآيباد - تتطلب إغلاق التطبيق وإعادة فتحه.";
|
||||
|
||||
|
|
|
|||
|
|
@ -130,6 +130,9 @@
|
|||
"HIDE_CHIP_BAR" = "Hide the Upper bar";
|
||||
"HIDE_CHIP_BAR_DESC" = "Hide Upper bar in the Home feeds (Trends, Music, Gaming...) and Subcription feeds (All videos, Continue watching...). App restart is required.";
|
||||
|
||||
"HIDE_PLAY_NEXT_IN_QUEUE" = "Hide \"Play next in queue\"";
|
||||
"HIDE_PLAY_NEXT_IN_QUEUE_DESC" = "Hide the premium \"Play next in queue\" option in video context menus";
|
||||
|
||||
"NEW_MINIPLAYER_STYLE" = "Nový styl minipřehrávače (BigYTMiniPlayer)";
|
||||
"NEW_MINIPLAYER_STYLE_DESC" = "Je potřeba restart aplikace.";
|
||||
|
||||
|
|
|
|||
|
|
@ -130,6 +130,9 @@
|
|||
"HIDE_CHIP_BAR" = "Obere Leiste ausblenden";
|
||||
"HIDE_CHIP_BAR_DESC" = "Obere Leiste in den Home-Feeds (Trends, Musik, Spiele...) und Abo-Feeds (Alle Videos, Weiterschauen...) ausblenden. App-Neustart erforderlich.";
|
||||
|
||||
"HIDE_PLAY_NEXT_IN_QUEUE" = "Hide \"Play next in queue\"";
|
||||
"HIDE_PLAY_NEXT_IN_QUEUE_DESC" = "Hide the premium \"Play next in queue\" option in video context menus";
|
||||
|
||||
"NEW_MINIPLAYER_STYLE" = "Neuer Miniplayer Style (BigYTMiniPlayer)";
|
||||
"NEW_MINIPLAYER_STYLE_DESC" = "App-Neustart erforderlich!";
|
||||
|
||||
|
|
|
|||
|
|
@ -130,6 +130,9 @@
|
|||
"HIDE_CHIP_BAR" = "Hide the Upper bar";
|
||||
"HIDE_CHIP_BAR_DESC" = "Hide Upper bar in the Home feeds (Trends, Music, Gaming...) and Subcription feeds (All videos, Continue watching...). App restart is required.";
|
||||
|
||||
"HIDE_PLAY_NEXT_IN_QUEUE" = "Hide \"Play next in queue\"";
|
||||
"HIDE_PLAY_NEXT_IN_QUEUE_DESC" = "Hide the premium \"Play next in queue\" option in video context menus";
|
||||
|
||||
"NEW_MINIPLAYER_STYLE" = "Καινούργιο miniplayer θέμα στην μπάρα (BigYTMiniPlayer)";
|
||||
"NEW_MINIPLAYER_STYLE_DESC" = "Απαιτείται επανεκκίνηση της εφαρμογής.";
|
||||
|
||||
|
|
|
|||
|
|
@ -130,6 +130,9 @@
|
|||
"HIDE_CHIP_BAR" = "Hide the Upper bar";
|
||||
"HIDE_CHIP_BAR_DESC" = "Hide Upper bar in the Home feeds (Trends, Music, Gaming...) and Subscription feeds (All videos, Continue watching...).";
|
||||
|
||||
"HIDE_PLAY_NEXT_IN_QUEUE" = "Hide \"Play next in queue\"";
|
||||
"HIDE_PLAY_NEXT_IN_QUEUE_DESC" = "Hide the premium \"Play next in queue\" option in video context menus";
|
||||
|
||||
"NEW_MINIPLAYER_STYLE" = "New mini player bar style (BigYTMiniPlayer)";
|
||||
"NEW_MINIPLAYER_STYLE_DESC" = "App restart is required.";
|
||||
|
||||
|
|
|
|||
|
|
@ -130,6 +130,9 @@
|
|||
"HIDE_CHIP_BAR" = "Ocultar la barra superior";
|
||||
"HIDE_CHIP_BAR_DESC" = "Ocultar la barra superior de las fuentes de inicio (Tendencias, Música, Juegos...) y de suscripción (Todos los vídeos, Seguir viendo...). Es necesario reiniciar la aplicación.";
|
||||
|
||||
"HIDE_PLAY_NEXT_IN_QUEUE" = "Hide \"Play next in queue\"";
|
||||
"HIDE_PLAY_NEXT_IN_QUEUE_DESC" = "Hide the premium \"Play next in queue\" option in video context menus";
|
||||
|
||||
"NEW_MINIPLAYER_STYLE" = "Nuevo estilo de barra del minirreproductor (BigYTMiniPlayer)";
|
||||
"NEW_MINIPLAYER_STYLE_DESC" = "Requiere reiniciar la app.";
|
||||
|
||||
|
|
|
|||
|
|
@ -130,6 +130,9 @@
|
|||
"HIDE_CHIP_BAR" = "Masquer la barre supérieure";
|
||||
"HIDE_CHIP_BAR_DESC" = "Masquer la barre supérieure dans les fils d'actualité (Tendances, Musique, Gaming...) et les fils d'abonnement (Toutes les vidéos, Poursuivre la lecture...). Un redémarrage de l'application est nécessaire.";
|
||||
|
||||
"HIDE_PLAY_NEXT_IN_QUEUE" = "Hide \"Play next in queue\"";
|
||||
"HIDE_PLAY_NEXT_IN_QUEUE_DESC" = "Hide the premium \"Play next in queue\" option in video context menus";
|
||||
|
||||
"NEW_MINIPLAYER_STYLE" = "Nouveau style de barre de mini-lecteur (BigYTMiniPlayer)";
|
||||
"NEW_MINIPLAYER_STYLE_DESC" = "Un redémarrage de l'application est nécessaire";
|
||||
|
||||
|
|
|
|||
|
|
@ -130,6 +130,9 @@
|
|||
"HIDE_CHIP_BAR" = "Hide the Upper bar";
|
||||
"HIDE_CHIP_BAR_DESC" = "Hide Upper bar in the Home feeds (Trends, Music, Gaming...) and Subcription feeds (All videos, Continue watching...). App restart is required.";
|
||||
|
||||
"HIDE_PLAY_NEXT_IN_QUEUE" = "Hide \"Play next in queue\"";
|
||||
"HIDE_PLAY_NEXT_IN_QUEUE_DESC" = "Hide the premium \"Play next in queue\" option in video context menus";
|
||||
|
||||
"NEW_MINIPLAYER_STYLE" = "עיצוב נגן קטן חדש (BigYTMiniPlayer)";
|
||||
"NEW_MINIPLAYER_STYLE_DESC" = "נדרש לפתוח מחדש את היישום.";
|
||||
|
||||
|
|
|
|||
|
|
@ -130,6 +130,9 @@
|
|||
"HIDE_CHIP_BAR" = "Hide the Upper bar";
|
||||
"HIDE_CHIP_BAR_DESC" = "Hide Upper bar in the Home feeds (Trends, Music, Gaming...) and Subcription feeds (All videos, Continue watching...). App restart is required.";
|
||||
|
||||
"HIDE_PLAY_NEXT_IN_QUEUE" = "Hide \"Play next in queue\"";
|
||||
"HIDE_PLAY_NEXT_IN_QUEUE_DESC" = "Hide the premium \"Play next in queue\" option in video context menus";
|
||||
|
||||
"NEW_MINIPLAYER_STYLE" = "Új minilejátszó sáv (BigYTMiniPlayer)";
|
||||
"NEW_MINIPLAYER_STYLE_DESC" = "Az alkalmazás újraindítása szükséges.";
|
||||
|
||||
|
|
|
|||
|
|
@ -130,6 +130,9 @@
|
|||
"HIDE_CHIP_BAR" = "Nascondi la barra superiore";
|
||||
"HIDE_CHIP_BAR_DESC" = "Nascondi la barra superiore nella Home (Tendenze, Musica, Giochi...) e Iscrizioni (Tutti i video, Continua a guardare...). È richiesto il riavvio dell'app.";
|
||||
|
||||
"HIDE_PLAY_NEXT_IN_QUEUE" = "Hide \"Play next in queue\"";
|
||||
"HIDE_PLAY_NEXT_IN_QUEUE_DESC" = "Hide the premium \"Play next in queue\" option in video context menus";
|
||||
|
||||
"NEW_MINIPLAYER_STYLE" = "Nuovo stile per la barra del miniplayer (BigYTMiniPlayer)";
|
||||
"NEW_MINIPLAYER_STYLE_DESC" = "È richiesto un riavvio dell'app.";
|
||||
|
||||
|
|
|
|||
|
|
@ -1,9 +1,9 @@
|
|||
// Settings
|
||||
"VERSION" = "uYouPlusのバージョン: %@";
|
||||
"VERSION_CHECK" = "ここをタップしてアップデートを確認!";
|
||||
"VERSION" = "uYouPlus's version: %@";
|
||||
"VERSION_CHECK" = "ここをタップしてアップデートを確認しよう!";
|
||||
|
||||
// Video controls overlay options
|
||||
"VIDEO_CONTROLS_OVERLAY_OPTIONS" = "動画コントロールのオーバーレイ設定";
|
||||
// Video player options
|
||||
"VIDEO_PLAYER_OPTIONS" = "プレーヤーの設定";
|
||||
|
||||
"AUTO_FULLSCREEN" = "自動でフルスクリーンにする (YTAutoFullScreen)";
|
||||
"AUTO_FULLSCREEN_DESC" = "動画を自動でフルスクリーンにします。";
|
||||
|
|
@ -20,7 +20,7 @@
|
|||
"YT_MINIPLAYER" = "すべての動画でミニプレーヤーを有効にする";
|
||||
"YT_MINIPLAYER_DESC" = "例:子ども向けの動画など";
|
||||
|
||||
"STOCK_VOLUME_HUD" = "iOSのstockボリュームHUDを利用する";
|
||||
"STOCK_VOLUME_HUD" = "iOSのネイティブ音量HUDを利用する";
|
||||
"STOCK_VOLUME_HUD_DESC" = "";
|
||||
|
||||
// Video controls overlay options
|
||||
|
|
@ -44,7 +44,7 @@
|
|||
"HIDE_PREVIOUS_AND_NEXT_BUTTON" = "前後の動画を再生するボタンを非表示";
|
||||
"HIDE_PREVIOUS_AND_NEXT_BUTTON_DESC" = "動画コントロールのオーバーレイで次の動画と前の動画を再生するボタンを非表示にします。";
|
||||
|
||||
"REPLACE_PREVIOUS_NEXT_BUTTON" = "前後の動画を再生するボタンを置換";
|
||||
"REPLACE_PREVIOUS_NEXT_BUTTON" = "前後の動画を再生するボタンを置き換える";
|
||||
"REPLACE_PREVIOUS_NEXT_BUTTON_DESC" = "次の動画と前の動画を再生するボタンをそれぞれ早送りと巻き戻しボタンに置き換えます。アプリの再起動が必要です。";
|
||||
|
||||
"HIDE_HOVER_CARD" = "動画終わりのホバーカードを非表示 (YTNoHoverCards)";
|
||||
|
|
@ -53,7 +53,7 @@
|
|||
"HIDE_RIGHT_PANEL" = "フルスクリーンモードで右パネルを非表示";
|
||||
"HIDE_RIGHT_PANEL_DESC" = "アプリの再起動が必要です。";
|
||||
|
||||
"RED_PROGRESS_BAR" = "赤いプログレスバー";
|
||||
"RED_PROGRESS_BAR" = "赤いプログレスバーに戻す";
|
||||
"RED_PROGRESS_BAR_DESC" = "赤いプログレスバーに戻します。アプリの再起動が必要です。";
|
||||
|
||||
"DONT_EAT_MY_CONTENT" = "2:1の動画とノッチ/Dynamic Islandの最適化 (DontEatMyContent)";
|
||||
|
|
@ -92,8 +92,8 @@
|
|||
// Theme
|
||||
"THEME_OPTIONS" = "テーマの設定";
|
||||
|
||||
"OLED_DARK_THEME" = "有機ELダークモード (実験的機能)";
|
||||
"OLED_DARK_THEME_2" = "有機ELダークモード";
|
||||
"OLED_DARK_THEME" = "OLEDダークモード (実験的機能)";
|
||||
"OLED_DARK_THEME_2" = "OLEDダークモード";
|
||||
"OLED_DARK_THEME_DESC" = "正常に動作しない可能性があります。アプリの再起動が必要です。";
|
||||
|
||||
"OLD_DARK_THEME" = "従来のダークモード";
|
||||
|
|
@ -102,7 +102,7 @@
|
|||
"DEFAULT_THEME" = "通常";
|
||||
"DEFAULT_THEME_DESC" = "通常のYouTubeのダークモードです。アプリの再起動が必要です。";
|
||||
|
||||
"OLED_KEYBOARD" = "有機ELキーボード (実験的機能)";
|
||||
"OLED_KEYBOARD" = "OLEDキーボード (実験的機能)";
|
||||
"OLED_KEYBOARD_DESC" = "正常に動作しない可能性があります。この設定を変更した場合、アプリの再起動が必要です。";
|
||||
|
||||
// Miscellaneous
|
||||
|
|
@ -119,22 +119,25 @@
|
|||
"DISABLE_HINTS_DESC" = "アプリが再インストールされた際に表示される機能の使い方を非表示にします。";
|
||||
|
||||
"ENABLE_FLEX" = "FLEXを有効化";
|
||||
"ENABLE_FLEX_DESC" = "デバッグ用のFLEXを有効にします(推奨しません) 何をやっているのかわからない場合はオフにしてください。";
|
||||
"ENABLE_FLEX_DESC" = "デバッグのためにFLEXを有効にします(非推奨)。開発者向けであり、通常の使用では必要ありません。必要ない場合は有効化しないでください。";
|
||||
|
||||
"ENABLE_YT_STARTUP_ANIMATION" = "YouTube起動時のアニメーションを有効にする";
|
||||
"ENABLE_YT_STARTUP_ANIMATION" = "YouTube起動時にアニメーションを表示する";
|
||||
"ENABLE_YT_STARTUP_ANIMATION_DESC" = "";
|
||||
|
||||
"FIX_GOOGLE_SIGNIN" = "Googleのサインインを修正 (TrollStoreユーザーのみ)";
|
||||
"FIX_GOOGLE_SIGNIN_DESC" = "アプリがTrollStoreでインストールされた場合のみ機能します。このオプションを有効にしてGoogleアカウントでサインインできるようにします。アプリの再起動が必要です。";
|
||||
"FIX_GOOGLE_SIGNIN_DESC" = "アプリがTrollStoreを用いてインストールされた場合のみ機能します。このオプションを有効にしてGoogleアカウントでサインインできるようにします。アプリの再起動が必要です。";
|
||||
|
||||
"HIDE_CHIP_BAR" = "トップバーを非表示";
|
||||
"HIDE_CHIP_BAR_DESC" = "ホーム(トレンド,音楽,ゲーム...)とサブスクリプション(すべてのビデオ、視聴を続ける...)リボンのトップバーを非表示にします。アプリの再起動が必要です。";
|
||||
|
||||
"HIDE_PLAY_NEXT_IN_QUEUE" = "\"次に再生\"を削除";
|
||||
"HIDE_PLAY_NEXT_IN_QUEUE_DESC" = "コンテキストメニューの\"キューの最初に追加\"オプションを非表示にします。";
|
||||
|
||||
"NEW_MINIPLAYER_STYLE" = "新しいミニプレーヤー・バーを使う (BigYTMiniPlayer)";
|
||||
"NEW_MINIPLAYER_STYLE_DESC" = "アプリの再起動が必要です。";
|
||||
|
||||
"YT_RE_EXPLORE" = "ショートタブを探索タブに置き換える (YTReExplore)";
|
||||
"YT_RE_EXPLORE" = "「ショート」タブを「探索」タブに置き換える (YTReExplore)";
|
||||
"YT_RE_EXPLORE_DESC" = "アプリの再起動が必要です。";
|
||||
|
||||
"IPHONE_LAYOUT" = "iPhoneのレイアウト";
|
||||
"IPHONE_LAYOUT_DESC" = "iPhoneのレイアウトを使用する場合はトグルで切り替えてください。アプリの再起動が必要です。";
|
||||
"IPHONE_LAYOUT_DESC" = "(iPadユーザー向け) iPhoneのレイアウトを使用する場合はこちらで切り替えてください。アプリの再起動が必要です。";
|
||||
|
|
|
|||
|
|
@ -130,6 +130,9 @@
|
|||
"HIDE_CHIP_BAR" = "피드 선택 막대 숨기기";
|
||||
"HIDE_CHIP_BAR_DESC" = "앱의 홈 화면에서 맞춤 동영상(인기 급상승, 음악, 게임...)과 구독 피드(전체, 감상한 동영상...) 선택 막대를 숨깁니다. 앱을 다시 시작해야 합니다.";
|
||||
|
||||
"HIDE_PLAY_NEXT_IN_QUEUE" = "Hide \"Play next in queue\"";
|
||||
"HIDE_PLAY_NEXT_IN_QUEUE_DESC" = "Hide the premium \"Play next in queue\" option in video context menus";
|
||||
|
||||
"NEW_MINIPLAYER_STYLE" = "새로운 스타일의 미니 플레이어 (BigYTMiniPlayer)";
|
||||
"NEW_MINIPLAYER_STYLE_DESC" = "앱을 다시 시작해야 합니다.";
|
||||
|
||||
|
|
|
|||
|
|
@ -130,6 +130,9 @@
|
|||
"HIDE_CHIP_BAR" = "Hide the Upper bar";
|
||||
"HIDE_CHIP_BAR_DESC" = "Hide Upper bar in the Home feeds (Trends, Music, Gaming...) and Subcription feeds (All videos, Continue watching...). App restart is required.";
|
||||
|
||||
"HIDE_PLAY_NEXT_IN_QUEUE" = "Hide \"Play next in queue\"";
|
||||
"HIDE_PLAY_NEXT_IN_QUEUE_DESC" = "Hide the premium \"Play next in queue\" option in video context menus";
|
||||
|
||||
"NEW_MINIPLAYER_STYLE" = "Nieuwe Mini Speler stijl (BigYTMiniPlayer)";
|
||||
"NEW_MINIPLAYER_STYLE_DESC" = "Je moet de app opnieuw opstarten om dit te activeren.";
|
||||
|
||||
|
|
|
|||
|
|
@ -130,6 +130,9 @@
|
|||
"HIDE_CHIP_BAR" = "Hide the Upper bar";
|
||||
"HIDE_CHIP_BAR_DESC" = "Hide Upper bar in the Home feeds (Trends, Music, Gaming...) and Subcription feeds (All videos, Continue watching...). App restart is required.";
|
||||
|
||||
"HIDE_PLAY_NEXT_IN_QUEUE" = "Hide \"Play next in queue\"";
|
||||
"HIDE_PLAY_NEXT_IN_QUEUE_DESC" = "Hide the premium \"Play next in queue\" option in video context menus";
|
||||
|
||||
"NEW_MINIPLAYER_STYLE" = "Nowy styl miniodtwarzacza (BigYTMiniPlayer)";
|
||||
"NEW_MINIPLAYER_STYLE_DESC" = "Restart aplikacji jest wymagany.";
|
||||
|
||||
|
|
|
|||
|
|
@ -130,6 +130,9 @@
|
|||
"HIDE_CHIP_BAR" = "Ocultar a Barra superior";
|
||||
"HIDE_CHIP_BAR_DESC" = "Oculta a Barra superior nos Feeds iniciais (Tendências, Música, Jogos...) e Feeds de inscrições (Todos os vídeos, Continuar assistindo...). A reinicialização do app é necessária.";
|
||||
|
||||
"HIDE_PLAY_NEXT_IN_QUEUE" = "Hide \"Play next in queue\"";
|
||||
"HIDE_PLAY_NEXT_IN_QUEUE_DESC" = "Hide the premium \"Play next in queue\" option in video context menus";
|
||||
|
||||
"NEW_MINIPLAYER_STYLE" = "Novo estilo de barra de miniplayer (BigYTMiniPlayer)";
|
||||
"NEW_MINIPLAYER_STYLE_DESC" = "A reinicialização do app é necessária.";
|
||||
|
||||
|
|
|
|||
|
|
@ -130,6 +130,9 @@
|
|||
"HIDE_CHIP_BAR" = "Hide the Upper bar";
|
||||
"HIDE_CHIP_BAR_DESC" = "Hide Upper bar in the Home feeds (Trends, Music, Gaming...) and Subcription feeds (All videos, Continue watching...). App restart is required.";
|
||||
|
||||
"HIDE_PLAY_NEXT_IN_QUEUE" = "Hide \"Play next in queue\"";
|
||||
"HIDE_PLAY_NEXT_IN_QUEUE_DESC" = "Hide the premium \"Play next in queue\" option in video context menus";
|
||||
|
||||
"NEW_MINIPLAYER_STYLE" = "Stil nou bară Miniplayer (BigYTMiniPlayer)";
|
||||
"NEW_MINIPLAYER_STYLE_DESC" = "Este necesară repornirea aplicației.";
|
||||
|
||||
|
|
|
|||
|
|
@ -130,6 +130,9 @@
|
|||
"HIDE_CHIP_BAR" = "Скрыть верхнюю панель";
|
||||
"HIDE_CHIP_BAR_DESC" = "Скрывает верхнюю панель на вкладках «Главная» (Тренды, Музыка, Игры...) и «Подписки» (Все видео, Продолжить просмотр...)\nТребуется перезапуск приложения.";
|
||||
|
||||
"HIDE_PLAY_NEXT_IN_QUEUE" = "Hide \"Play next in queue\"";
|
||||
"HIDE_PLAY_NEXT_IN_QUEUE_DESC" = "Hide the premium \"Play next in queue\" option in video context menus";
|
||||
|
||||
"NEW_MINIPLAYER_STYLE" = "Мини-плеер в стиле iPad (BigYTMiniPlayer)";
|
||||
"NEW_MINIPLAYER_STYLE_DESC" = "Потребуется перезагрузка.";
|
||||
|
||||
|
|
|
|||
|
|
@ -145,6 +145,9 @@ https://github.com/PoomSmart/Return-YouTube-Dislikes/tree/main/layout/Library/Ap
|
|||
"HIDE_CHIP_BAR" = "Hide the Upper bar";
|
||||
"HIDE_CHIP_BAR_DESC" = "Hide Upper bar in the Home feeds (Trends, Music, Gaming...) and Subscription feeds (All videos, Continue watching...).";
|
||||
|
||||
"HIDE_PLAY_NEXT_IN_QUEUE" = "Hide \"Play next in queue\"";
|
||||
"HIDE_PLAY_NEXT_IN_QUEUE_DESC" = "Hide the premium \"Play next in queue\" option in video context menus";
|
||||
|
||||
"NEW_MINIPLAYER_STYLE" = "New mini player bar style (BigYTMiniPlayer)";
|
||||
"NEW_MINIPLAYER_STYLE_DESC" = "App restart is required.";
|
||||
|
||||
|
|
|
|||
|
|
@ -127,6 +127,9 @@
|
|||
"HIDE_CHIP_BAR" = "Üst çubuğu gizle";
|
||||
"HIDE_CHIP_BAR_DESC" = "Ana Sayfa akışlarında (Trendler, Müzik, Oyun...) ve Abonelik akışlarında (Tüm videolar, İzlemeye devam et...) Üst çubuğu gizle. Uygulamanın yeniden başlatılması gerekir.";
|
||||
|
||||
"HIDE_PLAY_NEXT_IN_QUEUE" = "Hide \"Play next in queue\"";
|
||||
"HIDE_PLAY_NEXT_IN_QUEUE_DESC" = "Hide the premium \"Play next in queue\" option in video context menus";
|
||||
|
||||
"NEW_MINIPLAYER_STYLE" = "Yeni mini oynatıcı bar stili. (BigYTMiniPlayer)";
|
||||
"NEW_MINIPLAYER_STYLE_DESC" = "Uygulamanın yeniden başlatılması gerekir.";
|
||||
|
||||
|
|
|
|||
BIN
lang/uYouPlus.bundle/uYouPlus_logo.png
Normal file
BIN
lang/uYouPlus.bundle/uYouPlus_logo.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 58 KiB |
BIN
lang/uYouPlus.bundle/uYouPlus_logo_dark.png
Normal file
BIN
lang/uYouPlus.bundle/uYouPlus_logo_dark.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 54 KiB |
|
|
@ -130,6 +130,9 @@
|
|||
"HIDE_CHIP_BAR" = "Ẩn thanh phím tắt";
|
||||
"HIDE_CHIP_BAR_DESC" = "Ẩn thanh phím tắt trong Home feed (Thịnh hành, Âm nhạc, Trò chơi...) và trong Subciption feed (Tất cả, Tiếp tục xem...).";
|
||||
|
||||
"HIDE_PLAY_NEXT_IN_QUEUE" = "Hide \"Play next in queue\"";
|
||||
"HIDE_PLAY_NEXT_IN_QUEUE_DESC" = "Hide the premium \"Play next in queue\" option in video context menus";
|
||||
|
||||
"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.";
|
||||
|
||||
|
|
|
|||
BIN
lang/uYouPlus.bundle/youtube_logo.png
Normal file
BIN
lang/uYouPlus.bundle/youtube_logo.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 77 KiB |
BIN
lang/uYouPlus.bundle/youtube_logo_dark.png
Normal file
BIN
lang/uYouPlus.bundle/youtube_logo_dark.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 81 KiB |
|
|
@ -130,6 +130,9 @@
|
|||
"HIDE_CHIP_BAR" = "隐藏顶部标签栏";
|
||||
"HIDE_CHIP_BAR_DESC" = "隐藏首页和订阅内容页顶部的标签栏(例如:首页顶部的“音乐”、“游戏”、“新闻”以及订阅内容页顶部的“今天”、“继续观看”、“未观看”等)。更改本设置后需要重启 App。";
|
||||
|
||||
"HIDE_PLAY_NEXT_IN_QUEUE" = "Hide \"Play next in queue\"";
|
||||
"HIDE_PLAY_NEXT_IN_QUEUE_DESC" = "Hide the premium \"Play next in queue\" option in video context menus";
|
||||
|
||||
"NEW_MINIPLAYER_STYLE" = "新迷你播放器风格 (BigYTMiniPlayer)";
|
||||
"NEW_MINIPLAYER_STYLE_DESC" = "更改本设置后需要重启 App。";
|
||||
|
||||
|
|
|
|||
|
|
@ -8,7 +8,7 @@
|
|||
"AUTO_FULLSCREEN" = "自動全螢幕 (YTAutoFullScreen)";
|
||||
"AUTO_FULLSCREEN_DESC" = "自動全螢幕播放影片。";
|
||||
|
||||
"DISABLE_DOUBLE_TAP_TO_SEEK" = "Disable double tap to seek";
|
||||
"DISABLE_DOUBLE_TAP_TO_SEEK" = "停用影片快轉與倒轉";
|
||||
"DISABLE_DOUBLE_TAP_TO_SEEK_DESC" = "";
|
||||
|
||||
"SNAP_TO_CHAPTER" = "停用章節跳轉";
|
||||
|
|
@ -131,6 +131,9 @@
|
|||
"HIDE_CHIP_BAR" = "隱藏上層欄位";
|
||||
"HIDE_CHIP_BAR_DESC" = "隱藏主畫面上層欄位 (話題, 音樂, 遊戲...) 和訂閱對象動態 (所有影片, 繼續觀看...). 需要重新啟動應用程式。";
|
||||
|
||||
"HIDE_PLAY_NEXT_IN_QUEUE" = "Hide \"Play next in queue\"";
|
||||
"HIDE_PLAY_NEXT_IN_QUEUE_DESC" = "Hide the premium \"Play next in queue\" option in video context menus";
|
||||
|
||||
"NEW_MINIPLAYER_STYLE" = "迷你播放器 (BigYTMiniPlayer)";
|
||||
"NEW_MINIPLAYER_STYLE_DESC" = "需要重新啟動應用程式。";
|
||||
|
||||
|
|
|
|||
|
|
@ -1,5 +1,6 @@
|
|||
#import "Tweaks/YouTubeHeader/YTAppDelegate.h"
|
||||
#import "Tweaks/YouTubeHeader/YTPlayerViewController.h"
|
||||
#import "Tweaks/YouTubeHeader/YTQTMButton.h"
|
||||
#import <UIKit/UIKit.h>
|
||||
#import <Foundation/Foundation.h>
|
||||
#import <objc/runtime.h>
|
||||
|
|
@ -13,9 +14,14 @@
|
|||
#import "Tweaks/YouTubeHeader/YTIGuideResponse.h"
|
||||
#import "Tweaks/YouTubeHeader/YTIGuideResponseSupportedRenderers.h"
|
||||
#import "Tweaks/YouTubeHeader/YTIPivotBarSupportedRenderers.h"
|
||||
#import "Tweaks/YouTubeHeader/YTIPivotBarItemRenderer.h"
|
||||
#import "Tweaks/YouTubeHeader/YTIPivotBarRenderer.h"
|
||||
#import "Tweaks/YouTubeHeader/YTIBrowseRequest.h"
|
||||
#import "Tweaks/YouTubeHeader/YTIButtonRenderer.h"
|
||||
#import "Tweaks/YouTubeHeader/YTISectionListRenderer.h"
|
||||
#import "Tweaks/YouTubeHeader/YTColorPalette.h"
|
||||
#import "Tweaks/YouTubeHeader/YTCommonColorPalette.h"
|
||||
#import "Tweaks/YouTubeHeader/YTSettingsSectionItemManager.h"
|
||||
#import "Tweaks/YouTubeHeader/ASCollectionView.h"
|
||||
#import "Tweaks/YouTubeHeader/YTPlayerOverlay.h"
|
||||
#import "Tweaks/YouTubeHeader/YTPlayerOverlayProvider.h"
|
||||
|
|
@ -23,19 +29,38 @@
|
|||
#import "Tweaks/YouTubeHeader/YTReelPlayerBottomButton.h"
|
||||
#import "Tweaks/YouTubeHeader/YTReelPlayerViewController.h"
|
||||
#import "Tweaks/YouTubeHeader/YTAlertView.h"
|
||||
#import "Tweaks/YouTubeHeader/YTISectionListRenderer.h"
|
||||
#import "Tweaks/YouTubeHeader/YTIMenuConditionalServiceItemRenderer.h"
|
||||
#import "Tweaks/YouTubeHeader/YTPivotBarItemView.h"
|
||||
#import "Tweaks/YouTubeHeader/YTVideoWithContextNode.h" // YouTube-X
|
||||
#import "Tweaks/YouTubeHeader/ELMCellNode.h" // YouTube-X
|
||||
#import "Tweaks/YouTubeHeader/ELMNodeController.h" // YouTube-X
|
||||
|
||||
#define LOC(x) [tweakBundle localizedStringForKey:x value:nil table:nil]
|
||||
#define YT_BUNDLE_ID @"com.google.ios.youtube"
|
||||
#define YT_NAME @"YouTube"
|
||||
#define DEFAULT_RATE 2.0f // YTSpeed
|
||||
|
||||
@interface YTSingleVideoController ()
|
||||
- (float)playbackRate;
|
||||
- (void)setPlaybackRate:(float)arg1;
|
||||
@end
|
||||
|
||||
@interface YTPlayerViewController ()
|
||||
- (YTSingleVideoController *)activeVideo;
|
||||
@end
|
||||
|
||||
// IAmYouTube
|
||||
@interface SSOConfiguration : NSObject
|
||||
@end
|
||||
|
||||
// uYouPlus
|
||||
@interface YTHeaderLogoController : UIView
|
||||
@property(readonly, nonatomic) long long pageStyle;
|
||||
@end
|
||||
|
||||
@interface YTNavigationBarTitleView : UIView
|
||||
@end
|
||||
|
||||
@interface YTChipCloudCell : UIView
|
||||
@end
|
||||
|
||||
|
|
@ -54,6 +79,7 @@
|
|||
@end
|
||||
|
||||
@interface YTAsyncCollectionView : UICollectionView
|
||||
- (void)removeCellsAtIndexPath:(NSIndexPath *)indexPath;
|
||||
- (void)removeShortsAndFeaturesAdsAtIndexPath:(NSIndexPath *)indexPath;
|
||||
@end
|
||||
|
||||
|
|
@ -63,6 +89,9 @@
|
|||
@interface boolSettingsVC : UIViewController
|
||||
@end
|
||||
|
||||
@interface YTPlaybackButton : UIControl
|
||||
@end
|
||||
|
||||
@interface PlayerManager : NSObject
|
||||
- (float)progress;
|
||||
@end
|
||||
|
|
@ -75,6 +104,17 @@
|
|||
@property UIButton *downloadsButton;
|
||||
@end
|
||||
|
||||
// Buttons
|
||||
@interface YTRightNavigationButtons : UIView
|
||||
@property YTQTMButton *notificationButton;
|
||||
@property YTQTMButton *sponsorBlockButton;
|
||||
@end
|
||||
|
||||
@interface YTISlimMetadataButtonSupportedRenderers : NSObject
|
||||
- (id)slimButton_buttonRenderer;
|
||||
- (id)slimMetadataButtonRenderer;
|
||||
@end
|
||||
|
||||
// YTSpeed
|
||||
@interface YTVarispeedSwitchControllerOption : NSObject
|
||||
- (id)initWithTitle:(id)title rate:(float)rate;
|
||||
|
|
@ -99,16 +139,6 @@
|
|||
- (void)setRate:(float)rate;
|
||||
@end
|
||||
|
||||
// iOS16 fix
|
||||
@interface OBPrivacyLinkButton : UIButton
|
||||
- (instancetype)initWithCaption:(NSString *)caption
|
||||
buttonText:(NSString *)buttonText
|
||||
image:(UIImage *)image
|
||||
imageSize:(CGSize)imageSize
|
||||
useLargeIcon:(BOOL)useLargeIcon
|
||||
displayLanguage:(NSString *)displayLanguage;
|
||||
@end
|
||||
|
||||
// uYouLocal fix
|
||||
@interface YTLocalPlaybackController : NSObject
|
||||
- (id)activeVideo;
|
||||
|
|
@ -119,7 +149,6 @@
|
|||
@property(nonatomic, strong) id downloadsVC;
|
||||
@end
|
||||
|
||||
|
||||
// BigYTMiniPlayer
|
||||
@interface YTMainAppVideoPlayerOverlayView : UIView
|
||||
- (UIViewController *)_viewControllerForAncestor;
|
||||
|
|
@ -131,16 +160,33 @@
|
|||
// YTAutoFullScreen
|
||||
@interface YTPlayerViewController (YTAFS)
|
||||
- (void)autoFullscreen;
|
||||
// DontEatMycontent
|
||||
- (id)activeVideoPlayerOverlay;
|
||||
- (id)playerView;
|
||||
// YTSpeed
|
||||
@property id activeVideo;
|
||||
@property float playbackRate;
|
||||
- (void)singleVideo:(id)video playbackRateDidChange:(float)rate;
|
||||
// uYouCrashFix
|
||||
- (YTSingleVideoController *)activeVideo;
|
||||
@end
|
||||
|
||||
// App Theme
|
||||
@interface YTColor : NSObject
|
||||
+ (UIColor *)white1;
|
||||
+ (UIColor *)white2;
|
||||
+ (UIColor *)white3;
|
||||
+ (UIColor *)white4;
|
||||
+ (UIColor *)white5;
|
||||
+ (UIColor *)black0;
|
||||
+ (UIColor *)black1;
|
||||
+ (UIColor *)black2;
|
||||
+ (UIColor *)black3;
|
||||
+ (UIColor *)black4;
|
||||
+ (UIColor *)blackPure;
|
||||
+ (UIColor *)grey1;
|
||||
+ (UIColor *)grey2;
|
||||
+ (UIColor *)white1Alpha98;
|
||||
+ (UIColor *)white1Alpha95;
|
||||
@end
|
||||
|
||||
@interface YCHLiveChatView : UIView
|
||||
@end
|
||||
|
||||
|
|
@ -150,6 +196,9 @@
|
|||
@interface YTRelatedVideosView : UIView
|
||||
@end
|
||||
|
||||
@interface YTTopAlignedView : UIView
|
||||
@end
|
||||
|
||||
@interface ELMView : UIView
|
||||
@end
|
||||
|
||||
|
|
@ -168,6 +217,17 @@
|
|||
@interface _ASDisplayView : UIView
|
||||
@end
|
||||
|
||||
@interface ELMContainerNode : NSObject
|
||||
@property (nonatomic, strong) NSString *accessibilityIdentifier;
|
||||
@property (nonatomic, strong) NSString *accessibilityLabel;
|
||||
@end
|
||||
|
||||
@interface YTAutonavEndscreenView : UIView
|
||||
@end
|
||||
|
||||
@interface YTPivotBarIndicatorView : UIView
|
||||
@end
|
||||
|
||||
@interface YTCommentDetailHeaderCell : UIView
|
||||
@end
|
||||
|
||||
|
|
@ -191,4 +251,4 @@
|
|||
|
||||
@interface settingsReorderTable : UIViewController
|
||||
@property(nonatomic, strong) UITableView *tableView;
|
||||
@end
|
||||
@end
|
||||
1409
uYouPlus.xm
1409
uYouPlus.xm
File diff suppressed because it is too large
Load diff
Loading…
Reference in a new issue