Compare commits
108 commits
iOS-18-SDK
...
main
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
35e97ea8dd | ||
|
|
ae5558784e | ||
|
|
8bcf7610bd | ||
|
|
957577b4d3 | ||
|
|
0001c86396 | ||
|
|
25542b329e | ||
|
|
be9fd299c5 | ||
|
|
83acb4f914 | ||
|
|
073bd7f1d4 | ||
|
|
1c4b4db76e | ||
|
|
8bc8aa4e01 | ||
|
|
fc485eba7f | ||
|
|
eac8ea2be0 | ||
|
|
44e5da4a78 | ||
|
|
72acee9568 | ||
|
|
c3b8987f7c | ||
|
|
d3cae074fb | ||
|
|
fa4d0cc1b8 | ||
|
|
7366c7b4ae | ||
|
|
2a859c745f | ||
|
|
138f82c7fa | ||
|
|
7cb2c7e13f | ||
|
|
d2cce0ef0d | ||
|
|
02da0f60dd | ||
|
|
9ceb7d1a90 | ||
|
|
0518345af3 | ||
|
|
77f76566a7 | ||
|
|
00abd27934 | ||
|
|
beaba4a878 | ||
|
|
9e92fe61b1 | ||
|
|
43de3bff02 | ||
|
|
185a7a0f2b | ||
|
|
14ea4aaae4 | ||
|
|
b05ef4e76d | ||
|
|
ad68078f4f | ||
|
|
3fce150969 | ||
|
|
ba125c3c33 | ||
|
|
88f821d348 | ||
|
|
f787877e2f | ||
|
|
d283156d2c | ||
|
|
3af0464d13 | ||
|
|
41b50a2591 | ||
|
|
df32a653f7 | ||
|
|
064774b911 | ||
|
|
c08e2fcfd5 | ||
|
|
e91b64b248 | ||
|
|
d16a0ec73d | ||
|
|
6300fd4cac | ||
|
|
b681d2140c | ||
|
|
602b7b76a8 | ||
|
|
08c51e5e5f | ||
|
|
f37c53b3fb | ||
|
|
1eb035594b | ||
|
|
755dde6cd1 | ||
|
|
2ecb12f80c | ||
|
|
3c4441030f | ||
|
|
1b3a422a61 | ||
|
|
829b0c7d6b | ||
|
|
6433ce1826 | ||
|
|
36fa89e688 | ||
|
|
5c2f444978 | ||
|
|
958bc196ce | ||
|
|
4e8aeb5bae | ||
|
|
3682d9a960 | ||
|
|
ff6d17c88a | ||
|
|
9638e454a8 | ||
|
|
1e932bb00d | ||
|
|
22974cecb0 | ||
|
|
af5b399e55 | ||
|
|
796e88ec46 | ||
|
|
e8ba831fa2 | ||
|
|
25f6d144c1 | ||
|
|
4214d03d3b | ||
|
|
3978100972 | ||
|
|
7f5a231f46 | ||
|
|
661b7ddc52 | ||
|
|
ef338016e8 | ||
|
|
754e3e9c98 | ||
|
|
45ec2505b3 | ||
|
|
042069dfaa | ||
|
|
34c7ec5155 | ||
|
|
5b383a36df | ||
|
|
7fd5903bb9 | ||
|
|
0e3e6475ac | ||
|
|
063940ee5b | ||
|
|
cb09ffa6cb | ||
|
|
37972ceca7 | ||
|
|
4041d31773 | ||
|
|
dc29c56a2e | ||
|
|
0ec3eba402 | ||
|
|
b3d1d983c7 | ||
|
|
3fd6ce5d79 | ||
|
|
bab17bbed4 | ||
|
|
34ac03a47e | ||
|
|
36bf653b3d | ||
|
|
309d426b57 | ||
|
|
9a08fe7b43 | ||
|
|
aac2d4a06d | ||
|
|
0b20859bef | ||
|
|
ebcdeb4c18 | ||
|
|
9eefece9d1 | ||
|
|
c8ebf37cd6 | ||
|
|
cbbf0bde7e | ||
|
|
0ed5addc25 | ||
|
|
7df0e0ab2d | ||
|
|
5f0f49863b | ||
|
|
09279bf0d2 | ||
|
|
a7e5106427 |
8
.github/ISSUE_TEMPLATE/bug.yaml
vendored
|
|
@ -26,14 +26,14 @@ body:
|
|||
- type: input
|
||||
attributes:
|
||||
label: iOS/iPadOS version
|
||||
placeholder: iOS 17.5.1
|
||||
placeholder: iOS 18.0.0
|
||||
validations:
|
||||
required: true
|
||||
|
||||
- type: input
|
||||
attributes:
|
||||
label: Device model
|
||||
placeholder: iPhone 15 Pro Max
|
||||
placeholder: iPhone 16 Pro Max
|
||||
validations:
|
||||
required: true
|
||||
|
||||
|
|
@ -111,10 +111,12 @@ body:
|
|||
|
||||
- type: checkboxes
|
||||
attributes:
|
||||
label: Select the configuration used for building the uYouEnhanced ipa. (Optional)
|
||||
label: Select the configuration used for building or obtaining the uYouEnhanced ipa. (Optional)
|
||||
options:
|
||||
- label: "buildapp.yml (GitHub Actions — build method as suggested by [Wiki - Building](https://github.com/arichornlover/uYouEnhanced/wiki/Building))"
|
||||
- label: "build.sh (Shell script)"
|
||||
- label: "AltStore Source (obtained from https://raw.githubusercontent.com/arichornlover/arichornlover.github.io/main/apps.json)"
|
||||
- label: "Other (obtained from untrusted or potentially unsafe sources such as phishing sites, unknown individuals, or unofficial channels.)"
|
||||
|
||||
- type: textarea
|
||||
attributes:
|
||||
|
|
|
|||
18
.github/workflows/buildapp.yml
vendored
|
|
@ -8,7 +8,7 @@ on:
|
|||
inputs:
|
||||
sdk_version:
|
||||
description: "iOS SDK Version"
|
||||
default: "16.4"
|
||||
default: "16.5"
|
||||
required: true
|
||||
type: string
|
||||
uyou_version:
|
||||
|
|
@ -54,13 +54,13 @@ concurrency:
|
|||
jobs:
|
||||
build:
|
||||
name: Build uYouEnhanced
|
||||
runs-on: macos-12
|
||||
runs-on: macos-13
|
||||
permissions:
|
||||
contents: write
|
||||
|
||||
steps:
|
||||
- name: Checkout Main
|
||||
uses: actions/checkout@v4.1.6
|
||||
uses: actions/checkout@v4.2.1
|
||||
with:
|
||||
path: main
|
||||
ref: ${{ github.event.inputs.commit_id || github.ref }}
|
||||
|
|
@ -73,7 +73,7 @@ jobs:
|
|||
run: echo "$(brew --prefix make)/libexec/gnubin" >> $GITHUB_PATH
|
||||
|
||||
- name: Setup Theos
|
||||
uses: actions/checkout@v4.1.6
|
||||
uses: actions/checkout@v4.2.1
|
||||
with:
|
||||
repository: theos/theos
|
||||
ref: 5bfdc3cb7133ec1cab43182115d902e2b57c9eac
|
||||
|
|
@ -82,7 +82,7 @@ jobs:
|
|||
|
||||
- name: SDK Caching
|
||||
id: SDK
|
||||
uses: actions/cache@v4.0.2
|
||||
uses: actions/cache@v4.1.1
|
||||
env:
|
||||
cache-name: iOS-${{ inputs.sdk_version }}-SDK
|
||||
with:
|
||||
|
|
@ -93,7 +93,7 @@ jobs:
|
|||
- name: Download iOS SDK
|
||||
if: steps.SDK.outputs.cache-hit != 'true'
|
||||
run: |
|
||||
git clone --quiet -n --depth=1 --filter=tree:0 https://github.com/arichornlover/sdks/
|
||||
git clone --quiet -n --depth=1 --filter=tree:0 https://github.com/theos/sdks/
|
||||
cd sdks
|
||||
git sparse-checkout set --no-cone iPhoneOS${{ inputs.sdk_version }}.sdk
|
||||
git checkout
|
||||
|
|
@ -102,7 +102,7 @@ jobs:
|
|||
THEOS: ${{ github.workspace }}/theos
|
||||
|
||||
- name: Setup Theos Jailed
|
||||
uses: actions/checkout@v4.1.6
|
||||
uses: actions/checkout@v4.2.1
|
||||
with:
|
||||
repository: qnblackcat/theos-jailed
|
||||
ref: master
|
||||
|
|
@ -151,7 +151,7 @@ jobs:
|
|||
|
||||
- name: Upload Artifact
|
||||
if: ${{ inputs.upload_artifact }}
|
||||
uses: actions/upload-artifact@v4.3.3
|
||||
uses: actions/upload-artifact@v4.4.3
|
||||
env:
|
||||
UYOU_VERSION: ${{ inputs.uyou_version }}
|
||||
YOUTUBE_VERSION: ${{ steps.prepare_youtube.outputs.youtube_version }}
|
||||
|
|
@ -163,7 +163,7 @@ jobs:
|
|||
- name: Create Release
|
||||
if: ${{ inputs.create_release }}
|
||||
id: create_release
|
||||
uses: softprops/action-gh-release@v2.0.5
|
||||
uses: softprops/action-gh-release@v2.0.8
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
UYOU_VERSION: ${{ inputs.uyou_version }}
|
||||
|
|
|
|||
10
.github/workflows/update-submodules.yml
vendored
|
|
@ -1,6 +1,8 @@
|
|||
name: Update Submodules
|
||||
|
||||
on:
|
||||
schedule:
|
||||
- cron: '0 0 * * *'
|
||||
workflow_dispatch:
|
||||
|
||||
jobs:
|
||||
|
|
@ -9,7 +11,7 @@ jobs:
|
|||
|
||||
steps:
|
||||
- name: Checkout code
|
||||
uses: actions/checkout@v4.1.6
|
||||
uses: actions/checkout@v4.2.1
|
||||
|
||||
- name: Set up Git
|
||||
run: |
|
||||
|
|
@ -22,14 +24,10 @@ jobs:
|
|||
git add .
|
||||
git submodule update --init --recursive --remote Tweaks/DontEatMyContent
|
||||
git add .
|
||||
git submodule update --init --recursive --remote Tweaks/IAmYouTube
|
||||
git add .
|
||||
git submodule update --init --recursive --remote Tweaks/YTHoldForSpeed
|
||||
git add .
|
||||
git submodule update --init --recursive --remote Tweaks/YTSpeed
|
||||
git add .
|
||||
git submodule update --init --recursive --remote Tweaks/MrBeastify
|
||||
git add .
|
||||
git submodule update --init --recursive --remote Tweaks/Return-YouTube-Dislikes
|
||||
git add .
|
||||
git submodule update --init --recursive --remote Tweaks/uYouLocalization
|
||||
|
|
@ -56,6 +54,8 @@ jobs:
|
|||
git add .
|
||||
git submodule update --init --recursive --remote Tweaks/iSponsorBlock
|
||||
git add .
|
||||
git submodule update --init --recursive --remote Tweaks/protobuf
|
||||
git add .
|
||||
git submodule update --init --recursive
|
||||
git commit -m "updated submodules"
|
||||
git push
|
||||
|
|
|
|||
46
.gitmodules
vendored
|
|
@ -8,7 +8,7 @@
|
|||
branch = main
|
||||
[submodule "Tweaks/YouMute"]
|
||||
path = Tweaks/YouMute
|
||||
url = https://github.com/arichornlover/YouMute.git
|
||||
url = https://github.com/PoomSmart/YouMute.git
|
||||
branch = main
|
||||
[submodule "Tweaks/YouQuality"]
|
||||
path = Tweaks/YouQuality
|
||||
|
|
@ -20,11 +20,10 @@
|
|||
branch = main
|
||||
[submodule "Tweaks/Return-YouTube-Dislikes"]
|
||||
path = Tweaks/Return-YouTube-Dislikes
|
||||
url = https://github.com/arichornloverALT/Return-YouTube-Dislikes.git
|
||||
branch = uYouEnhanced
|
||||
url = https://github.com/PoomSmart/Return-YouTube-Dislikes.git
|
||||
[submodule "Tweaks/YouTubeHeader"]
|
||||
path = Tweaks/YouTubeHeader
|
||||
url = https://github.com/arichornlover/YouTubeHeader.git
|
||||
url = https://github.com/arichornloverALT/YouTubeHeader.git
|
||||
branch = main
|
||||
[submodule "Extensions"]
|
||||
path = Extensions
|
||||
|
|
@ -32,8 +31,12 @@
|
|||
branch = main
|
||||
[submodule "Tweaks/YTABConfig"]
|
||||
path = Tweaks/YTABConfig
|
||||
url = https://github.com/arichornlover/YTABConfig2.git
|
||||
url = https://github.com/PoomSmart/YTABConfig.git
|
||||
branch = main
|
||||
[submodule "Tweaks/FLEXing"]
|
||||
path = Tweaks/FLEXing
|
||||
url = https://github.com/PoomSmart/FLEXing
|
||||
branch = rootless
|
||||
[submodule "Tweaks/Alderis"]
|
||||
path = Tweaks/Alderis
|
||||
url = https://github.com/hbang/Alderis.git
|
||||
|
|
@ -42,14 +45,11 @@
|
|||
url = https://github.com/Muirey03/RemoteLog
|
||||
[submodule "Tweaks/DontEatMyContent"]
|
||||
path = Tweaks/DontEatMyContent
|
||||
url = https://github.com/therealFoxster/DontEatMyContent
|
||||
url = https://github.com/arichornloverALT/DontEatMyContent
|
||||
[submodule "Tweaks/iSponsorBlock"]
|
||||
path = Tweaks/iSponsorBlock
|
||||
url = https://github.com/Galactic-Dev/iSponsorBlock.git
|
||||
branch = master
|
||||
[submodule "Tweaks/IAmYouTube"]
|
||||
path = Tweaks/IAmYouTube
|
||||
url = https://github.com/PoomSmart/IAmYouTube.git
|
||||
[submodule "Tweaks/YTClassicVideoQuality"]
|
||||
path = Tweaks/YTClassicVideoQuality
|
||||
url = https://github.com/PoomSmart/YTClassicVideoQuality.git
|
||||
|
|
@ -58,26 +58,32 @@
|
|||
url = https://github.com/PoomSmart/NoYTPremium.git
|
||||
[submodule "Tweaks/YTSpeed"]
|
||||
path = Tweaks/YTSpeed
|
||||
url = https://github.com/arichornlover/YTSpeed.git
|
||||
[submodule "Tweaks/MrBeastify"]
|
||||
path = Tweaks/MrBeastify
|
||||
url = https://github.com/arichornlover/MrBeastify.git
|
||||
branch = main
|
||||
[submodule "Tweaks/FLEXing"]
|
||||
path = Tweaks/FLEXing
|
||||
url = https://github.com/PoomSmart/FLEXing
|
||||
url = https://github.com/arichornloverALT/YTSpeed.git
|
||||
[submodule "Tweaks/YouTube-X"]
|
||||
path = Tweaks/YouTube-X
|
||||
url = https://github.com/PoomSmart/YouTube-X/
|
||||
[submodule "Tweaks/IAmYouTube"]
|
||||
path = Tweaks/IAmYouTube
|
||||
url = https://github.com/PoomSmart/IAmYouTube.git
|
||||
[submodule "Tweaks/YTHoldForSpeed"]
|
||||
path = Tweaks/YTHoldForSpeed
|
||||
url = https://github.com/arichornlover/YTHoldForSpeed.git
|
||||
url = https://github.com/arichornloverALT/YTHoldForSpeed.git
|
||||
[submodule "Tweaks/MrBeastify"]
|
||||
path = Tweaks/MrBeastify
|
||||
url = https://github.com/arichornloverALT/MrBeastify.git
|
||||
branch = main
|
||||
[submodule "Tweaks/uYouLocalization"]
|
||||
path = Tweaks/uYouLocalization
|
||||
url = https://github.com/dayanch96/uYouLocalization.git
|
||||
[submodule "Tweaks/YouGroupSettings"]
|
||||
path = Tweaks/YouGroupSettings
|
||||
url = https://github.com/arichornlover/YouGroupSettings.git
|
||||
url = https://github.com/arichornloverALT/YouGroupSettings.git
|
||||
[submodule "Tweaks/YouTimeStamp"]
|
||||
path = Tweaks/YouTimeStamp
|
||||
url = https://github.com/arichornlover/YouTimeStamp.git
|
||||
url = https://github.com/arichornloverALT/YouTimeStamp.git
|
||||
[submodule "Tweaks/protobuf"]
|
||||
path = Tweaks/protobuf
|
||||
url = https://github.com/protocolbuffers/protobuf.git
|
||||
[submodule "Tweaks/YouLoop"]
|
||||
path = Tweaks/YouLoop
|
||||
url = https://github.com/bhackel/YouLoop.git
|
||||
|
|
|
|||
1
Bundles/YouLoop.bundle
Symbolic link
|
|
@ -0,0 +1 @@
|
|||
../Tweaks/YouLoop/layout/Library/Application Support/YouLoop.bundle
|
||||
|
Before Width: | Height: | Size: 40 KiB After Width: | Height: | Size: 39 KiB |
|
Before Width: | Height: | Size: 36 KiB After Width: | Height: | Size: 35 KiB |
|
Before Width: | Height: | Size: 26 KiB After Width: | Height: | Size: 13 KiB |
BIN
Localizations/uYouPlus.bundle/UI/explore_24pt.png
Normal file
|
After Width: | Height: | Size: 1.7 KiB |
BIN
Localizations/uYouPlus.bundle/UI/explore_selected_24pt.png
Normal file
|
After Width: | Height: | Size: 1.4 KiB |
BIN
Localizations/uYouPlus.bundle/UI/home_24pt.png
Normal file
|
After Width: | Height: | Size: 891 B |
BIN
Localizations/uYouPlus.bundle/UI/home_selected_24pt.png
Normal file
|
After Width: | Height: | Size: 733 B |
BIN
Localizations/uYouPlus.bundle/UI/notifications_24pt.png
Normal file
|
After Width: | Height: | Size: 4 KiB |
BIN
Localizations/uYouPlus.bundle/UI/notifications_selected_24pt.png
Normal file
|
After Width: | Height: | Size: 554 B |
BIN
Localizations/uYouPlus.bundle/UI/subscriptions_24pt.png
Normal file
|
After Width: | Height: | Size: 711 B |
BIN
Localizations/uYouPlus.bundle/UI/subscriptions_selected_24pt.png
Normal file
|
After Width: | Height: | Size: 618 B |
|
After Width: | Height: | Size: 688 B |
|
After Width: | Height: | Size: 928 B |
BIN
Localizations/uYouPlus.bundle/UI/yt_outline_download_24pt.png
Normal file
|
After Width: | Height: | Size: 683 B |
BIN
Localizations/uYouPlus.bundle/UI/yt_outline_gear_24pt.png
Normal file
|
After Width: | Height: | Size: 4.5 KiB |
BIN
Localizations/uYouPlus.bundle/UI/yt_outline_my_videos_24pt.png
Normal file
|
After Width: | Height: | Size: 661 B |
|
After Width: | Height: | Size: 1.6 KiB |
BIN
Localizations/uYouPlus.bundle/UI/yt_outline_search_24pt.png
Normal file
|
After Width: | Height: | Size: 1.1 KiB |
|
|
@ -66,8 +66,8 @@
|
|||
"HIDE_AUTOPLAY_SWITCH" = "Ocultar interruptor de Reproducir automáticamente";
|
||||
"HIDE_AUTOPLAY_SWITCH_DESC" = "Ocultar el interruptor de Reproducir automáticamente en los botones superpuestos.";
|
||||
|
||||
"HIDE_YTMUSIC_BUTTON" = "Hide Youtube Music button";
|
||||
"HIDE_YTMUSIC_BUTTON_DESC" = "Hides Youtube Music button that appears with Premium";
|
||||
"HIDE_YTMUSIC_BUTTON" = "Ocultar botón de Youtube Music";
|
||||
"HIDE_YTMUSIC_BUTTON_DESC" = "Oculta el botón de Youtube Music que aparece con Premium.";
|
||||
|
||||
"HIDE_SUBTITLES_BUTTON" = "Ocultar botón de Subtítulos";
|
||||
"HIDE_SUBTITLES_BUTTON_DESC" = "Ocultar el botón de Subtítulos en los botones superpuestos.";
|
||||
|
|
@ -76,22 +76,22 @@
|
|||
"HIDE_HUD_MESSAGES_DESC" = "Ejemplo: CC está activado/desactivado, Vídeo en bucle está activado,...";
|
||||
|
||||
"HIDE_PAID_PROMOTION_CARDS" = "Ocultar banner de contenido promocional";
|
||||
"HIDE_PAID_PROMOTION_CARDS_DESC" = "Ocultar el banner de 'Incluye contenido promocional' en algunos vídeos.";
|
||||
"HIDE_PAID_PROMOTION_CARDS_DESC" = "Oculta el banner de 'Incluye contenido promocional' en algunos vídeos.";
|
||||
|
||||
"HIDE_CHANNEL_WATERMARK" = "Ocultar marca de agua del canal";
|
||||
"HIDE_CHANNEL_WATERMARK_DESC" = "Ocultar la marca de agua del canal en la superposición de controles de vídeo. Es necesario reiniciar la aplicación.";
|
||||
"HIDE_CHANNEL_WATERMARK_DESC" = "Oculta la marca de agua del canal en la superposición de controles de vídeo. Es necesario reiniciar la aplicación.";
|
||||
|
||||
"HIDE_PREVIOUS_AND_NEXT_BUTTON" = "Ocultar el botón de Anterior y Siguiente";
|
||||
"HIDE_PREVIOUS_AND_NEXT_BUTTON_DESC" = "Ocultar el botón de Anterior y Siguiente en los botones superpuestos.";
|
||||
"HIDE_PREVIOUS_AND_NEXT_BUTTON_DESC" = "Oculta el botón de Anterior y Siguiente en los botones superpuestos.";
|
||||
|
||||
"REPLACE_PREVIOUS_NEXT_BUTTON" = "Reemplazar botón anterior y siguiente";
|
||||
"REPLACE_PREVIOUS_NEXT_BUTTON_DESC" = "Reemplace el botón Anterior y Siguiente con el botón Avance rápido y Rebobinado. Es necesario reiniciar la aplicación.";
|
||||
"REPLACE_PREVIOUS_NEXT_BUTTON" = "Remplazar botón anterior y siguiente";
|
||||
"REPLACE_PREVIOUS_NEXT_BUTTON_DESC" = "Remplaza el botón Anterior y Siguiente con el botón Avance rápido y Rebobinado. Es necesario reiniciar la aplicación.";
|
||||
|
||||
"RED_PROGRESS_BAR" = "Barra de progreso roja";
|
||||
"RED_PROGRESS_BAR_DESC" = "Recupera la barra de progreso roja. Es necesario reiniciar la aplicación.";
|
||||
|
||||
"HIDE_HOVER_CARD" = "Ocultar tarjetas flotantes en las pantallas finales (YTNoHoverCards)";
|
||||
"HIDE_HOVER_CARD_DESC" = "Ocultar tarjetas flotantes del creador (miniaturas) al final de los vídeos.";
|
||||
"HIDE_HOVER_CARD_DESC" = "Oculta las tarjetas flotantes del creador (miniaturas) al final de los vídeos.";
|
||||
|
||||
"HIDE_RIGHT_PANEL" = "Ocultar el panel derecho en modo pantalla completa";
|
||||
"HIDE_RIGHT_PANEL_DESC" = "Es necesario reiniciar la aplicación.";
|
||||
|
|
@ -100,10 +100,10 @@
|
|||
"SHORTS_CONTROLS_OVERLAY_OPTIONS" = "💥 Configurar superposición de Shorts";
|
||||
|
||||
"HIDE_SUPER_THANKS" = "Ocultar banner 'Comprar Supergracias";
|
||||
"HIDE_SUPER_THANKS_DESC" = "Ocultar el banner 'Comprar Supergracias' en Shorts.";
|
||||
"HIDE_SUPER_THANKS_DESC" = "Oculta el banner 'Comprar Supergracias' en Shorts.";
|
||||
|
||||
"HIDE_SUBCRIPTIONS" = "Ocultar el botón de suscripción";
|
||||
"HIDE_SUBCRIPTIONS_DESC" = "";
|
||||
"HIDE_SUBCRIPTIONS_DESC" = "Oculta el botón de suscripción del Reproductor.";
|
||||
|
||||
"DISABLE_RESUME_TO_SHORTS" = "Desactivar reanudación a Shorts";
|
||||
"DISABLE_RESUME_TO_SHORTS_DESC" = "Si cierras YouTube mientras ves Shorts, éstos no se reproducirán automáticamente la próxima vez que inicies YouTube.";
|
||||
|
|
@ -115,7 +115,7 @@
|
|||
"HIDE_ISPONSORBLOCK" = "Ocultar botón iSponsorBlock";
|
||||
|
||||
"CAST_CONFIRM" = "Alerta de confirmación antes de Enviar contenido (YTCastConfirm)";
|
||||
"CAST_CONFIRM_DESC" = "Mostrar una alerta de confirmación antes de Enviar contenido para prevenir el secuestro accidental del TV.";
|
||||
"CAST_CONFIRM_DESC" = "Muestra una alerta de confirmación antes de Enviar contenido para prevenir el secuestro accidental del TV.";
|
||||
"CASTING" = "Enviar contenido";
|
||||
"MSG_ARE_YOU_SURE" = "¿Estás seguro de que deseas Enviar contenido?";
|
||||
"MSG_YES" = "Sí";
|
||||
|
|
@ -124,11 +124,11 @@
|
|||
"DISABLE_HINTS" = "Desactivar sugerencias";
|
||||
"DISABLE_HINTS_DESC" = "Desactiva las sugerencias de YouTube que suelen aparecer cuando la aplicación está recién instalada.";
|
||||
|
||||
"ENABLE_YT_STARTUP_ANIMATION" = "Activar la animación de inicio de YouTube";
|
||||
"ENABLE_YT_STARTUP_ANIMATION_DESC" = "";
|
||||
"ENABLE_YT_STARTUP_ANIMATION" = "Activar animación de inicio de YouTube";
|
||||
"ENABLE_YT_STARTUP_ANIMATION_DESC" = "Activa la animación al iniciar Youtube";
|
||||
|
||||
"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_CHIP_BAR" = "Ocultar barra superiorm";
|
||||
"HIDE_CHIP_BAR_DESC" = "Oculta 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" = "Ocultar \"Reproducir siguiente en cola\"";
|
||||
"HIDE_PLAY_NEXT_IN_QUEUE_DESC" = "";
|
||||
|
|
@ -149,105 +149,105 @@
|
|||
"FIX_GOOGLE_SIGNIN_DESC" = "Active esta opción solo cuando no pueda iniciar sesión con su cuenta de Google y la aplicación se instaló a través de TrollStore. Si puede iniciar sesión normalmente, manténgala desactivada. Es necesario reiniciar la aplicación.";
|
||||
|
||||
// uYouEnhanced Localization ➕
|
||||
"SUPPORT_THE_DEVELOPERS" = "Support the Developers";
|
||||
"COPY_SETTINGS" = "Copy Settings";
|
||||
"COPY_SETTINGS_DESC" = "Copy all current settings to the clipboard";
|
||||
"PASTE_SETTINGS" = "Paste Settings";
|
||||
"PASTE_SETTINGS_DESC" = "Paste settings from clipboard and apply";
|
||||
"EXPORT_SETTINGS" = "Export Settings";
|
||||
"EXPORT_SETTINGS_DESC" = "Exports all current settings into a .txt file";
|
||||
"IMPORT_SETTINGS" = "Import Settings";
|
||||
"IMPORT_SETTINGS_DESC" = "Press to import settings (.txt)";
|
||||
"REPLACE_COPY_AND_PASTE_BUTTONS" = "Replace 'Copy Settings' & 'Paste Settings' Buttons";
|
||||
"REPLACE_COPY_AND_PASTE_BUTTONS_DESC" = "Replaces the Buttons to 'Export Settings' and 'Import Settings'";
|
||||
"SUPPORT_THE_DEVELOPERS" = "Apoya a los desarrolladores";
|
||||
"COPY_SETTINGS" = "Copiar Ajustes";
|
||||
"COPY_SETTINGS_DESC" = "Copiar Ajustes actuales al Portapapeles";
|
||||
"PASTE_SETTINGS" = "Pegar Ajustes";
|
||||
"PASTE_SETTINGS_DESC" = "Pegar Ajustes desde el Portapapeles y aplicar";
|
||||
"EXPORT_SETTINGS" = "Exportar Ajustes";
|
||||
"EXPORT_SETTINGS_DESC" = "Exporta todos los Ajustes actuales en un archivo .txt";
|
||||
"IMPORT_SETTINGS" = "Importar Ajustes";
|
||||
"IMPORT_SETTINGS_DESC" = "Pulsa para importar Ajustes (.txt)";
|
||||
"REPLACE_COPY_AND_PASTE_BUTTONS" = "Remplaza los botones 'Copiar Ajustes' y 'Pegar Ajustes'";
|
||||
"REPLACE_COPY_AND_PASTE_BUTTONS_DESC" = "Remplaza los botones a 'Exportar Ajustes' e 'Importar Ajustes'";
|
||||
|
||||
"UYOUENHANCED_ESSENTIAL_MENU" = "uYouEnhanced Essential Menu";
|
||||
"CHANGE_APP_ICON" = "Change App Icon";
|
||||
"CLEAR_NOTIFICATIONS" = "Clear Notifications";
|
||||
"CLEAR_NOTIFICATIONS_DESC" = "Force clear all app notifications (Recommended when Sideloaded)";
|
||||
"UYOUENHANCED_ESSENTIAL_MENU" = "Menú Esencial de uYouEnhanced";
|
||||
"CHANGE_APP_ICON" = "Cambiar Icono de Aplicación";
|
||||
"CLEAR_NOTIFICATIONS" = "Borrar Notificaciones";
|
||||
"CLEAR_NOTIFICATIONS_DESC" = "Forzar borrado de todas las notificaciones de la app (Recomendado para Sideload)";
|
||||
|
||||
"CUSTOM_DARK_THEME" = "Custom Dark Theme";
|
||||
"CUSTOM_DARK_THEME" = "Tema Oscuro Personalizado";
|
||||
|
||||
"ENABLE_PORTRAIT_FULLSCREEN" = "Enable Portrait Fullscreen";
|
||||
"ENABLE_PORTRAIT_FULLSCREEN_DESC" = "Enables Portrait Fullscreen on the YouTube App. App restart is required.";
|
||||
"ENABLE_TAP_TO_SEEK" = "Enable Tap To Seek";
|
||||
"ENABLE_TAP_TO_SEEK_DESC" = "Jump to anywhere in a video by single-tapping the seek bar";
|
||||
"DISABLE_PULL_TO_FULLSCREEN_GESTURE" = "Disable pull-to-fullscreen gesture";
|
||||
"DISABLE_PULL_TO_FULLSCREEN_GESTURE_DESC" = "Disable the drag gesture to enter vertical fullscreen. Only applies to landscape videos.";
|
||||
"DISABLE_DOUBLE_TAP_TO_SKIP_CHAPTER" = "Disable Double tap to skip chapter";
|
||||
"DISABLE_DOUBLE_TAP_TO_SKIP_CHAPTER_DESC" = "Disable the 2-finger double tap gesture that skips forward/backward by a chapter.";
|
||||
"ALWAYS_USE_REMAINING_TIME" = "Always use remaining time";
|
||||
"ALWAYS_USE_REMAINING_TIME_DESC" = "Change the default to show time remaining in the player bar.";
|
||||
"DISABLE_TOGGLE_TIME_REMAINING" = "Disable toggle time remaining";
|
||||
"DISABLE_TOGGLE_TIME_REMAINING_DESC" = "Disables changing time elapsed to time remaining. Use with other setting to always show remaining time.";
|
||||
"ENABLE_PORTRAIT_FULLSCREEN" = "Habilitar Modo Retrato a Pantalla Completa";
|
||||
"ENABLE_PORTRAIT_FULLSCREEN_DESC" = "Habilita Modo Retrato a Pantalla Completa en la aplicación de YouTube. Se requiere el reicio de la app.";
|
||||
"ENABLE_TAP_TO_SEEK" = "Habilitar toque para buscar";
|
||||
"ENABLE_TAP_TO_SEEK_DESC" = "Salta a cualquier parte de un vídeo con un simple toque en la barra de búsqueda";
|
||||
"DISABLE_PULL_TO_FULLSCREEN_GESTURE" = "Deshabilitar gesto arrastrar para Pantalla Completa";
|
||||
"DISABLE_PULL_TO_FULLSCREEN_GESTURE_DESC" = "Deshabilita el gesto de arrastrar para entrar en Pantalla Completa vertical. Sólo se aplica a vídeos en modo apaisado.";
|
||||
"DISABLE_DOUBLE_TAP_TO_SKIP_CHAPTER" = "Deshabilitar Doble toque para saltar capítulo";
|
||||
"DISABLE_DOUBLE_TAP_TO_SKIP_CHAPTER_DESC" = "Deshabilita el gesto de doble toque con 2 dedos para saltar adelante/atrás en un capítulo.";
|
||||
"ALWAYS_USE_REMAINING_TIME" = "Usar siempre tiempo restante";
|
||||
"ALWAYS_USE_REMAINING_TIME_DESC" = "Cambiar el tiempo restante por defecto en la barra del reproductor.";
|
||||
"DISABLE_TOGGLE_TIME_REMAINING" = "Deshabilitar el selector de tiempo restante";
|
||||
"DISABLE_TOGGLE_TIME_REMAINING_DESC" = "Deshabilita el cambio de tiempo transcurrido a tiempo restante. Usar junto con otros ajustes para mostrar siempre el tiempo restante.";
|
||||
|
||||
"ENABLE_SHARE_BUTTON" = "Enable Share Button";
|
||||
"ENABLE_SHARE_BUTTON_DESC" = "Enable the Share Button in video controls overlay.";
|
||||
"ENABLE_SAVE_TO_PLAYLIST_BUTTON" = "Enable Save To Playlist Button";
|
||||
"ENABLE_SAVE_TO_PLAYLIST_BUTTON_DESC" = "Enable the Save To Playlist Button in video controls overlay.";
|
||||
"HIDE_YTMUSIC_BUTTON" = "Hide Youtube Music button";
|
||||
"HIDE_YTMUSIC_BUTTON_DESC" = "Hides Youtube Music button that appears with Premium";
|
||||
"HIDE_VIDEO_TITLE_IN_FULLSCREEN" = "Hide Video Title in Fullscreen";
|
||||
"HIDE_VIDEO_TITLE_IN_FULLSCREEN_DESC" = "Hides the Video Title along with the functionality in the Top Left of the Fullscreen Video Player.";
|
||||
"HIDE_COLLAPSE_BUTTON" = "Hide Collapse Button";
|
||||
"HIDE_COLLAPSE_BUTTON_DESC" = "Hides the Arrow Collapse Button that was shown in the Top Left of the Video Player.";
|
||||
"HIDE_FULLSCREEN_BUTTON" = "Hide Fullscreen Button";
|
||||
"HIDE_FULLSCREEN_BUTTON_DESC" = "Hides the Fullscreen Button that was shown at the Bottom Right of the Video Player.";
|
||||
"HIDE_SHADOW_OVERLAY_BUTTONS" = "Hide Shadow Overlay Buttons";
|
||||
"HIDE_SHADOW_OVERLAY_BUTTONS_DESC" = "Hide the Shadow Overlay on the Play/Pause, Previous, Next, Forward & Rewind Buttons.";
|
||||
"HIDE_FULLSCREEN_ACTION_BUTTONS" = "Hide Fullscreen Action Buttons";
|
||||
"HIDE_FULLSCREEN_ACTION_BUTTONS_DESC" = "Hides the buttons at the bottom of the screen when in landscape.";
|
||||
"HIDE_SUGGESTED_VIDEO" = "Hide Suggested Video";
|
||||
"HIDE_SUGGESTED_VIDEO_DESC" = "Remove the suggested video popup when finishing a video. Note that this will prevent autoplay from working.";
|
||||
"HIDE_HEATWAVES_BAR" = "Hide Heatwaves Bar";
|
||||
"HIDE_HEATWAVES_BAR_DESC" = "Hides the Heatwaves Bar that is originally shown in the Progress Bar by Default in the video player. App restart is required.";
|
||||
"HIDE_DOUBLE_TAP_TO_SEEK_OVERLAY" = "Hide Double Tap to Seek Overlay";
|
||||
"HIDE_DOUBLE_TAP_TO_SEEK_OVERLAY_DESC" = "This hides the animated double tap to seek overlay in the video player. App restart is required.";
|
||||
"HIDE_DARK_OVERLAY_BACKGROUND" = "Hide Dark Overlay Background";
|
||||
"HIDE_DARK_OVERLAY_BACKGROUND_DESC" = "Hide the Dark Overlay Background in the video player. App restart is required.";
|
||||
"HIDE_AMBIENT_MODE_IN_FULLSCREEN" = "Hide Ambient Mode in Fullscreen";
|
||||
"HIDE_AMBIENT_MODE_IN_FULLSCREEN_DESC" = "Hides and Prevents Ambient Mode from being used in the Video Player when in Fullscreen. App restart is required.";
|
||||
"HIDE_SUGGESTED_VIDEOS_IN_FULLSCREEN" = "Hide Suggested Videos in Fullscreen";
|
||||
"HIDE_SUGGESTED_VIDEOS_IN_FULLSCREEN_DESC" = "Hide the suggested videos whenever in the Fullscreen Video Player. App restart is required.";
|
||||
"HIDE_ALL_VIDEOS_UNDER_PLAYER" = "Hide all videos under player";
|
||||
"HIDE_ALL_VIDEOS_UNDER_PLAYER_DESC" = "Remove all videos under the video player. Depends on which Device Orientation.";
|
||||
"ENABLE_SHARE_BUTTON" = "Habilitar Botón de Compartir";
|
||||
"ENABLE_SHARE_BUTTON_DESC" = "Habilita el Botón de Compartir en los controles de vídeo superpuestos.";
|
||||
"ENABLE_SAVE_TO_PLAYLIST_BUTTON" = "Habilitar Botón Guardar en Lista de Reproducción";
|
||||
"ENABLE_SAVE_TO_PLAYLIST_BUTTON_DESC" = "Habilita el Botón de Guardar en la Lista de Reproducción en los controles de vídeo superpuestos.";
|
||||
"HIDE_YTMUSIC_BUTTON" = "Ocultar botón de Youtube Music";
|
||||
"HIDE_YTMUSIC_BUTTON_DESC" = "Oculta el botón de Youtube Music que aparece con Premium";
|
||||
"HIDE_VIDEO_TITLE_IN_FULLSCREEN" = "Ocultar Título de Vídeo en Pantalla Completa";
|
||||
"HIDE_VIDEO_TITLE_IN_FULLSCREEN_DESC" = "Oculta el Título del Vídeo que aparece funcionalmente en la esquina superior izquierda del reproductor a Pantalla Completa.";
|
||||
"HIDE_COLLAPSE_BUTTON" = "Ocultar Botón de Colapso";
|
||||
"HIDE_COLLAPSE_BUTTON_DESC" = "Oculta el Botón de Colapso en Flecha que se encuentra en la parte superior izquierda del Reproductor de Vídeo.";
|
||||
"HIDE_FULLSCREEN_BUTTON" = "Ocultar Botón de Pantalla Completa";
|
||||
"HIDE_FULLSCREEN_BUTTON_DESC" = "Oculta el Botón de Pantalla Completa que se encuentra en la parte inferior derecha del Reproductor de Vídeo.";
|
||||
"HIDE_SHADOW_OVERLAY_BUTTONS" = "Ocultar Botones de Superposición de Sombra";
|
||||
"HIDE_SHADOW_OVERLAY_BUTTONS_DESC" = "Oculta la Superposición de Sombra en los Botones Reproducir/Pausa, Anterior, Siguiente, Adelatar y Retrasar.";
|
||||
"HIDE_FULLSCREEN_ACTION_BUTTONS" = "Ocultar Botones de Acción en Pantalla Completa";
|
||||
"HIDE_FULLSCREEN_ACTION_BUTTONS_DESC" = "Oculta los botones de la pantalla en modo apaisado.";
|
||||
"HIDE_SUGGESTED_VIDEO" = "Ocultar Vídeos Sugeridos";
|
||||
"HIDE_SUGGESTED_VIDEO_DESC" = "Elimina la ventana emergente de vídeos sugeridos al final de un vídeo. Esto impide que la reproducción automática fucione.";
|
||||
"HIDE_HEATWAVES_BAR" = "Ocultar Barra de Momentos Destacados";
|
||||
"HIDE_HEATWAVES_BAR_DESC" = "Oculta la Barra de Momentos Destacados que se muestra originalmente por defecto en la Barra de Progreso del Reproductor. Se requiere reiniciar la App.";
|
||||
"HIDE_DOUBLE_TAP_TO_SEEK_OVERLAY" = "Ocultar Doble Toque para Superposición de Búsqueda";
|
||||
"HIDE_DOUBLE_TAP_TO_SEEK_OVERLAY_DESC" = "Esto oculta el doble toque animado para la superposición de búsqueda del reproductor de vídeo. Se requiere reiniciar la App.";
|
||||
"HIDE_DARK_OVERLAY_BACKGROUND" = "Ocultar Superposición de Fondo Oscuro";
|
||||
"HIDE_DARK_OVERLAY_BACKGROUND_DESC" = "Oculta la Superposición de Fondo Oscuro en el reproductor de vídeo. Se requiere reiniciar la App.";
|
||||
"HIDE_AMBIENT_MODE_IN_FULLSCREEN" = "Ocultar Modo Ambiente en Pantalla Completa";
|
||||
"HIDE_AMBIENT_MODE_IN_FULLSCREEN_DESC" = "Oculta y Previene el uso del Modo Ambiente del Reproductor de Vídeo en Pantalla Completa. Se requiere reiniciar la App.";
|
||||
"HIDE_SUGGESTED_VIDEOS_IN_FULLSCREEN" = "Ocultar Vídeos Sugeridos en Pantalla Completa";
|
||||
"HIDE_SUGGESTED_VIDEOS_IN_FULLSCREEN_DESC" = "Oculta los vídeos sugeridos cuando el Reproductor de Vídeo está en Pantalla Completa. Se requiere reiniciar la App.";
|
||||
"HIDE_ALL_VIDEOS_UNDER_PLAYER" = "Ocutar todos los vídeos bajo el reproductor";
|
||||
"HIDE_ALL_VIDEOS_UNDER_PLAYER_DESC" = "Elimina todos los vídeos bajo el Reproductor de Vídeo. Depende de la Orientación de Dispositivo.";
|
||||
|
||||
"SHORTS_QUALITY_PICKER" = "Shorts Quality Picker";
|
||||
"SHORTS_QUALITY_PICKER_DESC" = "Enables the YouTube Shorts Quality Picker";
|
||||
"SHORTS_QUALITY_PICKER" = "Selector de Calidad en Shorts";
|
||||
"SHORTS_QUALITY_PICKER_DESC" = "Habilita el Selector de Calidad en los Shorts YouTube.";
|
||||
|
||||
"VIDEO_PLAYER_BUTTON_OPTIONS" = "Video Player Button Options";
|
||||
"VIDEO_PLAYER_BUTTON_OPTIONS" = "Opciones del Reproductor de Vídeo";
|
||||
|
||||
"RED_SUBSCRIBE_BUTTON" = "Red Subscribe Button";
|
||||
"RED_SUBSCRIBE_BUTTON_DESC" = "Restores the Subscribe Button Color to be Red.";
|
||||
"HIDE_BUTTON_CONTAINERS_UNDER_PLAYER" = "Hide Button Containers under player";
|
||||
"HIDE_BUTTON_CONTAINERS_UNDER_PLAYER_DESC" = "Hides the Button Containers under the video player.";
|
||||
"HIDE_CONNECT_BUTTON" = "Hide the Connect Button under player";
|
||||
"HIDE_CONNECT_BUTTON_DESC" = "Hides the Connect Button under the video player.";
|
||||
"HIDE_SHARE_BUTTON" = "Hide the Share Button under player";
|
||||
"HIDE_SHARE_BUTTON_DESC" = "Hides the Share Button under the video player.";
|
||||
"HIDE_THANKS_BUTTON" = "Hide the Thanks Button under player";
|
||||
"HIDE_THANKS_BUTTON_DESC" = "Hides the Thanks Button under the video player.";
|
||||
"HIDE_SAVE_BUTTON" = "Hide the Save Button under player";
|
||||
"HIDE_SAVE_BUTTON_DESC" = "Hides the Save Button under the video player.";
|
||||
"HIDE_REPORT_BUTTON" = "Hide the Report Button under player";
|
||||
"HIDE_REPORT_BUTTON_DESC" = "Hides the Report Button under the video player.";
|
||||
"HIDE_COMMENT_PREVIEWS_UNDER_PLAYER" = "Hide Comment previews under player";
|
||||
"HIDE_COMMENT_PREVIEWS_UNDER_PLAYER_DESC" = "Hides the comment previews under the video player.";
|
||||
"HIDE_COMMENT_SECTION_BUTTON" = "Hide the comment section under player";
|
||||
"HIDE_COMMENT_SECTION_BUTTON_DESC" = "Hides the Comment Section under the video player.";
|
||||
"RED_SUBSCRIBE_BUTTON" = "Botón de Suscripción Rojo";
|
||||
"RED_SUBSCRIBE_BUTTON_DESC" = "Restaura el color Rojo al Botón de Suscripción.";
|
||||
"HIDE_BUTTON_CONTAINERS_UNDER_PLAYER" = "Ocultar Contenedor de Botones bajo Reproductor";
|
||||
"HIDE_BUTTON_CONTAINERS_UNDER_PLAYER_DESC" = "Oculta el Cuerpo de los Botones bajo el reproductor de vídeo.";
|
||||
"HIDE_CONNECT_BUTTON" = "Ocultar Botón Conectar bajo el reproductor";
|
||||
"HIDE_CONNECT_BUTTON_DESC" = "Oculta el Botón de Conectar bajo el reproductor de vídeo.";
|
||||
"HIDE_SHARE_BUTTON" = "Ocultar Botón Compartir bajo el reproductor";
|
||||
"HIDE_SHARE_BUTTON_DESC" = "Oculta el Botón de Compartir bajo el reproductor de vídeo.";
|
||||
"HIDE_THANKS_BUTTON" = "Ocultar Botón Gracias bajo el reproductor";
|
||||
"HIDE_THANKS_BUTTON_DESC" = "Oculta el Botón de Gracias bajo el reproductor de vídeo.";
|
||||
"HIDE_SAVE_BUTTON" = "Ocultar Botón Guardar bajo el reproductor";
|
||||
"HIDE_SAVE_BUTTON_DESC" = "Oculta el Botón de Guardar bajo el reproductor de vídeo.";
|
||||
"HIDE_REPORT_BUTTON" = "Ocultar Boton Reportar bajo el reproductor";
|
||||
"HIDE_REPORT_BUTTON_DESC" = "Oculta el Botón de Reportarbajo el reproductor de vídeo.";
|
||||
"HIDE_COMMENT_PREVIEWS_UNDER_PLAYER" = "Ocultar Previsualización de Comentarios bajo el reproductor";
|
||||
"HIDE_COMMENT_PREVIEWS_UNDER_PLAYER_DESC" = "Oculta la Previsualización de Comentariosbajo el reproductor de vídeo.";
|
||||
"HIDE_COMMENT_SECTION_BUTTON" = "Ocultar Sección Comentarios bajo el reproductor";
|
||||
"HIDE_COMMENT_SECTION_BUTTON_DESC" = "Oculta la Sección de Comentarios bajo el reproductor de vídeo.";
|
||||
|
||||
"APP_SETTINGS_OVERLAY_OPTIONS" = "App Settings Overlay Options";
|
||||
"APP_SETTINGS_OVERLAY_OPTIONS" = "Opciones de Superposición de Ajustes";
|
||||
|
||||
"HIDE_ACCOUNT_SECTION" = "Hide `Account` Section";
|
||||
"HIDE_AUTOPLAY_SECTION" = "Hide `Autoplay` Section";
|
||||
"HIDE_TRY_NEW_FEATURES_SECTION" = "Hide `Try New Features` Section";
|
||||
"HIDE_VIDEO_QUALITY_PREFERENCES_SECTION" = "Hide `Video quality preferences` Section";
|
||||
"HIDE_NOTIFICATIONS_SECTION" = "Hide `Notifications` Section";
|
||||
"HIDE_MANAGE_ALL_HISTORY_SECTION" = "Hide `Manage all history` Section";
|
||||
"HIDE_YOUR_DATA_IN_YOUTUBE_SECTION" = "Hide `Your data in YouTube` Section";
|
||||
"HIDE_PRIVACY_SECTION" = "Hide `Privacy` Section";
|
||||
"HIDE_LIVE_CHAT_SECTION" = "Hide `Live Chat` Section";
|
||||
"HIDE_GET_YOUTUBE_PREMIUM_SECTION" = "Hide `Get Youtube Premium` Section";
|
||||
"HIDE_ACCOUNT_SECTION" = "Ocultar Sección `Cuenta`";
|
||||
"HIDE_AUTOPLAY_SECTION" = "Ocultar Sección `Autoplay`";
|
||||
"HIDE_TRY_NEW_FEATURES_SECTION" = "Ocultar Sección `Prueba las nuevas funciones experimentales`";
|
||||
"HIDE_VIDEO_QUALITY_PREFERENCES_SECTION" = "Ocultar Sección `Preferencias de calidad de vídeo`";
|
||||
"HIDE_NOTIFICATIONS_SECTION" = "Ocultar Sección `Notificaciones`";
|
||||
"HIDE_MANAGE_ALL_HISTORY_SECTION" = "Ocultar Sección `Gestionar todo el historial`";
|
||||
"HIDE_YOUR_DATA_IN_YOUTUBE_SECTION" = "Ocultar Sección `Tus datos en YouTube`";
|
||||
"HIDE_PRIVACY_SECTION" = "Ocultar Sección `Privacidad`";
|
||||
"HIDE_LIVE_CHAT_SECTION" = "Ocultar Sección `Chat en directo`";
|
||||
"HIDE_GET_YOUTUBE_PREMIUM_SECTION" = "Ocultar Sección `Consigue Youtube Premium`";
|
||||
|
||||
"UI_INTERFACE_OPTIONS" = "UI Interface Options";
|
||||
|
||||
|
|
|
|||
11
Makefile
|
|
@ -1,4 +1,6 @@
|
|||
export TARGET = iphone:clang:16.4:15.0
|
||||
export TARGET = iphone:clang:16.5:15.0
|
||||
export SDK_PATH = $(THEOS)/sdks/iPhoneOS16.5.sdk/
|
||||
export SYSROOT = $(SDK_PATH)
|
||||
export ARCHS = arm64
|
||||
|
||||
export libcolorpicker_ARCHS = arm64
|
||||
|
|
@ -14,11 +16,12 @@ MODULES = jailed
|
|||
endif
|
||||
|
||||
ifndef YOUTUBE_VERSION
|
||||
YOUTUBE_VERSION = 19.23.3
|
||||
YOUTUBE_VERSION = 19.40.4
|
||||
endif
|
||||
ifndef UYOU_VERSION
|
||||
UYOU_VERSION = 3.0.4
|
||||
endif
|
||||
PACKAGE_NAME = $(TWEAK_NAME)
|
||||
PACKAGE_VERSION = $(YOUTUBE_VERSION)-$(UYOU_VERSION)
|
||||
|
||||
INSTALL_TARGET_PROCESSES = YouTube
|
||||
|
|
@ -31,7 +34,7 @@ $(TWEAK_NAME)_FRAMEWORKS = UIKit Foundation AVFoundation AVKit Photos Accelerate
|
|||
$(TWEAK_NAME)_LIBRARIES = bz2 c++ iconv z
|
||||
$(TWEAK_NAME)_CFLAGS = -fobjc-arc -Wno-deprecated-declarations -Wno-unused-but-set-variable -DTWEAK_VERSION=\"$(PACKAGE_VERSION)\"
|
||||
#uYouLocalization $(TWEAK_NAME)_INJECT_DYLIBS = Tweaks/uYou/Library/MobileSubstrate/DynamicLibraries/uYou.dylib $(THEOS_OBJ_DIR)/uYouLocalization.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 $(THEOS_OBJ_DIR)/YouTimeStamp.dylib .theos/obj/YouGroupSettings.dylib $(THEOS_OBJ_DIR)/YoutubeSpeed.dylib # $(THEOS_OBJ_DIR)/MrBeastify-ObjC.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)/YTABConfig.dylib $(THEOS_OBJ_DIR)/YouGroupSettings.dylib $(THEOS_OBJ_DIR)/YouLoop.dylib $(THEOS_OBJ_DIR)/YouMute.dylib $(THEOS_OBJ_DIR)/YouPiP.dylib $(THEOS_OBJ_DIR)/YouQuality.dylib $(THEOS_OBJ_DIR)/YouTimeStamp.dylib $(THEOS_OBJ_DIR)/YouTubeDislikesReturn.dylib $(THEOS_OBJ_DIR)/DontEatMyContent.dylib $(THEOS_OBJ_DIR)/YTHoldForSpeed.dylib $(THEOS_OBJ_DIR)/YoutubeSpeed.dylib $(THEOS_OBJ_DIR)/YTUHD.dylib $(THEOS_OBJ_DIR)/YTVideoOverlay.dylib
|
||||
$(TWEAK_NAME)_EMBED_LIBRARIES = $(THEOS_OBJ_DIR)/libcolorpicker.dylib
|
||||
$(TWEAK_NAME)_EMBED_FRAMEWORKS = $(_THEOS_LOCAL_DATA_DIR)/$(THEOS_OBJ_DIR_NAME)/install_Alderis.xcarchive/Products/var/jb/Library/Frameworks/Alderis.framework
|
||||
$(TWEAK_NAME)_EMBED_BUNDLES = $(wildcard Bundles/*.bundle)
|
||||
|
|
@ -40,7 +43,7 @@ $(TWEAK_NAME)_EMBED_EXTENSIONS = $(wildcard Extensions/*.appex)
|
|||
include $(THEOS)/makefiles/common.mk
|
||||
ifneq ($(JAILBROKEN),1)
|
||||
#uYouLocalization SUBPROJECTS += Tweaks/Alderis Tweaks/uYouLocalization
|
||||
SUBPROJECTS += Tweaks/Alderis Tweaks/FLEXing/libflex Tweaks/iSponsorBlock Tweaks/YouPiP Tweaks/Return-YouTube-Dislikes Tweaks/YTABConfig Tweaks/YTUHD Tweaks/DontEatMyContent Tweaks/YTHoldForSpeed Tweaks/YTVideoOverlay Tweaks/YouMute Tweaks/YouQuality Tweaks/YouTimeStamp Tweaks/YouGroupSettings Tweaks/YTSpeed # Tweaks/MrBeastify
|
||||
SUBPROJECTS += Tweaks/Alderis Tweaks/DontEatMyContent Tweaks/FLEXing/libflex Tweaks/iSponsorBlock Tweaks/Return-YouTube-Dislikes Tweaks/YTABConfig Tweaks/YouGroupSettings Tweaks/YouLoop Tweaks/YouMute Tweaks/YouPiP Tweaks/YouQuality Tweaks/YouTimeStamp Tweaks/YTHoldForSpeed Tweaks/YTSpeed Tweaks/YTUHD Tweaks/YTVideoOverlay
|
||||
include $(THEOS_MAKE_PATH)/aggregate.mk
|
||||
endif
|
||||
include $(THEOS_MAKE_PATH)/tweak.mk
|
||||
|
|
|
|||
48
README.md
|
|
@ -287,40 +287,43 @@
|
|||
- **Compatibility:** Requires iOS/iPadOS 15.0 or later.
|
||||
- For AltStore user:
|
||||
|
||||
- My official AltStore repo: https://therealfoxster.github.io/altsource-viewer/view/?source=https://raw.githubusercontent.com/arichornlover/arichornlover.github.io/main/apps.json
|
||||
- My official AltStore repo (uYouEnhanced - iOS 15+): https://therealfoxster.github.io/altsource-viewer/view/?source=https://raw.githubusercontent.com/arichornloverALT/arichornloverALT.github.io/main/apps.json
|
||||
|
||||
- [Open in AltStore (v19.21.2-3.0.4)](https://tinyurl.com/2wea84xd) - It will take a while to install because AltStore needs to download the IPA first.
|
||||
- My alternative AltStore repo (uYouEnhanced - iOS 14+ - mainly for Trollstore users): https://therealfoxster.github.io/altsource-viewer/view/?source=https://raw.githubusercontent.com/arichornloverALT/arichornloverALT.github.io/main/apps-legacy.json - not sure if i can update this ipa. this IPA will be locked in YouTube Version **19.20.2**
|
||||
|
||||
- [Open in AltStore (v19.40.4-3.0.4)](https://tinyurl.com/44zmcw8t) - It will take a while to install because AltStore needs to download the IPA first.
|
||||
|
||||
<details>
|
||||
<summary>Version information (last updated: May 28, 2024)</summary>
|
||||
<summary>Version information (last updated: Oct 10, 2024)</summary>
|
||||
|
||||
| **Tweaks/App** | **Developer** | **Version** | **Open source** |
|
||||
| - | - | :-: | :-: |
|
||||
| **YouTube** | Google Inc | 19.21.2 | ✖︎ |
|
||||
| **YouTube** | Google Inc | 19.40.4 | ✖︎ |
|
||||
| [uYou](https://github.com/MiRO92/uYou-for-YouTube) | [MiRO92](https://twitter.com/miro92) | 3.0.4 | ✖︎ |
|
||||
| **Open in YouTube** | [CokePokes](https://github.com/CokePokes) | 1.2 | [✔︎](https://github.com/CokePokes/YoutubeExtensions) |
|
||||
| **iSponsorBlock** | [Galactic-Dev](https://github.com/Galactic-Dev) | 1.2.5 | [✔︎](https://github.com/Galactic-Dev/iSponsorBlock) |
|
||||
| **iSponsorBlock** | [Galactic-Dev](https://github.com/Galactic-Dev) | 1.2.9 | [✔︎](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.1.6 | [✔︎](https://github.com/therealFoxster/DontEatMyContent) |
|
||||
| **DontEatMyContent** | [therealFoxster](https://github.com/therealFoxster) | 1.1.8 | [✔︎](https://github.com/therealFoxster/DontEatMyContent) |
|
||||
| **YTSpeed** | [Lyvendia](https://github.com/Lyvendia) | 1.0.1 | [✔︎](https://github.com/Lyvendia/YTSpeed) |
|
||||
| **Alderis Color Picker** | [HASHBANG Productions](https://github.com/hbang) | 1.2 | [✔︎](https://github.com/hbang/Alderis) |
|
||||
| **YTUHD** | [PoomSmart](https://twitter.com/poomsmart) | 1.5.1 | [✔︎](https://github.com/PoomSmart/YTUHD) |
|
||||
| **YouPiP** | [PoomSmart](https://twitter.com/poomsmart) | 1.8.9 | [✔︎](https://github.com/PoomSmart/YouPiP) |
|
||||
| **YTUHD** | [PoomSmart](https://twitter.com/poomsmart) | 1.5.5 | [✔︎](https://github.com/PoomSmart/YTUHD) |
|
||||
| **YouPiP** | [PoomSmart](https://twitter.com/poomsmart) | 1.8.14 | [✔︎](https://github.com/PoomSmart/YouPiP) |
|
||||
| **IAmYouTube** | [PoomSmart](https://twitter.com/poomsmart) | 1.3.0 | [✔︎](https://github.com/PoomSmart/IAmYouTube) |
|
||||
| **YTABConfig** | [PoomSmart](https://twitter.com/poomsmart) | 1.7.2 | [✔︎](https://github.com/PoomSmart/YTABConfig) |
|
||||
| **YTABConfig** | [PoomSmart](https://twitter.com/poomsmart) | 1.7.3 | [✔︎](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.11 | [✔︎](https://github.com/PoomSmart/Return-YouTube-Dislikes) |
|
||||
| **YouMute** | [PoomSmart](https://twitter.com/poomsmart) | 1.2.1-3 | [✔︎](https://github.com/PoomSmart/YouMute) |
|
||||
| **Return YouTube Dislike** | [PoomSmart](https://twitter.com/poomsmart) | 1.12.7 | [✔︎](https://github.com/PoomSmart/Return-YouTube-Dislikes) |
|
||||
| **YouMute** | [PoomSmart](https://twitter.com/poomsmart) | 1.2.3 | [✔︎](https://github.com/PoomSmart/YouMute) |
|
||||
| **YouQuality** | [PoomSmart](https://twitter.com/poomsmart) | 1.2.1 | [✔︎](https://github.com/PoomSmart/YouQuality) |
|
||||
| **YTVideoOverlay** | [PoomSmart](https://twitter.com/poomsmart) | 1.1.6 | [✔︎](https://github.com/PoomSmart/YTVideoOverlay) |
|
||||
| **YTHoldForSpeed** | [joshuaseltzer](https://github.com/joshuaseltzer) | 1.2.0 | [✔︎](https://github.com/joshuaseltzer/YTHoldForSpeed) |
|
||||
| **YouTube-X** | [PoomSmart](https://twitter.com/poomsmart) | 1.7.3 | [✔︎](https://github.com/PoomSmart/YouTube-X) |
|
||||
| **YTVideoOverlay** | [PoomSmart](https://twitter.com/poomsmart) | 1.2.0 | [✔︎](https://github.com/PoomSmart/YTVideoOverlay) |
|
||||
| **YTHoldForSpeed** | [joshuaseltzer](https://github.com/joshuaseltzer) | 1.2.1 | [✔︎](https://github.com/joshuaseltzer/YTHoldForSpeed) |
|
||||
| **LowContrastMode** | [arichornlover](https://github.com/arichornlover) | 1.5.2 | [✔︎](https://github.com/arichornlover/YTLowContrastMode) |
|
||||
| **YouTimeStamp** | [arichornlover](https://github.com/arichornlover) | 1.0.0 | [✔︎](https://github.com/arichornlover/YouTimeStamp) |
|
||||
| **YouTimeStamp** | [arichornlover](https://github.com/arichornlover) | 1.0.1 | [✔︎](https://github.com/arichornlover/YouTimeStamp) |
|
||||
|
||||
</details>
|
||||
|
||||
|
|
@ -332,7 +335,7 @@
|
|||
| MiRO92 | uYou 3.0 | v18.06.6 - v18.18.2 | iOS 14.0 - iOS 15.8.2 |
|
||||
| MiRO92 | uYou 3.0.1 | v18.19.1 - v18.41.5 | iOS 14.0 - iOS 17.5.1 |
|
||||
| MiRO92 | uYou 3.0.2 / 3.0.3 | v19.06.2 - v19.15.1 | iOS 14.0 - iOS 17.5.1 |
|
||||
| MiRO92 | uYou 3.0.4 | v19.06.2 - latest | iOS 14.0 - 17.5.1 |
|
||||
| MiRO92 | uYou 3.0.4 | v19.06.2 - v19.22.6 | iOS 14.0 - 17.5.1 |
|
||||
|
||||
# Building
|
||||
|
||||
|
|
@ -370,18 +373,19 @@ See [Installation - Wiki](https://github.com/qnblackcat/uYouPlus/wiki/Installati
|
|||
|
||||
# Wiki
|
||||
|
||||
See [arichornlover - Wiki](https://github.com/arichornlover/uYouenhanced/wiki/) or [qnblackcat - Wiki](https://github.com/qnblackcat/uYouPlus/wiki/)
|
||||
See [arichornlover - Wiki](https://github.com/arichornlover/uYouEnhanced/wiki/) or [qnblackcat - Wiki](https://github.com/qnblackcat/uYouPlus/wiki/)
|
||||
|
||||
|
||||
## Lightweight Alternative - YTLitePlus
|
||||
|
||||
<details>
|
||||
<summary>Read more</summary><br>
|
||||
- Change from uYouEnhanced 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.
|
||||
# Switch from uYouEnhanced to YTLitePlus (optional)
|
||||
|
||||
https://github.com/Balackburn/YTLitePlus/releases
|
||||
Hello, this is here to showcase this tweak. I have been seeing the posts about the YTLitePlus tweak on Reddit for quite some time now and decided to add it here. Before you download or check out the tweak, you should take a look at the pros and cons below to learn more about YTLitePlus.
|
||||
|
||||
https://github.com/YTLitePlus/YTLitePlus/releases
|
||||
|
||||
**Pros**
|
||||
|
||||
|
|
@ -389,9 +393,9 @@ https://github.com/Balackburn/YTLitePlus/releases
|
|||
|
||||
- YTLitePlus provides more features in YTLite & YTLitePlus Sections in Settings that uYouPlus/uYouEnhanced may not have.
|
||||
|
||||
- YTLitePlus includes a lightweight version of the App Version Spoofer, making it easier to use.
|
||||
- YTLitePlus includes a lightweight and simplified version of the App Version Spoofer, making it easier to use.
|
||||
|
||||
- YTLitePlus does not cause your device to overheat, unlike uYouEnhanced.
|
||||
- YTLitePlus does not cause your device to overheat, unlike uYouPlus/uYouEnhanced.
|
||||
|
||||
- YTLitePlus provides faster video & audio downloading than uYouPlus/uYouEnhanced.
|
||||
|
||||
|
|
@ -399,5 +403,5 @@ https://github.com/Balackburn/YTLitePlus/releases
|
|||
|
||||
- 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.
|
||||
- Reordering the pivot bar tabs such as `Home`, `Shorts`, `Explore`, `Trending`, `Create`, `Subscriptions` & `You` is not available in YTLitePlus.
|
||||
</details>
|
||||
|
|
|
|||
|
|
@ -2,11 +2,9 @@
|
|||
#import <YouTubeHeader/YTAssetLoader.h>
|
||||
|
||||
@interface AppIconOptionsController () <UITableViewDataSource, UITableViewDelegate>
|
||||
|
||||
@property (strong, nonatomic) UITableView *tableView;
|
||||
@property (strong, nonatomic) NSArray<NSString *> *appIcons;
|
||||
@property (assign, nonatomic) NSInteger selectedIconIndex;
|
||||
|
||||
@end
|
||||
|
||||
@implementation AppIconOptionsController
|
||||
|
|
@ -15,8 +13,6 @@
|
|||
[super viewDidLoad];
|
||||
|
||||
self.title = @"Change App Icon";
|
||||
[self.navigationController.navigationBar setTitleTextAttributes:@{NSFontAttributeName: [UIFont fontWithName:@"YTSans-Bold" size:22], NSForegroundColorAttributeName: [UIColor whiteColor]}];
|
||||
|
||||
self.selectedIconIndex = -1;
|
||||
|
||||
self.tableView = [[UITableView alloc] initWithFrame:self.view.bounds style:UITableViewStylePlain];
|
||||
|
|
@ -25,28 +21,11 @@
|
|||
[self.view addSubview:self.tableView];
|
||||
|
||||
self.backButton = [UIButton buttonWithType:UIButtonTypeCustom];
|
||||
NSBundle *backIcon = [NSBundle bundleWithPath:[[NSBundle mainBundle] pathForResource:@"uYouPlus" ofType:@"bundle"]];
|
||||
UIImage *backImage = [UIImage imageNamed:@"Back.png" inBundle:backIcon compatibleWithTraitCollection:nil];
|
||||
backImage = [self resizeImage:backImage newSize:CGSizeMake(24, 24)];
|
||||
backImage = [backImage imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate];
|
||||
[self.backButton setTintColor:[UIColor whiteColor]];
|
||||
[self.backButton setImage:backImage forState:UIControlStateNormal];
|
||||
[self.backButton setImage:[UIImage customBackButtonImage] forState:UIControlStateNormal];
|
||||
[self.backButton addTarget:self action:@selector(back) forControlEvents:UIControlEventTouchUpInside];
|
||||
[self.backButton setFrame:CGRectMake(0, 0, 24, 24)];
|
||||
UIBarButtonItem *customBackButton = [[UIBarButtonItem alloc] initWithCustomView:self.backButton];
|
||||
self.navigationItem.leftBarButtonItem = customBackButton;
|
||||
|
||||
UIColor *buttonColor = [UIColor colorWithRed:203.0/255.0 green:22.0/255.0 blue:51.0/255.0 alpha:1.0];
|
||||
UIImage *resetImage = [UIImage systemImageNamed:@"arrow.clockwise.circle.fill"];
|
||||
UIBarButtonItem *resetButton = [[UIBarButtonItem alloc] initWithImage:resetImage style:UIBarButtonItemStylePlain target:self action:@selector(resetIcon)];
|
||||
resetButton.tintColor = buttonColor;
|
||||
|
||||
UIImage *saveImage = [UIImage systemImageNamed:@"square.and.arrow.up.fill"];
|
||||
UIBarButtonItem *saveButton = [[UIBarButtonItem alloc] initWithImage:saveImage style:UIBarButtonItemStylePlain target:self action:@selector(saveIcon)];
|
||||
saveButton.tintColor = buttonColor;
|
||||
|
||||
self.navigationItem.rightBarButtonItems = @[saveButton, resetButton];
|
||||
|
||||
NSString *path = [[NSBundle mainBundle] pathForResource:@"uYouPlus" ofType:@"bundle"];
|
||||
NSBundle *bundle = [NSBundle bundleWithPath:path];
|
||||
self.appIcons = [bundle pathsForResourcesOfType:@"png" inDirectory:@"AppIcons"];
|
||||
|
|
@ -77,14 +56,8 @@
|
|||
cell.imageView.image = iconImage;
|
||||
cell.imageView.layer.cornerRadius = 10.0;
|
||||
cell.imageView.clipsToBounds = YES;
|
||||
cell.imageView.frame = CGRectMake(10, 10, 40, 40);
|
||||
cell.textLabel.frame = CGRectMake(60, 10, self.view.frame.size.width - 70, 40);
|
||||
|
||||
if (indexPath.row == self.selectedIconIndex) {
|
||||
cell.accessoryType = UITableViewCellAccessoryCheckmark;
|
||||
} else {
|
||||
cell.accessoryType = UITableViewCellAccessoryNone;
|
||||
}
|
||||
cell.accessoryType = (indexPath.row == self.selectedIconIndex) ? UITableViewCellAccessoryCheckmark : UITableViewCellAccessoryNone;
|
||||
|
||||
return cell;
|
||||
}
|
||||
|
|
@ -97,11 +70,6 @@
|
|||
}
|
||||
|
||||
- (void)resetIcon {
|
||||
NSString *plistPath = [[NSBundle mainBundle] pathForResource:@"Info" ofType:@"plist"];
|
||||
NSMutableDictionary *infoDict = [NSMutableDictionary dictionaryWithContentsOfFile:plistPath];
|
||||
[infoDict removeObjectForKey:@"ALTAppIcon"];
|
||||
[infoDict writeToFile:plistPath atomically:YES];
|
||||
|
||||
[[UIApplication sharedApplication] setAlternateIconName:nil completionHandler:^(NSError * _Nullable error) {
|
||||
if (error) {
|
||||
NSLog(@"Error resetting icon: %@", error.localizedDescription);
|
||||
|
|
@ -109,70 +77,37 @@
|
|||
} else {
|
||||
NSLog(@"Icon reset successfully");
|
||||
[self showAlertWithTitle:@"Success" message:@"Icon reset successfully"];
|
||||
dispatch_async(dispatch_get_main_queue(), ^{
|
||||
[self.tableView reloadData];
|
||||
});
|
||||
[self.tableView reloadData];
|
||||
}
|
||||
}];
|
||||
}
|
||||
|
||||
- (void)saveIcon {
|
||||
if (![UIApplication sharedApplication].supportsAlternateIcons) {
|
||||
NSLog(@"Alternate icons are not supported on this device.");
|
||||
if (self.selectedIconIndex < 0) {
|
||||
[self showAlertWithTitle:@"Error" message:@"No icon selected"];
|
||||
return;
|
||||
}
|
||||
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
|
||||
NSString *selectedIcon = self.selectedIconIndex >= 0 ? self.appIcons[self.selectedIconIndex] : nil;
|
||||
if (selectedIcon) {
|
||||
NSString *iconName = [selectedIcon.lastPathComponent stringByDeletingPathExtension];
|
||||
|
||||
NSString *plistPath = [[NSBundle mainBundle] pathForResource:@"Info" ofType:@"plist"];
|
||||
NSMutableDictionary *infoDict = [NSMutableDictionary dictionaryWithContentsOfFile:plistPath];
|
||||
[infoDict setObject:iconName forKey:@"ALTAppIcon"];
|
||||
[infoDict writeToFile:plistPath atomically:YES];
|
||||
|
||||
[[UIApplication sharedApplication] setAlternateIconName:iconName completionHandler:^(NSError * _Nullable error) {
|
||||
if (error) {
|
||||
NSLog(@"Error setting alternate icon: %@", error.localizedDescription);
|
||||
[self showAlertWithTitle:@"Error" message:@"Failed to set alternate icon"];
|
||||
} else {
|
||||
NSLog(@"Alternate icon set successfully");
|
||||
[self showAlertWithTitle:@"Success" message:@"Alternate icon set successfully"];
|
||||
dispatch_async(dispatch_get_main_queue(), ^{
|
||||
[self.tableView reloadData];
|
||||
});
|
||||
}
|
||||
}];
|
||||
|
||||
NSString *selectedIcon = self.appIcons[self.selectedIconIndex];
|
||||
NSString *iconName = [selectedIcon.lastPathComponent stringByDeletingPathExtension];
|
||||
|
||||
[[UIApplication sharedApplication] setAlternateIconName:iconName completionHandler:^(NSError * _Nullable error) {
|
||||
if (error) {
|
||||
NSLog(@"Error setting alternate icon: %@", error.localizedDescription);
|
||||
[self showAlertWithTitle:@"Error" message:@"Failed to set alternate icon"];
|
||||
} else {
|
||||
NSLog(@"Selected icon path is nil");
|
||||
NSLog(@"Alternate icon set successfully");
|
||||
[self showAlertWithTitle:@"Success" message:@"Alternate icon set successfully"];
|
||||
[self.tableView reloadData];
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
- (UIImage *)resizeImage:(UIImage *)image toSize:(CGSize)size {
|
||||
UIGraphicsBeginImageContextWithOptions(size, NO, [UIScreen mainScreen].scale);
|
||||
[image drawInRect:CGRectMake(0, 0, size.width, size.height)];
|
||||
UIImage *resizedImage = UIGraphicsGetImageFromCurrentImageContext();
|
||||
UIGraphicsEndImageContext();
|
||||
|
||||
return resizedImage;
|
||||
}
|
||||
|
||||
- (UIImage *)resizeImage:(UIImage *)image newSize:(CGSize)newSize {
|
||||
UIGraphicsBeginImageContextWithOptions(newSize, NO, [UIScreen mainScreen].scale);
|
||||
[image drawInRect:CGRectMake(0, 0, newSize.width, newSize.height)];
|
||||
UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();
|
||||
UIGraphicsEndImageContext();
|
||||
return newImage;
|
||||
}];
|
||||
}
|
||||
|
||||
- (void)showAlertWithTitle:(NSString *)title message:(NSString *)message {
|
||||
dispatch_async(dispatch_get_main_queue(), ^{
|
||||
UIAlertController *alert = [UIAlertController alertControllerWithTitle:title message:message preferredStyle:UIAlertControllerStyleAlert];
|
||||
UIAlertAction *okAction = [UIAlertAction actionWithTitle:@"OK" style:UIAlertActionStyleDefault handler:nil];
|
||||
[alert addAction:okAction];
|
||||
[self presentViewController:alert animated:YES completion:nil];
|
||||
});
|
||||
UIAlertController *alert = [UIAlertController alertControllerWithTitle:title message:message preferredStyle:UIAlertControllerStyleAlert];
|
||||
UIAlertAction *okAction = [UIAlertAction actionWithTitle:@"OK" style:UIAlertActionStyleDefault handler:nil];
|
||||
[alert addAction:okAction];
|
||||
[self presentViewController:alert animated:YES completion:nil];
|
||||
}
|
||||
|
||||
- (void)back {
|
||||
|
|
|
|||
|
|
@ -25,7 +25,7 @@
|
|||
%end
|
||||
|
||||
%ctor {
|
||||
if (IS_ENABLED(@"bigYTMiniPlayer_enabled") && (UIDevice.currentDevice.userInterfaceIdiom != UIUserInterfaceIdiomPad)) {
|
||||
if (IS_ENABLED(kBigYTMiniPlayer) && (UIDevice.currentDevice.userInterfaceIdiom != UIUserInterfaceIdiomPad)) {
|
||||
%init(BigYTMiniPlayer);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -10,10 +10,13 @@ static BOOL lowContrastMode() {
|
|||
static BOOL customContrastMode() {
|
||||
return IS_ENABLED(@"lowContrastMode_enabled") && contrastMode() == 1;
|
||||
}
|
||||
// static UIColor *whiteTextColor() {
|
||||
// return [UIColor whiteColor];
|
||||
// }
|
||||
|
||||
UIColor *lcmHexColor;
|
||||
|
||||
%group gLowContrastMode // Low Contrast Mode v1.5.2 (Compatible with only YouTube v17.33.2-v17.38.10)
|
||||
%group gLowContrastMode // Low Contrast Mode v1.6.0 BETA (Compatible with only YouTube v17.33.2-v17.38.10)
|
||||
%hook UIColor
|
||||
+ (UIColor *)whiteColor { // Dark Theme Color
|
||||
return [UIColor colorWithRed: 0.56 green: 0.56 blue: 0.56 alpha: 1.00];
|
||||
|
|
@ -54,39 +57,51 @@ UIColor *lcmHexColor;
|
|||
%end
|
||||
%hook YTCommonColorPalette
|
||||
- (UIColor *)textPrimary {
|
||||
NSLog(@"LowContrastMode: textPrimary called");
|
||||
return self.pageStyle == 1 ? [UIColor whiteColor] : %orig;
|
||||
}
|
||||
- (UIColor *)textSecondary {
|
||||
NSLog(@"LowContrastMode: textSecondary called");
|
||||
return self.pageStyle == 1 ? [UIColor whiteColor] : %orig;
|
||||
}
|
||||
- (UIColor *)overlayTextPrimary {
|
||||
NSLog(@"LowContrastMode: overlayTextPrimary called");
|
||||
return self.pageStyle == 1 ? [UIColor whiteColor] : %orig;
|
||||
}
|
||||
- (UIColor *)overlayTextSecondary {
|
||||
NSLog(@"LowContrastMode: overlayTextSecondary called");
|
||||
return self.pageStyle == 1 ? [UIColor whiteColor] : %orig;
|
||||
}
|
||||
- (UIColor *)iconActive {
|
||||
NSLog(@"LowContrastMode: iconActive called");
|
||||
return self.pageStyle == 1 ? [UIColor whiteColor] : %orig;
|
||||
}
|
||||
- (UIColor *)iconActiveOther {
|
||||
NSLog(@"LowContrastMode: iconActiveOther called");
|
||||
return self.pageStyle == 1 ? [UIColor whiteColor] : %orig;
|
||||
}
|
||||
- (UIColor *)brandIconActive {
|
||||
NSLog(@"LowContrastMode: brandIconActive called");
|
||||
return self.pageStyle == 1 ? [UIColor whiteColor] : %orig;
|
||||
}
|
||||
- (UIColor *)staticBrandWhite {
|
||||
NSLog(@"LowContrastMode: staticBrandWhite called");
|
||||
return self.pageStyle == 1 ? [UIColor whiteColor] : %orig;
|
||||
}
|
||||
- (UIColor *)overlayIconActiveOther {
|
||||
NSLog(@"LowContrastMode: overlayIconActiveOther called");
|
||||
return self.pageStyle == 1 ? [UIColor whiteColor] : %orig;
|
||||
}
|
||||
- (UIColor *)overlayIconInactive {
|
||||
NSLog(@"LowContrastMode: overlayIconInactive called");
|
||||
return self.pageStyle == 1 ? [[UIColor whiteColor] colorWithAlphaComponent:0.7] : %orig;
|
||||
}
|
||||
- (UIColor *)overlayIconDisabled {
|
||||
NSLog(@"LowContrastMode: overlayIconDisabled called");
|
||||
return self.pageStyle == 1 ? [[UIColor whiteColor] colorWithAlphaComponent:0.3] : %orig;
|
||||
}
|
||||
- (UIColor *)overlayFilledButtonActive {
|
||||
NSLog(@"LowContrastMode: overlayFilledButtonActive called");
|
||||
return self.pageStyle == 1 ? [[UIColor whiteColor] colorWithAlphaComponent:0.2] : %orig;
|
||||
}
|
||||
%end
|
||||
|
|
@ -246,12 +261,21 @@ UIColor *lcmHexColor;
|
|||
[modifiedAttributes setObject:[UIColor whiteColor] forKey:NSForegroundColorAttributeName];
|
||||
%orig(modifiedAttributes, state);
|
||||
}
|
||||
- (void)setCustomTitleTextAttributes:(NSDictionary *)attributes forState:(UIControlState)state {
|
||||
NSMutableDictionary *customAttributes = [NSMutableDictionary dictionaryWithDictionary:attributes];
|
||||
[customAttributes setObject:[UIColor whiteColor] forKey:NSForegroundColorAttributeName];
|
||||
%orig(customAttributes, state);
|
||||
}
|
||||
%end
|
||||
%hook UIButton
|
||||
- (void)setTitleColor:(UIColor *)color forState:(UIControlState)state {
|
||||
color = [UIColor whiteColor];
|
||||
%orig(color, state);
|
||||
}
|
||||
- (void)setCustomTitleColor:(UIColor *)color forState:(UIControlState)state {
|
||||
color = [UIColor whiteColor];
|
||||
%orig(color, state);
|
||||
}
|
||||
%end
|
||||
%hook UIBarButtonItem
|
||||
- (void)setTitleTextAttributes:(NSDictionary *)attributes forState:(UIControlState)state {
|
||||
|
|
@ -259,6 +283,11 @@ UIColor *lcmHexColor;
|
|||
[modifiedAttributes setObject:[UIColor whiteColor] forKey:NSForegroundColorAttributeName];
|
||||
%orig(modifiedAttributes, state);
|
||||
}
|
||||
- (void)setCustomTitleTextAttributes:(NSDictionary *)attributes forState:(UIControlState)state {
|
||||
NSMutableDictionary *customAttributes = [NSMutableDictionary dictionaryWithDictionary:attributes];
|
||||
[customAttributes setObject:[UIColor whiteColor] forKey:NSForegroundColorAttributeName];
|
||||
%orig(customAttributes, state);
|
||||
}
|
||||
%end
|
||||
%hook NSAttributedString
|
||||
- (instancetype)initWithString:(NSString *)str attributes:(NSDictionary<NSAttributedStringKey, id> *)attrs {
|
||||
|
|
@ -550,7 +579,18 @@ UIColor *lcmHexColor;
|
|||
%end
|
||||
%hook CATextLayer
|
||||
- (void)setTextColor:(CGColorRef)textColor {
|
||||
%orig([UIColor whiteColor].CGColor);
|
||||
%orig([[UIColor whiteColor] CGColor]);
|
||||
}
|
||||
%end
|
||||
%hook _ASDisplayView
|
||||
- (void)setAttributedText:(NSAttributedString *)attributedText {
|
||||
NSMutableAttributedString *newAttributedString = [attributedText mutableCopy];
|
||||
[newAttributedString addAttribute:NSForegroundColorAttributeName value:[UIColor whiteColor] range:NSMakeRange(0, newAttributedString.length)];
|
||||
%orig(newAttributedString);
|
||||
}
|
||||
- (void)setTextColor:(UIColor *)textColor {
|
||||
textColor = [UIColor whiteColor];
|
||||
%orig(textColor);
|
||||
}
|
||||
%end
|
||||
%hook ASTextNode
|
||||
|
|
@ -563,20 +603,20 @@ UIColor *lcmHexColor;
|
|||
%end
|
||||
%hook ASTextFieldNode
|
||||
- (void)setTextColor:(UIColor *)textColor {
|
||||
%orig([UIColor whiteColor]);
|
||||
%orig([UIColor whiteColor]);
|
||||
}
|
||||
%end
|
||||
%hook ASTextView
|
||||
- (void)setTextColor:(UIColor *)textColor {
|
||||
%orig([UIColor whiteColor]);
|
||||
%orig([UIColor whiteColor]);
|
||||
}
|
||||
%end
|
||||
%hook ASButtonNode
|
||||
- (void)setTextColor:(UIColor *)textColor {
|
||||
%orig([UIColor whiteColor]);
|
||||
%orig([UIColor whiteColor]);
|
||||
}
|
||||
%end
|
||||
%hook UIControl // snackbar fix for lcm
|
||||
%hook UIControl
|
||||
- (UIColor *)backgroundColor {
|
||||
return [UIColor blackColor];
|
||||
}
|
||||
|
|
|
|||
43
Sources/SettingsKeys.h
Normal file
|
|
@ -0,0 +1,43 @@
|
|||
#import "uYouPlus.h"
|
||||
#import "uYouPlusSettings.h"
|
||||
|
||||
// Keys for "Copy settings" button (for: uYouEnhanced)
|
||||
// In alphabetical order for tweaks after uYouEnhanced
|
||||
NSArray *NSUserDefaultsCopyKeys = @[
|
||||
// uYouEnhanced - gathered using get_keys.py
|
||||
kReplaceCopyandPasteButtons, kAppTheme, kOLEDKeyboard, kPortraitFullscreen, kFullscreenToTheRight, kSlideToSeek, kYTTapToSeek, kDoubleTapToSeek, kSnapToChapter, kPinchToZoom, kYTMiniPlayer, kStockVolumeHUD, kReplaceYTDownloadWithuYou, kDisablePullToFull, kDisableChapterSkip, kAlwaysShowRemainingTime, kDisableRemainingTime, kEnableShareButton, kEnableSaveToButton, kHideYTMusicButton, kHideAutoplaySwitch, kHideCC, kHideVideoTitle, kDisableCollapseButton, kDisableFullscreenButton, kHideHUD, kHidePaidPromotionCard, kHideChannelWatermark, kHideVideoPlayerShadowOverlayButtons, kHidePreviousAndNextButton, kRedProgressBar, kHideHoverCards, kHideRightPanel, kHideFullscreenActions, kHideSuggestedVideo, kHideHeatwaves, kHideDoubleTapToSeekOverlay, kHideOverlayDarkBackground, kDisableAmbientMode, kHideVideosInFullscreen, kHideRelatedWatchNexts, kHideBuySuperThanks, kHideSubscriptions, kShortsQualityPicker, kRedSubscribeButton, kHideButtonContainers, kHideConnectButton, kHideShareButton, kHideRemixButton, kHideThanksButton, kHideDownloadButton, kHideClipButton, kHideSaveToPlaylistButton, kHideReportButton, kHidePreviewCommentSection, kHideCommentSection, kDisableAccountSection, kDisableAutoplaySection, kDisableTryNewFeaturesSection, kDisableVideoQualityPreferencesSection, kDisableNotificationsSection, kDisableManageAllHistorySection, kDisableYourDataInYouTubeSection, kDisablePrivacySection, kDisableLiveChatSection, kHidePremiumPromos, kHideHomeTab, kLowContrastMode, kClassicVideoPlayer, kFixLowContrastMode, kDisableModernButtons, kDisableRoundedHints, kDisableModernFlags, kYTNoModernUI, kEnableVersionSpoofer, kGoogleSignInPatch, kAdBlockWorkaroundLite, kAdBlockWorkaround, kYouTabFakePremium, kDisableAnimatedYouTubeLogo, kCenterYouTubeLogo, kHideYouTubeLogo, kYTStartupAnimation, kDisableHints, kStickNavigationBar, kHideiSponsorBlockButton, kHideChipBar, kHidePlayNextInQueue, kHideCommunityPosts, kHideChannelHeaderLinks, kiPhoneLayout, kBigYTMiniPlayer, kReExplore, kAutoHideHomeBar, kHideSubscriptionsNotificationBadge, kFixCasting, kNewSettingsUI, kFlex, kGoogleSigninFix,
|
||||
// uYou - https://github.com/MiRO92/uYou-for-YouTube
|
||||
@"showedWelcomeVC", @"hideShortsTab", @"hideCreateTab", @"hideCastButton", @"relatedVideosAtTheEndOfYTVideos", @"removeYouTubeAds", @"backgroundPlayback", @"disableAgeRestriction", @"iPadLayout", @"noSuggestedVideoAtEnd", @"shortsProgressBar", @"hideShortsCells", @"removeShortsCell", @"startupPage",
|
||||
// DEMC - https://github.com/therealFoxster/DontEatMyContent/blob/master/Tweak.h
|
||||
@"DEMC_enabled", @"DEMC_colorViewsEnabled", @"DEMC_safeAreaConstant", @"DEMC_disableAmbientMode",
|
||||
@"DEMC_limitZoomToFill", @"DEMC_enableForAllVideos",
|
||||
// iSponsorBlock cannot be exported using this method - it is also being removed in v5
|
||||
// Return-YouTube-Dislike - https://github.com/PoomSmart/Return-YouTube-Dislikes/blob/main/TweakSettings.h
|
||||
@"RYD-ENABLED", @"RYD-VOTE-SUBMISSION", @"RYD-EXACT-LIKE-NUMBER", @"RYD-EXACT-NUMBER",
|
||||
// All YTVideoOverlay Tweaks - https://github.com/PoomSmart/YTVideoOverlay/blob/0fc6d29d1aa9e75f8c13d675daec9365f753d45e/Tweak.x#L28C1-L41C84
|
||||
@"YTVideoOverlay-YouLoop-Enabled", @"YTVideoOverlay-YouTimeStamp-Enabled", @"YTVideoOverlay-YouMute-Enabled",
|
||||
@"YTVideoOverlay-YouQuality-Enabled", @"YTVideoOverlay-YouLoop-Position", @"YTVideoOverlay-YouTimeStamp-Position",
|
||||
@"YTVideoOverlay-YouMute-Position", @"YTVideoOverlay-YouQuality-Position",
|
||||
// YouPiP - https://github.com/PoomSmart/YouPiP/blob/main/Header.h
|
||||
@"YouPiPPosition", @"CompatibilityModeKey", @"PiPActivationMethodKey", @"PiPActivationMethod2Key",
|
||||
@"NoMiniPlayerPiPKey", @"NonBackgroundableKey",
|
||||
// YTABConfig cannot be reasonably exported using this method
|
||||
// YTHoldForSpeed will be removed in v5
|
||||
// YouTube Plus / YTLite cannot be exported using this method
|
||||
// YTUHD - https://github.com/PoomSmart/YTUHD/blob/master/Header.h
|
||||
@"EnableVP9", @"AllVP9",
|
||||
// Useful YouTube Keys
|
||||
@"inline_muted_playback_enabled",
|
||||
];
|
||||
|
||||
|
||||
// Some default values to ignore when exporting settings
|
||||
NSDictionary *NSUserDefaultsCopyKeysDefaults = @{
|
||||
@"fixCasting_enabled": @1,
|
||||
@"inline_muted_playback_enabled": @5,
|
||||
@"newSettingsUI_enabled": @1,
|
||||
@"DEMC_safeAreaConstant": @21.5,
|
||||
@"RYD-ENABLED": @1,
|
||||
@"RYD-VOTE-SUBMISSION": @1,
|
||||
// Duplicate keys are not allowed in NSDictionary. If present, only the last one will be kept.
|
||||
};
|
||||
|
|
@ -3,7 +3,7 @@
|
|||
// YTMiniPlayerEnabler: https://github.com/level3tjg/YTMiniplayerEnabler/
|
||||
%hook YTWatchMiniBarViewController
|
||||
- (void)updateMiniBarPlayerStateFromRenderer {
|
||||
if (IS_ENABLED(@"ytMiniPlayer_enabled")) {}
|
||||
if (IS_ENABLED(kYTMiniPlayer)) {}
|
||||
else { return %orig; }
|
||||
}
|
||||
%end
|
||||
|
|
|
|||
|
|
@ -3,7 +3,7 @@
|
|||
// YTNoHoverCards: https://github.com/level3tjg/YTNoHoverCards
|
||||
%hook YTCreatorEndscreenView
|
||||
- (void)setHidden:(BOOL)hidden {
|
||||
if (IS_ENABLED(@"hideHoverCards_enabled"))
|
||||
if (IS_ENABLED(kHideHoverCards))
|
||||
hidden = YES;
|
||||
%orig;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -5,18 +5,18 @@
|
|||
// YTNoPaidPromo: https://github.com/PoomSmart/YTNoPaidPromo
|
||||
%hook YTMainAppVideoPlayerOverlayViewController
|
||||
- (void)setPaidContentWithPlayerData:(id)data {
|
||||
if (IS_ENABLED(@"hidePaidPromotionCard_enabled")) {}
|
||||
if (IS_ENABLED(kHidePaidPromotionCard)) {}
|
||||
else { return %orig; }
|
||||
}
|
||||
- (void)playerOverlayProvider:(YTPlayerOverlayProvider *)provider didInsertPlayerOverlay:(YTPlayerOverlay *)overlay {
|
||||
if ([[overlay overlayIdentifier] isEqualToString:@"player_overlay_paid_content"] && IS_ENABLED(@"hidePaidPromotionCard_enabled")) return;
|
||||
if ([[overlay overlayIdentifier] isEqualToString:@"player_overlay_paid_content"] && IS_ENABLED(kHidePaidPromotionCard)) return;
|
||||
%orig;
|
||||
}
|
||||
%end
|
||||
|
||||
%hook YTInlineMutedPlaybackPlayerOverlayViewController
|
||||
- (void)setPaidContentWithPlayerData:(id)data {
|
||||
if (IS_ENABLED(@"hidePaidPromotionCard_enabled")) {}
|
||||
if (IS_ENABLED(kHidePaidPromotionCard)) {}
|
||||
else { return %orig; }
|
||||
}
|
||||
%end
|
||||
|
|
|
|||
|
|
@ -38,7 +38,7 @@ static void replaceTab(YTIGuideResponse *response) {
|
|||
%end
|
||||
|
||||
%ctor {
|
||||
if (IS_ENABLED(@"reExplore_enabled")) {
|
||||
if (IS_ENABLED(kReExplore)) {
|
||||
%init(YTReExplore);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,53 +1,61 @@
|
|||
#import <UIKit/UIKit.h>
|
||||
#import <LocalAuthentication/LocalAuthentication.h>
|
||||
#import <CaptainHook/CaptainHook.h>
|
||||
#import <HBLog.h>
|
||||
#import <Foundation/Foundation.h>
|
||||
#import <objc/runtime.h>
|
||||
#import <CaptainHook/CaptainHook.h>
|
||||
#import <dlfcn.h>
|
||||
#import <sys/utsname.h>
|
||||
#import <substrate.h>
|
||||
#import <LocalAuthentication/LocalAuthentication.h>
|
||||
#import <objc/runtime.h>
|
||||
#import <rootless.h>
|
||||
|
||||
#import "uYouPlusThemes.h" // Hide "Buy Super Thanks" banner (_ASDisplayView)
|
||||
#import <YouTubeHeader/YTAppDelegate.h> // Activate FLEX
|
||||
#import <YouTubeHeader/YTIMenuConditionalServiceItemRenderer.h>
|
||||
#import <YouTubeHeader/YTIPlayerBarDecorationModel.h>
|
||||
#import <YouTubeHeader/YTPlayerBarRectangleDecorationView.h>
|
||||
#import <YouTubeHeader/YTVideoQualitySwitchOriginalController.h>
|
||||
#import <YouTubeHeader/YTIGuideResponse.h>
|
||||
#import <YouTubeHeader/YTIGuideResponseSupportedRenderers.h>
|
||||
#import <YouTubeHeader/YTIPivotBarSupportedRenderers.h>
|
||||
#import <YouTubeHeader/YTIPivotBarItemRenderer.h>
|
||||
#import <YouTubeHeader/YTIBrowseRequest.h>
|
||||
#import <YouTubeHeader/YTIButtonRenderer.h>
|
||||
#import <YouTubeHeader/YTIElementRenderer.h>
|
||||
#import <YouTubeHeader/YTISectionListRenderer.h>
|
||||
#import <YouTubeHeader/YTWatchNextResultsViewController.h>
|
||||
#import <YouTubeHeader/YTPlayerOverlay.h>
|
||||
#import <YouTubeHeader/YTPlayerOverlayProvider.h>
|
||||
#import <YouTubeHeader/YTMainAppVideoPlayerOverlayView.h>
|
||||
#import <YouTubeHeader/YTMainAppVideoPlayerOverlayViewController.h>
|
||||
#import <YouTubeHeader/YTReelWatchPlaybackOverlayView.h>
|
||||
#import <YouTubeHeader/YTInlinePlayerBarContainerView.h>
|
||||
#import <YouTubeHeader/YTInnerTubeCollectionViewController.h>
|
||||
#import <YouTubeHeader/YTPivotBarItemView.h>
|
||||
#import <YouTubeHeader/YTCollectionViewCell.h>
|
||||
#import <YouTubeHeader/YTIFormattedString.h>
|
||||
#import <YouTubeHeader/GPBMessage.h>
|
||||
#import <YouTubeHeader/YTIStringRun.h>
|
||||
#import <YouTubeHeader/YTWatchViewController.h>
|
||||
#import <YouTubeHeader/YTIPivotBarRenderer.h>
|
||||
#import <YouTubeHeader/YTPlayerOverlayManager.h> // Fixes uYou crash when trying to play video (#1422)
|
||||
|
||||
// Hide buttons under the video player by @PoomSmart
|
||||
#import <substrate.h>
|
||||
#import <sys/utsname.h>
|
||||
#import <YouTubeHeader/ASCollectionElement.h>
|
||||
#import <YouTubeHeader/ASCollectionView.h>
|
||||
#import <YouTubeHeader/ELMNodeController.h>
|
||||
|
||||
// YouTube-X
|
||||
#import <YouTubeHeader/YTReelModel.h>
|
||||
#import <YouTubeHeader/YTVideoWithContextNode.h>
|
||||
#import <YouTubeHeader/ELMCellNode.h>
|
||||
#import <YouTubeHeader/ELMNodeController.h>
|
||||
#import <YouTubeHeader/ELMPBElement.h>
|
||||
#import <YouTubeHeader/ELMPBProperties.h>
|
||||
#import <YouTubeHeader/ELMPBIdentifierProperties.h>
|
||||
#import <YouTubeHeader/GPBMessage.h>
|
||||
#import <YouTubeHeader/MLPlayerStickySettings.h>
|
||||
#import <YouTubeHeader/YTAppDelegate.h>
|
||||
#import <YouTubeHeader/YTCollectionViewCell.h>
|
||||
#import <YouTubeHeader/YTIBrowseRequest.h>
|
||||
#import <YouTubeHeader/YTIButtonRenderer.h>
|
||||
#import <YouTubeHeader/YTICompactLinkRenderer.h>
|
||||
#import <YouTubeHeader/YTICompactListItemRenderer.h>
|
||||
#import <YouTubeHeader/YTICompactListItemThumbnailSupportedRenderers.h>
|
||||
#import <YouTubeHeader/YTIIconThumbnailRenderer.h>
|
||||
#import <YouTubeHeader/YTIElementRenderer.h>
|
||||
#import <YouTubeHeader/YTIFormattedString.h>
|
||||
#import <YouTubeHeader/YTIGuideResponse.h>
|
||||
#import <YouTubeHeader/YTIGuideResponseSupportedRenderers.h>
|
||||
#import <YouTubeHeader/YTIMenuConditionalServiceItemRenderer.h>
|
||||
#import <YouTubeHeader/YTInnerTubeCollectionViewController.h>
|
||||
#import <YouTubeHeader/YTInlinePlayerBarContainerView.h>
|
||||
#import <YouTubeHeader/YTIPivotBarItemRenderer.h>
|
||||
#import <YouTubeHeader/YTIPivotBarRenderer.h>
|
||||
#import <YouTubeHeader/YTIPivotBarSupportedRenderers.h>
|
||||
#import <YouTubeHeader/YTIPlayerBarDecorationModel.h>
|
||||
#import <YouTubeHeader/YTISectionListRenderer.h>
|
||||
#import <YouTubeHeader/YTIStringRun.h>
|
||||
#import <YouTubeHeader/YTMainAppVideoPlayerOverlayViewController.h>
|
||||
#import <YouTubeHeader/YTMainAppVideoPlayerOverlayView.h>
|
||||
#import <YouTubeHeader/YTNavigationBarTitleView.h>
|
||||
#import <YouTubeHeader/YTPlayerBarController.h>
|
||||
#import <YouTubeHeader/YTPlayerBarRectangleDecorationView.h>
|
||||
#import <YouTubeHeader/YTPlayerOverlay.h>
|
||||
#import <YouTubeHeader/YTPlayerOverlayProvider.h>
|
||||
#import <YouTubeHeader/YTPlayerOverlayManager.h>
|
||||
#import <YouTubeHeader/YTReelModel.h>
|
||||
#import <YouTubeHeader/YTReelWatchPlaybackOverlayView.h>
|
||||
#import <YouTubeHeader/YTResponder.h>
|
||||
#import <YouTubeHeader/YTVideoQualitySwitchOriginalController.h>
|
||||
#import <YouTubeHeader/YTVideoWithContextNode.h>
|
||||
#import <YouTubeHeader/YTWatchNextResultsViewController.h>
|
||||
#import <YouTubeHeader/YTWatchPlayerViewLayoutSource.h>
|
||||
#import <YouTubeHeader/YTWatchPullToFullController.h>
|
||||
#import <YouTubeHeader/YTWatchViewController.h>
|
||||
#import "uYouPlusThemes.h" // uYouPlus Themes
|
||||
|
||||
#define LOC(x) [tweakBundle localizedStringForKey:x value:nil table:nil]
|
||||
#define IS_ENABLED(k) [[NSUserDefaults standardUserDefaults] boolForKey:k]
|
||||
|
|
@ -57,13 +65,120 @@
|
|||
#define DEFAULT_RATE 1.0f // YTSpeed
|
||||
#define LOWCONTRASTMODE_CUTOFF_VERSION @"17.38.10" // LowContrastMode (v17.33.2-17.38.10)
|
||||
|
||||
// Keys
|
||||
// Copy/Paste Settings
|
||||
static NSString *const kReplaceCopyandPasteButtons = @"replaceCopyandPasteButtons_enabled";
|
||||
// App appearance
|
||||
static NSString *const kAppTheme = @"appTheme";
|
||||
static NSString *const kOLEDKeyboard = @"oledKeyBoard_enabled";
|
||||
// Video player
|
||||
static NSString *const kPortraitFullscreen = @"portraitFullscreen_enabled";
|
||||
static NSString *const kFullscreenToTheRight = @"fullscreenToTheRight_enabled";
|
||||
static NSString *const kSlideToSeek = @"slideToSeek_enabled";
|
||||
static NSString *const kYTTapToSeek = @"YTTapToSeek_enabled";
|
||||
static NSString *const kDoubleTapToSeek = @"doubleTapToSeek_enabled";
|
||||
static NSString *const kSnapToChapter = @"snapToChapter_enabled";
|
||||
static NSString *const kPinchToZoom = @"pinchToZoom_enabled";
|
||||
static NSString *const kYTMiniPlayer = @"ytMiniPlayer_enabled";
|
||||
static NSString *const kStockVolumeHUD = @"stockVolumeHUD_enabled";
|
||||
static NSString *const kReplaceYTDownloadWithuYou = @"kReplaceYTDownloadWithuYou_enabled";
|
||||
static NSString *const kDisablePullToFull = @"disablePullToFull_enabled";
|
||||
static NSString *const kDisableChapterSkip = @"disableChapterSkip_enabled";
|
||||
static NSString *const kAlwaysShowRemainingTime = @"alwaysShowRemainingTime_enabled";
|
||||
static NSString *const kDisableRemainingTime = @"disableRemainingTime_enabled";
|
||||
// Video controls overlay
|
||||
static NSString *const kEnableShareButton = @"enableShareButton_enabled";
|
||||
static NSString *const kEnableSaveToButton = @"enableSaveToButton_enabled";
|
||||
static NSString *const kHideYTMusicButton = @"hideYTMusicButton_enabled";
|
||||
static NSString *const kHideAutoplaySwitch = @"hideAutoplaySwitch_enabled";
|
||||
static NSString *const kHideCC = @"hideCC_enabled";
|
||||
static NSString *const kHideVideoTitle = @"hideVideoTitle_enabled";
|
||||
static NSString *const kDisableCollapseButton = @"disableCollapseButton_enabled";
|
||||
static NSString *const kDisableFullscreenButton = @"disableFullscreenButton_enabled";
|
||||
static NSString *const kHideHUD = @"hideHUD_enabled";
|
||||
static NSString *const kHidePaidPromotionCard = @"hidePaidPromotionCard_enabled";
|
||||
static NSString *const kHideChannelWatermark = @"hideChannelWatermark_enabled";
|
||||
static NSString *const kHideVideoPlayerShadowOverlayButtons = @"hideVideoPlayerShadowOverlayButtons_enabled";
|
||||
static NSString *const kHidePreviousAndNextButton = @"hidePreviousAndNextButton_enabled";
|
||||
static NSString *const kRedProgressBar = @"redProgressBar_enabled";
|
||||
static NSString *const kHideHoverCards = @"hideHoverCards_enabled";
|
||||
static NSString *const kHideRightPanel = @"hideRightPanel_enabled";
|
||||
static NSString *const kHideFullscreenActions = @"hideFullscreenActions_enabled";
|
||||
static NSString *const kHideSuggestedVideo = @"hideSuggestedVideo_enabled";
|
||||
static NSString *const kHideHeatwaves = @"hideHeatwaves_enabled";
|
||||
static NSString *const kHideDoubleTapToSeekOverlay = @"hideDoubleTapToSeekOverlay_enabled";
|
||||
static NSString *const kHideOverlayDarkBackground = @"hideOverlayDarkBackground_enabled";
|
||||
static NSString *const kDisableAmbientMode = @"disableAmbientMode_enabled";
|
||||
static NSString *const kHideVideosInFullscreen = @"hideVideosInFullscreen_enabled";
|
||||
static NSString *const kHideRelatedWatchNexts = @"hideRelatedWatchNexts_enabled";
|
||||
// Shorts control overlay
|
||||
static NSString *const kHideBuySuperThanks = @"hideBuySuperThanks_enabled";
|
||||
static NSString *const kHideSubscriptions = @"hideSubscriptions_enabled";
|
||||
static NSString *const kShortsQualityPicker = @"shortsQualityPicker_enabled";
|
||||
// Video player buttons
|
||||
static NSString *const kRedSubscribeButton = @"redSubscribeButton_enabled";
|
||||
static NSString *const kHideButtonContainers = @"hideButtonContainers_enabled";
|
||||
static NSString *const kHideConnectButton = @"hideConnectButton_enabled";
|
||||
static NSString *const kHideShareButton = @"hideShareButton_enabled";
|
||||
static NSString *const kHideRemixButton = @"hideRemixButton_enabled";
|
||||
static NSString *const kHideThanksButton = @"hideRemixButton_enabled";
|
||||
static NSString *const kHideDownloadButton = @"hideDownloadButton_enabled";
|
||||
static NSString *const kHideClipButton = @"hideClipButton_enabled";
|
||||
static NSString *const kHideSaveToPlaylistButton = @"hideSaveToPlaylistButton_enabled";
|
||||
static NSString *const kHideReportButton = @"hideReportButton_enabled";
|
||||
static NSString *const kHidePreviewCommentSection = @"hidePreviewCommentSection_enabled";
|
||||
static NSString *const kHideCommentSection = @"hideCommentSection_enabled";
|
||||
// App settings overlay
|
||||
static NSString *const kDisableAccountSection = @"disableAccountSection_enabled";
|
||||
static NSString *const kDisableAutoplaySection = @"disableAutoplaySection_enabled";
|
||||
static NSString *const kDisableTryNewFeaturesSection = @"disableTryNewFeaturesSection_enabled";
|
||||
static NSString *const kDisableVideoQualityPreferencesSection = @"disableVideoQualityPreferencesSection_enabled";
|
||||
static NSString *const kDisableNotificationsSection = @"disableNotificationsSection_enabled";
|
||||
static NSString *const kDisableManageAllHistorySection = @"disableManageAllHistorySection_enabled";
|
||||
static NSString *const kDisableYourDataInYouTubeSection = @"disableYourDataInYouTubeSection_enabled";
|
||||
static NSString *const kDisablePrivacySection = @"disablePrivacySection_enabled";
|
||||
static NSString *const kDisableLiveChatSection = @"disableLiveChatSection_enabled";
|
||||
static NSString *const kHidePremiumPromos = @"hidePremiumPromos_enabled";
|
||||
// UI Interface
|
||||
static NSString *const kHideHomeTab = @"hideHomeTab_enabled";
|
||||
static NSString *const kLowContrastMode = @"lowContrastMode_enabled";
|
||||
static NSString *const kClassicVideoPlayer = @"classicVideoPlayer_enabled";
|
||||
static NSString *const kFixLowContrastMode = @"fixLowContrastMode_enabled";
|
||||
static NSString *const kDisableModernButtons = @"disableModernButtons_enabled";
|
||||
static NSString *const kDisableRoundedHints = @"disableRoundedHints_enabled";
|
||||
static NSString *const kDisableModernFlags = @"disableModernFlags_enabled";
|
||||
static NSString *const kYTNoModernUI = @"ytNoModernUI_enabled";
|
||||
static NSString *const kEnableVersionSpoofer = @"enableVersionSpoofer_enabled";
|
||||
// Miscellaneous
|
||||
static NSString *const kGoogleSignInPatch = @"googleSignInPatch_enabled";
|
||||
static NSString *const kAdBlockWorkaroundLite = @"adBlockWorkaroundLite_enabled";
|
||||
static NSString *const kAdBlockWorkaround = @"adBlockWorkaround_enabled";
|
||||
static NSString *const kYouTabFakePremium = @"youTabFakePremium_enabled";
|
||||
static NSString *const kDisableAnimatedYouTubeLogo = @"disableAnimatedYouTubeLogo_enabled";
|
||||
static NSString *const kCenterYouTubeLogo = @"centerYouTubeLogo_enabled";
|
||||
static NSString *const kHideYouTubeLogo = @"hideYouTubeLogo_enabled";
|
||||
static NSString *const kYTStartupAnimation = @"ytStartupAnimation_enabled";
|
||||
static NSString *const kDisableHints = @"disableHints_enabled";
|
||||
static NSString *const kStickNavigationBar = @"stickNavigationBar_enabled";
|
||||
static NSString *const kHideiSponsorBlockButton = @"hideiSponsorBlockButton_enabled";
|
||||
static NSString *const kHideChipBar = @"hideChipBar_enabled";
|
||||
static NSString *const kHidePlayNextInQueue = @"hidePlayNextInQueue_enabled";
|
||||
static NSString *const kHideCommunityPosts = @"hideCommunityPosts_enabled";
|
||||
static NSString *const kHideChannelHeaderLinks = @"hideChannelHeaderLinks_enabled";
|
||||
static NSString *const kiPhoneLayout = @"iPhoneLayout_enabled";
|
||||
static NSString *const kBigYTMiniPlayer = @"bigYTMiniPlayer_enabled";
|
||||
static NSString *const kReExplore = @"reExplore_enabled";
|
||||
static NSString *const kAutoHideHomeBar = @"autoHideHomeBar_enabled";
|
||||
static NSString *const kHideSubscriptionsNotificationBadge = @"hideSubscriptionsNotificationBadge_enabled";
|
||||
static NSString *const kFixCasting = @"fixCasting_enabled";
|
||||
static NSString *const kNewSettingsUI = @"newSettingsUI_enabled";
|
||||
static NSString *const kFlex = @"flex_enabled";
|
||||
// unused (uYouEnhanced)
|
||||
static NSString *const kGoogleSigninFix = @"googleSigninFix_enabled";
|
||||
|
||||
// Always show remaining time in video player - @bhackel
|
||||
@interface YTPlayerBarController : NSObject
|
||||
@property(nonatomic, strong) YTInlinePlayerBarContainerView *playerBar;
|
||||
@end
|
||||
@interface YTInlinePlayerBarContainerView (uYouEnhanced)
|
||||
@property(nonatomic, assign) BOOL shouldDisplayTimeRemaining;
|
||||
@end
|
||||
// Header has been moved to https://github.com/PoomSmart/YouTubeHeader/blob/main/YTPlayerBarController.h
|
||||
// Header has been moved to https://github.com/PoomSmart/YouTubeHeader/blob/main/YTInlinePlayerBarContainerView.h
|
||||
|
||||
// IAmYouTube
|
||||
@interface SSOConfiguration : NSObject
|
||||
|
|
@ -82,15 +197,18 @@
|
|||
- (CABasicAnimation *)uYouEnhancedGetBlankColorAnimation;
|
||||
@end
|
||||
|
||||
// OLED Live Chat - @bhackel
|
||||
@interface YTLUserDefaults : NSUserDefaults
|
||||
+ (void)exportYtlSettings;
|
||||
@end
|
||||
|
||||
// Hide Home Tab - @bhackel
|
||||
@interface YTPivotBarItemViewAccessibilityControl : UIControl
|
||||
@end
|
||||
@interface YTPivotBarItemView (uYouEnhanced)
|
||||
@property (nonatomic, strong) YTPivotBarItemViewAccessibilityControl *hitTarget;
|
||||
@end
|
||||
// YTPivotBarItemView Header has been moved to https://github.com/arichornloverALT/YouTubeHeader/blob/main/YTPivotBarItemView.h
|
||||
|
||||
// YTTapToSeek - https://github.com/bhackel/YTTapToSeek
|
||||
// Header has been moved to https://github.com/arichornlover/YouTubeHeader/blob/main/YTMainAppVideoPlayerOverlayViewController.h
|
||||
// YTMainAppVideoPlayerOverlayViewController Header has been moved to https://github.com/arichornloverALT/YouTubeHeader/blob/main/YTMainAppVideoPlayerOverlayViewController.h
|
||||
|
||||
// Enable Premium logo - @bhackel
|
||||
@interface YTITopbarLogoRenderer : NSObject
|
||||
|
|
@ -98,36 +216,12 @@
|
|||
@end
|
||||
|
||||
// Hide Premium Promo in You tab - @bhackel
|
||||
@interface YTIIconThumbnailRenderer : GPBMessage
|
||||
@property (nonatomic, strong) YTIIcon *icon;
|
||||
- (BOOL)hasIcon;
|
||||
@end
|
||||
@interface YTICompactListItemThumbnailSupportedRenderers : GPBMessage
|
||||
@property (nonatomic, strong) YTIIconThumbnailRenderer *iconThumbnailRenderer;
|
||||
- (BOOL)hasIconThumbnailRenderer;
|
||||
@end
|
||||
@interface YTICompactListItemRenderer : GPBMessage
|
||||
@property (nonatomic, strong) YTICompactListItemThumbnailSupportedRenderers *thumbnail;
|
||||
@property (nonatomic, strong) YTIFormattedString *title;
|
||||
- (BOOL)hasThumbnail;
|
||||
- (BOOL)hasTitle;
|
||||
@end
|
||||
@interface YTIIcon (uYouEnhanced)
|
||||
- (BOOL)hasIconType;
|
||||
@end
|
||||
@interface YTICompactLinkRenderer : GPBMessage
|
||||
@property (nonatomic, strong) YTIIcon *icon;
|
||||
@property (nonatomic, strong) YTIFormattedString *title;
|
||||
@property (nonatomic, strong) YTICompactListItemThumbnailSupportedRenderers *thumbnail;
|
||||
- (BOOL)hasIcon;
|
||||
- (BOOL)hasThumbnail;
|
||||
@end
|
||||
@interface YTIItemSectionSupportedRenderers (uYouEnhanced)
|
||||
@property(readonly, nonatomic) YTICompactLinkRenderer *compactLinkRenderer;
|
||||
@property(readonly, nonatomic) YTICompactListItemRenderer *compactListItemRenderer;
|
||||
- (BOOL)hasCompactLinkRenderer;
|
||||
- (BOOL)hasCompactListItemRenderer;
|
||||
@end
|
||||
// YTIIconThumbnailRenderer Header has been moved to https://github.com/arichornloverALT/YouTubeHeader/blob/main/YTIIconThumbnailRenderer.h
|
||||
// YTICompactListItemThumbnailSupportedRenderers Header has been moved to https://github.com/arichornloverALT/YouTubeHeader/blob/main/YTICompactListItemThumbnailSupportedRenderers.h
|
||||
// YTICompactListItemRenderer Header has been moved to https://github.com/arichornloverALT/YouTubeHeader/blob/main/YTICompactListItemRenderer.h
|
||||
// YTIIcon Header has been moved to https://github.com/arichornloverALT/YouTubeHeader/blob/main/YTIIcon.h
|
||||
// YTICompactLinkRenderer Header has been moved to https://github.com/arichornloverALT/YouTubeHeader/blob/main/YTICompactLinkRenderer.h
|
||||
// YTIItemSectionSupportedRenderers Header has been moved to https://github.com/arichornloverALT/YouTubeHeader/blob/main/YTIItemSectionSupportedRenderers.h
|
||||
@interface YTAppCollectionViewController : YTInnerTubeCollectionViewController
|
||||
- (void)uYouEnhancedFakePremiumModel:(YTISectionListRenderer *)model;
|
||||
@end
|
||||
|
|
@ -136,17 +230,18 @@
|
|||
@end
|
||||
|
||||
// Disable Pull to Full for landscape videos - @bhackel
|
||||
@interface YTWatchPullToFullController : NSObject
|
||||
@property(nonatomic, strong) YTWatchViewController *playerViewSource;
|
||||
@end
|
||||
@interface YTWatchViewController (uYouEnhanced)
|
||||
@property(nonatomic, strong) YTWatchPullToFullController *pullToFullController;
|
||||
- (NSUInteger) allowedFullScreenOrientations;
|
||||
// YTWatchPullToFullController Header has been moved to https://github.com/PoomSmart/YouTubeHeader/blob/main/YTWatchPullToFullController.h
|
||||
|
||||
// Fullscreen to the Right (uYouEnhanced Version) - @arichornlover
|
||||
- (BOOL) fullscreen;
|
||||
@interface YTWatchViewController (uYouEnhanced)
|
||||
- (UIInterfaceOrientationMask) supportedInterfaceOrientations;
|
||||
- (UIInterfaceOrientation) preferredInterfaceOrientationForPresentation;
|
||||
- (void)forceRightFullscreenOrientation;
|
||||
@end
|
||||
|
||||
// Center YouTube Logo (Custom Version) - @arichornlover
|
||||
@interface YTNavigationBarTitleView (uYouEnhanced)
|
||||
@property (nonatomic, strong) UIView *customView;
|
||||
- (void)alignCustomViewToCenterOfWindow;
|
||||
@end
|
||||
|
||||
// uYouPlus
|
||||
|
|
@ -154,9 +249,6 @@
|
|||
@property(readonly, nonatomic) long long pageStyle;
|
||||
@end
|
||||
|
||||
@interface YTNavigationBarTitleView : UIView
|
||||
@end
|
||||
|
||||
@interface YTChipCloudCell : UIView
|
||||
@end
|
||||
|
||||
|
|
@ -189,6 +281,9 @@
|
|||
@interface YTPlaybackButton : UIControl
|
||||
@end
|
||||
|
||||
@interface HelperVC : UIViewController
|
||||
@end
|
||||
|
||||
@interface YTPlaylistHeaderViewController : UIViewController
|
||||
@property UIButton *downloadsButton;
|
||||
@end
|
||||
|
|
@ -196,17 +291,16 @@
|
|||
// Buttons
|
||||
@interface YTRightNavigationButtons : UIView
|
||||
- (id)_viewControllerForAncestor;
|
||||
@property(readonly, nonatomic) YTQTMButton *searchButton;
|
||||
@property(readonly, nonatomic) YTQTMButton *notificationButton;
|
||||
@property(strong, nonatomic) YTQTMButton *sponsorBlockButton;
|
||||
@property(strong, nonatomic) YTQTMButton *uYouPlusButton;
|
||||
@property (readonly, nonatomic) NSArray *dynamicButtons;
|
||||
@property (readonly, nonatomic) NSArray *visibleButtons;
|
||||
@property (readonly, nonatomic) NSArray *buttons;
|
||||
@property (readonly, nonatomic) YTQTMButton *searchButton;
|
||||
@property (readonly, nonatomic) YTQTMButton *notificationButton;
|
||||
@property (strong, nonatomic) YTQTMButton *sponsorBlockButton;
|
||||
@property (strong, nonatomic) YTQTMButton *settingsButton;
|
||||
- (void)setDynamicButtons:(NSArray *)buttons;
|
||||
- (void)setLeadingPadding:(CGFloat)arg1;
|
||||
- (void)uYouPlusRootOptionsAction;
|
||||
@end
|
||||
|
||||
@interface YTISlimMetadataButtonSupportedRenderers : NSObject
|
||||
- (id)slimButton_buttonRenderer;
|
||||
- (id)slimMetadataButtonRenderer;
|
||||
- (void)settingsAction;
|
||||
@end
|
||||
|
||||
// YTSpeed
|
||||
|
|
@ -221,9 +315,7 @@
|
|||
- (void)internalSetRate;
|
||||
@end
|
||||
|
||||
@interface MLPlayerStickySettings (uYouPlus)
|
||||
- (void)setRate:(float)rate;
|
||||
@end
|
||||
// MLPlayerStickySettings Header has been moved to https://github.com/arichornloverALT/YouTubeHeader/blob/main/MLPlayerStickySettings.h
|
||||
|
||||
@interface MLPlayerEventCenter : NSObject
|
||||
- (void)broadcastRateChange:(float)rate;
|
||||
|
|
@ -263,6 +355,9 @@
|
|||
@interface ELMContainerNode : NSObject
|
||||
@end
|
||||
|
||||
@interface YTWrapperSplitView : UIView
|
||||
@end
|
||||
|
||||
@interface YTAutonavEndscreenView : UIView
|
||||
@end
|
||||
|
||||
|
|
|
|||
|
|
@ -1,10 +1,12 @@
|
|||
#import <UIKit/UIActivityViewController.h>
|
||||
#import <YouTubeHeader/YTUIUtils.h>
|
||||
#import <YouTubeHeader/YTCommonUtils.h>
|
||||
#import <YouTubeHeader/YTColorPalette.h>
|
||||
#import <YouTubeHeader/YTCommonColorPalette.h>
|
||||
#import "Tweaks/protobuf/objectivec/GPBDescriptor.h"
|
||||
#import "Tweaks/protobuf/objectivec/GPBUnknownField.h"
|
||||
#import "Tweaks/protobuf/objectivec/GPBUnknownFieldSet.h"
|
||||
#import <YouTubeHeader/GOODialogView.h>
|
||||
#import <YouTubeHeader/GPBDescriptor.h>
|
||||
#import <YouTubeHeader/GPBUnknownField.h>
|
||||
#import <YouTubeHeader/GPBUnknownFields.h>
|
||||
#import "uYouPlus.h"
|
||||
|
||||
@interface PlayerManager : NSObject
|
||||
|
|
@ -73,6 +75,15 @@
|
|||
@interface ELMPBShowActionSheetCommand : GPBMessage
|
||||
@property (nonatomic, strong, readwrite) ELMPBCommand *onAppear;
|
||||
@property (nonatomic, assign, readwrite) BOOL hasOnAppear;
|
||||
- (id)listOptionArray;
|
||||
@end
|
||||
|
||||
@interface ELMContext : NSObject
|
||||
@property (nonatomic, strong, readwrite) UIView *fromView;
|
||||
@end
|
||||
|
||||
@interface ELMCommandContext : NSObject
|
||||
@property (nonatomic, strong, readwrite) ELMContext *context;
|
||||
@end
|
||||
|
||||
@interface YTIUpdateShareSheetCommand
|
||||
|
|
@ -85,6 +96,11 @@
|
|||
+ (GPBExtensionDescriptor*)innertubeCommand;
|
||||
@end
|
||||
|
||||
@interface YTAccountScopedCommandResponderEvent
|
||||
@property (nonatomic, strong, readwrite) YTICommand *command;
|
||||
@property (nonatomic, strong, readwrite) UIView *fromView;
|
||||
@end
|
||||
|
||||
@interface YTIShareEntityEndpoint
|
||||
@property (nonatomic, assign, readwrite) BOOL hasSerializedShareEntity;
|
||||
@property (nonatomic, copy, readwrite) NSString *serializedShareEntity;
|
||||
|
|
|
|||
|
|
@ -3,6 +3,7 @@
|
|||
# pragma mark - YouTube patches
|
||||
|
||||
// Fix Google Sign in by @PoomSmart and @level3tjg (qnblackcat/uYouPlus#684)
|
||||
%group gGoogleSignInPatch
|
||||
%hook NSBundle
|
||||
- (NSDictionary *)infoDictionary {
|
||||
NSMutableDictionary *info = %orig.mutableCopy;
|
||||
|
|
@ -11,6 +12,7 @@
|
|||
return info;
|
||||
}
|
||||
%end
|
||||
%end
|
||||
|
||||
// Workaround for MiRO92/uYou-for-YouTube#12, qnblackcat/uYouPlus#263
|
||||
%hook YTDataUtils
|
||||
|
|
@ -96,30 +98,31 @@ typedef NS_ENUM(NSInteger, ShareEntityType) {
|
|||
ShareEntityFieldVideo = 1,
|
||||
ShareEntityFieldPlaylist = 2,
|
||||
ShareEntityFieldChannel = 3,
|
||||
ShareEntityFieldPost = 6,
|
||||
ShareEntityFieldClip = 8
|
||||
};
|
||||
|
||||
static inline NSString* extractIdWithFormat(GPBUnknownFieldSet *fields, NSInteger fieldNumber, NSString *format) {
|
||||
if (![fields hasField:fieldNumber])
|
||||
static inline NSString* extractIdWithFormat(GPBUnknownFields *fields, NSInteger fieldNumber, NSString *format) {
|
||||
NSArray<GPBUnknownField*> *fieldArray = [fields fields:fieldNumber];
|
||||
if (!fieldArray)
|
||||
return nil;
|
||||
GPBUnknownField *idField = [fields getField:fieldNumber];
|
||||
if ([idField.lengthDelimitedList count] != 1)
|
||||
if ([fieldArray count] != 1)
|
||||
return nil;
|
||||
NSString *id = [[NSString alloc] initWithData:[idField.lengthDelimitedList firstObject] encoding:NSUTF8StringEncoding];
|
||||
NSString *id = [[NSString alloc] initWithData:[fieldArray firstObject].lengthDelimited encoding:NSUTF8StringEncoding];
|
||||
return [NSString stringWithFormat:format, id];
|
||||
}
|
||||
|
||||
static BOOL showNativeShareSheet(NSString *serializedShareEntity) {
|
||||
static BOOL showNativeShareSheet(NSString *serializedShareEntity, UIView *sourceView) {
|
||||
GPBMessage *shareEntity = [%c(GPBMessage) deserializeFromString:serializedShareEntity];
|
||||
GPBUnknownFieldSet *fields = shareEntity.unknownFields;
|
||||
GPBUnknownFields *fields = [[%c(GPBUnknownFields) alloc] initFromMessage:shareEntity];
|
||||
NSString *shareUrl;
|
||||
|
||||
if ([fields hasField:ShareEntityFieldClip]) {
|
||||
GPBUnknownField *shareEntityClip = [fields getField:ShareEntityFieldClip];
|
||||
if ([shareEntityClip.lengthDelimitedList count] != 1)
|
||||
return FALSE;
|
||||
GPBMessage *clipMessage = [%c(GPBMessage) parseFromData:[shareEntityClip.lengthDelimitedList firstObject] error:nil];
|
||||
shareUrl = extractIdWithFormat(clipMessage.unknownFields, 1, @"https://youtube.com/clip/%@");
|
||||
NSArray<GPBUnknownField*> *shareEntityClip = [fields fields:ShareEntityFieldClip];
|
||||
if (shareEntityClip) {
|
||||
if ([shareEntityClip count] != 1)
|
||||
return NO;
|
||||
GPBMessage *clipMessage = [%c(GPBMessage) parseFromData:[shareEntityClip firstObject].lengthDelimited error:nil];
|
||||
shareUrl = extractIdWithFormat([[%c(GPBUnknownFields) alloc] initFromMessage:clipMessage], 1, @"https://youtube.com/clip/%@");
|
||||
}
|
||||
|
||||
if (!shareUrl)
|
||||
|
|
@ -138,34 +141,39 @@ static BOOL showNativeShareSheet(NSString *serializedShareEntity) {
|
|||
shareUrl = extractIdWithFormat(fields, ShareEntityFieldVideo, @"https://youtube.com/watch?v=%@");
|
||||
|
||||
if (!shareUrl)
|
||||
return FALSE;
|
||||
shareUrl = extractIdWithFormat(fields, ShareEntityFieldPost, @"https://youtube.com/post/%@");
|
||||
|
||||
UIActivityViewController *activityViewController = [[UIActivityViewController alloc]initWithActivityItems:@[shareUrl] applicationActivities:nil];
|
||||
[[%c(YTUIUtils) topViewControllerForPresenting] presentViewController:activityViewController animated:YES completion:^{}];
|
||||
return TRUE;
|
||||
if (!shareUrl)
|
||||
return NO;
|
||||
|
||||
UIActivityViewController *activityViewController = [[UIActivityViewController alloc] initWithActivityItems:@[shareUrl] applicationActivities:nil];
|
||||
activityViewController.excludedActivityTypes = @[UIActivityTypeAssignToContact, UIActivityTypePrint];
|
||||
|
||||
UIViewController *topViewController = [%c(YTUIUtils) topViewControllerForPresenting];
|
||||
|
||||
if (activityViewController.popoverPresentationController) {
|
||||
activityViewController.popoverPresentationController.sourceView = topViewController.view;
|
||||
activityViewController.popoverPresentationController.sourceRect = [sourceView convertRect:sourceView.bounds toView:topViewController.view];
|
||||
}
|
||||
|
||||
[topViewController presentViewController:activityViewController animated:YES completion:nil];
|
||||
|
||||
return YES;
|
||||
}
|
||||
|
||||
|
||||
/* -------------------- iPad Layout -------------------- */
|
||||
|
||||
%hook YTShareRequestViewController
|
||||
- (id)initWithService:(id)_service parentResponder:(id)_parentResponder {
|
||||
// disable the default share sheet behavior and force the app to call [YTAccountScopedCommandRouter handleCommand]
|
||||
return NULL;
|
||||
}
|
||||
%end
|
||||
|
||||
%hook YTAccountScopedCommandRouter
|
||||
- (BOOL)handleCommand:(id)command entry:(id)_entry fromView:(id)_fromView sender:(id)_sender completionBlock:(id)_completionBlock {
|
||||
// %group gYouTubeNativeShare // YouTube Native Share Option - 0.2.3 - Supports YouTube v17.33.2-v19.34.2
|
||||
%hook YTAccountScopedCommandResponderEvent
|
||||
- (void)send {
|
||||
GPBExtensionDescriptor *shareEntityEndpointDescriptor = [%c(YTIShareEntityEndpoint) shareEntityEndpoint];
|
||||
if (![command hasExtension:shareEntityEndpointDescriptor])
|
||||
if (![self.command hasExtension:shareEntityEndpointDescriptor])
|
||||
return %orig;
|
||||
YTIShareEntityEndpoint *shareEntityEndpoint = [command getExtension:shareEntityEndpointDescriptor];
|
||||
if(!shareEntityEndpoint.hasSerializedShareEntity)
|
||||
YTIShareEntityEndpoint *shareEntityEndpoint = [self.command getExtension:shareEntityEndpointDescriptor];
|
||||
if (!shareEntityEndpoint.hasSerializedShareEntity)
|
||||
return %orig;
|
||||
if (!showNativeShareSheet(shareEntityEndpoint.serializedShareEntity))
|
||||
if (!showNativeShareSheet(shareEntityEndpoint.serializedShareEntity, self.fromView))
|
||||
return %orig;
|
||||
return TRUE;
|
||||
}
|
||||
%end
|
||||
|
||||
|
|
@ -173,7 +181,7 @@ static BOOL showNativeShareSheet(NSString *serializedShareEntity) {
|
|||
/* ------------------- iPhone Layout ------------------- */
|
||||
|
||||
%hook ELMPBShowActionSheetCommand
|
||||
- (void)executeWithCommandContext:(id)_context handler:(id)_handler {
|
||||
- (void)executeWithCommandContext:(ELMCommandContext*)context handler:(id)_handler {
|
||||
if (!self.hasOnAppear)
|
||||
return %orig;
|
||||
GPBExtensionDescriptor *innertubeCommandDescriptor = [%c(YTIInnertubeCommandExtensionRoot) innertubeCommand];
|
||||
|
|
@ -186,10 +194,13 @@ static BOOL showNativeShareSheet(NSString *serializedShareEntity) {
|
|||
YTIUpdateShareSheetCommand *updateShareSheetCommand = [innertubeCommand getExtension:updateShareSheetCommandDescriptor];
|
||||
if (!updateShareSheetCommand.hasSerializedShareEntity)
|
||||
return %orig;
|
||||
if (!showNativeShareSheet(updateShareSheetCommand.serializedShareEntity))
|
||||
if (!showNativeShareSheet(updateShareSheetCommand.serializedShareEntity, context.context.fromView))
|
||||
return %orig;
|
||||
}
|
||||
%end
|
||||
// %end
|
||||
|
||||
//
|
||||
|
||||
// iOS 16 uYou crash fix - @level3tjg: https://github.com/qnblackcat/uYouPlus/pull/224
|
||||
// %group iOS16
|
||||
|
|
@ -326,8 +337,69 @@ static void refreshUYouAppearance() {
|
|||
- (void)beginEnlargeAnimation {}
|
||||
%end
|
||||
|
||||
%hook GOODialogView
|
||||
- (id)imageView {
|
||||
UIImageView *imageView = %orig;
|
||||
|
||||
if ([[self titleLabel].text containsString:@"uYou\n"]) {
|
||||
// // Invert uYou logo in download dialog if dark mode is enabled
|
||||
// if ([[NSUserDefaults standardUserDefaults] integerForKey:@"page_style"] == 0)
|
||||
// return imageView;
|
||||
// // https://gist.github.com/coryalder/3113a43734f5e0e4b497
|
||||
// UIImage *image = [imageView image];
|
||||
// CIImage *ciImage = [[CIImage alloc] initWithImage:image];
|
||||
// CIFilter *filter = [CIFilter filterWithName:@"CIColorInvert"];
|
||||
// [filter setDefaults];
|
||||
// [filter setValue:ciImage forKey:kCIInputImageKey];
|
||||
// CIContext *context = [CIContext contextWithOptions:nil];
|
||||
// CIImage *output = [filter outputImage];
|
||||
// CGImageRef cgImage = [context createCGImage:output fromRect:[output extent]];
|
||||
// UIImage *icon = [UIImage imageWithCGImage:cgImage];
|
||||
// CGImageRelease(cgImage);
|
||||
|
||||
// Load icon_clipped.png from uYouBundle.bundle
|
||||
NSString *bundlePath = [[NSBundle mainBundle] pathForResource:@"uYouBundle" ofType:@"bundle"];
|
||||
NSBundle *bundle = [NSBundle bundleWithPath:bundlePath];
|
||||
NSString *iconPath = [bundle pathForResource:@"icon_clipped" ofType:@"png"];
|
||||
UIImage *icon = [UIImage imageWithContentsOfFile:iconPath];
|
||||
[imageView setImage:icon];
|
||||
|
||||
// Resize image to 30x30
|
||||
// https://stackoverflow.com/a/2658801/19227228
|
||||
CGSize size = CGSizeMake(30, 30);
|
||||
UIGraphicsBeginImageContextWithOptions(size, NO, 0.0);
|
||||
[icon drawInRect:CGRectMake(0, 0, size.width, size.height)];
|
||||
UIImage *resizedImage = UIGraphicsGetImageFromCurrentImageContext();
|
||||
UIGraphicsEndImageContext();
|
||||
|
||||
[imageView setImage:resizedImage];
|
||||
}
|
||||
|
||||
return imageView;
|
||||
}
|
||||
// Increase space between uYou label and video title
|
||||
- (id)titleLabel {
|
||||
UILabel *titleLabel = %orig;
|
||||
if ([titleLabel.text containsString:@"uYou\n"] &&
|
||||
![titleLabel.text containsString:@"uYou\n\n"]
|
||||
) {
|
||||
NSString *text = [titleLabel.text stringByReplacingOccurrencesOfString:@"uYou\n" withString:@"uYou\n\n"];
|
||||
[titleLabel setText:text];
|
||||
}
|
||||
return titleLabel;
|
||||
}
|
||||
%end
|
||||
|
||||
%ctor {
|
||||
%init;
|
||||
if (IS_ENABLED(kGoogleSignInPatch)) {
|
||||
%init(gGoogleSignInPatch);
|
||||
}
|
||||
/*
|
||||
if (IS_ENABLED(kYouTubeNativeShare)) {
|
||||
%init(gYouTubeNativeShare);
|
||||
}
|
||||
*/
|
||||
// if (@available(iOS 16, *)) {
|
||||
// %init(iOS16);
|
||||
// }
|
||||
|
|
|
|||
|
|
@ -11,7 +11,7 @@ jobs:
|
|||
|
||||
steps:
|
||||
- name: Checkout code
|
||||
uses: actions/checkout@v4.1.4
|
||||
uses: actions/checkout@v4.1.7
|
||||
|
||||
- name: Set up Git
|
||||
run: |
|
||||
|
|
@ -20,11 +20,12 @@ jobs:
|
|||
|
||||
- name: Add uYouEnhanced submodules
|
||||
run: |
|
||||
# git submodule add https://github.com/PoomSmart/FLEXing.git Tweaks/FLEXing
|
||||
git submodule add https://github.com/dayanch96/uYouLocalization.git Tweaks/uYouLocalization
|
||||
git submodule add https://github.com/arichornlover/YTHoldForSpeed.git Tweaks/YTHoldForSpeed
|
||||
git submodule add https://github.com/arichornlover/YouGroupSettings.git Tweaks/YouGroupSettings
|
||||
git submodule add https://github.com/arichornlover/YouTimeStamp.git Tweaks/YouTimeStamp
|
||||
git submodule add https://github.com/arichornloverALT/YTHoldForSpeed.git Tweaks/YTHoldForSpeed
|
||||
git submodule add https://github.com/arichornloverALT/YouGroupSettings.git Tweaks/YouGroupSettings
|
||||
git submodule add https://github.com/arichornloverALT/YouTimeStamp.git Tweaks/YouTimeStamp
|
||||
git submodule add https://github.com/bhackel/YouLoop.git Tweaks/YouLoop
|
||||
git submodule add https://github.com/protocolbuffers/protobuf.git Tweaks/protobuf
|
||||
git add .
|
||||
git commit -m "added uYouEnhanced submodules"
|
||||
git push origin
|
||||
|
|
@ -65,6 +66,8 @@ jobs:
|
|||
git add .
|
||||
git submodule update --init --recursive --remote Tweaks/YouMute
|
||||
git add .
|
||||
git submodule update --init --recursive --remote Tweaks/YouLoop
|
||||
git add .
|
||||
git submodule update --init --recursive --remote Tweaks/YouPiP
|
||||
git add .
|
||||
git submodule update --init --recursive --remote Tweaks/YouQuality
|
||||
|
|
@ -84,10 +87,10 @@ jobs:
|
|||
- name: Make .bundle files
|
||||
run: |
|
||||
cd Bundles
|
||||
ln -s ../Tweaks/MrBeastify/layout/Library/Application\ Support/MrBeastify.bundle MrBeastify.bundle
|
||||
ln -s ../Tweaks/uYouLocalization/layout/Library/Application\ Support/uYouLocalization.bundle uYouLocalization.bundle
|
||||
ln -s ../Tweaks/YTHoldForSpeed/layout/Library/Application\ Support/YTHoldForSpeed.bundle YTHoldForSpeed.bundle
|
||||
ln -s ../Tweaks/YouGroupSettings/layout/Library/Application\ Support/YouGroupSettings.bundle YouGroupSettings.bundle
|
||||
ln -s ../Tweaks/YouLoop/layout/Library/Application\ Support/YouLoop.bundle YouLoop.bundle
|
||||
ln -s ../Tweaks/YouTimeStamp/layout/Library/Application\ Support/YouTimeStamp.bundle YouTimeStamp.bundle
|
||||
git add .
|
||||
git commit -m "Added bundles"
|
||||
|
|
@ -102,6 +105,7 @@ jobs:
|
|||
# rm -f uYouLocalization.bundle
|
||||
# rm -f YTHoldForSpeed.bundle
|
||||
# rm -f YouGroupSettings.bundle
|
||||
# rm -f YouLoop.bundle
|
||||
# rm -f YouTimeStamp.bundle
|
||||
# git add .
|
||||
# git commit -m "Deleted bundles"
|
||||
|
|
|
|||
|
|
@ -1 +1 @@
|
|||
Subproject commit 2aa3086244d296cfb3c8e782ef09c76316452a9d
|
||||
Subproject commit 15b061bf414cf29fd0d4e0e124e9e2ccb99326b0
|
||||
|
|
@ -1 +1 @@
|
|||
Subproject commit 95fecff296722df4a9938308c3bdb178cb690b7c
|
||||
Subproject commit a9134c82b032b145541f3c06a3c4950487f01474
|
||||
|
|
@ -1 +1 @@
|
|||
Subproject commit d3b2da8ba06c7d438aa3c2fb3359ae01d89b6731
|
||||
Subproject commit 9ef7bbb3b7d7cd2218a9884d8680625db0d898f3
|
||||
|
|
@ -1 +1 @@
|
|||
Subproject commit 67e321458867029b1ffcdfa29759332835b80eca
|
||||
Subproject commit a22ef4deb929c6622069290bb340d21b280f300e
|
||||
|
|
@ -1 +1 @@
|
|||
Subproject commit 2a4282fbdcbd0c8b586a64ad364fbb3ec880f606
|
||||
Subproject commit 5af54ea6bf3aed6a615094fa285669a0e46ece51
|
||||
|
|
@ -1 +1 @@
|
|||
Subproject commit 3cda9a9035e9964c881191268c30a9c0a4fc52a1
|
||||
Subproject commit 96508bf22012d588a6ad29bfff3f694800a3a525
|
||||
|
|
@ -1 +1 @@
|
|||
Subproject commit ec0c012561b56a908d7693a51f8db0015e1a6c30
|
||||
Subproject commit 12b4991ade6d3edd1e4fb28fe19bb32b6dc93206
|
||||
|
|
@ -1 +1 @@
|
|||
Subproject commit 159da3e9569e8f156a73df80b153c57cccc1dad1
|
||||
Subproject commit f5af14fc258cd84d7534bc55c51717f30172c79c
|
||||
1
Tweaks/YouLoop
Submodule
|
|
@ -0,0 +1 @@
|
|||
Subproject commit 58f76b1271c1ec05d6513e054f46e4080780a0d9
|
||||
|
|
@ -1 +1 @@
|
|||
Subproject commit 1f3ee2c5eef13ceb4ddc478148a48ffa19e1a9a7
|
||||
Subproject commit 63fe2c05fd23a517191645cd450115dc6965e0d8
|
||||
|
|
@ -1 +1 @@
|
|||
Subproject commit 33d903ddb5fee7c8e8a27a32e378caf9b854ca64
|
||||
Subproject commit a308e3eeb6eb60cb8f118cf7fdced0015e584ad4
|
||||
|
|
@ -1 +1 @@
|
|||
Subproject commit 38a2b7032200f700c661b6f6e9d22b4a7eb47e85
|
||||
Subproject commit e89ffe8be85564fe2bfc04345a186c4a02ef456a
|
||||
|
|
@ -1 +1 @@
|
|||
Subproject commit 8ed225d41ba7c9894df8e51afff3674c3ded4dbf
|
||||
Subproject commit 128c9305d7e796b883d8563b3cb6e7eac7a33ea8
|
||||
|
|
@ -1 +1 @@
|
|||
Subproject commit 58951f248bfe90298ca65007603d465f58369876
|
||||
Subproject commit b4e1bc798149d68029c89510948600be2986968b
|
||||
|
|
@ -1 +1 @@
|
|||
Subproject commit 532f0c2ed52b60bc33492a2ee4cbf9c4ca960450
|
||||
Subproject commit 60ca6e06d78e68854f8b1bd1c644a7f4376f6168
|
||||