Compare commits
217
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
ad2c426fe6 | ||
|
|
e6835b9e33 | ||
|
|
5741ae5584 | ||
|
|
aa338eab73 | ||
|
|
799a98951a | ||
|
|
8b95b82492 | ||
|
|
4a5f1dae69 | ||
|
|
e896843357 | ||
|
|
4c5a201831 | ||
|
|
cce821741d | ||
|
|
c4fd520a3d | ||
|
|
80c36940f6 | ||
|
|
2d17a16aad | ||
|
|
72a6f1caac | ||
|
|
975cb6005c | ||
|
|
6180fe7512 | ||
|
|
aed82d4f12 | ||
|
|
44a128d16f | ||
|
|
b1ea29dc6c | ||
|
|
85ca0ea633 | ||
|
|
377ebec525 | ||
|
|
35b6374d8c | ||
|
|
99299cc5bf | ||
|
|
bb5c02272f | ||
|
|
7a128ab908 | ||
|
|
2191478712 | ||
|
|
39849cac51 | ||
|
|
1f5ad62544 | ||
|
|
c04f0b7e43 | ||
|
|
380ee96a71 | ||
|
|
15124cf1c9 | ||
|
|
9bd1be5024 | ||
|
|
eb0a64bd69 | ||
|
|
02bfe1ada3 | ||
|
|
b62746061d | ||
|
|
e2cd37a8b6 | ||
|
|
e5b9ff21cf | ||
|
|
2e7fd253a8 | ||
|
|
3aa7c57d82 | ||
|
|
11ddcd421d | ||
|
|
6418f3daeb | ||
|
|
4b283110a6 | ||
|
|
2615436031 | ||
|
|
81088fadd3 | ||
|
|
5adaec2c93 | ||
|
|
7ac253963e | ||
|
|
2d2b469f1f | ||
|
|
9e98ad9482 | ||
|
|
1d5de3cd4c | ||
|
|
1266cb5a38 | ||
|
|
4fee21517e | ||
|
|
2ff0f3fb56 | ||
|
|
329fb1681a | ||
|
|
c78e5b9fd9 | ||
|
|
7b9fd7dcfb | ||
|
|
922ab4e9b7 | ||
|
|
c8a4acfff0 | ||
|
|
d53b400235 | ||
|
|
3cabc4405d | ||
|
|
d3a347a914 | ||
|
|
17adfaf534 | ||
|
|
edc1ac3912 | ||
|
|
21d3e74f9f | ||
|
|
3bd1914a36 | ||
|
|
7ff88f4106 | ||
|
|
b6304bf20a | ||
|
|
0db3c368a0 | ||
|
|
9bd31e7189 | ||
|
|
58488a1d89 | ||
|
|
c9547cae78 | ||
|
|
f8336d0352 | ||
|
|
e549c1e9e9 | ||
|
|
afb5cf1cb6 | ||
|
|
f275f72413 | ||
|
|
46b4ea6a27 | ||
|
|
23ba60a3ba | ||
|
|
93b7aa9258 | ||
|
|
0db1e09917 | ||
|
|
6a8798597b | ||
|
|
ac6fa7b853 | ||
|
|
49b75626b9 | ||
|
|
8ec1cb8cba | ||
|
|
12f80fa7ee | ||
|
|
09b765d7d9 | ||
|
|
fd8dc7a61d | ||
|
|
1036272ce3 | ||
|
|
41ae9ef959 | ||
|
|
2b141cb50f | ||
|
|
02addcb00c | ||
|
|
53f62444ba | ||
|
|
922b86a749 | ||
|
|
976c103dce | ||
|
|
8dc2ed3166 | ||
|
|
932cae3473 | ||
|
|
3d05302b9b | ||
|
|
40af55583f | ||
|
|
e389801893 | ||
|
|
ee98ec6237 | ||
|
|
516749e081 | ||
|
|
c5935309ca | ||
|
|
94fdb176ea | ||
|
|
a2b9a6ac73 | ||
|
|
96b62b5791 | ||
|
|
49615dd41c | ||
|
|
96c528fa72 | ||
|
|
d959269a3b | ||
|
|
7045e82565 | ||
|
|
11308d59b5 | ||
|
|
e6622b7e74 | ||
|
|
f8a02e11d7 | ||
|
|
43d593d88d | ||
|
|
f4bf32bcad | ||
|
|
b16c54cd63 | ||
|
|
f45f1946b4 | ||
|
|
f325a31196 | ||
|
|
cab48bbe9e | ||
|
|
5424e4a9e8 | ||
|
|
d7a7c90cf0 | ||
|
|
fe45ebaac1 | ||
|
|
4590369aa1 | ||
|
|
36bf21ad2e | ||
|
|
c2d1581698 | ||
|
|
ca0650d73a | ||
|
|
ad29207afd | ||
|
|
64c7717b38 | ||
|
|
25f66162c5 | ||
|
|
5becdf5a85 | ||
|
|
9145301cc8 | ||
|
|
b2b14305eb | ||
|
|
02ec80256c | ||
|
|
b37f1e1a24 | ||
|
|
244e5a3576 | ||
|
|
3a532cfa63 | ||
|
|
ef153f5d9c | ||
|
|
4258986378 | ||
|
|
dae08da6bf | ||
|
|
7f0e749030 | ||
|
|
c6dd02a759 | ||
|
|
23d745e869 | ||
|
|
2116d96e6a | ||
|
|
f2cb699e3b | ||
|
|
fbafccf1bd | ||
|
|
029ab22b9f | ||
|
|
f4215a7b0b | ||
|
|
0d1e7bad8e | ||
|
|
e97ada36c1 | ||
|
|
4d1b478606 | ||
|
|
24c2f5594f | ||
|
|
c1e3976200 | ||
|
|
0fc9032979 | ||
|
|
b4c70ee668 | ||
|
|
f966182c15 | ||
|
|
1b20c07f03 | ||
|
|
7ad8f9409b | ||
|
|
122d5b8280 | ||
|
|
5744474710 | ||
|
|
faaecd51cb | ||
|
|
8250a1462e | ||
|
|
9371c72a42 | ||
|
|
1acf0a4eba | ||
|
|
1a63491af3 | ||
|
|
e912dc0bda | ||
|
|
fa87084000 | ||
|
|
0b30adb3f4 | ||
|
|
349a49eb93 | ||
|
|
57ed260959 | ||
|
|
9b03cac475 | ||
|
|
0a6179a4b7 | ||
|
|
9e37aaed11 | ||
|
|
691d7d3078 | ||
|
|
915bb7efb3 | ||
|
|
d8151344ae | ||
|
|
163dac3e81 | ||
|
|
3383edbb05 | ||
|
|
c2efac035c | ||
|
|
0fad665452 | ||
|
|
1b554d0994 | ||
|
|
87575119b8 | ||
|
|
90468a2b69 | ||
|
|
29c7f279ae | ||
|
|
e870be2f52 | ||
|
|
772cc2af2e | ||
|
|
9e3065fac6 | ||
|
|
5db4a43777 | ||
|
|
7ab7b499d7 | ||
|
|
c922424d53 | ||
|
|
f1b540af8b | ||
|
|
9afaddb2e0 | ||
|
|
b7f6c21353 | ||
|
|
8e4293f7a1 | ||
|
|
573dfa1d67 | ||
|
|
5d2cc93f56 | ||
|
|
42959eb9fb | ||
|
|
aa139dffa8 | ||
|
|
6520ae2d53 | ||
|
|
4bfb78634f | ||
|
|
78fbf1dc6b | ||
|
|
3dcf4f290f | ||
|
|
85ddb15d38 | ||
|
|
5948dac548 | ||
|
|
070647ecd5 | ||
|
|
b7328028aa | ||
|
|
79f058f354 | ||
|
|
26b5912495 | ||
|
|
f029b9a372 | ||
|
|
ecf3107846 | ||
|
|
93397e48d7 | ||
|
|
b83081fd57 | ||
|
|
c74b5203f7 | ||
|
|
920b7c4882 | ||
|
|
d469f31270 | ||
|
|
f910c416ef | ||
|
|
fb0e5073ae | ||
|
|
f9e05fee77 | ||
|
|
ec7eec660b | ||
|
|
2e6c19c060 | ||
|
|
bb3b8ed310 |
@@ -9,11 +9,13 @@ assignees: ''
|
|||||||
|
|
||||||
## ⚠️ Have you read the [FAQ](https://github.com/qnblackcat/uYouPlus/wiki/FAQ)? Make sure you visit the FAQ page first!!! ⚠️
|
## ⚠️ Have you read the [FAQ](https://github.com/qnblackcat/uYouPlus/wiki/FAQ)? Make sure you visit the FAQ page first!!! ⚠️
|
||||||
|
|
||||||
|
_Make sure you complete the template. Otherwise, it will be closed without further explanation!_
|
||||||
|
|
||||||
### Device info
|
### Device info
|
||||||
- iOS/iPadOS version:
|
- iOS/iPadOS version:
|
||||||
- Device model:
|
- Device model:
|
||||||
- Sideload tool (Ex: AltStore, Sideloadly...)
|
- Sideload tool (Ex: AltStore, Sideloadly...)
|
||||||
- Version of uYouPlus:
|
- Version of uYouPlus: _**latest** or **newest** is NOT a version number!!_
|
||||||
|
|
||||||
### Describe the bug
|
### Describe the bug
|
||||||
|
|
||||||
@@ -25,5 +27,7 @@ _(Please attach videos or screenshots if possible)_
|
|||||||
### Crash log (if possible)
|
### Crash log (if possible)
|
||||||
_(The crash log can be found in the Settings app - Privacy - Analytics & Improvements - Analytics Data - Youtube...)_
|
_(The crash log can be found in the Settings app - Privacy - Analytics & Improvements - Analytics Data - Youtube...)_
|
||||||
|
|
||||||
|
### Does the issue happen with the official YouTube from AppStore?
|
||||||
|
_(Well, YouTube itself is buggy sometimes...)_
|
||||||
|
|
||||||
### Additional context:
|
### Additional context:
|
||||||
|
|||||||
@@ -0,0 +1,143 @@
|
|||||||
|
# Original idea by @ISnackable. Thanks to him for handling the hardest parts!
|
||||||
|
# https://github.com/ISnackable/CercubePlus/blob/main/.github/workflows/Build.yml
|
||||||
|
|
||||||
|
name: Build and Release uYouPlus
|
||||||
|
|
||||||
|
on:
|
||||||
|
workflow_dispatch:
|
||||||
|
inputs:
|
||||||
|
uyou_version:
|
||||||
|
description: "The version of uYou"
|
||||||
|
default: "2.1"
|
||||||
|
required: false
|
||||||
|
type: string
|
||||||
|
decrypted_youtube_url:
|
||||||
|
description: "The direct URL to the decrypted YouTube ipa"
|
||||||
|
default: ""
|
||||||
|
required: true
|
||||||
|
type: string
|
||||||
|
youtube_version:
|
||||||
|
description: "The version of YouTube"
|
||||||
|
default: ""
|
||||||
|
required: true
|
||||||
|
type: string
|
||||||
|
create_release:
|
||||||
|
description: "Create a draft release"
|
||||||
|
default: false
|
||||||
|
required: false
|
||||||
|
type: boolean
|
||||||
|
|
||||||
|
concurrency:
|
||||||
|
group: ${{ github.workflow }}-${{ github.ref }}
|
||||||
|
cancel-in-progress: true
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
build:
|
||||||
|
name: Build uYouPlus
|
||||||
|
runs-on: macos-latest
|
||||||
|
permissions:
|
||||||
|
contents: write
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- name: Checkout Main
|
||||||
|
uses: actions/checkout@v3
|
||||||
|
with:
|
||||||
|
path: main
|
||||||
|
submodules: recursive
|
||||||
|
|
||||||
|
- name: Install Dependencies
|
||||||
|
run: brew install ldid dpkg
|
||||||
|
|
||||||
|
- name: Setup Theos
|
||||||
|
uses: actions/checkout@v3
|
||||||
|
with:
|
||||||
|
repository: theos/theos
|
||||||
|
ref: master
|
||||||
|
path: theos
|
||||||
|
submodules: recursive
|
||||||
|
|
||||||
|
- name: Download iOS 15.5 SDK
|
||||||
|
run: |
|
||||||
|
svn checkout -q https://github.com/chrisharper22/sdks/trunk/iPhoneOS15.5.sdk
|
||||||
|
mv *.sdk $THEOS/sdks
|
||||||
|
env:
|
||||||
|
THEOS: ${{ github.workspace }}/theos
|
||||||
|
|
||||||
|
- name: Setup Theos Jailed
|
||||||
|
uses: actions/checkout@v3
|
||||||
|
with:
|
||||||
|
repository: kabiroberai/theos-jailed
|
||||||
|
ref: master
|
||||||
|
path: theos-jailed
|
||||||
|
submodules: recursive
|
||||||
|
|
||||||
|
- name: Install Theos Jailed
|
||||||
|
run: |
|
||||||
|
./theos-jailed/install
|
||||||
|
env:
|
||||||
|
THEOS: ${{ github.workspace }}/theos
|
||||||
|
|
||||||
|
- name: Download uYou & prepare YouTube iPA
|
||||||
|
run: |
|
||||||
|
curl "https://raw.githubusercontent.com/Muirey03/RemoteLog/master/RemoteLog.h" --output "$THEOS/include/RemoteLog.h"
|
||||||
|
curl "https://miro92.com/repo/debs/com.miro.uyou_${{ env.UYOU_VERSION }}_iphoneos-arm.deb" --output "./main/Tweaks/uYou/com.miro.uyou_${{ env.UYOU_VERSION }}_iphoneos-arm.deb"
|
||||||
|
wget "$YOUTUBE_URL" --no-verbose -O ./main/YouTube.ipa
|
||||||
|
dpkg-deb -x "./main/Tweaks/uYou/com.miro.uyou_${{ env.UYOU_VERSION }}_iphoneos-arm.deb" ./main/Tweaks/uYou/
|
||||||
|
unzip -q ./main/YouTube.ipa -d ./main/tmp
|
||||||
|
rm -rf ./main/tmp/Payload/YouTube.app/PlugIns/*
|
||||||
|
cp -R ./main/Extensions/*.appex ./main/tmp/Payload/YouTube.app/PlugIns
|
||||||
|
|
||||||
|
env:
|
||||||
|
THEOS: ${{ github.workspace }}/theos
|
||||||
|
UYOU_VERSION: ${{ inputs.uyou_version }}
|
||||||
|
YOUTUBE_URL: ${{ inputs.decrypted_youtube_url }}
|
||||||
|
|
||||||
|
- name: Fix compiling && Build Package
|
||||||
|
id: build_package
|
||||||
|
run: |
|
||||||
|
cd ${{ github.workspace }}/main
|
||||||
|
(cd ${{ github.workspace }}/main/Tweaks/YouPiP && sed -i '' "14s/$/ AVFoundation UIKit/" Makefile)
|
||||||
|
make package FINALPACKAGE=1
|
||||||
|
(mv "packages/$(ls -t packages | head -n1)" "packages/uYouPlus_${{ env.YOUTUBE_VERSION }}_${{ env.UYOU_VERSION }}.ipa")
|
||||||
|
echo "::set-output name=package::$(ls -t packages | head -n1)"
|
||||||
|
env:
|
||||||
|
THEOS: ${{ github.workspace }}/theos
|
||||||
|
UYOU_VERSION: ${{ inputs.uyou_version }}
|
||||||
|
YOUTUBE_VERSION: ${{ inputs.youtube_version }}
|
||||||
|
|
||||||
|
- name: Upload Artifact
|
||||||
|
uses: actions/upload-artifact@v3
|
||||||
|
env:
|
||||||
|
UYOU_VERSION: ${{ inputs.uyou_version }}
|
||||||
|
YOUTUBE_VERSION: ${{ inputs.youtube_version }}
|
||||||
|
with:
|
||||||
|
name: uYouPlus_${{ env.YOUTUBE_VERSION }}_${{ env.UYOU_VERSION }}
|
||||||
|
path: ${{ github.workspace }}/main/packages/${{ steps.build_package.outputs.package }}
|
||||||
|
if-no-files-found: error
|
||||||
|
|
||||||
|
- name: Create Release
|
||||||
|
if: ${{ inputs.create_release }}
|
||||||
|
id: create_release
|
||||||
|
uses: actions/create-release@v1
|
||||||
|
env:
|
||||||
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||||
|
UYOU_VERSION: ${{ inputs.uyou_version }}
|
||||||
|
YOUTUBE_VERSION: ${{ inputs.youtube_version }}
|
||||||
|
with:
|
||||||
|
tag_name: v${{ env.YOUTUBE_VERSION }}-${{ env.UYOU_VERSION }}-(${{ github.run_number }})
|
||||||
|
release_name: v${{ env.YOUTUBE_VERSION }}-${{ env.UYOU_VERSION }}-(${{ github.run_number }})
|
||||||
|
draft: true
|
||||||
|
prerelease: false
|
||||||
|
|
||||||
|
- name: Upload Release Asset
|
||||||
|
if: ${{ inputs.create_release }}
|
||||||
|
uses: actions/upload-release-asset@v1
|
||||||
|
env:
|
||||||
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||||
|
UYOU_VERSION: ${{ inputs.uyou_version }}
|
||||||
|
YOUTUBE_VERSION: ${{ inputs.youtube_version }}
|
||||||
|
with:
|
||||||
|
upload_url: ${{ steps.create_release.outputs.upload_url }}
|
||||||
|
asset_path: ${{ github.workspace }}/main/packages/${{ steps.build_package.outputs.package }}
|
||||||
|
asset_name: uYouPlus_${{ env.YOUTUBE_VERSION }}_${{ env.UYOU_VERSION }}.ipa
|
||||||
|
asset_content_type: application/vnd.debian.binary-package
|
||||||
+3
-3
@@ -1,7 +1,7 @@
|
|||||||
.theos
|
.theos
|
||||||
.DS_Store
|
.DS_Store
|
||||||
packages
|
packages/
|
||||||
obj
|
tmp/
|
||||||
tmp
|
|
||||||
Tweaks/uYou/*
|
Tweaks/uYou/*
|
||||||
!Tweaks/uYou/.gitkeep
|
!Tweaks/uYou/.gitkeep
|
||||||
|
Resources/
|
||||||
@@ -1,15 +1,58 @@
|
|||||||
#import "Tweaks/YouTubeHeader/YTPlayerViewController.h"
|
#import "Tweaks/YouTubeHeader/YTPlayerViewController.h"
|
||||||
|
|
||||||
@interface YTMainAppControlsOverlayView: UIView
|
#define LOC(x) [tweakBundle localizedStringForKey:x value:nil table:nil]
|
||||||
|
#define YT_BUNDLE_ID @"com.google.ios.youtube"
|
||||||
|
#define YT_NAME @"YouTube"
|
||||||
|
|
||||||
|
// IAmYouTube
|
||||||
|
@interface SSOConfiguration : NSObject
|
||||||
@end
|
@end
|
||||||
|
|
||||||
@interface YTPlaylistHeaderViewController : UIViewController
|
// uYouPlus
|
||||||
@property (nonatomic, strong, readwrite) UIView *downloadsButton;
|
@interface YTPlayabilityResolutionUserActionUIController : NSObject // Skips content warning before playing *some videos - @PoomSmart
|
||||||
|
- (void)confirmAlertDidPressConfirm;
|
||||||
@end
|
@end
|
||||||
|
|
||||||
@interface ASWAppSwitcherCollectionViewCell: UIView
|
@interface YTMainAppControlsOverlayView : UIView
|
||||||
@end
|
@end
|
||||||
|
|
||||||
|
@interface YTTransportControlsButtonView : UIView
|
||||||
|
@end
|
||||||
|
|
||||||
|
@interface _ASCollectionViewCell : UICollectionViewCell
|
||||||
|
- (id)node;
|
||||||
|
@end
|
||||||
|
|
||||||
|
@interface YTAsyncCollectionView : UICollectionView
|
||||||
|
- (void)removeShortsAndFeaturesAdsAtIndexPath:(NSIndexPath *)indexPath;
|
||||||
|
@end
|
||||||
|
|
||||||
|
@interface FRPSliderCell : UITableViewCell
|
||||||
|
@end
|
||||||
|
|
||||||
|
@interface boolSettingsVC : UIViewController
|
||||||
|
@end
|
||||||
|
|
||||||
|
@interface PlayerManager : NSObject
|
||||||
|
- (float)progress;
|
||||||
|
@end
|
||||||
|
|
||||||
|
// iOS16 fix
|
||||||
|
@interface OBPrivacyLinkButton : UIButton
|
||||||
|
- (instancetype)initWithCaption:(NSString *)caption
|
||||||
|
buttonText:(NSString *)buttonText
|
||||||
|
image:(UIImage *)image
|
||||||
|
imageSize:(CGSize)imageSize
|
||||||
|
useLargeIcon:(BOOL)useLargeIcon
|
||||||
|
displayLanguage:(NSString *)displayLanguage;
|
||||||
|
@end
|
||||||
|
|
||||||
|
// uYouLocal fix
|
||||||
|
@interface YTLocalPlaybackController : NSObject
|
||||||
|
- (id)activeVideo;
|
||||||
|
@end
|
||||||
|
|
||||||
|
// BigYTMiniPlayer
|
||||||
@interface YTMainAppVideoPlayerOverlayView : UIView
|
@interface YTMainAppVideoPlayerOverlayView : UIView
|
||||||
- (UIViewController *)_viewControllerForAncestor;
|
- (UIViewController *)_viewControllerForAncestor;
|
||||||
@end
|
@end
|
||||||
@@ -17,10 +60,15 @@
|
|||||||
@interface YTWatchMiniBarView : UIView
|
@interface YTWatchMiniBarView : UIView
|
||||||
@end
|
@end
|
||||||
|
|
||||||
|
// YTAutoFullScreen
|
||||||
@interface YTPlayerViewController (YTAFS)
|
@interface YTPlayerViewController (YTAFS)
|
||||||
- (void)autoFullscreen;
|
- (void)autoFullscreen;
|
||||||
@end
|
@end
|
||||||
|
|
||||||
|
// OLED Darkmode
|
||||||
|
@interface ASWAppSwitcherCollectionViewCell : UIView
|
||||||
|
@end
|
||||||
|
|
||||||
@interface ASScrollView : UIView
|
@interface ASScrollView : UIView
|
||||||
@end
|
@end
|
||||||
|
|
||||||
@@ -30,11 +78,20 @@
|
|||||||
@interface UIKeyboardDockView : UIView
|
@interface UIKeyboardDockView : UIView
|
||||||
@end
|
@end
|
||||||
|
|
||||||
|
@interface _ASDisplayView : UIView
|
||||||
|
@end
|
||||||
|
|
||||||
|
@interface YTCommentDetailHeaderCell : UIView
|
||||||
|
@end
|
||||||
|
|
||||||
|
@interface SponsorBlockSettingsController : UITableViewController
|
||||||
|
@end
|
||||||
|
|
||||||
|
@interface SponsorBlockViewController : UIViewController
|
||||||
|
@end
|
||||||
|
|
||||||
@interface UICandidateViewController : UIViewController
|
@interface UICandidateViewController : UIViewController
|
||||||
@end
|
@end
|
||||||
|
|
||||||
@interface UIPredictionViewController : UIViewController
|
@interface UIPredictionViewController : UIViewController
|
||||||
@end
|
@end
|
||||||
|
|
||||||
@interface SponsorBlockSettingsController : UITableViewController
|
|
||||||
@end
|
|
||||||
@@ -1,6 +1,4 @@
|
|||||||
uYouPlus_INJECT_DYLIBS = Tweaks/uYou/Library/MobileSubstrate/DynamicLibraries/uYou.dylib .theos/obj/libcolorpicker.dylib .theos/obj/iSponsorBlock.dylib .theos/obj/YTUHD.dylib .theos/obj/YouPiP.dylib .theos/obj/YouTubeDislikesReturn.dylib .theos/obj/YoutubeSpeed.dylib
|
TARGET = iphone:clang:latest:13.0
|
||||||
|
|
||||||
TARGET = iphone:clang:latest:12.0
|
|
||||||
uYouPlus_USE_FLEX = 0
|
uYouPlus_USE_FLEX = 0
|
||||||
uYouPlus_USE_FISHHOOK = 0
|
uYouPlus_USE_FISHHOOK = 0
|
||||||
ARCHS = arm64
|
ARCHS = arm64
|
||||||
@@ -12,8 +10,11 @@ TWEAK_NAME = uYouPlus
|
|||||||
DISPLAY_NAME = YouTube
|
DISPLAY_NAME = YouTube
|
||||||
BUNDLE_ID = com.google.ios.youtube
|
BUNDLE_ID = com.google.ios.youtube
|
||||||
|
|
||||||
|
uYouPlus_INJECT_DYLIBS = Tweaks/uYou/Library/MobileSubstrate/DynamicLibraries/uYou.dylib .theos/obj/libcolorpicker.dylib .theos/obj/iSponsorBlock.dylib .theos/obj/YTUHD.dylib .theos/obj/YouPiP.dylib .theos/obj/YouTubeDislikesReturn.dylib .theos/obj/YoutubeSpeed.dylib
|
||||||
uYouPlus_FILES = uYouPlus.xm Settings.xm
|
uYouPlus_FILES = uYouPlus.xm Settings.xm
|
||||||
uYouPlus_IPA = ./tmp/Payload/YouTube.app
|
uYouPlus_IPA = ./tmp/Payload/YouTube.app
|
||||||
|
uYouPlus_FRAMEWORKS = UIKit Security
|
||||||
|
uYouPlus_CFLAGS = -fobjc-arc
|
||||||
|
|
||||||
include $(THEOS)/makefiles/common.mk
|
include $(THEOS)/makefiles/common.mk
|
||||||
include $(THEOS_MAKE_PATH)/tweak.mk
|
include $(THEOS_MAKE_PATH)/tweak.mk
|
||||||
@@ -21,11 +22,12 @@ SUBPROJECTS += Tweaks/Alderis Tweaks/iSponsorBlock Tweaks/YTUHD Tweaks/YouPiP Tw
|
|||||||
include $(THEOS_MAKE_PATH)/aggregate.mk
|
include $(THEOS_MAKE_PATH)/aggregate.mk
|
||||||
|
|
||||||
before-package::
|
before-package::
|
||||||
@tput setaf 4 && echo -e "==> \033[1mMoving tweak's bundle to Resources/...\033[0m"
|
@echo -e "==> \033[1mMoving tweak's bundle to Resources/...\033[0m"
|
||||||
@mkdir -p Resources/Frameworks/Alderis.framework && find .theos/obj/install/Library/Frameworks/Alderis.framework -maxdepth 1 -type f -exec cp {} Resources/Frameworks/Alderis.framework/ \;
|
@mkdir -p Resources/Frameworks/Alderis.framework && find .theos/obj/install/Library/Frameworks/Alderis.framework -maxdepth 1 -type f -exec cp {} Resources/Frameworks/Alderis.framework/ \;
|
||||||
@cp -R Tweaks/YouPiP/layout/Library/Application\ Support/YouPiP.bundle Resources/
|
@cp -R Tweaks/YouPiP/layout/Library/Application\ Support/YouPiP.bundle Resources/
|
||||||
@cp -R Tweaks/iSponsorBlock/layout/Library/Application\ Support/iSponsorBlock.bundle Resources/
|
@cp -R Tweaks/iSponsorBlock/layout/Library/Application\ Support/iSponsorBlock.bundle Resources/
|
||||||
@cp -R Tweaks/uYou/Library/Application\ Support/uYouBundle.bundle Resources/
|
@cp -R Tweaks/uYou/Library/Application\ Support/uYouBundle.bundle Resources/
|
||||||
@tput setaf 5 && echo -e "==> \033[1mChanging the installation path of dylibs...\033[0m"
|
@cp -R lang/uYouPlus.bundle Resources/
|
||||||
|
@echo -e "==> \033[1mChanging the installation path of dylibs...\033[0m"
|
||||||
@codesign --remove-signature .theos/obj/iSponsorBlock.dylib && install_name_tool -change /usr/lib/libcolorpicker.dylib @rpath/libcolorpicker.dylib .theos/obj/iSponsorBlock.dylib
|
@codesign --remove-signature .theos/obj/iSponsorBlock.dylib && install_name_tool -change /usr/lib/libcolorpicker.dylib @rpath/libcolorpicker.dylib .theos/obj/iSponsorBlock.dylib
|
||||||
@codesign --remove-signature .theos/obj/libcolorpicker.dylib && install_name_tool -change /Library/Frameworks/Alderis.framework/Alderis @rpath/Alderis.framework/Alderis .theos/obj/libcolorpicker.dylib
|
@codesign --remove-signature .theos/obj/libcolorpicker.dylib && install_name_tool -change /Library/Frameworks/Alderis.framework/Alderis @rpath/Alderis.framework/Alderis .theos/obj/libcolorpicker.dylib
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||

|

|
||||||
|
|
||||||
# Table of Contents
|
# Table of Contents
|
||||||
|
|
||||||
@@ -19,18 +19,22 @@
|
|||||||
|
|
||||||
- [HASHBANG Productions](https://github.com/hbang) for [Alderis Color Picker](https://github.com/hbang/Alderis) - a dependency of iSponsorBlock.
|
- [HASHBANG Productions](https://github.com/hbang) for [Alderis Color Picker](https://github.com/hbang/Alderis) - a dependency of iSponsorBlock.
|
||||||
|
|
||||||
- [PoomSmart](https://twitter.com/poomsmart) - the developer of many tweaks used by uYouPlus, include: [NoYTPremium](https://github.com/PoomSmart/NoYTPremium/), [YouRememberCaption](https://www.ios-repo-updates.com/repository/poomsmart/package/com.ps.youremembercaption/), [YTClassicVideoQuality](https://poomsmart.github.io/repo/depictions/ytclassicvideoquality.html), [YTNoCheckLocalNetwork](https://poomsmart.github.io/repo/depictions/ytnochecklocalnetwork.html), [YTSystemAppearance](https://poomsmart.github.io/repo/depictions/ytsystemappearance.html), [YTAutoFullScreen](https://github.com/PoomSmart/YTAutoFullScreen/), [YTReExplore](https://github.com/PoomSmart/YTReExplore/), [YTUHD](https://poomsmart.github.io/repo/depictions/ytuhd.html), [YouPiP](https://poomsmart.github.io/repo/depictions/youpip.html), and [Return YouTube Dislike](https://github.com/PoomSmart/Return-YouTube-Dislikes)
|
- [PoomSmart](https://twitter.com/poomsmart) - the developer of many tweaks used by uYouPlus, see [Version info - Download](#download) for more details.
|
||||||
|
|
||||||
- [level3tjg](https://twitter.com/level3tjg) - for [YTNoHoverCards](https://github.com/level3tjg/YTNoHoverCards) and [YTMiniplayerEnabler](https://github.com/level3tjg/YTMiniplayerEnabler).
|
- [level3tjg](https://twitter.com/level3tjg) for [YTNoHoverCards](https://github.com/level3tjg/YTNoHoverCards), [YTMiniplayerEnabler](https://github.com/level3tjg/YTMiniplayerEnabler) and many hot patches for uYou.
|
||||||
|
|
||||||
|
- [BandarHL](https://twitter.com/bandarhl) for a bunch of improvements.
|
||||||
|
|
||||||
|
- [Julioverne](https://twitter.com/ijulioverne) for the solution to skip Google's safety warning when logging in.
|
||||||
|
|
||||||
- [Lyvendia](https://github.com/Lyvendia/) for [YTSpeed](https://github.com/Lyvendia/YTSpeed/)
|
- [Lyvendia](https://github.com/Lyvendia/) for [YTSpeed](https://github.com/Lyvendia/YTSpeed/)
|
||||||
|
|
||||||
- [YouTube Extensions](https://github.com/CokePokes/YoutubeExtensions) by [CokePokes](https://github.com/CokePokes/).
|
- [YouTube Extensions](https://github.com/CokePokes/YoutubeExtensions) by [CokePokes](https://github.com/CokePokes/).
|
||||||
|
|
||||||
- [Al4ise](https://github.com/Al4ise) for [Azule](https://github.com/Al4ise/Azule), a tool used to inject jailbreak tweaks into jailed iOS apps.
|
|
||||||
|
|
||||||
- [theos team](https://github.com/theos/theos) for theos & theos-jailed.
|
- [theos team](https://github.com/theos/theos) for theos & theos-jailed.
|
||||||
|
|
||||||
|
- Thanks to all the translators who have contributed to uYouPlus. Your contribution is highly appreciated!
|
||||||
|
|
||||||
# Features
|
# Features
|
||||||
|
|
||||||
1. **uYou:** uYou has a ton of features that I can't list them all. Visit [here](https://miro92.com/repo/depictions/?p=com.miro.uyou) for more info!
|
1. **uYou:** uYou has a ton of features that I can't list them all. Visit [here](https://miro92.com/repo/depictions/?p=com.miro.uyou) for more info!
|
||||||
@@ -50,17 +54,15 @@
|
|||||||
|
|
||||||
7. **YTNoHoverCards:** offer an option to enable/disable the annoying suggested videos show up at the end of the videos.
|
7. **YTNoHoverCards:** offer an option to enable/disable the annoying suggested videos show up at the end of the videos.
|
||||||
|
|
||||||
8. **YTSystemAppearance**: sync the YouTube theme (dark/light) with the system theme.
|
8. **YTNoCheckLocalNetwork**: block the Local Network permission popup.
|
||||||
|
|
||||||
9. **YTNoCheckLocalNetwork**: block the Local Network permission popup.
|
9. **YouRememberCaption**: make YouTube remember your video caption setting (if not already).
|
||||||
|
|
||||||
10. **YouRememberCaption**: make YouTube remember your video caption setting (if not already).
|
10. **NoYTPremium**: remove YouTube Premium upshells.
|
||||||
|
|
||||||
11. **NoYTPremium**: remove YouTube Premium upshells.
|
11. **YTSpeed**: add 2.25, 2.5, 2.75, and 3x playback speed
|
||||||
|
|
||||||
12. **YTSpeed**: add 2.25, 2.5, 2.75, and 3x playback speed
|
12. **YTMiniplayerEnabler**: enable Miniplayer for all YouTube videos.
|
||||||
|
|
||||||
13. **YTMiniplayerEnabler**: enable Miniplayer for all YouTube videos.
|
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
@@ -72,41 +74,42 @@
|
|||||||
|
|
||||||
# Download
|
# Download
|
||||||
|
|
||||||
- **uYouPlus** (or you can call it uYou+) requires iOS & iPadOS 13.0 or later. The latest version of **uYouPlus** can be found in the [Release tab](https://github.com/qnblackcat/uYouPlus/releases).
|
- **uYouPlus** (or you can call it uYou+) requires iOS or iPadOS 13.0 or later. The latest version of **uYouPlus** can be found in the [Release tab](https://github.com/qnblackcat/uYouPlus/releases).
|
||||||
|
|
||||||
- For AltStore user:
|
- For AltStore user:
|
||||||
|
|
||||||
- My official AtlStore repo: https://qnblackcat.github.io/AltStore/
|
- My official AltStore repo: https://qnblackcat.github.io/AltStore/
|
||||||
|
|
||||||
- [Open in AltStore (v17.19.2-2.1)](https://tinyurl.com/2s49jpru) - It will take a while to install because AltStore needs to download the IPA.
|
- [Open in AltStore (v17.36.4-2.1)](https://tinyurl.com/bdezph3t) - It will take a while to install because AltStore needs to download the IPA.
|
||||||
|
|
||||||
- Version info: _(last update: May 16)_
|
- Version info: _(last update: Sep 17)_
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
<summary> ▶︎ Expand</summary>
|
<summary>Expand</summary>
|
||||||
|
|
||||||
| **Tweaks/App** | **Version** | **Open source** |
|
| **Tweaks/App** | **Developer** | **Version** | **Open source** |
|
||||||
| :------------: | :----------:| :-------------: |
|
| - | - | :-: | :-: |
|
||||||
| **YouTube** | 17.19.2 | ✖︎ |
|
| **YouTube** | Google Inc | 17.36.4 | ✖︎ |
|
||||||
| [uYou](https://github.com/MiRO92/uYou-for-YouTube) | 2.1 | ✖︎ |
|
| [uYou](https://github.com/MiRO92/uYou-for-YouTube) | [MiRO92](https://twitter.com/miro92) | 2.1 | ✖︎ |
|
||||||
| [Open in YouTube](https://github.com/CokePokes/YoutubeExtensions/) | 1.2 | ✖︎ |
|
| [Open in YouTube](https://github.com/CokePokes/YoutubeExtensions) | [CokePokes](https://github.com/CokePokes) | 1.2 | ✖︎ |
|
||||||
| **Return YouTube Dislike** | 1.6.4 | [✔︎](https://github.com/PoomSmart/Return-YouTube-Dislikes) |
|
| **iSponsorBlock** | [Galactic-Dev](https://github.com/Galactic-Dev) | 1.0-15 | [✔︎](https://github.com/Galactic-Dev/iSponsorBlock) |
|
||||||
| **iSponsorBlock** | 1.0-14 | [✔︎](https://github.com/Galactic-Dev/iSponsorBlock) |
|
| **BigYTMiniPlayer** | [Galactic-Dev](https://github.com/Galactic-Dev) | 1.0-1 | [✔︎](https://github.com/Galactic-Dev/BigYTMiniPlayer) |
|
||||||
| **Alderis Color Picker** | 1.1.2| [✔︎](https://github.com/hbang/Alderis) |
|
| **YTNoHoverCards** | [level3tjg](https://twitter.com/level3tjg) | 0.0.3 | [✔︎](https://github.com/level3tjg/YTNoHoverCards) |
|
||||||
| **NoYTPremium** | 1.0.4 | [✔︎](https://github.com/PoomSmart/NoYTPremium/) |
|
| **YTMiniplayerEnabler** | [level3tjg](https://twitter.com/level3tjg) | 0.0.2 | [✔︎](https://github.com/level3tjg/YTMiniplayerEnabler) |
|
||||||
| **YouRememberCaption** | 1.0.0 | [✔︎](https://poomsmart.github.io/repo/depictions/youremembercaption.html) |
|
| **YTSpeed** | [Lyvendia](https://github.com/Lyvendia) | 1.0.1 | [✔︎](https://github.com/Lyvendia/YTSpeed) |
|
||||||
| **YTClassicVideoQuality** | 1.0.1 | [✔︎](https://github.com/PoomSmart/YTClassicVideoQuality) |
|
| **YTCastConfirm** | [JamieBerghmans](https://github.com/JamieBerghmans) | 1.0.0 | [✔︎](https://github.com/JamieBerghmans/YTCastConfirm) |
|
||||||
| **YTNoCheckLocalNetwork** | 1.0.2 | [✔︎](https://poomsmart.github.io/repo/depictions/ytnochecklocalnetwork.html) |
|
| **Alderis Color Picker** | [HASHBANG Productions](https://github.com/hbang) | 1.2| [✔︎](https://github.com/hbang/Alderis) |
|
||||||
| **YTNoHoverCards** | 0.0.3 | [✔︎](https://github.com/level3tjg/YTNoHoverCards) |
|
| **YTUHD** | [PoomSmart](https://twitter.com/poomsmart) | 1.2.10 | [✔︎](https://github.com/PoomSmart/YTUHD) |
|
||||||
| **YTSystemAppearance** | 1.0.0 | [✔︎](https://poomsmart.github.io/repo/depictions/ytsystemappearance.html) |
|
| **YouPiP** | [PoomSmart](https://twitter.com/poomsmart) | 1.7.9 | [✔︎](https://github.com/PoomSmart/YouPiP) |
|
||||||
| **YTUHD** | 1.2.7 | [✔︎](https://github.com/PoomSmart/YTUHD) |
|
| **IAmYouTube** | [PoomSmart](https://twitter.com/poomsmart) | 1.2.0 | [✔︎](https://github.com/PoomSmart/IAmYouTube) |
|
||||||
| **YouPiP** | 1.7.0 | [✔︎](https://github.com/PoomSmart/YouPiP) |
|
| **YTReExplore** | [PoomSmart](https://twitter.com/poomsmart) | 1.0.2 | [✔︎](https://github.com/PoomSmart/YTReExplore) |
|
||||||
| **YTSpeed** | 1.0.1 | [✔︎](https://github.com/Lyvendia/YTSpeed) |
|
| **NoYTPremium** | [PoomSmart](https://twitter.com/poomsmart) | 1.0.4 | [✔︎](https://github.com/PoomSmart/NoYTPremium) |
|
||||||
| **YTAutoFullScreen** | 1.0.3 | [✔︎](https://github.com/PoomSmart/YTAutoFullScreen/) |
|
| **YTNoPaidPromo** | [PoomSmart](https://twitter.com/poomsmart) | 1.0.0 | [✔︎](https://github.com/PoomSmart/YTNoPaidPromo) |
|
||||||
| **YTReExplore** | 1.0.2 | [✔︎](https://github.com/PoomSmart/YTReExplore) |
|
| **YTAutoFullScreen** | [PoomSmart](https://twitter.com/poomsmart) | 1.0.3 | [✔︎](https://github.com/PoomSmart/YTAutoFullScreen) |
|
||||||
| **BigYTMiniPlayer** | 1.0-1 | [✔︎](https://github.com/Galactic-Dev/BigYTMiniPlayer) |
|
| **YouRememberCaption** | [PoomSmart](https://twitter.com/poomsmart) | 1.0.0 | [✔︎](https://poomsmart.github.io/repo/depictions/youremembercaption.html) |
|
||||||
| **YTCastConfirm** | 1.0.0 | [✔︎](https://github.com/JamieBerghmans/YTCastConfirm) |
|
| **YTClassicVideoQuality** | [PoomSmart](https://twitter.com/poomsmart) | 1.0.1 | [✔︎](https://github.com/PoomSmart/YTClassicVideoQuality) |
|
||||||
| **YTMiniplayerEnabler** | 0.0.2 | [✔︎](https://github.com/level3tjg/YTMiniplayerEnabler) |
|
| **Return YouTube Dislike** | [PoomSmart](https://twitter.com/poomsmart) | 1.6.8 | [✔︎](https://github.com/PoomSmart/Return-YouTube-Dislikes) |
|
||||||
|
| **YTNoCheckLocalNetwork** | [PoomSmart](https://twitter.com/poomsmart) | 1.0.2 | [✔︎](https://poomsmart.github.io/repo/depictions/ytnochecklocalnetwork.html) |
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
@@ -114,30 +117,14 @@
|
|||||||
See [Installation - Wiki](https://github.com/qnblackcat/uYouPlus/wiki/Installation)
|
See [Installation - Wiki](https://github.com/qnblackcat/uYouPlus/wiki/Installation)
|
||||||
|
|
||||||
# Support the developers
|
# Support the developers
|
||||||
|
- [**MiRO92**](https://twitter.com/miro92): https://github.com/MiRO92/uYou-for-YouTube#support
|
||||||
<details>
|
- [**Poomsmart**](https://twitter.com/poomsmart): https://poomsmart.github.io
|
||||||
<summary>▶︎ MiRO92</summary>
|
- [**level3tjg**](https://twitter.com/level3tjg): https://ko-fi.com/level3tjg
|
||||||
|
- [**BandarHL**](https://twitter.com/bandarhl): https://www.paypal.com/paypalme/BandarHL
|
||||||
- CashApp: https://cash.app/$MiRO92M
|
- [**julioverne**](https://twitter.com/ijulioverne): https://www.patreon.com/julioverne
|
||||||
|
- [**Galactic-dev**](https://twitter.com/dev_galactic):
|
||||||
- Other payment methods are available in uYou's settings.
|
- Paypal: https://www.paypal.com/paypalme/DBrett684
|
||||||
</details>
|
- Venmo: https://venmo.com/u/DavidBrett
|
||||||
|
|
||||||
<details>
|
|
||||||
<summary>▶︎ Poomsmart</summary>
|
|
||||||
|
|
||||||
- Paypal: https://poomsmart.github.io/
|
|
||||||
|
|
||||||
</details>
|
|
||||||
|
|
||||||
<details>
|
|
||||||
<summary>▶︎ Galactic-dev</summary>
|
|
||||||
|
|
||||||
- Paypal: https://www.paypal.com/paypalme/DBrett684
|
|
||||||
|
|
||||||
- Venmo: https://venmo.com/u/DavidBrett
|
|
||||||
</details>
|
|
||||||
|
|
||||||
|
|
||||||
# FAQ
|
# FAQ
|
||||||
|
|
||||||
|
|||||||
+66
-24
@@ -1,6 +1,7 @@
|
|||||||
#import "Tweaks/YouTubeHeader/YTSettingsViewController.h"
|
#import "Tweaks/YouTubeHeader/YTSettingsViewController.h"
|
||||||
#import "Tweaks/YouTubeHeader/YTSettingsSectionItem.h"
|
#import "Tweaks/YouTubeHeader/YTSettingsSectionItem.h"
|
||||||
#import "Tweaks/YouTubeHeader/YTSettingsSectionItemManager.h"
|
#import "Tweaks/YouTubeHeader/YTSettingsSectionItemManager.h"
|
||||||
|
#import "Header.h"
|
||||||
|
|
||||||
@interface YTSettingsSectionItemManager (YouPiP)
|
@interface YTSettingsSectionItemManager (YouPiP)
|
||||||
- (void)updateuYouPlusSectionWithEntry:(id)entry;
|
- (void)updateuYouPlusSectionWithEntry:(id)entry;
|
||||||
@@ -8,18 +9,22 @@
|
|||||||
|
|
||||||
static const NSInteger uYouPlusSection = 500;
|
static const NSInteger uYouPlusSection = 500;
|
||||||
|
|
||||||
|
extern NSBundle *uYouPlusBundle();
|
||||||
extern BOOL hideHUD();
|
extern BOOL hideHUD();
|
||||||
extern BOOL oled();
|
extern BOOL oled();
|
||||||
extern BOOL oledKB();
|
extern BOOL oledKB();
|
||||||
extern BOOL autoFullScreen();
|
extern BOOL autoFullScreen();
|
||||||
extern BOOL noHoverCard();
|
extern BOOL hideHoverCard();
|
||||||
extern BOOL ReExplore();
|
extern BOOL reExplore();
|
||||||
extern BOOL bigYTMiniPlayer();
|
extern BOOL bigYTMiniPlayer();
|
||||||
extern BOOL hideCC();
|
extern BOOL hideCC();
|
||||||
extern BOOL hideAutoplaySwitch();
|
extern BOOL hideAutoplaySwitch();
|
||||||
extern BOOL castConfirm();
|
extern BOOL castConfirm();
|
||||||
extern BOOL ytMiniPlayer();
|
extern BOOL ytMiniPlayer();
|
||||||
extern BOOL hidePreviousAndNextButton();
|
extern BOOL hidePreviousAndNextButton();
|
||||||
|
extern BOOL hidePaidPromotionCard();
|
||||||
|
extern BOOL fixGoogleSignIn();
|
||||||
|
extern BOOL replacePreviousAndNextButton();
|
||||||
|
|
||||||
// Settings
|
// Settings
|
||||||
%hook YTAppSettingsPresentationData
|
%hook YTAppSettingsPresentationData
|
||||||
@@ -31,14 +36,51 @@ extern BOOL hidePreviousAndNextButton();
|
|||||||
[mutableOrder insertObject:@(uYouPlusSection) atIndex:insertIndex + 1];
|
[mutableOrder insertObject:@(uYouPlusSection) atIndex:insertIndex + 1];
|
||||||
return mutableOrder;
|
return mutableOrder;
|
||||||
}
|
}
|
||||||
|
|
||||||
%end
|
%end
|
||||||
|
|
||||||
%hook YTSettingsSectionItemManager
|
%hook YTSettingsSectionItemManager
|
||||||
%new - (void)updateuYouPlusSectionWithEntry:(id)entry {
|
%new
|
||||||
|
- (void)updateuYouPlusSectionWithEntry:(id)entry {
|
||||||
YTSettingsViewController *delegate = [self valueForKey:@"_dataDelegate"];
|
YTSettingsViewController *delegate = [self valueForKey:@"_dataDelegate"];
|
||||||
|
NSBundle *tweakBundle = uYouPlusBundle();
|
||||||
|
|
||||||
YTSettingsSectionItem *hidePreviousAndNextButton = [[%c(YTSettingsSectionItem) alloc] initWithTitle:@"Hide Previous and Next button" titleDescription:@""];
|
YTSettingsSectionItem *killApp = [%c(YTSettingsSectionItem) // https://github.com/PoomSmart/YTABConfig/blob/b74d7f28151c407cffc21cce12908c49e9e65999/Tweak.x#L76
|
||||||
|
itemWithTitle:LOC(@"KILL_APP")
|
||||||
|
titleDescription:LOC(@"KILL_APP_DESC")
|
||||||
|
accessibilityIdentifier:nil
|
||||||
|
detailTextBlock:nil
|
||||||
|
selectBlock:^BOOL (YTSettingsCell *cell, NSUInteger arg1) {
|
||||||
|
exit(0);
|
||||||
|
}];
|
||||||
|
|
||||||
|
YTSettingsSectionItem *replacePreviousAndNextButton = [[%c(YTSettingsSectionItem) alloc] initWithTitle:LOC(@"REPLACE_PREVIOUS_NEXT_BUTTON") titleDescription:LOC(@"REPLACE_PREVIOUS_NEXT_BUTTON_DESC")];
|
||||||
|
replacePreviousAndNextButton.hasSwitch = YES;
|
||||||
|
replacePreviousAndNextButton.switchVisible = YES;
|
||||||
|
replacePreviousAndNextButton.on = [[NSUserDefaults standardUserDefaults] boolForKey:@"replacePreviousAndNextButton_enabled"];
|
||||||
|
replacePreviousAndNextButton.switchBlock = ^BOOL (YTSettingsCell *cell, BOOL enabled) {
|
||||||
|
[[NSUserDefaults standardUserDefaults] setBool:enabled forKey:@"replacePreviousAndNextButton_enabled"];
|
||||||
|
return YES;
|
||||||
|
};
|
||||||
|
|
||||||
|
YTSettingsSectionItem *fixGoogleSignIn = [[%c(YTSettingsSectionItem) alloc] initWithTitle:LOC(@"FIX_GOOGLE_SIGNIN") titleDescription:LOC(@"FIX_GOOGLE_SIGNIN_DESC")];
|
||||||
|
fixGoogleSignIn.hasSwitch = YES;
|
||||||
|
fixGoogleSignIn.switchVisible = YES;
|
||||||
|
fixGoogleSignIn.on = [[NSUserDefaults standardUserDefaults] boolForKey:@"fixGoogleSignIn_enabled"];
|
||||||
|
fixGoogleSignIn.switchBlock = ^BOOL (YTSettingsCell *cell, BOOL enabled) {
|
||||||
|
[[NSUserDefaults standardUserDefaults] setBool:enabled forKey:@"fixGoogleSignIn_enabled"];
|
||||||
|
return YES;
|
||||||
|
};
|
||||||
|
|
||||||
|
YTSettingsSectionItem *hidePaidPromotionCard = [[%c(YTSettingsSectionItem) alloc] initWithTitle:LOC(@"HIDE_PAID_PROMOTION_CARDS") titleDescription:LOC(@"HIDE_PAID_PROMOTION_CARDS_DESC")];
|
||||||
|
hidePaidPromotionCard.hasSwitch = YES;
|
||||||
|
hidePaidPromotionCard.switchVisible = YES;
|
||||||
|
hidePaidPromotionCard.on = [[NSUserDefaults standardUserDefaults] boolForKey:@"hidePaidPromotionCard_enabled"];
|
||||||
|
hidePaidPromotionCard.switchBlock = ^BOOL (YTSettingsCell *cell, BOOL enabled) {
|
||||||
|
[[NSUserDefaults standardUserDefaults] setBool:enabled forKey:@"hidePaidPromotionCard_enabled"];
|
||||||
|
return YES;
|
||||||
|
};
|
||||||
|
|
||||||
|
YTSettingsSectionItem *hidePreviousAndNextButton = [[%c(YTSettingsSectionItem) alloc] initWithTitle:LOC(@"HIDE_PREVIOUS_AND_NEXT_BUTTON") titleDescription:LOC(@"HIDE_PREVIOUS_AND_NEXT_BUTTON_DESC")];
|
||||||
hidePreviousAndNextButton.hasSwitch = YES;
|
hidePreviousAndNextButton.hasSwitch = YES;
|
||||||
hidePreviousAndNextButton.switchVisible = YES;
|
hidePreviousAndNextButton.switchVisible = YES;
|
||||||
hidePreviousAndNextButton.on = [[NSUserDefaults standardUserDefaults] boolForKey:@"hidePreviousAndNextButton_enabled"];
|
hidePreviousAndNextButton.on = [[NSUserDefaults standardUserDefaults] boolForKey:@"hidePreviousAndNextButton_enabled"];
|
||||||
@@ -47,7 +89,7 @@ extern BOOL hidePreviousAndNextButton();
|
|||||||
return YES;
|
return YES;
|
||||||
};
|
};
|
||||||
|
|
||||||
YTSettingsSectionItem *ytMiniPlayer = [[%c(YTSettingsSectionItem) alloc] initWithTitle:@"Enable the Miniplayer for all YouTube videos" titleDescription:@""];
|
YTSettingsSectionItem *ytMiniPlayer = [[%c(YTSettingsSectionItem) alloc] initWithTitle:LOC(@"YT_MINIPLAYER") titleDescription:LOC(@"YT_MINIPLAYER_DESC")];
|
||||||
ytMiniPlayer.hasSwitch = YES;
|
ytMiniPlayer.hasSwitch = YES;
|
||||||
ytMiniPlayer.switchVisible = YES;
|
ytMiniPlayer.switchVisible = YES;
|
||||||
ytMiniPlayer.on = [[NSUserDefaults standardUserDefaults] boolForKey:@"ytMiniPlayer_enabled"];
|
ytMiniPlayer.on = [[NSUserDefaults standardUserDefaults] boolForKey:@"ytMiniPlayer_enabled"];
|
||||||
@@ -56,7 +98,7 @@ extern BOOL hidePreviousAndNextButton();
|
|||||||
return YES;
|
return YES;
|
||||||
};
|
};
|
||||||
|
|
||||||
YTSettingsSectionItem *castConfirm = [[%c(YTSettingsSectionItem) alloc] initWithTitle:@"Confirm alert before casting (YTCastConfirm)" titleDescription:@"Show a confirm alert before casting to prevent accidentally hijacking TV. App restart is required."];
|
YTSettingsSectionItem *castConfirm = [[%c(YTSettingsSectionItem) alloc] initWithTitle:LOC(@"CAST_CONFIRM") titleDescription:LOC(@"CAST_CONFIRM_DESC")];
|
||||||
castConfirm.hasSwitch = YES;
|
castConfirm.hasSwitch = YES;
|
||||||
castConfirm.switchVisible = YES;
|
castConfirm.switchVisible = YES;
|
||||||
castConfirm.on = [[NSUserDefaults standardUserDefaults] boolForKey:@"castConfirm_enabled"];
|
castConfirm.on = [[NSUserDefaults standardUserDefaults] boolForKey:@"castConfirm_enabled"];
|
||||||
@@ -65,16 +107,16 @@ extern BOOL hidePreviousAndNextButton();
|
|||||||
return YES;
|
return YES;
|
||||||
};
|
};
|
||||||
|
|
||||||
YTSettingsSectionItem *hoverCardItem = [[%c(YTSettingsSectionItem) alloc] initWithTitle:@"Hide End screens hover cards (YTNoHoverCards)" titleDescription:@"Hide creator End screens (thumbnails) at the end of videos."];
|
YTSettingsSectionItem *hideHoverCard = [[%c(YTSettingsSectionItem) alloc] initWithTitle:LOC(@"HIDE_HOVER_CARD") titleDescription:LOC(@"HIDE_HOVER_CARD_DESC")];
|
||||||
hoverCardItem.hasSwitch = YES;
|
hideHoverCard.hasSwitch = YES;
|
||||||
hoverCardItem.switchVisible = YES;
|
hideHoverCard.switchVisible = YES;
|
||||||
hoverCardItem.on = [[NSUserDefaults standardUserDefaults] boolForKey:@"hover_cards_enabled"];
|
hideHoverCard.on = [[NSUserDefaults standardUserDefaults] boolForKey:@"hideHoverCards_enabled"];
|
||||||
hoverCardItem.switchBlock = ^BOOL (YTSettingsCell *cell, BOOL enabled) {
|
hideHoverCard.switchBlock = ^BOOL (YTSettingsCell *cell, BOOL enabled) {
|
||||||
[[NSUserDefaults standardUserDefaults] setBool:enabled forKey:@"hover_cards_enabled"];
|
[[NSUserDefaults standardUserDefaults] setBool:enabled forKey:@"hideHoverCards_enabled"];
|
||||||
return YES;
|
return YES;
|
||||||
};
|
};
|
||||||
|
|
||||||
YTSettingsSectionItem *bigYTMiniPlayer = [[%c(YTSettingsSectionItem) alloc] initWithTitle:@"New miniplayer bar style (BigYTMiniPlayer)" titleDescription:@"App restart is required."];
|
YTSettingsSectionItem *bigYTMiniPlayer = [[%c(YTSettingsSectionItem) alloc] initWithTitle:LOC(@"NEW_MINIPLAYER_STYLE") titleDescription:LOC(@"NEW_MINIPLAYER_STYLE_DESC")];
|
||||||
bigYTMiniPlayer.hasSwitch = YES;
|
bigYTMiniPlayer.hasSwitch = YES;
|
||||||
bigYTMiniPlayer.switchVisible = YES;
|
bigYTMiniPlayer.switchVisible = YES;
|
||||||
bigYTMiniPlayer.on = [[NSUserDefaults standardUserDefaults] boolForKey:@"bigYTMiniPlayer_enabled"];
|
bigYTMiniPlayer.on = [[NSUserDefaults standardUserDefaults] boolForKey:@"bigYTMiniPlayer_enabled"];
|
||||||
@@ -83,7 +125,7 @@ extern BOOL hidePreviousAndNextButton();
|
|||||||
return YES;
|
return YES;
|
||||||
};
|
};
|
||||||
|
|
||||||
YTSettingsSectionItem *reExplore = [[%c(YTSettingsSectionItem) alloc] initWithTitle:@"Replace Shorts tab with Explore tab (YTReExplore)" titleDescription:@"App restart is required."];
|
YTSettingsSectionItem *reExplore = [[%c(YTSettingsSectionItem) alloc] initWithTitle:LOC(@"YT_RE_EXPLORE") titleDescription:LOC(@"YT_RE_EXPLORE_DESC")];
|
||||||
reExplore.hasSwitch = YES;
|
reExplore.hasSwitch = YES;
|
||||||
reExplore.switchVisible = YES;
|
reExplore.switchVisible = YES;
|
||||||
reExplore.on = [[NSUserDefaults standardUserDefaults] boolForKey:@"reExplore_enabled"];
|
reExplore.on = [[NSUserDefaults standardUserDefaults] boolForKey:@"reExplore_enabled"];
|
||||||
@@ -92,7 +134,7 @@ extern BOOL hidePreviousAndNextButton();
|
|||||||
return YES;
|
return YES;
|
||||||
};
|
};
|
||||||
|
|
||||||
YTSettingsSectionItem *hideCC = [[%c(YTSettingsSectionItem) alloc] initWithTitle:@"Hide Subtitles button" titleDescription:@"Hide the Subtitles button in video controls overlay. "];
|
YTSettingsSectionItem *hideCC = [[%c(YTSettingsSectionItem) alloc] initWithTitle:LOC(@"HIDE_SUBTITLES_BUTTON") titleDescription:LOC(@"HIDE_SUBTITLES_BUTTON_DESC")];
|
||||||
hideCC.hasSwitch = YES;
|
hideCC.hasSwitch = YES;
|
||||||
hideCC.switchVisible = YES;
|
hideCC.switchVisible = YES;
|
||||||
hideCC.on = [[NSUserDefaults standardUserDefaults] boolForKey:@"hideCC_enabled"];
|
hideCC.on = [[NSUserDefaults standardUserDefaults] boolForKey:@"hideCC_enabled"];
|
||||||
@@ -101,7 +143,7 @@ extern BOOL hidePreviousAndNextButton();
|
|||||||
return YES;
|
return YES;
|
||||||
};
|
};
|
||||||
|
|
||||||
YTSettingsSectionItem *hideAutoplaySwitch = [[%c(YTSettingsSectionItem) alloc] initWithTitle:@"Hide Autoplay switch" titleDescription:@"Hide the Autoplay switch button in video controls overlay."];
|
YTSettingsSectionItem *hideAutoplaySwitch = [[%c(YTSettingsSectionItem) alloc] initWithTitle:LOC(@"HIDE_AUTOPLAY_SWITCH") titleDescription:LOC(@"HIDE_AUTOPLAY_SWITCH_DESC")];
|
||||||
hideAutoplaySwitch.hasSwitch = YES;
|
hideAutoplaySwitch.hasSwitch = YES;
|
||||||
hideAutoplaySwitch.switchVisible = YES;
|
hideAutoplaySwitch.switchVisible = YES;
|
||||||
hideAutoplaySwitch.on = [[NSUserDefaults standardUserDefaults] boolForKey:@"hideAutoplaySwitch_enabled"];
|
hideAutoplaySwitch.on = [[NSUserDefaults standardUserDefaults] boolForKey:@"hideAutoplaySwitch_enabled"];
|
||||||
@@ -110,16 +152,16 @@ extern BOOL hidePreviousAndNextButton();
|
|||||||
return YES;
|
return YES;
|
||||||
};
|
};
|
||||||
|
|
||||||
YTSettingsSectionItem *autoFull = [[%c(YTSettingsSectionItem) alloc] initWithTitle:@"Auto Full Screen (YTAutoFullScreen)" titleDescription:@"Autoplay videos at full screen."];
|
YTSettingsSectionItem *autoFull = [[%c(YTSettingsSectionItem) alloc] initWithTitle:LOC(@"AUTO_FULLSCREEN") titleDescription:LOC(@"AUTO_FULLSCREEN_DESC")];
|
||||||
autoFull.hasSwitch = YES;
|
autoFull.hasSwitch = YES;
|
||||||
autoFull.switchVisible = YES;
|
autoFull.switchVisible = YES;
|
||||||
autoFull.on = [[NSUserDefaults standardUserDefaults] boolForKey:@"autofull_enabled"];
|
autoFull.on = [[NSUserDefaults standardUserDefaults] boolForKey:@"autoFull_enabled"];
|
||||||
autoFull.switchBlock = ^BOOL (YTSettingsCell *cell, BOOL enabled) {
|
autoFull.switchBlock = ^BOOL (YTSettingsCell *cell, BOOL enabled) {
|
||||||
[[NSUserDefaults standardUserDefaults] setBool:enabled forKey:@"autofull_enabled"];
|
[[NSUserDefaults standardUserDefaults] setBool:enabled forKey:@"autoFull_enabled"];
|
||||||
return YES;
|
return YES;
|
||||||
};
|
};
|
||||||
|
|
||||||
YTSettingsSectionItem *hideHUD = [[%c(YTSettingsSectionItem) alloc] initWithTitle:@"Hide HUD Messages" titleDescription:@"Example: CC is turned on/off, Video loop is on,..."];
|
YTSettingsSectionItem *hideHUD = [[%c(YTSettingsSectionItem) alloc] initWithTitle:LOC(@"HIDE_HUD_MESSAGES") titleDescription:LOC(@"HIDE_HUD_MESSAGES_DESC")];
|
||||||
hideHUD.hasSwitch = YES;
|
hideHUD.hasSwitch = YES;
|
||||||
hideHUD.switchVisible = YES;
|
hideHUD.switchVisible = YES;
|
||||||
hideHUD.on = [[NSUserDefaults standardUserDefaults] boolForKey:@"hideHUD_enabled"];
|
hideHUD.on = [[NSUserDefaults standardUserDefaults] boolForKey:@"hideHUD_enabled"];
|
||||||
@@ -128,7 +170,7 @@ extern BOOL hidePreviousAndNextButton();
|
|||||||
return YES;
|
return YES;
|
||||||
};
|
};
|
||||||
|
|
||||||
YTSettingsSectionItem *oledDarkMode = [[%c(YTSettingsSectionItem) alloc] initWithTitle:@"OLED Dark mode (Experimental)" titleDescription:@"App restart might be needed after switching between Light/Dark theme to fully apply changes. In case OLED Dark mode doesn't work: just switch between Light/Dark theme, then restart the app."];
|
YTSettingsSectionItem *oledDarkMode = [[%c(YTSettingsSectionItem) alloc] initWithTitle:LOC(@"OLED_DARKMODE") titleDescription:LOC(@"OLED_DARKMODE_DESC")];
|
||||||
oledDarkMode.hasSwitch = YES;
|
oledDarkMode.hasSwitch = YES;
|
||||||
oledDarkMode.switchVisible = YES;
|
oledDarkMode.switchVisible = YES;
|
||||||
oledDarkMode.on = [[NSUserDefaults standardUserDefaults] boolForKey:@"oled_enabled"];
|
oledDarkMode.on = [[NSUserDefaults standardUserDefaults] boolForKey:@"oled_enabled"];
|
||||||
@@ -137,7 +179,7 @@ extern BOOL hidePreviousAndNextButton();
|
|||||||
return YES;
|
return YES;
|
||||||
};
|
};
|
||||||
|
|
||||||
YTSettingsSectionItem *oledKeyBoard = [[%c(YTSettingsSectionItem) alloc] initWithTitle:@"OLED Keyboard (Experimental)" titleDescription:@"Might not working properly in some cases. App restart is required."];
|
YTSettingsSectionItem *oledKeyBoard = [[%c(YTSettingsSectionItem) alloc] initWithTitle:LOC(@"OLED_KEYBOARD") titleDescription:LOC(@"OLED_KEYBOARD_DESC")];
|
||||||
oledKeyBoard.hasSwitch = YES;
|
oledKeyBoard.hasSwitch = YES;
|
||||||
oledKeyBoard.switchVisible = YES;
|
oledKeyBoard.switchVisible = YES;
|
||||||
oledKeyBoard.on = [[NSUserDefaults standardUserDefaults] boolForKey:@"oledKeyBoard_enabled"];
|
oledKeyBoard.on = [[NSUserDefaults standardUserDefaults] boolForKey:@"oledKeyBoard_enabled"];
|
||||||
@@ -146,7 +188,7 @@ extern BOOL hidePreviousAndNextButton();
|
|||||||
return YES;
|
return YES;
|
||||||
};
|
};
|
||||||
|
|
||||||
NSMutableArray <YTSettingsSectionItem *> *sectionItems = [NSMutableArray arrayWithArray:@[autoFull, castConfirm, ytMiniPlayer, hideAutoplaySwitch, hideCC, hideHUD, hidePreviousAndNextButton, hoverCardItem, bigYTMiniPlayer, oledKeyBoard, oledDarkMode,reExplore]];
|
NSMutableArray <YTSettingsSectionItem *> *sectionItems = [NSMutableArray arrayWithArray:@[killApp, autoFull, castConfirm, ytMiniPlayer, fixGoogleSignIn, hideAutoplaySwitch, hideCC, hideHUD, hidePaidPromotionCard, hidePreviousAndNextButton, hideHoverCard, bigYTMiniPlayer, oledDarkMode, oledKeyBoard, replacePreviousAndNextButton, reExplore]];
|
||||||
[delegate setSectionItems:sectionItems forCategory:uYouPlusSection title:@"uYouPlus" titleDescription:nil headerHidden:NO];
|
[delegate setSectionItems:sectionItems forCategory:uYouPlusSection title:@"uYouPlus" titleDescription:nil headerHidden:NO];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+1
-1
Submodule Tweaks/Alderis updated: f8b577ebf7...c5b3ed5761
+1
-1
Submodule Tweaks/PSHeader updated: 352ca32523...ac9324f441
Submodule Tweaks/Return-YouTube-Dislikes updated: b16a511648...8b1e9d14f1
+1
-1
Submodule Tweaks/YTSpeed updated: 7c11d9c916...3fec2dfcf0
+1
-1
Submodule Tweaks/YTUHD updated: 00c5e38ca9...47bcdc5a5b
+1
-1
Submodule Tweaks/YouPiP updated: 66cae4c924...a754e1bf32
+1
-1
Submodule Tweaks/YouTubeHeader updated: 8b5380d920...efcf986beb
+1
-1
Submodule Tweaks/iSponsorBlock updated: a936217c38...82d717878f
@@ -0,0 +1,55 @@
|
|||||||
|
// Settings
|
||||||
|
|
||||||
|
"REPLACE_PREVIOUS_NEXT_BUTTON" = "تقدم وتراجع بدلاً من السابق والتالي";
|
||||||
|
"REPLACE_PREVIOUS_NEXT_BUTTON_DESC" = "استبدال زرّي المقطع السابق والمقطع التالي بزرّي تقدم وتراجع. يتطلب إعادة تشغيل التطبيق.";
|
||||||
|
|
||||||
|
"FIX_GOOGLE_SIGNIN" = "إصلاح تسجيل الدخول بحساب جوجل (لمستخدمي TrollStore فقط)";
|
||||||
|
"FIX_GOOGLE_SIGNIN_DESC" = "هذا الخيار لا يعمل إلا إذا كان التطبيق مثبت بواسطة TrollStore: فعل هذا الخيار لتتمكن من تسجيل الدخول بحساب جوجل. يتطلب إعادة تشغيل التطبيق.";
|
||||||
|
|
||||||
|
"KILL_APP" = "إغلاق تطبيق يوتيوب";
|
||||||
|
"KILL_APP_DESC" = "المس هنا لإغلاق تطبيق يوتيوب!";
|
||||||
|
|
||||||
|
"HIDE_PREVIOUS_AND_NEXT_BUTTON" = "إخفاء زرّي السابق والتالي";
|
||||||
|
"HIDE_PREVIOUS_AND_NEXT_BUTTON_DESC" = "إخفاء زرّي المقطع السابق والمقطع التالي من أزرار التحكم على الفيديو.";
|
||||||
|
|
||||||
|
"YT_MINIPLAYER" = "السماح بالمشغل المصغّر لكل فيديوهات يوتيوب";
|
||||||
|
"YT_MINIPLAYER_DESC" = "عند تصغير فيديوهات الأطفال مثلاً (قبل إغلاق المقطع).";
|
||||||
|
|
||||||
|
"CAST_CONFIRM" = "التأكيد قبل البث (أداة YTCastConfirm)";
|
||||||
|
"CAST_CONFIRM_DESC" = "إظهار تنبيه للتأكيد قبل البث، من أجل منع البث للتلفاز عن طريق الخطأ.";
|
||||||
|
|
||||||
|
"HIDE_HOVER_CARD" = "إخفاء صور المقاطع الأخرى في نهاية المقاطع (أداة YTNoHoverCards)";
|
||||||
|
"HIDE_HOVER_CARD_DESC" = "إخفاء الصور المصغرة الظاهرة على مشغل الفيديو في نهاية المقطع.";
|
||||||
|
|
||||||
|
"NEW_MINIPLAYER_STYLE" = "تغيير شكل المشغّل المصغر (أداة BigYTMiniPlayer)";
|
||||||
|
"NEW_MINIPLAYER_STYLE_DESC" = "تغيير شكل المشغّل المصغر في الآيفون إلى نفس شكله في الآيباد - تتطلب إغلاق التطبيق وإعادة فتحه.";
|
||||||
|
|
||||||
|
"YT_RE_EXPLORE" = "استبدال تبويب Shorts بتبويب Explore (أداة YTReExplore)";
|
||||||
|
"YT_RE_EXPLORE_DESC" = " تتطلب إغلاق التطبيق وإعادة فتحه.";
|
||||||
|
|
||||||
|
"HIDE_SUBTITLES_BUTTON" = "إخفاء زر الترجمة";
|
||||||
|
"HIDE_SUBTITLES_BUTTON_DESC" = "إخفاء زر الترجمة من أزرار التحكم على الفيديو.";
|
||||||
|
|
||||||
|
"HIDE_AUTOPLAY_SWITCH" = "إخفاء زر التشغيل التلقائي";
|
||||||
|
"HIDE_AUTOPLAY_SWITCH_DESC" = "إخفاء زر التشغيل التلقائي من أزرار التحكم على الفيديو.";
|
||||||
|
|
||||||
|
"AUTO_FULLSCREEN" = "كامل الشاشة تلقائياً (أداة YTAutoFullScreen)";
|
||||||
|
"AUTO_FULLSCREEN_DESC" = "تشغيل الفيديوهات تلقائياً بكامل الشاشة.";
|
||||||
|
|
||||||
|
"HIDE_HUD_MESSAGES" = "إخفاء رسائل المعلومات";
|
||||||
|
"HIDE_HUD_MESSAGES_DESC" = "مثلاً: تم إيقاف الترجمة...";
|
||||||
|
|
||||||
|
"OLED_DARKMODE" = "وضغ داكن OLED (ميزة تجريبية)";
|
||||||
|
"OLED_DARKMODE_DESC" = "قد لا تعمل في كل الحالات. يجب إعادة تشغيل التطبيق عند تشغيل أو إيقاف هذه الخاصية.";
|
||||||
|
|
||||||
|
"OLED_KEYBOARD" = "لوحة مفاتيح داكنة OLED (ميزة تجريبية)";
|
||||||
|
"OLED_KEYBOARD_DESC" = "قد لا تعمل في كل الحالات. يجب إعادة تشغيل التطبيق عند تشغيل أو إيقاف هذه الخاصية.";
|
||||||
|
|
||||||
|
"HIDE_PAID_PROMOTION_CARDS" = "إخفاء شريط الترويج المدفوع";
|
||||||
|
"HIDE_PAID_PROMOTION_CARDS_DESC" = "إخفاء عبارة يتضمن ترويجاً مدفوعاً الظاهرة على بعض الفيديوهات.";
|
||||||
|
|
||||||
|
// YTCastConfirm
|
||||||
|
"CASTING" = "البث";
|
||||||
|
"MSG_ARE_YOU_SURE" = "هل أنت متأكد أنك تريد بدء البث؟";
|
||||||
|
"MSG_YES" = "نعم";
|
||||||
|
"MSG_CANCEL" = "إلغاء";
|
||||||
@@ -0,0 +1,58 @@
|
|||||||
|
// How to translate uYouPlus to your languate:
|
||||||
|
//
|
||||||
|
// 1. Fork uYouPlus repo
|
||||||
|
// 2. Duplicate the template.lproj folder, and edit the duplicated folder's name to your <lang_code>.lproj id.
|
||||||
|
// For example: <ru.lproj> for Russia. For more details, visit: https://en.wikipedia.org/wiki/List_of_ISO_3166_country_codes
|
||||||
|
// 3. Translate each line below after each =
|
||||||
|
// 4. Open a Pull Request
|
||||||
|
//
|
||||||
|
// If your language already exists then feel free to check it and/or improve it!
|
||||||
|
// You can also add your localiztion to YouPiP here, the process is the same
|
||||||
|
// https://github.com/PoomSmart/YouPiP/tree/main/layout/Library/Application%20Support/YouPiP.bundle
|
||||||
|
//
|
||||||
|
// Settings
|
||||||
|
|
||||||
|
"HIDE_PREVIOUS_AND_NEXT_BUTTON" = "Skrýt tlačítka předchozí a následující";
|
||||||
|
"HIDE_PREVIOUS_AND_NEXT_BUTTON_DESC" = "Skryje tlačítka předchozí a následující v překrytí ovládání videa.";
|
||||||
|
|
||||||
|
"YT_MINIPLAYER" = "Povolit Minipřehrávač pro všechna videa";
|
||||||
|
"YT_MINIPLAYER_DESC" = "Například u videa pro děti";
|
||||||
|
|
||||||
|
"CAST_CONFIRM" = "Zobrazit potvrzení před začátkem sdílení obrazu (YTCastConfirm)";
|
||||||
|
"CAST_CONFIRM_DESC" = "Zobrazí potvrzení aby se zamezilo nechtěnému sdílení do televize.";
|
||||||
|
|
||||||
|
"HIDE_HOVER_CARD" = "Skrýt karty na konci videa (YTNoHoverCards)";
|
||||||
|
"HIDE_HOVER_CARD_DESC" = "Skryje náhledy jiných videjí na konci videa.";
|
||||||
|
|
||||||
|
"NEW_MINIPLAYER_STYLE" = "Nový styl minipřehrávače (BigYTMiniPlayer)";
|
||||||
|
"NEW_MINIPLAYER_STYLE_DESC" = "Je potřeba restart aplikace.";
|
||||||
|
|
||||||
|
"YT_RE_EXPLORE" = "Nahradit záložku Shorts tab záložkou Explore (YTReExplore)";
|
||||||
|
"YT_RE_EXPLORE_DESC" = "Je potřeba restart aplikace.";
|
||||||
|
|
||||||
|
"HIDE_SUBTITLES_BUTTON" = "Skrýt tlačítko titulky";
|
||||||
|
"HIDE_SUBTITLES_BUTTON_DESC" = "Skryje tlačítko titulky v překrytí ovládání videa.";
|
||||||
|
|
||||||
|
"HIDE_AUTOPLAY_SWITCH" = "Skrýt přepínač automatického přehrávání";
|
||||||
|
"HIDE_AUTOPLAY_SWITCH_DESC" = "Skryje přepínač automatického přehrávání v překrytí ovládání videa.";
|
||||||
|
|
||||||
|
"AUTO_FULLSCREEN" = "Přes celou obrazovku (YTAutoFullScreen)";
|
||||||
|
"AUTO_FULLSCREEN_DESC" = "Automaticky spouští videa přes celou obrazovku.";
|
||||||
|
|
||||||
|
"HIDE_HUD_MESSAGES" = "Skrýt vyskakující zprávy";
|
||||||
|
"HIDE_HUD_MESSAGES_DESC" = "Příklad: Titulky zapnuty/vypnuty, Smyčka videa zapnuta,...";
|
||||||
|
|
||||||
|
"OLED_DARKMODE" = "Tmavý OLED režim (Experimentální)";
|
||||||
|
"OLED_DARKMODE_DESC" = "Mohou se vyskytnout chyby. Je potřeba restart aplikace.";
|
||||||
|
|
||||||
|
"OLED_KEYBOARD" = "OLED Klávesnice (Experimentální)";
|
||||||
|
"OLED_KEYBOARD_DESC" = "Mohou se vyskytnout chyby. Je potřeba restart aplikace.";
|
||||||
|
|
||||||
|
"HIDE_PAID_PROMOTION_CARDS" = "Skrýt kartu placené propagace";
|
||||||
|
"HIDE_PAID_PROMOTION_CARDS_DESC" = "Skryje 'Obsahuje placenou propagaci' u některých videjí.";
|
||||||
|
|
||||||
|
// YTCastConfirm
|
||||||
|
"CASTING" = "Sdílení obrazu";
|
||||||
|
"MSG_ARE_YOU_SURE" = "Opravdu chcete začít sdílet obraz?";
|
||||||
|
"MSG_YES" = "Ano";
|
||||||
|
"MSG_CANCEL" = "Zrušit";
|
||||||
@@ -0,0 +1,46 @@
|
|||||||
|
// Settings
|
||||||
|
|
||||||
|
"HIDE_PREVIOUS_AND_NEXT_BUTTON" = "Vor- und Zurücktasten ausblenden";
|
||||||
|
"HIDE_PREVIOUS_AND_NEXT_BUTTON_DESC" = "Vor- und Zurückspultasten vom Videoplayer ausblenden.";
|
||||||
|
|
||||||
|
"YT_MINIPLAYER" = "Miniplayer für alle YT Videos aktivieren";
|
||||||
|
"YT_MINIPLAYER_DESC" = "z.B. bei Videos für Kinder";
|
||||||
|
|
||||||
|
"CAST_CONFIRM" = "Warnung vor TV-Übertragungen (YTCastConfirm)";
|
||||||
|
"CAST_CONFIRM_DESC" = "Zeigt eine Warnung an, um eine ausversehene TV-Übertragung zu verhindern.";
|
||||||
|
|
||||||
|
"HIDE_HOVER_CARD" = "Endkarten ausblenden (YTNoHoverCards)";
|
||||||
|
"HIDE_HOVER_CARD_DESC" = "Endkarten (Thumbnails) am Ende des Videos ausblenden.";
|
||||||
|
|
||||||
|
"NEW_MINIPLAYER_STYLE" = "Neuer Miniplayer Style (BigYTMiniPlayer)";
|
||||||
|
"NEW_MINIPLAYER_STYLE_DESC" = "App-Neustart erforderlich!";
|
||||||
|
|
||||||
|
"YT_RE_EXPLORE" = "Shorts-Tab durch Entdecken-Tab ersetzen (YTReExplore)";
|
||||||
|
"YT_RE_EXPLORE_DESC" = "App-Neustart erforderlich!";
|
||||||
|
|
||||||
|
"HIDE_SUBTITLES_BUTTON" = "Untertitel-Button ausblenden";
|
||||||
|
"HIDE_SUBTITLES_BUTTON_DESC" = "Untertitel-Button vom Videoplayer ausblenden.";
|
||||||
|
|
||||||
|
"HIDE_AUTOPLAY_SWITCH" = "Autoplay-Schalter ausblenden";
|
||||||
|
"HIDE_AUTOPLAY_SWITCH_DESC" = "Autoplay-Schalter vom Videoplayer ausblenden.";
|
||||||
|
|
||||||
|
"AUTO_FULLSCREEN" = "Automatisches Vollbild (YTAutoFullScreen)";
|
||||||
|
"AUTO_FULLSCREEN_DESC" = "Automatisch Videos im Vollbild starten.";
|
||||||
|
|
||||||
|
"HIDE_HUD_MESSAGES" = "HUD-Nachrichten ausblenden";
|
||||||
|
"HIDE_HUD_MESSAGES_DESC" = "z.B.: Untertitel sind akti-/deaktiviert, Videoschleife ist an, ...";
|
||||||
|
|
||||||
|
"OLED_DARKMODE" = "OLED-Dunkelmodus (Experimental)";
|
||||||
|
"OLED_DARKMODE_DESC" = "Könnte in manchen Fällen nicht richtig funktionieren. App-Neustart ist erforderlich, wenn diese Option akti-/deaktiviert wird!";
|
||||||
|
|
||||||
|
"OLED_KEYBOARD" = "OLED-Tastatur (Experimental)";
|
||||||
|
"OLED_KEYBOARD_DESC" = "Könnte in manchen Fällen nicht richtig funktionieren. App-Neustart erforderlich1";
|
||||||
|
|
||||||
|
"HIDE_PAID_PROMOTION_CARDS" = "Enthält bezahlte Werbung Info ausblenden";
|
||||||
|
"HIDE_PAID_PROMOTION_CARDS_DESC" = "Enthält bezahlte Werbung Infobanner bei manchen Videos ausblenden.";
|
||||||
|
|
||||||
|
// YTCastConfirm
|
||||||
|
"CASTING" = "TV-Übertragung";
|
||||||
|
"MSG_ARE_YOU_SURE" = "Sind Sie sicher, dass Sie mit der Videoübertragung beginnen wollen?";
|
||||||
|
"MSG_YES" = "Ja";
|
||||||
|
"MSG_CANCEL" = "Abbrechen";
|
||||||
@@ -0,0 +1,43 @@
|
|||||||
|
// Settings
|
||||||
|
|
||||||
|
"HIDE_PREVIOUS_AND_NEXT_BUTTON" = "Κρύψτε το προηγούμενο και το επόμενο κουμπί";
|
||||||
|
"HIDE_PREVIOUS_AND_NEXT_BUTTON_DESC" = "Κρύψτε το προηγούμενο και το επόμενο κουμπί κατά την αναπαραγωγή βίντεο.";
|
||||||
|
|
||||||
|
"YT_MINIPLAYER" = "Ενεργοποιήστε το miniplayer για όλα τα βίντεο του YouTube";
|
||||||
|
"YT_MINIPLAYER_DESC" = "Τα παιδικά βίντεο για παράδειγμα.";
|
||||||
|
|
||||||
|
"CAST_CONFIRM" = "Επιβεβαιωτικό μήνυμα πριν γίνει Cast(YTCastConfirm)";
|
||||||
|
"CAST_CONFIRM_DESC" = "Να φανεί ένα επιβεβαιωτικό μήνυμα πριν γίνει cast για να αποτρεπτεί η καταλάθως σύνδεση στην τηλεόραση.";
|
||||||
|
|
||||||
|
"HIDE_HOVER_CARD" = "Κρύψτε τις τελικές καρτέλες (YTNoHoverCards)";
|
||||||
|
"HIDE_HOVER_CARD_DESC" = "Κρύψτε τις τελικές καρτέλες από τους δημιουργούς (thumbnails) στο τέλος των βίντεο.";
|
||||||
|
|
||||||
|
"NEW_MINIPLAYER_STYLE" = "Καινούργιο miniplayer θέμα στην μπάρα (BigYTMiniPlayer)";
|
||||||
|
"NEW_MINIPLAYER_STYLE_DESC" = "Απαιτείται επανεκκίνηση της εφαρμογής.";
|
||||||
|
|
||||||
|
"YT_RE_EXPLORE" = "Αντικατάσταση της καρτέλας Shorts με την καρτέλα Explore (YTReExplore)";
|
||||||
|
"YT_RE_EXPLORE_DESC" = "Απαιτείται επανεκκίνηση της εφαρμογής.";
|
||||||
|
|
||||||
|
"HIDE_SUBTITLES_BUTTON" = "Κρύψτε το κουμπί των Υπότιτλων";
|
||||||
|
"HIDE_SUBTITLES_BUTTON_DESC" = "Κρύψτε το κουμπί των Υπότιτλων κατά την αναπαραγωγή βίντεο.";
|
||||||
|
|
||||||
|
"HIDE_AUTOPLAY_SWITCH" = "Κρύψτε τον διακόπτη της αυτόματης αναπαραγωγής";
|
||||||
|
"HIDE_AUTOPLAY_SWITCH_DESC" = "Κρύψτε τον διακόπτη της αυτόματης αναπαραγωγής κατά την αναπαραγωγή βίντεο";
|
||||||
|
|
||||||
|
"AUTO_FULLSCREEN" = "Αυτόματη αναπαραγωγή σε πλήρη οθόνη (YTAutoFullScreen)";
|
||||||
|
"AUTO_FULLSCREEN_DESC" = "Αυτόματη αναπαραγωγή των βίντεο σε πλήρη οθόνη.";
|
||||||
|
|
||||||
|
"HIDE_HUD_MESSAGES" = "Κρύψτε τα μηνύματα του HUD";
|
||||||
|
"HIDE_HUD_MESSAGES_DESC" = "Παράδειγμα: Οι Υπότιτλοι απενεργοποιήθηκαν/ενεργοποιήθηκαν...";
|
||||||
|
|
||||||
|
"OLED_DARKMODE" = "OLED Μαύρο θέμα (Experimental)";
|
||||||
|
"OLED_DARKMODE_DESC" = "Μπορεί να μην δουλέψει σε κάποιες περιπτώσεις. Απαιτείται επανεκκίνηση της εφαρμογής αφού το ενεργοποιήσετε/απενεργοποιήσετε.";
|
||||||
|
|
||||||
|
"OLED_KEYBOARD" = "OLED πληκτρολόγιο (Experimental)";
|
||||||
|
"OLED_KEYBOARD_DESC" = "Μπορεί να μην δουλέψει σε κάποιες περιπτώσεις. Απαιτείται επανεκκίνηση της εφαρμογής.";
|
||||||
|
|
||||||
|
// YTCastConfirm
|
||||||
|
"CASTING" = "Μετάδοση";
|
||||||
|
"MSG_ARE_YOU_SURE" = "Είστε σίγουροι ότι θέλενε να ξεκινήσετε την μετάδοση;";
|
||||||
|
"MSG_YES" = "Ναι";
|
||||||
|
"MSG_CANCEL" = "Ακύρωση";
|
||||||
@@ -0,0 +1,55 @@
|
|||||||
|
// Settings
|
||||||
|
|
||||||
|
"REPLACE_PREVIOUS_NEXT_BUTTON" = "Replace Previous and Next Button";
|
||||||
|
"REPLACE_PREVIOUS_NEXT_BUTTON_DESC" = "Replace Previous and Next Button with Fast forward and Rewind button. App restart is required.";
|
||||||
|
|
||||||
|
"FIX_GOOGLE_SIGNIN" = "Fix Google Sign in (for TrollStore user only)";
|
||||||
|
"FIX_GOOGLE_SIGNIN_DESC" = "Turn on this option only when you can't sign in with your Google account and the app was installed via TrollStore. If you can log in normally, keep it disabled. App restart is required.";
|
||||||
|
|
||||||
|
"KILL_APP" = "Close YouTube";
|
||||||
|
"KILL_APP_DESC" = "Tap here to close YouTube!";
|
||||||
|
|
||||||
|
"HIDE_PREVIOUS_AND_NEXT_BUTTON" = "Hide Previous and Next button";
|
||||||
|
"HIDE_PREVIOUS_AND_NEXT_BUTTON_DESC" = "Hide Previous and Next button in video controls overlay.";
|
||||||
|
|
||||||
|
"YT_MINIPLAYER" = "Enable the Miniplayer for all YouTube videos";
|
||||||
|
"YT_MINIPLAYER_DESC" = "Kid videos for example.";
|
||||||
|
|
||||||
|
"CAST_CONFIRM" = "Confirm alert before casting (YTCastConfirm)";
|
||||||
|
"CAST_CONFIRM_DESC" = "Show a confirm alert before casting to prevent accidentally hijacking TV.";
|
||||||
|
|
||||||
|
"HIDE_HOVER_CARD" = "Hide End screens hover cards (YTNoHoverCards)";
|
||||||
|
"HIDE_HOVER_CARD_DESC" = "Hide creator End screens (thumbnails) at the end of videos.";
|
||||||
|
|
||||||
|
"NEW_MINIPLAYER_STYLE" = "New miniplayer bar style (BigYTMiniPlayer)";
|
||||||
|
"NEW_MINIPLAYER_STYLE_DESC" = "App restart is required.";
|
||||||
|
|
||||||
|
"YT_RE_EXPLORE" = "Replace Shorts tab with Explore tab (YTReExplore)";
|
||||||
|
"YT_RE_EXPLORE_DESC" = "App restart is required.";
|
||||||
|
|
||||||
|
"HIDE_SUBTITLES_BUTTON" = "Hide Subtitles button";
|
||||||
|
"HIDE_SUBTITLES_BUTTON_DESC" = "Hide the Subtitles button in video controls overlay.";
|
||||||
|
|
||||||
|
"HIDE_AUTOPLAY_SWITCH" = "Hide Autoplay switch";
|
||||||
|
"HIDE_AUTOPLAY_SWITCH_DESC" = "Hide the Autoplay switch in video controls overlay.";
|
||||||
|
|
||||||
|
"AUTO_FULLSCREEN" = "Auto Full Screen (YTAutoFullScreen)";
|
||||||
|
"AUTO_FULLSCREEN_DESC" = "Autoplay videos at full screen.";
|
||||||
|
|
||||||
|
"HIDE_HUD_MESSAGES" = "Hide HUD Messages";
|
||||||
|
"HIDE_HUD_MESSAGES_DESC" = "Example: CC is turned on/off, Video loop is on,...";
|
||||||
|
|
||||||
|
"OLED_DARKMODE" = "OLED Dark mode (Experimental)";
|
||||||
|
"OLED_DARKMODE_DESC" = "Might not working correctly in some cases. App restart is required after you enable/disable this option.";
|
||||||
|
|
||||||
|
"OLED_KEYBOARD" = "OLED Keyboard (Experimental)";
|
||||||
|
"OLED_KEYBOARD_DESC" = "Might not working correctly in some cases. App restart is required.";
|
||||||
|
|
||||||
|
"HIDE_PAID_PROMOTION_CARDS" = "Hide Paid Promotion banner";
|
||||||
|
"HIDE_PAID_PROMOTION_CARDS_DESC" = "Hide the 'Includes Paid Promotions' banner in some videos.";
|
||||||
|
|
||||||
|
// YTCastConfirm
|
||||||
|
"CASTING" = "Castings";
|
||||||
|
"MSG_ARE_YOU_SURE" = "Are you sure you want to start casting?";
|
||||||
|
"MSG_YES" = "Yes";
|
||||||
|
"MSG_CANCEL" = "Cancel";
|
||||||
@@ -0,0 +1,49 @@
|
|||||||
|
// Settings
|
||||||
|
|
||||||
|
"KILL_APP" = "Cerrar YouTube";
|
||||||
|
"KILL_APP_DESC" = "Toca aquí para cerrar YouTube!";
|
||||||
|
|
||||||
|
"HIDE_PREVIOUS_AND_NEXT_BUTTON" = "Ocultar el botón de Anterior y Siguiente";
|
||||||
|
"HIDE_PREVIOUS_AND_NEXT_BUTTON_DESC" = "Ocultar el botón de Anterior y Siguiente en los botones superpuestos.";
|
||||||
|
|
||||||
|
"YT_MINIPLAYER" = "Activar el minirreproductor para todos los vídeos de YouTube";
|
||||||
|
"YT_MINIPLAYER_DESC" = "Vídeos infantiles por ejemplo.";
|
||||||
|
|
||||||
|
"CAST_CONFIRM" = "Alerta de confirmación antes de Enviar contenido (YTCastConfirm)";
|
||||||
|
"CAST_CONFIRM_DESC" = "Mostrar una alerta de confirmación antes de Enviar contenido para prevenir el secuestro accidental del TV.";
|
||||||
|
|
||||||
|
"HIDE_HOVER_CARD" = "Ocultar tarjetas flotantes en las pantallas finales (YTNoHoverCards)";
|
||||||
|
"HIDE_HOVER_CARD_DESC" = "Ocultar tarjetas flotantes del creador (miniaturas) al final de los vídeos.";
|
||||||
|
|
||||||
|
"NEW_MINIPLAYER_STYLE" = "Nuevo estilo de barra del minirreproductor (BigYTMiniPlayer)";
|
||||||
|
"NEW_MINIPLAYER_STYLE_DESC" = "Requiere reiniciar la app.";
|
||||||
|
|
||||||
|
"YT_RE_EXPLORE" = "Reemplazar pestaña de Cortos con pestaña de Explorar (YTReExplore)";
|
||||||
|
"YT_RE_EXPLORE_DESC" = "Requiere reiniciar la app.";
|
||||||
|
|
||||||
|
"HIDE_SUBTITLES_BUTTON" = "Ocultar botón de Subtítulos";
|
||||||
|
"HIDE_SUBTITLES_BUTTON_DESC" = "Ocultar el botón de Subtítulos en los botones superpuestos.";
|
||||||
|
|
||||||
|
"HIDE_AUTOPLAY_SWITCH" = "Ocultar interruptor de Reproducir automáticamente";
|
||||||
|
"HIDE_AUTOPLAY_SWITCH_DESC" = "Ocultar el interruptor de Reproducir automáticamente en los botones superpuestos.";
|
||||||
|
|
||||||
|
"AUTO_FULLSCREEN" = "Pantalla completa automática (YTAutoFullScreen)";
|
||||||
|
"AUTO_FULLSCREEN_DESC" = "Reproducir vídeos en pantalla completa automáticamente.";
|
||||||
|
|
||||||
|
"HIDE_HUD_MESSAGES" = "Ocultar mensajes HUD";
|
||||||
|
"HIDE_HUD_MESSAGES_DESC" = "Ejemplo: CC está activado/desactivado, Vídeo en bucle está activado,...";
|
||||||
|
|
||||||
|
"OLED_DARKMODE" = "Modo oscuro OLED (Experimental)";
|
||||||
|
"OLED_DARKMODE_DESC" = "Puede no funcionar correctamente en algunos casos. Requiere reiniciar la app después de activar/desactivar esta opción.";
|
||||||
|
|
||||||
|
"OLED_KEYBOARD" = "Teclado OLED (Experimental)";
|
||||||
|
"OLED_KEYBOARD_DESC" = "Puede no funcionar correctamente en algunos casos. Requiere reiniciar la app.";
|
||||||
|
|
||||||
|
"HIDE_PAID_PROMOTION_CARDS" = "Ocultar banner de contenido promocional";
|
||||||
|
"HIDE_PAID_PROMOTION_CARDS_DESC" = "Ocultar el banner de 'Incluye contenido promocional' en algunos vídeos.";
|
||||||
|
|
||||||
|
// YTCastConfirm
|
||||||
|
"CASTING" = "Enviar contenido";
|
||||||
|
"MSG_ARE_YOU_SURE" = "¿Estás seguro de que deseas Enviar contenido?";
|
||||||
|
"MSG_YES" = "Sí";
|
||||||
|
"MSG_CANCEL" = "Cancelar";
|
||||||
@@ -0,0 +1,49 @@
|
|||||||
|
// Settings
|
||||||
|
|
||||||
|
"KILL_APP" = "Fermer YouTube";
|
||||||
|
"KILL_APP_DESC" = "Appuyez ici pour fermer YouTube !";
|
||||||
|
|
||||||
|
"HIDE_PREVIOUS_AND_NEXT_BUTTON" = "Masquer les boutons Précédent et Suivant";
|
||||||
|
"HIDE_PREVIOUS_AND_NEXT_BUTTON_DESC" = "Masquer les boutons Précédent et Suivant dans la superposition des contrôles vidéo";
|
||||||
|
|
||||||
|
"YT_MINIPLAYER" = "Activer le mini-lecteur pour toutes les vidéos YouTube";
|
||||||
|
"YT_MINIPLAYER_DESC" = "Vidéos pour enfants par exemple";
|
||||||
|
|
||||||
|
"CAST_CONFIRM" = "Confirmer l'alerte avant le casting (YTCastConfirm)";
|
||||||
|
"CAST_CONFIRM_DESC" = "Afficher une alerte de confirmation avant le casting pour éviter de déclancher accidentellement la télévision";
|
||||||
|
|
||||||
|
"HIDE_HOVER_CARD" = "Masquer les cartes de survol des écrans de fin (YTNoHoverCards)";
|
||||||
|
"HIDE_HOVER_CARD_DESC" = "Masquer les écrans de fin (vignettes) des créateurs à la fin des vidéos";
|
||||||
|
|
||||||
|
"NEW_MINIPLAYER_STYLE" = "Nouveau style de barre de mini-lecteur (BigYTMiniPlayer)";
|
||||||
|
"NEW_MINIPLAYER_STYLE_DESC" = "Un redémarrage de l'application est nécessaire";
|
||||||
|
|
||||||
|
"YT_RE_EXPLORE" = "Remplacer l'onglet Shorts par l'onglet Explorer (YTReExplore)";
|
||||||
|
"YT_RE_EXPLORE_DESC" = "Un redémarrage de l'application est nécessaire";
|
||||||
|
|
||||||
|
"HIDE_SUBTITLES_BUTTON" = "Bouton de masquage des sous-titres";
|
||||||
|
"HIDE_SUBTITLES_BUTTON_DESC" = "Masquer le bouton des sous-titres dans la superposition des contrôles vidéo";
|
||||||
|
|
||||||
|
"HIDE_AUTOPLAY_SWITCH" = "Masquer l'interrupteur de lecture automatique";
|
||||||
|
"HIDE_AUTOPLAY_SWITCH_DESC" = "Masquer le bouton de lecture automatique dans la superposition des contrôles vidéo";
|
||||||
|
|
||||||
|
"AUTO_FULLSCREEN" = "Plein écran automatique (YTAutoFullScreen)";
|
||||||
|
"AUTO_FULLSCREEN_DESC" = "Lecture automatique des vidéos en plein écran";
|
||||||
|
|
||||||
|
"HIDE_HUD_MESSAGES" = "Masquer les messages de l'ATH";
|
||||||
|
"HIDE_HUD_MESSAGES_DESC" = "Exemple : Les sous-titres sont activés/désactivés, la boucle vidéo est activée,...";
|
||||||
|
|
||||||
|
"OLED_DARKMODE" = "Mode sombre OLED (Expérimental)";
|
||||||
|
"OLED_DARKMODE_DESC" = "Peut ne pas fonctionner correctement dans certains cas. Un redémarrage de l'application est nécessaire après avoir activé/désactivé cette option.";
|
||||||
|
|
||||||
|
"OLED_KEYBOARD" = "Clavier OLED (Expérimental)";
|
||||||
|
"OLED_KEYBOARD_DESC" = "Peut ne pas fonctionner correctement dans certains cas. Un redémarrage de l'application est nécessaire.";
|
||||||
|
|
||||||
|
"HIDE_PAID_PROMOTION_CARDS" = "Masquer la bannière des communications commerciales";
|
||||||
|
"HIDE_PAID_PROMOTION_CARDS_DESC" = "Masque la bannière 'Inclut une communication commerciale' dans certaines vidéos.";
|
||||||
|
|
||||||
|
// YTCastConfirm
|
||||||
|
"CASTING" = "Castings";
|
||||||
|
"MSG_ARE_YOU_SURE" = "Êtes-vous sûr de vouloir commencer le casting ?";
|
||||||
|
"MSG_YES" = "Oui";
|
||||||
|
"MSG_CANCEL" = "Annuler";
|
||||||
@@ -0,0 +1,43 @@
|
|||||||
|
// Settings
|
||||||
|
|
||||||
|
"HIDE_PREVIOUS_AND_NEXT_BUTTON" = "הסתר את הקודם והבא";
|
||||||
|
"HIDE_PREVIOUS_AND_NEXT_BUTTON_DESC" = "הסתר את כפתורי הקודם והבא בתצוגת השליטה בסרטון.";
|
||||||
|
|
||||||
|
"YT_MINIPLAYER" = "אפשר את הנגן הקטן עבור כל הסרטונים ב-YouTube";
|
||||||
|
"YT_MINIPLAYER_DESC" = "סרטוני ילדים לדוגמה.";
|
||||||
|
|
||||||
|
"CAST_CONFIRM" = "התראת אישור לפני שידור לטלוויזיה (YTCastConfirm)";
|
||||||
|
"CAST_CONFIRM_DESC" = "הצג התראת אישור לפני שידור לטלוויזיה כדי למנוע לחיצה בטעות.";
|
||||||
|
|
||||||
|
"HIDE_HOVER_CARD" = "הסתר כרטיסיות סיום סרטון (YTNoHoverCards)";
|
||||||
|
"HIDE_HOVER_CARD_DESC" = "הסתר את מסכי הסיום של סרטונים המציגים את הערוץ וסרטונים נוספים.";
|
||||||
|
|
||||||
|
"NEW_MINIPLAYER_STYLE" = "עיצוב נגן קטן חדש (BigYTMiniPlayer)";
|
||||||
|
"NEW_MINIPLAYER_STYLE_DESC" = "נדרש לפתוח מחדש את היישום.";
|
||||||
|
|
||||||
|
"YT_RE_EXPLORE" = "החלף את לשונית ה-Shorts בלשונית Explore (YTReExplore)";
|
||||||
|
"YT_RE_EXPLORE_DESC" = "נדרש לפתוח מחדש את היישום.";
|
||||||
|
|
||||||
|
"HIDE_SUBTITLES_BUTTON" = "הסתר את כפתור הכתוביות";
|
||||||
|
"HIDE_SUBTITLES_BUTTON_DESC" = "הסתר את כפתור הכתוביות בתצוגת השליטה בסרטון.";
|
||||||
|
|
||||||
|
"HIDE_AUTOPLAY_SWITCH" = "הסתר את כפתור ההפעלה האוטומטית";
|
||||||
|
"HIDE_AUTOPLAY_SWITCH_DESC" = "הסתר את כפתור ההפעלה האוטומטית בתצוגת השליטה בסרטון.";
|
||||||
|
|
||||||
|
"AUTO_FULLSCREEN" = "מסך מלא אוטומטי (YTAutoFullScreen)";
|
||||||
|
"AUTO_FULLSCREEN_DESC" = "נגן סרטונים במסך מלא אוטומטית.";
|
||||||
|
|
||||||
|
"HIDE_HUD_MESSAGES" = "הסתר הודעות קופצות";
|
||||||
|
"HIDE_HUD_MESSAGES_DESC" = "לדוגמה: כתוביות מופעלות/מושבתות, הופעל סרטון בלופ,...";
|
||||||
|
|
||||||
|
"OLED_DARKMODE" = "תצוגה כהה OLED (נסיוני)";
|
||||||
|
"OLED_DARKMODE_DESC" = "עלול לא לעבוד נכון בחלק מהמקרים, נדרש לפתוח מחדש את היישום.";
|
||||||
|
|
||||||
|
"OLED_KEYBOARD" = "מקלדת כהה OLED (נסיוני)";
|
||||||
|
"OLED_DARKMODE_DESC" = "עלול לא לעבוד נכון בחלק מהמקרים, נדרש לפתוח מחדש את היישום.";
|
||||||
|
|
||||||
|
// YTCastConfirm
|
||||||
|
"CASTING" = "משדר";
|
||||||
|
"MSG_ARE_YOU_SURE" = "האם להתחיל לשדר?";
|
||||||
|
"MSG_YES" = "כן";
|
||||||
|
"MSG_CANCEL" = "ביטול";
|
||||||
@@ -0,0 +1,55 @@
|
|||||||
|
// Settings
|
||||||
|
|
||||||
|
"REPLACE_PREVIOUS_NEXT_BUTTON" = "前後の動画のボタンを置き換える";
|
||||||
|
"REPLACE_PREVIOUS_NEXT_BUTTON_DESC" = "前後の動画を再生するボタンを早送り、巻き戻しボタンに置き換えます。アプリの再起動が必要です。";
|
||||||
|
|
||||||
|
"FIX_GOOGLE_SIGNIN" = "Googleのサインイン (TrollStoreユーザーのみ)";
|
||||||
|
"FIX_GOOGLE_SIGNIN_DESC" = "アプリがTrollStoreでインストールされた場合のみ機能します。このオプションを有効にしてGoogleアカウントでサインインできるようにします。アプリの再起動が必要です。";
|
||||||
|
|
||||||
|
"KILL_APP" = "YouTubeを閉じる";
|
||||||
|
"KILL_APP_DESC" = "ここをタップしてYouTubeを終了できます!";
|
||||||
|
|
||||||
|
"HIDE_PREVIOUS_AND_NEXT_BUTTON" = "前後の動画のボタンを非表示";
|
||||||
|
"HIDE_PREVIOUS_AND_NEXT_BUTTON_DESC" = "動画コントロールのオーバーレイで前後の動画のボタンを非表示にします。";
|
||||||
|
|
||||||
|
"YT_MINIPLAYER" = "すべての動画でミニプレーヤーを有効にする";
|
||||||
|
"YT_MINIPLAYER_DESC" = "例: 子ども向けの動画";
|
||||||
|
|
||||||
|
"CAST_CONFIRM" = "キャストする前に確認をする (YTCastConfirm)";
|
||||||
|
"CAST_CONFIRM_DESC" = "誤ってテレビにキャストしないように、確認の警告を表示します。";
|
||||||
|
|
||||||
|
"HIDE_HOVER_CARD" = "動画終わりのホバーカードを非表示 (YTNoHoverCards)";
|
||||||
|
"HIDE_HOVER_CARD_DESC" = "動画の最後のホバーカード(サムネイル)を非表示にします。";
|
||||||
|
|
||||||
|
"NEW_MINIPLAYER_STYLE" = "新しいミニプレーヤー・バーを使う (BigYTMiniPlayer)";
|
||||||
|
"NEW_MINIPLAYER_STYLE_DESC" = "アプリの再起動が必要です。";
|
||||||
|
|
||||||
|
"YT_RE_EXPLORE" = "ショートタブを探索タブに置き換える (YTReExplore)";
|
||||||
|
"YT_RE_EXPLORE_DESC" = "アプリの再起動が必要です。";
|
||||||
|
|
||||||
|
"HIDE_SUBTITLES_BUTTON" = "字幕ボタンを非表示";
|
||||||
|
"HIDE_SUBTITLES_BUTTON_DESC" = "動画コントロールのオーバーレイから字幕ボタンを非表示にします。";
|
||||||
|
|
||||||
|
"HIDE_AUTOPLAY_SWITCH" = "自動再生ボタンを非表示";
|
||||||
|
"HIDE_AUTOPLAY_SWITCH_DESC" = "動画コントロールのオーバーレイから自動再生ボタンを非表示にします。";
|
||||||
|
|
||||||
|
"AUTO_FULLSCREEN" = "自動でフルスクリーンにする (YTAutoFullScreen)";
|
||||||
|
"AUTO_FULLSCREEN_DESC" = "動画を自動でフルスクリーンにします。";
|
||||||
|
|
||||||
|
"HIDE_HUD_MESSAGES" = "HUDのメッセージを非表示";
|
||||||
|
"HIDE_HUD_MESSAGES_DESC" = "例: 字幕がオン/オフになりました、ループ再生はオンになっています、等";
|
||||||
|
|
||||||
|
"OLED_DARKMODE" = "有機ELダークモード (実験的機能)";
|
||||||
|
"OLED_DARKMODE_DESC" = "正しく動作しない可能性があります。この設定を変更した場合、アプリの再起動が必要です。";
|
||||||
|
|
||||||
|
"OLED_KEYBOARD" = "有機ELキーボード (実験的機能)";
|
||||||
|
"OLED_KEYBOARD_DESC" = "正しく動作しない可能性があります。この設定を変更した場合、アプリの再起動が必要です。";
|
||||||
|
|
||||||
|
"HIDE_PAID_PROMOTION_CARDS" = "プロモーションバナーを非表示";
|
||||||
|
"HIDE_PAID_PROMOTION_CARDS_DESC" = "一部の動画で表示される「プロモーションを含みます」のバナーを非表示にします。";
|
||||||
|
|
||||||
|
// YTCastConfirm
|
||||||
|
"CASTING" = "キャスト";
|
||||||
|
"MSG_ARE_YOU_SURE" = "本当にキャストを開始しますか?";
|
||||||
|
"MSG_YES" = "はい";
|
||||||
|
"MSG_CANCEL" = "キャンセル";
|
||||||
@@ -0,0 +1,55 @@
|
|||||||
|
// Settings
|
||||||
|
|
||||||
|
"REPLACE_PREVIOUS_NEXT_BUTTON" = "이전, 다음 재생 버튼 교체";
|
||||||
|
"REPLACE_PREVIOUS_NEXT_BUTTON_DESC" = "이전 재생, 다음 재생 버튼을 빨리 감기, 되감기 버튼으로 교체합니다. 앱을 다시 시작해야 합니다.";
|
||||||
|
|
||||||
|
"FIX_GOOGLE_SIGNIN" = "구글 로그인 문제 수정 (TrollStore 사용자 대상)";
|
||||||
|
"FIX_GOOGLE_SIGNIN_DESC" = "TrollStore를 통해 설치된 앱에서만 동작합니다: 구글 계정으로 로그인하려면 이 옵션을 켜 주세요. 앱을 다시 시작해야 합니다.";
|
||||||
|
|
||||||
|
"KILL_APP" = "YouTube 닫기";
|
||||||
|
"KILL_APP_DESC" = "YouTube 앱을 닫으려면 여기를 탭하세요!";
|
||||||
|
|
||||||
|
"HIDE_PREVIOUS_AND_NEXT_BUTTON" = "이전, 다음 재생 버튼 숨기기";
|
||||||
|
"HIDE_PREVIOUS_AND_NEXT_BUTTON_DESC" = "비디오 재생 오버레이에서 이전 재생, 다음 재생 버튼을 숨깁니다.";
|
||||||
|
|
||||||
|
"YT_MINIPLAYER" = "모든 YouTube 영상에서 미니 플레이어 활성화";
|
||||||
|
"YT_MINIPLAYER_DESC" = "아동용 영상일 경우.";
|
||||||
|
|
||||||
|
"CAST_CONFIRM" = "TV 전송 알림 (YTCastConfirm)";
|
||||||
|
"CAST_CONFIRM_DESC" = "의도치 않게 TV로 영상을 전송하지 않도록 보내기 전에 확인 메시지를 표시합니다.";
|
||||||
|
|
||||||
|
"HIDE_HOVER_CARD" = "영상 끝 부분의 호버카드 숨기기 (YTNoHoverCards)";
|
||||||
|
"HIDE_HOVER_CARD_DESC" = "영상의 끝 부분에서 게시자가 표시한 영상 썸네일을 숨깁니다.";
|
||||||
|
|
||||||
|
"NEW_MINIPLAYER_STYLE" = "새로운 스타일의 미니 플레이어 (BigYTMiniPlayer)";
|
||||||
|
"NEW_MINIPLAYER_STYLE_DESC" = "앱을 다시 시작해야 합니다.";
|
||||||
|
|
||||||
|
"YT_RE_EXPLORE" = "Shorts 탭 대신 탐색 탭 보이기 (YTReExplore)";
|
||||||
|
"YT_RE_EXPLORE_DESC" = "앱을 다시 시작해야 합니다.";
|
||||||
|
|
||||||
|
"HIDE_SUBTITLES_BUTTON" = "자막 버튼 숨기기";
|
||||||
|
"HIDE_SUBTITLES_BUTTON_DESC" = "비디오 재생 오버레이에서 자막 버튼을 숨깁니다.";
|
||||||
|
|
||||||
|
"HIDE_AUTOPLAY_SWITCH" = "자동재생 스위치 숨기기";
|
||||||
|
"HIDE_AUTOPLAY_SWITCH_DESC" = "비디오 재생 오버레이에서 자동재생 스위치를 숨깁니다.";
|
||||||
|
|
||||||
|
"AUTO_FULLSCREEN" = "자동 전체화면 재생 (YTAutoFullScreen)";
|
||||||
|
"AUTO_FULLSCREEN_DESC" = "자동으로 전체화면에서 재생합니다.";
|
||||||
|
|
||||||
|
"HIDE_HUD_MESSAGES" = "화면 메시지 숨기기";
|
||||||
|
"HIDE_HUD_MESSAGES_DESC" = "예: 자막 사용 설정됨/중지됨, 반복재생 설정됨,...";
|
||||||
|
|
||||||
|
"OLED_DARKMODE" = "OLED 다크모드 (실험실)";
|
||||||
|
"OLED_DARKMODE_DESC" = "몇몇 경우 제대로 동작하지 않을 수도 있습니다. 이 기능을 켜거나 끄는 경우 앱을 다시 시작해야 합니다.";
|
||||||
|
|
||||||
|
"OLED_KEYBOARD" = "OLED 키보드 (실험실)";
|
||||||
|
"OLED_KEYBOARD_DESC" = "몇몇 경우 제대로 동작하지 않을 수도 있습니다. 앱을 다시 시작해야 합니다.";
|
||||||
|
|
||||||
|
"HIDE_PAID_PROMOTION_CARDS" = "유료 광고 배너 숨기기";
|
||||||
|
"HIDE_PAID_PROMOTION_CARDS_DESC" = "'유료 광고 포함' 배너를 숨깁니다.";
|
||||||
|
|
||||||
|
// YTCastConfirm
|
||||||
|
"CASTING" = "TV로 전송";
|
||||||
|
"MSG_ARE_YOU_SURE" = "TV로 영상 전송을 시작하겠습니까?";
|
||||||
|
"MSG_YES" = "예";
|
||||||
|
"MSG_CANCEL" = "취소";
|
||||||
@@ -0,0 +1,54 @@
|
|||||||
|
// Settings
|
||||||
|
"REPLACE_PREVIOUS_NEXT_BUTTON" = "Substituir o botão Anterior e Próximo";
|
||||||
|
"REPLACE_PREVIOUS_NEXT_BUTTON_DESC" = "Substitui o botão Anterior e Próximo pelo botão Avançar e Retroceder. A reinicialização do app é necessária.";
|
||||||
|
|
||||||
|
"FIX_GOOGLE_SIGNIN" = "Corrigir o login do Google (somente para usuários da TrollStore)";
|
||||||
|
"FIX_GOOGLE_SIGNIN_DESC" = "Funciona apenas quando o app foi instalado via TrollStore: ative esta opção para que você possa fazer login com sua conta do Google. A reinicialização do app é necessária.";
|
||||||
|
|
||||||
|
"KILL_APP" = "Fechar o YouTube";
|
||||||
|
"KILL_APP_DESC" = "Toque aqui para fechar o YouTube!";
|
||||||
|
|
||||||
|
"HIDE_PREVIOUS_AND_NEXT_BUTTON" = "Ocultar botão Anterior e Próximo";
|
||||||
|
"HIDE_PREVIOUS_AND_NEXT_BUTTON_DESC" = "Oculta o botão Anterior e Próximo na sobreposição de controles de vídeo.";
|
||||||
|
|
||||||
|
"YT_MINIPLAYER" = "Ative o Miniplayer para todos os vídeos do YouTube";
|
||||||
|
"YT_MINIPLAYER_DESC" = "Vídeos infantis, por exemplo.";
|
||||||
|
|
||||||
|
"CAST_CONFIRM" = "Alerta de confirmação antes de transmitir (YTCastConfirm)";
|
||||||
|
"CAST_CONFIRM_DESC" = "Mostra um alerta de confirmação antes da transmissão para evitar o sequestro acidental da TV.";
|
||||||
|
|
||||||
|
"HIDE_HOVER_CARD" = "Ocultar Cartões flutuantes de telas finais (YTNoHoverCards)";
|
||||||
|
"HIDE_HOVER_CARD_DESC" = "Oculta telas finais do criador (miniaturas) no final dos vídeos.";
|
||||||
|
|
||||||
|
"NEW_MINIPLAYER_STYLE" = "Novo estilo de barra de miniplayer (BigYTMiniPlayer)";
|
||||||
|
"NEW_MINIPLAYER_STYLE_DESC" = "A reinicialização do app é necessária.";
|
||||||
|
|
||||||
|
"YT_RE_EXPLORE" = "Substituir a guia Shorts pela guia Explorar (YTReExplore)";
|
||||||
|
"YT_RE_EXPLORE_DESC" = "A reinicialização do app é necessária.";
|
||||||
|
|
||||||
|
"HIDE_SUBTITLES_BUTTON" = "Ocultar botão de Legendas";
|
||||||
|
"HIDE_SUBTITLES_BUTTON_DESC" = "Oculta o botão de Legendas na sobreposição de controles de vídeo.";
|
||||||
|
|
||||||
|
"HIDE_AUTOPLAY_SWITCH" = "Ocultar interruptor de Reprodução automática";
|
||||||
|
"HIDE_AUTOPLAY_SWITCH_DESC" = "Oculta o interruptor de Reprodução automática na sobreposição de controles de vídeo.";
|
||||||
|
|
||||||
|
"AUTO_FULLSCREEN" = "Tela cheia automática (YTAutoFullScreen)";
|
||||||
|
"AUTO_FULLSCREEN_DESC" = "Reproduz videos em tela cheia automaticamente.";
|
||||||
|
|
||||||
|
"HIDE_HUD_MESSAGES" = "Ocultar Mensagens do HUD";
|
||||||
|
"HIDE_HUD_MESSAGES_DESC" = "Exemplo: Legendas/CC ativadas/desativadas, A repetição do vídeo está ativada,...";
|
||||||
|
|
||||||
|
"OLED_DARKMODE" = "Modo escuro OLED (Experimental)";
|
||||||
|
"OLED_DARKMODE_DESC" = "Pode não funcionar corretamente em alguns casos. A reinicialização do app é necessária após você ativar/desativar essa opção.";
|
||||||
|
|
||||||
|
"OLED_KEYBOARD" = "Teclado OLED (Experimental)";
|
||||||
|
"OLED_KEYBOARD_DESC" = "Pode não funcionar corretamente em alguns casos. A reinicialização do app é necessária.";
|
||||||
|
|
||||||
|
"HIDE_PAID_PROMOTION_CARDS" = "Ocultar Banner de promoção paga";
|
||||||
|
"HIDE_PAID_PROMOTION_CARDS_DESC" = "Oculta o banner 'Contém promoção paga' em alguns vídeos.";
|
||||||
|
|
||||||
|
// YTCastConfirm
|
||||||
|
"CASTING" = "Transmissão";
|
||||||
|
"MSG_ARE_YOU_SURE" = "Tem certeza de que deseja começar a transmitir?";
|
||||||
|
"MSG_YES" = "Sim";
|
||||||
|
"MSG_CANCEL" = "Cancelar";
|
||||||
@@ -0,0 +1,43 @@
|
|||||||
|
/* uYouPlusSettings */
|
||||||
|
|
||||||
|
"HIDE_PREVIOUS_AND_NEXT_BUTTON" = "Скрыть «Пред.» и «След.»";
|
||||||
|
"HIDE_PREVIOUS_AND_NEXT_BUTTON_DESC" = "Убирает кнопки переключения видео «Следующий» и «Предыдущий» с плеера.";
|
||||||
|
|
||||||
|
"YT_MINIPLAYER" = "Мини-плеер для всех видео";
|
||||||
|
"YT_MINIPLAYER_DESC" = "Принудительно активирует мини-плеер для всех видео, включая видео, предназначенное для детей.";
|
||||||
|
|
||||||
|
"CAST_CONFIRM" = "Подтверждение «Трансляции» (YTCastConfirm)";
|
||||||
|
"CAST_CONFIRM_DESC" = "Спрашивать подтверждение перед началом трансляции во избежание случайных подключений к ТВ.";
|
||||||
|
|
||||||
|
"HIDE_HOVER_CARD" = "Скрыть рекомендации (YTNoHoverCards)";
|
||||||
|
"HIDE_HOVER_CARD_DESC" = "Скрывает эскизы, отображаемые по окончанию видеоролика.";
|
||||||
|
|
||||||
|
"NEW_MINIPLAYER_STYLE" = "Мини-плеер в стиле iPad (BigYTMiniPlayer)";
|
||||||
|
"NEW_MINIPLAYER_STYLE_DESC" = "Потребуется перезагрузка.";
|
||||||
|
|
||||||
|
"YT_RE_EXPLORE" = "Вкладка «Навигация» вместо «Shorts»";
|
||||||
|
"YT_RE_EXPLORE_DESC" = "Потребуется перезагрузка.";
|
||||||
|
|
||||||
|
"HIDE_SUBTITLES_BUTTON" = "Скрыть «Субтитры»";
|
||||||
|
"HIDE_SUBTITLES_BUTTON_DESC" = "Скрывает кнопку субтитров с оверлея плеера.";
|
||||||
|
|
||||||
|
"HIDE_AUTOPLAY_SWITCH" = "Скрыть «Автовоспроизведение»";
|
||||||
|
"HIDE_AUTOPLAY_SWITCH_DESC" = "Убирает тумблер «Автовоспроизведение» с оверлея плеера.";
|
||||||
|
|
||||||
|
"AUTO_FULLSCREEN" = "Полноэкранный режим (YTAutoFullScreen)";
|
||||||
|
"AUTO_FULLSCREEN_DESC" = "Автоматически открывает ролики в полноэкранном режиме.";
|
||||||
|
|
||||||
|
"HIDE_HUD_MESSAGES" = "Скрыть сообщения плеера";
|
||||||
|
"HIDE_HUD_MESSAGES_DESC" = "Скрывает надписи YouTube, появляющиеся поверх видео.";
|
||||||
|
|
||||||
|
"OLED_DARKMODE" = "Темный режим для OLED (Бета)";
|
||||||
|
"OLED_DARKMODE_DESC" = "Понадобится перезагрузка при смене цветовой темы приложения. Если OLED-тема не включится, попробуйте переключиться не светлый режим и обратно, а затем перезагрузить приложение.";
|
||||||
|
|
||||||
|
"OLED_KEYBOARD" = "OLED-клавиатура (Бета)";
|
||||||
|
"OLED_KEYBOARD_DESC" = "Возможно, на некоторых устройствах будет работать криво. Потребуется перезагрузка.";
|
||||||
|
|
||||||
|
/* YTCastConfirm */
|
||||||
|
"CASTING" = "Трансляция";
|
||||||
|
"MSG_ARE_YOU_SURE" = "Начать трансляцию экрана?";
|
||||||
|
"MSG_YES" = "Да";
|
||||||
|
"MSG_CANCEL" = "Отмена";
|
||||||
@@ -0,0 +1,67 @@
|
|||||||
|
// How to translate uYouPlus to your language:
|
||||||
|
//
|
||||||
|
// 1. Fork uYouPlus repo
|
||||||
|
// 2. Duplicate the template.lproj folder, and edit the duplicated folder's name to your <lang_code>.lproj id.
|
||||||
|
// For example: <ru.lproj> for Russia. For more details, visit: https://en.wikipedia.org/wiki/List_of_ISO_639-1_codes
|
||||||
|
// 3. Translate each line below after each =
|
||||||
|
// 4. Open a Pull Request
|
||||||
|
//
|
||||||
|
// If your language already exists then feel free to check it and/or improve it!
|
||||||
|
// You can also add your localization to YouPiP here, the process is the same
|
||||||
|
// https://github.com/PoomSmart/YouPiP/tree/main/layout/Library/Application%20Support/YouPiP.bundle
|
||||||
|
//
|
||||||
|
// Settings
|
||||||
|
|
||||||
|
"REPLACE_PREVIOUS_NEXT_BUTTON" = "Replace Previous and Next Button";
|
||||||
|
"REPLACE_PREVIOUS_NEXT_BUTTON_DESC" = "Replace Previous and Next Button with Fast forward and Rewind button. App restart is required.";
|
||||||
|
|
||||||
|
"FIX_GOOGLE_SIGNIN" = "Fix Google Sign in (for TrollStore user only)";
|
||||||
|
"FIX_GOOGLE_SIGNIN_DESC" = "Turn on this option only when you can't sign in with your Google account and the app was installed via TrollStore. If you can log in normally, keep it disabled. App restart is required.";
|
||||||
|
|
||||||
|
"KILL_APP" = "Close YouTube";
|
||||||
|
"KILL_APP_DESC" = "Tap here to close YouTube!";
|
||||||
|
|
||||||
|
"HIDE_PREVIOUS_AND_NEXT_BUTTON" = "Hide Previous and Next button";
|
||||||
|
"HIDE_PREVIOUS_AND_NEXT_BUTTON_DESC" = "Hide Previous and Next button in video controls overlay.";
|
||||||
|
|
||||||
|
"YT_MINIPLAYER" = "Enable the Miniplayer for all YouTube videos";
|
||||||
|
"YT_MINIPLAYER_DESC" = "Kid videos for example.";
|
||||||
|
|
||||||
|
"CAST_CONFIRM" = "Confirm alert before casting (YTCastConfirm)";
|
||||||
|
"CAST_CONFIRM_DESC" = "Show a confirm alert before casting to prevent accidentally hijacking TV.";
|
||||||
|
|
||||||
|
"HIDE_HOVER_CARD" = "Hide End screens hover cards (YTNoHoverCards)";
|
||||||
|
"HIDE_HOVER_CARD_DESC" = "Hide creator End screens (thumbnails) at the end of videos.";
|
||||||
|
|
||||||
|
"NEW_MINIPLAYER_STYLE" = "New miniplayer bar style (BigYTMiniPlayer)";
|
||||||
|
"NEW_MINIPLAYER_STYLE_DESC" = "App restart is required.";
|
||||||
|
|
||||||
|
"YT_RE_EXPLORE" = "Replace Shorts tab with Explore tab (YTReExplore)";
|
||||||
|
"YT_RE_EXPLORE_DESC" = "App restart is required.";
|
||||||
|
|
||||||
|
"HIDE_SUBTITLES_BUTTON" = "Hide Subtitles button";
|
||||||
|
"HIDE_SUBTITLES_BUTTON_DESC" = "Hide the Subtitles button in video controls overlay.";
|
||||||
|
|
||||||
|
"HIDE_AUTOPLAY_SWITCH" = "Hide Autoplay switch";
|
||||||
|
"HIDE_AUTOPLAY_SWITCH_DESC" = "Hide the Autoplay switch in video controls overlay.";
|
||||||
|
|
||||||
|
"AUTO_FULLSCREEN" = "Auto Full Screen (YTAutoFullScreen)";
|
||||||
|
"AUTO_FULLSCREEN_DESC" = "Autoplay videos at full screen.";
|
||||||
|
|
||||||
|
"HIDE_HUD_MESSAGES" = "Hide HUD Messages";
|
||||||
|
"HIDE_HUD_MESSAGES_DESC" = "Example: CC is turned on/off, Video loop is on,...";
|
||||||
|
|
||||||
|
"OLED_DARKMODE" = "OLED Dark mode (Experimental)";
|
||||||
|
"OLED_DARKMODE_DESC" = "Might not working correctly in some cases. App restart is required after you enable/disable this option.";
|
||||||
|
|
||||||
|
"OLED_KEYBOARD" = "OLED Keyboard (Experimental)";
|
||||||
|
"OLED_KEYBOARD_DESC" = "Might not working correctly in some cases. App restart is required.";
|
||||||
|
|
||||||
|
"HIDE_PAID_PROMOTION_CARDS" = "Hide Paid Promotion banner";
|
||||||
|
"HIDE_PAID_PROMOTION_CARDS_DESC" = "Hide the 'Includes Paid Promotions' banner in some videos.";
|
||||||
|
|
||||||
|
// YTCastConfirm
|
||||||
|
"CASTING" = "Castings";
|
||||||
|
"MSG_ARE_YOU_SURE" = "Are you sure you want to start casting?";
|
||||||
|
"MSG_YES" = "Yes";
|
||||||
|
"MSG_CANCEL" = "Cancel";
|
||||||
@@ -0,0 +1,55 @@
|
|||||||
|
// Settings
|
||||||
|
|
||||||
|
"REPLACE_PREVIOUS_NEXT_BUTTON" = "Thay thế nút chuyển video";
|
||||||
|
"REPLACE_PREVIOUS_NEXT_BUTTON_DESC" = "Thay thế nút chuyển video bằng nút tua nhanh. Cần khởi động lại ứng dụng.";
|
||||||
|
|
||||||
|
"FIX_GOOGLE_SIGNIN" = "Sửa lỗi không thể đăng nhập tài khoản Google";
|
||||||
|
"FIX_GOOGLE_SIGNIN_DESC" = "Chỉ bật tính năng này khi bạn không thể đăng nhập tài khoản Google và ứng dụng được cài qua TrollStore. Nếu bạn có thể đăng nhập bình thường thì hãy tắt tính năng này. Cần khởi động lại ứng dụng.";
|
||||||
|
|
||||||
|
"KILL_APP" = "Đóng ứng dụng";
|
||||||
|
"KILL_APP_DESC" = "Chạm để đóng YouTube!";
|
||||||
|
|
||||||
|
"HIDE_PREVIOUS_AND_NEXT_BUTTON" = "Ẩn nút Next và nút Previous";
|
||||||
|
"HIDE_PREVIOUS_AND_NEXT_BUTTON_DESC" = "Ẩn nút Next và nút Previous trong trình phát video.";
|
||||||
|
|
||||||
|
"YT_MINIPLAYER" = "Cho phép sử dụng trình phát thu nhỏ với mọi video";
|
||||||
|
"YT_MINIPLAYER_DESC" = "Ví dụ: Video cho trẻ em.";
|
||||||
|
|
||||||
|
"CAST_CONFIRM" = "Xác nhận trước khi cast video (YTCastConfirm)";
|
||||||
|
"CAST_CONFIRM_DESC" = "Hiện hộp thoại xác nhận trước khi cast video sang TV để tránh vô tình chiếm quyền điều khiển TV.";
|
||||||
|
|
||||||
|
"HIDE_HOVER_CARD" = "Ẩn video dạng thumbnails (YTNoHoverCards)";
|
||||||
|
"HIDE_HOVER_CARD_DESC" = "Ẩn thumbnail của các video đề xuất xuất hiện ở cuối video.";
|
||||||
|
|
||||||
|
"NEW_MINIPLAYER_STYLE" = "Giao diện trình phát thu nhỏ kiểu mới (BigYTMiniPlayer)";
|
||||||
|
"NEW_MINIPLAYER_STYLE_DESC" = "Cần khởi động lại ứng dụng.";
|
||||||
|
|
||||||
|
"YT_RE_EXPLORE" = "Thay thế tab Shorts bằng tab Khám phá (YTReExplore)";
|
||||||
|
"YT_RE_EXPLORE_DESC" = "Cần khởi động lại ứng dụng.";
|
||||||
|
|
||||||
|
"HIDE_SUBTITLES_BUTTON" = "Ẩn nút bật Phụ đề";
|
||||||
|
"HIDE_SUBTITLES_BUTTON_DESC" = "Ẩn nút bật phụ đề trong trình phát video.";
|
||||||
|
|
||||||
|
"HIDE_AUTOPLAY_SWITCH" = "Ẩn nút Tự động phát";
|
||||||
|
"HIDE_AUTOPLAY_SWITCH_DESC" = "Ẩn nút Tự động phát trong trình phát video.";
|
||||||
|
|
||||||
|
"AUTO_FULLSCREEN" = "Tự động toàn màn hình (YTAutoFullScreen)";
|
||||||
|
"AUTO_FULLSCREEN_DESC" = "Tự động phát video ở chế độ toàn màn hình.";
|
||||||
|
|
||||||
|
"HIDE_HUD_MESSAGES" = "Ẩn thông báo HUD";
|
||||||
|
"HIDE_HUD_MESSAGES_DESC" = "Ví dụ: Đã bật/tắt phụ đề, Tính năng phát video lặp lại đang bật,...";
|
||||||
|
|
||||||
|
"OLED_DARKMODE" = "Chế độ tối cho màn OLED (Thử nghiệm)";
|
||||||
|
"OLED_DARKMODE_DESC" = "Có thể không hoạt động tốt trong một số trường hợp. Cần khởi động lại ứng dụng nếu bạn bật/tắt tính năng này, nhưng không cần khởi động lại ứng dụng nếu chuyển giữa chế độ Sáng và chế độ Tối.";
|
||||||
|
|
||||||
|
"OLED_KEYBOARD" = "Bàn phím tối cho màn OLED (Thử nghiệm)";
|
||||||
|
"OLED_KEYBOARD_DESC" = "Có thể không hoạt động tốt trong một vài trường hợp. Cần khởi động lại ứng dụng.";
|
||||||
|
|
||||||
|
"HIDE_PAID_PROMOTION_CARDS" = "Ẩn banner quảng cáo được trả tiền";
|
||||||
|
"HIDE_PAID_PROMOTION_CARDS_DESC" = "Ẩn banner 'Chứa nội dung được trả tiền để quảng cáo' trong một số video.";
|
||||||
|
|
||||||
|
// YTCastConfirm
|
||||||
|
"CASTING" = "Truyền video";
|
||||||
|
"MSG_ARE_YOU_SURE" = "Bạn có muốn bắt đầu truyền video không?";
|
||||||
|
"MSG_YES" = "Có";
|
||||||
|
"MSG_CANCEL" = "Không";
|
||||||
@@ -0,0 +1,55 @@
|
|||||||
|
// Settings
|
||||||
|
|
||||||
|
"REPLACE_PREVIOUS_NEXT_BUTTON" = "替换上一个/下一个按钮";
|
||||||
|
"REPLACE_PREVIOUS_NEXT_BUTTON_DESC" = "将播放器控制界面上的上一个/下一个按钮替换成快进/快退按钮。更改本设置后需要重启App。";
|
||||||
|
|
||||||
|
"FIX_GOOGLE_SIGNIN" = "修复Google账号登录问题(仅针对TrollStore用户)";
|
||||||
|
"FIX_GOOGLE_SIGNIN_DESC" = "仅在使用TrollStore安装本App的情况下生效:启用本选项后可正常登录您的Google账号。更改本设置后需要重启App。";
|
||||||
|
|
||||||
|
"KILL_APP" = "关闭YouTube";
|
||||||
|
"KILL_APP_DESC" = "点击此处关闭YouTube!";
|
||||||
|
|
||||||
|
"HIDE_PREVIOUS_AND_NEXT_BUTTON" = "隐藏上一个/下一个按钮";
|
||||||
|
"HIDE_PREVIOUS_AND_NEXT_BUTTON_DESC" = "隐藏视频播放器控制界面上的上一个/下一个按钮。";
|
||||||
|
|
||||||
|
"YT_MINIPLAYER" = "为所有YouTube视频启用迷你播放器";
|
||||||
|
"YT_MINIPLAYER_DESC" = "例如:面向儿童的视频。";
|
||||||
|
|
||||||
|
"CAST_CONFIRM" = "投屏前确认 (YTCastConfirm)";
|
||||||
|
"CAST_CONFIRM_DESC" = "在投屏前显示确认对话框以防意外劫屏。";
|
||||||
|
|
||||||
|
"HIDE_HOVER_CARD" = "隐藏片尾画面悬浮卡片 (YTNoHoverCards)";
|
||||||
|
"HIDE_HOVER_CARD_DESC" = "隐藏视频结尾处的创作者片尾画面元素(缩略图)。";
|
||||||
|
|
||||||
|
"NEW_MINIPLAYER_STYLE" = "新迷你播放器风格 (BigYTMiniPlayer)";
|
||||||
|
"NEW_MINIPLAYER_STYLE_DESC" = "更改本设置后需要重启App。";
|
||||||
|
|
||||||
|
"YT_RE_EXPLORE" = "将Shorts选项卡替换成探索选项卡 (YTReExplore)";
|
||||||
|
"YT_RE_EXPLORE_DESC" = "更改本设置后需要重启App。";
|
||||||
|
|
||||||
|
"HIDE_SUBTITLES_BUTTON" = "隐藏字幕按钮";
|
||||||
|
"HIDE_SUBTITLES_BUTTON_DESC" = "隐藏视频播放器控制界面上的字幕按钮。";
|
||||||
|
|
||||||
|
"HIDE_AUTOPLAY_SWITCH" = "隐藏自动播放模式开关";
|
||||||
|
"HIDE_AUTOPLAY_SWITCH_DESC" = "隐藏视频播放器控制界面上的自动播放开关。";
|
||||||
|
|
||||||
|
"AUTO_FULLSCREEN" = "自动全屏 (YTAutoFullScreen)";
|
||||||
|
"AUTO_FULLSCREEN_DESC" = "自动全屏播放视频。";
|
||||||
|
|
||||||
|
"HIDE_HUD_MESSAGES" = "隐藏系统提醒";
|
||||||
|
"HIDE_HUD_MESSAGES_DESC" = "例如:“已启用/停用字幕”、“已开启/关闭视频循环播放”等。";
|
||||||
|
|
||||||
|
"OLED_DARKMODE" = "OLED 深色模式(实验性功能)";
|
||||||
|
"OLED_DARKMODE_DESC" = "在某些情况下可能不会正常工作。更改本设置后需要重启App。";
|
||||||
|
|
||||||
|
"OLED_KEYBOARD" = "OLED 键盘(实验性功能)";
|
||||||
|
"OLED_KEYBOARD_DESC" = "在某些情况下可能不会正常工作。更改本设置后需要重启App。";
|
||||||
|
|
||||||
|
"HIDE_PAID_PROMOTION_CARDS" = "隐藏付费宣传内容提醒横幅";
|
||||||
|
"HIDE_PAID_PROMOTION_CARDS_DESC" = "隐藏出现在部分视频中的“包含付费宣传内容”横幅。";
|
||||||
|
|
||||||
|
// YTCastConfirm
|
||||||
|
"CASTING" = "准备投屏";
|
||||||
|
"MSG_ARE_YOU_SURE" = "您确定要开始投屏吗?";
|
||||||
|
"MSG_YES" = "确定";
|
||||||
|
"MSG_CANCEL" = "取消";
|
||||||
@@ -0,0 +1,49 @@
|
|||||||
|
// Settings
|
||||||
|
|
||||||
|
"KILL_APP" = "關閉YouTube";
|
||||||
|
"KILL_APP_DESC" = "按這裡關閉YouTube!";
|
||||||
|
|
||||||
|
"HIDE_PREVIOUS_AND_NEXT_BUTTON" = "隱藏上一個和下一個按鈕";
|
||||||
|
"HIDE_PREVIOUS_AND_NEXT_BUTTON_DESC" = "在影片控制層中隱藏上一個和下一個按鈕";
|
||||||
|
|
||||||
|
"YT_MINIPLAYER" = "為所有YouTube影片啟用迷你播放器";
|
||||||
|
"YT_MINIPLAYER_DESC" = "例如兒童影片";
|
||||||
|
|
||||||
|
"CAST_CONFIRM" = "投放前確認 (YTCastConfirm)";
|
||||||
|
"CAST_CONFIRM_DESC" = "在投放前顯示確認訊息,以防止意外攔劫電視。";
|
||||||
|
|
||||||
|
"HIDE_HOVER_CARD" = "隱藏片尾畫面懸浮卡片 (YTNoHoverCards)";
|
||||||
|
"HIDE_HOVER_CARD_DESC" = "在影片結尾隱藏創作者結束畫面(縮略圖)。";
|
||||||
|
|
||||||
|
"NEW_MINIPLAYER_STYLE" = "新的迷你播放器控制列風格 (BigYTMiniPlayer)";
|
||||||
|
"NEW_MINIPLAYER_STYLE_DESC" = "需要重新啟動應用程式。";
|
||||||
|
|
||||||
|
"YT_RE_EXPLORE" = "用探索選項卡替換Shorts選項卡 (YTReExplore)";
|
||||||
|
"YT_RE_EXPLORE_DESC" = "需要重新啟動應用程式。";
|
||||||
|
|
||||||
|
"HIDE_SUBTITLES_BUTTON" = "隱藏字幕按鈕";
|
||||||
|
"HIDE_SUBTITLES_BUTTON_DESC" = "隱藏影片控制層中的字幕按鈕。";
|
||||||
|
|
||||||
|
"HIDE_AUTOPLAY_SWITCH" = "隱藏自動播放開關";
|
||||||
|
"HIDE_AUTOPLAY_SWITCH_DESC" = "在影片控制層中隱藏自動播放開關。";
|
||||||
|
|
||||||
|
"AUTO_FULLSCREEN" = "自動全螢幕 (YTAutoFullScreen)";
|
||||||
|
"AUTO_FULLSCREEN_DESC" = "自動全螢幕播放影片。";
|
||||||
|
|
||||||
|
"HIDE_HUD_MESSAGES" = "隱藏 HUD 訊息";
|
||||||
|
"HIDE_HUD_MESSAGES_DESC" = "舉例來說:CC字幕 開啟/關閉,影片循環開啟,...";
|
||||||
|
|
||||||
|
"OLED_DARKMODE" = "OLED 深色模式(實驗性)";
|
||||||
|
"OLED_DARKMODE_DESC" = "在某些情況下可能無法正常工作。啟用/禁用此選項後,需要重新啟動應用程式。";
|
||||||
|
|
||||||
|
"OLED_KEYBOARD" = "OLED 鍵盤(實驗性)";
|
||||||
|
"OLED_KEYBOARD_DESC" = "在某些情況下可能無法正常工作。需要重新啟動應用程式。";
|
||||||
|
|
||||||
|
"HIDE_PAID_PROMOTION_CARDS" = "隱藏付費促銷橫幅";
|
||||||
|
"HIDE_PAID_PROMOTION_CARDS_DESC" = "在某些影片中隱藏“包括付費促銷”橫幅。";
|
||||||
|
|
||||||
|
// YTCastConfirm
|
||||||
|
"CASTING" = "投放中";
|
||||||
|
"MSG_ARE_YOU_SURE" = "確定要開始投放嗎?";
|
||||||
|
"MSG_YES" = "確定";
|
||||||
|
"MSG_CANCEL" = "取消";
|
||||||
+520
-166
@@ -1,6 +1,7 @@
|
|||||||
#import <UIKit/UIKit.h>
|
#import <UIKit/UIKit.h>
|
||||||
#import <Foundation/Foundation.h>
|
#import <Foundation/Foundation.h>
|
||||||
#import <objc/runtime.h>
|
#import <objc/runtime.h>
|
||||||
|
#import <dlfcn.h>
|
||||||
#import "Header.h"
|
#import "Header.h"
|
||||||
#import "Tweaks/YouTubeHeader/YTVideoQualitySwitchOriginalController.h"
|
#import "Tweaks/YouTubeHeader/YTVideoQualitySwitchOriginalController.h"
|
||||||
#import "Tweaks/YouTubeHeader/YTPlayerViewController.h"
|
#import "Tweaks/YouTubeHeader/YTPlayerViewController.h"
|
||||||
@@ -11,7 +12,44 @@
|
|||||||
#import "Tweaks/YouTubeHeader/YTIPivotBarRenderer.h"
|
#import "Tweaks/YouTubeHeader/YTIPivotBarRenderer.h"
|
||||||
#import "Tweaks/YouTubeHeader/YTIBrowseRequest.h"
|
#import "Tweaks/YouTubeHeader/YTIBrowseRequest.h"
|
||||||
#import "Tweaks/YouTubeHeader/YTCommonColorPalette.h"
|
#import "Tweaks/YouTubeHeader/YTCommonColorPalette.h"
|
||||||
|
#import "Tweaks/YouTubeHeader/ASCollectionView.h"
|
||||||
|
#import "Tweaks/YouTubeHeader/YTPlayerOverlay.h"
|
||||||
|
#import "Tweaks/YouTubeHeader/YTPlayerOverlayProvider.h"
|
||||||
|
#import "Tweaks/YouTubeHeader/YTReelWatchPlaybackOverlayView.h"
|
||||||
|
#import "Tweaks/YouTubeHeader/YTReelPlayerBottomButton.h"
|
||||||
|
|
||||||
|
// Tweak's bundle for Localizations support - @PoomSmart - https://github.com/PoomSmart/YouPiP/commit/aea2473f64c75d73cab713e1e2d5d0a77675024f
|
||||||
|
NSBundle *uYouPlusBundle() {
|
||||||
|
static NSBundle *bundle = nil;
|
||||||
|
static dispatch_once_t onceToken;
|
||||||
|
dispatch_once(&onceToken, ^{
|
||||||
|
NSString *tweakBundlePath = [[NSBundle mainBundle] pathForResource:@"uYouPlus" ofType:@"bundle"];
|
||||||
|
bundle = [NSBundle bundleWithPath:tweakBundlePath];
|
||||||
|
});
|
||||||
|
return bundle;
|
||||||
|
}
|
||||||
|
NSBundle *tweakBundle = uYouPlusBundle();
|
||||||
|
|
||||||
|
// Keychain patching
|
||||||
|
static NSString *accessGroupID() {
|
||||||
|
NSDictionary *query = [NSDictionary dictionaryWithObjectsAndKeys:
|
||||||
|
(__bridge NSString *)kSecClassGenericPassword, (__bridge NSString *)kSecClass,
|
||||||
|
@"bundleSeedID", kSecAttrAccount,
|
||||||
|
@"", kSecAttrService,
|
||||||
|
(id)kCFBooleanTrue, kSecReturnAttributes,
|
||||||
|
nil];
|
||||||
|
CFDictionaryRef result = nil;
|
||||||
|
OSStatus status = SecItemCopyMatching((__bridge CFDictionaryRef)query, (CFTypeRef *)&result);
|
||||||
|
if (status == errSecItemNotFound)
|
||||||
|
status = SecItemAdd((__bridge CFDictionaryRef)query, (CFTypeRef *)&result);
|
||||||
|
if (status != errSecSuccess)
|
||||||
|
return nil;
|
||||||
|
NSString *accessGroup = [(__bridge NSDictionary *)result objectForKey:(__bridge NSString *)kSecAttrAccessGroup];
|
||||||
|
|
||||||
|
return accessGroup;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
BOOL hideHUD() {
|
BOOL hideHUD() {
|
||||||
return [[NSUserDefaults standardUserDefaults] boolForKey:@"hideHUD_enabled"];
|
return [[NSUserDefaults standardUserDefaults] boolForKey:@"hideHUD_enabled"];
|
||||||
}
|
}
|
||||||
@@ -25,12 +63,12 @@ BOOL isDarkMode() {
|
|||||||
return ([[NSUserDefaults standardUserDefaults] integerForKey:@"page_style"] == 1);
|
return ([[NSUserDefaults standardUserDefaults] integerForKey:@"page_style"] == 1);
|
||||||
}
|
}
|
||||||
BOOL autoFullScreen() {
|
BOOL autoFullScreen() {
|
||||||
return [[NSUserDefaults standardUserDefaults] boolForKey:@"autofull_enabled"];
|
return [[NSUserDefaults standardUserDefaults] boolForKey:@"autoFull_enabled"];
|
||||||
}
|
}
|
||||||
BOOL noHoverCard() {
|
BOOL hideHoverCard() {
|
||||||
return [[NSUserDefaults standardUserDefaults] boolForKey:@"hover_cards_enabled"];
|
return [[NSUserDefaults standardUserDefaults] boolForKey:@"hideHoverCards_enabled"];
|
||||||
}
|
}
|
||||||
BOOL ReExplore() {
|
BOOL reExplore() {
|
||||||
return [[NSUserDefaults standardUserDefaults] boolForKey:@"reExplore_enabled"];
|
return [[NSUserDefaults standardUserDefaults] boolForKey:@"reExplore_enabled"];
|
||||||
}
|
}
|
||||||
BOOL bigYTMiniPlayer() {
|
BOOL bigYTMiniPlayer() {
|
||||||
@@ -51,8 +89,28 @@ BOOL castConfirm() {
|
|||||||
BOOL ytMiniPlayer() {
|
BOOL ytMiniPlayer() {
|
||||||
return [[NSUserDefaults standardUserDefaults] boolForKey:@"ytMiniPlayer_enabled"];
|
return [[NSUserDefaults standardUserDefaults] boolForKey:@"ytMiniPlayer_enabled"];
|
||||||
}
|
}
|
||||||
|
BOOL hidePaidPromotionCard() {
|
||||||
|
return [[NSUserDefaults standardUserDefaults] boolForKey:@"hidePaidPromotionCard_enabled"];
|
||||||
|
}
|
||||||
|
BOOL fixGoogleSignIn() {
|
||||||
|
return [[NSUserDefaults standardUserDefaults] boolForKey:@"fixGoogleSignIn_enabled"];
|
||||||
|
}
|
||||||
|
BOOL replacePreviousAndNextButton() {
|
||||||
|
return [[NSUserDefaults standardUserDefaults] boolForKey:@"replacePreviousAndNextButton_enabled"];
|
||||||
|
}
|
||||||
|
|
||||||
|
# pragma mark - Tweaks
|
||||||
|
// Enable Reorder videos from playlist while on the Watch page - @PoomSmart
|
||||||
|
%hook YTIPlaylistPanelVideoRenderer
|
||||||
|
%new
|
||||||
|
- (BOOL)canReorder { return YES; }
|
||||||
|
%end
|
||||||
|
|
||||||
|
// Skips content warning before playing *some videos - @PoomSmart
|
||||||
|
%hook YTPlayabilityResolutionUserActionUIController
|
||||||
|
- (void)showConfirmAlert { [self confirmAlertDidPressConfirm]; }
|
||||||
|
%end
|
||||||
|
|
||||||
// Tweaks
|
|
||||||
// YTMiniPlayerEnabler: https://github.com/level3tjg/YTMiniplayerEnabler/
|
// YTMiniPlayerEnabler: https://github.com/level3tjg/YTMiniplayerEnabler/
|
||||||
%hook YTWatchMiniBarViewController
|
%hook YTWatchMiniBarViewController
|
||||||
- (void)updateMiniBarPlayerStateFromRenderer {
|
- (void)updateMiniBarPlayerStateFromRenderer {
|
||||||
@@ -63,22 +121,30 @@ BOOL ytMiniPlayer() {
|
|||||||
|
|
||||||
// Hide CC / Autoplay switch
|
// Hide CC / Autoplay switch
|
||||||
%hook YTMainAppControlsOverlayView
|
%hook YTMainAppControlsOverlayView
|
||||||
- (void)setClosedCaptionsOrSubtitlesButtonAvailable:(BOOL)arg1 { // hide CC?!
|
- (void)setClosedCaptionsOrSubtitlesButtonAvailable:(BOOL)arg1 { // hide CC button
|
||||||
if (hideCC()) { return %orig(NO); }
|
if (hideCC()) { return %orig(NO); }
|
||||||
else { return %orig; }
|
else { return %orig; }
|
||||||
}
|
}
|
||||||
- (void)setAutoplaySwitchButtonRenderer:(id)arg1 {
|
- (void)setAutoplaySwitchButtonRenderer:(id)arg1 { // hide Autoplay
|
||||||
if (hideAutoplaySwitch()) {}
|
if (hideAutoplaySwitch()) {}
|
||||||
else { return %orig; }
|
else { return %orig; }
|
||||||
}
|
}
|
||||||
- (void)layoutSubviews {
|
%end
|
||||||
if (hidePreviousAndNextButton()) {
|
|
||||||
MSHookIvar<YTMainAppControlsOverlayView *>(self, "_nextButton").hidden = YES;
|
// Hide Next & Previous button
|
||||||
MSHookIvar<YTMainAppControlsOverlayView *>(self, "_previousButton").hidden = YES;
|
%group gHidePreviousAndNextButton
|
||||||
%orig;
|
%hook YTColdConfig
|
||||||
}
|
- (BOOL)removeNextPaddleForSingletonVideos { return YES; }
|
||||||
return %orig;
|
- (BOOL)removePreviousPaddleForSingletonVideos { return YES; }
|
||||||
}
|
%end
|
||||||
|
%end
|
||||||
|
|
||||||
|
// Replace Next & Previous button with Fast forward & Rewind button
|
||||||
|
%group gReplacePreviousAndNextButton
|
||||||
|
%hook YTColdConfig
|
||||||
|
- (BOOL)replaceNextPaddleWithFastForwardButtonForSingletonVods { return YES; }
|
||||||
|
- (BOOL)replacePreviousPaddleWithRewindButtonForSingletonVods { return YES; }
|
||||||
|
%end
|
||||||
%end
|
%end
|
||||||
|
|
||||||
// Hide HUD Messages
|
// Hide HUD Messages
|
||||||
@@ -105,51 +171,79 @@ BOOL ytMiniPlayer() {
|
|||||||
// YTNoHoverCards: https://github.com/level3tjg/YTNoHoverCards
|
// YTNoHoverCards: https://github.com/level3tjg/YTNoHoverCards
|
||||||
%hook YTCreatorEndscreenView
|
%hook YTCreatorEndscreenView
|
||||||
- (void)setHidden:(BOOL)hidden {
|
- (void)setHidden:(BOOL)hidden {
|
||||||
if (noHoverCard())
|
if (hideHoverCard())
|
||||||
hidden = YES;
|
hidden = YES;
|
||||||
%orig;
|
%orig;
|
||||||
}
|
}
|
||||||
%end
|
%end
|
||||||
|
|
||||||
//YTCastConfirm: https://github.com/JamieBerghmans/YTCastConfirm
|
//YTCastConfirm: https://github.com/JamieBerghmans/YTCastConfirm
|
||||||
%group gYTCastconfirm
|
|
||||||
%hook MDXPlaybackRouteButtonController
|
%hook MDXPlaybackRouteButtonController
|
||||||
- (void)didPressButton:(id)arg1 {
|
- (void)didPressButton:(id)arg1 {
|
||||||
UIAlertController* alertController = [%c(UIAlertController) alertControllerWithTitle:@"Casting"
|
if (castConfirm()) {
|
||||||
message:@"Are you sure you want to start casting?"
|
UIAlertController* alertController = [%c(UIAlertController) alertControllerWithTitle:LOC(@"CASTING")
|
||||||
preferredStyle:UIAlertControllerStyleAlert];
|
message:LOC(@"MSG_ARE_YOU_SURE")
|
||||||
UIAlertAction* defaultAction = [%c(UIAlertAction) actionWithTitle:@"Yes" style:UIAlertActionStyleDefault handler:^(UIAlertAction * action) {
|
preferredStyle:UIAlertControllerStyleAlert];
|
||||||
%orig;
|
UIAlertAction* defaultAction = [%c(UIAlertAction) actionWithTitle:LOC(@"MSG_YES") style:UIAlertActionStyleDefault handler:^(UIAlertAction * action) {
|
||||||
}];
|
%orig;
|
||||||
|
}];
|
||||||
|
|
||||||
UIAlertAction* noButton = [%c(UIAlertAction)
|
UIAlertAction* noButton = [%c(UIAlertAction)
|
||||||
actionWithTitle:@"Cancel"
|
actionWithTitle:LOC(@"MSG_CANCEL")
|
||||||
style:UIAlertActionStyleDefault
|
style:UIAlertActionStyleDefault
|
||||||
handler: ^(UIAlertAction * action) { return; }
|
handler: ^(UIAlertAction * action) {
|
||||||
];
|
return;
|
||||||
|
}];
|
||||||
|
|
||||||
[alertController addAction:defaultAction];
|
[alertController addAction:defaultAction];
|
||||||
[alertController addAction:noButton];
|
[alertController addAction:noButton];
|
||||||
|
|
||||||
id rootViewController = [%c(UIApplication) sharedApplication].delegate.window.rootViewController;
|
id rootViewController = [%c(UIApplication) sharedApplication].delegate.window.rootViewController;
|
||||||
if ([rootViewController isKindOfClass:[%c(UINavigationController) class]]) {
|
if ([rootViewController isKindOfClass:[%c(UINavigationController) class]]) {
|
||||||
rootViewController = ((UINavigationController *)rootViewController).viewControllers.firstObject;
|
rootViewController = ((UINavigationController *)rootViewController).viewControllers.firstObject;
|
||||||
}
|
}
|
||||||
if ([rootViewController isKindOfClass:[%c(UITabBarController) class]]) {
|
if ([rootViewController isKindOfClass:[%c(UITabBarController) class]]) {
|
||||||
rootViewController = ((UITabBarController *)rootViewController).selectedViewController;
|
rootViewController = ((UITabBarController *)rootViewController).selectedViewController;
|
||||||
}
|
}
|
||||||
if ([rootViewController presentedViewController] != nil) {
|
if ([rootViewController presentedViewController] != nil) {
|
||||||
rootViewController = [rootViewController presentedViewController];
|
rootViewController = [rootViewController presentedViewController];
|
||||||
}
|
}
|
||||||
[rootViewController presentViewController:alertController animated:YES completion:nil];
|
[rootViewController presentViewController:alertController animated:YES completion:nil];
|
||||||
return %orig;
|
} else { return %orig; }
|
||||||
}
|
}
|
||||||
%end
|
%end
|
||||||
|
|
||||||
|
// Workaround for MiRO92/uYou-for-YouTube#12, qnblackcat/uYouPlus#263
|
||||||
|
%hook YTDataUtils
|
||||||
|
+ (NSMutableDictionary *)spamSignalsDictionary {
|
||||||
|
return nil;
|
||||||
|
}
|
||||||
%end
|
%end
|
||||||
|
|
||||||
// Workaround for https://github.com/MiRO92/uYou-for-YouTube/issues/12
|
// Workaround for https://github.com/MiRO92/uYou-for-YouTube/issues/94
|
||||||
%hook YTAdsInnerTubeContextDecorator
|
%hook UIResponder
|
||||||
- (void)decorateContext:(id)arg1 { %orig(nil); }
|
%new
|
||||||
|
- (id)entry {
|
||||||
|
return nil;
|
||||||
|
}
|
||||||
|
%end
|
||||||
|
|
||||||
|
// Workaround for https://github.com/MiRO92/uYou-for-YouTube/issues/140
|
||||||
|
%hook YTLocalPlaybackController
|
||||||
|
%new
|
||||||
|
- (id)activeVideoController {
|
||||||
|
return [self activeVideo];
|
||||||
|
}
|
||||||
|
%end
|
||||||
|
|
||||||
|
// Workaround for qnblackcat/uYouPlus#10
|
||||||
|
%hook boolSettingsVC
|
||||||
|
- (instancetype)initWithTitle:(NSString *)title sections:(NSArray *)sections footer:(NSString *)footer {
|
||||||
|
if (@available(iOS 15, *))
|
||||||
|
if (![self valueForKey:@"_lastNotifiedTraitCollection"])
|
||||||
|
[self setValue:[UITraitCollection currentTraitCollection] forKey:@"_lastNotifiedTraitCollection"];
|
||||||
|
return %orig;
|
||||||
|
}
|
||||||
%end
|
%end
|
||||||
|
|
||||||
// YTClassicVideoQuality: https://github.com/PoomSmart/YTClassicVideoQuality
|
// YTClassicVideoQuality: https://github.com/PoomSmart/YTClassicVideoQuality
|
||||||
@@ -165,12 +259,10 @@ BOOL ytMiniPlayer() {
|
|||||||
- (BOOL)isPromptForLocalNetworkPermissionsEnabled { return NO; }
|
- (BOOL)isPromptForLocalNetworkPermissionsEnabled { return NO; }
|
||||||
%end
|
%end
|
||||||
|
|
||||||
// YTSystemAppearance: https://poomsmart.github.io/repo/depictions/ytsystemappearance.html
|
|
||||||
// YouRememberCaption: https://poomsmart.github.io/repo/depictions/youremembercaption.html
|
// YouRememberCaption: https://poomsmart.github.io/repo/depictions/youremembercaption.html
|
||||||
%hook YTColdConfig
|
%hook YTColdConfig
|
||||||
- (BOOL)shouldUseAppThemeSetting { return YES; }
|
|
||||||
- (BOOL)respectDeviceCaptionSetting { return NO; }
|
- (BOOL)respectDeviceCaptionSetting { return NO; }
|
||||||
- (BOOL)isEnhancedSearchBarEnabled { return YES; }
|
- (BOOL)isLandscapeEngagementPanelSwipeRightToDismissEnabled { return YES; }
|
||||||
%end
|
%end
|
||||||
|
|
||||||
// NOYTPremium - https://github.com/PoomSmart/NoYTPremium/
|
// NOYTPremium - https://github.com/PoomSmart/NoYTPremium/
|
||||||
@@ -200,46 +292,301 @@ BOOL ytMiniPlayer() {
|
|||||||
- (void)showSurveyWithRenderer:(id)arg1 surveyParentResponder:(id)arg2 {}
|
- (void)showSurveyWithRenderer:(id)arg1 surveyParentResponder:(id)arg2 {}
|
||||||
%end
|
%end
|
||||||
|
|
||||||
// Hide the download playlist button of uYou cuz it's broken
|
// Enable Shorts scroll bar - @PoomSmart
|
||||||
%hook YTPlaylistHeaderViewController
|
%hook YTReelPlayerViewController
|
||||||
- (void)viewDidLoad {
|
- (BOOL)shouldAlwaysEnablePlayerBar { return YES; }
|
||||||
%orig;
|
%end
|
||||||
self.downloadsButton.hidden = YES;
|
|
||||||
|
%hook YTInlinePlayerBarContainerView
|
||||||
|
- (void)setUserInteractionEnabled:(BOOL)enabled { %orig(YES); }
|
||||||
|
%end
|
||||||
|
|
||||||
|
// Workaround for issue #54
|
||||||
|
%hook YTMainAppVideoPlayerOverlayViewController
|
||||||
|
- (void)updateRelatedVideos {
|
||||||
|
if ([[NSUserDefaults standardUserDefaults] boolForKey:@"relatedVideosAtTheEndOfYTVideos"] == NO) {}
|
||||||
|
else { return %orig; }
|
||||||
}
|
}
|
||||||
%end
|
%end
|
||||||
|
|
||||||
// OLED dark mode by BandarHL
|
// Workaround for qnblackcat/uYouPlus#253, qnblackcat/uYouPlus#170
|
||||||
UIColor* oledColor = [UIColor colorWithRed:0.0 green:0.0 blue:0.0 alpha:1.0];
|
%hook YTReelWatchPlaybackOverlayView
|
||||||
|
- (YTQTMButton *)overflowButton {
|
||||||
|
if ([self respondsToSelector:@selector(orderedRightSideButtons)] &&
|
||||||
|
[self orderedRightSideButtons].count != 0)
|
||||||
|
return [self orderedRightSideButtons][0];
|
||||||
|
return %orig;
|
||||||
|
}
|
||||||
|
%end
|
||||||
|
|
||||||
|
%hook YTReelContentView
|
||||||
|
- (void)didTapOverflowButton:(id)sender {
|
||||||
|
}
|
||||||
|
%end
|
||||||
|
|
||||||
|
%hook NSLayoutConstraint
|
||||||
|
+ (instancetype)constraintWithItem:(UIView *)view1
|
||||||
|
attribute:(NSLayoutAttribute)attr1
|
||||||
|
relatedBy:(NSLayoutRelation)relation
|
||||||
|
toItem:(UIView *)view2
|
||||||
|
attribute:(NSLayoutAttribute)attr2
|
||||||
|
multiplier:(CGFloat)multiplier
|
||||||
|
constant:(CGFloat)c {
|
||||||
|
if (![view1 isKindOfClass:%c(YTReelPlayerBottomButton)] &&
|
||||||
|
![view1.accessibilityIdentifier isEqualToString:@"com.miro.uyou"])
|
||||||
|
return %orig;
|
||||||
|
if (!view2) {
|
||||||
|
view1.hidden = YES;
|
||||||
|
return [NSLayoutConstraint alloc];
|
||||||
|
}
|
||||||
|
YTReelPlayerBottomButton *uYouButton = (YTReelPlayerBottomButton *)view1;
|
||||||
|
YTReelPlayerBottomButton *topButton = (YTReelPlayerBottomButton *)view2;
|
||||||
|
NSString *uYouButtonTitle =
|
||||||
|
[view2.accessibilityIdentifier isEqualToString:@"com.miro.uyou"]
|
||||||
|
? @"uYou"
|
||||||
|
: @"uYouLocal";
|
||||||
|
uYouButton.accessibilityLabel = uYouButtonTitle;
|
||||||
|
uYouButton.uppercaseTitle = NO;
|
||||||
|
[uYouButton setTitle:uYouButtonTitle forState:UIControlStateNormal];
|
||||||
|
[uYouButton
|
||||||
|
setTitleTypeKind:MSHookIvar<NSInteger>(topButton, "_typeKind")
|
||||||
|
typeVariant:MSHookIvar<NSInteger>(topButton, "_typeVariant")];
|
||||||
|
uYouButton.applyRightSideLayoutImageSize = topButton.applyRightSideLayoutImageSize;
|
||||||
|
uYouButton.buttonImageTitlePadding = topButton.buttonImageTitlePadding;
|
||||||
|
uYouButton.buttonLayoutStyle = topButton.buttonLayoutStyle;
|
||||||
|
uYouButton.sizeWithPaddingAndInsets = topButton.sizeWithPaddingAndInsets;
|
||||||
|
uYouButton.verticalContentPadding = topButton.verticalContentPadding;
|
||||||
|
return %orig;
|
||||||
|
}
|
||||||
|
%end
|
||||||
|
|
||||||
|
// Prevent uYou player bar from showing when not playing downloaded media
|
||||||
|
%hook PlayerManager
|
||||||
|
- (void)pause {
|
||||||
|
if (isnan([self progress]))
|
||||||
|
return;
|
||||||
|
%orig;
|
||||||
|
}
|
||||||
|
%end
|
||||||
|
|
||||||
|
// Hide YouTube Shorts banner in Home page? - @MiRO92 - YTNoShorts: https://github.com/MiRO92/YTNoShorts
|
||||||
|
%hook YTAsyncCollectionView
|
||||||
|
- (id)cellForItemAtIndexPath:(NSIndexPath *)indexPath {
|
||||||
|
UICollectionViewCell *cell = %orig;
|
||||||
|
if ([cell isKindOfClass:NSClassFromString(@"_ASCollectionViewCell")]) {
|
||||||
|
_ASCollectionViewCell *cell = %orig;
|
||||||
|
if ([cell respondsToSelector:@selector(node)]) {
|
||||||
|
if ([[[cell node] accessibilityIdentifier] isEqualToString:@"statement_banner.view"]) { [self removeShortsAndFeaturesAdsAtIndexPath:indexPath]; }
|
||||||
|
if ([[[cell node] accessibilityIdentifier] isEqualToString:@"compact.view"]) { [self removeShortsAndFeaturesAdsAtIndexPath:indexPath]; }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return %orig;
|
||||||
|
}
|
||||||
|
|
||||||
|
%new
|
||||||
|
- (void)removeShortsAndFeaturesAdsAtIndexPath:(NSIndexPath *)indexPath {
|
||||||
|
[self deleteItemsAtIndexPaths:[NSArray arrayWithObject:indexPath]];
|
||||||
|
}
|
||||||
|
%end
|
||||||
|
|
||||||
|
// uYou's slide settings?
|
||||||
|
%hook FRPSliderCell
|
||||||
|
- (void)didMoveToWindow {
|
||||||
|
%orig;
|
||||||
|
if (self.traitCollection.userInterfaceStyle == UIUserInterfaceStyleDark) {
|
||||||
|
MSHookIvar<UILabel *>(self, "_lLabel").textColor = [UIColor whiteColor];
|
||||||
|
MSHookIvar<UILabel *>(self, "_rLabel").textColor = [UIColor whiteColor];
|
||||||
|
MSHookIvar<UILabel *>(self, "_cLabel").textColor = [UIColor whiteColor];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
%end
|
||||||
|
|
||||||
|
// YTNoPaidPromo: https://github.com/PoomSmart/YTNoPaidPromo
|
||||||
|
%hook YTMainAppVideoPlayerOverlayViewController
|
||||||
|
- (void)setPaidContentWithPlayerData:(id)data {
|
||||||
|
if (hidePaidPromotionCard()) {}
|
||||||
|
else { return %orig; }
|
||||||
|
}
|
||||||
|
- (void)playerOverlayProvider:(YTPlayerOverlayProvider *)provider didInsertPlayerOverlay:(YTPlayerOverlay *)overlay {
|
||||||
|
if ([[overlay overlayIdentifier] isEqualToString:@"player_overlay_paid_content"] && hidePaidPromotionCard()) return;
|
||||||
|
%orig;
|
||||||
|
}
|
||||||
|
%end
|
||||||
|
|
||||||
|
%hook YTInlineMutedPlaybackPlayerOverlayViewController
|
||||||
|
- (void)setPaidContentWithPlayerData:(id)data {
|
||||||
|
if (hidePaidPromotionCard()) {}
|
||||||
|
else { return %orig; }
|
||||||
|
}
|
||||||
|
%end
|
||||||
|
|
||||||
|
# pragma mark - IAmYouTube - https://github.com/PoomSmart/IAmYouTube/
|
||||||
|
%hook YTVersionUtils
|
||||||
|
+ (NSString *)appName { return YT_NAME; }
|
||||||
|
+ (NSString *)appID { return YT_BUNDLE_ID; }
|
||||||
|
%end
|
||||||
|
|
||||||
|
%hook GCKBUtils
|
||||||
|
+ (NSString *)appIdentifier { return YT_BUNDLE_ID; }
|
||||||
|
%end
|
||||||
|
|
||||||
|
%hook GPCDeviceInfo
|
||||||
|
+ (NSString *)bundleId { return YT_BUNDLE_ID; }
|
||||||
|
%end
|
||||||
|
|
||||||
|
%hook OGLBundle
|
||||||
|
+ (NSString *)shortAppName { return YT_NAME; }
|
||||||
|
%end
|
||||||
|
|
||||||
|
%hook GVROverlayView
|
||||||
|
+ (NSString *)appName { return YT_NAME; }
|
||||||
|
%end
|
||||||
|
|
||||||
|
%hook OGLPhenotypeFlagServiceImpl
|
||||||
|
- (NSString *)bundleId { return YT_BUNDLE_ID; }
|
||||||
|
%end
|
||||||
|
|
||||||
|
%hook APMAEU
|
||||||
|
+ (BOOL)isFAS { return YES; }
|
||||||
|
%end
|
||||||
|
|
||||||
|
%hook GULAppEnvironmentUtil
|
||||||
|
+ (BOOL)isFromAppStore { return YES; }
|
||||||
|
%end
|
||||||
|
|
||||||
|
%hook SSOConfiguration
|
||||||
|
- (id)initWithClientID:(id)clientID supportedAccountServices:(id)supportedAccountServices {
|
||||||
|
self = %orig;
|
||||||
|
[self setValue:YT_NAME forKey:@"_shortAppName"];
|
||||||
|
[self setValue:YT_BUNDLE_ID forKey:@"_applicationIdentifier"];
|
||||||
|
return self;
|
||||||
|
}
|
||||||
|
%end
|
||||||
|
|
||||||
|
%hook NSBundle
|
||||||
|
- (NSString *)bundleIdentifier {
|
||||||
|
NSArray *address = [NSThread callStackReturnAddresses];
|
||||||
|
Dl_info info = {0};
|
||||||
|
if (dladdr((void *)[address[2] longLongValue], &info) == 0)
|
||||||
|
return %orig;
|
||||||
|
NSString *path = [NSString stringWithUTF8String:info.dli_fname];
|
||||||
|
if ([path hasPrefix:NSBundle.mainBundle.bundlePath])
|
||||||
|
return YT_BUNDLE_ID;
|
||||||
|
return %orig;
|
||||||
|
}
|
||||||
|
- (id)objectForInfoDictionaryKey:(NSString *)key {
|
||||||
|
if ([key isEqualToString:@"CFBundleIdentifier"])
|
||||||
|
return YT_BUNDLE_ID;
|
||||||
|
if ([key isEqualToString:@"CFBundleDisplayName"] || [key isEqualToString:@"CFBundleName"])
|
||||||
|
return YT_NAME;
|
||||||
|
return %orig;
|
||||||
|
}
|
||||||
|
%end
|
||||||
|
|
||||||
|
// Fix "Google couldn't confirm this attempt to sign in is safe. If you think this is a mistake, you can close and try again to sign in" - qnblackcat/uYouPlus#420
|
||||||
|
// Thanks to @AhmedBafkir and @kkirby - https://github.com/qnblackcat/uYouPlus/discussions/447#discussioncomment-3672881
|
||||||
|
%group gFixGoogleSignIn
|
||||||
|
%hook SSORPCService
|
||||||
|
+ (id)URLFromURL:(id)arg1 withAdditionalFragmentParameters:(NSDictionary *)arg2 {
|
||||||
|
NSURL *orig = %orig;
|
||||||
|
NSURLComponents *urlComponents = [[NSURLComponents alloc] initWithURL:orig resolvingAgainstBaseURL:NO];
|
||||||
|
NSMutableArray *newQueryItems = [urlComponents.queryItems mutableCopy];
|
||||||
|
for (NSURLQueryItem *queryItem in urlComponents.queryItems) {
|
||||||
|
if ([queryItem.name isEqualToString:@"system_version"]
|
||||||
|
|| [queryItem.name isEqualToString:@"app_version"]
|
||||||
|
|| [queryItem.name isEqualToString:@"kdlc"]
|
||||||
|
|| [queryItem.name isEqualToString:@"kss"]
|
||||||
|
|| [queryItem.name isEqualToString:@"lib_ver"]
|
||||||
|
|| [queryItem.name isEqualToString:@"device_model"]) {
|
||||||
|
[newQueryItems removeObject:queryItem];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
urlComponents.queryItems = [newQueryItems copy];
|
||||||
|
return urlComponents.URL;
|
||||||
|
}
|
||||||
|
%end
|
||||||
|
%end
|
||||||
|
|
||||||
|
// Fix "You can't sign in to this app because Google can't confirm that it's safe" warning when signing in. by julioverne & PoomSmart
|
||||||
|
// https://gist.github.com/PoomSmart/ef5b172fd4c5371764e027bea2613f93
|
||||||
|
// https://github.com/qnblackcat/uYouPlus/pull/398
|
||||||
|
/*
|
||||||
|
%group gDevice_challenge_request_hack
|
||||||
|
%hook SSOService
|
||||||
|
+ (id)fetcherWithRequest:(NSMutableURLRequest *)request configuration:(id)configuration {
|
||||||
|
if ([request isKindOfClass:[NSMutableURLRequest class]] && request.HTTPBody) {
|
||||||
|
NSError *error = nil;
|
||||||
|
NSMutableDictionary *body = [NSJSONSerialization JSONObjectWithData:request.HTTPBody options:NSJSONReadingMutableContainers error:&error];
|
||||||
|
if (!error && [body isKindOfClass:[NSMutableDictionary class]]) {
|
||||||
|
[body removeObjectForKey:@"device_challenge_request"];
|
||||||
|
request.HTTPBody = [NSJSONSerialization dataWithJSONObject:body options:kNilOptions error:&error];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return %orig;
|
||||||
|
}
|
||||||
|
%end
|
||||||
|
%end
|
||||||
|
*/
|
||||||
|
|
||||||
|
// Fix login for YouTube 17.33.2 and higher
|
||||||
|
%hook SSOKeychainCore
|
||||||
|
+ (NSString *)accessGroup {
|
||||||
|
return accessGroupID();
|
||||||
|
}
|
||||||
|
+ (NSString *)sharedAccessGroup {
|
||||||
|
return accessGroupID();
|
||||||
|
}
|
||||||
|
%end
|
||||||
|
|
||||||
|
// Fix App Group Directory by move it to document directory
|
||||||
|
%hook NSFileManager
|
||||||
|
- (NSURL *)containerURLForSecurityApplicationGroupIdentifier:(NSString *)groupIdentifier {
|
||||||
|
if (groupIdentifier != nil) {
|
||||||
|
NSArray *paths = [[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask];
|
||||||
|
NSURL *documentsURL = [paths lastObject];
|
||||||
|
return [documentsURL URLByAppendingPathComponent:@"AppGroup"];
|
||||||
|
}
|
||||||
|
return %orig(groupIdentifier);
|
||||||
|
}
|
||||||
|
%end
|
||||||
|
|
||||||
|
# pragma mark - OLED dark mode by BandarHL
|
||||||
|
UIColor* raisedColor = [UIColor colorWithRed:0.035 green:0.035 blue:0.035 alpha:1.0];
|
||||||
%group gOLED
|
%group gOLED
|
||||||
%hook YTCommonColorPalette
|
%hook YTCommonColorPalette
|
||||||
- (UIColor *)brandBackgroundSolid {
|
- (UIColor *)brandBackgroundSolid {
|
||||||
if (self.pageStyle == 1) {
|
if (self.pageStyle == 1) {
|
||||||
return oledColor;
|
return [UIColor blackColor];
|
||||||
}
|
}
|
||||||
return %orig;
|
return %orig;
|
||||||
}
|
}
|
||||||
- (UIColor *)brandBackgroundPrimary {
|
- (UIColor *)brandBackgroundPrimary {
|
||||||
if (self.pageStyle == 1) {
|
if (self.pageStyle == 1) {
|
||||||
return oledColor;
|
return [UIColor blackColor];
|
||||||
}
|
}
|
||||||
return %orig;
|
return %orig;
|
||||||
}
|
}
|
||||||
- (UIColor *)brandBackgroundSecondary {
|
- (UIColor *)brandBackgroundSecondary {
|
||||||
if (self.pageStyle == 1) {
|
if (self.pageStyle == 1) {
|
||||||
return oledColor;
|
return [[UIColor blackColor] colorWithAlphaComponent:0.9];
|
||||||
|
}
|
||||||
|
return %orig;
|
||||||
|
}
|
||||||
|
- (UIColor *)raisedBackground {
|
||||||
|
if (self.pageStyle == 1) {
|
||||||
|
return [UIColor blackColor];
|
||||||
}
|
}
|
||||||
return %orig;
|
return %orig;
|
||||||
}
|
}
|
||||||
- (UIColor *)staticBrandBlack {
|
- (UIColor *)staticBrandBlack {
|
||||||
if (self.pageStyle == 1) {
|
if (self.pageStyle == 1) {
|
||||||
return oledColor;
|
return [UIColor blackColor];
|
||||||
}
|
}
|
||||||
return %orig;
|
return %orig;
|
||||||
}
|
}
|
||||||
- (UIColor *)generalBackgroundA {
|
- (UIColor *)generalBackgroundA {
|
||||||
if (self.pageStyle == 1) {
|
if (self.pageStyle == 1) {
|
||||||
return oledColor;
|
return [UIColor blackColor];
|
||||||
}
|
}
|
||||||
return %orig;
|
return %orig;
|
||||||
}
|
}
|
||||||
@@ -249,16 +596,7 @@ UIColor* oledColor = [UIColor colorWithRed:0.0 green:0.0 blue:0.0 alpha:1.0];
|
|||||||
%hook YTAccountPanelBodyViewController
|
%hook YTAccountPanelBodyViewController
|
||||||
- (UIColor *)backgroundColor:(NSInteger)pageStyle {
|
- (UIColor *)backgroundColor:(NSInteger)pageStyle {
|
||||||
if (pageStyle == 1) {
|
if (pageStyle == 1) {
|
||||||
return oledColor;
|
return [UIColor blackColor];
|
||||||
}
|
|
||||||
return %orig;
|
|
||||||
}
|
|
||||||
%end
|
|
||||||
|
|
||||||
%hook YTInnerTubeCollectionViewController
|
|
||||||
- (UIColor *)backgroundColor:(NSInteger)pageStyle {
|
|
||||||
if (pageStyle == 1) {
|
|
||||||
return oledColor;
|
|
||||||
}
|
}
|
||||||
return %orig;
|
return %orig;
|
||||||
}
|
}
|
||||||
@@ -267,78 +605,39 @@ UIColor* oledColor = [UIColor colorWithRed:0.0 green:0.0 blue:0.0 alpha:1.0];
|
|||||||
// Explore
|
// Explore
|
||||||
%hook ASScrollView
|
%hook ASScrollView
|
||||||
- (void)didMoveToWindow {
|
- (void)didMoveToWindow {
|
||||||
|
%orig;
|
||||||
if (isDarkMode()) {
|
if (isDarkMode()) {
|
||||||
self.backgroundColor = oledColor;
|
self.backgroundColor = [UIColor clearColor];
|
||||||
%orig;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
%end
|
%end
|
||||||
|
|
||||||
// uYou's page
|
// Your videos
|
||||||
%hook DownloadedVC
|
%hook ASCollectionView
|
||||||
- (UIColor *)ytBackgroundColor {
|
- (void)didMoveToWindow {
|
||||||
if (isDarkMode()) {
|
%orig;
|
||||||
return oledColor;
|
if (isDarkMode() && [self.nextResponder isKindOfClass:%c(_ASDisplayView)]) {
|
||||||
|
self.superview.backgroundColor = [UIColor blackColor];
|
||||||
}
|
}
|
||||||
return %orig;
|
|
||||||
}
|
}
|
||||||
%end
|
%end
|
||||||
|
|
||||||
%hook DownloadsPagerVC
|
// iSponsorBlock
|
||||||
- (UIColor *)ytBackgroundColor {
|
|
||||||
if (isDarkMode()) {
|
|
||||||
return oledColor;
|
|
||||||
}
|
|
||||||
return %orig;
|
|
||||||
}
|
|
||||||
%end
|
|
||||||
|
|
||||||
%hook DownloadingVC
|
|
||||||
- (UIColor *)ytBackgroundColor {
|
|
||||||
if (isDarkMode()) {
|
|
||||||
return oledColor;
|
|
||||||
}
|
|
||||||
return %orig;
|
|
||||||
}
|
|
||||||
%end
|
|
||||||
|
|
||||||
%hook PlayerVC
|
|
||||||
- (UIColor *)ytBackgroundColor {
|
|
||||||
if (isDarkMode()) {
|
|
||||||
return oledColor;
|
|
||||||
}
|
|
||||||
return %orig;
|
|
||||||
}
|
|
||||||
%end
|
|
||||||
|
|
||||||
// SponsorBlock settings
|
|
||||||
%hook SponsorBlockSettingsController
|
%hook SponsorBlockSettingsController
|
||||||
- (void)viewDidLoad {
|
- (void)viewDidLoad {
|
||||||
if (self.traitCollection.userInterfaceStyle == UIUserInterfaceStyleDark) {
|
if (self.traitCollection.userInterfaceStyle == UIUserInterfaceStyleDark) {
|
||||||
%orig;
|
%orig;
|
||||||
self.tableView.backgroundColor = oledColor;
|
self.tableView.backgroundColor = [UIColor blackColor];
|
||||||
} else {
|
} else { return %orig; }
|
||||||
return %orig();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
%end
|
%end
|
||||||
|
|
||||||
// uYou & YT player, and downloading view controller
|
%hook SponsorBlockViewController
|
||||||
%hook _LNPopupBarContentView
|
- (void)viewDidLoad {
|
||||||
- (void)setBackgroundColor:(UIColor *)color {
|
if (self.traitCollection.userInterfaceStyle == UIUserInterfaceStyleDark) {
|
||||||
if (isDarkMode()) {
|
%orig;
|
||||||
return %orig([UIColor colorWithRed:0.0 green:0.0 blue:0.0 alpha:0.9]);
|
self.view.backgroundColor = [UIColor blackColor];
|
||||||
}
|
} else { return %orig; }
|
||||||
return %orig;
|
|
||||||
}
|
|
||||||
%end
|
|
||||||
|
|
||||||
%hook YTWatchMiniBarView
|
|
||||||
- (void)setBackgroundColor:(UIColor *)color {
|
|
||||||
if (isDarkMode()) {
|
|
||||||
return %orig([UIColor colorWithRed:0.0 green:0.0 blue:0.0 alpha:0.9]);
|
|
||||||
}
|
|
||||||
return %orig;
|
|
||||||
}
|
}
|
||||||
%end
|
%end
|
||||||
|
|
||||||
@@ -346,26 +645,36 @@ UIColor* oledColor = [UIColor colorWithRed:0.0 green:0.0 blue:0.0 alpha:1.0];
|
|||||||
%hook YTSearchBarView
|
%hook YTSearchBarView
|
||||||
- (void)setBackgroundColor:(UIColor *)color {
|
- (void)setBackgroundColor:(UIColor *)color {
|
||||||
if (isDarkMode()) {
|
if (isDarkMode()) {
|
||||||
return %orig (oledColor);
|
return %orig([UIColor blackColor]);
|
||||||
}
|
}
|
||||||
return %orig;
|
return %orig;
|
||||||
}
|
}
|
||||||
%end
|
%end
|
||||||
|
|
||||||
|
// History Search view
|
||||||
%hook YTSearchBoxView
|
%hook YTSearchBoxView
|
||||||
- (void)setBackgroundColor:(UIColor *)color {
|
- (void)setBackgroundColor:(UIColor *)color {
|
||||||
if (isDarkMode()) {
|
if (isDarkMode()) {
|
||||||
return %orig (oledColor);
|
return %orig([UIColor blackColor]);
|
||||||
}
|
}
|
||||||
return %orig;
|
return %orig;
|
||||||
}
|
}
|
||||||
%end
|
%end
|
||||||
|
|
||||||
// Comment view
|
// Comment view
|
||||||
%hook YTCreateCommentAccessoryView // community reply comment
|
%hook YTCommentView
|
||||||
- (void)setBackgroundColor:(UIColor *)color {
|
- (void)setBackgroundColor:(UIColor *)color {
|
||||||
if (isDarkMode()) {
|
if (isDarkMode()) {
|
||||||
return %orig (oledColor);
|
return %orig([UIColor blackColor]);
|
||||||
|
}
|
||||||
|
return %orig;
|
||||||
|
}
|
||||||
|
%end
|
||||||
|
|
||||||
|
%hook YTCreateCommentAccessoryView
|
||||||
|
- (void)setBackgroundColor:(UIColor *)color {
|
||||||
|
if (isDarkMode()) {
|
||||||
|
return %orig([UIColor blackColor]);
|
||||||
}
|
}
|
||||||
return %orig;
|
return %orig;
|
||||||
}
|
}
|
||||||
@@ -374,51 +683,70 @@ UIColor* oledColor = [UIColor colorWithRed:0.0 green:0.0 blue:0.0 alpha:1.0];
|
|||||||
%hook YTCreateCommentTextView
|
%hook YTCreateCommentTextView
|
||||||
- (void)setBackgroundColor:(UIColor *)color {
|
- (void)setBackgroundColor:(UIColor *)color {
|
||||||
if (isDarkMode()) {
|
if (isDarkMode()) {
|
||||||
return %orig (oledColor);
|
return %orig([UIColor blackColor]);
|
||||||
}
|
}
|
||||||
return %orig;
|
return %orig;
|
||||||
}
|
}
|
||||||
- (void)setTextColor:(UIColor *)color { // fix black text in #Shorts video's comment
|
- (void)setTextColor:(UIColor *)color { // fix black text in #Shorts video's comment
|
||||||
if (isDarkMode()) {
|
if (isDarkMode()) {
|
||||||
return %orig ([UIColor whiteColor]);
|
return %orig([UIColor whiteColor]);
|
||||||
}
|
}
|
||||||
return %orig;
|
return %orig;
|
||||||
}
|
}
|
||||||
%end
|
%end
|
||||||
|
|
||||||
|
%hook YTCommentDetailHeaderCell
|
||||||
|
- (void)didMoveToWindow {
|
||||||
|
%orig;
|
||||||
|
if (isDarkMode()) {
|
||||||
|
self.subviews[2].backgroundColor = [UIColor blackColor];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
%end
|
||||||
|
|
||||||
%hook YTFormattedStringLabel // YT is werid...
|
%hook YTFormattedStringLabel // YT is werid...
|
||||||
- (void)setBackgroundColor:(UIColor *)color {
|
- (void)setBackgroundColor:(UIColor *)color {
|
||||||
if (isDarkMode()) {
|
if (isDarkMode()) {
|
||||||
return %orig ([UIColor clearColor]);
|
return %orig([UIColor clearColor]);
|
||||||
}
|
}
|
||||||
return %orig;
|
return %orig;
|
||||||
}
|
}
|
||||||
%end
|
%end
|
||||||
|
|
||||||
%hook YCHLiveChatActionPanelView // live chat comment
|
// Live chat comment
|
||||||
|
%hook YCHLiveChatActionPanelView
|
||||||
- (void)setBackgroundColor:(UIColor *)color {
|
- (void)setBackgroundColor:(UIColor *)color {
|
||||||
if (isDarkMode()) {
|
if (isDarkMode()) {
|
||||||
return %orig (oledColor);
|
return %orig([UIColor blackColor]);
|
||||||
}
|
}
|
||||||
return %orig;
|
return %orig;
|
||||||
}
|
}
|
||||||
%end
|
%end
|
||||||
|
|
||||||
%hook YTEmojiTextView // live chat comment
|
%hook YTEmojiTextView
|
||||||
- (void)setBackgroundColor:(UIColor *)color {
|
- (void)setBackgroundColor:(UIColor *)color {
|
||||||
if (isDarkMode()) {
|
if (isDarkMode()) {
|
||||||
return %orig (oledColor);
|
return %orig([UIColor blackColor]);
|
||||||
}
|
}
|
||||||
return %orig;
|
return %orig;
|
||||||
}
|
}
|
||||||
%end
|
%end
|
||||||
|
|
||||||
// Separation lines
|
// Others
|
||||||
%hook YTCollectionSeparatorView
|
%hook _ASDisplayView
|
||||||
- (void)didMoveToWindow {
|
- (void)didMoveToWindow {
|
||||||
if (isDarkMode()) {}
|
%orig;
|
||||||
else {
|
if (isDarkMode()) {
|
||||||
return %orig();
|
if ([self.nextResponder isKindOfClass:%c(ASScrollView)]) { self.backgroundColor = [UIColor clearColor]; }
|
||||||
|
if ([self.accessibilityIdentifier isEqualToString:@"eml.cvr"]) { self.backgroundColor = [UIColor blackColor]; }
|
||||||
|
if ([self.accessibilityIdentifier isEqualToString:@"rich_header"]) { self.backgroundColor = [UIColor blackColor]; }
|
||||||
|
if ([self.accessibilityIdentifier isEqualToString:@"id.ui.comment_cell"]) { self.backgroundColor = [UIColor blackColor]; }
|
||||||
|
if ([self.accessibilityIdentifier isEqualToString:@"id.ui.cancel.button"]) { self.superview.backgroundColor = [UIColor clearColor]; }
|
||||||
|
if ([self.accessibilityIdentifier isEqualToString:@"id.elements.components.comment_composer"]) { self.backgroundColor = [UIColor blackColor]; }
|
||||||
|
if ([self.accessibilityIdentifier isEqualToString:@"id.elements.components.video_list_entry"]) { self.backgroundColor = [UIColor blackColor]; }
|
||||||
|
if ([self.accessibilityIdentifier isEqualToString:@"id.comment.guidelines_text"]) { self.superview.backgroundColor = [UIColor blackColor]; }
|
||||||
|
if ([self.accessibilityIdentifier isEqualToString:@"id.comment.channel_guidelines_bottom_sheet_container"]) { self.backgroundColor = [UIColor blackColor]; }
|
||||||
|
if ([self.accessibilityIdentifier isEqualToString:@"id.comment.channel_guidelines_entry_banner_container"]) { self.backgroundColor = [UIColor blackColor]; }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
%end
|
%end
|
||||||
@@ -427,66 +755,60 @@ UIColor* oledColor = [UIColor colorWithRed:0.0 green:0.0 blue:0.0 alpha:1.0];
|
|||||||
%hook ASWAppSwitchingSheetHeaderView
|
%hook ASWAppSwitchingSheetHeaderView
|
||||||
- (void)setBackgroundColor:(UIColor *)color {
|
- (void)setBackgroundColor:(UIColor *)color {
|
||||||
if (isDarkMode()) {
|
if (isDarkMode()) {
|
||||||
return %orig (oledColor);
|
return %orig(raisedColor);
|
||||||
}
|
}
|
||||||
|
return %orig;
|
||||||
}
|
}
|
||||||
%end
|
%end
|
||||||
|
|
||||||
%hook ASWAppSwitchingSheetFooterView
|
%hook ASWAppSwitchingSheetFooterView
|
||||||
- (void)setBackgroundColor:(UIColor *)color {
|
- (void)setBackgroundColor:(UIColor *)color {
|
||||||
if (isDarkMode()) {
|
if (isDarkMode()) {
|
||||||
return %orig (oledColor);
|
return %orig(raisedColor);
|
||||||
}
|
}
|
||||||
|
return %orig;
|
||||||
}
|
}
|
||||||
%end
|
%end
|
||||||
|
|
||||||
%hook ASWAppSwitcherCollectionViewCell
|
%hook ASWAppSwitcherCollectionViewCell
|
||||||
- (void)didMoveToWindow {
|
- (void)didMoveToWindow {
|
||||||
|
%orig;
|
||||||
if (isDarkMode()) {
|
if (isDarkMode()) {
|
||||||
%orig;
|
self.backgroundColor = raisedColor;
|
||||||
self.subviews[1].backgroundColor = oledColor;
|
self.subviews[1].backgroundColor = raisedColor;
|
||||||
|
self.superview.backgroundColor = raisedColor;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
%end
|
%end
|
||||||
|
|
||||||
// this sucks :/
|
|
||||||
// %hook UIView
|
|
||||||
// - (void)setBackgroundColor:(UIColor *)color {
|
|
||||||
// if (isDarkMode()) {
|
|
||||||
// if ([self.nextResponder isKindOfClass:%c(YTHUDMessageView)]) { color = oledColor; }
|
|
||||||
// %orig;
|
|
||||||
// }
|
|
||||||
// return %orig;
|
|
||||||
// }
|
|
||||||
// %end
|
|
||||||
%end
|
%end
|
||||||
|
|
||||||
%group gOLEDKB // OLED keyboard by @ichitaso <3 - http://gist.github.com/ichitaso/935100fd53a26f18a9060f7195a1be0e
|
# pragma mark - OLED keyboard by @ichitaso <3 - http://gist.github.com/ichitaso/935100fd53a26f18a9060f7195a1be0e
|
||||||
|
%group gOLEDKB
|
||||||
%hook UIPredictionViewController
|
%hook UIPredictionViewController
|
||||||
- (void)loadView {
|
- (void)loadView {
|
||||||
%orig;
|
%orig;
|
||||||
[self.view setBackgroundColor:oledColor];
|
[self.view setBackgroundColor:[UIColor blackColor]];
|
||||||
}
|
}
|
||||||
%end
|
%end
|
||||||
|
|
||||||
%hook UICandidateViewController
|
%hook UICandidateViewController
|
||||||
- (void)loadView {
|
- (void)loadView {
|
||||||
%orig;
|
%orig;
|
||||||
[self.view setBackgroundColor:oledColor];
|
[self.view setBackgroundColor:[UIColor blackColor]];
|
||||||
}
|
}
|
||||||
%end
|
%end
|
||||||
|
|
||||||
%hook UIKeyboardDockView
|
%hook UIKeyboardDockView
|
||||||
- (void)didMoveToWindow {
|
- (void)didMoveToWindow {
|
||||||
self.backgroundColor = oledColor;
|
|
||||||
%orig;
|
%orig;
|
||||||
|
self.backgroundColor = [UIColor blackColor];
|
||||||
}
|
}
|
||||||
%end
|
%end
|
||||||
|
|
||||||
%hook UIKeyboardLayoutStar
|
%hook UIKeyboardLayoutStar
|
||||||
- (void)didMoveToWindow {
|
- (void)didMoveToWindow {
|
||||||
self.backgroundColor = oledColor;
|
|
||||||
%orig;
|
%orig;
|
||||||
|
self.backgroundColor = [UIColor blackColor];
|
||||||
}
|
}
|
||||||
%end
|
%end
|
||||||
|
|
||||||
@@ -549,26 +871,58 @@ static void replaceTab(YTIGuideResponse *response) {
|
|||||||
if([[self _viewControllerForAncestor].parentViewController.parentViewController isKindOfClass:%c(YTWatchMiniBarViewController)]) {
|
if([[self _viewControllerForAncestor].parentViewController.parentViewController isKindOfClass:%c(YTWatchMiniBarViewController)]) {
|
||||||
return NO;
|
return NO;
|
||||||
}
|
}
|
||||||
return %orig;
|
return %orig;
|
||||||
}
|
}
|
||||||
%end
|
%end
|
||||||
%end
|
%end
|
||||||
|
|
||||||
|
// iOS 16 uYou crash fix - @level3tjg: https://github.com/qnblackcat/uYouPlus/pull/224
|
||||||
|
%group iOS16
|
||||||
|
%hook OBPrivacyLinkButton
|
||||||
|
%new
|
||||||
|
- (instancetype)initWithCaption:(NSString *)caption
|
||||||
|
buttonText:(NSString *)buttonText
|
||||||
|
image:(UIImage *)image
|
||||||
|
imageSize:(CGSize)imageSize
|
||||||
|
useLargeIcon:(BOOL)useLargeIcon {
|
||||||
|
return [self initWithCaption:caption
|
||||||
|
buttonText:buttonText
|
||||||
|
image:image
|
||||||
|
imageSize:imageSize
|
||||||
|
useLargeIcon:useLargeIcon
|
||||||
|
displayLanguage:[NSLocale currentLocale].languageCode];
|
||||||
|
}
|
||||||
|
%end
|
||||||
|
%end
|
||||||
|
|
||||||
|
# pragma mark - ctor
|
||||||
%ctor {
|
%ctor {
|
||||||
%init;
|
%init;
|
||||||
|
if (![[[[NSUserDefaults standardUserDefaults] dictionaryRepresentation] allKeys] containsObject:@"relatedVideosAtTheEndOfYTVideos"]) {
|
||||||
|
[[NSUserDefaults standardUserDefaults] setBool:YES forKey:@"relatedVideosAtTheEndOfYTVideos"];
|
||||||
|
}
|
||||||
if (oled()) {
|
if (oled()) {
|
||||||
%init(gOLED);
|
%init(gOLED);
|
||||||
}
|
}
|
||||||
if (oledKB()) {
|
if (oledKB()) {
|
||||||
%init(gOLEDKB);
|
%init(gOLEDKB);
|
||||||
}
|
}
|
||||||
if (ReExplore()) {
|
if (reExplore()) {
|
||||||
%init(gReExplore);
|
%init(gReExplore);
|
||||||
}
|
}
|
||||||
if (bigYTMiniPlayer() && (UIDevice.currentDevice.userInterfaceIdiom != UIUserInterfaceIdiomPad)) {
|
if (bigYTMiniPlayer() && (UIDevice.currentDevice.userInterfaceIdiom != UIUserInterfaceIdiomPad)) {
|
||||||
%init(Main);
|
%init(Main);
|
||||||
}
|
}
|
||||||
if (castConfirm()) {
|
if (hidePreviousAndNextButton()) {
|
||||||
%init(gYTCastconfirm);
|
%init(gHidePreviousAndNextButton);
|
||||||
|
}
|
||||||
|
if (replacePreviousAndNextButton()) {
|
||||||
|
%init(gReplacePreviousAndNextButton);
|
||||||
|
}
|
||||||
|
if (@available(iOS 16, *)) {
|
||||||
|
%init(iOS16);
|
||||||
|
}
|
||||||
|
if (!fixGoogleSignIn()) {
|
||||||
|
%init(gFixGoogleSignIn);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user