diff --git a/.github/workflows/buildapp.yml b/.github/workflows/buildapp.yml index 2fd7fcd..1562b77 100644 --- a/.github/workflows/buildapp.yml +++ b/.github/workflows/buildapp.yml @@ -8,7 +8,7 @@ on: inputs: sdk_version: description: "iOS SDK Version" - default: "16.5" + default: "17.5" required: true type: string uyou_version: @@ -81,7 +81,7 @@ jobs: THEOS: ${{ github.workspace }}/theos YOUTUBE_URL: ${{ env.URL_YT }} - name: Checkout Main - uses: actions/checkout@v4.2.1 + uses: actions/checkout@v5 with: path: main ref: ${{ github.event.inputs.commit_id || github.ref }} @@ -94,16 +94,16 @@ jobs: run: echo "$(brew --prefix make)/libexec/gnubin" >> $GITHUB_PATH - name: Setup Theos - uses: actions/checkout@v4.2.1 + uses: actions/checkout@v5 with: repository: theos/theos - ref: 5bfdc3cb7133ec1cab43182115d902e2b57c9eac + ref: master path: theos submodules: recursive - name: SDK Caching id: SDK - uses: actions/cache@v4.1.1 + uses: actions/cache@v4.2.4 env: cache-name: iOS-${{ inputs.sdk_version }}-SDK with: @@ -114,7 +114,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/theos/sdks/ + git clone --quiet -n --depth=1 --filter=tree:0 https://github.com/aricloverALT/sdks/ cd sdks git sparse-checkout set --no-cone iPhoneOS${{ inputs.sdk_version }}.sdk git checkout @@ -123,7 +123,7 @@ jobs: THEOS: ${{ github.workspace }}/theos - name: Setup Theos Jailed - uses: actions/checkout@v4.2.1 + uses: actions/checkout@v5 with: repository: qnblackcat/theos-jailed ref: master @@ -140,8 +140,8 @@ jobs: id: build_package run: | cd ${{ github.workspace }}/main - sed -i '' "27s#.*#BUNDLE_ID = ${{ env.BUNDLE_ID }}#g" Makefile # Modify the bundle ID - sed -i '' "26s#.*#DISPLAY_NAME = ${{ env.APP_NAME }}#g" Makefile # Modify the app name + sed -i '' "30s#.*#BUNDLE_ID = ${{ env.BUNDLE_ID }}#g" Makefile # Modify the bundle ID + sed -i '' "29s#.*#DISPLAY_NAME = ${{ env.APP_NAME }}#g" Makefile # Modify the app name sed -i '' "1s#.*#export TARGET = iphone:clang:${{ inputs.sdk_version }}:14.0#g" Makefile # Modify the SDK version make package THEOS_PACKAGE_SCHEME=rootless IPA=Payload/YouTube.app FINALPACKAGE=1 echo "package=$(ls -t packages | head -n1)" >>$GITHUB_OUTPUT @@ -156,7 +156,7 @@ jobs: - name: Upload Artifact if: ${{ inputs.upload_artifact }} - uses: actions/upload-artifact@v4.4.3 + uses: actions/upload-artifact@v4.6.2 env: UYOU_VERSION: ${{ inputs.uyou_version }} YOUTUBE_VERSION: ${{ steps.prepare_youtube.outputs.youtube_version }} @@ -168,7 +168,7 @@ jobs: - name: Create Release if: ${{ inputs.create_release }} id: create_release - uses: softprops/action-gh-release@v2.0.8 + uses: softprops/action-gh-release@v2.3.2 env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} UYOU_VERSION: ${{ inputs.uyou_version }} diff --git a/.github/workflows/update-submodules.yml b/.github/workflows/update-submodules.yml index 6482360..8d2be29 100644 --- a/.github/workflows/update-submodules.yml +++ b/.github/workflows/update-submodules.yml @@ -9,7 +9,7 @@ jobs: steps: - name: Checkout code - uses: actions/checkout@v4.2.1 + uses: actions/checkout@v4.2.2 - name: Set up Git run: | @@ -22,21 +22,19 @@ jobs: git add . git submodule update --init --recursive --remote Tweaks/DontEatMyContent git add . - git submodule update --init --recursive --remote Tweaks/YTHoldForSpeed + git submodule update --init --recursive --remote Tweaks/iSponsorBlock git add . - git submodule update --init --recursive --remote Tweaks/YTSpeed + git submodule update --init --recursive --remote Tweaks/protobuf + git add . + git submodule update --init --recursive --remote Tweaks/PSHeader git add . git submodule update --init --recursive --remote Tweaks/Return-YouTube-Dislikes git add . git submodule update --init --recursive --remote Tweaks/uYouLocalization git add . - git submodule update --init --recursive --remote Tweaks/YTABConfig + git submodule update --init --recursive --remote Tweaks/YouGroupSettings git add . - git submodule update --init --recursive --remote Tweaks/YTClassicVideoQuality - git add . - git submodule update --init --recursive --remote Tweaks/YTUHD - git add . - git submodule update --init --recursive --remote Tweaks/YTVideoOverlay + git submodule update --init --recursive --remote Tweaks/YouLoop git add . git submodule update --init --recursive --remote Tweaks/YouMute git add . @@ -44,15 +42,25 @@ jobs: git add . git submodule update --init --recursive --remote Tweaks/YouQuality git add . - git submodule update --init --recursive --remote Tweaks/YouTimeStamp + git submodule update --init --recursive --remote Tweaks/YouSlider git add . - git submodule update --init --recursive --remote Tweaks/YouGroupSettings + git submodule update --init --recursive --remote Tweaks/YouSpeed + git add . + git submodule update --init --recursive --remote Tweaks/YouTimeStamp git add . git submodule update --init --recursive --remote Tweaks/YouTubeHeader git add . - git submodule update --init --recursive --remote Tweaks/iSponsorBlock + git submodule update --init --recursive --remote Tweaks/YTABConfig git add . - git submodule update --init --recursive --remote Tweaks/protobuf + git submodule update --init --recursive --remote Tweaks/YTClassicVideoQuality + git add . + git submodule update --init --recursive --remote Tweaks/YTHoldForSpeed + git add . + git submodule update --init --recursive --remote Tweaks/YTIcons + git add . + git submodule update --init --recursive --remote Tweaks/YTUHD + git add . + git submodule update --init --recursive --remote Tweaks/YTVideoOverlay git add . git submodule update --init --recursive git commit -m "updated submodules" diff --git a/.gitmodules b/.gitmodules index 80f9a3d..cedcb7e 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,89 +1,94 @@ -[submodule "Tweaks/YTUHD"] - path = Tweaks/YTUHD - url = https://github.com/arichornloverALT/YTUHD.git - branch = master -[submodule "Tweaks/YouPiP"] - path = Tweaks/YouPiP - url = https://github.com/arichornloverALT/YouPiP.git - branch = main -[submodule "Tweaks/YouMute"] - path = Tweaks/YouMute - url = https://github.com/PoomSmart/YouMute.git - branch = main -[submodule "Tweaks/YouQuality"] - path = Tweaks/YouQuality - url = https://github.com/arichornloverALT/YouQuality.git - branch = main -[submodule "Tweaks/YTVideoOverlay"] - path = Tweaks/YTVideoOverlay - url = https://github.com/arichornloverALT/YTVideoOverlay.git - branch = main -[submodule "Tweaks/Return-YouTube-Dislikes"] - path = Tweaks/Return-YouTube-Dislikes - url = https://github.com/PoomSmart/Return-YouTube-Dislikes.git -[submodule "Tweaks/YouTubeHeader"] - path = Tweaks/YouTubeHeader - url = https://github.com/arichornloverALT/YouTubeHeader.git - branch = main [submodule "Extensions"] - path = Extensions - url = https://github.com/CokePokes/YoutubeExtensions.git - branch = main -[submodule "Tweaks/YTABConfig"] - path = Tweaks/YTABConfig - url = https://github.com/PoomSmart/YTABConfig.git - branch = main -[submodule "Tweaks/FLEXing"] - path = Tweaks/FLEXing - url = https://github.com/PoomSmart/FLEXing - branch = rootless + path = Extensions + url = https://github.com/CrossiDev-Studio/OpenYoutubeAndShorts.git + branch = main [submodule "Tweaks/Alderis"] - path = Tweaks/Alderis - url = https://github.com/hbang/Alderis.git -[submodule "Tweaks/RemoteLog"] - path = Tweaks/RemoteLog - url = https://github.com/Muirey03/RemoteLog + path = Tweaks/Alderis + url = https://github.com/hbang/Alderis.git [submodule "Tweaks/DontEatMyContent"] - path = Tweaks/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/YTClassicVideoQuality"] - path = Tweaks/YTClassicVideoQuality - url = https://github.com/PoomSmart/YTClassicVideoQuality.git -[submodule "Tweaks/NoYTPremium"] - path = Tweaks/NoYTPremium - url = https://github.com/PoomSmart/NoYTPremium.git -[submodule "Tweaks/YTSpeed"] - path = Tweaks/YTSpeed - url = https://github.com/arichornloverALT/YTSpeed.git -[submodule "Tweaks/YouTube-X"] - path = Tweaks/YouTube-X - url = https://github.com/PoomSmart/YouTube-X/ + path = Tweaks/DontEatMyContent + url = https://github.com/aricloverEXTRA/DontEatMyContent.git +[submodule "Tweaks/FLEXing"] + path = Tweaks/FLEXing + url = https://github.com/PoomSmart/FLEXing.git + branch = rootless [submodule "Tweaks/IAmYouTube"] - path = Tweaks/IAmYouTube - url = https://github.com/PoomSmart/IAmYouTube.git -[submodule "Tweaks/YTHoldForSpeed"] - path = Tweaks/YTHoldForSpeed - 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 + path = Tweaks/IAmYouTube + url = https://github.com/PoomSmart/IAmYouTube.git +[submodule "Tweaks/NoYTPremium"] + path = Tweaks/NoYTPremium + url = https://github.com/PoomSmart/NoYTPremium.git +[submodule "Tweaks/PSHeader"] + path = Tweaks/PSHeader + url = https://github.com/PoomSmart/PSHeader.git +[submodule "Tweaks/RemoteLog"] + path = Tweaks/RemoteLog + url = https://github.com/Muirey03/RemoteLog.git +[submodule "Tweaks/Return-YouTube-Dislikes"] + path = Tweaks/Return-YouTube-Dislikes + url = https://github.com/aricloverEXTRA/Return-YouTube-Dislikes.git [submodule "Tweaks/YouGroupSettings"] - path = Tweaks/YouGroupSettings - url = https://github.com/arichornloverALT/YouGroupSettings.git -[submodule "Tweaks/YouTimeStamp"] - path = Tweaks/YouTimeStamp - url = https://github.com/arichornloverALT/YouTimeStamp.git -[submodule "Tweaks/protobuf"] - path = Tweaks/protobuf - url = https://github.com/protocolbuffers/protobuf.git + path = Tweaks/YouGroupSettings + url = https://github.com/PoomSmart/YouGroupSettings.git [submodule "Tweaks/YouLoop"] - path = Tweaks/YouLoop - url = https://github.com/bhackel/YouLoop.git + path = Tweaks/YouLoop + url = https://github.com/aricloverEXALT/YouLoop.git +[submodule "Tweaks/YouMute"] + path = Tweaks/YouMute + url = https://github.com/PoomSmart/YouMute.git + branch = main +[submodule "Tweaks/YouPiP"] + path = Tweaks/YouPiP + url = https://github.com/PoomSmart/YouPiP.git + branch = main +[submodule "Tweaks/YouQuality"] + path = Tweaks/YouQuality + url = https://github.com/PoomSmart/YouQuality.git + branch = main +[submodule "Tweaks/YouSlider"] + path = Tweaks/YouSlider + url = https://github.com/PoomSmart/YouSlider.git +[submodule "Tweaks/YouSpeed"] + path = Tweaks/YouSpeed + url = https://github.com/PoomSmart/YouSpeed.git +[submodule "Tweaks/YouTimeStamp"] + path = Tweaks/YouTimeStamp + url = https://github.com/aricloverEXTRA/YouTimeStamp.git +[submodule "Tweaks/YouTube-X"] + path = Tweaks/YouTube-X + url = https://github.com/PoomSmart/YouTube-X.git +[submodule "Tweaks/YouTubeHeader"] + path = Tweaks/YouTubeHeader + url = https://github.com/aricloverEXTRA/YouTubeHeader.git + branch = main +[submodule "Tweaks/YTABConfig"] + path = Tweaks/YTABConfig + url = https://github.com/PoomSmart/YTABConfig.git + branch = main +[submodule "Tweaks/YTClassicVideoQuality"] + path = Tweaks/YTClassicVideoQuality + url = https://github.com/PoomSmart/YTClassicVideoQuality.git +[submodule "Tweaks/YTHoldForSpeed"] + path = Tweaks/YTHoldForSpeed + url = https://github.com/aricloverEXTRA/YTHoldForSpeed.git +[submodule "Tweaks/YTIcons"] + path = Tweaks/YTIcons + url = https://github.com/PoomSmart/YTIcons.git +[submodule "Tweaks/YTUHD"] + path = Tweaks/YTUHD + url = https://github.com/aricloverEXTRA/YTUHD.git + branch = master +[submodule "Tweaks/YTVideoOverlay"] + path = Tweaks/YTVideoOverlay + url = https://github.com/PoomSmart/YTVideoOverlay.git + branch = main +[submodule "Tweaks/iSponsorBlock"] + path = Tweaks/iSponsorBlock + url = https://github.com/Galactic-Dev/iSponsorBlock.git + branch = master +[submodule "Tweaks/protobuf"] + path = Tweaks/protobuf + url = https://github.com/protocolbuffers/protobuf.git +[submodule "Tweaks/uYouLocalization"] + path = Tweaks/uYouLocalization + url = https://github.com/dayanch96/uYouLocalization.git diff --git a/Bundles/YouSlider.bundle b/Bundles/YouSlider.bundle new file mode 120000 index 0000000..2053432 --- /dev/null +++ b/Bundles/YouSlider.bundle @@ -0,0 +1 @@ +../Tweaks/YouSlider/layout/Library/Application Support/YouSlider.bundle \ No newline at end of file diff --git a/Bundles/YouSpeed.bundle b/Bundles/YouSpeed.bundle new file mode 120000 index 0000000..e982b1e --- /dev/null +++ b/Bundles/YouSpeed.bundle @@ -0,0 +1 @@ +../Tweaks/YouSpeed/layout/Library/Application Support/YouSpeed.bundle \ No newline at end of file diff --git a/Localizations/uYouPlus.bundle/UI/inbox_selected.png b/Localizations/uYouPlus.bundle/UI/inbox_selected.png new file mode 100644 index 0000000..4b19ce2 Binary files /dev/null and b/Localizations/uYouPlus.bundle/UI/inbox_selected.png differ diff --git a/Localizations/uYouPlus.bundle/UI/notifications_selected.png b/Localizations/uYouPlus.bundle/UI/notifications_selected.png new file mode 100644 index 0000000..869e17d Binary files /dev/null and b/Localizations/uYouPlus.bundle/UI/notifications_selected.png differ diff --git a/Localizations/uYouPlus.bundle/UI/notifications_unselected.png b/Localizations/uYouPlus.bundle/UI/notifications_unselected.png new file mode 100644 index 0000000..e0c80be Binary files /dev/null and b/Localizations/uYouPlus.bundle/UI/notifications_unselected.png differ diff --git a/Localizations/uYouPlus.bundle/en.lproj/Localizable.strings b/Localizations/uYouPlus.bundle/en.lproj/Localizable.strings index 2740d1c..a7ab57d 100644 --- a/Localizations/uYouPlus.bundle/en.lproj/Localizable.strings +++ b/Localizations/uYouPlus.bundle/en.lproj/Localizable.strings @@ -60,6 +60,9 @@ "STOCK_VOLUME_HUD" = "Use stock iOS volume HUD"; "STOCK_VOLUME_HUD_DESC" = ""; +"REPLACE_YT_DOWNLOAD_WITH_UYOU" = "Replace YouTube's download with uYou's"; +"REPLACE_YT_DOWNLOAD_WITH_UYOU_DESC" = ""; + // Video controls overlay options "VIDEO_CONTROLS_OVERLAY_OPTIONS" = "📹 Video controls overlay options"; @@ -167,6 +170,8 @@ "ENABLE_PORTRAIT_FULLSCREEN" = "Enable Portrait Fullscreen"; "ENABLE_PORTRAIT_FULLSCREEN_DESC" = "Enables Portrait Fullscreen on the YouTube App. App restart is required."; +"FULLSCREEN_TO_THE_RIGHT" = "Fullscreen to the Right"; +"FULLSCREEN_TO_THE_RIGHT_DESC" = "Force the video to always go to landscape right. 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"; @@ -254,7 +259,9 @@ "LOW_CONTRAST_MODE_SELECTOR" = "Low Contrast Mode Selector"; "LOW_CONTRAST_MODE_ERROR_1" = "You are using v%@ which is a discontinued version of YouTube that no longer works. Please use v17.33.2-17.38.10 in order to use LowContrastMode."; "LOW_CONTRAST_MODE_ERROR_2" = "LowContrastMode is only available for app versions v17.33.2-v17.38.10. \nYou are currently using v%@. \nWorkaround: if you want to use this then I recommend enabling \"Fix LowContrastMode\" Option."; -"FIX_LOWCONTRASTMODE" = "Fix LowContrastMode"; +"CLASSIC_VIDEO_PLAYER" = "Classic Video Player"; +"CLASSIC_VIDEO_PLAYER_DESC" = "Restores the classic video player features from v16.xx.x, including pinch-to-fullscreen."; +"FIX_LOWCONTRASTMODE" = "Fix LowContrastMode (Deprecated)"; "FIX_LOWCONTRASTMODE_DESC" = "This will fix and enable the LowContrastMode functionality by Spoofing to YouTube v17.38.10. App restart is required."; "DISABLE_MODERN_BUTTONS" = "Disable Modern Buttons"; "DISABLE_MODERN_BUTTONS_DESC" = "This will remove the some of the new Modern/Chip Buttons in the YouTube App. App restart is required."; diff --git a/Localizations/uYouPlus.bundle/ja.lproj/Localizable.strings b/Localizations/uYouPlus.bundle/ja.lproj/Localizable.strings index 74bdc6b..6c83c5e 100644 --- a/Localizations/uYouPlus.bundle/ja.lproj/Localizable.strings +++ b/Localizations/uYouPlus.bundle/ja.lproj/Localizable.strings @@ -1,15 +1,15 @@ // About -"ABOUT" = "アプリについて"; +"ABOUT" = "情報"; "VERSION" = "バージョン"; -"VERSION_CHECK" = "ここをタップしてアップデートを確認!"; +"VERSION_CHECK" = "ここをタップしてアップデートを確認"; "REPORT_AN_ISSUE" = "不具合を報告"; -"ADD_TITLE" = "タイトルをここに追加..."; +"ADD_TITLE" = "タイトルをここに追加…"; -"QUIT_YOUTUBE" = "YouTubeを終了"; +"QUIT_YOUTUBE" = "YouTube を終了"; -"RESTART_YOUTUBE" = "変更を適用するためにYouTubeを再起動"; +"RESTART_YOUTUBE" = "変更を適用するために YouTube を再起動します"; // App appearance "APP_THEME" = "🎨 アプリのテーマ"; @@ -18,16 +18,16 @@ "DARK_THEME" = "ダークテーマ"; "DEFAULT_THEME" = "デフォルト"; -"DEFAULT_THEME_DESC" = ""; +"DEFAULT_THEME_DESC" = "デフォルトのテーマ"; "OLD_DARK_THEME" = "明るいグレー"; -"OLD_DARK_THEME_DESC" = "以前のダークテーマ"; +"OLD_DARK_THEME_DESC" = "古いダークテーマ"; "OLED_DARK_THEME" = "OLED (実験的)"; "OLED_DARK_THEME_2" = "OLED"; "OLED_DARK_THEME_DESC" = "純粋な黒のダークテーマ"; -"OLED_KEYBOARD" = "OLEDキーボード (実験的)"; +"OLED_KEYBOARD" = "OLED キーボード (実験的)"; "OLED_KEYBOARD_DESC" = ""; // Video player options @@ -37,29 +37,32 @@ "SLIDE_TO_SEEK_DESC" = "スライドシークジェスチャーを有効にします。"; "DISABLE_DOUBLE_TAP_TO_SEEK" = "ダブルタップシークを無効化"; -"DISABLE_DOUBLE_TAP_TO_SEEK_DESC" = ""; +"DISABLE_DOUBLE_TAP_TO_SEEK_DESC" = "ダブルタップシークを無効にします。"; "SNAP_TO_CHAPTER" = "チャプターに合わせてのスクラブを無効化"; "SNAP_TO_CHAPTER_DESC" = "動画を飛ばす際にチャプターに沿ってスクラブされるのを無効にします。"; "PINCH_TO_ZOOM" = "ピンチで拡大を無効化"; -"PINCH_TO_ZOOM_DESC" = ""; +"PINCH_TO_ZOOM_DESC" = "動画をピンチして拡大する機能を無効化します。"; -"YT_MINIPLAYER" = "すべての動画でミニプレーヤーを有効にする"; -"YT_MINIPLAYER_DESC" = "ミニプレーヤーが使えない動画(子ども向けの動画など)がありますが、このオプションでバイパスできます。"; +"YT_MINIPLAYER" = "すべての動画でミニプレーヤーを有効化"; +"YT_MINIPLAYER_DESC" = "ミニプレーヤーで再生できない動画(子ども向けの動画など)を再生できるようにします。"; -"HIDE_REMIX_BUTTON" = "リミックスボタンを非表示"; +"HIDE_REMIX_BUTTON" = "[リミックス] ボタンを非表示"; "HIDE_REMIX_BUTTON_DESC" = ""; -"HIDE_CLIP_BUTTON" = "クリップボタンを非表示"; +"HIDE_CLIP_BUTTON" = "[クリップ] ボタンを非表示"; "HIDE_CLIP_BUTTON_DESC" = ""; -"HIDE_DOWNLOAD_BUTTON" = "オフラインボタンを非表示"; +"HIDE_DOWNLOAD_BUTTON" = "[オフライン] ボタンを非表示"; "HIDE_DOWNLOAD_BUTTON_DESC" = ""; -"STOCK_VOLUME_HUD" = "標準の音量HUDを利用する"; +"STOCK_VOLUME_HUD" = "iOS 標準の音量 HUD を使用"; "STOCK_VOLUME_HUD_DESC" = ""; +"REPLACE_YT_DOWNLOAD_WITH_UYOU" = "YouTube のダウンロード機能を置換"; +"REPLACE_YT_DOWNLOAD_WITH_UYOU_DESC" = "YouTube のダウンロード機能を uYou のものに置き換えます。"; + // Video controls overlay options "VIDEO_CONTROLS_OVERLAY_OPTIONS" = "📹 動画コントロールのオーバーレイ設定"; @@ -69,230 +72,237 @@ "HIDE_SUBTITLES_BUTTON" = "字幕ボタンを非表示"; "HIDE_SUBTITLES_BUTTON_DESC" = ""; -"HIDE_HUD_MESSAGES" = "HUDメッセージを非表示"; -"HIDE_HUD_MESSAGES_DESC" = "特定のアクション後に表示されるスナックバーを非表示にします。(例: 字幕がオン/オフになりました など)"; +"HIDE_HUD_MESSAGES" = "HUD メッセージを非表示"; +"HIDE_HUD_MESSAGES_DESC" = "特定のアクション後に表示されるスナックバーを非表示にします(例: [字幕がオン/オフになりました] など)"; -"HIDE_PAID_PROMOTION_CARDS" = "有料プロモーションカードを非表示"; +"HIDE_PAID_PROMOTION_CARDS" = "有料プロモーションバナーを非表示"; "HIDE_PAID_PROMOTION_CARDS_DESC" = ""; "HIDE_CHANNEL_WATERMARK" = "チャンネルのウォーターマークを非表示"; "HIDE_CHANNEL_WATERMARK_DESC" = ""; -"HIDE_PREVIOUS_AND_NEXT_BUTTON" = "前へ/次へボタンを非表示"; -"HIDE_PREVIOUS_AND_NEXT_BUTTON_DESC" = ""; +"HIDE_PREVIOUS_AND_NEXT_BUTTON" = "前の動画に戻る / 次の動画に進むボタンを非表示"; +"HIDE_PREVIOUS_AND_NEXT_BUTTON_DESC" = "プレイリストを含む全ての動画から非表示にします。"; -"REPLACE_PREVIOUS_NEXT_BUTTON" = "前へ/次へボタンを置き換える"; -"REPLACE_PREVIOUS_NEXT_BUTTON_DESC" = "前へ/次へボタンを早送り/巻き戻しボタンに置き換えます。"; +"REPLACE_PREVIOUS_NEXT_BUTTON" = "早送り/巻き戻しボタンに置換"; +"REPLACE_PREVIOUS_NEXT_BUTTON_DESC" = "前の動画に戻る/次の動画に進むボタンを早送り/巻き戻しボタンに置き換えます。"; "RED_PROGRESS_BAR" = "赤いプログレスバー"; -"RED_PROGRESS_BAR_DESC" = ""; +"RED_PROGRESS_BAR_DESC" = "プログレスバーの色を赤に変更します。"; "HIDE_HOVER_CARD" = "YTNoHoverCards"; "HIDE_HOVER_CARD_DESC" = "動画のエンドスクリーンを非表示にします。"; -"HIDE_RIGHT_PANEL" = "フルスクリーン時の右側パネルを非表示"; -"HIDE_RIGHT_PANEL_DESC" = "横向きの時、右パネル(チャットなど)を非表示にします。"; +"HIDE_RIGHT_PANEL" = "全画面表示時の右側パネルを非表示"; +"HIDE_RIGHT_PANEL_DESC" = "全画面表示で、右パネル(概要欄やチャットなど)を非表示にします。"; // Shorts controls overlay options -"SHORTS_CONTROLS_OVERLAY_OPTIONS" = "💥 ショート動画のオーバーレイ設定"; +"SHORTS_CONTROLS_OVERLAY_OPTIONS" = "💥 ショートのオーバーレイ設定"; -"HIDE_SUPER_THANKS" = "「Super Thanksを購入」バナーを非表示"; -"HIDE_SUPER_THANKS_DESC" = ""; +"HIDE_SUPER_THANKS" = "[Super Thanks を購入] バナーを非表示"; +"HIDE_SUPER_THANKS_DESC" = "[Super Thanks を購入] バナーを非表示にします"; -"HIDE_SUBCRIPTIONS" = "チャンネル登録ボタンを非表示"; -"HIDE_SUBCRIPTIONS_DESC" = ""; +"HIDE_SUBCRIPTIONS" = "[チャンネル登録] ボタンを非表示"; +"HIDE_SUBCRIPTIONS_DESC" = "[チャンネル登録] ボタンを非表示にします"; -"DISABLE_RESUME_TO_SHORTS" = "ショート動画からの再開を無効化"; -"DISABLE_RESUME_TO_SHORTS_DESC" = "ショート動画を視聴中にアプリを終了し、再度開いた際にショートから再開されるのを防ぎます。"; +"DISABLE_RESUME_TO_SHORTS" = "ショートの再開を無効化"; +"DISABLE_RESUME_TO_SHORTS_DESC" = "ショートを視聴中にアプリを終了し、再度開いた際にショートが再開されるのを防ぎます。"; // Miscellaneous "MISCELLANEOUS" = "🔎 その他"; -"HIDE_UYOU" = "uYouタブを非表示"; -"HIDE_ISPONSORBLOCK" = "iSponsorBlockボタンを非表示"; +"HIDE_UYOU" = "uYou タブを非表示"; +"HIDE_ISPONSORBLOCK" = "iSponsorBlock ボタンを非表示"; "CAST_CONFIRM" = "YTCastConfirm"; -"CAST_CONFIRM_DESC" = "キャスト前に確認の警告を表示します。"; +"CAST_CONFIRM_DESC" = "キャストを開始する前に確認の警告を表示します。"; "CASTING" = "キャスト"; -"MSG_ARE_YOU_SURE" = "本当にキャストを開始しますか?"; +"MSG_ARE_YOU_SURE" = "キャストを開始しますか?"; "MSG_YES" = "はい"; -"MSG_CANCEL" = "いいえ"; +"MSG_CANCEL" = "キャンセル"; "DISABLE_HINTS" = "ヒントを非表示"; -"DISABLE_HINTS_DESC" = "アプリ初回起動時に表示されるYouTubeのヒントを非表示にします。"; +"DISABLE_HINTS_DESC" = "アプリ初回起動時に表示される YouTube のヒントを非表示にします。"; -"ENABLE_YT_STARTUP_ANIMATION" = "YouTube起動時にアニメーションを表示"; +"ENABLE_YT_STARTUP_ANIMATION" = "YouTube 起動時にアニメーションを表示"; "ENABLE_YT_STARTUP_ANIMATION_DESC" = ""; "HIDE_CHIP_BAR" = "トップバーを非表示"; -"HIDE_CHIP_BAR_DESC" = "ホームと登録チャンネルのトップバー(すべて,音楽,ゲーム,続きを見る など)を非表示にします。"; +"HIDE_CHIP_BAR_DESC" = "ホームと登録チャンネルのトップバー([すべて]、[音楽]、[ゲーム]、[続きを見る] など)を非表示にします。"; -"HIDE_PLAY_NEXT_IN_QUEUE" = "「キューの最初に追加」を非表示"; +"HIDE_PLAY_NEXT_IN_QUEUE" = "[キューの最初に追加] を非表示"; "HIDE_PLAY_NEXT_IN_QUEUE_DESC" = ""; -"IPHONE_LAYOUT" = "iPhoneのレイアウトを強制"; +"IPHONE_LAYOUT" = "iPhone のレイアウトを強制"; "IPHONE_LAYOUT_DESC" = ""; "NEW_MINIPLAYER_STYLE" = "BigYTMiniPlayer"; -"NEW_MINIPLAYER_STYLE_DESC" = "新しいミニプレーヤーバー"; +"NEW_MINIPLAYER_STYLE_DESC" = "新しいミニプレーヤーバーのスタイル"; "YT_RE_EXPLORE" = "YTReExplore"; -"YT_RE_EXPLORE_DESC" = "ショートタブを探索タブに置き換えます。"; +"YT_RE_EXPLORE_DESC" = "[ショート] タブを [探索] タブに置き換えます。"; -"ENABLE_FLEX" = "FLEXを有効化"; -"ENABLE_FLEX_DESC" = "デバッグ用のFLEXを有効にします。"; +"ENABLE_FLEX" = "FLEX を有効化"; +"ENABLE_FLEX_DESC" = "デバッグ用の FLEX を有効にします。"; -"FIX_GOOGLE_SIGNIN" = "Googleのサインインを修正 (TrollStoreユーザーのみ)"; -"FIX_GOOGLE_SIGNIN_DESC" = "Googleアカウントでサインインできない場合で、アプリがTrollStore経由でインストールされている場合のみ、このオプションをオンにしてください。通常通りサインインできる場合はオフのままにしてください。アプリの再起動が必要です。"; +"FIX_GOOGLE_SIGNIN" = "Google のログインを修正 (TrollStoreユーザーのみ)"; +"FIX_GOOGLE_SIGNIN_DESC" = "Google アカウントでログインできず、かつアプリが TrollStore 経由でインストールした場合にのみ、このオプションを有効にしてください。正常にログインできる場合は、無効のままにしてください。アプリの再起動が必要です。"; // uYouEnhanced Localization ➕ -"SUPPORT_THE_DEVELOPERS" = "開発者を支援する"; +"SUPPORT_THE_DEVELOPERS" = "開発者を支援"; "COPY_SETTINGS" = "設定をコピー"; -"COPY_SETTINGS_DESC" = "現在のすべての設定をクリップボードにコピーします"; +"COPY_SETTINGS_DESC" = "現在のすべての設定をクリップボードにコピーします。"; "PASTE_SETTINGS" = "設定を貼り付け"; -"PASTE_SETTINGS_DESC" = "クリップボードから設定を貼り付けて適用します"; -"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'"; +"PASTE_SETTINGS_DESC" = "クリップボードから設定を貼り付けて適用します。"; +"EXPORT_SETTINGS" = "設定をエクスポート"; +"EXPORT_SETTINGS_DESC" = "現在のすべての設定を「.txt」ファイルにエクスポートします。"; +"IMPORT_SETTINGS" = "設定をインポート"; +"IMPORT_SETTINGS_DESC" = "タップして設定 (.txt) をインポートします"; +"REPLACE_COPY_AND_PASTE_BUTTONS" = "[設定をコピー] と [設定を貼り付け] ボタンを置換"; +"REPLACE_COPY_AND_PASTE_BUTTONS_DESC" = "[設定をコピー] と [設定を貼り付け] ボタンを置き換えます。"; "UYOUENHANCED_ESSENTIAL_MENU" = "uYouEnhanced エクストラメニュー"; "CHANGE_APP_ICON" = "アプリアイコンを変更"; -"CLEAR_NOTIFICATIONS" = "通知をクリア"; -"CLEAR_NOTIFICATIONS_DESC" = "すべてのアプリ通知を強制的にクリアします(サイドロード時に推奨)"; +"CLEAR_NOTIFICATIONS" = "通知を削除"; +"CLEAR_NOTIFICATIONS_DESC" = "すべてのアプリ通知を強制的に削除します(サイドロード時に推奨)"; "CUSTOM_DARK_THEME" = "カスタムダークテーマ"; -"ENABLE_PORTRAIT_FULLSCREEN" = "縦向きフルスクリーンを有効化"; -"ENABLE_PORTRAIT_FULLSCREEN_DESC" = "YouTubeアプリで縦向きフルスクリーンを有効にします。アプリの再起動が必要です。"; +"ENABLE_PORTRAIT_FULLSCREEN" = "縦向きの全画面表示を有効化"; +"ENABLE_PORTRAIT_FULLSCREEN_DESC" = "縦向きの全画面表示を有効にします。アプリの再起動が必要です。"; +"FULLSCREEN_TO_THE_RIGHT" = "右向きに全画面表示"; +"FULLSCREEN_TO_THE_RIGHT_DESC" = "動画を常に右横向きで再生するように強制します。アプリの再起動が必要です"; "ENABLE_TAP_TO_SEEK" = "タップしてシークを有効化"; -"ENABLE_TAP_TO_SEEK_DESC" = "シークバーを1回タップするだけでビデオ内の任意の場所にジャンプします。"; -"DISABLE_PULL_TO_FULLSCREEN_GESTURE" = "フルスクリーンへの引っ張りジェスチャーを無効化"; -"DISABLE_PULL_TO_FULLSCREEN_GESTURE_DESC" = "縦のフルスクリーンへ入るドラッグジェスチャーを無効にします。横向きのビデオにのみ適用されます。"; -"DISABLE_DOUBLE_TAP_TO_SKIP_CHAPTER" = "ダブルタップでチャプタースキップを無効化"; -"DISABLE_DOUBLE_TAP_TO_SKIP_CHAPTER_DESC" = "前方/後方にチャプターをスキップする2本指のダブルタップジェスチャーを無効にします。"; +"ENABLE_TAP_TO_SEEK_DESC" = "シークバーを 1 回タップして動画内の任意の場所にジャンプします。"; +"DISABLE_PULL_TO_FULLSCREEN_GESTURE" = "全画面表示への引っ張りジェスチャーを無効化"; +"DISABLE_PULL_TO_FULLSCREEN_GESTURE_DESC" = "縦の全画面表示へ入る引っ張りジェスチャーを無効にします。横向きの動画にのみ適用されます。"; +"DISABLE_DOUBLE_TAP_TO_SKIP_CHAPTER" = "ダブルタップでのチャプタースキップを無効化"; +"DISABLE_DOUBLE_TAP_TO_SKIP_CHAPTER_DESC" = "チャプターごとにスキップする 2 本指ダブルタップジェスチャーを無効にします。"; "ALWAYS_USE_REMAINING_TIME" = "常に残り時間形式を使用"; -"ALWAYS_USE_REMAINING_TIME_DESC" = "プレーヤーバーに表示される時間表示のデフォルトを残り時間形式に変更します。"; +"ALWAYS_USE_REMAINING_TIME_DESC" = "プレーヤーバーに表示される時間表示を残り時間形式に変更します。"; "DISABLE_TOGGLE_TIME_REMAINING" = "残り時間の切り替えを無効化"; -"DISABLE_TOGGLE_TIME_REMAINING_DESC" = "経過時間から残り時間への切り替えを無効にします。「常に残り時間形式を使用」オプションと一緒に使用してください。"; +"DISABLE_TOGGLE_TIME_REMAINING_DESC" = "経過時間から残り時間への切り替えを無効にします。[常に残り時間形式を使用] オプションと一緒に使用してください。"; -"ENABLE_SHARE_BUTTON" = "共有ボタンを有効化"; -"ENABLE_SHARE_BUTTON_DESC" = "ビデオコントロールオーバーレイに共有ボタンを追加します。"; -"ENABLE_SAVE_TO_PLAYLIST_BUTTON" = "再生リストに保存ボタンを有効化"; -"ENABLE_SAVE_TO_PLAYLIST_BUTTON_DESC" = "ビデオコントロールオーバーレイに再生リストに保存ボタンを追加します。"; -"HIDE_YTMUSIC_BUTTON" = "Youtube Musicボタンを隠す"; -"HIDE_YTMUSIC_BUTTON_DESC" = "Youtubeプレミアムで表示されるYoutube Musicボタンを非表示にします。"; -"HIDE_VIDEO_TITLE_IN_FULLSCREEN" = "フルスクリーンでビデオタイトルを隠す"; -"HIDE_VIDEO_TITLE_IN_FULLSCREEN_DESC" = "フルスクリーン時に、プレーヤー左上にある各種ボタンや動画タイトルを非表示にします。"; -"HIDE_COLLAPSE_BUTTON" = "折りたたみボタンを隠す"; -"HIDE_COLLAPSE_BUTTON_DESC" = "プレーヤー左上の折りたたみボタンを非表示にします。"; -"HIDE_FULLSCREEN_BUTTON" = "フルスクリーンボタンを隠す"; -"HIDE_FULLSCREEN_BUTTON_DESC" = "プレーヤー右下のフルスクリーンボタンを隠す。"; -"HIDE_SHADOW_OVERLAY_BUTTONS" = "シャドウオーバーレイボタンを隠す"; -"HIDE_SHADOW_OVERLAY_BUTTONS_DESC" = "再生/一時停止,前へ,次へ,早送り/巻き戻しボタンのシャドウオーバーレイを非表示にします。"; -"HIDE_FULLSCREEN_ACTION_BUTTONS" = "フルスクリーンアクションボタンを隠す"; -"HIDE_FULLSCREEN_ACTION_BUTTONS_DESC" = "フルスクリーン時に、画面下部にあるボタンを非表示にします。"; -"HIDE_SUGGESTED_VIDEO" = "おすすめ動画を隠す"; -"HIDE_SUGGESTED_VIDEO_DESC" = "動画終了時に出現するおすすめ動画のポップアップを非表示にします。※自動再生が機能しなくなります。"; -"HIDE_HEATWAVES_BAR" = "ヒートウェーブバーを隠す"; +"ENABLE_SHARE_BUTTON" = "[共有] ボタンを有効化"; +"ENABLE_SHARE_BUTTON_DESC" = "動画コントロールオーバーレイに [共有] ボタンを追加します。"; +"ENABLE_SAVE_TO_PLAYLIST_BUTTON" = "[再生リストに保存] ボタンを有効化"; +"ENABLE_SAVE_TO_PLAYLIST_BUTTON_DESC" = "動画コントロールオーバーレイに [再生リストに保存] ボタンを追加します。"; +"HIDE_YTMUSIC_BUTTON" = "[YouTube Music] ボタンを非表示"; +"HIDE_YTMUSIC_BUTTON_DESC" = "[YouTube Music] ボタンを非表示にします。"; +"HIDE_VIDEO_TITLE_IN_FULLSCREEN" = "全画面表示状態で動画のタイトルを非表示"; +"HIDE_VIDEO_TITLE_IN_FULLSCREEN_DESC" = "全画面表示時に、プレーヤー左上にある各種ボタンや動画のタイトルを非表示にします。"; +"HIDE_COLLAPSE_BUTTON" = "最小化ボタンを非表示"; +"HIDE_COLLAPSE_BUTTON_DESC" = "プレーヤー左上の最小化ボタンを非表示にします。"; +"HIDE_FULLSCREEN_BUTTON" = "全画面表示のボタンを非表示"; +"HIDE_FULLSCREEN_BUTTON_DESC" = "プレーヤー右下の全画面動画のボタンを非表示にします。"; +"HIDE_SHADOW_OVERLAY_BUTTONS" = "シャドウオーバーレイボタンを非表示"; +"HIDE_SHADOW_OVERLAY_BUTTONS_DESC" = "再生/一時停止、前へ/次へ、早送り/巻き戻しボタンのシャドウオーバーレイを非表示にします。"; +"HIDE_FULLSCREEN_ACTION_BUTTONS" = "全画面アクションボタンを非表示"; +"HIDE_FULLSCREEN_ACTION_BUTTONS_DESC" = "全画面表示時に、プレーヤー下部にあるボタンを非表示にします。"; +"HIDE_SUGGESTED_VIDEO" = "おすすめ動画を非表示"; +"HIDE_SUGGESTED_VIDEO_DESC" = "動画終了時に出現するおすすめ動画のポップアップを非表示にします。\n\n注意: 自動再生が機能しなくなります。"; +"HIDE_HEATWAVES_BAR" = "ヒートウェーブバーを非表示"; "HIDE_HEATWAVES_BAR_DESC" = "プレーヤーのプログレスバーに表示されるヒートウェーブバーを非表示にします。アプリの再起動が必要です。"; -"HIDE_DOUBLE_TAP_TO_SEEK_OVERLAY" = "ダブルタップしてシークオーバーレイを隠す"; +"HIDE_DOUBLE_TAP_TO_SEEK_OVERLAY" = "ダブルタップのシークオーバーレイを非表示"; "HIDE_DOUBLE_TAP_TO_SEEK_OVERLAY_DESC" = "プレーヤーでダブルタップした際のアニメーション付きオーバーレイを非表示にします。アプリの再起動が必要です。"; -"HIDE_DARK_OVERLAY_BACKGROUND" = "ダークオーバーレイ背景を隠す"; -"HIDE_DARK_OVERLAY_BACKGROUND_DESC" = "プレーヤーのダークオーバーレイ背景を非表示にします。アプリの再起動が必要です。"; -"HIDE_AMBIENT_MODE_IN_FULLSCREEN" = "フルスクリーンでのアンビエントモードを防ぐ"; -"HIDE_AMBIENT_MODE_IN_FULLSCREEN_DESC" = "フルスクリーンのプレーヤーでアンビエントモードの使用を防ぎます。アプリの再起動が必要です。"; -"HIDE_SUGGESTED_VIDEOS_IN_FULLSCREEN" = "フルスクリーンでおすすめ動画を隠す"; -"HIDE_SUGGESTED_VIDEOS_IN_FULLSCREEN_DESC" = "フルスクリーン時にプレーヤーのおすすめ動画を非表示にします。アプリの再起動が必要です。"; -"HIDE_ALL_VIDEOS_UNDER_PLAYER" = "プレーヤー下のすべてのビデオを隠す"; +"HIDE_DARK_OVERLAY_BACKGROUND" = "ダークオーバーレイの背景を非表示"; +"HIDE_DARK_OVERLAY_BACKGROUND_DESC" = "プレーヤーのダークオーバーレイの背景を非表示にします。アプリの再起動が必要です。"; +"HIDE_AMBIENT_MODE_IN_FULLSCREEN" = "全画面表示時のアンビエントモードを無効化"; +"HIDE_AMBIENT_MODE_IN_FULLSCREEN_DESC" = "全画面表示時のプレーヤーでのアンビエントモードの使用を防ぎます。アプリの再起動が必要です。"; +"HIDE_SUGGESTED_VIDEOS_IN_FULLSCREEN" = "全画面表示時におすすめ動画を非表示"; +"HIDE_SUGGESTED_VIDEOS_IN_FULLSCREEN_DESC" = "全画面表示時にプレーヤーのおすすめ動画を非表示にします。アプリの再起動が必要です。"; +"HIDE_ALL_VIDEOS_UNDER_PLAYER" = "プレーヤー下のすべての動画を非表示"; "HIDE_ALL_VIDEOS_UNDER_PLAYER_DESC" = "プレーヤーの下にあるすべての動画を非表示にします。端末の向きに依存します。"; "SHORTS_QUALITY_PICKER" = "ショートの画質を選択"; -"SHORTS_QUALITY_PICKER_DESC" = "YouTubeショートの画質選択を有効にします。"; +"SHORTS_QUALITY_PICKER_DESC" = "YouTube ショートの画質選択を有効にします。"; "VIDEO_PLAYER_BUTTON_OPTIONS" = "プレーヤーのボタンの設定"; "RED_SUBSCRIBE_BUTTON" = "赤いチャンネル登録ボタン"; -"RED_SUBSCRIBE_BUTTON_DESC" = "ボタンの色を赤に戻します。"; -"HIDE_BUTTON_CONTAINERS_UNDER_PLAYER" = "プレーヤー下のボタンコンテナを隠す"; +"RED_SUBSCRIBE_BUTTON_DESC" = "[チャンネル登録] ボタンの色を赤に戻します。"; +"HIDE_BUTTON_CONTAINERS_UNDER_PLAYER" = "ボタンコンテナを非表示"; "HIDE_BUTTON_CONTAINERS_UNDER_PLAYER_DESC" = "プレーヤーの下にあるボタンコンテナを非表示にします。"; -"HIDE_CONNECT_BUTTON" = "プレーヤー下の接続ボタンを隠す"; -"HIDE_CONNECT_BUTTON_DESC" = "プレーヤーの下にある接続ボタンを非表示にします。"; -"HIDE_SHARE_BUTTON" = "プレーヤー下の共有ボタンを隠す"; -"HIDE_SHARE_BUTTON_DESC" = "プレーヤーの下にある共有ボタンを非表示にします。"; -"HIDE_THANKS_BUTTON" = "プレーヤー下のThanksボタンを隠す"; -"HIDE_THANKS_BUTTON_DESC" = "プレーヤーの下にあるThanksボタンを非表示にします。"; -"HIDE_SAVE_BUTTON" = "プレーヤー下の保存ボタンを隠す"; -"HIDE_SAVE_BUTTON_DESC" = "プレーヤーの下にある保存ボタンを非表示にします。"; -"HIDE_REPORT_BUTTON" = "プレーヤー下の報告ボタンを隠す"; -"HIDE_REPORT_BUTTON_DESC" = "プレーヤーの下にある報告ボタンを非表示にします。"; -"HIDE_COMMENT_PREVIEWS_UNDER_PLAYER" = "プレーヤー下のコメントプレビューを隠す"; +"HIDE_CONNECT_BUTTON" = "[接続] ボタンを非表示"; +"HIDE_CONNECT_BUTTON_DESC" = "プレーヤーの下にある [接続] ボタンを非表示にします。"; +"HIDE_SHARE_BUTTON" = "[共有] ボタンを非表示"; +"HIDE_SHARE_BUTTON_DESC" = "プレーヤーの下にある [共有] ボタンを非表示にします。"; +"HIDE_THANKS_BUTTON" = "[Thanks] ボタンを非表示"; +"HIDE_THANKS_BUTTON_DESC" = "プレーヤーの下にある [Thanks] ボタンを非表示にします。"; +"HIDE_SAVE_BUTTON" = "[保存] ボタンを非表示"; +"HIDE_SAVE_BUTTON_DESC" = "プレーヤーの下にある [保存] ボタンを非表示にします。"; +"HIDE_REPORT_BUTTON" = "[報告] ボタンを非表示"; +"HIDE_REPORT_BUTTON_DESC" = "プレーヤーの下にある [報告] ボタンを非表示にします。"; +"HIDE_COMMENT_PREVIEWS_UNDER_PLAYER" = "コメントプレビューを非表示"; "HIDE_COMMENT_PREVIEWS_UNDER_PLAYER_DESC" = "プレーヤーの下にあるコメントのプレビューを非表示にします。"; -"HIDE_COMMENT_SECTION_BUTTON" = "プレーヤー下のコメント欄を隠す"; +"HIDE_COMMENT_SECTION_BUTTON" = "コメント欄を非表示"; "HIDE_COMMENT_SECTION_BUTTON_DESC" = "プレーヤーの下にあるコメント欄を非表示にします。"; -"APP_SETTINGS_OVERLAY_OPTIONS" = "アプリ設定のオーバーレイの設定"; +"APP_SETTINGS_OVERLAY_OPTIONS" = "YouTube 設定メニューの表示/非表示"; -"HIDE_ACCOUNT_SECTION" = "「アカウント」を非表示にする"; -"HIDE_AUTOPLAY_SECTION" = "「自動再生」を非表示にする"; -"HIDE_TRY_NEW_FEATURES_SECTION" = "「試験運用版の新機能を試す」を非表示にする"; -"HIDE_VIDEO_QUALITY_PREFERENCES_SECTION" = "「動画の画質設定」を非表示にする"; -"HIDE_NOTIFICATIONS_SECTION" = "「通知」を非表示にする"; -"HIDE_MANAGE_ALL_HISTORY_SECTION" = "「すべての履歴を管理」を非表示にする"; -"HIDE_YOUR_DATA_IN_YOUTUBE_SECTION" = "「YouTubeでのデータ」を非表示にする"; -"HIDE_PRIVACY_SECTION" = "「プライバシー」を非表示にする"; -"HIDE_LIVE_CHAT_SECTION" = "「チャット」を非表示にする"; -"HIDE_GET_YOUTUBE_PREMIUM_SECTION" = "「YouTubeプレミアムを入手」を非表示にする"; +"HIDE_ACCOUNT_SECTION" = "[アカウント] メニューを非表示"; +"HIDE_AUTOPLAY_SECTION" = "[自動再生] メニューを非表示"; +"HIDE_TRY_NEW_FEATURES_SECTION" = "[試験運用版の新機能を試す] メニューを非表示"; +"HIDE_VIDEO_QUALITY_PREFERENCES_SECTION" = "[動画の画質設定] メニューを非表示"; +"HIDE_NOTIFICATIONS_SECTION" = "[通知] メニューを非表示"; +"HIDE_MANAGE_ALL_HISTORY_SECTION" = "[すべての履歴を管理] メニューを非表示"; +"HIDE_YOUR_DATA_IN_YOUTUBE_SECTION" = "[YouTube でのデータ] メニューを非表示"; +"HIDE_PRIVACY_SECTION" = "[プライバシー] メニューを非表示"; +"HIDE_LIVE_CHAT_SECTION" = "[チャット] メニューを非表示"; +"HIDE_GET_YOUTUBE_PREMIUM_SECTION" = "[YouTube Premium を入手] メニューを非表示"; -"UI_INTERFACE_OPTIONS" = "UIインターフェースの設定"; +"UI_INTERFACE_OPTIONS" = "UI インターフェースの設定"; -"HIDE_HOME_TAB" = "ホームタブを隠す"; +"HIDE_HOME_TAB" = "ホームタブを非表示"; "LOW_CONTRAST_MODE" = "低コントラストモード"; -"LOW_CONTRAST_MODE_DESC" = "テキストとボタンの色のコントラストを下げ、2020年以前のYouTubeアプリインターフェースに近づけます。"; +"LOW_CONTRAST_MODE_DESC" = "テキストとボタンの色のコントラストを下げ、2020 年以前の YouTube アプリのインターフェースに近づけます。"; "LOW_CONTRAST_MODE_SELECTOR" = "低コントラストモードを選択"; -"LOW_CONTRAST_MODE_ERROR_1" = "あなたは、もはや動作しないYouTubeの廃止されたバージョンv%@を使用しています。低コントラストモードを使用するには、v17.33.2-17.38.10を使用してください。"; -"LOW_CONTRAST_MODE_ERROR_2" = "低コントラストモードはv17.33.2-v17.38.10でのみ利用可能です。\nあなたは現在、v%@を使用しています。\n回避策: これを使用したい場合は「低コントラストモードを修正」を有効にするのがおすすめです。"; -"FIX_LOWCONTRASTMODE" = "低コントラストモードを修正"; -"FIX_LOWCONTRASTMODE_DESC" = "YouTube v17.38.10に偽装することにより、低コントラストモードの機能を修正して有効化します。アプリの再起動が必要です。"; -"DISABLE_MODERN_BUTTONS" = "モダンなボタンを無効化"; -"DISABLE_MODERN_BUTTONS_DESC" = "YouTubeアプリの新しいモダン/チップボタンの一部を削除します。アプリの再起動が必要です。"; +"LOW_CONTRAST_MODE_ERROR_1" = "現在使用中のバージョン v%@ はサポートが終了している YouTube バージョンです。低コントラストモードを使用するには v17.33.2 ~ 17.38.10 を使用してください。"; +"LOW_CONTRAST_MODE_ERROR_2" = "低コントラストモードは v17.33.2 ~ v17.38.10 でのみ利用可能です。\n現在使用中のバージョンは v%@ です。\n回避策: この機能を使用したい場合は「低コントラストモードを修正」オプションを有効にすることを推奨します。"; +"CLASSIC_VIDEO_PLAYER" = "古い動画プレーヤー"; +"CLASSIC_VIDEO_PLAYER_DESC" = "v16.xx.x のクラシック動画プレーヤー機能(ピンチ操作による全画面表示を含む)を復元します。"; +"FIX_LOWCONTRASTMODE" = "低コントラストモードを修正 (非推奨)"; +"FIX_LOWCONTRASTMODE_DESC" = "YouTube v17.38.10 に偽装することにより、低コントラストモードの機能を修正して有効化します。アプリの再起動が必要です。"; +"DISABLE_MODERN_BUTTONS" = "新しいボタンを無効化"; +"DISABLE_MODERN_BUTTONS_DESC" = "YouTube アプリの新しいモダン/チップボタンの一部を削除します。アプリの再起動が必要です。"; "DISABLE_ROUNDED_CORNERS_ON_HINTS" = "ヒントの角丸を無効化"; -"DISABLE_ROUNDED_CORNERS_ON_HINTS_DESC" = "アプリのヒントに角丸を含まないようにします。アプリの再起動が必要です。"; -"DISABLE_MODERN_FLAGS" = "モダンなA/Bフラグを無効化"; -"DISABLE_MODERN_FLAGS_DESC" = "デフォルトで有効にされたモダンなフラグをすべてオフにします。アプリの再起動が必要です。"; -"YTNOMODERNUI" = "特定のUI関連オプションを有効化(YTNoModernUI)"; -"YTNOMODERNUI_DESC" = "アプリの外観や操作感をクラシックな雰囲気にすることができます。アプリの再起動が必要です。"; -"ENABLE_APP_VERSION_SPOOFER" = "アプリバージョン偽装を有効にする"; -"ENABLE_APP_VERSION_SPOOFER_DESC" = "バージョン偽装を使用し、以下から好みのバージョンを選択します。アプリの再起動が必要です。"; -"VERSION_SPOOFER_SELECTOR" = "偽装バージョンセレクター"; +"DISABLE_ROUNDED_CORNERS_ON_HINTS_DESC" = "これにより、アプリ内のヒントに丸い角が含まれなくなります。アプリの再起動が必要です。"; +"DISABLE_MODERN_FLAGS" = "新しい A/B フラグを無効化"; +"DISABLE_MODERN_FLAGS_DESC" = "これにより、デフォルトで有効になっている新しいフラグをすべてオフにします。アプリの再起動が必要です。"; +"YTNOMODERNUI" = "特定の UI 関連オプションを有効化 (YTNoModernUI)"; +"YTNOMODERNUI_DESC" = "アプリの外観や操作感を昔の雰囲気にすることができます。アプリの再起動が必要です。"; +"ENABLE_APP_VERSION_SPOOFER" = "アプリのバージョン偽装を有効化"; +"ENABLE_APP_VERSION_SPOOFER_DESC" = "バージョン偽装を使用し、以下から偽装したいバージョンを選択します。アプリの再起動が必要です。"; +"VERSION_SPOOFER_SELECTOR" = "偽装するバージョンを選択"; -"ADBLOCK_WORKAROUND_LITE" = "AdBlock回避(Lite)"; -"ADBLOCK_WORKAROUND_LITE_DESC" = "弱い広告ブロックコードを使用します。uYouの広告ブロックオプションを無効にします。"; -"ADBLOCK_WORKAROUND" = "AdBlock回避"; +"ADBLOCK_WORKAROUND_LITE" = "AdBlock 回避策 (Lite)"; +"ADBLOCK_WORKAROUND_LITE_DESC" = "弱い広告ブロックコードを使用します。uYou の広告ブロックオプションを無効にします。"; +"ADBLOCK_WORKAROUND" = "AdBlock 回避策"; "ADBLOCK_WORKAROUND_DESC" = "より強力な広告ブロックコードを使用します。"; -"FAKE_PREMIUM" = "偽のYoutubeプレミアム"; -"FAKE_PREMIUM_DESC" = "Youtubeプレミアムロゴを使用し、Youタブに偽のボタンを作成します。"; -"FAKE_PREMIUM_WARNING" = "*v%@にYou*タブは存在しないため、偽のボタンは作成されません。\nしかし、*偽のプレミアムロゴ*は引き続き機能します。"; +"FAKE_PREMIUM" = "偽の YouTube Premium"; +"FAKE_PREMIUM_DESC" = "YouTube プレミアムロゴを使用し、[マイページ] タブに偽のボタンを作成します。"; +"FAKE_PREMIUM_WARNING" = "YouTube v%@ には [マイページ] タブが存在しないため、偽の YouTube Premium ボタンは作成されません。\nただし、「偽の YouTube Premium ロゴ」は引き続き機能します。"; "FAKE_YOUR_PREMIUM_BENEFITS" = "あなたのプレミアム特典"; "FAKE_DOWNLOADS" = "ダウンロード"; -"CENTER_YOUTUBE_LOGO" = "YouTubeロゴを中央に"; -"CENTER_YOUTUBE_LOGO_DESC" = "公式YouTubeロゴを中央に配置します。アプリの再起動が必要です。"; -"HIDE_YOUTUBE_LOGO" = "YouTubeロゴを非表示に"; -"HIDE_YOUTUBE_LOGO_DESC" = "YouTubeアプリ内のYouTubeロゴを非表示にします。"; +"DISABLE_ANIMATED_YOUTUBE_LOGO" = "アニメーション YouTube ロゴを無効化"; +"CENTER_YOUTUBE_LOGO" = "YouTube のロゴを中央に表示"; +"CENTER_YOUTUBE_LOGO_DESC" = "公式の YouTube ロゴを中央に配置します。アプリの再起動が必要です。"; +"HIDE_YOUTUBE_LOGO" = "YouTube ロゴを非表示"; +"HIDE_YOUTUBE_LOGO_DESC" = "YouTube アプリ内の YouTube ロゴを非表示にします。"; "STICK_NAVIGATION_BAR" = "ナビゲーションバーを固定"; -"STICK_NAVIGATION_BAR_DESC" = "アプリ内をスクロールしてもナビゲーションバーが表示され続けます。"; -"HIDE_COMMUNITY_POSTS" = "コミュニティ投稿を非表示にする"; -"HIDE_COMMUNITY_POSTS_DESC" = "コミュニティの投稿を非表示にします。アプリの再起動が必要です。"; -"HIDE_HEADER_LINKS_UNDER_PROFILE" = "プロフィール下のヘッダーリンクを非表示にする"; +"STICK_NAVIGATION_BAR_DESC" = "アプリ内をスクロールしてもナビゲーションバーが表示されたままにします。"; +"HIDE_COMMUNITY_POSTS" = "コミュニティ投稿を非表示"; +"HIDE_COMMUNITY_POSTS_DESC" = "コミュニティ投稿を非表示にします。アプリの再起動が必要です。"; +"HIDE_HEADER_LINKS_UNDER_PROFILE" = "プロフィール下のヘッダーリンクを非表示"; "HIDE_HEADER_LINKS_UNDER_PROFILE_DESC" = "チャンネルプロフィールの下にあるヘッダーリンクを非表示にします。"; -"AUTO_HIDE_HOME_INDICATOR" = "自動でホームインジケーターを非表示に"; -"AUTO_HIDE_HOME_INDICATOR_DESC" = "アプリとのインタラクションがない時に、iOSのホームインジケーターを自動的に非表示にします。"; -"HIDE_INDICATORS" = "インジケーターを非表示に"; +"AUTO_HIDE_HOME_INDICATOR" = "自動でホームインジケーターを非表示"; +"AUTO_HIDE_HOME_INDICATOR_DESC" = "アプリを操作していない場合に、iOS のホームインジケーター(画面下部のホームバー)を自動的に非表示にします。"; +"HIDE_INDICATORS" = "インジケーターを非表示"; "HIDE_INDICATORS_DESC" = "アプリ内の現在のインジケーターをすべて非表示にします。"; "FIX_CASTING" = "キャストを修正"; -"FIX_CASTING_DESC" = "キャストを修正するために、特定のA/Bテストフラグを変更します。"; +"FIX_CASTING_DESC" = "キャストを修正するために、特定の A/B テストフラグを変更します。"; +"NEW_SETTINGS_UI" = "新しい設定 UI を使用"; +"NEW_SETTINGS_UI_DESC" = "カテゴリを備えた新しい設定 UI を有効にします。"; "DEFAULT" = "デフォルト"; "CUSTOM_COLOR" = "カスタムカラー"; diff --git a/Localizations/uYouPlus.bundle/template.lproj/Localizable.strings b/Localizations/uYouPlus.bundle/template.lproj/Localizable.strings index f26eaf0..e931839 100644 --- a/Localizations/uYouPlus.bundle/template.lproj/Localizable.strings +++ b/Localizations/uYouPlus.bundle/template.lproj/Localizable.strings @@ -75,6 +75,9 @@ https://github.com/PoomSmart/Return-YouTube-Dislikes/tree/main/layout/Library/Ap "STOCK_VOLUME_HUD" = "Use stock iOS volume HUD"; "STOCK_VOLUME_HUD_DESC" = ""; +"REPLACE_YT_DOWNLOAD_WITH_UYOU" = "Replace YouTube's download with uYou's"; +"REPLACE_YT_DOWNLOAD_WITH_UYOU_DESC" = ""; + // Video controls overlay options "VIDEO_CONTROLS_OVERLAY_OPTIONS" = "📹 Video controls overlay options"; @@ -182,6 +185,8 @@ https://github.com/PoomSmart/Return-YouTube-Dislikes/tree/main/layout/Library/Ap "ENABLE_PORTRAIT_FULLSCREEN" = "Enable Portrait Fullscreen"; "ENABLE_PORTRAIT_FULLSCREEN_DESC" = "Enables Portrait Fullscreen on the YouTube App. App restart is required."; +"FULLSCREEN_TO_THE_RIGHT" = "Fullscreen to the Right"; +"FULLSCREEN_TO_THE_RIGHT_DESC" = "FULLSCREEN_TO_THE_RIGHT_DESC" = "Force the video to always go to landscape right. 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"; @@ -269,7 +274,9 @@ https://github.com/PoomSmart/Return-YouTube-Dislikes/tree/main/layout/Library/Ap "LOW_CONTRAST_MODE_SELECTOR" = "Low Contrast Mode Selector"; "LOW_CONTRAST_MODE_ERROR_1" = "You are using v%@ which is a discontinued version of YouTube that no longer works. Please use v17.33.2-17.38.10 in order to use LowContrastMode."; "LOW_CONTRAST_MODE_ERROR_2" = "LowContrastMode is only available for app versions v17.33.2-v17.38.10. \nYou are currently using v%@. \nWorkaround: if you want to use this then I recommend enabling \"Fix LowContrastMode\" Option."; -"FIX_LOWCONTRASTMODE" = "Fix LowContrastMode"; +"CLASSIC_VIDEO_PLAYER" = "Classic Video Player"; +"CLASSIC_VIDEO_PLAYER_DESC" = "Restores the classic video player features from v16.xx.x, including pinch-to-fullscreen."; +"FIX_LOWCONTRASTMODE" = "Fix LowContrastMode (Deprecated)"; "FIX_LOWCONTRASTMODE_DESC" = "This will fix and enable the LowContrastMode functionality by Spoofing to YouTube v17.38.10. App restart is required."; "DISABLE_MODERN_BUTTONS" = "Disable Modern Buttons"; "DISABLE_MODERN_BUTTONS_DESC" = "This will remove the some of the new Modern/Chip Buttons in the YouTube App. App restart is required."; @@ -288,7 +295,7 @@ https://github.com/PoomSmart/Return-YouTube-Dislikes/tree/main/layout/Library/Ap "ADBLOCK_WORKAROUND" = "AdBlock Workaround"; "ADBLOCK_WORKAROUND_DESC" = "Uses stronger adblocking code."; "FAKE_PREMIUM" = "Fake Premium"; -"FAKE_PREMIUM_DESC" = "Uses Premium logo and creates fake buttons in the You tab."; +"FAKE_PREMIUM_DESC" = "Uses Premium logo and creates fake buttons in the You tab. Will disable animated YouTube logo."; "FAKE_PREMIUM_WARNING" = "The *You* Tab doesn't exist in v%@, fake buttons will not be created.\nBut the *Fake Premium Logo* will still work."; "FAKE_YOUR_PREMIUM_BENEFITS" = "Your Premium benefits"; "FAKE_DOWNLOADS" = "Downloads"; @@ -309,6 +316,8 @@ https://github.com/PoomSmart/Return-YouTube-Dislikes/tree/main/layout/Library/Ap "HIDE_INDICATORS_DESC" = "Hides all Indicators that are currently in the App."; "FIX_CASTING" = "Fix Casting"; "FIX_CASTING_DESC" = "Changes certain A/B flags to fix casting."; +"NEW_SETTINGS_UI" = "Use New Settings UI"; +"NEW_SETTINGS_UI_DESC" = "Enables the new Settings UI with tweak categories."; "DEFAULT" = "Default"; "CUSTOM_COLOR" = "Custom Color"; diff --git a/Localizations/uYouPlus.bundle/th.lproj/Localizable.strings b/Localizations/uYouPlus.bundle/th.lproj/Localizable.strings index 50c3bea..090e395 100644 --- a/Localizations/uYouPlus.bundle/th.lproj/Localizable.strings +++ b/Localizations/uYouPlus.bundle/th.lproj/Localizable.strings @@ -1,302 +1,306 @@ -// About +// เกี่ยวกับ "ABOUT" = "เกี่ยวกับ"; -"VERSION" = "เวอร์ชัน uYouPlus คือ: %@"; -"VERSION_CHECK" = "ดูเวอร์ชันล่าสุด"; +"VERSION" = "เวอร์ชัน"; +"VERSION_CHECK" = "แตะเพื่อตรวจสอบการอัปเดต!"; "REPORT_AN_ISSUE" = "รายงานปัญหา"; "ADD_TITLE" = "เพิ่มชื่อเรื่องของคุณที่นี่..."; "QUIT_YOUTUBE" = "ออกจาก YouTube"; +"RESTART_YOUTUBE" = "รีสตาร์ท YouTube เพื่อให้การเปลี่ยนแปลงมีผล"; -"RESTART_YOUTUBE" = "รีสตาร์ท YouTube เพื่อใช้การเปลี่ยนแปลง"; +// ลักษณะของแอป +"APP_THEME" = "🎨 ลักษณะของแอป"; +"THEME_OPTIONS" = "ตัวเลือกธีม"; -//รูปลักษณ์ของแอป -"APP_THEME" = "ลักษณะที่ปรากฏของแอป"; -"THEME_OPTIONS" = "ตัวเลือกลักษณะธีม"; -"DARK_THEME" = "Dark theme"; +"DARK_THEME" = "ธีมมืด"; "DEFAULT_THEME" = "ค่าเริ่มต้น"; -"DEFAULT_THEME_DESC" = "YouTube มีค่าเริ่มต้นเป็นโหมดมืด ต้องรีสตาร์ทแอป"; +"DEFAULT_THEME_DESC" = ""; -"OLD_DARK_THEME" = "โหมดมืดแบบดั้งเดิม"; -"OLD_DARK_THEME_DESC" = "โหมดมืดของ YouTube (รูปแบบสีเทา) ต้องรีสตาร์ทแอป"; +"OLD_DARK_THEME" = "เทาอ่อน"; +"OLD_DARK_THEME_DESC" = "ธีมมืดเก่าของ YouTube"; -"OLED_DARK_THEME" = "โหมดมืด OLED (ทดลอง)"; -"OLED_DARK_THEME_2" = "โหมดมืด OLED"; -"OLED_DARK_THEME_DESC" = "ทำงานไม่ถูกต้องในบางกรณี การเปลี่ยนตัวเลือกนี้จำเป็นต้องรีสตาร์ทแอปพลิเคชั่น"; +"OLED_DARK_THEME" = "OLED (ทดลอง)"; +"OLED_DARK_THEME_2" = "OLED"; +"OLED_DARK_THEME_DESC" = "ธีมมืดสีดำสนิท"; "OLED_KEYBOARD" = "แป้นพิมพ์ OLED (ทดลอง)"; -"OLED_KEYBOARD_DESC" = "อาจทำงานไม่ถูกต้องในบางกรณี จำเป็นต้องรีสตาร์ทแอปพลิเคชัน"; +"OLED_KEYBOARD_DESC" = ""; -// Video player options -"VIDEO_PLAYER_OPTIONS" = "⏯️ ตัวเลือกผู้เล่น"; +// ตัวเลือกของเครื่องเล่นวิดีโอ +"VIDEO_PLAYER_OPTIONS" = "⏯️ ตัวเลือกของเครื่องเล่นวิดีโอ"; -"SLIDE_TO_SEEK" = "เปิดใช้งานสไลด์เพื่อค้นหา"; -"SLIDE_TO_SEEK_DESC" = "นำสไลด์กลับมาเพื่อค้นหาท่าทาง"; +"SLIDE_TO_SEEK" = "เปิดใช้งาน Slide to seek"; +"SLIDE_TO_SEEK_DESC" = "นำท่าทาง Slide to seek กลับมา"; -"DISABLE_DOUBLE_TAP_TO_SEEK" = "ปิดใช้งานการแตะสองครั้งเพื่อค้นหา"; +"DISABLE_DOUBLE_TAP_TO_SEEK" = "ปิดใช้งาน double tap to seek"; "DISABLE_DOUBLE_TAP_TO_SEEK_DESC" = ""; -"SNAP_TO_CHAPTER" = "ปิดใช้งานการข้ามบท"; -"SNAP_TO_CHAPTER_DESC" = "ปิดใช้งานการข้ามไปยังบทอัตโนมัติเมื่อวิดีโอส่งต่ออย่างรวดเร็ว ต้องรีสตาร์ทแอปพลิเคชัน"; +"SNAP_TO_CHAPTER" = "ปิดใช้งาน snap to chapter"; +"SNAP_TO_CHAPTER_DESC" = "ปิดการจับยึดอัตโนมัติที่บทเมื่อเลื่อนผ่านวิดีโอ"; -"PINCH_TO_ZOOM" = "ปิดใช้งานการซูมด้วยท่าทาง"; -"PINCH_TO_ZOOM_DESC" = "ต้องรีสตาร์ทแอปพลิเคชัน"; +"PINCH_TO_ZOOM" = "ปิดใช้งาน pinch to zoom"; +"PINCH_TO_ZOOM_DESC" = ""; -"YT_MINIPLAYER" = "เปิดใช้งานเครื่องเล่นขนาดเล็กสำหรับวิดีโอ YouTube ทั้งหมด"; -"YT_MINIPLAYER_DESC" = "ตัวอย่างเช่น ภาพยนตร์สำหรับเด็ก"; +"YT_MINIPLAYER" = "เปิดใช้งาน miniplayer สำหรับทุกวิดีโอ"; +"YT_MINIPLAYER_DESC" = "ไม่สามารถเปิดใช้งาน miniplayer สำหรับบางวิดีโอ (เช่น วิดีโอสำหรับเด็ก) ตัวเลือกนี้จะข้ามข้อจำกัดนี้"; -"HIDE_REMIX_BUTTON" = "Hides Remix button"; +"HIDE_REMIX_BUTTON" = "ซ่อนปุ่ม Remix"; "HIDE_REMIX_BUTTON_DESC" = ""; -"HIDE_CLIP_BUTTON" = "Hide Clip button"; +"HIDE_CLIP_BUTTON" = "ซ่อนปุ่ม Clip"; "HIDE_CLIP_BUTTON_DESC" = ""; -"HIDE_DOWNLOAD_BUTTON" = "Hide Download button"; +"HIDE_DOWNLOAD_BUTTON" = "ซ่อนปุ่มดาวน์โหลด"; "HIDE_DOWNLOAD_BUTTON_DESC" = ""; -"STOCK_VOLUME_HUD" = "ใช้ HUD โวลุ่ม iOS ในตัว"; +"STOCK_VOLUME_HUD" = "ใช้ HUD ระดับเสียง iOS ต้นฉบับ"; "STOCK_VOLUME_HUD_DESC" = ""; -// Video controls overlay options -"VIDEO_CONTROLS_OVERLAY_OPTIONS" = "📹 ตัวเลือกการควบคุมการซ้อนทับวิดีโอ"; +"REPLACE_YT_DOWNLOAD_WITH_UYOU" = "แทนที่การดาวน์โหลดของ YouTube ด้วย uYou"; +"REPLACE_YT_DOWNLOAD_WITH_UYOU_DESC" = ""; -"HIDE_AUTOPLAY_SWITCH" = "ซ่อนสวิตช์เล่นอัตโนมัติ"; -"HIDE_AUTOPLAY_SWITCH_DESC" = "ซ่อนสวิตช์เล่นอัตโนมัติในตัวควบคุมภาพยนตร์"; +// ตัวเลือกของวิดีโอควบคุมบนหน้าจอ +"VIDEO_CONTROLS_OVERLAY_OPTIONS" = "📹 ตัวเลือกการควบคุมวิดีโอบนหน้าจอ"; -"HIDE_YTMUSIC_BUTTON" = "ซ่อนปุ่มเพลง YouTube"; -"HIDE_YTMUSIC_BUTTON_DESC" = "ซ่อนปุ่ม Youtube Music ที่ปรากฏพร้อมกับพรีเมียม"; +"HIDE_AUTOPLAY_SWITCH" = "ซ่อนสวิตช์ autoplay"; +"HIDE_AUTOPLAY_SWITCH_DESC" = ""; -"HIDE_SUBTITLES_BUTTON" = "ปุ่มซ่อนคำบรรยาย"; -"HIDE_SUBTITLES_BUTTON_DESC" = "ซ่อนปุ่มคำบรรยายในเลเยอร์ควบคุมวิดีโอ"; +"HIDE_SUBTITLES_BUTTON" = "ซ่อนปุ่มคำบรรยาย"; +"HIDE_SUBTITLES_BUTTON_DESC" = ""; "HIDE_HUD_MESSAGES" = "ซ่อนข้อความ HUD"; -"HIDE_HUD_MESSAGES_DESC" = "ตัวอย่างเช่น: คำบรรยาย CC, เปิด/ปิด, เปิดการวนซ้ำวิดีโอ ฯลฯ..."; +"HIDE_HUD_MESSAGES_DESC" = "ซ่อนข้อความ snackbars ที่แสดงในบางการกระทำ (เช่น CC เปิด/ปิด)"; -"HIDE_PAID_PROMOTION_CARDS" = "ซ่อนแบนเนอร์ที่ต้องชำระเงิน (YTNoPaidPromo)"; -"HIDE_PAID_PROMOTION_CARDS_DESC" = "ซ่อนแบนเนอร์ "รวมการโปรโมตแบบชำระเงิน" ในบางวิดีโอ "; +"HIDE_PAID_PROMOTION_CARDS" = "ซ่อนแบนเนอร์โปรโมชันที่จ่ายเงิน"; +"HIDE_PAID_PROMOTION_CARDS_DESC" = ""; -"HIDE_CHANNEL_WATERMARK" = "ซ่อนลายน้ำของช่อง"; -"HIDE_CHANNEL_WATERMARK_DESC" = "ซ่อนลายน้ำช่องของการควบคุมโฮเวอร์ ต้องรีสตาร์ทแอปพลิเคชัน"; +"HIDE_CHANNEL_WATERMARK" = "ซ่อนวอเตอร์มาร์คช่อง"; +"HIDE_CHANNEL_WATERMARK_DESC" = ""; -"HIDE_PREVIOUS_AND_NEXT_BUTTON" = "ซ่อนปุ่มก่อนหน้าและปุ่มถัดไป"; -"HIDE_PREVIOUS_AND_NEXT_BUTTON_DESC" = "ซ่อนปุ่มก่อนหน้าและถัดไปในเลเยอร์ควบคุมภาพยนตร์"; +"HIDE_PREVIOUS_AND_NEXT_BUTTON" = "ซ่อนปุ่มก่อนหน้าและถัดไป"; +"HIDE_PREVIOUS_AND_NEXT_BUTTON_DESC" = "ซ่อนในทุกวิดีโอรวมถึงเพลย์ลิสต์"; -"REPLACE_PREVIOUS_NEXT_BUTTON" = "แทนที่ปุ่มก่อนหน้า/ถัดไป"; -"REPLACE_PREVIOUS_NEXT_BUTTON_DESC" = "แทนที่ปุ่มก่อนหน้า/ถัดไปบนอินเทอร์เฟซการควบคุมเครื่องเล่นวิดีโอด้วยปุ่มกรอไปข้างหน้า/ย้อนกลับ รีสตาร์ทแอปพลิเคชัน"; +"REPLACE_PREVIOUS_NEXT_BUTTON" = "ใช้ปุ่มข้ามไปข้างหน้าและย้อนกลับ"; +"REPLACE_PREVIOUS_NEXT_BUTTON_DESC" = "แทนที่ปุ่มก่อนหน้าและถัดไปด้วยปุ่มข้ามไปข้างหน้าและย้อนกลับ"; -"RED_PROGRESS_BAR" = "แถบความคืบหน้าสีแดง"; -"RED_PROGRESS_BAR_DESC" = "กู้คืนแถบความคืบหน้าสีแดง ต้องรีสตาร์ทแอปพลิเคชัน"; +"RED_PROGRESS_BAR" = "แถบความคืบหน้าแดง"; +"RED_PROGRESS_BAR_DESC" = ""; -"HIDE_HOVER_CARD" = "ซ่อนการ์ดโฮเวอร์ตอนท้าย (YTNoHoverCards)"; -"HIDE_HOVER_CARD_DESC" = "ซ่อนตอนท้ายของผู้สร้างที่ตอนท้ายของวิดีโอ"; +"HIDE_HOVER_CARD" = "YTNoHoverCards"; +"HIDE_HOVER_CARD_DESC" = "ซ่อนหน้าจอสุดท้ายของวิดีโอ"; -"HIDE_RIGHT_PANEL" = "ซ่อนแผงด้านขวาแบบเต็มหน้าจอ"; -"HIDE_RIGHT_PANEL_DESC" = "แอปพลิเคชันจำเป็นต้องรีสตาร์ท"; +"HIDE_RIGHT_PANEL" = "ซ่อนแผงการมีส่วนร่วมในโหมดเต็มหน้าจอ"; +"HIDE_RIGHT_PANEL_DESC" = "ซ่อนแผงด้านขวา (เช่น ความคิดเห็น, แชทสด, ฯลฯ) ในโหมดแนวนอน"; -// Shorts ควบคุมตัวเลือกการซ้อนทับ -"SHORTS_CONTROLS_OVERLAY_OPTIONS" = "💥 ตัวเลือกการควบคุมการวางเมาส์เหนือกางเกงขาสั้น"; +// ตัวเลือกควบคุมของ Shorts +"SHORTS_CONTROLS_OVERLAY_OPTIONS" = "💥 ตัวเลือกควบคุมของ Shorts"; -"HIDE_SUPER_THANKS" = "ซ่อนแบนเนอร์ 'ขอบคุณมากสำหรับการซื้อ'"; -"HIDE_SUPER_THANKS_DESC" = "ซ่อนแบนเนอร์ 'ขอบคุณสำหรับการซื้อ' ใน Shorts"; +"HIDE_SUPER_THANKS" = "ซ่อนแบนเนอร์ 'ซื้อ Super Thanks'"; +"HIDE_SUPER_THANKS_DESC" = ""; -"HIDE_SUBCRIPTIONS" = "ซ่อนปุ่มสมัครสมาชิก"; -"HIDE_SUBCRIPTIONS_DESC" = "ซ่อนปุ่มสมัครสมาชิกที่ปรากฏขึ้นเมื่อหยุดชั่วคราว"; +"HIDE_SUBCRIPTIONS" = "ซ่อนปุ่มการสมัครสมาชิก"; +"HIDE_SUBCRIPTIONS_DESC" = ""; -"DISABLE_RESUME_TO_SHORTS" = "ปิดใช้งานการเล่นสั้นต่อ"; -"DISABLE_RESUME_TO_SHORTS_DESC" = "หากคุณปิดโปรแกรมขณะรับชมวิดีโอสั้น วิดีโอสั้นจะไม่เล่นโดยอัตโนมัติอีกต่อไปในครั้งถัดไปที่คุณเปิดโปรแกรม"; +"DISABLE_RESUME_TO_SHORTS" = "ปิดใช้งานการกลับไปยัง Shorts"; +"DISABLE_RESUME_TO_SHORTS_DESC" = "หากคุณปิดแอป YouTube ขณะดู Shorts ตัวเลือกนี้จะป้องกันไม่ให้แอปเริ่มเล่นต่อในครั้งถัดไป"; -//เบ็ดเตล็ด -"เบ็ดเตล็ด" = "🔎เบ็ดเตล็ด"; +// อื่นๆ +"MISCELLANEOUS" = "🔎 อื่นๆ"; -"HIDE_UYOU" = "ซ่อนแท็บคุณ"; +"HIDE_UYOU" = "ซ่อนแท็บ uYou"; "HIDE_ISPONSORBLOCK" = "ซ่อนปุ่ม iSponsorBlock"; -"CAST_CONFIRM" = "การยืนยันก่อนส่งมอบ (YTCastConfirm)"; -"CAST_CONFIRM_DESC" = "แสดงข้อความยืนยันก่อนให้บริการเพื่อป้องกันไม่ให้สมาชิกในครอบครัวดำเนินการดังกล่าว"; -"การคัดเลือกนักแสดง" = "การคัดเลือกนักแสดง"; -"MSG_ARE_YOU_SURE" = "เริ่มการจัดส่ง"; -"MSG_YES" = "ตกลง"; -"MSG_CANCEL" = "ยกเลิก"; +"CAST_CONFIRM" = "YTCastConfirm"; +"CAST_CONFIRM_DESC" = "แสดงการแจ้งเตือนยืนยันก่อนการแคสต์"; +"CASTING" = "กำลังแคสต์"; +"MSG_ARE_YOU_SURE" = "คุณแน่ใจหรือไม่ว่าต้องการเริ่มการแคสต์?"; +"MSG_YES" = "ใช่"; "MSG_CANCEL" = "ยกเลิก"; "DISABLE_HINTS" = "ปิดใช้งานคำแนะนำ"; -"DISABLE_HINTS_DESC" = "ปิดใช้งานคำแนะนำคุณลักษณะที่แสดงเมื่อติดตั้งแอปพลิเคชันครั้งแรก"; +"DISABLE_HINTS_DESC" = "ปิดคำแนะนำฟีเจอร์ YouTube ที่แสดงเมื่อแอปเพิ่งติดตั้ง"; -"ENABLE_YT_STARTUP_ANIMATION" = "เปิดใช้งานภาพเคลื่อนไหวต้อนรับของ YouTube"; +"ENABLE_YT_STARTUP_ANIMATION" = "เปิดใช้งานแอนิเมชันเริ่มต้นของ YouTube"; "ENABLE_YT_STARTUP_ANIMATION_DESC" = ""; -"HIDE_CHIP_BAR" = "ซ่อนฟิลด์ด้านบน"; -"HIDE_CHIP_BAR_DESC" = "ซ่อนคอลัมน์ด้านบนของหน้าจอหลัก (หัวข้อ เพลง เกม...) และการอัปเดตสมาชิก (วิดีโอทั้งหมด ดูต่อ...) จำเป็นต้องรีสตาร์ทแอปพลิเคชัน"; +"HIDE_CHIP_BAR" = "ซ่อนแถบด้านบน"; +"HIDE_CHIP_BAR_DESC" = "ซ่อนแถบด้านบนในหน้าหลักและฟีดการสมัครสมาชิก (เช่น ทุกวิดีโอ, ต่อเนื่องการรับชม, ฯลฯ)"; -"HIDE_PLAY_NEXT_IN_QUEUE" = "ซ่อน \"เล่นถัดไปในคิว\""; +"HIDE_PLAY_NEXT_IN_QUEUE" = "ซ่อน 'เล่นถัดไปในคิว'"; "HIDE_PLAY_NEXT_IN_QUEUE_DESC" = ""; -"IPHONE_LAYOUT" = "เค้าโครง iPhone"; -"IPHONE_LAYOUT_DESC" = "สลับไปใช้รูปแบบ iPhone ต้องรีสตาร์ทแอป"; +"IPHONE_LAYOUT" = "บังคับรูปแบบ iPhone"; +"IPHONE_LAYOUT_DESC" = ""; -"NEW_MINIPLAYER_STYLE" = "เครื่องเล่นขนาดเล็ก (BigYTMiniPlayer)"; -"NEW_MINIPLAYER_STYLE_DESC" = "ต้องรีสตาร์ทแอปพลิเคชัน"; +"NEW_MINIPLAYER_STYLE" = "BigYTMiniPlayer"; +"NEW_MINIPLAYER_STYLE_DESC" = "สไตล์แถบ mini player ใหม่"; -"YT_RE_EXPLORE" = "แทนที่การแบ่งหน้า Shorts ด้วยการแบ่งหน้าแบบสำรวจ (YTReExplore)"; -"YT_RE_EXPLORE_DESC" = "แอปพลิเคชันจำเป็นต้องรีสตาร์ท"; +"YT_RE_EXPLORE" = "YTReExplore"; +"YT_RE_EXPLORE_DESC" = "แทนที่แท็บ Shorts ด้วยแท็บ Explore"; "ENABLE_FLEX" = "เปิดใช้งาน FLEX"; -"ENABLE_FLEX_DESC" = "เปิดใช้งาน FLEX สำหรับการดีบัก (ไม่แนะนำ) อย่าใช้หากคุณไม่รู้ว่ากำลังทำอะไรอยู่"; +"ENABLE_FLEX_DESC" = "เปิดใช้งาน FLEX สำหรับการดีบัก"; -"FIX_GOOGLE_SIGNIN" = "แก้ไขปัญหาการเข้าสู่ระบบบัญชี Google (ใช้ได้สำหรับผู้ใช้ TrollStore เท่านั้น)"; -"FIX_GOOGLE_SIGNIN_DESC" = "ใช้ได้เฉพาะเมื่อใช้ TrollStore เพื่อติดตั้งแอปพลิเคชันนี้: หลังจากเปิดใช้งานการตั้งค่านี้ คุณสามารถเข้าสู่ระบบบัญชี Google ของคุณได้ตามปกติ และคุณต้องรีสตาร์ทแอปพลิเคชัน"; +"FIX_GOOGLE_SIGNIN" = "แก้ไขการเข้าสู่ระบบ Google (เฉพาะผู้ใช้ TrollStore)"; +"FIX_GOOGLE_SIGNIN_DESC" = "เปิดใช้งานตัวเลือกนี้เมื่อไม่สามารถเข้าสู่ระบบด้วยบัญชี Google และแอปติดตั้งผ่าน TrollStore หากสามารถเข้าสู่ระบบได้ปกติให้ปิดใช้งาน ฟังก์ชันนี้ต้องรีสตาร์ทแอป."; // 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" = "สนับสนุนผู้พัฒนา"; +"COPY_SETTINGS" = "คัดลอกการตั้งค่า"; +"COPY_SETTINGS_DESC" = "คัดลอกการตั้งค่าทั้งหมดในปัจจุบันไปยังคลิปบอร์ด"; +"PASTE_SETTINGS" = "วางการตั้งค่า"; +"PASTE_SETTINGS_DESC" = "วางการตั้งค่าจากคลิปบอร์ดและใช้งาน"; +"EXPORT_SETTINGS" = "ส่งออกการตั้งค่า"; +"EXPORT_SETTINGS_DESC" = "ส่งออกการตั้งค่าทั้งหมดไปยังไฟล์ .txt"; +"IMPORT_SETTINGS" = "นำเข้าการตั้งค่า"; +"IMPORT_SETTINGS_DESC" = "กดเพื่อนำเข้าการตั้งค่า (.txt)"; +"REPLACE_COPY_AND_PASTE_BUTTONS" = "แทนที่ปุ่ม 'คัดลอกการตั้งค่า' และ 'วางการตั้งค่า'"; +"REPLACE_COPY_AND_PASTE_BUTTONS_DESC" = "แทนที่ปุ่มด้วย 'ส่งออกการตั้งค่า' และ 'นำเข้าการตั้งค่า'"; -"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" = "เมนูสำคัญของ uYouEnhanced"; +"CHANGE_APP_ICON" = "เปลี่ยนไอคอนแอป"; +"CLEAR_NOTIFICATIONS" = "ล้างการแจ้งเตือน"; +"CLEAR_NOTIFICATIONS_DESC" = "บังคับลบการแจ้งเตือนทั้งหมด (แนะนำเมื่อแอปถูกติดตั้งจากแหล่งที่ไม่ใช่ Play Store)"; -"CUSTOM_DARK_THEME" = "Custom Dark Theme"; +"CUSTOM_DARK_THEME" = "ธีมมืดที่กำหนดเอง"; -"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" = "เปิดโหมดเต็มหน้าจอแนวตั้ง"; +"ENABLE_PORTRAIT_FULLSCREEN_DESC" = "เปิดโหมดเต็มหน้าจอแนวตั้งในแอป YouTube ต้องรีสตาร์ทแอป"; +"FULLSCREEN_TO_THE_RIGHT" = "เต็มหน้าจอไปทางขวา"; +"FULLSCREEN_TO_THE_RIGHT_DESC" = "บังคับให้วิดีโอแสดงผลเต็มหน้าจอในทิศทางแนวนอนขวา ต้องรีสตาร์ทแอป"; +"ENABLE_TAP_TO_SEEK" = "เปิดใช้งานแตะเพื่อเลื่อน"; +"ENABLE_TAP_TO_SEEK_DESC" = "กระโดดไปยังตำแหน่งในวิดีโอโดยการแตะที่แถบเลื่อน"; +"DISABLE_PULL_TO_FULLSCREEN_GESTURE" = "ปิดการใช้งานการลากเพื่อเข้าสู่โหมดเต็มหน้าจอ"; +"DISABLE_PULL_TO_FULLSCREEN_GESTURE_DESC" = "ปิดการใช้งานการลากเพื่อเข้าสู่โหมดเต็มหน้าจอในแนวตั้ง ใช้กับวิดีโอที่เป็นแนวนอนเท่านั้น"; +"DISABLE_DOUBLE_TAP_TO_SKIP_CHAPTER" = "ปิดการใช้งานการแตะสองครั้งเพื่อข้ามตอน"; +"DISABLE_DOUBLE_TAP_TO_SKIP_CHAPTER_DESC" = "ปิดการใช้งานท่าทางการแตะสองครั้งด้วยนิ้วสองเพื่อข้ามตอนวิดีโอ"; +"ALWAYS_USE_REMAINING_TIME" = "ใช้เวลาที่เหลือเสมอ"; +"ALWAYS_USE_REMAINING_TIME_DESC" = "เปลี่ยนค่าเริ่มต้นเพื่อแสดงเวลาที่เหลือในแถบเครื่องเล่น"; +"DISABLE_TOGGLE_TIME_REMAINING" = "ปิดการใช้งานสลับเวลาที่เหลือ"; +"DISABLE_TOGGLE_TIME_REMAINING_DESC" = "ปิดการใช้งานการเปลี่ยนเวลาแสดงเวลาที่ผ่านมาเป็นเวลาที่เหลือ ใช้ร่วมกับการตั้งค่าอื่นๆ เพื่อแสดงเวลาที่เหลือตลอด"; -"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" = "เปิดใช้งานปุ่มแชร์"; +"ENABLE_SHARE_BUTTON_DESC" = "เปิดใช้งานปุ่มแชร์ในแถบควบคุมวิดีโอ"; +"ENABLE_SAVE_TO_PLAYLIST_BUTTON" = "เปิดใช้งานปุ่มบันทึกลงในเพลย์ลิสต์"; +"ENABLE_SAVE_TO_PLAYLIST_BUTTON_DESC" = "เปิดใช้งานปุ่มบันทึกลงในเพลย์ลิสต์ในแถบควบคุมวิดีโอ"; +"HIDE_YTMUSIC_BUTTON" = "ซ่อนปุ่ม YouTube Music"; +"HIDE_YTMUSIC_BUTTON_DESC" = "ซ่อนปุ่ม YouTube Music ที่แสดงเมื่อมีบัญชี Premium"; +"HIDE_VIDEO_TITLE_IN_FULLSCREEN" = "ซ่อนชื่อวิดีโอในโหมดเต็มหน้าจอ"; +"HIDE_VIDEO_TITLE_IN_FULLSCREEN_DESC" = "ซ่อนชื่อวิดีโอและฟังก์ชันที่มุมซ้ายบนของผู้เล่นวิดีโอเต็มหน้าจอ"; +"HIDE_COLLAPSE_BUTTON" = "ซ่อนปุ่มย่อ"; +"HIDE_COLLAPSE_BUTTON_DESC" = "ซ่อนปุ่มลูกศรย่อที่แสดงที่มุมซ้ายบนของผู้เล่นวิดีโอ"; +"HIDE_FULLSCREEN_BUTTON" = "ซ่อนปุ่มเต็มหน้าจอ"; +"HIDE_FULLSCREEN_BUTTON_DESC" = "ซ่อนปุ่มเต็มหน้าจอที่แสดงที่มุมขวาล่างของผู้เล่นวิดีโอ"; +"HIDE_SHADOW_OVERLAY_BUTTONS" = "ซ่อนปุ่ม Overlay เงา"; +"HIDE_SHADOW_OVERLAY_BUTTONS_DESC" = "ซ่อนปุ่ม Overlay เงาในปุ่มเล่น/หยุดเล่น ปุ่มย้อนกลับ ปุ่มถัดไป ปุ่มข้างหน้า และปุ่มย้อน"; +"HIDE_FULLSCREEN_ACTION_BUTTONS" = "ซ่อนปุ่มการกระทำในโหมดเต็มหน้าจอ"; +"HIDE_FULLSCREEN_ACTION_BUTTONS_DESC" = "ซ่อนปุ่มที่อยู่ด้านล่างของหน้าจอเมื่ออยู่ในโหมดแนวนอน"; +"HIDE_SUGGESTED_VIDEO" = "ซ่อนวิดีโอที่แนะนำ"; +"HIDE_SUGGESTED_VIDEO_DESC" = "ลบหน้าต่างป๊อปอัพวิดีโอที่แนะนำเมื่อวิดีโอเล่นจบ โปรดทราบว่าการตั้งค่านี้จะทำให้ฟังก์ชันการเล่นอัตโนมัติไม่ทำงาน"; +"HIDE_HEATWAVES_BAR" = "ซ่อนแถบ Heatwaves"; +"HIDE_HEATWAVES_BAR_DESC" = "ซ่อนแถบ Heatwaves ที่แสดงในแถบความคืบหน้าของผู้เล่นวิดีโอโดยเริ่มต้น ต้องรีสตาร์ทแอป"; +"HIDE_DOUBLE_TAP_TO_SEEK_OVERLAY" = "ซ่อนป๊อปอัพการแตะสองครั้งเพื่อเลื่อน"; +"HIDE_DOUBLE_TAP_TO_SEEK_OVERLAY_DESC" = "ซ่อนการแสดงผลอนิเมชั่นการแตะสองครั้งเพื่อเลื่อนในผู้เล่นวิดีโอ ต้องรีสตาร์ทแอป"; +"HIDE_DARK_OVERLAY_BACKGROUND" = "ซ่อนพื้นหลัง Overlay มืด"; +"HIDE_DARK_OVERLAY_BACKGROUND_DESC" = "ซ่อนพื้นหลัง Overlay มืดในผู้เล่นวิดีโอ ต้องรีสตาร์ทแอป"; +"HIDE_AMBIENT_MODE_IN_FULLSCREEN" = "ซ่อนโหมด Ambient ในโหมดเต็มหน้าจอ"; +"HIDE_AMBIENT_MODE_IN_FULLSCREEN_DESC" = "ซ่อนและป้องกันไม่ให้ใช้โหมด Ambient ในผู้เล่นวิดีโอเมื่ออยู่ในโหมดเต็มหน้าจอ ต้องรีสตาร์ทแอป"; +"HIDE_SUGGESTED_VIDEOS_IN_FULLSCREEN" = "ซ่อนวิดีโอที่แนะนำในโหมดเต็มหน้าจอ"; +"HIDE_SUGGESTED_VIDEOS_IN_FULLSCREEN_DESC" = "ซ่อนวิดีโอที่แนะนำเมื่ออยู่ในผู้เล่นวิดีโอเต็มหน้าจอ ต้องรีสตาร์ทแอป"; +"HIDE_ALL_VIDEOS_UNDER_PLAYER" = "ซ่อนวิดีโอทั้งหมดใต้ผู้เล่น"; +"HIDE_ALL_VIDEOS_UNDER_PLAYER_DESC" = "ลบวิดีโอทั้งหมดที่แสดงใต้ผู้เล่น ขึ้นอยู่กับทิศทางการหมุนของอุปกรณ์"; -"SHORTS_QUALITY_PICKER" = "Shorts Quality Picker"; -"SHORTS_QUALITY_PICKER_DESC" = "Enables the YouTube Shorts Quality Picker"; +"SHORTS_QUALITY_PICKER" = "ตัวเลือกคุณภาพ Shorts"; +"SHORTS_QUALITY_PICKER_DESC" = "เปิดใช้งานตัวเลือกคุณภาพสำหรับ YouTube Shorts"; -"VIDEO_PLAYER_BUTTON_OPTIONS" = "Video Player Button Options"; +"VIDEO_PLAYER_BUTTON_OPTIONS" = "ตัวเลือกปุ่มผู้เล่นวิดีโอ"; -"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" = "ปุ่มสมัครสีแดง"; +"RED_SUBSCRIBE_BUTTON_DESC" = "คืนค่าปุ่มสมัครสมาชิกให้เป็นสีแดง"; +"HIDE_BUTTON_CONTAINERS_UNDER_PLAYER" = "ซ่อนภาชนะปุ่มใต้ผู้เล่น"; +"HIDE_BUTTON_CONTAINERS_UNDER_PLAYER_DESC" = "ซ่อนภาชนะปุ่มใต้ผู้เล่นวิดีโอ"; +"HIDE_CONNECT_BUTTON" = "ซ่อนปุ่มเชื่อมต่อใต้ผู้เล่น"; +"HIDE_CONNECT_BUTTON_DESC" = "ซ่อนปุ่มเชื่อมต่อใต้ผู้เล่นวิดีโอ"; +"HIDE_SHARE_BUTTON" = "ซ่อนปุ่มแชร์ใต้ผู้เล่น"; +"HIDE_SHARE_BUTTON_DESC" = "ซ่อนปุ่มแชร์ใต้ผู้เล่นวิดีโอ"; +"HIDE_THANKS_BUTTON" = "ซ่อนปุ่มขอบคุณใต้ผู้เล่น"; +"HIDE_THANKS_BUTTON_DESC" = "ซ่อนปุ่มขอบคุณใต้ผู้เล่นวิดีโอ"; +"HIDE_SAVE_BUTTON" = "ซ่อนปุ่มบันทึกใต้ผู้เล่น"; +"HIDE_SAVE_BUTTON_DESC" = "ซ่อนปุ่มบันทึกใต้ผู้เล่นวิดีโอ"; +"HIDE_REPORT_BUTTON" = "ซ่อนปุ่มรายงานใต้ผู้เล่น"; +"HIDE_REPORT_BUTTON_DESC" = "ซ่อนปุ่มรายงานใต้ผู้เล่นวิดีโอ"; +"HIDE_COMMENT_PREVIEWS_UNDER_PLAYER" = "ซ่อนตัวอย่างคอมเมนต์ใต้ผู้เล่น"; +"HIDE_COMMENT_PREVIEWS_UNDER_PLAYER_DESC" = "ซ่อนตัวอย่างคอมเมนต์ใต้ผู้เล่นวิดีโอ"; +"HIDE_COMMENT_SECTION_BUTTON" = "ซ่อนปุ่มส่วนคอมเมนต์ใต้ผู้เล่น"; +"HIDE_COMMENT_SECTION_BUTTON_DESC" = "ซ่อนส่วนคอมเมนต์ใต้ผู้เล่นวิดีโอ"; -"APP_SETTINGS_OVERLAY_OPTIONS" = "App Settings Overlay Options"; +"APP_SETTINGS_OVERLAY_OPTIONS" = "ตัวเลือกการตั้งค่าการทับซ้อนของแอป"; -"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" = "ซ่อนส่วน บัญชี"; +"HIDE_AUTOPLAY_SECTION" = "ซ่อนส่วน เล่นอัตโนมัติ"; +"HIDE_TRY_NEW_FEATURES_SECTION" = "ซ่อนส่วน ลองฟีเจอร์ใหม่"; +"HIDE_VIDEO_QUALITY_PREFERENCES_SECTION" = "ซ่อนส่วน การตั้งค่าคุณภาพวิดีโอ"; +"HIDE_NOTIFICATIONS_SECTION" = "ซ่อนส่วน การแจ้งเตือน"; +"HIDE_MANAGE_ALL_HISTORY_SECTION" = "ซ่อนส่วน จัดการประวัติทั้งหมด"; +"HIDE_YOUR_DATA_IN_YOUTUBE_SECTION" = "ซ่อนส่วน ข้อมูลของคุณใน YouTube"; +"HIDE_PRIVACY_SECTION" = "ซ่อนส่วน ความเป็นส่วนตัว"; +"HIDE_LIVE_CHAT_SECTION" = "ซ่อนส่วน แชทสด"; +"HIDE_GET_YOUTUBE_PREMIUM_SECTION" = "ซ่อนส่วน สมัคร YouTube Premium"; -"UI_INTERFACE_OPTIONS" = "UI Interface Options"; +"UI_INTERFACE_OPTIONS" = "ตัวเลือกอินเตอร์เฟซ UI"; -"HIDE_HOME_TAB" = "Hide Home Tab"; -"LOW_CONTRAST_MODE" = "Low Contrast Mode"; -"LOW_CONTRAST_MODE_DESC" = "This will lower the color contrast on texts and buttons, similar to YouTube's pre-2020 App Interface."; -"LOW_CONTRAST_MODE_SELECTOR" = "Low Contrast Mode Selector"; -"LOW_CONTRAST_MODE_ERROR_1" = "You are using v%@ which is a discontinued version of YouTube that no longer works. Please use v17.33.2-17.38.10 in order to use LowContrastMode."; -"LOW_CONTRAST_MODE_ERROR_2" = "LowContrastMode is only available for app versions v17.33.2-v17.38.10. \nYou are currently using v%@. \nWorkaround: if you want to use this then I recommend enabling \"Fix LowContrastMode\" Option."; -"FIX_LOWCONTRASTMODE" = "Fix LowContrastMode"; -"FIX_LOWCONTRASTMODE_DESC" = "This will fix and enable the LowContrastMode functionality by Spoofing to YouTube v17.38.10. App restart is required."; -"DISABLE_MODERN_BUTTONS" = "Disable Modern Buttons"; -"DISABLE_MODERN_BUTTONS_DESC" = "This will remove the some of the new Modern/Chip Buttons in the YouTube App. App restart is required."; -"DISABLE_ROUNDED_CORNERS_ON_HINTS" = "Disable Rounded Corners on Hints"; -"DISABLE_ROUNDED_CORNERS_ON_HINTS_DESC" = "This will make the Hints in the App to not include Rounded Corners. App restart is required."; -"DISABLE_MODERN_FLAGS" = "Disable Modern A/B Flags"; -"DISABLE_MODERN_FLAGS_DESC" = "This will turn off any Modern Flag that was enabled by default. App restart is required."; -"YTNOMODERNUI" = "Enable Specific UI Related Options (YTNoModernUI)"; -"YTNOMODERNUI_DESC" = "This will specifically enable other options to make the app look and feel less-modern. App restart is required."; -"ENABLE_APP_VERSION_SPOOFER" = "Enable App Version Spoofer"; -"ENABLE_APP_VERSION_SPOOFER_DESC" = "Enable this to use the Version Spoofer and select your perferred version below. App restart is required."; -"VERSION_SPOOFER_SELECTOR" = "Version spoofer selector"; +"HIDE_HOME_TAB" = "ซ่อนแท็บหน้าแรก"; +"LOW_CONTRAST_MODE" = "โหมดคอนทราสต์ต่ำ"; +"LOW_CONTRAST_MODE_DESC" = "จะลดความคมชัดของสีในข้อความและปุ่ม คล้ายกับอินเตอร์เฟซแอป YouTube ก่อนปี 2020"; +"LOW_CONTRAST_MODE_SELECTOR" = "ตัวเลือกโหมดคอนทราสต์ต่ำ"; +"LOW_CONTRAST_MODE_ERROR_1" = "คุณกำลังใช้ v%@ ซึ่งเป็นเวอร์ชันที่เลิกใช้งานของ YouTube ซึ่งไม่ทำงานแล้ว โปรดใช้ v17.33.2-17.38.10 เพื่อใช้โหมด LowContrastMode"; +"LOW_CONTRAST_MODE_ERROR_2" = "โหมด LowContrastMode ใช้ได้เฉพาะกับเวอร์ชันแอป v17.33.2-v17.38.10 เท่านั้น \nคุณกำลังใช้ v%@ \nวิธีแก้ปัญหา: หากต้องการใช้โหมดนี้ ฉันแนะนำให้เปิดใช้งานตัวเลือก แก้ไข LowContrastMode"; +"CLASSIC_VIDEO_PLAYER" = "ผู้เล่นวิดีโอคลาสสิค"; +"CLASSIC_VIDEO_PLAYER_DESC" = "คืนค่าฟีเจอร์ผู้เล่นวิดีโอคลาสสิคจาก v16.xx.x รวมถึงการขยายหน้าจอด้วยการบีบ"; +"FIX_LOWCONTRASTMODE" = "แก้ไข LowContrastMode (เลิกใช้)"; +"FIX_LOWCONTRASTMODE_DESC" = "จะซ่อมแซมและเปิดใช้งานฟังก์ชัน LowContrastMode โดยการปลอมแปลงเป็น YouTube v17.38.10 ต้องรีสตาร์ทแอป"; +"DISABLE_MODERN_BUTTONS" = "ปิดการใช้งานปุ่มสมัยใหม่"; +"DISABLE_MODERN_BUTTONS_DESC" = "จะลบปุ่มสมัยใหม่/ปุ่มชิปบางปุ่มในแอป YouTube ต้องรีสตาร์ทแอป"; +"DISABLE_ROUNDED_CORNERS_ON_HINTS" = "ปิดการใช้งานมุมมนในคำแนะนำ"; +"DISABLE_ROUNDED_CORNERS_ON_HINTS_DESC" = "จะทำให้คำแนะนำในแอปไม่มีมุมมน ต้องรีสตาร์ทแอป"; +"DISABLE_MODERN_FLAGS" = "ปิดการใช้งานธงโมเดิร์น A/B"; +"DISABLE_MODERN_FLAGS_DESC" = "จะปิดการใช้งานธงโมเดิร์นที่เปิดใช้งานโดยดีฟอลต์ ต้องรีสตาร์ทแอป"; +"YTNOMODERNUI" = "เปิดใช้งานตัวเลือก UI ที่เกี่ยวข้อง (YTNoModernUI)"; +"YTNOMODERNUI_DESC" = "จะเปิดใช้งานตัวเลือกอื่นๆ ที่ทำให้แอปดูและรู้สึกน้อยลงในสไตล์โมเดิร์น ต้องรีสตาร์ทแอป"; +"ENABLE_APP_VERSION_SPOOFER" = "เปิดใช้งานตัวปลอมแปลงเวอร์ชันแอป"; +"ENABLE_APP_VERSION_SPOOFER_DESC" = "เปิดใช้งานเพื่อใช้ตัวปลอมแปลงเวอร์ชันและเลือกเวอร์ชันที่คุณต้องการด้านล่าง ต้องรีสตาร์ทแอป"; +"VERSION_SPOOFER_SELECTOR" = "ตัวเลือกตัวปลอมแปลงเวอร์ชัน"; -"ADBLOCK_WORKAROUND_LITE" = "AdBlock Workaround (Lite)"; -"ADBLOCK_WORKAROUND_LITE_DESC" = "Uses weaker adblocking code, this will disable uYou's Adblocking Option."; -"ADBLOCK_WORKAROUND" = "AdBlock Workaround"; -"ADBLOCK_WORKAROUND_DESC" = "Uses stronger adblocking code."; -"FAKE_PREMIUM" = "Fake Premium"; -"FAKE_PREMIUM_DESC" = "Uses Premium logo and creates fake buttons in the You tab."; -"FAKE_PREMIUM_WARNING" = "The *You* Tab doesn't exist in v%@, fake buttons will not be created.\nBut the *Fake Premium Logo* will still work."; -"FAKE_YOUR_PREMIUM_BENEFITS" = "Your Premium benefits"; -"FAKE_DOWNLOADS" = "Downloads"; -"DISABLE_ANIMATED_YOUTUBE_LOGO" = "Disable Animated YouTube Logo"; -"CENTER_YOUTUBE_LOGO" = "Center YouTube Logo"; -"CENTER_YOUTUBE_LOGO_DESC" = "Toggle this to reposition the official YouTube Logo to the Center. App restart is required."; -"HIDE_YOUTUBE_LOGO" = "Hide YouTube Logo"; -"HIDE_YOUTUBE_LOGO_DESC" = "Toggle this to hide the YouTube Logo in the YouTube App."; -"STICK_NAVIGATION_BAR" = "Stick Navigation Bar"; -"STICK_NAVIGATION_BAR_DESC" = "This will make the Navigation Bar stay when scrolling throughout the App."; -"HIDE_COMMUNITY_POSTS" = "Hide Community Posts"; -"HIDE_COMMUNITY_POSTS_DESC" = "Hides the Community Posts. App restart is required."; -"HIDE_HEADER_LINKS_UNDER_PROFILE" = "Hide Header Links under channel profile"; -"HIDE_HEADER_LINKS_UNDER_PROFILE_DESC" = "Hides the Header Links under any channel profile."; -"AUTO_HIDE_HOME_INDICATOR" = "Auto-Hide Home Indicator"; -"AUTO_HIDE_HOME_INDICATOR_DESC" = "Automatically Hides the iOS Home Indicator when not interacting with the App."; -"HIDE_INDICATORS" = "Hide Indicators"; -"HIDE_INDICATORS_DESC" = "Hides all Indicators that are currently in the App."; -"FIX_CASTING" = "Fix Casting"; -"FIX_CASTING_DESC" = "Changes certain A/B flags to fix casting."; +"ADBLOCK_WORKAROUND_LITE" = "ทางแก้ไข AdBlock (Lite)"; +"ADBLOCK_WORKAROUND_LITE_DESC" = "ใช้โค้ดบล็อกโฆษณาที่อ่อนแอ เป็นการปิดใช้งานตัวเลือกการบล็อกโฆษณาของ uYou"; +"ADBLOCK_WORKAROUND" = "ทางแก้ไข AdBlock"; +"ADBLOCK_WORKAROUND_DESC" = "ใช้โค้ดบล็อกโฆษณาที่แข็งแกร่ง"; +"FAKE_PREMIUM" = "Premium ปลอม"; "FAKE_PREMIUM_DESC" = "ใช้โลโก้ Premium และสร้างปุ่มปลอมในแท็บ You จะปิดการใช้งานโลโก้ YouTube อนิเมชั่น"; +"FAKE_PREMIUM_WARNING" = "แท็บ You ไม่มีใน v%@, ปุ่มปลอมจะไม่ได้สร้างขึ้น \nแต่ โลโก้ Premium ปลอม จะยังคงทำงาน"; +"FAKE_YOUR_PREMIUM_BENEFITS" = "สิทธิพิเศษ Premium ของคุณ"; +"FAKE_DOWNLOADS" = "การดาวน์โหลด"; +"DISABLE_ANIMATED_YOUTUBE_LOGO" = "ปิดการใช้งานโลโก้ YouTube อนิเมชั่น"; +"CENTER_YOUTUBE_LOGO" = "จัดโลโก้ YouTube ให้อยู่กลาง"; +"CENTER_YOUTUBE_LOGO_DESC" = "เปิดปิดตัวเลือกนี้เพื่อย้ายโลโก้ YouTube ไปยังกลางหน้าจอ ต้องรีสตาร์ทแอป"; +"HIDE_YOUTUBE_LOGO" = "ซ่อนโลโก้ YouTube"; +"HIDE_YOUTUBE_LOGO_DESC" = "เปิดปิดตัวเลือกนี้เพื่อซ่อนโลโก้ YouTube ในแอป YouTube"; +"STICK_NAVIGATION_BAR" = "ยึดแถบการนำทาง"; +"STICK_NAVIGATION_BAR_DESC" = "จะทำให้แถบการนำทางคงอยู่เมื่อเลื่อนผ่านแอป"; +"HIDE_COMMUNITY_POSTS" = "ซ่อนโพสต์ชุมชน"; +"HIDE_COMMUNITY_POSTS_DESC" = "ซ่อนโพสต์ชุมชน ต้องรีสตาร์ทแอป"; +"HIDE_HEADER_LINKS_UNDER_PROFILE" = "ซ่อนลิงก์หัวข้อใต้โปรไฟล์ช่อง"; +"HIDE_HEADER_LINKS_UNDER_PROFILE_DESC" = "ซ่อนลิงก์หัวข้อใต้โปรไฟล์ของช่อง"; +"AUTO_HIDE_HOME_INDICATOR" = "ซ่อนตัวชี้วัดหน้าแรกอัตโนมัติ"; +"AUTO_HIDE_HOME_INDICATOR_DESC" = "ซ่อนตัวชี้วัดหน้าแรกของ iOS เมื่อไม่ได้โต้ตอบกับแอป"; +"HIDE_INDICATORS" = "ซ่อนตัวชี้วัด"; +"HIDE_INDICATORS_DESC" = "ซ่อนตัวชี้วัดทั้งหมดในแอป"; +"FIX_CASTING" = "แก้ไขการส่ง"; +"FIX_CASTING_DESC" = "เปลี่ยนธงบางประการเพื่อแก้ไขการส่ง"; +"NEW_SETTINGS_UI" = "ใช้ UI การตั้งค่าใหม่"; +"NEW_SETTINGS_UI_DESC" = "เปิดใช้งาน UI การตั้งค่าใหม่พร้อมหมวดหมู่การปรับแต่ง"; -"DEFAULT" = "Default"; -"CUSTOM_COLOR" = "Custom Color"; -"RESTART_REQUIRED" = "App restart is required."; +"DEFAULT" = "ค่าเริ่มต้น"; +"CUSTOM_COLOR" = "สีที่กำหนดเอง"; +"RESTART_REQUIRED" = "ต้องรีสตาร์ทแอป"; diff --git a/Makefile b/Makefile index 6a9d7b4..755db08 100644 --- a/Makefile +++ b/Makefile @@ -1,5 +1,5 @@ -export TARGET = iphone:clang:16.5:15.0 -export SDK_PATH = $(THEOS)/sdks/iPhoneOS16.5.sdk/ +export TARGET = iphone:clang:17.5:15.0 +export SDK_PATH = $(THEOS)/sdks/iPhoneOS17.5.sdk/ export SYSROOT = $(SDK_PATH) export ARCHS = arm64 @@ -16,7 +16,7 @@ MODULES = jailed endif ifndef YOUTUBE_VERSION -YOUTUBE_VERSION = 19.40.4 +YOUTUBE_VERSION = 20.33.2 endif ifndef UYOU_VERSION UYOU_VERSION = 3.0.4 @@ -34,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)/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)_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)/YTIcons.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)/YouSlider.dylib $(THEOS_OBJ_DIR)/YouSpeed.dylib $(THEOS_OBJ_DIR)/YouTimeStamp.dylib $(THEOS_OBJ_DIR)/YouTubeDislikesReturn.dylib $(THEOS_OBJ_DIR)/DontEatMyContent.dylib $(THEOS_OBJ_DIR)/YTHoldForSpeed.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) @@ -43,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/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 +SUBPROJECTS += Tweaks/Alderis Tweaks/DontEatMyContent Tweaks/FLEXing/libflex Tweaks/iSponsorBlock Tweaks/Return-YouTube-Dislikes Tweaks/YTABConfig Tweaks/YouGroupSettings Tweaks/YTIcons Tweaks/YouLoop Tweaks/YouMute Tweaks/YouPiP Tweaks/YouQuality Tweaks/YouSlider Tweaks/YouSpeed Tweaks/YouTimeStamp Tweaks/YTHoldForSpeed Tweaks/YTUHD Tweaks/YTVideoOverlay include $(THEOS_MAKE_PATH)/aggregate.mk endif include $(THEOS_MAKE_PATH)/tweak.mk diff --git a/README.md b/README.md index b7bb241..6e4dcf9 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,15 @@ +## About the future of the uYouEnhanced Project (Updated, June 13, 2025) +Hey everyone, + +Just wanted to give you an update about uYouEnhanced. I’m not 100% leaving or anything, but I won’t be maintaining this tweak much like before. I’ll still drop some github commits now and then to try and improve uYouEnhanced, but there’s just no way I can ever get through and solve the 300+ known existing issues in this github repository. + +I do my best to fix stuff when some issues pop up, but it sometimes usually doesn’t work out. I do even suggest workarounds, but they might not work perfectly or might mot even work, especially with the latest YouTube version changes. + +But as of writing this, I’d recommend using uYouEnhanced with YouTube version v20.05.4 (the ipa version I actually am still using personally). +Thanks for understanding! + +And thanks to the developers qnblackcat, PoomSmart & other allowing me to expand this fork from where it is today! +

UYOUPLUS_LOGO @@ -15,7 +27,7 @@

- Latest Release Badge + Latest Release Badge Last Commit Badge Issues Badge

@@ -30,14 +42,14 @@ # Table of Contents -[![Credits](https://img.shields.io/badge/Credits-blue?style=flat)](#credits)
-[![Features](https://img.shields.io/badge/Features-blue?style=flat)](#features)
-[![Known Issues](https://img.shields.io/badge/Known%20Issues-blue?style=flat)](#known-issues)
-[![Download](https://img.shields.io/badge/Download-blue?style=flat)](#download)
-[![Building](https://img.shields.io/badge/Building-blue?style=flat)](#building)
-[![Installation](https://img.shields.io/badge/Installation-blue?style=flat)](#installation)
-[![Support the Developers](https://img.shields.io/badge/Support%20the%20Developers-blue?style=flat)](#support-the-developers)
-[![Wiki](https://img.shields.io/badge/Wiki-blue?style=flat)](#wiki)
+ Credits Badge
+ Features Badge
+ Known Issues Badge
+ Download Badge
+ Building Badge
+ Installation Badge
+ Support the Developers Badge
+ Wiki Badge # Credits @@ -49,7 +61,7 @@
-MiRO92 +MiRO92 @@ -58,7 +70,7 @@
-qnblackcat +qnblackcat @@ -67,7 +79,7 @@
-PoomSmart +PoomSmart @@ -76,7 +88,7 @@
-level3tjg +level3tjg @@ -85,7 +97,7 @@
-BandarHelal +BandarHL @@ -94,10 +106,10 @@
-galactic +dev_galactic - +
@@ -106,7 +118,7 @@
-julioverne +ijulioverne @@ -115,7 +127,7 @@
-HASHBANG +hashbang @@ -124,7 +136,7 @@
-Lyvendia +Lyvendia @@ -133,7 +145,7 @@
-Foxster +therealFoxster @@ -142,7 +154,7 @@
-ichitaso +ichitaso @@ -151,7 +163,7 @@
-Ahmed Bafkir +Peaceful_0
@@ -163,7 +175,7 @@
-CokePokes +cokepokes @@ -172,7 +184,7 @@
-Tommy Teo +isnackable @@ -181,7 +193,7 @@
-dayanch96 +dayanch96 @@ -190,7 +202,7 @@
-ssuesskind +ssuesskind @@ -199,7 +211,7 @@
-balackburn +balackburn @@ -208,7 +220,7 @@
-dodieboy +dodieboy @@ -220,7 +232,7 @@
-bhackel +bhackel @@ -229,7 +241,7 @@
-theos +theos
@@ -271,7 +283,11 @@ 16. **YTVideoOverlay:** YTVideoOverlay adds buttons to overlay the video, providing quick access to features like captions, speed control, and quality settings. -17. **LowContrastMode:** LowContrastMode is a tweak that allows users to darken the text in the YouTube app, making it easier to read. **<-- uYouEnhanced Exclusive Feature (subject to change)** +17. **NotificationsTab:** This tweak recreates the Notifications Tab that was removed from the YouTube App back in 2020, also the tweak includes customization for the tab if you are feeling nostalgic. + +18. **YTAppVersionSpoofer:** This tweak allows users to spoof the version of the YouTube app they are using, this is designed to spoof to older YouTube App versions. This can be useful for bypassing certain version checks or retaining features that may have been removed/disabled in newer updates. **<-- uYouEnhanced Exclusive Feature (subject to change)** + +19. **LowContrastMode (17.33.2-18.34.5 OUTDATED):** LowContrastMode is a tweak that allows users to darken the text in the YouTube app, making it easier to read. which sadly suffers from incompatibility issues and doesn't work right now as of March 19th 2025. **<-- uYouEnhanced Exclusive Feature (subject to change)** @@ -287,20 +303,21 @@ - **Compatibility:** Requires iOS/iPadOS 15.0 or later. - For AltStore user: - - 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 + - My official AltStore repo (uYouEnhanced - **iOS 15+**): https://therealfoxster.github.io/altsource-viewer/view/?source=https://raw.githubusercontent.com/arichornlover/arichornlover.github.io/main/apps.json - - 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** + - My alternative AltStore repo (uYouEnhanced - **iOS 14+ - mainly for Trollstore users**): https://therealfoxster.github.io/altsource-viewer/view/?source=https://raw.githubusercontent.com/arichornlover/arichornlover.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. + - [Open in AltStore (v20.05.4-3.0.4)](https://tinyurl.com/33wr56zm) - It will take a while to install because AltStore needs to download the IPA first. + - NEWS - Nov 27 2024: Please be aware that some of the **uYou** features aren't working in newer versions of YouTube.
- Version information (last updated: Oct 10, 2024) + Version information (last updated: June 13, 2025) | **Tweaks/App** | **Developer** | **Version** | **Open source** | | - | - | :-: | :-: | -| **YouTube** | Google Inc | 19.40.4 | ✖︎ | +| **YouTube** | Google Inc | 20.23.3 | ✖︎ | | [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) | +| **OpenYoutubeAndShorts** | [CrossiDev-Studio](https://github.com/CrossiDev-Studio) | 1.0 | [✔︎](https://github.com/CrossiDev-Studio/OpenYoutubeAndShorts) | | **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) | @@ -308,22 +325,26 @@ | **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.5 | [✔︎](https://github.com/PoomSmart/YTUHD) | -| **YouPiP** | [PoomSmart](https://twitter.com/poomsmart) | 1.8.14 | [✔︎](https://github.com/PoomSmart/YouPiP) | +| **YTUHD** | [PoomSmart](https://twitter.com/poomsmart) | 1.6.0 | [✔︎](https://github.com/PoomSmart/YTUHD) | +| **YouLoop** | [bhackel](https://github.com/bhackel) | 1.0.0 | [✔︎](https://github.com/bhackel/YouLoop) | +| **YouMute** | [PoomSmart](https://twitter.com/poomsmart) | 1.2.3 | [✔︎](https://github.com/PoomSmart/YouMute) | +| **YouPiP** | [PoomSmart](https://twitter.com/poomsmart) | 1.12.7 | [✔︎](https://github.com/PoomSmart/YouPiP) | +| **YouQuality** | [PoomSmart](https://twitter.com/poomsmart) | 1.3.5 | [✔︎](https://github.com/PoomSmart/YouQuality) | +| **YouSpeed** | [PoomSmart](https://twitter.com/poomsmart) | 1.0.1 | [✔︎](https://github.com/PoomSmart/YouSpeed) | +| **YouTimeStamp** | [arichornlover](https://github.com/arichornlover) | 1.0.2 | [✔︎](https://github.com/arichornlover/YouTimeStamp) | | **IAmYouTube** | [PoomSmart](https://twitter.com/poomsmart) | 1.3.0 | [✔︎](https://github.com/PoomSmart/IAmYouTube) | | **YTABConfig** | [PoomSmart](https://twitter.com/poomsmart) | 1.7.3 | [✔︎](https://github.com/PoomSmart/YTABConfig) | +| **YTIcons** | [PoomSmart](https://twitter.com/poomsmart) | 1.0.0 | [✔︎](https://github.com/PoomSmart/YTIcons) | | **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.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) | -| **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.1 | [✔︎](https://github.com/arichornlover/YouTimeStamp) | +| **Return YouTube Dislike** | [PoomSmart](https://twitter.com/poomsmart) | 1.13.3 | [✔︎](https://github.com/PoomSmart/Return-YouTube-Dislikes) | +| **YouTube-X** | [PoomSmart](https://twitter.com/poomsmart) | 1.7.11 | [✔︎](https://github.com/PoomSmart/YouTube-X) | +| **YTVideoOverlay** | [PoomSmart](https://twitter.com/poomsmart) | 1.3.0 | [✔︎](https://github.com/PoomSmart/YTVideoOverlay) | +| **YouGroupSettings** | [PoomSmart](https://twitter.com/poomsmart) | 1.0.3 | [✔︎](https://github.com/PoomSmart/YouGroupSettings) | +| **YTHoldForSpeed** | [joshuaseltzer](https://github.com/joshuaseltzer) | 1.2.3 | [✔︎](https://github.com/joshuaseltzer/YTHoldForSpeed) | +| **LowContrastMode (Broken Tweak)** | [arichornlover](https://github.com/arichornlover) | 1.5.2 | [✔︎](https://github.com/arichornlover/YTLowContrastMode) |
@@ -331,11 +352,11 @@ | Developer | Tweak Name and Version | App Version Compatibility | iOS Version Compatibility | |-----------|-----------------------|--------------------------|--------------------------| -| MiRO92 | uYou 2.1 / 2.3~1 | ~v16.42.3~ v17.33.2 - 18.01.6 | iOS 13.0 - iOS 15.8.2 | -| 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 - v19.22.6 | iOS 14.0 - 17.5.1 | +| MiRO92 | uYou 2.1 / 2.3~1 | ~v16.42.3~ ~v17.33.2 - 18.01.6~ | iOS 13.0 - iOS 15.8.3 | +| MiRO92 | uYou 3.0 | ~v18.06.6 - v18.18.2~ | iOS 14.0 - iOS 15.8.3 | +| MiRO92 | uYou 3.0.1 | ~v18.19.1 - v18.41.5~ | iOS 14.0 - iOS 18.5.0 | +| MiRO92 | uYou 3.0.2 / 3.0.3 | v19.06.2 - v19.15.1 | iOS 15.0 - iOS 18.5.0 | +| MiRO92 | uYou 3.0.4 | v19.20.2 - v19.22.6 | iOS 15.0 - iOS 18.5.0 | # Building @@ -381,7 +402,7 @@ See [arichornlover - Wiki](https://github.com/arichornlover/uYouEnhanced/wiki/)
Read more
-# Switch from uYouEnhanced to YTLitePlus (optional) +# Switch from uYouEnhanced to YTLite or YTLitePlus (optional) 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. diff --git a/Sources/AppIconOptionsController.m b/Sources/AppIconOptionsController.m index c080407..9bcac2d 100644 --- a/Sources/AppIconOptionsController.m +++ b/Sources/AppIconOptionsController.m @@ -14,14 +14,14 @@ self.title = @"Change App Icon"; self.selectedIconIndex = -1; - - self.tableView = [[UITableView alloc] initWithFrame:self.view.bounds style:UITableViewStylePlain]; + + self.tableView = [[UITableView alloc] initWithFrame:self.view.bounds style:UITableViewStyleGrouped]; self.tableView.dataSource = self; self.tableView.delegate = self; [self.view addSubview:self.tableView]; self.backButton = [UIButton buttonWithType:UIButtonTypeCustom]; - [self.backButton setImage:[UIImage customBackButtonImage] forState:UIControlStateNormal]; + [self.backButton setImage:[UIImage systemImageNamed:@"chevron.backward"] forState:UIControlStateNormal]; [self.backButton addTarget:self action:@selector(back) forControlEvents:UIControlEventTouchUpInside]; UIBarButtonItem *customBackButton = [[UIBarButtonItem alloc] initWithCustomView:self.backButton]; self.navigationItem.leftBarButtonItem = customBackButton; @@ -29,7 +29,7 @@ NSString *path = [[NSBundle mainBundle] pathForResource:@"uYouPlus" ofType:@"bundle"]; NSBundle *bundle = [NSBundle bundleWithPath:path]; self.appIcons = [bundle pathsForResourcesOfType:@"png" inDirectory:@"AppIcons"]; - + if (![UIApplication sharedApplication].supportsAlternateIcons) { NSLog(@"Alternate icons are not supported on this device."); } @@ -40,13 +40,14 @@ } - (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath { - return 60.0; + return 80.0; } - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"Cell"]; if (!cell) { - cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"Cell"]; + cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:@"Cell"]; + cell.selectionStyle = UITableViewCellSelectionStyleNone; } NSString *iconPath = self.appIcons[indexPath.row]; @@ -54,8 +55,9 @@ UIImage *iconImage = [UIImage imageWithContentsOfFile:iconPath]; cell.imageView.image = iconImage; - cell.imageView.layer.cornerRadius = 10.0; + cell.imageView.layer.cornerRadius = 16.0; cell.imageView.clipsToBounds = YES; + cell.imageView.contentMode = UIViewContentModeScaleAspectFit; cell.accessoryType = (indexPath.row == self.selectedIconIndex) ? UITableViewCellAccessoryCheckmark : UITableViewCellAccessoryNone; @@ -66,6 +68,7 @@ [tableView deselectRowAtIndexPath:indexPath animated:YES]; self.selectedIconIndex = indexPath.row; + [self saveIcon]; [self.tableView reloadData]; } diff --git a/Sources/LowContrastMode.xm b/Sources/LowContrastMode.xm index 0e4c94f..4ff79b5 100644 --- a/Sources/LowContrastMode.xm +++ b/Sources/LowContrastMode.xm @@ -1,621 +1,253 @@ #import "uYouPlus.h" -// -static int contrastMode() { +// Color Configuration +static UIColor *lcmHexColor = nil; +static UIColor *const kLowContrastColor = [UIColor colorWithRed:0.56 green:0.56 blue:0.56 alpha:1.0]; +static UIColor *const kDefaultTextColor = [UIColor whiteColor]; + +// Utility Functions +static inline int contrastMode() { return [[NSUserDefaults standardUserDefaults] integerForKey:@"lcm"]; } -static BOOL lowContrastMode() { + +static inline BOOL lowContrastMode() { return IS_ENABLED(@"lowContrastMode_enabled") && contrastMode() == 0; } -static BOOL customContrastMode() { + +static inline BOOL customContrastMode() { return IS_ENABLED(@"lowContrastMode_enabled") && contrastMode() == 1; } -// static UIColor *whiteTextColor() { -// return [UIColor whiteColor]; + +// static inline UIColor *activeColor() { +// return customContrastMode() && lcmHexColor ? lcmHexColor : kLowContrastColor; // } -UIColor *lcmHexColor; - -%group gLowContrastMode // Low Contrast Mode v1.6.0 BETA (Compatible with only YouTube v17.33.2-v17.38.10) +// Low Contrast Mode v1.7.1.1 (Compatible with only YouTube v19.01.1-v20.21.6) +%group gLowContrastMode %hook UIColor -+ (UIColor *)whiteColor { // Dark Theme Color - return [UIColor colorWithRed: 0.56 green: 0.56 blue: 0.56 alpha: 1.00]; -} -+ (UIColor *)lightTextColor { - return [UIColor colorWithRed: 0.56 green: 0.56 blue: 0.56 alpha: 1.00]; -} -+ (UIColor *)lightGrayColor { - return [UIColor colorWithRed: 0.56 green: 0.56 blue: 0.56 alpha: 1.00]; -} -+ (UIColor *)ychGrey7 { - return [UIColor colorWithRed: 0.56 green: 0.56 blue: 0.56 alpha: 1.00]; -} -+ (UIColor *)skt_chipBackgroundColor { - return [UIColor colorWithRed: 0.56 green: 0.56 blue: 0.56 alpha: 1.00]; -} -+ (UIColor *)placeholderTextColor { - return [UIColor colorWithRed: 0.56 green: 0.56 blue: 0.56 alpha: 1.00]; -} -+ (UIColor *)systemLightGrayColor { - return [UIColor colorWithRed: 0.56 green: 0.56 blue: 0.56 alpha: 1.00]; -} -+ (UIColor *)systemExtraLightGrayColor { - return [UIColor colorWithRed: 0.56 green: 0.56 blue: 0.56 alpha: 1.00]; -} -+ (UIColor *)labelColor { - return [UIColor colorWithRed: 0.56 green: 0.56 blue: 0.56 alpha: 1.00]; -} -+ (UIColor *)secondaryLabelColor { - return [UIColor colorWithRed: 0.56 green: 0.56 blue: 0.56 alpha: 1.00]; -} -+ (UIColor *)tertiaryLabelColor { - return [UIColor colorWithRed: 0.56 green: 0.56 blue: 0.56 alpha: 1.00]; -} -+ (UIColor *)quaternaryLabelColor { - return [UIColor colorWithRed: 0.56 green: 0.56 blue: 0.56 alpha: 1.00]; -} -%end -%hook YTCommonColorPalette -- (UIColor *)textPrimary { - 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 -%hook YTColor -+ (BOOL)darkerPaletteTextColorEnabled { - return NO; -} -+ (UIColor *)white1 { - return [UIColor whiteColor]; -} -+ (UIColor *)white2 { - return [UIColor whiteColor]; -} -+ (UIColor *)white3 { - return [UIColor whiteColor]; -} -+ (UIColor *)white4 { - return [UIColor whiteColor]; -} -+ (UIColor *)white5 { - return [UIColor whiteColor]; -} -+ (UIColor *)grey1 { - return [UIColor whiteColor]; -} -+ (UIColor *)grey2 { - return [UIColor whiteColor]; -} -%end -%hook QTMColorGroup -- (UIColor *)tint100 { - return [UIColor whiteColor]; -} -- (UIColor *)tint300 { - return [UIColor whiteColor]; -} -- (UIColor *)tint500 { - return [UIColor whiteColor]; -} -- (UIColor *)tint700 { - return [UIColor whiteColor]; -} -- (UIColor *)accent200 { - return [UIColor whiteColor]; -} -- (UIColor *)accent400 { - return [UIColor whiteColor]; -} -- (UIColor *)accentColor { - return [UIColor whiteColor]; -} -- (UIColor *)brightAccentColor { - return [UIColor whiteColor]; -} -- (UIColor *)regularColor { - return [UIColor whiteColor]; -} -- (UIColor *)darkerColor { - return [UIColor whiteColor]; -} -- (UIColor *)bodyTextColor { - return [UIColor whiteColor]; -} -- (UIColor *)lightBodyTextColor { - return [UIColor whiteColor]; -} -- (UIColor *)bodyTextColorOnRegularColor { - return [UIColor whiteColor]; -} -- (UIColor *)bodyTextColorOnLighterColor { - return [UIColor whiteColor]; -} -- (UIColor *)bodyTextColorOnDarkerColor { - return [UIColor whiteColor]; -} -- (UIColor *)bodyTextColorOnAccentColor { - return [UIColor whiteColor]; -} -- (UIColor *)buttonBackgroundColor { - return [UIColor whiteColor]; -} -%end -%hook YCHLiveChatLabel -- (NSAttributedString *)attributedText { - NSAttributedString *originalAttributedString = %orig; - NSMutableAttributedString *modifiedAttributedString = [originalAttributedString mutableCopy]; - [modifiedAttributedString addAttribute:NSForegroundColorAttributeName value:[UIColor whiteColor] range:NSMakeRange(0, modifiedAttributedString.length)]; - return modifiedAttributedString; -} -%end -%hook YTQTMButton -- (void)setImage:(UIImage *)image { - UIImage *currentImage = [image imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate]; - [self setTintColor:[UIColor whiteColor]]; - %orig(currentImage); -} -%end -%hook UIExtendedSRGColorSpace -- (void)setTextColor:(UIColor *)textColor { - textColor = [[UIColor whiteColor] colorWithAlphaComponent:0.9]; - %orig(); -} -%end -%hook UIExtendedSRGBColorSpace -- (void)setTextColor:(UIColor *)textColor { - textColor = [[UIColor whiteColor] colorWithAlphaComponent:1.0]; - %orig(); -} -%end -%hook UIExtendedGrayColorSpace -- (void)setTextColor:(UIColor *)textColor { - textColor = [[UIColor whiteColor] colorWithAlphaComponent:1.0]; - %orig(); -} -%end -%hook VideoTitleLabel -- (void)setTextColor:(UIColor *)textColor { - textColor = [UIColor whiteColor]; - %orig(textColor); -} -%end -%hook UILabel -+ (void)load { - @autoreleasepool { - [[UILabel appearance] setTextColor:[UIColor whiteColor]]; - } -} -- (void)setTextColor:(UIColor *)textColor { - %log; - textColor = [UIColor whiteColor]; - %orig(textColor); -} -%end -%hook UITextField -- (void)setTextColor:(UIColor *)textColor { - %log; - textColor = [UIColor whiteColor]; - %orig(textColor); -} -%end -%hook UITextView -- (void)setTextColor:(UIColor *)textColor { - %log; - textColor = [UIColor whiteColor]; - %orig(textColor); -} -%end -%hook UISearchBar -- (void)setTextColor:(UIColor *)textColor { - textColor = [UIColor whiteColor]; - %orig(textColor); -} -%end -%hook UISegmentedControl -- (void)setTitleTextAttributes:(NSDictionary *)attributes forState:(UIControlState)state { - NSMutableDictionary *modifiedAttributes = [NSMutableDictionary dictionaryWithDictionary:attributes]; - [modifiedAttributes setObject:[UIColor whiteColor] forKey:NSForegroundColorAttributeName]; - %orig(modifiedAttributes, state); -} -- (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 { - NSMutableDictionary *modifiedAttributes = [NSMutableDictionary dictionaryWithDictionary:attributes]; - [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 *)attrs { - NSMutableDictionary *modifiedAttributes = [NSMutableDictionary dictionaryWithDictionary:attrs]; - [modifiedAttributes setObject:[UIColor whiteColor] forKey:NSForegroundColorAttributeName]; - return %orig(str, modifiedAttributes); -} -%end -%hook CATextLayer -- (void)setTextColor:(CGColorRef)textColor { - %orig([UIColor whiteColor].CGColor); -} -%end -%hook ASTextNode -- (NSAttributedString *)attributedString { - NSAttributedString *originalAttributedString = %orig; - NSMutableAttributedString *newAttributedString = [originalAttributedString mutableCopy]; - [newAttributedString addAttribute:NSForegroundColorAttributeName value:[UIColor whiteColor] range:NSMakeRange(0, newAttributedString.length)]; - return newAttributedString; -} -%end -%hook ASTextFieldNode -- (void)setTextColor:(UIColor *)textColor { - %orig([UIColor whiteColor]); -} -%end -%hook ASTextView -- (void)setTextColor:(UIColor *)textColor { - %orig([UIColor whiteColor]); -} -%end -%hook ASButtonNode -- (void)setTextColor:(UIColor *)textColor { - %orig([UIColor whiteColor]); -} -%end -%hook UIControl // snackbar fix for lcm -- (UIColor *)backgroundColor { - return [UIColor blackColor]; -} -%end ++ (UIColor *)colorNamed:(NSString *)name { + NSArray *targetColors = @[ + @"whiteColor", @"lightTextColor", @"lightGrayColor", @"ychGrey7", + @"skt_chipBackgroundColor", @"placeholderTextColor", @"systemLightGrayColor", + @"systemExtraLightGrayColor", @"labelColor", @"secondaryLabelColor", + @"tertiaryLabelColor", @"quaternaryLabelColor" + ]; + return [targetColors containsObject:name] ? kLowContrastColor : %orig; +} + ++ (UIColor *)whiteColor { return kLowContrastColor; } ++ (UIColor *)lightTextColor { return kLowContrastColor; } ++ (UIColor *)lightGrayColor { return kLowContrastColor; } %end -%group gCustomContrastMode // Custom Contrast Mode (Hex Color) -%hook UIColor -+ (UIColor *)whiteColor { - return lcmHexColor; -} -+ (UIColor *)lightTextColor { - return lcmHexColor; -} -+ (UIColor *)lightGrayColor { - return lcmHexColor; -} -+ (UIColor *)ychGrey7 { - return lcmHexColor; -} -+ (UIColor *)skt_chipBackgroundColor { - return lcmHexColor; -} -+ (UIColor *)placeholderTextColor { - return lcmHexColor; -} -+ (UIColor *)systemLightGrayColor { - return lcmHexColor; -} -+ (UIColor *)systemExtraLightGrayColor { - return lcmHexColor; -} -+ (UIColor *)labelColor { - return lcmHexColor; -} -+ (UIColor *)secondaryLabelColor { - return lcmHexColor; -} -+ (UIColor *)tertiaryLabelColor { - return lcmHexColor; -} -+ (UIColor *)quaternaryLabelColor { - return lcmHexColor; -} -%end %hook YTCommonColorPalette - (UIColor *)textPrimary { - return self.pageStyle == 1 ? lcmHexColor : %orig; + return self.pageStyle == 1 ? kDefaultTextColor : %orig; } - (UIColor *)textSecondary { - return self.pageStyle == 1 ? lcmHexColor : %orig; + return self.pageStyle == 1 ? kDefaultTextColor : %orig; } - (UIColor *)overlayTextPrimary { - return self.pageStyle == 1 ? lcmHexColor : %orig; + return self.pageStyle == 1 ? kDefaultTextColor : %orig; } - (UIColor *)overlayTextSecondary { - return self.pageStyle == 1 ? lcmHexColor : %orig; + return self.pageStyle == 1 ? kDefaultTextColor : %orig; } - (UIColor *)iconActive { - return self.pageStyle == 1 ? lcmHexColor : %orig; + return self.pageStyle == 1 ? kDefaultTextColor : %orig; } - (UIColor *)iconActiveOther { - return self.pageStyle == 1 ? lcmHexColor : %orig; + return self.pageStyle == 1 ? kDefaultTextColor : %orig; } - (UIColor *)brandIconActive { - return self.pageStyle == 1 ? lcmHexColor : %orig; + return self.pageStyle == 1 ? kDefaultTextColor : %orig; } - (UIColor *)staticBrandWhite { - return self.pageStyle == 1 ? lcmHexColor : %orig; + return self.pageStyle == 1 ? kDefaultTextColor : %orig; } - (UIColor *)overlayIconActiveOther { - return self.pageStyle == 1 ? lcmHexColor : %orig; + return self.pageStyle == 1 ? kDefaultTextColor : %orig; } - (UIColor *)overlayIconInactive { - return self.pageStyle == 1 ? [lcmHexColor colorWithAlphaComponent:0.7] : %orig; + return self.pageStyle == 1 ? [kDefaultTextColor colorWithAlphaComponent:0.7] : %orig; } - (UIColor *)overlayIconDisabled { - return self.pageStyle == 1 ? [lcmHexColor colorWithAlphaComponent:0.3] : %orig; + return self.pageStyle == 1 ? [kDefaultTextColor colorWithAlphaComponent:0.3] : %orig; } - (UIColor *)overlayFilledButtonActive { - return self.pageStyle == 1 ? [lcmHexColor colorWithAlphaComponent:0.2] : %orig; + return self.pageStyle == 1 ? [kDefaultTextColor colorWithAlphaComponent:0.2] : %orig; } %end + %hook YTColor -+ (BOOL)darkerPaletteTextColorEnabled { - return NO; -} -+ (UIColor *)white1 { - return lcmHexColor; -} -+ (UIColor *)white2 { - return lcmHexColor; -} -+ (UIColor *)white3 { - return lcmHexColor; -} -+ (UIColor *)white4 { - return lcmHexColor; -} -+ (UIColor *)white5 { - return lcmHexColor; -} -+ (UIColor *)grey1 { - return lcmHexColor; -} -+ (UIColor *)grey2 { - return lcmHexColor; -} -%end -%hook QTMColorGroup -- (UIColor *)tint100 { - return [UIColor whiteColor]; -} -- (UIColor *)tint300 { - return [UIColor whiteColor]; -} -- (UIColor *)tint500 { - return [UIColor whiteColor]; -} -- (UIColor *)tint700 { - return [UIColor whiteColor]; -} -- (UIColor *)accent200 { - return [UIColor whiteColor]; -} -- (UIColor *)accent400 { - return [UIColor whiteColor]; -} -- (UIColor *)accentColor { - return [UIColor whiteColor]; -} -- (UIColor *)brightAccentColor { - return [UIColor whiteColor]; -} -- (UIColor *)regularColor { - return [UIColor whiteColor]; -} -- (UIColor *)darkerColor { - return [UIColor whiteColor]; -} -- (UIColor *)bodyTextColor { - return [UIColor whiteColor]; -} -- (UIColor *)lightBodyTextColor { - return [UIColor whiteColor]; -} -- (UIColor *)bodyTextColorOnRegularColor { - return [UIColor whiteColor]; -} -- (UIColor *)bodyTextColorOnLighterColor { - return [UIColor whiteColor]; -} -- (UIColor *)bodyTextColorOnDarkerColor { - return [UIColor whiteColor]; -} -- (UIColor *)bodyTextColorOnAccentColor { - return [UIColor whiteColor]; -} -- (UIColor *)buttonBackgroundColor { - return [UIColor whiteColor]; -} -%end -%hook YTQTMButton -- (void)setImage:(UIImage *)image { - UIImage *currentImage = [image imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate]; - [self setTintColor:[UIColor whiteColor]]; - %orig(currentImage); -} -%end -%hook UIExtendedSRGColorSpace -- (void)setTextColor:(UIColor *)textColor { - textColor = [[UIColor whiteColor] colorWithAlphaComponent:0.9]; - %orig(); -} -%end -%hook UIExtendedSRGBColorSpace -- (void)setTextColor:(UIColor *)textColor { - textColor = [[UIColor whiteColor] colorWithAlphaComponent:1.0]; - %orig(); -} -%end -%hook UIExtendedGrayColorSpace -- (void)setTextColor:(UIColor *)textColor { - textColor = [[UIColor whiteColor] colorWithAlphaComponent:1.0]; - %orig(); -} -%end -%hook VideoTitleLabel -- (void)setTextColor:(UIColor *)textColor { - textColor = [UIColor whiteColor]; - %orig(textColor); -} -%end -%hook UILabel -+ (void)load { - @autoreleasepool { - [[UILabel appearance] setTextColor:[UIColor whiteColor]]; - } -} -- (void)setTextColor:(UIColor *)textColor { - %log; - textColor = [UIColor whiteColor]; - %orig(textColor); -} -%end -%hook UITextField -- (void)setTextColor:(UIColor *)textColor { - %log; - textColor = [UIColor whiteColor]; - %orig(textColor); -} -%end -%hook UITextView -- (void)setTextColor:(UIColor *)textColor { - %log; - textColor = [UIColor whiteColor]; - %orig(textColor); -} -%end -%hook UISearchBar -- (void)setTextColor:(UIColor *)textColor { - textColor = [UIColor whiteColor]; - %orig(textColor); -} -%end -%hook UISegmentedControl -- (void)setTitleTextAttributes:(NSDictionary *)attributes forState:(UIControlState)state { - NSMutableDictionary *modifiedAttributes = [NSMutableDictionary dictionaryWithDictionary:attributes]; - [modifiedAttributes setObject:[UIColor whiteColor] forKey:NSForegroundColorAttributeName]; - %orig(modifiedAttributes, state); -} -%end -%hook UIButton -- (void)setTitleColor:(UIColor *)color forState:(UIControlState)state { - color = [UIColor whiteColor]; - %orig(color, state); -} -%end -%hook UIBarButtonItem -- (void)setTitleTextAttributes:(NSDictionary *)attributes forState:(UIControlState)state { - NSMutableDictionary *modifiedAttributes = [NSMutableDictionary dictionaryWithDictionary:attributes]; - [modifiedAttributes setObject:[UIColor whiteColor] forKey:NSForegroundColorAttributeName]; - %orig(modifiedAttributes, state); -} -%end -%hook NSAttributedString -- (instancetype)initWithString:(NSString *)str attributes:(NSDictionary *)attrs { - NSMutableDictionary *modifiedAttributes = [NSMutableDictionary dictionaryWithDictionary:attrs]; - [modifiedAttributes setObject:[UIColor whiteColor] forKey:NSForegroundColorAttributeName]; - return %orig(str, modifiedAttributes); -} -%end -%hook CATextLayer -- (void)setTextColor:(CGColorRef)textColor { - %orig([[UIColor whiteColor] CGColor]); -} ++ (BOOL)darkerPaletteTextColorEnabled { return NO; } ++ (UIColor *)white1 { return kLowContrastColor; } ++ (UIColor *)white2 { return kLowContrastColor; } ++ (UIColor *)white3 { return kLowContrastColor; } ++ (UIColor *)white4 { return kLowContrastColor; } ++ (UIColor *)white5 { return kLowContrastColor; } ++ (UIColor *)grey1 { return kLowContrastColor; } ++ (UIColor *)grey2 { return kLowContrastColor; } %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); +- (void)layoutSubviews { + %orig; + NSArray *targetLabels = @[@"connect account", @"Thanks", @"Save to playlist", @"Report"]; + for (UIView *subview in self.subviews) { + if ([targetLabels containsObject:subview.accessibilityLabel]) { + subview.backgroundColor = kLowContrastColor; + if ([subview isKindOfClass:[UILabel class]]) { + ((UILabel *)subview).textColor = [UIColor blackColor]; + } + } + } } %end + +%hook QTMColorGroup +- (UIColor *)tint100 { return kDefaultTextColor; } +- (UIColor *)tint300 { return kDefaultTextColor; } +- (UIColor *)tint500 { return kDefaultTextColor; } +- (UIColor *)tint700 { return kDefaultTextColor; } +- (UIColor *)accent200 { return kDefaultTextColor; } +- (UIColor *)accent400 { return kDefaultTextColor; } +- (UIColor *)accentColor { return kDefaultTextColor; } +- (UIColor *)brightAccentColor { return kDefaultTextColor; } +- (UIColor *)regularColor { return kDefaultTextColor; } +- (UIColor *)darkerColor { return kDefaultTextColor; } +- (UIColor *)bodyTextColor { return kDefaultTextColor; } +- (UIColor *)lightBodyTextColor { return kDefaultTextColor; } +- (UIColor *)bodyTextColorOnRegularColor { return kDefaultTextColor; } +- (UIColor *)bodyTextColorOnLighterColor { return kDefaultTextColor; } +- (UIColor *)bodyTextColorOnDarkerColor { return kDefaultTextColor; } +- (UIColor *)bodyTextColorOnAccentColor { return kDefaultTextColor; } +- (UIColor *)buttonBackgroundColor { return kDefaultTextColor; } +- (UIColor *)Color { return kDefaultTextColor; } +%end + +%hook YTQTMButton +- (void)setImage:(UIImage *)image { + UIImage *tintedImage = [image imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate]; + [self setTintColor:kDefaultTextColor]; + %orig(tintedImage); +} +%end + +%hook UIExtendedSRGColorSpace +- (void)setTextColor:(UIColor *)textColor { + %orig([kDefaultTextColor colorWithAlphaComponent:0.9]); +} +%end + +%hook UIExtendedSRGBColorSpace +- (void)setTextColor:(UIColor *)textColor { + %orig([kDefaultTextColor colorWithAlphaComponent:1.0]); +} +%end + +%hook UIExtendedGrayColorSpace +- (void)setTextColor:(UIColor *)textColor { + %orig([kDefaultTextColor colorWithAlphaComponent:1.0]); +} +%end + +%hook VideoTitleLabel +- (void)setTextColor:(UIColor *)textColor { + %orig(kDefaultTextColor); +} +%end + +%hook UILabel ++ (void)load { + [[UILabel appearance] setTextColor:kDefaultTextColor]; +} +- (void)setTextColor:(UIColor *)textColor { + %orig(kDefaultTextColor); +} +%end + +%hook UITextField +- (void)setTextColor:(UIColor *)textColor { + %orig(kDefaultTextColor); +} +%end + +%hook UITextView +- (void)setTextColor:(UIColor *)textColor { + %orig(kDefaultTextColor); +} +%end + +%hook UISearchBar +- (void)setTextColor:(UIColor *)textColor { + %orig(kDefaultTextColor); +} +%end + +%hook UISegmentedControl +- (void)setTitleTextAttributes:(NSDictionary *)attributes forState:(UIControlState)state { + NSMutableDictionary *modifiedAttributes = [NSMutableDictionary dictionaryWithDictionary:attributes]; + modifiedAttributes[NSForegroundColorAttributeName] = kDefaultTextColor; + %orig(modifiedAttributes, state); +} +%end + +%hook UIButton +- (void)setTitleColor:(UIColor *)color forState:(UIControlState)state { + %orig(kDefaultTextColor, state); +} +%end + +%hook UIBarButtonItem +- (void)setTitleTextAttributes:(NSDictionary *)attributes forState:(UIControlState)state { + NSMutableDictionary *modifiedAttributes = [NSMutableDictionary dictionaryWithDictionary:attributes]; + modifiedAttributes[NSForegroundColorAttributeName] = kDefaultTextColor; + %orig(modifiedAttributes, state); +} +%end + +%hook NSAttributedString +- (instancetype)initWithString:(NSString *)str attributes:(NSDictionary *)attrs { + NSMutableDictionary *modifiedAttributes = [NSMutableDictionary dictionaryWithDictionary:attrs]; + modifiedAttributes[NSForegroundColorAttributeName] = kDefaultTextColor; + return %orig(str, modifiedAttributes); +} +%end + +%hook CATextLayer +- (void)setTextColor:(CGColorRef)textColor { + %orig(kDefaultTextColor.CGColor); +} +%end + %hook ASTextNode - (NSAttributedString *)attributedString { - NSAttributedString *originalAttributedString = %orig; - NSMutableAttributedString *newAttributedString = [originalAttributedString mutableCopy]; - [newAttributedString addAttribute:NSForegroundColorAttributeName value:[UIColor whiteColor] range:NSMakeRange(0, newAttributedString.length)]; - return newAttributedString; + NSAttributedString *original = %orig; + NSMutableAttributedString *modified = [original mutableCopy]; + [modified addAttribute:NSForegroundColorAttributeName value:kDefaultTextColor range:NSMakeRange(0, modified.length)]; + return modified; } %end + %hook ASTextFieldNode - (void)setTextColor:(UIColor *)textColor { - %orig([UIColor whiteColor]); + %orig(kDefaultTextColor); } %end + %hook ASTextView - (void)setTextColor:(UIColor *)textColor { - %orig([UIColor whiteColor]); + %orig(kDefaultTextColor); } %end + %hook ASButtonNode - (void)setTextColor:(UIColor *)textColor { - %orig([UIColor whiteColor]); + %orig(kDefaultTextColor); } %end + %hook UIControl - (UIColor *)backgroundColor { return [UIColor blackColor]; @@ -623,20 +255,257 @@ UIColor *lcmHexColor; %end %end -# pragma mark - ctor +// Custom Contrast Mode +%group gCustomContrastMode +%hook UIColor ++ (UIColor *)colorNamed:(NSString *)name { + NSArray *targetColors = @[ + @"whiteColor", @"lightTextColor", @"lightGrayColor", @"ychGrey7", + @"skt_chipBackgroundColor", @"placeholderTextColor", @"systemLightGrayColor", + @"systemExtraLightGrayColor", @"labelColor", @"secondaryLabelColor", + @"tertiaryLabelColor", @"quaternaryLabelColor" + ]; + return [targetColors containsObject:name] ? lcmHexColor : %orig; +} + ++ (UIColor *)whiteColor { return lcmHexColor; } ++ (UIColor *)lightTextColor { return lcmHexColor; } ++ (UIColor *)lightGrayColor { return lcmHexColor; } +%end + +%hook YTCommonColorPalette +- (UIColor *)textPrimary { + return self.pageStyle == 1 ? kDefaultTextColor : %orig; +} +- (UIColor *)textSecondary { + return self.pageStyle == 1 ? kDefaultTextColor : %orig; +} +- (UIColor *)overlayTextPrimary { + return self.pageStyle == 1 ? kDefaultTextColor : %orig; +} +- (UIColor *)overlayTextSecondary { + return self.pageStyle == 1 ? kDefaultTextColor : %orig; +} +- (UIColor *)iconActive { + return self.pageStyle == 1 ? kDefaultTextColor : %orig; +} +- (UIColor *)iconActiveOther { + return self.pageStyle == 1 ? kDefaultTextColor : %orig; +} +- (UIColor *)brandIconActive { + return self.pageStyle == 1 ? kDefaultTextColor : %orig; +} +- (UIColor *)staticBrandWhite { + return self.pageStyle == 1 ? kDefaultTextColor : %orig; +} +- (UIColor *)overlayIconActiveOther { + return self.pageStyle == 1 ? kDefaultTextColor : %orig; +} +- (UIColor *)overlayIconInactive { + return self.pageStyle == 1 ? [kDefaultTextColor colorWithAlphaComponent:0.7] : %orig; +} +- (UIColor *)overlayIconDisabled { + return self.pageStyle == 1 ? [kDefaultTextColor colorWithAlphaComponent:0.3] : %orig; +} +- (UIColor *)overlayFilledButtonActive { + return self.pageStyle == 1 ? [kDefaultTextColor colorWithAlphaComponent:0.2] : %orig; +} +%end + +%hook YTColor ++ (BOOL)darkerPaletteTextColorEnabled { return NO; } ++ (UIColor *)white1 { return lcmHexColor; } ++ (UIColor *)white2 { return lcmHexColor; } ++ (UIColor *)white3 { return lcmHexColor; } ++ (UIColor *)white4 { return lcmHexColor; } ++ (UIColor *)white5 { return lcmHexColor; } ++ (UIColor *)grey1 { return lcmHexColor; } ++ (UIColor *)grey2 { return lcmHexColor; } +%end + +%hook _ASDisplayView +- (void)layoutSubviews { + %orig; + NSArray *targetLabels = @[@"connect account", @"Thanks", @"Save to playlist", @"Report"]; + for (UIView *subview in self.subviews) { + if ([targetLabels containsObject:subview.accessibilityLabel]) { + subview.backgroundColor = lcmHexColor; + if ([subview isKindOfClass:[UILabel class]]) { + ((UILabel *)subview).textColor = [UIColor blackColor]; + } + } + } +} +%end + +%hook QTMColorGroup +- (UIColor *)tint100 { return kDefaultTextColor; } +- (UIColor *)tint300 { return kDefaultTextColor; } +- (UIColor *)tint500 { return kDefaultTextColor; } +- (UIColor *)tint700 { return kDefaultTextColor; } +- (UIColor *)accent200 { return kDefaultTextColor; } +- (UIColor *)accent400 { return kDefaultTextColor; } +- (UIColor *)accentColor { return kDefaultTextColor; } +- (UIColor *)brightAccentColor { return kDefaultTextColor; } +- (UIColor *)regularColor { return kDefaultTextColor; } +- (UIColor *)darkerColor { return kDefaultTextColor; } +- (UIColor *)bodyTextColor { return kDefaultTextColor; } +- (UIColor *)lightBodyTextColor { return kDefaultTextColor; } +- (UIColor *)bodyTextColorOnRegularColor { return kDefaultTextColor; } +- (UIColor *)bodyTextColorOnLighterColor { return kDefaultTextColor; } +- (UIColor *)bodyTextColorOnDarkerColor { return kDefaultTextColor; } +- (UIColor *)bodyTextColorOnAccentColor { return kDefaultTextColor; } +- (UIColor *)buttonBackgroundColor { return kDefaultTextColor; } +- (UIColor *)Color { return kDefaultTextColor; } +%end + +%hook YTQTMButton +- (void)setImage:(UIImage *)image { + UIImage *tintedImage = [image imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate]; + [self setTintColor:kDefaultTextColor]; + %orig(tintedImage); +} +%end + +%hook UIExtendedSRGColorSpace +- (void)setTextColor:(UIColor *)textColor { + %orig([kDefaultTextColor colorWithAlphaComponent:0.9]); +} +%end + +%hook UIExtendedSRGBColorSpace +- (void)setTextColor:(UIColor *)textColor { + %orig([kDefaultTextColor colorWithAlphaComponent:1.0]); +} +%end + +%hook UIExtendedGrayColorSpace +- (void)setTextColor:(UIColor *)textColor { + %orig([kDefaultTextColor colorWithAlphaComponent:1.0]); +} +%end + +%hook VideoTitleLabel +- (void)setTextColor:(UIColor *)textColor { + %orig(kDefaultTextColor); +} +%end + +%hook UILabel ++ (void)load { + [[UILabel appearance] setTextColor:kDefaultTextColor]; +} +- (void)setTextColor:(UIColor *)textColor { + %orig(kDefaultTextColor); +} +%end + +%hook UITextField +- (void)setTextColor:(UIColor *)textColor { + %orig(kDefaultTextColor); +} +%end + +%hook UITextView +- (void)setTextColor:(UIColor *)textColor { + %orig(kDefaultTextColor); +} +%end + +%hook UISearchBar +- (void)setTextColor:(UIColor *)textColor { + %orig(kDefaultTextColor); +} +%end + +%hook UISegmentedControl +- (void)setTitleTextAttributes:(NSDictionary *)attributes forState:(UIControlState)state { + NSMutableDictionary *modifiedAttributes = [NSMutableDictionary dictionaryWithDictionary:attributes]; + modifiedAttributes[NSForegroundColorAttributeName] = kDefaultTextColor; + %orig(modifiedAttributes, state); +} +%end + +%hook UIButton +- (void)setTitleColor:(UIColor *)color forState:(UIControlState)state { + %orig(kDefaultTextColor, state); +} +%end + +%hook UIBarButtonItem +- (void)setTitleTextAttributes:(NSDictionary *)attributes forState:(UIControlState)state { + NSMutableDictionary *modifiedAttributes = [NSMutableDictionary dictionaryWithDictionary:attributes]; + modifiedAttributes[NSForegroundColorAttributeName] = kDefaultTextColor; + %orig(modifiedAttributes, state); +} +%end + +%hook NSAttributedString +- (instancetype)initWithString:(NSString *)str attributes:(NSDictionary *)attrs { + NSMutableDictionary *modifiedAttributes = [NSMutableDictionary dictionaryWithDictionary:attrs]; + modifiedAttributes[NSForegroundColorAttributeName] = kDefaultTextColor; + return %orig(str, modifiedAttributes); +} +%end + +%hook CATextLayer +- (void)setTextColor:(CGColorRef)color { + %orig(kDefaultTextColor.CGColor); +} +%end + +%hook ASTextNode +- (NSAttributedString *)attributedString { + NSAttributedString *original = %orig; + NSMutableAttributedString *modified = [original mutableCopy]; + [modified addAttribute:NSForegroundColorAttributeName value:kDefaultTextColor range:NSMakeRange(0, modified.length)]; + return modified; +} +%end + +%hook ASTextFieldNode +- (void)setTextColor:(UIColor *)textColor { + %orig(kDefaultTextColor); +} +%end + +%hook ASTextView +- (void)setTextColor:(UIColor *)textColor { + %orig(kDefaultTextColor); +} +%end + +%hook ASButtonNode +- (void)setTextColor:(UIColor *)textColor { + %orig(kDefaultTextColor); +} +%end + +%hook UIControl +- (UIColor *)backgroundColor { + return [UIColor blackColor]; +} +%end +%end + +// Constructor %ctor { %init; if (lowContrastMode()) { %init(gLowContrastMode); } if (customContrastMode()) { - NSData *lcmColorData = [[NSUserDefaults standardUserDefaults] objectForKey:@"kCustomUIColor"]; - NSKeyedUnarchiver *lcmUnarchiver = [[NSKeyedUnarchiver alloc] initForReadingFromData:lcmColorData error:nil]; - [lcmUnarchiver setRequiresSecureCoding:NO]; - NSString *lcmHexString = [lcmUnarchiver decodeObjectForKey:NSKeyedArchiveRootObjectKey]; - if (lcmHexString != nil) { - lcmHexColor = [lcmUnarchiver decodeObjectForKey:NSKeyedArchiveRootObjectKey]; - %init(gCustomContrastMode); + NSData *colorData = [[NSUserDefaults standardUserDefaults] objectForKey:@"kCustomUIColor"]; + if (colorData) { + NSError *error = nil; + NSKeyedUnarchiver *unarchiver = [[NSKeyedUnarchiver alloc] initForReadingFromData:colorData error:&error]; + if (!error) { + [unarchiver setRequiresSecureCoding:NO]; + lcmHexColor = [unarchiver decodeObjectForKey:NSKeyedArchiveRootObjectKey]; + if (lcmHexColor) { + %init(gCustomContrastMode); + } + } } } } diff --git a/Sources/RootOptionsController.m b/Sources/RootOptionsController.m index 36f85e7..b931f16 100644 --- a/Sources/RootOptionsController.m +++ b/Sources/RootOptionsController.m @@ -4,7 +4,6 @@ @interface RootOptionsController () -- (UIImage *)resizeImage:(UIImage *)image newSize:(CGSize)newSize; @property (strong, nonatomic) UIButton *backButton; @property (assign, nonatomic) UIUserInterfaceStyle pageStyle; @@ -18,36 +17,40 @@ self.title = @"uYouEnhanced Extras Menu"; [self.navigationController.navigationBar setTitleTextAttributes:@{NSFontAttributeName: [UIFont fontWithName:@"YTSans-Bold" size:22], NSForegroundColorAttributeName: [UIColor whiteColor]}]; + [self setupBackButton]; + [self setupTableView]; +} + +- (void)viewDidLayoutSubviews { + [super viewDidLayoutSubviews]; + self.tableView.frame = self.view.bounds; +} + +- (void)setupBackButton { 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 setTintColor:[UIColor systemBlueColor]]; [self.backButton setImage:backImage 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; +} - UITableViewStyle style; - if (@available(iOS 13, *)) { - style = UITableViewStyleInsetGrouped; - } else { - style = UITableViewStyleGrouped; - } - - self.tableView = [[UITableView alloc] initWithFrame:CGRectZero style:style]; +- (void)setupTableView { + self.tableView = [[UITableView alloc] initWithFrame:CGRectZero style:UITableViewStyleInsetGrouped]; self.tableView.translatesAutoresizingMaskIntoConstraints = NO; self.tableView.dataSource = self; self.tableView.delegate = self; [self.view addSubview:self.tableView]; [NSLayoutConstraint activateConstraints:@[ - [self.tableView.centerXAnchor constraintEqualToAnchor:self.view.centerXAnchor], - [self.tableView.centerYAnchor constraintEqualToAnchor:self.view.centerYAnchor], - [self.tableView.widthAnchor constraintEqualToAnchor:self.view.widthAnchor], - [self.tableView.heightAnchor constraintEqualToAnchor:self.view.heightAnchor] + [self.tableView.leadingAnchor constraintEqualToAnchor:self.view.leadingAnchor], + [self.tableView.trailingAnchor constraintEqualToAnchor:self.view.trailingAnchor], + [self.tableView.topAnchor constraintEqualToAnchor:self.view.topAnchor], + [self.tableView.bottomAnchor constraintEqualToAnchor:self.view.bottomAnchor] ]]; } @@ -64,13 +67,7 @@ } - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { - if (section == 0) { - return 2; - } - if (section == 1) { - return 1; - } - return 0; + return (section == 0) ? 2 : 1; } - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { @@ -78,55 +75,67 @@ UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; if (cell == nil) { - cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:@"cell"]; - cell.textLabel.adjustsFontSizeToFitWidth = YES; - cell.detailTextLabel.adjustsFontSizeToFitWidth = YES; - if (self.traitCollection.userInterfaceStyle == UIUserInterfaceStyleLight) { - cell.backgroundColor = [UIColor colorWithRed:1.0 green:1.0 blue:1.0 alpha:1.0]; - cell.textLabel.textColor = [UIColor blackColor]; - cell.detailTextLabel.textColor = [UIColor blackColor]; - } else { - cell.backgroundColor = [UIColor colorWithRed:0.110 green:0.110 blue:0.118 alpha:1.0]; - cell.textLabel.textColor = [UIColor whiteColor]; - cell.textLabel.shadowColor = [UIColor blackColor]; - cell.textLabel.shadowOffset = CGSizeMake(1.0, 1.0); - cell.detailTextLabel.textColor = [UIColor whiteColor]; + cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier]; + } + [self configureCell:cell atIndexPath:indexPath]; + return cell; +} + +- (void)configureCell:(UITableViewCell *)cell atIndexPath:(NSIndexPath *)indexPath { + cell.textLabel.adjustsFontSizeToFitWidth = YES; + cell.textLabel.font = [UIFont systemFontOfSize:18 weight:UIFontWeightRegular]; + cell.detailTextLabel.adjustsFontSizeToFitWidth = YES; + cell.detailTextLabel.font = [UIFont systemFontOfSize:14 weight:UIFontWeightRegular]; + + BOOL isPortrait = UIDevice.currentDevice.orientation == UIDeviceOrientationPortrait; + BOOL isPhone = UIDevice.currentDevice.userInterfaceIdiom == UIUserInterfaceIdiomPhone; + + if (indexPath.section == 0) { + cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator; + if (indexPath.row == 0) { + cell.textLabel.text = @"Custom Theme Color"; + cell.detailTextLabel.text = isPortrait && isPhone ? @"" : @"You must go to uYouEnhanced settings and then go to 'Dark Mode' and set it to 'Custom Dark Mode' for it to work."; + cell.imageView.image = [UIImage systemImageNamed:@"slider.horizontal.3"]; } - if (indexPath.section == 0) { - cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator; - if (indexPath.row == 0) { - cell.textLabel.text = @"Custom Theme Color"; - cell.imageView.image = [UIImage systemImageNamed:@"slider.horizontal.3"]; - cell.imageView.tintColor = cell.textLabel.textColor; - } - if (indexPath.row == 1) { - cell.textLabel.text = @"Custom Tint Color"; - cell.imageView.image = [UIImage systemImageNamed:@"drop.fill"]; - cell.imageView.tintColor = cell.textLabel.textColor; - } + if (indexPath.row == 1) { + cell.textLabel.text = @"Custom Tint Color"; + cell.detailTextLabel.text = isPortrait && isPhone ? @"" : @"You must go to uYouEnhanced settings and have LowContrastMode enabled and then go to 'LowContrastMode Selector' and set it to 'Custom' for it to work."; + cell.imageView.image = [UIImage systemImageNamed:@"drop.fill"]; } - if (indexPath.section == 1) { - if (indexPath.row == 0) { - cell.textLabel.text = @"Clear Cache"; - UILabel *cache = [[UILabel alloc] init]; - cache.text = [self getCacheSize]; - cache.textColor = [UIColor secondaryLabelColor]; - cache.font = [UIFont systemFontOfSize:16]; - cache.textAlignment = NSTextAlignmentRight; - [cache sizeToFit]; - cell.accessoryView = cache; - cell.imageView.image = [UIImage systemImageNamed:@"trash"]; - cell.imageView.tintColor = cell.textLabel.textColor; - } + } else if (indexPath.section == 1) { + if (indexPath.row == 0) { + cell.textLabel.text = @"Clear Cache"; + UILabel *cache = [[UILabel alloc] init]; + cache.text = [self getCacheSize]; + cache.textColor = [UIColor secondaryLabelColor]; + cache.font = [UIFont systemFontOfSize:16]; + cache.textAlignment = NSTextAlignmentRight; + [cache sizeToFit]; + cell.accessoryView = cache; + cell.imageView.image = [UIImage systemImageNamed:@"trash"]; } } - return cell; + + [self applyColorSchemeForCell:cell]; +} + +- (void)applyColorSchemeForCell:(UITableViewCell *)cell { + if (self.traitCollection.userInterfaceStyle == UIUserInterfaceStyleLight) { + cell.backgroundColor = [UIColor whiteColor]; + cell.textLabel.textColor = [UIColor blackColor]; + cell.detailTextLabel.textColor = [UIColor blackColor]; + } else { + cell.backgroundColor = [UIColor colorWithRed:0.110 green:0.110 blue:0.118 alpha:1.0]; + cell.textLabel.textColor = [UIColor whiteColor]; + cell.detailTextLabel.textColor = [UIColor whiteColor]; + } + cell.imageView.tintColor = cell.textLabel.textColor; } - (NSString *)getCacheSize { NSString *cachePath = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES).firstObject; NSArray *filesArray = [[NSFileManager defaultManager] subpathsOfDirectoryAtPath:cachePath error:nil]; - + unsigned long long int folderSize = 0; for (NSString *fileName in filesArray) { NSString *filePath = [cachePath stringByAppendingPathComponent:fileName]; diff --git a/Sources/SettingsKeys.h b/Sources/SettingsKeys.h index 0a74fac..1b50b2f 100644 --- a/Sources/SettingsKeys.h +++ b/Sources/SettingsKeys.h @@ -5,7 +5,7 @@ // 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, + 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, kDisableModernButtons, kDisableRoundedHints, kDisableModernFlags, kYTNoModernUI, kEnableVersionSpoofer, kGoogleSignInPatch, kAdBlockWorkaroundLite, kAdBlockWorkaround, kYouTabFakePremium, kDisableAnimatedYouTubeLogo, kCenterYouTubeLogo, kHideYouTubeLogo, kYTStartupAnimation, kDisableHints, kStickNavigationBar, kHideiSponsorBlockButton, kHideChipBar, kShowNotificationsTab, 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 diff --git a/Sources/YTReExplore.x b/Sources/YTReExplore.x index 34f17c5..45c044b 100644 --- a/Sources/YTReExplore.x +++ b/Sources/YTReExplore.x @@ -35,6 +35,12 @@ static void replaceTab(YTIGuideResponse *response) { %orig(response, error, completion); } %end +%hook YTAppGuideServiceCoordinator +- (void)handleResponse:(YTIGuideResponse *)response error:(id)error completion:(id)completion { + replaceTab(response); + %orig; +} +%end %end %ctor { diff --git a/Sources/uYouPlus.h b/Sources/uYouPlus.h index 325240f..8099518 100644 --- a/Sources/uYouPlus.h +++ b/Sources/uYouPlus.h @@ -1,3 +1,4 @@ +#import #import #import #import @@ -18,6 +19,7 @@ #import #import #import +#import #import #import #import @@ -32,6 +34,8 @@ #import #import #import +#import +#import #import #import #import @@ -44,8 +48,8 @@ #import #import #import -#import -#import + #import +#import #import #import #import @@ -143,7 +147,6 @@ static NSString *const kHidePremiumPromos = @"hidePremiumPromos_enabled"; 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"; @@ -162,6 +165,7 @@ 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 kShowNotificationsTab = @"showNotificationsTab_enabled"; static NSString *const kHidePlayNextInQueue = @"hidePlayNextInQueue_enabled"; static NSString *const kHideCommunityPosts = @"hideCommunityPosts_enabled"; static NSString *const kHideChannelHeaderLinks = @"hideChannelHeaderLinks_enabled"; @@ -303,11 +307,6 @@ static NSString *const kGoogleSigninFix = @"googleSigninFix_enabled"; - (void)settingsAction; @end -// YTSpeed -@interface YTVarispeedSwitchControllerOption : NSObject -- (id)initWithTitle:(id)title rate:(float)rate; -@end - @interface MLHAMQueuePlayer : NSObject @property id playerEventCenter; @property id delegate; @@ -316,10 +315,7 @@ static NSString *const kGoogleSigninFix = @"googleSigninFix_enabled"; @end // MLPlayerStickySettings Header has been moved to https://github.com/arichornloverALT/YouTubeHeader/blob/main/MLPlayerStickySettings.h - -@interface MLPlayerEventCenter : NSObject -- (void)broadcastRateChange:(float)rate; -@end +// MLPlayerEventCenter Header has been moved to https://github.com/PoomSmart/YouTubeHeader/blob/main/MLPlayerEventCenter.h @interface HAMPlayerInternal : NSObject - (void)setRate:(float)rate; diff --git a/Sources/uYouPlus.xm b/Sources/uYouPlus.xm index c29794e..4f36219 100644 --- a/Sources/uYouPlus.xm +++ b/Sources/uYouPlus.xm @@ -17,6 +17,104 @@ NSBundle *uYouPlusBundle() { NSBundle *tweakBundle = uYouPlusBundle(); // +// Notifications Tab appearance +UIImage *resizeImage(UIImage *image, CGSize newSize) { + UIGraphicsBeginImageContextWithOptions(newSize, NO, 0.0); + [image drawInRect:CGRectMake(0, 0, newSize.width, newSize.height)]; + UIImage *resizedImage = UIGraphicsGetImageFromCurrentImageContext(); + UIGraphicsEndImageContext(); + return resizedImage; +} + +static int getNotificationIconStyle() { + return [[NSUserDefaults standardUserDefaults] integerForKey:@"notificationIconStyle"]; +} + +// Notifications Tab - @arichornlover & @dayanch96 +%group gShowNotificationsTab +%hook YTAppPivotBarItemStyle +- (UIImage *)pivotBarItemIconImageWithIconType:(int)type color:(UIColor *)color useNewIcons:(BOOL)isNew selected:(BOOL)isSelected { + NSString *imageName; + UIColor *iconColor; + switch (getNotificationIconStyle()) { + case 1: // Thin outline style (2020+) + imageName = isSelected ? @"notifications_selected" : @"notifications_24pt"; + iconColor = [%c(YTColor) white1]; + break; + case 2: // Filled style (2018+) + imageName = @"notifications_selected"; + iconColor = isSelected ? [%c(YTColor) white1] : [UIColor grayColor]; + break; + case 3: // Inbox style (2014+) + imageName = @"inbox_selected"; + iconColor = isSelected ? [%c(YTColor) white1] : [UIColor grayColor]; + break; + default: // Default style + imageName = isSelected ? @"notifications_selected" : @"notifications_unselected"; + iconColor = [%c(YTColor) white1]; + break; + } + NSString *imagePath = [tweakBundle pathForResource:imageName ofType:@"png" inDirectory:@"UI"]; + UIImage *image = [UIImage imageWithContentsOfFile:imagePath]; + CGSize newSize = CGSizeMake(24, 24); + image = resizeImage(image, newSize); + image = [%c(QTMIcon) tintImage:image color:iconColor]; + return type == YT_NOTIFICATIONS ? image : %orig; +} +%end +%hook YTPivotBarView +- (void)setRenderer:(YTIPivotBarRenderer *)renderer { + @try { + YTIBrowseEndpoint *endPoint = [[%c(YTIBrowseEndpoint) alloc] init]; + [endPoint setBrowseId:@"FEnotifications_inbox"]; + YTICommand *command = [[%c(YTICommand) alloc] init]; + [command setBrowseEndpoint:endPoint]; + + YTIPivotBarItemRenderer *itemBar = [[%c(YTIPivotBarItemRenderer) alloc] init]; + [itemBar setPivotIdentifier:@"FEnotifications_inbox"]; + YTIIcon *icon = [itemBar icon]; + [icon setIconType:YT_NOTIFICATIONS]; + [itemBar setNavigationEndpoint:command]; + + YTIFormattedString *formatString; + if (getNotificationIconStyle() == 3) { + formatString = [%c(YTIFormattedString) formattedStringWithString:@"Inbox"]; + } else { + formatString = [%c(YTIFormattedString) formattedStringWithString:@"Notifications"]; + } + [itemBar setTitle:formatString]; + + YTIPivotBarSupportedRenderers *barSupport = [[%c(YTIPivotBarSupportedRenderers) alloc] init]; + [barSupport setPivotBarItemRenderer:itemBar]; + + [renderer.itemsArray addObject:barSupport]; + } @catch (NSException *exception) { + NSLog(@"Error setting renderer: %@", exception.reason); + } + %orig(renderer); +} +%end +%hook YTBrowseViewController +- (void)viewDidLoad { + %orig; + @try { + YTICommand *navEndpoint = [self valueForKey:@"_navEndpoint"]; + if ([navEndpoint.browseEndpoint.browseId isEqualToString:@"FEnotifications_inbox"]) { + UIViewController *notificationsViewController = [[UIViewController alloc] init]; + [self addChildViewController:notificationsViewController]; + // FIXME: View issues + [notificationsViewController.view setFrame:CGRectMake(0.0f, 0.0f, self.view.frame.size.width, self.view.frame.size.height)]; + [self.view addSubview:notificationsViewController.view]; + [self.view endEditing:YES]; + [notificationsViewController didMoveToParentViewController:self]; + } + } @catch (NSException *exception) { + NSLog(@"Cannot show notifications view controller: %@", exception.reason); + } +} +%end +%end + // LEGACY VERSION ⚠️ // Hide the (Connect / Thanks / Save / Report) Buttons under the Video Player - 17.33.2 and up - @arichornlover (inspired by @PoomSmart's version) %hook _ASDisplayView @@ -175,7 +273,7 @@ YTMainAppControlsOverlayView *controlsOverlayView; } %end -// Fixes uYou crash when trying to play video (qnblackcat/#1422) - @Dayanch96 +// Fixes uYou crash when trying to play video (#1422) %hook YTPlayerOverlayManager %property (nonatomic, assign) float currentPlaybackRate; @@ -222,6 +320,23 @@ YTMainAppControlsOverlayView *controlsOverlayView; %hook YTIPlayerResponse - (BOOL)isMonetized { return NO; } +%new(@@:) +- (NSMutableArray *)playerAdsArray { + return [NSMutableArray array]; +} +%new(@@:) +- (NSMutableArray *)adSlotsArray { + return [NSMutableArray array]; +} +%end + +%hook YTIClientMdxGlobalConfig +%new(B@:) +- (BOOL)enableSkippableAd { return YES; } +%end + +%hook YTHotConfig +- (BOOL)clientInfraClientConfigIosEnableFillingEncodedHacksInnertubeContext { return NO; } %end %hook YTAdShieldUtils @@ -230,7 +345,7 @@ YTMainAppControlsOverlayView *controlsOverlayView; %end %hook YTDataUtils -+ (id)spamSignalsDictionary { return @{}; } ++ (id)spamSignalsDictionary { return @{ @"ms": @"" }; } + (id)spamSignalsDictionaryWithoutIDFA { return @{}; } %end @@ -251,11 +366,11 @@ YTMainAppControlsOverlayView *controlsOverlayView; %end %hook YTReelInfinitePlaybackDataSource -- (void)setReels:(NSMutableOrderedSet *)reels { - [reels removeObjectsAtIndexes:[reels indexesOfObjectsPassingTest:^BOOL(YTReelModel *obj, NSUInteger idx, BOOL *stop) { - return [obj respondsToSelector:@selector(videoType)] ? obj.videoType == 3 : NO; - }]]; - %orig; +- (YTReelModel *)makeContentModelForEntry:(id)entry { + YTReelModel *model = %orig; + if ([model respondsToSelector:@selector(videoType)] && model.videoType == 3) + return nil; + return model; } %end %end @@ -268,13 +383,28 @@ YTMainAppControlsOverlayView *controlsOverlayView; %end %hook YTIPlayerResponse - (BOOL)isMonetized { return NO; } +%new(@@:) +- (NSMutableArray *)playerAdsArray { + return [NSMutableArray array]; +} +%new(@@:) +- (NSMutableArray *)adSlotsArray { + return [NSMutableArray array]; +} +%end +%hook YTIClientMdxGlobalConfig +%new(B@:) +- (BOOL)enableSkippableAd { return YES; } +%end +%hook YTHotConfig +- (BOOL)clientInfraClientConfigIosEnableFillingEncodedHacksInnertubeContext { return NO; } %end %hook YTAdShieldUtils + (id)spamSignalsDictionary { return @{}; } + (id)spamSignalsDictionaryWithoutIDFA { return @{}; } %end %hook YTDataUtils -+ (id)spamSignalsDictionary { return @{}; } ++ (id)spamSignalsDictionary { return @{ @"ms": @"" }; } + (id)spamSignalsDictionaryWithoutIDFA { return @{}; } %end %hook YTAdsInnerTubeContextDecorator @@ -289,7 +419,21 @@ YTMainAppControlsOverlayView *controlsOverlayView; %hook MDXSession - (void)adPlaying:(id)ad {} %end +%hook YTReelDataSource +- (YTReelModel *)makeContentModelForEntry:(id)entry { + YTReelModel *model = %orig; + if ([model respondsToSelector:@selector(videoType)] && model.videoType == 3) + return nil; + return model; +} +%end %hook YTReelInfinitePlaybackDataSource +- (YTReelModel *)makeContentModelForEntry:(id)entry { + YTReelModel *model = %orig; + if ([model respondsToSelector:@selector(videoType)] && model.videoType == 3) + return nil; + return model; +} - (void)setReels:(NSMutableOrderedSet *)reels { [reels removeObjectsAtIndexes:[reels indexesOfObjectsPassingTest:^BOOL(YTReelModel *obj, NSUInteger idx, BOOL *stop) { return [obj respondsToSelector:@selector(videoType)] ? obj.videoType == 3 : NO; @@ -298,42 +442,29 @@ YTMainAppControlsOverlayView *controlsOverlayView; } %end NSString *getAdString(NSString *description) { - if ([description containsString:@"brand_promo"]) - return @"brand_promo"; - if ([description containsString:@"carousel_footered_layout"]) - return @"carousel_footered_layout"; - if ([description containsString:@"carousel_headered_layout"]) - return @"carousel_headered_layout"; - if ([description containsString:@"feed_ad_metadata"]) - return @"feed_ad_metadata"; - if ([description containsString:@"full_width_portrait_image_layout"]) - return @"full_width_portrait_image_layout"; - if ([description containsString:@"full_width_square_image_layout"]) - return @"full_width_square_image_layout"; - if ([description containsString:@"landscape_image_wide_button_layout"]) - return @"landscape_image_wide_button_layout"; - if ([description containsString:@"post_shelf"]) - return @"post_shelf"; - if ([description containsString:@"product_carousel"]) - return @"product_carousel"; - if ([description containsString:@"product_engagement_panel"]) - return @"product_engagement_panel"; - if ([description containsString:@"product_item"]) - return @"product_item"; - if ([description containsString:@"shopping_carousel"]) - return @"shopping_carousel"; - if ([description containsString:@"statement_banner"]) - return @"statement_banner"; - if ([description containsString:@"square_image_layout"]) - return @"square_image_layout"; - if ([description containsString:@"text_image_button_layout"]) - return @"text_image_button_layout"; - if ([description containsString:@"text_search_ad"]) - return @"text_search_ad"; - if ([description containsString:@"video_display_full_layout"]) - return @"video_display_full_layout"; - if ([description containsString:@"video_display_full_buttoned_layout"]) - return @"video_display_full_buttoned_layout"; + for (NSString *str in @[ @"brand_promo", + @"carousel_footered_layout", + @"carousel_headered_layout", + @"eml.expandable_metadata", + @"feed_ad_metadata", + @"full_width_portrait_image_layout", + @"full_width_square_image_layout", + @"landscape_image_wide_button_layout", + @"post_shelf", + @"product_carousel", + @"product_engagement_panel", + @"product_item", + @"shopping_carousel", + @"shopping_item_card_list", + @"statement_banner", + @"square_image_layout", + @"text_image_button_layout", + @"text_search_ad", + @"video_display_full_layout", + @"video_display_full_buttoned_layout" + ]) + if ([description containsString:str]) return str; + return nil; } static BOOL isAdRenderer(YTIElementRenderer *elementRenderer, int kind) { @@ -352,6 +483,16 @@ static BOOL isAdRenderer(YTIElementRenderer *elementRenderer, int kind) { static NSMutableArray *filteredArray(NSArray *array) { NSMutableArray *newArray = [array mutableCopy]; NSIndexSet *removeIndexes = [newArray indexesOfObjectsPassingTest:^BOOL(YTIItemSectionRenderer *sectionRenderer, NSUInteger idx, BOOL *stop) { + if ([sectionRenderer isKindOfClass:%c(YTIShelfRenderer)]) { + YTIShelfSupportedRenderers *content = ((YTIShelfRenderer *)sectionRenderer).content; + YTIHorizontalListRenderer *horizontalListRenderer = content.horizontalListRenderer; + NSMutableArray *itemsArray = horizontalListRenderer.itemsArray; + NSIndexSet *removeItemsArrayIndexes = [itemsArray indexesOfObjectsPassingTest:^BOOL(YTIHorizontalListSupportedRenderers *horizontalListSupportedRenderers, NSUInteger idx2, BOOL *stop2) { + YTIElementRenderer *elementRenderer = horizontalListSupportedRenderers.elementRenderer; + return isAdRenderer(elementRenderer, 4); + }]; + [itemsArray removeObjectsAtIndexes:removeItemsArrayIndexes]; + } if (![sectionRenderer isKindOfClass:%c(YTIItemSectionRenderer)]) return NO; NSMutableArray *contentsArray = sectionRenderer.contentsArray; @@ -369,6 +510,13 @@ static NSMutableArray *filteredArray(NSArray *filteredArray(NSArray *filteredArray(NSArray *filteredArray(NSArray *filteredArray(NSArray *filteredArray(NSArray *filteredArray(NSArray *filteredArray(NSArray #import #import +#import #import #import #import diff --git a/Sources/uYouPlusPatches.xm b/Sources/uYouPlusPatches.xm index 51c8112..5b41be9 100644 --- a/Sources/uYouPlusPatches.xm +++ b/Sources/uYouPlusPatches.xm @@ -99,7 +99,8 @@ typedef NS_ENUM(NSInteger, ShareEntityType) { ShareEntityFieldPlaylist = 2, ShareEntityFieldChannel = 3, ShareEntityFieldPost = 6, - ShareEntityFieldClip = 8 + ShareEntityFieldClip = 8, + ShareEntityFieldShortFlag = 10 }; static inline NSString* extractIdWithFormat(GPBUnknownFields *fields, NSInteger fieldNumber, NSString *format) { @@ -137,8 +138,12 @@ static BOOL showNativeShareSheet(NSString *serializedShareEntity, UIView *source } } - if (!shareUrl) - shareUrl = extractIdWithFormat(fields, ShareEntityFieldVideo, @"https://youtube.com/watch?v=%@"); + if (!shareUrl) { + NSString *format = @"https://youtube.com/watch?v=%@"; + if ([fields fields:ShareEntityFieldShortFlag]) + format = @"https://youtube.com/shorts/%@"; + shareUrl = extractIdWithFormat(fields, ShareEntityFieldVideo, format); + } if (!shareUrl) shareUrl = extractIdWithFormat(fields, ShareEntityFieldPost, @"https://youtube.com/post/%@"); @@ -390,6 +395,17 @@ static void refreshUYouAppearance() { } %end +%hook YTPlayerViewController + + - (id)varispeedController { + id controller = %orig; + if (controller == nil && [self respondsToSelector:@selector(overlayManager)]) + controller = [self.overlayManager varispeedController]; + return controller; + } + + %end + %ctor { %init; if (IS_ENABLED(kGoogleSignInPatch)) { diff --git a/Sources/uYouPlusSettings.h b/Sources/uYouPlusSettings.h index 5eab59b..f27f4b2 100644 --- a/Sources/uYouPlusSettings.h +++ b/Sources/uYouPlusSettings.h @@ -4,8 +4,15 @@ #import #import #import +#import #import "uYouPlus.h" +// custom +@interface YTSettingsCell () +- (void)setIndicatorIcon:(int)icon; +- (void)setTitleDescription:(id)titleDescription; +@end + // For displaying snackbars @interface YTHUDMessage : NSObject + (id)messageWithText:(id)text; diff --git a/Sources/uYouPlusSettings.xm b/Sources/uYouPlusSettings.xm index d7f0667..85fd794 100644 --- a/Sources/uYouPlusSettings.xm +++ b/Sources/uYouPlusSettings.xm @@ -10,6 +10,13 @@ #define SECTION_HEADER(s) [sectionItems addObject:[%c(YTSettingsSectionItem) itemWithTitle:@"\t" titleDescription:[s uppercaseString] accessibilityIdentifier:nil detailTextBlock:nil selectBlock:^BOOL (YTSettingsCell *cell, NSUInteger sectionItemIndex) { return NO; }]] +#define SPOOFER_VERSION(version, index) \ + [YTSettingsSectionItemClass checkmarkItemWithTitle:version titleDescription:nil selectBlock:^BOOL (YTSettingsCell *cell, NSUInteger arg1) { \ + [[NSUserDefaults standardUserDefaults] setInteger:index forKey:@"versionSpoofer"]; \ + [settingsViewController reloadData]; \ + return YES; \ + }] + // Basic Switch #define SWITCH(title, description, key, ...) \ [sectionItems addObject:[%c(YTSettingsSectionItem) \ @@ -64,6 +71,22 @@ SWITCH3( ); */ +static NSString *GetCacheSize() { // YTLite - @dayanch96 + NSString *cachePath = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES).firstObject; + NSArray *filesArray = [[NSFileManager defaultManager] subpathsOfDirectoryAtPath:cachePath error:nil]; + + unsigned long long int folderSize = 0; + for (NSString *fileName in filesArray) { + NSString *filePath = [cachePath stringByAppendingPathComponent:fileName]; + NSDictionary *fileAttributes = [[NSFileManager defaultManager] attributesOfItemAtPath:filePath error:nil]; + folderSize += [fileAttributes fileSize]; + } + + NSByteCountFormatter *formatter = [[NSByteCountFormatter alloc] init]; + formatter.countStyle = NSByteCountFormatterCountStyleFile; + + return [formatter stringFromByteCount:folderSize]; +} static int contrastMode() { NSString *appVersion = [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleShortVersionString"]; NSComparisonResult result1 = [appVersion compare:@"17.33.2" options:NSNumericSearch]; @@ -75,9 +98,12 @@ static int contrastMode() { return 0; } } -static int appVersionSpoofer() { +static int appVersionSpoofer() { // App Version Spoofer return [[NSUserDefaults standardUserDefaults] integerForKey:@"versionSpoofer"]; } +static int getNotificationIconStyle() { // Notifications Tab + return [[NSUserDefaults standardUserDefaults] integerForKey:@"notificationIconStyle"]; +} static const NSInteger uYouPlusSection = 500; @interface YTSettingsSectionItemManager (uYouPlus) @@ -172,7 +198,7 @@ extern NSBundle *uYouPlusBundle(); ]; [sectionItems addObject:developers]; -# pragma mark - Copy and Paste Settings +# pragma mark - Copy/Export and Paste/Import Settings YTSettingsSectionItem *copySettings = [%c(YTSettingsSectionItem) itemWithTitle:IS_ENABLED(kReplaceCopyandPasteButtons) ? LOC(@"EXPORT_SETTINGS") : LOC(@"COPY_SETTINGS") titleDescription:IS_ENABLED(kReplaceCopyandPasteButtons) ? LOC(@"EXPORT_SETTINGS_DESC") : LOC(@"COPY_SETTINGS_DESC") @@ -234,6 +260,7 @@ extern NSBundle *uYouPlusBundle(); // Import Settings functionality UIDocumentPickerViewController *documentPicker = [[UIDocumentPickerViewController alloc] initWithDocumentTypes:@[@"public.text"] inMode:UIDocumentPickerModeImport]; documentPicker.allowsMultipleSelection = NO; + documentPicker.delegate = self; [settingsViewController presentViewController:documentPicker animated:YES completion:nil]; return YES; } else { @@ -314,18 +341,24 @@ extern NSBundle *uYouPlusBundle(); ]; [sectionItems addObject:appIcon]; - YTSettingsSectionItem *clearNotifications = [%c(YTSettingsSectionItem) - itemWithTitle:LOC(@"CLEAR_NOTIFICATIONS") - titleDescription:LOC(@"CLEAR_NOTIFICATIONS_DESC") +NSString *cacheDescription = [NSString stringWithFormat:@"%@", GetCacheSize()]; + YTSettingsSectionItem *clearCache = [%c(YTSettingsSectionItem) + itemWithTitle:@"Clear Cache" + titleDescription:cacheDescription accessibilityIdentifier:nil detailTextBlock:nil selectBlock:^BOOL (YTSettingsCell *cell, NSUInteger arg1) { - [[UIApplication sharedApplication] cancelAllLocalNotifications]; - [[UIApplication sharedApplication] setApplicationIconBadgeNumber:0]; + dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ + NSString *cachePath = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES).firstObject; + [[NSFileManager defaultManager] removeItemAtPath:cachePath error:nil]; + dispatch_async(dispatch_get_main_queue(), ^{ + [[%c(YTToastResponderEvent) eventWithMessage:LOC(@"Done") firstResponder:[self parentResponder]] send]; + }); + }); return YES; } ]; - [sectionItems addObject:clearNotifications]; + [sectionItems addObject:clearCache]; # pragma mark - App theme SECTION_HEADER(LOC(@"THEME_OPTIONS")); @@ -537,23 +570,35 @@ extern NSBundle *uYouPlusBundle(); NSComparisonResult result1 = [appVersion compare:@"17.33.2" options:NSNumericSearch]; NSComparisonResult result2 = [appVersion compare:@"17.38.10" options:NSNumericSearch]; if (result1 == NSOrderedAscending) { - UIAlertController *alert = [UIAlertController alertControllerWithTitle:@"Discontinued" message:[NSString stringWithFormat:@"You are using v%@ which is a discontinued version of YouTube that no longer works. Please use v17.33.2-17.38.10 in order to use LowContrastMode.", appVersion] preferredStyle:UIAlertControllerStyleAlert]; - UIAlertAction *okAction = [UIAlertAction actionWithTitle:@"OK" style:UIAlertActionStyleDefault handler:nil]; + UIAlertController *alert = [UIAlertController alertControllerWithTitle:@"Discontinued Version" message:[NSString stringWithFormat:@"You are using v%@, a discontinued version of YouTube that may not work with LowContrastMode. Supported versions are v17.33.2-v17.38.10. Enable anyway?", appVersion] preferredStyle:UIAlertControllerStyleAlert]; + UIAlertAction *okAction = [UIAlertAction actionWithTitle:@"Enable" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) { + [[NSUserDefaults standardUserDefaults] setBool:enable forKey:kLowContrastMode]; + [settingsViewController reloadData]; + SHOW_RELAUNCH_YT_SNACKBAR; + }]; + UIAlertAction *cancelAction = [UIAlertAction actionWithTitle:@"Cancel" style:UIAlertActionStyleCancel handler:nil]; [alert addAction:okAction]; + [alert addAction:cancelAction]; [settingsViewController presentViewController:alert animated:YES completion:nil]; return NO; } else if (result2 == NSOrderedDescending) { - UIAlertController *alert = [UIAlertController alertControllerWithTitle:@"Incompatible" message:[NSString stringWithFormat:@"LowContrastMode is only available for app versions v17.33.2-v17.38.10. \nYou are currently using v%@. \nWorkaround: if you want to use this then I recommend enabling \"Fix LowContrastMode\" Option.", appVersion] preferredStyle:UIAlertControllerStyleAlert]; + UIAlertController *alert = [UIAlertController alertControllerWithTitle:@"Incompatible Version" message:[NSString stringWithFormat:@"LowContrastMode is only available for app versions v17.33.2-v17.38.10. You are using v%@. Enable anyway?", appVersion] preferredStyle:UIAlertControllerStyleAlert]; + UIAlertAction *okAction = [UIAlertAction actionWithTitle:@"Enable" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) { + [[NSUserDefaults standardUserDefaults] setBool:enable forKey:kLowContrastMode]; + [settingsViewController reloadData]; + SHOW_RELAUNCH_YT_SNACKBAR; + }]; + UIAlertAction *cancelAction = [UIAlertAction actionWithTitle:@"Cancel" style:UIAlertActionStyleCancel handler:nil]; + [alert addAction:okAction]; + [alert addAction:cancelAction]; + [settingsViewController presentViewController:alert animated:YES completion:nil]; + return NO; + } else if (UIScreen.mainScreen.traitCollection.userInterfaceStyle != UIUserInterfaceStyleDark) { + UIAlertController *alert = [UIAlertController alertControllerWithTitle:@"Light Mode Detected" message:@"LowContrastMode is only available in Dark Mode. Please switch to Dark Mode to be able to use LowContrastMode." preferredStyle:UIAlertControllerStyleAlert]; UIAlertAction *okAction = [UIAlertAction actionWithTitle:@"OK" style:UIAlertActionStyleDefault handler:nil]; [alert addAction:okAction]; [settingsViewController presentViewController:alert animated:YES completion:nil]; return NO; - } else if (UIScreen.mainScreen.traitCollection.userInterfaceStyle != UIUserInterfaceStyleDark) { - UIAlertController *alert = [UIAlertController alertControllerWithTitle:@"Light Mode Detected" message:@"LowContrastMode is only available in Dark Mode. Please switch to Dark Mode to be able to use LowContrastMode." preferredStyle:UIAlertControllerStyleAlert]; - UIAlertAction *okAction = [UIAlertAction actionWithTitle:@"OK" style:UIAlertActionStyleDefault handler:nil]; - [alert addAction:okAction]; - [settingsViewController presentViewController:alert animated:YES completion:nil]; - return NO; } } [[NSUserDefaults standardUserDefaults] setBool:enable forKey:kLowContrastMode]; @@ -607,7 +652,6 @@ extern NSBundle *uYouPlusBundle(); ]; [sectionItems addObject:lowContrastModeButton]; SWITCH2(LOC(@"CLASSIC_VIDEO_PLAYER"), LOC(@"CLASSIC_VIDEO_PLAYER_DESC"), kClassicVideoPlayer); - SWITCH2(LOC(@"FIX_LOWCONTRASTMODE"), LOC(@"FIX_LOWCONTRASTMODE_DESC"), kFixLowContrastMode); SWITCH2(LOC(@"DISABLE_MODERN_BUTTONS"), LOC(@"DISABLE_MODERN_BUTTONS_DESC"), kDisableModernButtons); SWITCH2(LOC(@"DISABLE_ROUNDED_CORNERS_ON_HINTS"), LOC(@"DISABLE_ROUNDED_CORNERS_ON_HINTS_DESC"), kDisableRoundedHints); SWITCH2(LOC(@"DISABLE_MODERN_FLAGS"), LOC(@"DISABLE_MODERN_FLAGS_DESC"), kDisableModernFlags); @@ -629,836 +673,308 @@ extern NSBundle *uYouPlusBundle(); }); ); SWITCH2(LOC(@"ENABLE_APP_VERSION_SPOOFER"), LOC(@"ENABLE_APP_VERSION_SPOOFER_DESC"), kEnableVersionSpoofer); - YTSettingsSectionItem *versionSpoofer = [%c(YTSettingsSectionItem) itemWithTitle:LOC(@"VERSION_SPOOFER_SELECTOR") accessibilityIdentifier:nil detailTextBlock:^NSString *() { switch (appVersionSpoofer()) { - case 1: - return @"v19.39.1"; - case 2: - return @"v19.38.2"; - case 3: - return @"v19.37.2"; - case 4: - return @"v19.36.1"; - case 5: - return @"v19.35.3"; - case 6: - return @"v19.34.2"; - case 7: - return @"v19.33.2"; - case 8: - return @"v19.32.8"; - case 9: - return @"v19.32.6"; - case 10: - return @"v19.31.4"; - case 11: - return @"v19.30.2"; - case 12: - return @"v19.29.1"; - case 13: - return @"v19.28.1"; - case 14: - return @"v19.26.5"; - case 15: - return @"v19.25.4"; - case 16: - return @"v19.25.3"; - case 17: - return @"v19.24.3"; - case 18: - return @"v19.24.2"; - case 19: - return @"v19.23.3"; - case 20: - return @"v19.22.6"; - case 21: - return @"v19.22.3"; - case 22: - return @"v19.21.3"; - case 23: - return @"v19.21.2"; - case 24: - return @"v19.20.2"; - case 25: - return @"v19.19.7"; - case 26: - return @"v19.19.5"; - case 27: - return @"v19.18.2"; - case 28: - return @"v19.17.2"; - case 29: - return @"v19.16.3"; - case 30: - return @"v19.15.1"; - case 31: - return @"v19.14.3"; - case 32: - return @"v19.14.2"; - case 33: - return @"v19.13.1"; - case 34: - return @"v19.12.3"; - case 35: - return @"v19.10.7"; - case 36: - return @"v19.10.6"; - case 37: - return @"v19.10.5"; - case 38: - return @"v19.09.4"; - case 39: - return @"v19.09.3"; - case 40: - return @"v19.08.2"; - case 41: - return @"v19.07.5"; - case 42: - return @"v19.07.4"; - case 43: - return @"v19.06.2"; - case 44: - return @"v19.05.5"; - case 45: - return @"v19.05.3"; - case 46: - return @"v19.04.3"; - case 47: - return @"v19.03.2"; - case 48: - return @"v19.02.1"; - case 49: - return @"v19.01.1"; - case 50: - return @"v18.49.3"; - case 51: - return @"v18.48.3"; - case 52: - return @"v18.46.3"; - case 53: - return @"v18.45.2"; - case 54: - return @"v18.44.3"; - case 55: - return @"v18.43.4"; - case 56: - return @"v18.41.5"; - case 57: - return @"v18.41.3"; - case 58: - return @"v18.41.2"; - case 59: - return @"v18.40.1"; - case 60: - return @"v18.39.1"; - case 61: - return @"v18.38.2"; - case 62: - return @"v18.35.4"; - case 63: - return @"v18.34.5"; - case 64: - return @"v18.33.3"; - case 65: - return @"v18.33.2"; - case 66: - return @"v18.32.2"; - case 67: - return @"v18.31.3"; - case 68: - return @"v18.30.7"; - case 69: - return @"v18.30.6"; - case 70: - return @"v18.29.1"; - case 71: - return @"v18.28.3"; - case 72: - return @"v18.27.3"; - case 73: - return @"v18.25.1"; - case 74: - return @"v18.23.3"; - case 75: - return @"v18.22.9"; - case 76: - return @"v18.21.3"; - case 77: - return @"v18.20.3"; - case 78: - return @"v18.19.1"; - case 79: - return @"v18.18.2"; - case 80: - return @"v18.17.2"; - case 81: - return @"v18.16.2"; - case 82: - return @"v18.15.1"; - case 83: - return @"v18.14.1"; - case 84: - return @"v18.13.4"; - case 85: - return @"v18.12.2"; - case 86: - return @"v18.11.2"; - case 87: - return @"v18.10.1"; - case 88: - return @"v18.09.4"; - case 89: - return @"v18.08.1"; - case 90: - return @"v18.07.5"; - case 91: - return @"v18.05.2"; - case 92: - return @"v18.04.3"; - case 93: - return @"v18.03.3"; - case 94: - return @"v18.02.03"; - case 95: - return @"v18.01.6"; - case 96: - return @"v18.01.4"; - case 97: - return @"v18.01.2"; - case 98: - return @"v17.49.6"; - case 99: - return @"v17.49.4"; - case 100: - return @"v17.46.4"; - case 101: - return @"v17.45.1"; - case 102: - return @"v17.44.4"; - case 103: - return @"v17.43.1"; - case 104: - return @"v17.42.7"; - case 105: - return @"v17.42.6"; - case 106: - return @"v17.41.2"; - case 107: - return @"v17.40.5"; - case 108: - return @"v17.39.4"; - case 109: - return @"v17.38.10"; - case 110: - return @"v17.38.9"; - case 111: - return @"v17.37.2"; - case 112: - return @"v17.36.4"; - case 113: - return @"v17.36.3"; - case 114: - return @"v17.35.3"; - case 115: - return @"v17.34.3"; - case 116: - return @"v17.33.2"; case 0: - default: + return @"v20.33.2"; + case 1: + return @"v20.32.5"; + case 2: + return @"v20.32.4"; + case 3: + return @"v20.31.6"; + case 4: + return @"v20.31.5"; + case 5: + return @"v20.30.5"; + case 6: + return @"v20.29.3"; + case 7: + return @"v20.28.2"; + case 8: + return @"v20.26.7"; + case 9: + return @"v20.25.4"; + case 10: + return @"v20.24.5"; + case 11: + return @"v20.24.4"; + case 12: + return @"v20.23.3"; + case 13: + return @"v20.22.1"; + case 14: + return @"v20.21.6"; + case 15: + return @"v20.20.7"; + case 16: + return @"v20.20.5"; + case 17: + return @"v20.19.3"; + case 18: + return @"v20.19.2"; + case 19: + return @"v20.18.5"; + case 20: + return @"v20.18.4"; + case 21: + return @"v20.16.7"; + case 22: + return @"v20.15.1"; + case 23: + return @"v20.14.2"; + case 24: + return @"v20.13.5"; + case 25: + return @"v20.12.4"; + case 26: + return @"v20.11.6"; + case 27: + return @"v20.10.4"; + case 28: + return @"v20.10.3"; + case 29: + return @"v20.09.3"; + case 30: + return @"v20.08.3"; + case 31: + return @"v20.07.6"; + case 32: + return @"v20.06.03"; + case 33: + return @"v20.05.4"; + case 34: + return @"v20.03.1"; + case 35: + return @"v20.03.02"; + case 36: + return @"v20.02.3"; + case 37: + return @"v19.49.7"; + case 38: + return @"v19.49.5"; + case 39: + return @"v19.49.3"; + case 40: + return @"v19.47.7"; + case 41: + return @"v19.46.3"; + case 42: + return @"v19.45.4"; + case 43: + return @"v19.44.4"; + case 44: + return @"v19.43.2"; + case 45: + return @"v19.42.1"; + case 46: + return @"v19.41.3"; + case 47: return @"v19.40.4"; + case 48: + return @"v19.39.1"; + case 49: + return @"v19.38.2"; + case 50: + return @"v19.37.2"; + case 51: + return @"v19.36.1"; + case 52: + return @"v19.35.3"; + case 53: + return @"v19.34.2"; + case 54: + return @"v19.33.2"; + case 55: + return @"v19.32.8"; + case 56: + return @"v19.32.6"; + case 57: + return @"v19.31.4"; + case 58: + return @"v19.30.2"; + case 59: + return @"v19.29.1"; + case 60: + return @"v19.28.1"; + case 61: + return @"v19.26.5"; + case 62: + return @"v19.25.4"; + case 63: + return @"v19.25.3"; + case 64: + return @"v19.24.3"; + case 65: + return @"v19.24.2"; + case 66: + return @"v19.23.3"; + case 67: + return @"v19.22.6"; + case 68: + return @"v19.22.3"; + case 69: + return @"v19.21.3"; + case 70: + return @"v19.21.2"; + case 71: + return @"v19.20.2"; + case 72: + return @"v19.19.7"; + case 73: + return @"v19.19.5"; + case 74: + return @"v19.18.2"; + case 75: + return @"v19.17.2"; + case 76: + return @"v19.16.3"; + case 77: + return @"v19.15.1"; + case 78: + return @"v19.14.3"; + case 79: + return @"v19.14.2"; + case 80: + return @"v19.13.1"; + case 81: + return @"v19.12.3"; + case 82: + return @"v19.10.7"; + case 83: + return @"v19.10.6"; + case 84: + return @"v19.10.5"; + case 85: + return @"v19.09.4"; + case 86: + return @"v19.09.3"; + case 87: + return @"v19.08.2"; + case 88: + return @"v19.07.5"; + case 89: + return @"v19.07.4"; + case 90: + return @"v19.06.2"; + case 91: + return @"v19.05.5"; + case 92: + return @"v19.05.3"; + case 93: + return @"v19.04.3"; + case 94: + return @"v19.03.2"; + case 95: + return @"v19.02.1"; + case 96: + return @"v19.01.1"; + default: + return @"v20.33.2"; } } selectBlock:^BOOL (YTSettingsCell *cell, NSUInteger arg1) { NSArray *rows = @[ - [YTSettingsSectionItemClass checkmarkItemWithTitle:@"v19.40.4" titleDescription:nil selectBlock:^BOOL (YTSettingsCell *cell, NSUInteger arg1) { - [[NSUserDefaults standardUserDefaults] setInteger:0 forKey:@"versionSpoofer"]; - [settingsViewController reloadData]; - return YES; - }], - [YTSettingsSectionItemClass checkmarkItemWithTitle:@"v19.39.1" titleDescription:nil selectBlock:^BOOL (YTSettingsCell *cell, NSUInteger arg1) { - [[NSUserDefaults standardUserDefaults] setInteger:1 forKey:@"versionSpoofer"]; - [settingsViewController reloadData]; - return YES; - }], - [YTSettingsSectionItemClass checkmarkItemWithTitle:@"v19.38.2" titleDescription:nil selectBlock:^BOOL (YTSettingsCell *cell, NSUInteger arg1) { - [[NSUserDefaults standardUserDefaults] setInteger:2 forKey:@"versionSpoofer"]; - [settingsViewController reloadData]; - return YES; - }], - [YTSettingsSectionItemClass checkmarkItemWithTitle:@"v19.37.2" titleDescription:nil selectBlock:^BOOL (YTSettingsCell *cell, NSUInteger arg1) { - [[NSUserDefaults standardUserDefaults] setInteger:3 forKey:@"versionSpoofer"]; - [settingsViewController reloadData]; - return YES; - }], - [YTSettingsSectionItemClass checkmarkItemWithTitle:@"v19.36.1" titleDescription:nil selectBlock:^BOOL (YTSettingsCell *cell, NSUInteger arg1) { - [[NSUserDefaults standardUserDefaults] setInteger:4 forKey:@"versionSpoofer"]; - [settingsViewController reloadData]; - return YES; - }], - [YTSettingsSectionItemClass checkmarkItemWithTitle:@"v19.35.3" titleDescription:nil selectBlock:^BOOL (YTSettingsCell *cell, NSUInteger arg1) { - [[NSUserDefaults standardUserDefaults] setInteger:5 forKey:@"versionSpoofer"]; - [settingsViewController reloadData]; - return YES; - }], - [YTSettingsSectionItemClass checkmarkItemWithTitle:@"v19.34.2" titleDescription:nil selectBlock:^BOOL (YTSettingsCell *cell, NSUInteger arg1) { - [[NSUserDefaults standardUserDefaults] setInteger:6 forKey:@"versionSpoofer"]; - [settingsViewController reloadData]; - return YES; - }], - [YTSettingsSectionItemClass checkmarkItemWithTitle:@"v19.33.2" titleDescription:nil selectBlock:^BOOL (YTSettingsCell *cell, NSUInteger arg1) { - [[NSUserDefaults standardUserDefaults] setInteger:7 forKey:@"versionSpoofer"]; - [settingsViewController reloadData]; - return YES; - }], - [YTSettingsSectionItemClass checkmarkItemWithTitle:@"v19.32.8" titleDescription:nil selectBlock:^BOOL (YTSettingsCell *cell, NSUInteger arg1) { - [[NSUserDefaults standardUserDefaults] setInteger:8 forKey:@"versionSpoofer"]; - [settingsViewController reloadData]; - return YES; - }], - [YTSettingsSectionItemClass checkmarkItemWithTitle:@"v19.32.6" titleDescription:nil selectBlock:^BOOL (YTSettingsCell *cell, NSUInteger arg1) { - [[NSUserDefaults standardUserDefaults] setInteger:9 forKey:@"versionSpoofer"]; - [settingsViewController reloadData]; - return YES; - }], - [YTSettingsSectionItemClass checkmarkItemWithTitle:@"v19.31.4" titleDescription:nil selectBlock:^BOOL (YTSettingsCell *cell, NSUInteger arg1) { - [[NSUserDefaults standardUserDefaults] setInteger:10 forKey:@"versionSpoofer"]; - [settingsViewController reloadData]; - return YES; - }], - [YTSettingsSectionItemClass checkmarkItemWithTitle:@"v19.30.2" titleDescription:nil selectBlock:^BOOL (YTSettingsCell *cell, NSUInteger arg1) { - [[NSUserDefaults standardUserDefaults] setInteger:11 forKey:@"versionSpoofer"]; - [settingsViewController reloadData]; - return YES; - }], - [YTSettingsSectionItemClass checkmarkItemWithTitle:@"v19.29.1" titleDescription:nil selectBlock:^BOOL (YTSettingsCell *cell, NSUInteger arg1) { - [[NSUserDefaults standardUserDefaults] setInteger:12 forKey:@"versionSpoofer"]; - [settingsViewController reloadData]; - return YES; - }], - [YTSettingsSectionItemClass checkmarkItemWithTitle:@"v19.28.1" titleDescription:nil selectBlock:^BOOL (YTSettingsCell *cell, NSUInteger arg1) { - [[NSUserDefaults standardUserDefaults] setInteger:13 forKey:@"versionSpoofer"]; - [settingsViewController reloadData]; - return YES; - }], - [YTSettingsSectionItemClass checkmarkItemWithTitle:@"v19.26.5" titleDescription:nil selectBlock:^BOOL (YTSettingsCell *cell, NSUInteger arg1) { - [[NSUserDefaults standardUserDefaults] setInteger:14 forKey:@"versionSpoofer"]; - [settingsViewController reloadData]; - return YES; - }], - [YTSettingsSectionItemClass checkmarkItemWithTitle:@"v19.25.4" titleDescription:nil selectBlock:^BOOL (YTSettingsCell *cell, NSUInteger arg1) { - [[NSUserDefaults standardUserDefaults] setInteger:15 forKey:@"versionSpoofer"]; - [settingsViewController reloadData]; - return YES; - }], - [YTSettingsSectionItemClass checkmarkItemWithTitle:@"v19.25.3" titleDescription:nil selectBlock:^BOOL (YTSettingsCell *cell, NSUInteger arg1) { - [[NSUserDefaults standardUserDefaults] setInteger:16 forKey:@"versionSpoofer"]; - [settingsViewController reloadData]; - return YES; - }], - [YTSettingsSectionItemClass checkmarkItemWithTitle:@"v19.24.3" titleDescription:nil selectBlock:^BOOL (YTSettingsCell *cell, NSUInteger arg1) { - [[NSUserDefaults standardUserDefaults] setInteger:17 forKey:@"versionSpoofer"]; - [settingsViewController reloadData]; - return YES; - }], - [YTSettingsSectionItemClass checkmarkItemWithTitle:@"v19.24.2" titleDescription:nil selectBlock:^BOOL (YTSettingsCell *cell, NSUInteger arg1) { - [[NSUserDefaults standardUserDefaults] setInteger:18 forKey:@"versionSpoofer"]; - [settingsViewController reloadData]; - return YES; - }], - [YTSettingsSectionItemClass checkmarkItemWithTitle:@"v19.23.3" titleDescription:nil selectBlock:^BOOL (YTSettingsCell *cell, NSUInteger arg1) { - [[NSUserDefaults standardUserDefaults] setInteger:19 forKey:@"versionSpoofer"]; - [settingsViewController reloadData]; - return YES; - }], - [YTSettingsSectionItemClass checkmarkItemWithTitle:@"v19.22.6" titleDescription:nil selectBlock:^BOOL (YTSettingsCell *cell, NSUInteger arg1) { - [[NSUserDefaults standardUserDefaults] setInteger:20 forKey:@"versionSpoofer"]; - [settingsViewController reloadData]; - return YES; - }], - [YTSettingsSectionItemClass checkmarkItemWithTitle:@"v19.22.3" titleDescription:nil selectBlock:^BOOL (YTSettingsCell *cell, NSUInteger arg1) { - [[NSUserDefaults standardUserDefaults] setInteger:21 forKey:@"versionSpoofer"]; - [settingsViewController reloadData]; - return YES; - }], - [YTSettingsSectionItemClass checkmarkItemWithTitle:@"v19.21.3" titleDescription:nil selectBlock:^BOOL (YTSettingsCell *cell, NSUInteger arg1) { - [[NSUserDefaults standardUserDefaults] setInteger:22 forKey:@"versionSpoofer"]; - [settingsViewController reloadData]; - return YES; - }], - [YTSettingsSectionItemClass checkmarkItemWithTitle:@"v19.21.2" titleDescription:nil selectBlock:^BOOL (YTSettingsCell *cell, NSUInteger arg1) { - [[NSUserDefaults standardUserDefaults] setInteger:23 forKey:@"versionSpoofer"]; - [settingsViewController reloadData]; - return YES; - }], - [YTSettingsSectionItemClass checkmarkItemWithTitle:@"v19.20.2" titleDescription:nil selectBlock:^BOOL (YTSettingsCell *cell, NSUInteger arg1) { - [[NSUserDefaults standardUserDefaults] setInteger:24 forKey:@"versionSpoofer"]; - [settingsViewController reloadData]; - return YES; - }], - [YTSettingsSectionItemClass checkmarkItemWithTitle:@"v19.19.7" titleDescription:nil selectBlock:^BOOL (YTSettingsCell *cell, NSUInteger arg1) { - [[NSUserDefaults standardUserDefaults] setInteger:25 forKey:@"versionSpoofer"]; - [settingsViewController reloadData]; - return YES; - }], - [YTSettingsSectionItemClass checkmarkItemWithTitle:@"v19.19.5" titleDescription:nil selectBlock:^BOOL (YTSettingsCell *cell, NSUInteger arg1) { - [[NSUserDefaults standardUserDefaults] setInteger:26 forKey:@"versionSpoofer"]; - [settingsViewController reloadData]; - return YES; - }], - [YTSettingsSectionItemClass checkmarkItemWithTitle:@"v19.18.2" titleDescription:nil selectBlock:^BOOL (YTSettingsCell *cell, NSUInteger arg1) { - [[NSUserDefaults standardUserDefaults] setInteger:27 forKey:@"versionSpoofer"]; - [settingsViewController reloadData]; - return YES; - }], - [YTSettingsSectionItemClass checkmarkItemWithTitle:@"v19.17.2" titleDescription:nil selectBlock:^BOOL (YTSettingsCell *cell, NSUInteger arg1) { - [[NSUserDefaults standardUserDefaults] setInteger:28 forKey:@"versionSpoofer"]; - [settingsViewController reloadData]; - return YES; - }], - [YTSettingsSectionItemClass checkmarkItemWithTitle:@"v19.16.3" titleDescription:nil selectBlock:^BOOL (YTSettingsCell *cell, NSUInteger arg1) { - [[NSUserDefaults standardUserDefaults] setInteger:29 forKey:@"versionSpoofer"]; - [settingsViewController reloadData]; - return YES; - }], - [YTSettingsSectionItemClass checkmarkItemWithTitle:@"v19.15.1" titleDescription:nil selectBlock:^BOOL (YTSettingsCell *cell, NSUInteger arg1) { - [[NSUserDefaults standardUserDefaults] setInteger:30 forKey:@"versionSpoofer"]; - [settingsViewController reloadData]; - return YES; - }], - [YTSettingsSectionItemClass checkmarkItemWithTitle:@"v19.14.3" titleDescription:nil selectBlock:^BOOL (YTSettingsCell *cell, NSUInteger arg1) { - [[NSUserDefaults standardUserDefaults] setInteger:31 forKey:@"versionSpoofer"]; - [settingsViewController reloadData]; - return YES; - }], - [YTSettingsSectionItemClass checkmarkItemWithTitle:@"v19.14.2" titleDescription:nil selectBlock:^BOOL (YTSettingsCell *cell, NSUInteger arg1) { - [[NSUserDefaults standardUserDefaults] setInteger:32 forKey:@"versionSpoofer"]; - [settingsViewController reloadData]; - return YES; - }], - [YTSettingsSectionItemClass checkmarkItemWithTitle:@"v19.13.1" titleDescription:nil selectBlock:^BOOL (YTSettingsCell *cell, NSUInteger arg1) { - [[NSUserDefaults standardUserDefaults] setInteger:33 forKey:@"versionSpoofer"]; - [settingsViewController reloadData]; - return YES; - }], - [YTSettingsSectionItemClass checkmarkItemWithTitle:@"v19.12.3" titleDescription:nil selectBlock:^BOOL (YTSettingsCell *cell, NSUInteger arg1) { - [[NSUserDefaults standardUserDefaults] setInteger:34 forKey:@"versionSpoofer"]; - [settingsViewController reloadData]; - return YES; - }], - [YTSettingsSectionItemClass checkmarkItemWithTitle:@"v19.10.7" titleDescription:nil selectBlock:^BOOL (YTSettingsCell *cell, NSUInteger arg1) { - [[NSUserDefaults standardUserDefaults] setInteger:35 forKey:@"versionSpoofer"]; - [settingsViewController reloadData]; - return YES; - }], - [YTSettingsSectionItemClass checkmarkItemWithTitle:@"v19.10.6" titleDescription:nil selectBlock:^BOOL (YTSettingsCell *cell, NSUInteger arg1) { - [[NSUserDefaults standardUserDefaults] setInteger:36 forKey:@"versionSpoofer"]; - [settingsViewController reloadData]; - return YES; - }], - [YTSettingsSectionItemClass checkmarkItemWithTitle:@"v19.10.5" titleDescription:nil selectBlock:^BOOL (YTSettingsCell *cell, NSUInteger arg1) { - [[NSUserDefaults standardUserDefaults] setInteger:37 forKey:@"versionSpoofer"]; - [settingsViewController reloadData]; - return YES; - }], - [YTSettingsSectionItemClass checkmarkItemWithTitle:@"v19.09.4" titleDescription:nil selectBlock:^BOOL (YTSettingsCell *cell, NSUInteger arg1) { - [[NSUserDefaults standardUserDefaults] setInteger:38 forKey:@"versionSpoofer"]; - [settingsViewController reloadData]; - return YES; - }], - [YTSettingsSectionItemClass checkmarkItemWithTitle:@"v19.09.3" titleDescription:nil selectBlock:^BOOL (YTSettingsCell *cell, NSUInteger arg1) { - [[NSUserDefaults standardUserDefaults] setInteger:39 forKey:@"versionSpoofer"]; - [settingsViewController reloadData]; - return YES; - }], - [YTSettingsSectionItemClass checkmarkItemWithTitle:@"v19.08.2" titleDescription:nil selectBlock:^BOOL (YTSettingsCell *cell, NSUInteger arg1) { - [[NSUserDefaults standardUserDefaults] setInteger:40 forKey:@"versionSpoofer"]; - [settingsViewController reloadData]; - return YES; - }], - [YTSettingsSectionItemClass checkmarkItemWithTitle:@"v19.07.5" titleDescription:nil selectBlock:^BOOL (YTSettingsCell *cell, NSUInteger arg1) { - [[NSUserDefaults standardUserDefaults] setInteger:41 forKey:@"versionSpoofer"]; - [settingsViewController reloadData]; - return YES; - }], - [YTSettingsSectionItemClass checkmarkItemWithTitle:@"v19.07.4" titleDescription:nil selectBlock:^BOOL (YTSettingsCell *cell, NSUInteger arg1) { - [[NSUserDefaults standardUserDefaults] setInteger:42 forKey:@"versionSpoofer"]; - [settingsViewController reloadData]; - return YES; - }], - [YTSettingsSectionItemClass checkmarkItemWithTitle:@"v19.06.2" titleDescription:nil selectBlock:^BOOL (YTSettingsCell *cell, NSUInteger arg1) { - [[NSUserDefaults standardUserDefaults] setInteger:43 forKey:@"versionSpoofer"]; - [settingsViewController reloadData]; - return YES; - }], - [YTSettingsSectionItemClass checkmarkItemWithTitle:@"v19.05.5" titleDescription:nil selectBlock:^BOOL (YTSettingsCell *cell, NSUInteger arg1) { - [[NSUserDefaults standardUserDefaults] setInteger:44 forKey:@"versionSpoofer"]; - [settingsViewController reloadData]; - return YES; - }], - [YTSettingsSectionItemClass checkmarkItemWithTitle:@"v19.05.3" titleDescription:nil selectBlock:^BOOL (YTSettingsCell *cell, NSUInteger arg1) { - [[NSUserDefaults standardUserDefaults] setInteger:45 forKey:@"versionSpoofer"]; - [settingsViewController reloadData]; - return YES; - }], - [YTSettingsSectionItemClass checkmarkItemWithTitle:@"v19.04.3" titleDescription:nil selectBlock:^BOOL (YTSettingsCell *cell, NSUInteger arg1) { - [[NSUserDefaults standardUserDefaults] setInteger:46 forKey:@"versionSpoofer"]; - [settingsViewController reloadData]; - return YES; - }], - [YTSettingsSectionItemClass checkmarkItemWithTitle:@"v19.03.2" titleDescription:nil selectBlock:^BOOL (YTSettingsCell *cell, NSUInteger arg1) { - [[NSUserDefaults standardUserDefaults] setInteger:47 forKey:@"versionSpoofer"]; - [settingsViewController reloadData]; - return YES; - }], - [YTSettingsSectionItemClass checkmarkItemWithTitle:@"v19.02.1" titleDescription:nil selectBlock:^BOOL (YTSettingsCell *cell, NSUInteger arg1) { - [[NSUserDefaults standardUserDefaults] setInteger:48 forKey:@"versionSpoofer"]; - [settingsViewController reloadData]; - return YES; - }], - [YTSettingsSectionItemClass checkmarkItemWithTitle:@"v19.01.1" titleDescription:nil selectBlock:^BOOL (YTSettingsCell *cell, NSUInteger arg1) { - [[NSUserDefaults standardUserDefaults] setInteger:49 forKey:@"versionSpoofer"]; - [settingsViewController reloadData]; - return YES; - }], - [YTSettingsSectionItemClass checkmarkItemWithTitle:@"v18.49.3" titleDescription:nil selectBlock:^BOOL (YTSettingsCell *cell, NSUInteger arg1) { - [[NSUserDefaults standardUserDefaults] setInteger:50 forKey:@"versionSpoofer"]; - [settingsViewController reloadData]; - return YES; - }], - [YTSettingsSectionItemClass checkmarkItemWithTitle:@"v18.48.3" titleDescription:nil selectBlock:^BOOL (YTSettingsCell *cell, NSUInteger arg1) { - [[NSUserDefaults standardUserDefaults] setInteger:51 forKey:@"versionSpoofer"]; - [settingsViewController reloadData]; - return YES; - }], - [YTSettingsSectionItemClass checkmarkItemWithTitle:@"v18.46.3" titleDescription:nil selectBlock:^BOOL (YTSettingsCell *cell, NSUInteger arg1) { - [[NSUserDefaults standardUserDefaults] setInteger:52 forKey:@"versionSpoofer"]; - [settingsViewController reloadData]; - return YES; - }], - [YTSettingsSectionItemClass checkmarkItemWithTitle:@"v18.45.2" titleDescription:nil selectBlock:^BOOL (YTSettingsCell *cell, NSUInteger arg1) { - [[NSUserDefaults standardUserDefaults] setInteger:53 forKey:@"versionSpoofer"]; - [settingsViewController reloadData]; - return YES; - }], - [YTSettingsSectionItemClass checkmarkItemWithTitle:@"v18.44.3" titleDescription:nil selectBlock:^BOOL (YTSettingsCell *cell, NSUInteger arg1) { - [[NSUserDefaults standardUserDefaults] setInteger:54 forKey:@"versionSpoofer"]; - [settingsViewController reloadData]; - return YES; - }], - [YTSettingsSectionItemClass checkmarkItemWithTitle:@"v18.43.4" titleDescription:nil selectBlock:^BOOL (YTSettingsCell *cell, NSUInteger arg1) { - [[NSUserDefaults standardUserDefaults] setInteger:55 forKey:@"versionSpoofer"]; - [settingsViewController reloadData]; - return YES; - }], - [YTSettingsSectionItemClass checkmarkItemWithTitle:@"v18.41.5" titleDescription:nil selectBlock:^BOOL (YTSettingsCell *cell, NSUInteger arg1) { - [[NSUserDefaults standardUserDefaults] setInteger:56 forKey:@"versionSpoofer"]; - [settingsViewController reloadData]; - return YES; - }], - [YTSettingsSectionItemClass checkmarkItemWithTitle:@"v18.41.3" titleDescription:nil selectBlock:^BOOL (YTSettingsCell *cell, NSUInteger arg1) { - [[NSUserDefaults standardUserDefaults] setInteger:57 forKey:@"versionSpoofer"]; - [settingsViewController reloadData]; - return YES; - }], - [YTSettingsSectionItemClass checkmarkItemWithTitle:@"v18.41.2" titleDescription:nil selectBlock:^BOOL (YTSettingsCell *cell, NSUInteger arg1) { - [[NSUserDefaults standardUserDefaults] setInteger:58 forKey:@"versionSpoofer"]; - [settingsViewController reloadData]; - return YES; - }], - [YTSettingsSectionItemClass checkmarkItemWithTitle:@"v18.40.1" titleDescription:nil selectBlock:^BOOL (YTSettingsCell *cell, NSUInteger arg1) { - [[NSUserDefaults standardUserDefaults] setInteger:59 forKey:@"versionSpoofer"]; - [settingsViewController reloadData]; - return YES; - }], - [YTSettingsSectionItemClass checkmarkItemWithTitle:@"v18.39.1" titleDescription:nil selectBlock:^BOOL (YTSettingsCell *cell, NSUInteger arg1) { - [[NSUserDefaults standardUserDefaults] setInteger:60 forKey:@"versionSpoofer"]; - [settingsViewController reloadData]; - return YES; - }], - [YTSettingsSectionItemClass checkmarkItemWithTitle:@"v18.38.2" titleDescription:nil selectBlock:^BOOL (YTSettingsCell *cell, NSUInteger arg1) { - [[NSUserDefaults standardUserDefaults] setInteger:61 forKey:@"versionSpoofer"]; - [settingsViewController reloadData]; - return YES; - }], - [YTSettingsSectionItemClass checkmarkItemWithTitle:@"v18.35.4" titleDescription:nil selectBlock:^BOOL (YTSettingsCell *cell, NSUInteger arg1) { - [[NSUserDefaults standardUserDefaults] setInteger:62 forKey:@"versionSpoofer"]; - [settingsViewController reloadData]; - return YES; - }], - [YTSettingsSectionItemClass checkmarkItemWithTitle:@"v18.34.5" titleDescription:nil selectBlock:^BOOL (YTSettingsCell *cell, NSUInteger arg1) { - [[NSUserDefaults standardUserDefaults] setInteger:63 forKey:@"versionSpoofer"]; - [settingsViewController reloadData]; - return YES; - }], - [YTSettingsSectionItemClass checkmarkItemWithTitle:@"v18.33.3" titleDescription:nil selectBlock:^BOOL (YTSettingsCell *cell, NSUInteger arg1) { - [[NSUserDefaults standardUserDefaults] setInteger:64 forKey:@"versionSpoofer"]; - [settingsViewController reloadData]; - return YES; - }], - [YTSettingsSectionItemClass checkmarkItemWithTitle:@"v18.33.2" titleDescription:nil selectBlock:^BOOL (YTSettingsCell *cell, NSUInteger arg1) { - [[NSUserDefaults standardUserDefaults] setInteger:65 forKey:@"versionSpoofer"]; - [settingsViewController reloadData]; - return YES; - }], - [YTSettingsSectionItemClass checkmarkItemWithTitle:@"v18.32.2" titleDescription:nil selectBlock:^BOOL (YTSettingsCell *cell, NSUInteger arg1) { - [[NSUserDefaults standardUserDefaults] setInteger:66 forKey:@"versionSpoofer"]; - [settingsViewController reloadData]; - return YES; - }], - [YTSettingsSectionItemClass checkmarkItemWithTitle:@"v18.31.3" titleDescription:nil selectBlock:^BOOL (YTSettingsCell *cell, NSUInteger arg1) { - [[NSUserDefaults standardUserDefaults] setInteger:67 forKey:@"versionSpoofer"]; - [settingsViewController reloadData]; - return YES; - }], - [YTSettingsSectionItemClass checkmarkItemWithTitle:@"v18.30.7" titleDescription:nil selectBlock:^BOOL (YTSettingsCell *cell, NSUInteger arg1) { - [[NSUserDefaults standardUserDefaults] setInteger:68 forKey:@"versionSpoofer"]; - [settingsViewController reloadData]; - return YES; - }], - [YTSettingsSectionItemClass checkmarkItemWithTitle:@"v18.30.6" titleDescription:nil selectBlock:^BOOL (YTSettingsCell *cell, NSUInteger arg1) { - [[NSUserDefaults standardUserDefaults] setInteger:69 forKey:@"versionSpoofer"]; - [settingsViewController reloadData]; - return YES; - }], - [YTSettingsSectionItemClass checkmarkItemWithTitle:@"v18.29.1" titleDescription:nil selectBlock:^BOOL (YTSettingsCell *cell, NSUInteger arg1) { - [[NSUserDefaults standardUserDefaults] setInteger:70 forKey:@"versionSpoofer"]; - [settingsViewController reloadData]; - return YES; - }], - [YTSettingsSectionItemClass checkmarkItemWithTitle:@"v18.28.3" titleDescription:nil selectBlock:^BOOL (YTSettingsCell *cell, NSUInteger arg1) { - [[NSUserDefaults standardUserDefaults] setInteger:71 forKey:@"versionSpoofer"]; - [settingsViewController reloadData]; - return YES; - }], - [YTSettingsSectionItemClass checkmarkItemWithTitle:@"v18.27.3" titleDescription:nil selectBlock:^BOOL (YTSettingsCell *cell, NSUInteger arg1) { - [[NSUserDefaults standardUserDefaults] setInteger:72 forKey:@"versionSpoofer"]; - [settingsViewController reloadData]; - return YES; - }], - [YTSettingsSectionItemClass checkmarkItemWithTitle:@"v18.25.1" titleDescription:nil selectBlock:^BOOL (YTSettingsCell *cell, NSUInteger arg1) { - [[NSUserDefaults standardUserDefaults] setInteger:73 forKey:@"versionSpoofer"]; - [settingsViewController reloadData]; - return YES; - }], - [YTSettingsSectionItemClass checkmarkItemWithTitle:@"v18.23.3" titleDescription:nil selectBlock:^BOOL (YTSettingsCell *cell, NSUInteger arg1) { - [[NSUserDefaults standardUserDefaults] setInteger:74 forKey:@"versionSpoofer"]; - [settingsViewController reloadData]; - return YES; - }], - [YTSettingsSectionItemClass checkmarkItemWithTitle:@"v18.22.9" titleDescription:nil selectBlock:^BOOL (YTSettingsCell *cell, NSUInteger arg1) { - [[NSUserDefaults standardUserDefaults] setInteger:75 forKey:@"versionSpoofer"]; - [settingsViewController reloadData]; - return YES; - }], - [YTSettingsSectionItemClass checkmarkItemWithTitle:@"v18.21.3" titleDescription:nil selectBlock:^BOOL (YTSettingsCell *cell, NSUInteger arg1) { - [[NSUserDefaults standardUserDefaults] setInteger:76 forKey:@"versionSpoofer"]; - [settingsViewController reloadData]; - return YES; - }], - [YTSettingsSectionItemClass checkmarkItemWithTitle:@"v18.20.3" titleDescription:nil selectBlock:^BOOL (YTSettingsCell *cell, NSUInteger arg1) { - [[NSUserDefaults standardUserDefaults] setInteger:77 forKey:@"versionSpoofer"]; - [settingsViewController reloadData]; - return YES; - }], - [YTSettingsSectionItemClass checkmarkItemWithTitle:@"v18.19.1" titleDescription:nil selectBlock:^BOOL (YTSettingsCell *cell, NSUInteger arg1) { - [[NSUserDefaults standardUserDefaults] setInteger:78 forKey:@"versionSpoofer"]; - [settingsViewController reloadData]; - return YES; - }], - [YTSettingsSectionItemClass checkmarkItemWithTitle:@"v18.18.2" titleDescription:nil selectBlock:^BOOL (YTSettingsCell *cell, NSUInteger arg1) { - [[NSUserDefaults standardUserDefaults] setInteger:79 forKey:@"versionSpoofer"]; - [settingsViewController reloadData]; - return YES; - }], - [YTSettingsSectionItemClass checkmarkItemWithTitle:@"v18.17.2" titleDescription:nil selectBlock:^BOOL (YTSettingsCell *cell, NSUInteger arg1) { - [[NSUserDefaults standardUserDefaults] setInteger:80 forKey:@"versionSpoofer"]; - [settingsViewController reloadData]; - return YES; - }], - [YTSettingsSectionItemClass checkmarkItemWithTitle:@"v18.16.2" titleDescription:nil selectBlock:^BOOL (YTSettingsCell *cell, NSUInteger arg1) { - [[NSUserDefaults standardUserDefaults] setInteger:81 forKey:@"versionSpoofer"]; - [settingsViewController reloadData]; - return YES; - }], - [YTSettingsSectionItemClass checkmarkItemWithTitle:@"v18.15.1" titleDescription:nil selectBlock:^BOOL (YTSettingsCell *cell, NSUInteger arg1) { - [[NSUserDefaults standardUserDefaults] setInteger:82 forKey:@"versionSpoofer"]; - [settingsViewController reloadData]; - return YES; - }], - [YTSettingsSectionItemClass checkmarkItemWithTitle:@"v18.14.1" titleDescription:nil selectBlock:^BOOL (YTSettingsCell *cell, NSUInteger arg1) { - [[NSUserDefaults standardUserDefaults] setInteger:83 forKey:@"versionSpoofer"]; - [settingsViewController reloadData]; - return YES; - }], - [YTSettingsSectionItemClass checkmarkItemWithTitle:@"v18.13.4" titleDescription:nil selectBlock:^BOOL (YTSettingsCell *cell, NSUInteger arg1) { - [[NSUserDefaults standardUserDefaults] setInteger:84 forKey:@"versionSpoofer"]; - [settingsViewController reloadData]; - return YES; - }], - [YTSettingsSectionItemClass checkmarkItemWithTitle:@"v18.12.2" titleDescription:nil selectBlock:^BOOL (YTSettingsCell *cell, NSUInteger arg1) { - [[NSUserDefaults standardUserDefaults] setInteger:85 forKey:@"versionSpoofer"]; - [settingsViewController reloadData]; - return YES; - }], - [YTSettingsSectionItemClass checkmarkItemWithTitle:@"v18.11.2" titleDescription:nil selectBlock:^BOOL (YTSettingsCell *cell, NSUInteger arg1) { - [[NSUserDefaults standardUserDefaults] setInteger:86 forKey:@"versionSpoofer"]; - [settingsViewController reloadData]; - return YES; - }], - [YTSettingsSectionItemClass checkmarkItemWithTitle:@"v18.10.1" titleDescription:nil selectBlock:^BOOL (YTSettingsCell *cell, NSUInteger arg1) { - [[NSUserDefaults standardUserDefaults] setInteger:87 forKey:@"versionSpoofer"]; - [settingsViewController reloadData]; - return YES; - }], - [YTSettingsSectionItemClass checkmarkItemWithTitle:@"v18.09.4" titleDescription:nil selectBlock:^BOOL (YTSettingsCell *cell, NSUInteger arg1) { - [[NSUserDefaults standardUserDefaults] setInteger:88 forKey:@"versionSpoofer"]; - [settingsViewController reloadData]; - return YES; - }], - [YTSettingsSectionItemClass checkmarkItemWithTitle:@"v18.08.1" titleDescription:nil selectBlock:^BOOL (YTSettingsCell *cell, NSUInteger arg1) { - [[NSUserDefaults standardUserDefaults] setInteger:89 forKey:@"versionSpoofer"]; - [settingsViewController reloadData]; - return YES; - }], - [YTSettingsSectionItemClass checkmarkItemWithTitle:@"v18.07.5" titleDescription:nil selectBlock:^BOOL (YTSettingsCell *cell, NSUInteger arg1) { - [[NSUserDefaults standardUserDefaults] setInteger:90 forKey:@"versionSpoofer"]; - [settingsViewController reloadData]; - return YES; - }], - [YTSettingsSectionItemClass checkmarkItemWithTitle:@"v18.05.2" titleDescription:nil selectBlock:^BOOL (YTSettingsCell *cell, NSUInteger arg1) { - [[NSUserDefaults standardUserDefaults] setInteger:91 forKey:@"versionSpoofer"]; - [settingsViewController reloadData]; - return YES; - }], - [YTSettingsSectionItemClass checkmarkItemWithTitle:@"v18.04.3" titleDescription:nil selectBlock:^BOOL (YTSettingsCell *cell, NSUInteger arg1) { - [[NSUserDefaults standardUserDefaults] setInteger:92 forKey:@"versionSpoofer"]; - [settingsViewController reloadData]; - return YES; - }], - [YTSettingsSectionItemClass checkmarkItemWithTitle:@"v18.03.3" titleDescription:nil selectBlock:^BOOL (YTSettingsCell *cell, NSUInteger arg1) { - [[NSUserDefaults standardUserDefaults] setInteger:93 forKey:@"versionSpoofer"]; - [settingsViewController reloadData]; - return YES; - }], - [YTSettingsSectionItemClass checkmarkItemWithTitle:@"v18.02.03" titleDescription:nil selectBlock:^BOOL (YTSettingsCell *cell, NSUInteger arg1) { - [[NSUserDefaults standardUserDefaults] setInteger:94 forKey:@"versionSpoofer"]; - [settingsViewController reloadData]; - return YES; - }], - [YTSettingsSectionItemClass checkmarkItemWithTitle:@"v18.01.6" titleDescription:nil selectBlock:^BOOL (YTSettingsCell *cell, NSUInteger arg1) { - [[NSUserDefaults standardUserDefaults] setInteger:95 forKey:@"versionSpoofer"]; - [settingsViewController reloadData]; - return YES; - }], - [YTSettingsSectionItemClass checkmarkItemWithTitle:@"v18.01.4" titleDescription:nil selectBlock:^BOOL (YTSettingsCell *cell, NSUInteger arg1) { - [[NSUserDefaults standardUserDefaults] setInteger:96 forKey:@"versionSpoofer"]; - [settingsViewController reloadData]; - return YES; - }], - [YTSettingsSectionItemClass checkmarkItemWithTitle:@"v18.01.2" titleDescription:nil selectBlock:^BOOL (YTSettingsCell *cell, NSUInteger arg1) { - [[NSUserDefaults standardUserDefaults] setInteger:97 forKey:@"versionSpoofer"]; - [settingsViewController reloadData]; - return YES; - }], - [YTSettingsSectionItemClass checkmarkItemWithTitle:@"v17.49.6" titleDescription:nil selectBlock:^BOOL (YTSettingsCell *cell, NSUInteger arg1) { - [[NSUserDefaults standardUserDefaults] setInteger:98 forKey:@"versionSpoofer"]; - [settingsViewController reloadData]; - return YES; - }], - [YTSettingsSectionItemClass checkmarkItemWithTitle:@"v17.49.4" titleDescription:nil selectBlock:^BOOL (YTSettingsCell *cell, NSUInteger arg1) { - [[NSUserDefaults standardUserDefaults] setInteger:99 forKey:@"versionSpoofer"]; - [settingsViewController reloadData]; - return YES; - }], - [YTSettingsSectionItemClass checkmarkItemWithTitle:@"v17.46.4" titleDescription:nil selectBlock:^BOOL (YTSettingsCell *cell, NSUInteger arg1) { - [[NSUserDefaults standardUserDefaults] setInteger:100 forKey:@"versionSpoofer"]; - [settingsViewController reloadData]; - return YES; - }], - [YTSettingsSectionItemClass checkmarkItemWithTitle:@"v17.45.1" titleDescription:nil selectBlock:^BOOL (YTSettingsCell *cell, NSUInteger arg1) { - [[NSUserDefaults standardUserDefaults] setInteger:101 forKey:@"versionSpoofer"]; - [settingsViewController reloadData]; - return YES; - }], - [YTSettingsSectionItemClass checkmarkItemWithTitle:@"v17.44.4" titleDescription:nil selectBlock:^BOOL (YTSettingsCell *cell, NSUInteger arg1) { - [[NSUserDefaults standardUserDefaults] setInteger:102 forKey:@"versionSpoofer"]; - [settingsViewController reloadData]; - return YES; - }], - [YTSettingsSectionItemClass checkmarkItemWithTitle:@"v17.43.1" titleDescription:nil selectBlock:^BOOL (YTSettingsCell *cell, NSUInteger arg1) { - [[NSUserDefaults standardUserDefaults] setInteger:103 forKey:@"versionSpoofer"]; - [settingsViewController reloadData]; - return YES; - }], - [YTSettingsSectionItemClass checkmarkItemWithTitle:@"v17.42.7" titleDescription:nil selectBlock:^BOOL (YTSettingsCell *cell, NSUInteger arg1) { - [[NSUserDefaults standardUserDefaults] setInteger:104 forKey:@"versionSpoofer"]; - [settingsViewController reloadData]; - return YES; - }], - [YTSettingsSectionItemClass checkmarkItemWithTitle:@"v17.42.6" titleDescription:nil selectBlock:^BOOL (YTSettingsCell *cell, NSUInteger arg1) { - [[NSUserDefaults standardUserDefaults] setInteger:105 forKey:@"versionSpoofer"]; - [settingsViewController reloadData]; - return YES; - }], - [YTSettingsSectionItemClass checkmarkItemWithTitle:@"v17.41.2" titleDescription:nil selectBlock:^BOOL (YTSettingsCell *cell, NSUInteger arg1) { - [[NSUserDefaults standardUserDefaults] setInteger:106 forKey:@"versionSpoofer"]; - [settingsViewController reloadData]; - return YES; - }], - [YTSettingsSectionItemClass checkmarkItemWithTitle:@"v17.40.5" titleDescription:nil selectBlock:^BOOL (YTSettingsCell *cell, NSUInteger arg1) { - [[NSUserDefaults standardUserDefaults] setInteger:107 forKey:@"versionSpoofer"]; - [settingsViewController reloadData]; - return YES; - }], - [YTSettingsSectionItemClass checkmarkItemWithTitle:@"v17.39.4" titleDescription:nil selectBlock:^BOOL (YTSettingsCell *cell, NSUInteger arg1) { - [[NSUserDefaults standardUserDefaults] setInteger:108 forKey:@"versionSpoofer"]; - [settingsViewController reloadData]; - return YES; - }], - [YTSettingsSectionItemClass checkmarkItemWithTitle:@"v17.38.10" titleDescription:nil selectBlock:^BOOL (YTSettingsCell *cell, NSUInteger arg1) { - [[NSUserDefaults standardUserDefaults] setInteger:109 forKey:@"versionSpoofer"]; - [settingsViewController reloadData]; - return YES; - }], - [YTSettingsSectionItemClass checkmarkItemWithTitle:@"v17.38.9" titleDescription:nil selectBlock:^BOOL (YTSettingsCell *cell, NSUInteger arg1) { - [[NSUserDefaults standardUserDefaults] setInteger:110 forKey:@"versionSpoofer"]; - [settingsViewController reloadData]; - return YES; - }], - [YTSettingsSectionItemClass checkmarkItemWithTitle:@"v17.37.3" titleDescription:nil selectBlock:^BOOL (YTSettingsCell *cell, NSUInteger arg1) { - [[NSUserDefaults standardUserDefaults] setInteger:111 forKey:@"versionSpoofer"]; - [settingsViewController reloadData]; - return YES; - }], - [YTSettingsSectionItemClass checkmarkItemWithTitle:@"v17.36.4" titleDescription:nil selectBlock:^BOOL (YTSettingsCell *cell, NSUInteger arg1) { - [[NSUserDefaults standardUserDefaults] setInteger:112 forKey:@"versionSpoofer"]; - [settingsViewController reloadData]; - return YES; - }], - [YTSettingsSectionItemClass checkmarkItemWithTitle:@"v17.36.3" titleDescription:nil selectBlock:^BOOL (YTSettingsCell *cell, NSUInteger arg1) { - [[NSUserDefaults standardUserDefaults] setInteger:113 forKey:@"versionSpoofer"]; - [settingsViewController reloadData]; - return YES; - }], - [YTSettingsSectionItemClass checkmarkItemWithTitle:@"v17.35.3" titleDescription:nil selectBlock:^BOOL (YTSettingsCell *cell, NSUInteger arg1) { - [[NSUserDefaults standardUserDefaults] setInteger:114 forKey:@"versionSpoofer"]; - [settingsViewController reloadData]; - return YES; - }], - [YTSettingsSectionItemClass checkmarkItemWithTitle:@"v17.34.3" titleDescription:nil selectBlock:^BOOL (YTSettingsCell *cell, NSUInteger arg1) { - [[NSUserDefaults standardUserDefaults] setInteger:115 forKey:@"versionSpoofer"]; - [settingsViewController reloadData]; - return YES; - }], - [YTSettingsSectionItemClass checkmarkItemWithTitle:@"v17.33.2" titleDescription:nil selectBlock:^BOOL (YTSettingsCell *cell, NSUInteger arg1) { - [[NSUserDefaults standardUserDefaults] setInteger:116 forKey:@"versionSpoofer"]; - [settingsViewController reloadData]; - return YES; - }] + SPOOFER_VERSION(@"v20.33.2", 0), + SPOOFER_VERSION(@"v20.32.5", 1), + SPOOFER_VERSION(@"v20.32.4", 2), + SPOOFER_VERSION(@"v20.31.6", 3), + SPOOFER_VERSION(@"v20.31.5", 4), + SPOOFER_VERSION(@"v20.30.5", 5), + SPOOFER_VERSION(@"v20.29.3", 6), + SPOOFER_VERSION(@"v20.28.2", 7), + SPOOFER_VERSION(@"v20.26.7", 8), + SPOOFER_VERSION(@"v20.25.4", 9), + SPOOFER_VERSION(@"v20.24.5", 10), + SPOOFER_VERSION(@"v20.24.4", 11), + SPOOFER_VERSION(@"v20.23.3", 12), + SPOOFER_VERSION(@"v20.22.1", 13), + SPOOFER_VERSION(@"v20.21.6", 14), + SPOOFER_VERSION(@"v20.20.7", 15), + SPOOFER_VERSION(@"v20.20.5", 16), + SPOOFER_VERSION(@"v20.19.3", 17), + SPOOFER_VERSION(@"v20.19.2", 18), + SPOOFER_VERSION(@"v20.18.5", 19), + SPOOFER_VERSION(@"v20.18.4", 20), + SPOOFER_VERSION(@"v20.16.7", 21), + SPOOFER_VERSION(@"v20.15.1", 22), + SPOOFER_VERSION(@"v20.14.2", 23), + SPOOFER_VERSION(@"v20.13.5", 24), + SPOOFER_VERSION(@"v20.12.4", 25), + SPOOFER_VERSION(@"v20.11.6", 26), + SPOOFER_VERSION(@"v20.10.4", 27), + SPOOFER_VERSION(@"v20.10.3", 28), + SPOOFER_VERSION(@"v20.09.3", 29), + SPOOFER_VERSION(@"v20.08.3", 30), + SPOOFER_VERSION(@"v20.07.6", 31), + SPOOFER_VERSION(@"v20.06.03", 32), + SPOOFER_VERSION(@"v20.05.4", 33), + SPOOFER_VERSION(@"v20.03.1", 34), + SPOOFER_VERSION(@"v20.03.02", 35), + SPOOFER_VERSION(@"v20.02.3", 36), + SPOOFER_VERSION(@"v19.49.7", 37), + SPOOFER_VERSION(@"v19.49.5", 38), + SPOOFER_VERSION(@"v19.49.3", 39), + SPOOFER_VERSION(@"v19.47.7", 40), + SPOOFER_VERSION(@"v19.46.3", 41), + SPOOFER_VERSION(@"v19.45.4", 42), + SPOOFER_VERSION(@"v19.44.4", 43), + SPOOFER_VERSION(@"v19.43.2", 44), + SPOOFER_VERSION(@"v19.42.1", 45), + SPOOFER_VERSION(@"v19.41.3", 46), + SPOOFER_VERSION(@"v19.40.4", 47), + SPOOFER_VERSION(@"v19.39.1", 48), + SPOOFER_VERSION(@"v19.38.2", 49), + SPOOFER_VERSION(@"v19.37.2", 50), + SPOOFER_VERSION(@"v19.36.1", 51), + SPOOFER_VERSION(@"v19.35.3", 52), + SPOOFER_VERSION(@"v19.34.2", 53), + SPOOFER_VERSION(@"v19.33.2", 54), + SPOOFER_VERSION(@"v19.32.8", 55), + SPOOFER_VERSION(@"v19.32.6", 56), + SPOOFER_VERSION(@"v19.31.4", 57), + SPOOFER_VERSION(@"v19.30.2", 58), + SPOOFER_VERSION(@"v19.29.1", 59), + SPOOFER_VERSION(@"v19.28.1", 60), + SPOOFER_VERSION(@"v19.26.5", 61), + SPOOFER_VERSION(@"v19.25.4", 62), + SPOOFER_VERSION(@"v19.25.3", 63), + SPOOFER_VERSION(@"v19.24.3", 64), + SPOOFER_VERSION(@"v19.24.2", 65), + SPOOFER_VERSION(@"v19.23.3", 66), + SPOOFER_VERSION(@"v19.22.6", 67), + SPOOFER_VERSION(@"v19.22.3", 68), + SPOOFER_VERSION(@"v19.21.3", 69), + SPOOFER_VERSION(@"v19.21.2", 70), + SPOOFER_VERSION(@"v19.20.2", 71), + SPOOFER_VERSION(@"v19.19.7", 72), + SPOOFER_VERSION(@"v19.19.5", 73), + SPOOFER_VERSION(@"v19.18.2", 74), + SPOOFER_VERSION(@"v19.17.2", 75), + SPOOFER_VERSION(@"v19.16.3", 76), + SPOOFER_VERSION(@"v19.15.1", 77), + SPOOFER_VERSION(@"v19.14.3", 78), + SPOOFER_VERSION(@"v19.14.2", 79), + SPOOFER_VERSION(@"v19.13.1", 80), + SPOOFER_VERSION(@"v19.12.3", 81), + SPOOFER_VERSION(@"v19.10.7", 82), + SPOOFER_VERSION(@"v19.10.6", 83), + SPOOFER_VERSION(@"v19.10.5", 84), + SPOOFER_VERSION(@"v19.09.4", 85), + SPOOFER_VERSION(@"v19.09.3", 86), + SPOOFER_VERSION(@"v19.08.2", 87), + SPOOFER_VERSION(@"v19.07.5", 88), + SPOOFER_VERSION(@"v19.07.4", 89), + SPOOFER_VERSION(@"v19.06.2", 90), + SPOOFER_VERSION(@"v19.05.5", 91), + SPOOFER_VERSION(@"v19.05.3", 92), + SPOOFER_VERSION(@"v19.04.3", 93), + SPOOFER_VERSION(@"v19.03.2", 94), + SPOOFER_VERSION(@"v19.02.1", 95), + SPOOFER_VERSION(@"v19.01.1", 96) ]; YTSettingsPickerViewController *picker = [[%c(YTSettingsPickerViewController) alloc] initWithNavTitle:LOC(@"VERSION_SPOOFER_SELECTOR") pickerSectionTitle:nil rows:rows selectedItemIndex:appVersionSpoofer() parentResponder:[self parentResponder]]; [settingsViewController pushViewController:picker]; @@ -1470,7 +986,7 @@ extern NSBundle *uYouPlusBundle(); # pragma mark - Miscellaneous SECTION_HEADER(LOC(@"MISCELLANEOUS")); - SWITCH2(LOC(@"YouTube Sign-In Patch"), LOC(@"When enabled, it will allow you to sign in on the YouTube App when sideloaded.\nUnwanted Side Effects: Most Icons in the app will be Invisible & Notifications might not work."), kGoogleSignInPatch); + SWITCH2(LOC(@"YouTube Sign-In Patch"), LOC(@"When turned on, you can sign in to the YouTube App when Sideloaded.\nHowever, most material ui icons might disappear, and notifications could stop working.\nThis fix will automatically turn off after two app restarts."), kGoogleSignInPatch); SWITCH2(LOC(@"ADBLOCK_WORKAROUND_LITE"), LOC(@"ADBLOCK_WORKAROUND_LITE_DESC"), kAdBlockWorkaroundLite); SWITCH2(LOC(@"ADBLOCK_WORKAROUND"), LOC(@"ADBLOCK_WORKAROUND_DESC"), kAdBlockWorkaround); SWITCH3( @@ -1499,13 +1015,59 @@ extern NSBundle *uYouPlusBundle(); }); ); SWITCH(LOC(@"DISABLE_ANIMATED_YOUTUBE_LOGO"), nil, kDisableAnimatedYouTubeLogo); -// SWITCH(LOC(@"CENTER_YOUTUBE_LOGO"), LOC(@"CENTER_YOUTUBE_LOGO_DESC"), kCenterYouTubeLogo); + SWITCH(LOC(@"CENTER_YOUTUBE_LOGO"), LOC(@"CENTER_YOUTUBE_LOGO_DESC"), kCenterYouTubeLogo); SWITCH(LOC(@"HIDE_YOUTUBE_LOGO"), LOC(@"HIDE_YOUTUBE_LOGO_DESC"), kHideYouTubeLogo); SWITCH2(LOC(@"ENABLE_YT_STARTUP_ANIMATION"), LOC(@"ENABLE_YT_STARTUP_ANIMATION_DESC"), kYTStartupAnimation); SWITCH(LOC(@"DISABLE_HINTS"), LOC(@"DISABLE_HINTS_DESC"), kDisableHints); SWITCH(LOC(@"STICK_NAVIGATION_BAR"), LOC(@"STICK_NAVIGATION_BAR_DESC"), kStickNavigationBar); SWITCH2(LOC(@"HIDE_ISPONSORBLOCK"), nil, kHideiSponsorBlockButton); SWITCH(LOC(@"HIDE_CHIP_BAR"), LOC(@"HIDE_CHIP_BAR_DESC"), kHideChipBar); + SWITCH2(LOC(@"Enable Notifications Tab"), LOC(@"Makes the Notifications Tab appear back onto the Pivot Bar, experimental: Testing customization options."), kShowNotificationsTab); + YTSettingsSectionItem *notificationIconStyle = [%c(YTSettingsSectionItem) + itemWithTitle:LOC(@"Notifications Tab nostalgic customization") + accessibilityIdentifier:nil + detailTextBlock:^NSString *() { + switch (getNotificationIconStyle()) { + case 1: + return @"Thin Outline (2020+)"; + case 2: + return @"Filled (2018+)"; + case 3: + return @"Classic/Inbox (2014+)"; + case 0: + default: + return @"Default"; + } + } + selectBlock:^BOOL (YTSettingsCell *cell, NSUInteger arg1) { + NSArray *rows = @[ + [YTSettingsSectionItemClass checkmarkItemWithTitle:@"Default" titleDescription:nil selectBlock:^BOOL (YTSettingsCell *cell, NSUInteger arg1) { + [[NSUserDefaults standardUserDefaults] setInteger:0 forKey:@"notificationIconStyle"]; + [settingsViewController reloadData]; + return YES; + }], + [YTSettingsSectionItemClass checkmarkItemWithTitle:@"Thin Outline (2020+)" titleDescription:nil selectBlock:^BOOL (YTSettingsCell *cell, NSUInteger arg1) { + [[NSUserDefaults standardUserDefaults] setInteger:1 forKey:@"notificationIconStyle"]; + [settingsViewController reloadData]; + return YES; + }], + [YTSettingsSectionItemClass checkmarkItemWithTitle:@"Filled (2018+)" titleDescription:nil selectBlock:^BOOL (YTSettingsCell *cell, NSUInteger arg1) { + [[NSUserDefaults standardUserDefaults] setInteger:2 forKey:@"notificationIconStyle"]; + [settingsViewController reloadData]; + return YES; + }], + [YTSettingsSectionItemClass checkmarkItemWithTitle:@"Classic/Inbox (2014+)" titleDescription:nil selectBlock:^BOOL (YTSettingsCell *cell, NSUInteger arg1) { + [[NSUserDefaults standardUserDefaults] setInteger:3 forKey:@"notificationIconStyle"]; + [settingsViewController reloadData]; + return YES; + }] + ]; + YTSettingsPickerViewController *picker = [[%c(YTSettingsPickerViewController) alloc] initWithNavTitle:LOC(@"Notifications Tab nostalgic customization") pickerSectionTitle:nil rows:rows selectedItemIndex:getNotificationIconStyle() parentResponder:[self parentResponder]]; + [settingsViewController pushViewController:picker]; + return YES; + } + ]; + [sectionItems addObject:notificationIconStyle]; SWITCH(LOC(@"HIDE_PLAY_NEXT_IN_QUEUE"), LOC(@"HIDE_PLAY_NEXT_IN_QUEUE_DESC"), kHidePlayNextInQueue); SWITCH2(LOC(@"HIDE_COMMUNITY_POSTS"), LOC(@"HIDE_COMMUNITY_POSTS_DESC"), kHideCommunityPosts); SWITCH2(LOC(@"HIDE_HEADER_LINKS_UNDER_PROFILE"), LOC(@"HIDE_HEADER_LINKS_UNDER_PROFILE_DESC"), kHideChannelHeaderLinks); @@ -1527,24 +1089,32 @@ extern NSBundle *uYouPlusBundle(); // File Manager (Import Settings .txt) - (void)documentPicker:(UIDocumentPickerViewController *)controller didPickDocumentsAtURLs:(NSArray *)urls { if (urls.count > 0) { - NSURL *fileURL = urls.firstObject; - NSString *fileContents = [NSString stringWithContentsOfURL:fileURL encoding:NSUTF8StringEncoding error:nil]; - if (fileContents.length > 0) { - NSArray *lines = [fileContents componentsSeparatedByString:@"\n"]; - for (NSString *line in lines) { - NSArray *components = [line componentsSeparatedByString:@": "]; - if (components.count == 2) { - NSString *key = components[0]; - NSString *value = components[1]; - [[NSUserDefaults standardUserDefaults] setObject:value forKey:key]; - } - } - YTSettingsViewController *settingsViewController = [self valueForKey:@"_settingsViewControllerDelegate"]; - [settingsViewController reloadData]; + NSURL *url = urls.firstObject; + NSError *error = nil; + NSString *settingsString = [NSString stringWithContentsOfURL:url encoding:NSUTF8StringEncoding error:&error]; + if (error) { + NSLog(@"Error reading file: %@", error.localizedDescription); + UIAlertController *errorAlert = [UIAlertController alertControllerWithTitle:@"Error" message:@"Failed to read the settings file." preferredStyle:UIAlertControllerStyleAlert]; + [errorAlert addAction:[UIAlertAction actionWithTitle:@"OK" style:UIAlertActionStyleDefault handler:nil]]; + return; } + NSArray *lines = [settingsString componentsSeparatedByString:@"\n"]; + for (NSString *line in lines) { + NSArray *components = [line componentsSeparatedByString:@": "]; + if (components.count == 2) { + NSString *key = components[0]; + NSString *value = components[1]; + [[NSUserDefaults standardUserDefaults] setObject:value forKey:key]; + } + } + [[%c(GOOHUDManagerInternal) sharedInstance] showMessageMainThread:[%c(YTHUDMessage) messageWithText:@"Settings imported"]]; } } +- (void)documentPickerWasCancelled:(UIDocumentPickerViewController *)controller { + NSLog(@"Document picker was cancelled"); +} + // - (void)updateSectionForCategory:(NSUInteger)category withEntry:(id)entry { if (category == uYouPlusSection) { diff --git a/Sources/uYouPlusVersionSpoofer.xm b/Sources/uYouPlusVersionSpoofer.xm index af95d3e..34be216 100644 --- a/Sources/uYouPlusVersionSpoofer.xm +++ b/Sources/uYouPlusVersionSpoofer.xm @@ -1,1415 +1,134 @@ #import "uYouPlus.h" -// +typedef struct { + int version; + NSString *appVersion; +} VersionMapping; + +static VersionMapping versionMappings[] = { + {0, @"20.33.2"}, + {1, @"20.32.5"}, + {2, @"20.32.4"}, + {3, @"20.31.6"}, + {4, @"20.31.5"}, + {5, @"20.30.5"}, + {6, @"20.29.3"}, + {7, @"20.28.2"}, + {8, @"20.26.7"}, + {9, @"20.25.4"}, + {10, @"20.24.5"}, + {11, @"20.24.4"}, + {12, @"20.23.3"}, + {13, @"20.22.1"}, + {14, @"20.21.6"}, + {15, @"20.20.7"}, + {16, @"20.20.5"}, + {17, @"20.19.3"}, + {18, @"20.19.2"}, + {19, @"20.18.5"}, + {20, @"20.18.4"}, + {21, @"20.16.7"}, + {22, @"20.15.1"}, + {23, @"20.14.2"}, + {24, @"20.13.5"}, + {25, @"20.12.4"}, + {26, @"20.11.6"}, + {27, @"20.10.4"}, + {28, @"20.10.3"}, + {29, @"20.09.3"}, + {30, @"20.08.3"}, + {31, @"20.07.6"}, + {32, @"20.06.03"}, + {33, @"20.05.4"}, + {34, @"20.03.1"}, + {35, @"20.03.02"}, + {36, @"20.02.3"}, + {37, @"19.49.7"}, + {38, @"19.49.5"}, + {39, @"19.49.3"}, + {40, @"19.47.7"}, + {41, @"19.46.3"}, + {42, @"19.45.4"}, + {43, @"19.44.4"}, + {44, @"19.43.2"}, + {45, @"19.42.1"}, + {46, @"19.41.3"}, + {47, @"19.40.4"}, + {48, @"19.39.1"}, + {49, @"19.38.2"}, + {50, @"19.37.2"}, + {51, @"19.36.1"}, + {52, @"19.35.3"}, + {53, @"19.34.2"}, + {54, @"19.33.2"}, + {55, @"19.32.8"}, + {56, @"19.32.6"}, + {57, @"19.31.4"}, + {58, @"19.30.2"}, + {59, @"19.29.1"}, + {60, @"19.28.1"}, + {61, @"19.26.5"}, + {62, @"19.25.4"}, + {63, @"19.25.3"}, + {64, @"19.24.3"}, + {65, @"19.24.2"}, + {66, @"19.23.3"}, + {67, @"19.22.6"}, + {68, @"19.22.3"}, + {69, @"19.21.3"}, + {70, @"19.21.2"}, + {71, @"19.20.2"}, + {72, @"19.19.7"}, + {73, @"19.19.5"}, + {74, @"19.18.2"}, + {75, @"19.17.2"}, + {76, @"19.16.3"}, + {77, @"19.15.1"}, + {78, @"19.14.3"}, + {79, @"19.14.2"}, + {80, @"19.13.1"}, + {81, @"19.12.3"}, + {82, @"19.10.7"}, + {83, @"19.10.6"}, + {84, @"19.10.5"}, + {85, @"19.09.4"}, + {86, @"19.09.3"}, + {87, @"19.08.2"}, + {88, @"19.07.5"}, + {89, @"19.07.4"}, + {90, @"19.06.2"}, + {91, @"19.05.5"}, + {92, @"19.05.3"}, + {93, @"19.04.3"}, + {94, @"19.03.2"}, + {95, @"19.02.1"}, + {96, @"19.01.1"} +}; + static int appVersionSpoofer() { return [[NSUserDefaults standardUserDefaults] integerForKey:@"versionSpoofer"]; } -static BOOL version0() { - return IS_ENABLED(@"enableVersionSpoofer_enabled") && appVersionSpoofer() == 0; -} -static BOOL version1() { - return IS_ENABLED(@"enableVersionSpoofer_enabled") && appVersionSpoofer() == 1; -} -static BOOL version2() { - return IS_ENABLED(@"enableVersionSpoofer_enabled") && appVersionSpoofer() == 2; -} -static BOOL version3() { - return IS_ENABLED(@"enableVersionSpoofer_enabled") && appVersionSpoofer() == 3; -} -static BOOL version4() { - return IS_ENABLED(@"enableVersionSpoofer_enabled") && appVersionSpoofer() == 4; -} -static BOOL version5() { - return IS_ENABLED(@"enableVersionSpoofer_enabled") && appVersionSpoofer() == 5; -} -static BOOL version6() { - return IS_ENABLED(@"enableVersionSpoofer_enabled") && appVersionSpoofer() == 6; -} -static BOOL version7() { - return IS_ENABLED(@"enableVersionSpoofer_enabled") && appVersionSpoofer() == 7; -} -static BOOL version8() { - return IS_ENABLED(@"enableVersionSpoofer_enabled") && appVersionSpoofer() == 8; -} -static BOOL version9() { - return IS_ENABLED(@"enableVersionSpoofer_enabled") && appVersionSpoofer() == 9; -} -static BOOL version10() { - return IS_ENABLED(@"enableVersionSpoofer_enabled") && appVersionSpoofer() == 10; -} -static BOOL version11() { - return IS_ENABLED(@"enableVersionSpoofer_enabled") && appVersionSpoofer() == 11; -} -static BOOL version12() { - return IS_ENABLED(@"enableVersionSpoofer_enabled") && appVersionSpoofer() == 12; -} -static BOOL version13() { - return IS_ENABLED(@"enableVersionSpoofer_enabled") && appVersionSpoofer() == 13; -} -static BOOL version14() { - return IS_ENABLED(@"enableVersionSpoofer_enabled") && appVersionSpoofer() == 14; -} -static BOOL version15() { - return IS_ENABLED(@"enableVersionSpoofer_enabled") && appVersionSpoofer() == 15; -} -static BOOL version16() { - return IS_ENABLED(@"enableVersionSpoofer_enabled") && appVersionSpoofer() == 16; -} -static BOOL version17() { - return IS_ENABLED(@"enableVersionSpoofer_enabled") && appVersionSpoofer() == 17; -} -static BOOL version18() { - return IS_ENABLED(@"enableVersionSpoofer_enabled") && appVersionSpoofer() == 18; -} -static BOOL version19() { - return IS_ENABLED(@"enableVersionSpoofer_enabled") && appVersionSpoofer() == 19; -} -static BOOL version20() { - return IS_ENABLED(@"enableVersionSpoofer_enabled") && appVersionSpoofer() == 20; -} -static BOOL version21() { - return IS_ENABLED(@"enableVersionSpoofer_enabled") && appVersionSpoofer() == 21; -} -static BOOL version22() { - return IS_ENABLED(@"enableVersionSpoofer_enabled") && appVersionSpoofer() == 22; -} -static BOOL version23() { - return IS_ENABLED(@"enableVersionSpoofer_enabled") && appVersionSpoofer() == 23; -} -static BOOL version24() { - return IS_ENABLED(@"enableVersionSpoofer_enabled") && appVersionSpoofer() == 24; -} -static BOOL version25() { - return IS_ENABLED(@"enableVersionSpoofer_enabled") && appVersionSpoofer() == 25; -} -static BOOL version26() { - return IS_ENABLED(@"enableVersionSpoofer_enabled") && appVersionSpoofer() == 26; -} -static BOOL version27() { - return IS_ENABLED(@"enableVersionSpoofer_enabled") && appVersionSpoofer() == 27; -} -static BOOL version28() { - return IS_ENABLED(@"enableVersionSpoofer_enabled") && appVersionSpoofer() == 28; -} -static BOOL version29() { - return IS_ENABLED(@"enableVersionSpoofer_enabled") && appVersionSpoofer() == 29; -} -static BOOL version30() { - return IS_ENABLED(@"enableVersionSpoofer_enabled") && appVersionSpoofer() == 30; -} -static BOOL version31() { - return IS_ENABLED(@"enableVersionSpoofer_enabled") && appVersionSpoofer() == 31; -} -static BOOL version32() { - return IS_ENABLED(@"enableVersionSpoofer_enabled") && appVersionSpoofer() == 32; -} -static BOOL version33() { - return IS_ENABLED(@"enableVersionSpoofer_enabled") && appVersionSpoofer() == 33; -} -static BOOL version34() { - return IS_ENABLED(@"enableVersionSpoofer_enabled") && appVersionSpoofer() == 34; -} -static BOOL version35() { - return IS_ENABLED(@"enableVersionSpoofer_enabled") && appVersionSpoofer() == 35; -} -static BOOL version36() { - return IS_ENABLED(@"enableVersionSpoofer_enabled") && appVersionSpoofer() == 36; -} -static BOOL version37() { - return IS_ENABLED(@"enableVersionSpoofer_enabled") && appVersionSpoofer() == 37; -} -static BOOL version38() { - return IS_ENABLED(@"enableVersionSpoofer_enabled") && appVersionSpoofer() == 38; -} -static BOOL version39() { - return IS_ENABLED(@"enableVersionSpoofer_enabled") && appVersionSpoofer() == 39; -} -static BOOL version40() { - return IS_ENABLED(@"enableVersionSpoofer_enabled") && appVersionSpoofer() == 40; -} -static BOOL version41() { - return IS_ENABLED(@"enableVersionSpoofer_enabled") && appVersionSpoofer() == 41; -} -static BOOL version42() { - return IS_ENABLED(@"enableVersionSpoofer_enabled") && appVersionSpoofer() == 42; -} -static BOOL version43() { - return IS_ENABLED(@"enableVersionSpoofer_enabled") && appVersionSpoofer() == 43; -} -static BOOL version44() { - return IS_ENABLED(@"enableVersionSpoofer_enabled") && appVersionSpoofer() == 44; -} -static BOOL version45() { - return IS_ENABLED(@"enableVersionSpoofer_enabled") && appVersionSpoofer() == 45; -} -static BOOL version46() { - return IS_ENABLED(@"enableVersionSpoofer_enabled") && appVersionSpoofer() == 46; -} -static BOOL version47() { - return IS_ENABLED(@"enableVersionSpoofer_enabled") && appVersionSpoofer() == 47; -} -static BOOL version48() { - return IS_ENABLED(@"enableVersionSpoofer_enabled") && appVersionSpoofer() == 48; -} -static BOOL version49() { - return IS_ENABLED(@"enableVersionSpoofer_enabled") && appVersionSpoofer() == 49; -} -static BOOL version50() { - return IS_ENABLED(@"enableVersionSpoofer_enabled") && appVersionSpoofer() == 50; -} -static BOOL version51() { - return IS_ENABLED(@"enableVersionSpoofer_enabled") && appVersionSpoofer() == 51; -} -static BOOL version52() { - return IS_ENABLED(@"enableVersionSpoofer_enabled") && appVersionSpoofer() == 52; -} -static BOOL version53() { - return IS_ENABLED(@"enableVersionSpoofer_enabled") && appVersionSpoofer() == 53; -} -static BOOL version54() { - return IS_ENABLED(@"enableVersionSpoofer_enabled") && appVersionSpoofer() == 54; -} -static BOOL version55() { - return IS_ENABLED(@"enableVersionSpoofer_enabled") && appVersionSpoofer() == 55; -} -static BOOL version56() { - return IS_ENABLED(@"enableVersionSpoofer_enabled") && appVersionSpoofer() == 56; -} -static BOOL version57() { - return IS_ENABLED(@"enableVersionSpoofer_enabled") && appVersionSpoofer() == 57; -} -static BOOL version58() { - return IS_ENABLED(@"enableVersionSpoofer_enabled") && appVersionSpoofer() == 58; -} -static BOOL version59() { - return IS_ENABLED(@"enableVersionSpoofer_enabled") && appVersionSpoofer() == 59; -} -static BOOL version60() { - return IS_ENABLED(@"enableVersionSpoofer_enabled") && appVersionSpoofer() == 60; -} -static BOOL version61() { - return IS_ENABLED(@"enableVersionSpoofer_enabled") && appVersionSpoofer() == 61; -} -static BOOL version62() { - return IS_ENABLED(@"enableVersionSpoofer_enabled") && appVersionSpoofer() == 62; -} -static BOOL version63() { - return IS_ENABLED(@"enableVersionSpoofer_enabled") && appVersionSpoofer() == 63; -} -static BOOL version64() { - return IS_ENABLED(@"enableVersionSpoofer_enabled") && appVersionSpoofer() == 64; -} -static BOOL version65() { - return IS_ENABLED(@"enableVersionSpoofer_enabled") && appVersionSpoofer() == 65; -} -static BOOL version66() { - return IS_ENABLED(@"enableVersionSpoofer_enabled") && appVersionSpoofer() == 66; -} -static BOOL version67() { - return IS_ENABLED(@"enableVersionSpoofer_enabled") && appVersionSpoofer() == 67; -} -static BOOL version68() { - return IS_ENABLED(@"enableVersionSpoofer_enabled") && appVersionSpoofer() == 68; -} -static BOOL version69() { - return IS_ENABLED(@"enableVersionSpoofer_enabled") && appVersionSpoofer() == 69; -} -static BOOL version70() { - return IS_ENABLED(@"enableVersionSpoofer_enabled") && appVersionSpoofer() == 70; -} -static BOOL version71() { - return IS_ENABLED(@"enableVersionSpoofer_enabled") && appVersionSpoofer() == 71; -} -static BOOL version72() { - return IS_ENABLED(@"enableVersionSpoofer_enabled") && appVersionSpoofer() == 72; -} -static BOOL version73() { - return IS_ENABLED(@"enableVersionSpoofer_enabled") && appVersionSpoofer() == 73; -} -static BOOL version74() { - return IS_ENABLED(@"enableVersionSpoofer_enabled") && appVersionSpoofer() == 74; -} -static BOOL version75() { - return IS_ENABLED(@"enableVersionSpoofer_enabled") && appVersionSpoofer() == 75; -} -static BOOL version76() { - return IS_ENABLED(@"enableVersionSpoofer_enabled") && appVersionSpoofer() == 76; -} -static BOOL version77() { - return IS_ENABLED(@"enableVersionSpoofer_enabled") && appVersionSpoofer() == 77; -} -static BOOL version78() { - return IS_ENABLED(@"enableVersionSpoofer_enabled") && appVersionSpoofer() == 78; -} -static BOOL version79() { - return IS_ENABLED(@"enableVersionSpoofer_enabled") && appVersionSpoofer() == 79; -} -static BOOL version80() { - return IS_ENABLED(@"enableVersionSpoofer_enabled") && appVersionSpoofer() == 80; -} -static BOOL version81() { - return IS_ENABLED(@"enableVersionSpoofer_enabled") && appVersionSpoofer() == 81; -} -static BOOL version82() { - return IS_ENABLED(@"enableVersionSpoofer_enabled") && appVersionSpoofer() == 82; -} -static BOOL version83() { - return IS_ENABLED(@"enableVersionSpoofer_enabled") && appVersionSpoofer() == 83; -} -static BOOL version84() { - return IS_ENABLED(@"enableVersionSpoofer_enabled") && appVersionSpoofer() == 84; -} -static BOOL version85() { - return IS_ENABLED(@"enableVersionSpoofer_enabled") && appVersionSpoofer() == 85; -} -static BOOL version86() { - return IS_ENABLED(@"enableVersionSpoofer_enabled") && appVersionSpoofer() == 86; -} -static BOOL version87() { - return IS_ENABLED(@"enableVersionSpoofer_enabled") && appVersionSpoofer() == 87; -} -static BOOL version88() { - return IS_ENABLED(@"enableVersionSpoofer_enabled") && appVersionSpoofer() == 88; -} -static BOOL version89() { - return IS_ENABLED(@"enableVersionSpoofer_enabled") && appVersionSpoofer() == 89; -} -static BOOL version90() { - return IS_ENABLED(@"enableVersionSpoofer_enabled") && appVersionSpoofer() == 90; -} -static BOOL version91() { - return IS_ENABLED(@"enableVersionSpoofer_enabled") && appVersionSpoofer() == 91; -} -static BOOL version92() { - return IS_ENABLED(@"enableVersionSpoofer_enabled") && appVersionSpoofer() == 92; -} -static BOOL version93() { - return IS_ENABLED(@"enableVersionSpoofer_enabled") && appVersionSpoofer() == 93; -} -static BOOL version94() { - return IS_ENABLED(@"enableVersionSpoofer_enabled") && appVersionSpoofer() == 94; -} -static BOOL version95() { - return IS_ENABLED(@"enableVersionSpoofer_enabled") && appVersionSpoofer() == 95; -} -static BOOL version96() { - return IS_ENABLED(@"enableVersionSpoofer_enabled") && appVersionSpoofer() == 96; -} -static BOOL version97() { - return IS_ENABLED(@"enableVersionSpoofer_enabled") && appVersionSpoofer() == 97; -} -static BOOL version98() { - return IS_ENABLED(@"enableVersionSpoofer_enabled") && appVersionSpoofer() == 98; -} -static BOOL version99() { - return IS_ENABLED(@"enableVersionSpoofer_enabled") && appVersionSpoofer() == 99; -} -static BOOL version100() { - return IS_ENABLED(@"enableVersionSpoofer_enabled") && appVersionSpoofer() == 100; -} -static BOOL version101() { - return IS_ENABLED(@"enableVersionSpoofer_enabled") && appVersionSpoofer() == 101; -} -static BOOL version102() { - return IS_ENABLED(@"enableVersionSpoofer_enabled") && appVersionSpoofer() == 102; -} -static BOOL version103() { - return IS_ENABLED(@"enableVersionSpoofer_enabled") && appVersionSpoofer() == 103; -} -static BOOL version104() { - return IS_ENABLED(@"enableVersionSpoofer_enabled") && appVersionSpoofer() == 104; -} -static BOOL version105() { - return IS_ENABLED(@"enableVersionSpoofer_enabled") && appVersionSpoofer() == 105; -} -static BOOL version106() { - return IS_ENABLED(@"enableVersionSpoofer_enabled") && appVersionSpoofer() == 106; -} -static BOOL version107() { - return IS_ENABLED(@"enableVersionSpoofer_enabled") && appVersionSpoofer() == 107; -} -static BOOL version108() { - return IS_ENABLED(@"enableVersionSpoofer_enabled") && appVersionSpoofer() == 108; -} -static BOOL version109() { - return IS_ENABLED(@"enableVersionSpoofer_enabled") && appVersionSpoofer() == 109; -} -static BOOL version110() { - return IS_ENABLED(@"enableVersionSpoofer_enabled") && appVersionSpoofer() == 110; -} -static BOOL version111() { - return IS_ENABLED(@"enableVersionSpoofer_enabled") && appVersionSpoofer() == 111; -} -static BOOL version112() { - return IS_ENABLED(@"enableVersionSpoofer_enabled") && appVersionSpoofer() == 112; -} -static BOOL version113() { - return IS_ENABLED(@"enableVersionSpoofer_enabled") && appVersionSpoofer() == 113; -} -static BOOL version114() { - return IS_ENABLED(@"enableVersionSpoofer_enabled") && appVersionSpoofer() == 114; -} -static BOOL version115() { - return IS_ENABLED(@"enableVersionSpoofer_enabled") && appVersionSpoofer() == 115; -} -static BOOL version116() { - return IS_ENABLED(@"enableVersionSpoofer_enabled") && appVersionSpoofer() == 116; -} - -%group gVersion0 -%hook YTVersionUtils -+ (NSString *)appVersion { return @"19.40.4"; } -%end -%end - -%group gVersion1 -%hook YTVersionUtils -+ (NSString *)appVersion { return @"19.39.1"; } -%end -%end - -%group gVersion2 -%hook YTVersionUtils -+ (NSString *)appVersion { return @"19.38.2"; } -%end -%end - -%group gVersion3 -%hook YTVersionUtils -+ (NSString *)appVersion { return @"19.37.2"; } -%end -%end - -%group gVersion4 -%hook YTVersionUtils -+ (NSString *)appVersion { return @"19.36.1"; } -%end -%end - -%group gVersion5 -%hook YTVersionUtils -+ (NSString *)appVersion { return @"19.35.3"; } -%end -%end - -%group gVersion6 -%hook YTVersionUtils -+ (NSString *)appVersion { return @"19.34.2"; } -%end -%end - -%group gVersion7 -%hook YTVersionUtils -+ (NSString *)appVersion { return @"19.33.2"; } -%end -%end - -%group gVersion8 -%hook YTVersionUtils -+ (NSString *)appVersion { return @"19.32.8"; } -%end -%end - -%group gVersion9 -%hook YTVersionUtils -+ (NSString *)appVersion { return @"19.32.6"; } -%end -%end - -%group gVersion10 -%hook YTVersionUtils -+ (NSString *)appVersion { return @"19.31.4"; } -%end -%end - -%group gVersion11 -%hook YTVersionUtils -+ (NSString *)appVersion { return @"19.30.2"; } -%end -%end - -%group gVersion12 -%hook YTVersionUtils -+ (NSString *)appVersion { return @"19.29.1"; } -%end -%end - -%group gVersion13 -%hook YTVersionUtils -+ (NSString *)appVersion { return @"19.28.1"; } -%end -%end - -%group gVersion14 -%hook YTVersionUtils -+ (NSString *)appVersion { return @"19.26.5"; } -%end -%end - -%group gVersion15 -%hook YTVersionUtils -+ (NSString *)appVersion { return @"19.25.4"; } -%end -%end - -%group gVersion16 -%hook YTVersionUtils -+ (NSString *)appVersion { return @"19.25.3"; } -%end -%end - -%group gVersion17 -%hook YTVersionUtils -+ (NSString *)appVersion { return @"19.24.3"; } -%end -%end - -%group gVersion18 -%hook YTVersionUtils -+ (NSString *)appVersion { return @"19.24.2"; } -%end -%end - -%group gVersion19 -%hook YTVersionUtils -+ (NSString *)appVersion { return @"19.23.3"; } -%end -%end - -%group gVersion20 -%hook YTVersionUtils -+ (NSString *)appVersion { return @"19.22.6"; } -%end -%end - -%group gVersion21 -%hook YTVersionUtils -+ (NSString *)appVersion { return @"19.22.3"; } -%end -%end - -%group gVersion22 -%hook YTVersionUtils -+ (NSString *)appVersion { return @"19.21.3"; } -%end -%end - -%group gVersion23 -%hook YTVersionUtils -+ (NSString *)appVersion { return @"19.21.2"; } -%end -%end - -%group gVersion24 -%hook YTVersionUtils -+ (NSString *)appVersion { return @"19.20.2"; } -%end -%end - -%group gVersion25 -%hook YTVersionUtils -+ (NSString *)appVersion { return @"19.19.7"; } -%end -%end - -%group gVersion26 -%hook YTVersionUtils -+ (NSString *)appVersion { return @"19.19.5"; } -%end -%end - -%group gVersion27 -%hook YTVersionUtils -+ (NSString *)appVersion { return @"19.18.2"; } -%end -%end - -%group gVersion28 -%hook YTVersionUtils -+ (NSString *)appVersion { return @"19.17.2"; } -%end -%end - -%group gVersion29 -%hook YTVersionUtils -+ (NSString *)appVersion { return @"19.16.3"; } -%end -%end - -%group gVersion30 -%hook YTVersionUtils -+ (NSString *)appVersion { return @"19.15.1"; } -%end -%end - -%group gVersion31 -%hook YTVersionUtils -+ (NSString *)appVersion { return @"19.14.3"; } -%end -%end - -%group gVersion32 -%hook YTVersionUtils -+ (NSString *)appVersion { return @"19.14.2"; } -%end -%end - -%group gVersion33 -%hook YTVersionUtils -+ (NSString *)appVersion { return @"19.13.1"; } -%end -%end - -%group gVersion34 -%hook YTVersionUtils -+ (NSString *)appVersion { return @"19.12.3"; } -%end -%end - -%group gVersion35 -%hook YTVersionUtils -+ (NSString *)appVersion { return @"19.10.7"; } -%end -%end - -%group gVersion36 -%hook YTVersionUtils -+ (NSString *)appVersion { return @"19.10.6"; } -%end -%end - -%group gVersion37 -%hook YTVersionUtils -+ (NSString *)appVersion { return @"19.10.5"; } -%end -%end - -%group gVersion38 -%hook YTVersionUtils -+ (NSString *)appVersion { return @"19.09.4"; } -%end -%end - -%group gVersion39 -%hook YTVersionUtils -+ (NSString *)appVersion { return @"19.09.3"; } -%end -%end - -%group gVersion40 -%hook YTVersionUtils -+ (NSString *)appVersion { return @"19.08.2"; } -%end -%end - -%group gVersion41 -%hook YTVersionUtils -+ (NSString *)appVersion { return @"19.07.5"; } -%end -%end - -%group gVersion42 -%hook YTVersionUtils -+ (NSString *)appVersion { return @"19.07.4"; } -%end -%end - -%group gVersion43 -%hook YTVersionUtils -+ (NSString *)appVersion { return @"19.06.2"; } -%end -%end - -%group gVersion44 -%hook YTVersionUtils -+ (NSString *)appVersion { return @"19.05.5"; } -%end -%end - -%group gVersion45 -%hook YTVersionUtils -+ (NSString *)appVersion { return @"19.05.3"; } -%end -%end - -%group gVersion46 -%hook YTVersionUtils -+ (NSString *)appVersion { return @"19.04.3"; } -%end -%end - -%group gVersion47 -%hook YTVersionUtils -+ (NSString *)appVersion { return @"19.03.2"; } -%end -%end - -%group gVersion48 -%hook YTVersionUtils -+ (NSString *)appVersion { return @"19.02.1"; } -%end -%end - -%group gVersion49 -%hook YTVersionUtils -+ (NSString *)appVersion { return @"19.01.1"; } -%end -%end - -%group gVersion50 -%hook YTVersionUtils -+ (NSString *)appVersion { return @"18.49.3"; } -%end -%end - -%group gVersion51 -%hook YTVersionUtils -+ (NSString *)appVersion { return @"18.48.3"; } -%end -%end - -%group gVersion52 -%hook YTVersionUtils -+ (NSString *)appVersion { return @"18.46.3"; } -%end -%end - -%group gVersion53 -%hook YTVersionUtils -+ (NSString *)appVersion { return @"18.45.2"; } -%end -%end - -%group gVersion54 -%hook YTVersionUtils -+ (NSString *)appVersion { return @"18.44.3"; } -%end -%end - -%group gVersion55 -%hook YTVersionUtils -+ (NSString *)appVersion { return @"18.43.4"; } -%end -%end - -%group gVersion56 -%hook YTVersionUtils -+ (NSString *)appVersion { return @"18.41.5"; } -%end -%end - -%group gVersion57 -%hook YTVersionUtils -+ (NSString *)appVersion { return @"18.41.3"; } -%end -%end - -%group gVersion58 -%hook YTVersionUtils -+ (NSString *)appVersion { return @"18.41.2"; } -%end -%end - -%group gVersion59 -%hook YTVersionUtils -+ (NSString *)appVersion { return @"18.40.1"; } -%end -%end - -%group gVersion60 -%hook YTVersionUtils -+ (NSString *)appVersion { return @"18.39.1"; } -%end -%end - -%group gVersion61 -%hook YTVersionUtils -+ (NSString *)appVersion { return @"18.38.2"; } -%end -%end - -%group gVersion62 -%hook YTVersionUtils -+ (NSString *)appVersion { return @"18.35.4"; } -%end -%end - -%group gVersion63 -%hook YTVersionUtils -+ (NSString *)appVersion { return @"18.34.5"; } -%end -%end - -%group gVersion64 -%hook YTVersionUtils -+ (NSString *)appVersion { return @"18.33.3"; } -%end -%end - -%group gVersion65 -%hook YTVersionUtils -+ (NSString *)appVersion { return @"18.33.2"; } -%end -%end - -%group gVersion66 -%hook YTVersionUtils -+ (NSString *)appVersion { return @"18.32.2"; } -%end -%end - -%group gVersion67 -%hook YTVersionUtils -+ (NSString *)appVersion { return @"18.31.3"; } -%end -%end - -%group gVersion68 -%hook YTVersionUtils -+ (NSString *)appVersion { return @"18.30.7"; } -%end -%end - -%group gVersion69 -%hook YTVersionUtils -+ (NSString *)appVersion { return @"18.30.6"; } -%end -%end - -%group gVersion70 -%hook YTVersionUtils -+ (NSString *)appVersion { return @"18.29.1"; } -%end -%end - -%group gVersion71 -%hook YTVersionUtils -+ (NSString *)appVersion { return @"18.28.3"; } -%end -%end - -%group gVersion72 -%hook YTVersionUtils -+ (NSString *)appVersion { return @"18.27.3"; } -%end -%end - -%group gVersion73 -%hook YTVersionUtils -+ (NSString *)appVersion { return @"18.25.1"; } -%end -%end - -%group gVersion74 -%hook YTVersionUtils -+ (NSString *)appVersion { return @"18.23.3"; } -%end -%end - -%group gVersion75 -%hook YTVersionUtils -+ (NSString *)appVersion { return @"18.22.9"; } -%end -%end - -%group gVersion76 -%hook YTVersionUtils -+ (NSString *)appVersion { return @"18.21.3"; } -%end -%end - -%group gVersion77 -%hook YTVersionUtils -+ (NSString *)appVersion { return @"18.20.3"; } -%end -%end - -%group gVersion78 -%hook YTVersionUtils -+ (NSString *)appVersion { return @"18.19.1"; } -%end -%end - -%group gVersion79 -%hook YTVersionUtils -+ (NSString *)appVersion { return @"18.18.2"; } -%end -%end - -%group gVersion80 -%hook YTVersionUtils -+ (NSString *)appVersion { return @"18.17.2"; } -%end -%end - -%group gVersion81 -%hook YTVersionUtils -+ (NSString *)appVersion { return @"18.16.2"; } -%end -%end - -%group gVersion82 -%hook YTVersionUtils -+ (NSString *)appVersion { return @"18.15.1"; } -%end -%end - -%group gVersion83 -%hook YTVersionUtils -+ (NSString *)appVersion { return @"18.14.1"; } -%end -%end - -%group gVersion84 -%hook YTVersionUtils -+ (NSString *)appVersion { return @"18.13.4"; } -%end -%end - -%group gVersion85 -%hook YTVersionUtils -+ (NSString *)appVersion { return @"18.12.2"; } -%end -%end - -%group gVersion86 -%hook YTVersionUtils -+ (NSString *)appVersion { return @"18.11.2"; } -%end -%end - -%group gVersion87 -%hook YTVersionUtils -+ (NSString *)appVersion { return @"18.10.1"; } -%end -%end - -%group gVersion88 -%hook YTVersionUtils -+ (NSString *)appVersion { return @"18.09.4"; } -%end -%end - -%group gVersion89 -%hook YTVersionUtils -+ (NSString *)appVersion { return @"18.08.1"; } -%end -%end - -%group gVersion90 -%hook YTVersionUtils -+ (NSString *)appVersion { return @"18.07.5"; } -%end -%end - -%group gVersion91 -%hook YTVersionUtils -+ (NSString *)appVersion { return @"18.05.2"; } -%end -%end - -%group gVersion92 -%hook YTVersionUtils -+ (NSString *)appVersion { return @"18.04.3"; } -%end -%end - -%group gVersion93 -%hook YTVersionUtils -+ (NSString *)appVersion { return @"18.03.3"; } -%end -%end - -%group gVersion94 -%hook YTVersionUtils -+ (NSString *)appVersion { return @"18.02.03"; } -%end -%end - -%group gVersion95 -%hook YTVersionUtils -+ (NSString *)appVersion { return @"18.01.6"; } -%end -%end - -%group gVersion96 -%hook YTVersionUtils -+ (NSString *)appVersion { return @"18.01.4"; } -%end -%end - -%group gVersion97 -%hook YTVersionUtils -+ (NSString *)appVersion { return @"18.01.2"; } -%end -%end - -%group gVersion98 -%hook YTVersionUtils -+ (NSString *)appVersion { return @"17.49.6"; } -%end -%end - -%group gVersion99 -%hook YTVersionUtils -+ (NSString *)appVersion { return @"17.49.4"; } -%end -%end - -%group gVersion100 -%hook YTVersionUtils -+ (NSString *)appVersion { return @"17.46.4"; } -%end -%end - -%group gVersion101 -%hook YTVersionUtils -+ (NSString *)appVersion { return @"17.45.1"; } -%end -%end - -%group gVersion102 -%hook YTVersionUtils -+ (NSString *)appVersion { return @"17.44.4"; } -%end -%end - -%group gVersion103 -%hook YTVersionUtils -+ (NSString *)appVersion { return @"17.43.1"; } -%end -%end - -%group gVersion104 -%hook YTVersionUtils -+ (NSString *)appVersion { return @"17.42.7"; } -%end -%end - -%group gVersion105 -%hook YTVersionUtils -+ (NSString *)appVersion { return @"17.42.6"; } -%end -%end - -%group gVersion106 -%hook YTVersionUtils -+ (NSString *)appVersion { return @"17.41.2"; } -%end -%end - -%group gVersion107 -%hook YTVersionUtils -+ (NSString *)appVersion { return @"17.40.5"; } -%end -%end - -%group gVersion108 -%hook YTVersionUtils -+ (NSString *)appVersion { return @"17.39.4"; } -%end -%end - -%group gVersion109 -%hook YTVersionUtils -+ (NSString *)appVersion { return @"17.38.10"; } -%end -%end - -%group gVersion110 -%hook YTVersionUtils -+ (NSString *)appVersion { return @"17.38.9"; } -%end -%end - -%group gVersion111 -%hook YTVersionUtils -+ (NSString *)appVersion { return @"17.37.3"; } -%end -%end - -%group gVersion112 -%hook YTVersionUtils -+ (NSString *)appVersion { return @"17.36.4"; } -%end -%end - -%group gVersion113 -%hook YTVersionUtils -+ (NSString *)appVersion { return @"17.36.3"; } -%end -%end -%group gVersion114 -%hook YTVersionUtils -+ (NSString *)appVersion { return @"17.35.3"; } -%end -%end +static BOOL isVersionSpooferEnabled() { + return IS_ENABLED(@"enableVersionSpoofer_enabled"); +} -%group gVersion115 -%hook YTVersionUtils -+ (NSString *)appVersion { return @"17.34.3"; } -%end -%end +static NSString* getAppVersionForSpoofedVersion(int spoofedVersion) { + for (int i = 0; i < sizeof(versionMappings) / sizeof(versionMappings[0]); i++) { + if (versionMappings[i].version == spoofedVersion) { + return versionMappings[i].appVersion; + } + } + return nil; +} -%group gVersion116 %hook YTVersionUtils -+ (NSString *)appVersion { return @"17.33.2"; } -%end -%end - -# pragma mark - ctor -%ctor { - %init; - if (version0()) { - %init(gVersion0); - } - if (version1()) { - %init(gVersion1); - } - if (version2()) { - %init(gVersion2); - } - if (version3()) { - %init(gVersion3); - } - if (version4()) { - %init(gVersion4); - } - if (version5()) { - %init(gVersion5); - } - if (version6()) { - %init(gVersion6); - } - if (version7()) { - %init(gVersion7); - } - if (version8()) { - %init(gVersion8); - } - if (version9()) { - %init(gVersion9); - } - if (version10()) { - %init(gVersion10); - } - if (version11()) { - %init(gVersion11); - } - if (version12()) { - %init(gVersion12); - } - if (version13()) { - %init(gVersion13); - } - if (version14()) { - %init(gVersion14); - } - if (version15()) { - %init(gVersion15); - } - if (version16()) { - %init(gVersion16); - } - if (version17()) { - %init(gVersion17); - } - if (version18()) { - %init(gVersion18); - } - if (version19()) { - %init(gVersion19); - } - if (version20()) { - %init(gVersion20); - } - if (version21()) { - %init(gVersion21); - } - if (version22()) { - %init(gVersion22); - } - if (version23()) { - %init(gVersion23); - } - if (version24()) { - %init(gVersion24); - } - if (version25()) { - %init(gVersion25); - } - if (version26()) { - %init(gVersion26); - } - if (version27()) { - %init(gVersion27); - } - if (version28()) { - %init(gVersion28); - } - if (version29()) { - %init(gVersion29); - } - if (version30()) { - %init(gVersion30); - } - if (version31()) { - %init(gVersion31); - } - if (version32()) { - %init(gVersion32); - } - if (version33()) { - %init(gVersion33); - } - if (version34()) { - %init(gVersion34); - } - if (version35()) { - %init(gVersion35); - } - if (version36()) { - %init(gVersion36); - } - if (version37()) { - %init(gVersion37); - } - if (version38()) { - %init(gVersion38); - } - if (version39()) { - %init(gVersion39); - } - if (version40()) { - %init(gVersion40); - } - if (version41()) { - %init(gVersion41); - } - if (version42()) { - %init(gVersion42); - } - if (version43()) { - %init(gVersion43); - } - if (version44()) { - %init(gVersion44); - } - if (version45()) { - %init(gVersion45); - } - if (version46()) { - %init(gVersion46); - } - if (version47()) { - %init(gVersion47); - } - if (version48()) { - %init(gVersion48); - } - if (version49()) { - %init(gVersion49); - } - if (version50()) { - %init(gVersion50); - } - if (version51()) { - %init(gVersion51); - } - if (version52()) { - %init(gVersion52); - } - if (version53()) { - %init(gVersion53); - } - if (version54()) { - %init(gVersion54); - } - if (version55()) { - %init(gVersion55); - } - if (version56()) { - %init(gVersion56); - } - if (version57()) { - %init(gVersion57); - } - if (version58()) { - %init(gVersion58); - } - if (version59()) { - %init(gVersion59); - } - if (version60()) { - %init(gVersion60); - } - if (version61()) { - %init(gVersion61); - } - if (version62()) { - %init(gVersion62); - } - if (version63()) { - %init(gVersion63); - } - if (version64()) { - %init(gVersion64); - } - if (version65()) { - %init(gVersion65); - } - if (version66()) { - %init(gVersion66); - } - if (version67()) { - %init(gVersion67); - } - if (version68()) { - %init(gVersion68); - } - if (version69()) { - %init(gVersion69); - } - if (version70()) { - %init(gVersion70); - } - if (version71()) { - %init(gVersion71); - } - if (version72()) { - %init(gVersion72); - } - if (version73()) { - %init(gVersion73); - } - if (version74()) { - %init(gVersion74); - } - if (version75()) { - %init(gVersion75); - } - if (version76()) { - %init(gVersion76); - } - if (version77()) { - %init(gVersion77); - } - if (version78()) { - %init(gVersion78); - } - if (version79()) { - %init(gVersion79); - } - if (version80()) { - %init(gVersion80); - } - if (version81()) { - %init(gVersion81); - } - if (version82()) { - %init(gVersion82); - } - if (version83()) { - %init(gVersion83); - } - if (version84()) { - %init(gVersion84); - } - if (version85()) { - %init(gVersion85); - } - if (version86()) { - %init(gVersion86); - } - if (version87()) { - %init(gVersion87); - } - if (version88()) { - %init(gVersion88); - } - if (version89()) { - %init(gVersion89); - } - if (version90()) { - %init(gVersion90); - } - if (version91()) { - %init(gVersion91); - } - if (version92()) { - %init(gVersion92); - } - if (version93()) { - %init(gVersion93); - } - if (version94()) { - %init(gVersion94); - } - if (version95()) { - %init(gVersion95); - } - if (version96()) { - %init(gVersion96); - } - if (version97()) { - %init(gVersion97); - } - if (version98()) { - %init(gVersion98); - } - if (version99()) { - %init(gVersion99); - } - if (version100()) { - %init(gVersion100); - } - if (version101()) { - %init(gVersion101); - } - if (version102()) { - %init(gVersion102); - } - if (version103()) { - %init(gVersion103); - } - if (version104()) { - %init(gVersion104); - } - if (version105()) { - %init(gVersion105); - } - if (version106()) { - %init(gVersion106); - } - if (version107()) { - %init(gVersion107); - } - if (version108()) { - %init(gVersion108); - } - if (version109()) { - %init(gVersion109); - } - if (version110()) { - %init(gVersion110); - } - if (version111()) { - %init(gVersion111); - } - if (version112()) { - %init(gVersion112); - } - if (version113()) { - %init(gVersion113); - } - if (version114()) { - %init(gVersion114); - } - if (version115()) { - %init(gVersion115); - } - if (version116()) { - %init(gVersion116); ++ (NSString *)appVersion { + if (!isVersionSpooferEnabled()) { + return %orig; } + int spoofedVersion = appVersionSpoofer(); + NSString *appVersion = getAppVersionForSpoofedVersion(spoofedVersion); + return appVersion ? appVersion : %orig; } +%end diff --git a/Sources/update-submodules-template.txt b/Sources/update-submodules-template.txt index dfc90a2..eacfaa4 100644 --- a/Sources/update-submodules-template.txt +++ b/Sources/update-submodules-template.txt @@ -11,7 +11,7 @@ jobs: steps: - name: Checkout code - uses: actions/checkout@v4.1.7 + uses: actions/checkout@v4.2.2 - name: Set up Git run: | @@ -20,11 +20,12 @@ jobs: - name: Add uYouEnhanced submodules run: | - git submodule add https://github.com/dayanch96/uYouLocalization.git Tweaks/uYouLocalization 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/dayanch96/uYouLocalization.git Tweaks/uYouLocalization + git submodule add https://github.com/PoomSmart/YTIcons Tweaks/YTIcons git submodule add https://github.com/protocolbuffers/protobuf.git Tweaks/protobuf git add . git commit -m "added uYouEnhanced submodules" @@ -60,6 +61,8 @@ jobs: git add . git submodule update --init --recursive --remote Tweaks/YTClassicVideoQuality git add . + git submodule update --init --recursive --remote Tweaks/YTIcons + git add . git submodule update --init --recursive --remote Tweaks/YTUHD git add . git submodule update --init --recursive --remote Tweaks/YTVideoOverlay diff --git a/Tweaks/Alderis b/Tweaks/Alderis index 15b061b..92cfde8 160000 --- a/Tweaks/Alderis +++ b/Tweaks/Alderis @@ -1 +1 @@ -Subproject commit 15b061bf414cf29fd0d4e0e124e9e2ccb99326b0 +Subproject commit 92cfde8ee6e76fa28378c644b9be81a5dcf233b0 diff --git a/Tweaks/DontEatMyContent b/Tweaks/DontEatMyContent index a9134c8..b9b0cd5 160000 --- a/Tweaks/DontEatMyContent +++ b/Tweaks/DontEatMyContent @@ -1 +1 @@ -Subproject commit a9134c82b032b145541f3c06a3c4950487f01474 +Subproject commit b9b0cd5784ef63922b9424c9c32b0e7f10898d49 diff --git a/Tweaks/MrBeastify b/Tweaks/MrBeastify deleted file mode 160000 index f849df8..0000000 --- a/Tweaks/MrBeastify +++ /dev/null @@ -1 +0,0 @@ -Subproject commit f849df879c511a05c4c0a3f266aa6f98443d0f17 diff --git a/Tweaks/PSHeader b/Tweaks/PSHeader new file mode 160000 index 0000000..1bb7d9c --- /dev/null +++ b/Tweaks/PSHeader @@ -0,0 +1 @@ +Subproject commit 1bb7d9c7d1bc40a57f83e1e58aa53bcf4acdcbfa diff --git a/Tweaks/Return-YouTube-Dislikes b/Tweaks/Return-YouTube-Dislikes index 9ef7bbb..f840113 160000 --- a/Tweaks/Return-YouTube-Dislikes +++ b/Tweaks/Return-YouTube-Dislikes @@ -1 +1 @@ -Subproject commit 9ef7bbb3b7d7cd2218a9884d8680625db0d898f3 +Subproject commit f840113b3820fe5b90a8b614c1a0876c5c9cc5cb diff --git a/Tweaks/YTABConfig b/Tweaks/YTABConfig index a22ef4d..634443f 160000 --- a/Tweaks/YTABConfig +++ b/Tweaks/YTABConfig @@ -1 +1 @@ -Subproject commit a22ef4deb929c6622069290bb340d21b280f300e +Subproject commit 634443f699950a1dbc2a4a4a1730a788c8683ae2 diff --git a/Tweaks/YTClassicVideoQuality b/Tweaks/YTClassicVideoQuality index d66bc3d..959174f 160000 --- a/Tweaks/YTClassicVideoQuality +++ b/Tweaks/YTClassicVideoQuality @@ -1 +1 @@ -Subproject commit d66bc3db70b0193db22174764c564f2017593a53 +Subproject commit 959174f6464da71a5088371759d6659c8f9c3ecf diff --git a/Tweaks/YTHoldForSpeed b/Tweaks/YTHoldForSpeed index 5af54ea..ba20df7 160000 --- a/Tweaks/YTHoldForSpeed +++ b/Tweaks/YTHoldForSpeed @@ -1 +1 @@ -Subproject commit 5af54ea6bf3aed6a615094fa285669a0e46ece51 +Subproject commit ba20df7ad8d0dfdb024688f3d92735f887fe5908 diff --git a/Tweaks/YTIcons b/Tweaks/YTIcons new file mode 160000 index 0000000..fd3d7a5 --- /dev/null +++ b/Tweaks/YTIcons @@ -0,0 +1 @@ +Subproject commit fd3d7a569aa01477f28b49f0f98b58ae9d48d3b3 diff --git a/Tweaks/YTSpeed b/Tweaks/YTSpeed deleted file mode 160000 index 96508bf..0000000 --- a/Tweaks/YTSpeed +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 96508bf22012d588a6ad29bfff3f694800a3a525 diff --git a/Tweaks/YTUHD b/Tweaks/YTUHD index 12b4991..0f59b38 160000 --- a/Tweaks/YTUHD +++ b/Tweaks/YTUHD @@ -1 +1 @@ -Subproject commit 12b4991ade6d3edd1e4fb28fe19bb32b6dc93206 +Subproject commit 0f59b38817d554ab692a0053456319847a6ab1a1 diff --git a/Tweaks/YTVideoOverlay b/Tweaks/YTVideoOverlay index 40b974f..3060d66 160000 --- a/Tweaks/YTVideoOverlay +++ b/Tweaks/YTVideoOverlay @@ -1 +1 @@ -Subproject commit 40b974fb33677f1c066536277d7bee68f6fa5e23 +Subproject commit 3060d66bfd86a85ab446ff9b04a1b6a2ddcb4d6f diff --git a/Tweaks/YouGroupSettings b/Tweaks/YouGroupSettings index f5af14f..96c2a82 160000 --- a/Tweaks/YouGroupSettings +++ b/Tweaks/YouGroupSettings @@ -1 +1 @@ -Subproject commit f5af14fc258cd84d7534bc55c51717f30172c79c +Subproject commit 96c2a82845acc43f8473b6ef46c2385301fda04e diff --git a/Tweaks/YouLoop b/Tweaks/YouLoop index 58f76b1..eb33ec3 160000 --- a/Tweaks/YouLoop +++ b/Tweaks/YouLoop @@ -1 +1 @@ -Subproject commit 58f76b1271c1ec05d6513e054f46e4080780a0d9 +Subproject commit eb33ec3b685a2e974272b971a559da795a1f6972 diff --git a/Tweaks/YouMute b/Tweaks/YouMute index 63fe2c0..0548225 160000 --- a/Tweaks/YouMute +++ b/Tweaks/YouMute @@ -1 +1 @@ -Subproject commit 63fe2c05fd23a517191645cd450115dc6965e0d8 +Subproject commit 0548225b0abd354f55d6b2e7f436504e6ce7bca8 diff --git a/Tweaks/YouPiP b/Tweaks/YouPiP index a308e3e..041f95f 160000 --- a/Tweaks/YouPiP +++ b/Tweaks/YouPiP @@ -1 +1 @@ -Subproject commit a308e3eeb6eb60cb8f118cf7fdced0015e584ad4 +Subproject commit 041f95f3bf795cbcf4c197a511821b2c574eb66c diff --git a/Tweaks/YouQuality b/Tweaks/YouQuality index 7f9831e..08e9ff4 160000 --- a/Tweaks/YouQuality +++ b/Tweaks/YouQuality @@ -1 +1 @@ -Subproject commit 7f9831e57ae8e2d37d56068c2ddcfb32bfe8d902 +Subproject commit 08e9ff49cfda6513d9f8823773692355902da944 diff --git a/Tweaks/YouSlider b/Tweaks/YouSlider new file mode 160000 index 0000000..20eab96 --- /dev/null +++ b/Tweaks/YouSlider @@ -0,0 +1 @@ +Subproject commit 20eab9638b4c19b6e9fa507ee3df5dbcec9303ee diff --git a/Tweaks/YouSpeed b/Tweaks/YouSpeed new file mode 160000 index 0000000..d91d799 --- /dev/null +++ b/Tweaks/YouSpeed @@ -0,0 +1 @@ +Subproject commit d91d799245f503ef8816024b09234117af1a5b9a diff --git a/Tweaks/YouTimeStamp b/Tweaks/YouTimeStamp index e89ffe8..2d03eb9 160000 --- a/Tweaks/YouTimeStamp +++ b/Tweaks/YouTimeStamp @@ -1 +1 @@ -Subproject commit e89ffe8be85564fe2bfc04345a186c4a02ef456a +Subproject commit 2d03eb904e7e6e60cbc56718710b494b7400043e diff --git a/Tweaks/YouTubeHeader b/Tweaks/YouTubeHeader index 6809d9d..d7253fd 160000 --- a/Tweaks/YouTubeHeader +++ b/Tweaks/YouTubeHeader @@ -1 +1 @@ -Subproject commit 6809d9d789b27351a74ac19c48ca5ce53952a1e4 +Subproject commit d7253fd7fe9bc2d5c900b156aa0d613de3b867e8 diff --git a/Tweaks/iSponsorBlock b/Tweaks/iSponsorBlock index b4e1bc7..3e4157c 160000 --- a/Tweaks/iSponsorBlock +++ b/Tweaks/iSponsorBlock @@ -1 +1 @@ -Subproject commit b4e1bc798149d68029c89510948600be2986968b +Subproject commit 3e4157c2a84576d175fc73ae422927e3d2531055 diff --git a/Tweaks/protobuf b/Tweaks/protobuf index 44660b3..8efdbbb 160000 --- a/Tweaks/protobuf +++ b/Tweaks/protobuf @@ -1 +1 @@ -Subproject commit 44660b306aa17a0bbc346cc14d5da20f05167ac9 +Subproject commit 8efdbbb991b27bbf49b425a98be9db45dd3c3b8c