Compare commits
87 commits
main
...
main-night
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
14487c8cb5 | ||
|
|
4ab1b0573f | ||
|
|
f59f4243be | ||
|
|
88dd1b711f | ||
|
|
9afbdb2dac | ||
|
|
10ce2d1bd8 | ||
|
|
ef025bd3ac | ||
|
|
9c52e27b9a | ||
|
|
4512d43e42 | ||
|
|
a194b345f8 | ||
|
|
2215e3bd5f | ||
|
|
c27a33ccff | ||
|
|
ccda2827a9 | ||
|
|
95095dbddd | ||
|
|
c9d32fd2c3 | ||
|
|
619223cc90 | ||
|
|
eae46196ed | ||
|
|
e4fc237941 | ||
|
|
defe4a0f8c | ||
|
|
7681af2aaf | ||
|
|
65d96a84e1 | ||
|
|
359ce0e29d | ||
|
|
d8a0f921a4 | ||
|
|
5b1ff83bdd | ||
|
|
2254c8511a | ||
|
|
db1a29a0e3 | ||
|
|
dd015adea7 | ||
|
|
1d2be63a9e | ||
|
|
2bd5aed405 | ||
|
|
c7d141c3d3 | ||
|
|
e5b3fdbb3b | ||
|
|
f6dc419db7 | ||
|
|
36c05f3678 | ||
|
|
0fac075d6c | ||
|
|
fe0b4f7ab0 | ||
|
|
91eb0d1a42 | ||
|
|
cfcfcf05b2 | ||
|
|
1a307df502 | ||
|
|
8127b3da9d | ||
|
|
432ebc879f | ||
|
|
cd401daa37 | ||
|
|
9126bbe2b6 | ||
|
|
5819451c4f | ||
|
|
1eff0b0fd4 | ||
|
|
63624a49f9 | ||
|
|
efeb36f1e6 | ||
|
|
d20263bf35 | ||
|
|
0c414df932 | ||
|
|
107a5e35d6 | ||
|
|
12f9830817 | ||
|
|
aa69f5161c | ||
|
|
3c5c6536c0 | ||
|
|
7af1e4368b | ||
|
|
c00a28aba9 | ||
|
|
aaee12c551 | ||
|
|
7e8fbc10da | ||
|
|
10d879fe11 | ||
|
|
3861f57711 | ||
|
|
b3cb53e998 | ||
|
|
7f4faf44ed | ||
|
|
bbeb521b04 | ||
|
|
29dcffb0e8 | ||
|
|
bbf056a051 | ||
|
|
afe0955072 | ||
|
|
9c099faa10 | ||
|
|
fa6e26fa2e | ||
|
|
a39798499f | ||
|
|
8777cf41fe | ||
|
|
0a4e56c0c4 | ||
|
|
15051b2e42 | ||
|
|
b0341f5596 | ||
|
|
1525f7c0fb | ||
|
|
3ff69825b2 | ||
|
|
cfac3d25e6 | ||
|
|
bf49a3a8d7 | ||
|
|
22f68d61e6 | ||
|
|
70d757bc6f | ||
|
|
13e72a298f | ||
|
|
8f2c87ce33 | ||
|
|
26cd4536cb | ||
|
|
254704fbd5 | ||
|
|
a6e87b94d5 | ||
|
|
cee5ffca3c | ||
|
|
42cad3f974 | ||
|
|
470e95e605 | ||
|
|
98085815f7 | ||
|
|
a9943de261 |
49 changed files with 4856 additions and 556 deletions
26
.github/workflows/buildapp.yml
vendored
26
.github/workflows/buildapp.yml
vendored
|
|
@ -1,7 +1,7 @@
|
|||
# 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
|
||||
name: Build and Release uYouPlusExtra
|
||||
|
||||
on:
|
||||
workflow_dispatch:
|
||||
|
|
@ -44,13 +44,13 @@ concurrency:
|
|||
jobs:
|
||||
build:
|
||||
name: Build uYouPlus
|
||||
runs-on: macos-11
|
||||
runs-on: macos-latest
|
||||
permissions:
|
||||
contents: write
|
||||
|
||||
steps:
|
||||
- name: Checkout Main
|
||||
uses: actions/checkout@v3.2.0
|
||||
uses: actions/checkout@v3.6.0
|
||||
with:
|
||||
path: main
|
||||
submodules: recursive
|
||||
|
|
@ -62,32 +62,32 @@ jobs:
|
|||
run: echo "$(brew --prefix make)/libexec/gnubin" >> $GITHUB_PATH
|
||||
|
||||
- name: Setup Theos
|
||||
uses: actions/checkout@v3.2.0
|
||||
uses: actions/checkout@v3.6.0
|
||||
with:
|
||||
repository: theos/theos
|
||||
ref: master
|
||||
ref: 3da31488281ecf4394d10302d2629607f4a1aa07
|
||||
path: theos
|
||||
submodules: recursive
|
||||
|
||||
- name: Caching
|
||||
id: SDK
|
||||
uses: actions/cache@v3.2.0
|
||||
uses: actions/cache@v3.3.1
|
||||
env:
|
||||
cache-name: iOS-15.5-SDK
|
||||
cache-name: iOS-16.2-SDK
|
||||
with:
|
||||
path: theos/sdks/
|
||||
key: ${{ env.cache-name }}
|
||||
|
||||
- name: Download iOS 15.5 SDK
|
||||
- name: Download iOS 16.2 SDK
|
||||
if: steps.SDK.outputs.cache-hit != 'true'
|
||||
run: |
|
||||
svn checkout -q https://github.com/chrisharper22/sdks/trunk/iPhoneOS15.5.sdk
|
||||
svn checkout -q https://github.com/arichorn/sdks/trunk/iPhoneOS16.2.sdk
|
||||
mv *.sdk $THEOS/sdks
|
||||
env:
|
||||
THEOS: ${{ github.workspace }}/theos
|
||||
|
||||
- name: Setup Theos Jailed
|
||||
uses: actions/checkout@v3.2.0
|
||||
uses: actions/checkout@v3.6.0
|
||||
with:
|
||||
repository: qnblackcat/theos-jailed
|
||||
ref: master
|
||||
|
|
@ -116,7 +116,7 @@ jobs:
|
|||
sed -i '' "27s#.*#BUNDLE_ID = ${{ env.BUNDLE_ID }}#g" Makefile
|
||||
sed -i '' "26s#.*#DISPLAY_NAME = ${{ env.APP_NAME }}#g" Makefile
|
||||
make package IPA=YouTube.ipa FINALPACKAGE=1
|
||||
(mv "packages/$(ls -t packages | head -n1)" "packages/uYouPlus_${{ env.YOUTUBE_VERSION }}_${{ env.UYOU_VERSION }}.ipa")
|
||||
(mv "packages/$(ls -t packages | head -n1)" "packages/uYouPlusExtra_${{ env.YOUTUBE_VERSION }}_${{ env.UYOU_VERSION }}.ipa")
|
||||
echo "package=$(ls -t packages | head -n1)" >>$GITHUB_OUTPUT
|
||||
echo -e "==> \033[1mSHASUM256: $(shasum -a 256 packages/*.ipa | cut -f1 -d' ')\033[0m"
|
||||
echo -e "==> \033[1mBundle ID: ${{ env.BUNDLE_ID }}\033[0m"
|
||||
|
|
@ -129,12 +129,12 @@ jobs:
|
|||
APP_NAME: ${{ inputs.app_name }}
|
||||
|
||||
- name: Upload Artifact
|
||||
uses: actions/upload-artifact@v3.1.1
|
||||
uses: actions/upload-artifact@v3.1.2
|
||||
env:
|
||||
UYOU_VERSION: ${{ inputs.uyou_version }}
|
||||
YOUTUBE_VERSION: ${{ inputs.youtube_version }}
|
||||
with:
|
||||
name: uYouPlus_${{ env.YOUTUBE_VERSION }}_${{ env.UYOU_VERSION }}
|
||||
name: uYouPlusExtra_${{ env.YOUTUBE_VERSION }}_${{ env.UYOU_VERSION }}
|
||||
path: ${{ github.workspace }}/main/packages/${{ steps.build_package.outputs.package }}
|
||||
if-no-files-found: error
|
||||
|
||||
|
|
|
|||
59
.github/workflows/delete-workflow-runs.yml
vendored
Normal file
59
.github/workflows/delete-workflow-runs.yml
vendored
Normal file
|
|
@ -0,0 +1,59 @@
|
|||
name: Delete Workflow Runs
|
||||
on:
|
||||
workflow_dispatch:
|
||||
inputs:
|
||||
days:
|
||||
description: 'Number of days.'
|
||||
required: true
|
||||
default: 0
|
||||
minimum_runs:
|
||||
description: 'The minimum runs to keep for each workflow.'
|
||||
required: true
|
||||
default: 0
|
||||
delete_workflow_pattern:
|
||||
description: 'The name or filename of the workflow. if not set then it will target all workflows.'
|
||||
required: false
|
||||
delete_workflow_by_state_pattern:
|
||||
description: 'Remove workflow by state: active, deleted, disabled_fork, disabled_inactivity, disabled_manually'
|
||||
required: true
|
||||
default: "All"
|
||||
type: choice
|
||||
options:
|
||||
- "All"
|
||||
- active
|
||||
- deleted
|
||||
- disabled_inactivity
|
||||
- disabled_manually
|
||||
delete_run_by_conclusion_pattern:
|
||||
description: 'Remove workflow by conclusion: action_required, cancelled, failure, skipped, success'
|
||||
required: true
|
||||
default: "All"
|
||||
type: choice
|
||||
options:
|
||||
- "All"
|
||||
- action_required
|
||||
- cancelled
|
||||
- failure
|
||||
- skipped
|
||||
- success
|
||||
dry_run:
|
||||
description: 'Only log actions, do not perform any delete operations.'
|
||||
required: false
|
||||
|
||||
jobs:
|
||||
del_runs:
|
||||
runs-on: ubuntu-latest
|
||||
permissions:
|
||||
actions: write
|
||||
steps:
|
||||
- name: Delete workflow runs
|
||||
uses: Mattraks/delete-workflow-runs@v2
|
||||
with:
|
||||
token: ${{ github.token }}
|
||||
repository: ${{ github.repository }}
|
||||
retain_days: ${{ github.event.inputs.days }}
|
||||
keep_minimum_runs: ${{ github.event.inputs.minimum_runs }}
|
||||
delete_workflow_pattern: ${{ github.event.inputs.delete_workflow_pattern }}
|
||||
delete_workflow_by_state_pattern: ${{ github.event.inputs.delete_workflow_by_state_pattern }}
|
||||
delete_run_by_conclusion_pattern: ${{ github.event.inputs.delete_run_by_conclusion_pattern }}
|
||||
dry_run: ${{ github.event.inputs.dry_run }}
|
||||
84
.github/workflows/update-submodules.yml
vendored
84
.github/workflows/update-submodules.yml
vendored
|
|
@ -1,43 +1,59 @@
|
|||
---
|
||||
name: Update submodules!
|
||||
name: Update Submodules
|
||||
|
||||
#############################
|
||||
# Start the job on all push #
|
||||
#############################
|
||||
on:
|
||||
schedule:
|
||||
- cron: "0 0 */7 * *"
|
||||
workflow_dispatch:
|
||||
|
||||
###############
|
||||
# Set the Job #
|
||||
###############
|
||||
jobs:
|
||||
build:
|
||||
name: Update submodules
|
||||
update-submodules:
|
||||
runs-on: ubuntu-latest
|
||||
env:
|
||||
PARENT_REPOSITORY: 'qnblackcat/uYouPlus'
|
||||
CHECKOUT_BRANCH: 'main'
|
||||
PR_AGAINST_BRANCH: 'main'
|
||||
OWNER: 'qnblackcat'
|
||||
|
||||
steps:
|
||||
##########################
|
||||
# Checkout the code base #
|
||||
##########################
|
||||
- name: Checkout Code
|
||||
uses: actions/checkout@v3
|
||||
- name: Checkout code
|
||||
uses: actions/checkout@v3.6.0
|
||||
|
||||
####################################
|
||||
# Run the action against code base #
|
||||
####################################
|
||||
- name: run action
|
||||
id: run_action
|
||||
uses: qnblackcat/github-action-create-pr-parent-submodule@main
|
||||
with:
|
||||
github_token: ${{ secrets.RELEASE_HUB_SECRET }}
|
||||
parent_repository: ${{ env.PARENT_REPOSITORY }}
|
||||
checkout_branch: ${{ env.CHECKOUT_BRANCH }}
|
||||
pr_against_branch: ${{ env.PR_AGAINST_BRANCH }}
|
||||
owner: ${{ env.OWNER }}
|
||||
- name: Set up Git
|
||||
run: |
|
||||
git config --global user.email "actions@github.com"
|
||||
git config --global user.name "GitHub Actions"
|
||||
|
||||
- name: Update submodules
|
||||
run: |
|
||||
git submodule update --init --recursive --remote Tweaks/Alderis
|
||||
git add .
|
||||
git submodule update --init --recursive --remote Tweaks/DontEatMyContent
|
||||
git add .
|
||||
git submodule update --init --recursive --remote Tweaks/MrBeastify
|
||||
git add .
|
||||
git submodule update --init --recursive --remote Tweaks/PSHeader
|
||||
git add .
|
||||
git submodule update --init --recursive --remote Tweaks/Return-YouTube-Dislikes
|
||||
git add .
|
||||
git submodule update --init --recursive --remote Tweaks/YTABConfig
|
||||
git add .
|
||||
git submodule update --init --recursive --remote Tweaks/YTNoCommunityPosts
|
||||
git add .
|
||||
git submodule update --init --recursive --remote Tweaks/YTUHD
|
||||
git add .
|
||||
git submodule update --init --recursive --remote Tweaks/YTVideoOverlay
|
||||
git add .
|
||||
git submodule update --init --recursive --remote Tweaks/YouMute
|
||||
git add .
|
||||
git submodule update --init --recursive --remote Tweaks/YouPiP
|
||||
git add .
|
||||
git submodule update --init --recursive --remote Tweaks/YouQuality
|
||||
git add .
|
||||
git submodule update --init --recursive --remote Tweaks/YouTubeHeader
|
||||
git add .
|
||||
git submodule update --init --recursive --remote Tweaks/iSponsorBlock
|
||||
git add .
|
||||
git commit -m "updated submodules"
|
||||
git push origin
|
||||
continue-on-error: true
|
||||
|
||||
- name: Check exit code
|
||||
run: |
|
||||
exit_code=$?
|
||||
if [ $exit_code -ne 0 ]; then
|
||||
echo "Submodule update failed with exit code $exit_code"
|
||||
exit 1
|
||||
fi
|
||||
|
|
|
|||
10
.gitmodules
vendored
10
.gitmodules
vendored
|
|
@ -20,8 +20,8 @@
|
|||
branch = main
|
||||
[submodule "Tweaks/Return-YouTube-Dislikes"]
|
||||
path = Tweaks/Return-YouTube-Dislikes
|
||||
url = https://github.com/PoomSmart/Return-YouTube-Dislikes.git
|
||||
branch = main
|
||||
url = https://github.com/arichorn/Return-YouTube-Dislikes.git
|
||||
branch = uYouPlusExtra
|
||||
[submodule "Tweaks/YouTubeHeader"]
|
||||
path = Tweaks/YouTubeHeader
|
||||
url = https://github.com/PoomSmart/YouTubeHeader.git
|
||||
|
|
@ -54,3 +54,9 @@
|
|||
path = Tweaks/iSponsorBlock
|
||||
url = https://github.com/Galactic-Dev/iSponsorBlock.git
|
||||
branch = master
|
||||
[submodule "Tweaks/YTNoCommunityPosts"]
|
||||
path = Tweaks/YTNoCommunityPosts
|
||||
url = https://github.com/michael-winay/YTNoCommunityPosts.git
|
||||
[submodule "Tweaks/MrBeastify"]
|
||||
path = Tweaks/MrBeastify
|
||||
url = https://github.com/arichorn/MrBeastify.git
|
||||
|
|
|
|||
1
Bundles/MrBeastify.bundle
Symbolic link
1
Bundles/MrBeastify.bundle
Symbolic link
|
|
@ -0,0 +1 @@
|
|||
../Tweaks/MrBeastify/layout/Library/Application Support/MrBeastify.bundle
|
||||
1
Bundles/YTNoCommunityPosts.bundle
Symbolic link
1
Bundles/YTNoCommunityPosts.bundle
Symbolic link
|
|
@ -0,0 +1 @@
|
|||
../Tweaks/YTNoCommunityPosts/layout/Library/Application Support/YTNoCommunityPosts.bundle
|
||||
1
Bundles/YTVideoOverlay.bundle
Symbolic link
1
Bundles/YTVideoOverlay.bundle
Symbolic link
|
|
@ -0,0 +1 @@
|
|||
../Tweaks/YTVideoOverlay/layout/Library/Application Support/YTVideoOverlay.bundle
|
||||
1
Bundles/YouMute.bundle
Symbolic link
1
Bundles/YouMute.bundle
Symbolic link
|
|
@ -0,0 +1 @@
|
|||
../Tweaks/YouMute/layout/Library/Application Support/YouMute.bundle
|
||||
1
Bundles/YouQuality.bundle
Symbolic link
1
Bundles/YouQuality.bundle
Symbolic link
|
|
@ -0,0 +1 @@
|
|||
../Tweaks/YouQuality/layout/Library/Application Support/YouQuality.bundle
|
||||
55
Header.h
55
Header.h
|
|
@ -1,5 +1,6 @@
|
|||
#import "Tweaks/YouTubeHeader/YTAppDelegate.h"
|
||||
#import "Tweaks/YouTubeHeader/YTPlayerViewController.h"
|
||||
#import "Tweaks/YouTubeHeader/YTQTMButton.h"
|
||||
#import <UIKit/UIKit.h>
|
||||
#import <Foundation/Foundation.h>
|
||||
#import <objc/runtime.h>
|
||||
|
|
@ -15,6 +16,7 @@
|
|||
#import "Tweaks/YouTubeHeader/YTIPivotBarSupportedRenderers.h"
|
||||
#import "Tweaks/YouTubeHeader/YTIPivotBarRenderer.h"
|
||||
#import "Tweaks/YouTubeHeader/YTIBrowseRequest.h"
|
||||
#import "Tweaks/YouTubeHeader/YTColorPalette.h"
|
||||
#import "Tweaks/YouTubeHeader/YTCommonColorPalette.h"
|
||||
#import "Tweaks/YouTubeHeader/ASCollectionView.h"
|
||||
#import "Tweaks/YouTubeHeader/YTPlayerOverlay.h"
|
||||
|
|
@ -25,6 +27,10 @@
|
|||
#import "Tweaks/YouTubeHeader/YTAlertView.h"
|
||||
#import "Tweaks/YouTubeHeader/YTISectionListRenderer.h"
|
||||
#import "Tweaks/YouTubeHeader/YTIMenuConditionalServiceItemRenderer.h"
|
||||
#import "Tweaks/YouTubeHeader/YTPivotBarItemView.h"
|
||||
#import "Tweaks/YouTubeHeader/YTVideoWithContextNode.h" // YouTube-X
|
||||
#import "Tweaks/YouTubeHeader/ELMCellNode.h" // YouTube-X
|
||||
#import "Tweaks/YouTubeHeader/ELMNodeController.h" // YouTube-X
|
||||
|
||||
#define LOC(x) [tweakBundle localizedStringForKey:x value:nil table:nil]
|
||||
#define YT_BUNDLE_ID @"com.google.ios.youtube"
|
||||
|
|
@ -63,6 +69,9 @@
|
|||
@interface boolSettingsVC : UIViewController
|
||||
@end
|
||||
|
||||
@interface YTPlaybackButton : UIControl
|
||||
@end
|
||||
|
||||
@interface PlayerManager : NSObject
|
||||
- (float)progress;
|
||||
@end
|
||||
|
|
@ -75,6 +84,12 @@
|
|||
@property UIButton *downloadsButton;
|
||||
@end
|
||||
|
||||
// Buttons
|
||||
@interface YTRightNavigationButtons : UIView
|
||||
@property YTQTMButton *notificationButton;
|
||||
@property YTQTMButton *sponsorBlockButton;
|
||||
@end
|
||||
|
||||
// YTSpeed
|
||||
@interface YTVarispeedSwitchControllerOption : NSObject
|
||||
- (id)initWithTitle:(id)title rate:(float)rate;
|
||||
|
|
@ -99,16 +114,6 @@
|
|||
- (void)setRate:(float)rate;
|
||||
@end
|
||||
|
||||
// iOS16 fix
|
||||
@interface OBPrivacyLinkButton : UIButton
|
||||
- (instancetype)initWithCaption:(NSString *)caption
|
||||
buttonText:(NSString *)buttonText
|
||||
image:(UIImage *)image
|
||||
imageSize:(CGSize)imageSize
|
||||
useLargeIcon:(BOOL)useLargeIcon
|
||||
displayLanguage:(NSString *)displayLanguage;
|
||||
@end
|
||||
|
||||
// uYouLocal fix
|
||||
@interface YTLocalPlaybackController : NSObject
|
||||
- (id)activeVideo;
|
||||
|
|
@ -119,7 +124,6 @@
|
|||
@property(nonatomic, strong) id downloadsVC;
|
||||
@end
|
||||
|
||||
|
||||
// BigYTMiniPlayer
|
||||
@interface YTMainAppVideoPlayerOverlayView : UIView
|
||||
- (UIViewController *)_viewControllerForAncestor;
|
||||
|
|
@ -131,9 +135,6 @@
|
|||
// YTAutoFullScreen
|
||||
@interface YTPlayerViewController (YTAFS)
|
||||
- (void)autoFullscreen;
|
||||
// DontEatMycontent
|
||||
- (id)activeVideoPlayerOverlay;
|
||||
- (id)playerView;
|
||||
// YTSpeed
|
||||
@property id activeVideo;
|
||||
@property float playbackRate;
|
||||
|
|
@ -141,6 +142,24 @@
|
|||
@end
|
||||
|
||||
// App Theme
|
||||
@interface YTColor : NSObject
|
||||
+ (UIColor *)white1;
|
||||
+ (UIColor *)white2;
|
||||
+ (UIColor *)white3;
|
||||
+ (UIColor *)white4;
|
||||
+ (UIColor *)white5;
|
||||
+ (UIColor *)black0;
|
||||
+ (UIColor *)black1;
|
||||
+ (UIColor *)black2;
|
||||
+ (UIColor *)black3;
|
||||
+ (UIColor *)black4;
|
||||
+ (UIColor *)blackPure;
|
||||
+ (UIColor *)grey1;
|
||||
+ (UIColor *)grey2;
|
||||
+ (UIColor *)white1Alpha98;
|
||||
+ (UIColor *)white1Alpha95;
|
||||
@end
|
||||
|
||||
@interface YCHLiveChatView : UIView
|
||||
@end
|
||||
|
||||
|
|
@ -150,6 +169,9 @@
|
|||
@interface YTRelatedVideosView : UIView
|
||||
@end
|
||||
|
||||
@interface YTTopAlignedView : UIView
|
||||
@end
|
||||
|
||||
@interface ELMView : UIView
|
||||
@end
|
||||
|
||||
|
|
@ -168,6 +190,9 @@
|
|||
@interface _ASDisplayView : UIView
|
||||
@end
|
||||
|
||||
@interface YTPivotBarIndicatorView : UIView
|
||||
@end
|
||||
|
||||
@interface YTCommentDetailHeaderCell : UIView
|
||||
@end
|
||||
|
||||
|
|
@ -191,4 +216,4 @@
|
|||
|
||||
@interface settingsReorderTable : UIViewController
|
||||
@property(nonatomic, strong) UITableView *tableView;
|
||||
@end
|
||||
@end
|
||||
|
|
|
|||
10
Makefile
10
Makefile
|
|
@ -1,4 +1,4 @@
|
|||
export TARGET = iphone:clang:15.5:14.0
|
||||
export TARGET = iphone:clang:16.2:14.0
|
||||
export ARCHS = arm64
|
||||
|
||||
export libcolorpicker_ARCHS = arm64
|
||||
|
|
@ -14,7 +14,7 @@ MODULES = jailed
|
|||
endif
|
||||
|
||||
ifndef YOUTUBE_VERSION
|
||||
YOUTUBE_VERSION = 18.32.2
|
||||
YOUTUBE_VERSION = 18.34.5
|
||||
endif
|
||||
ifndef UYOU_VERSION
|
||||
UYOU_VERSION = 3.0.1
|
||||
|
|
@ -26,10 +26,10 @@ TWEAK_NAME = uYouPlus
|
|||
DISPLAY_NAME = YouTube
|
||||
BUNDLE_ID = com.google.ios.youtube
|
||||
|
||||
$(TWEAK_NAME)_FILES = uYouPlus.xm Settings.xm
|
||||
$(TWEAK_NAME)_FILES = uYouPlus.xm Settings.xm $(shell find Source -name '*.xm' -o -name '*.x' -o -name '*.m')
|
||||
$(TWEAK_NAME)_FRAMEWORKS = UIKit Security
|
||||
$(TWEAK_NAME)_CFLAGS = -fobjc-arc -DTWEAK_VERSION=\"$(PACKAGE_VERSION)\"
|
||||
$(TWEAK_NAME)_INJECT_DYLIBS = Tweaks/uYou/Library/MobileSubstrate/DynamicLibraries/uYou.dylib $(THEOS_OBJ_DIR)/libFLEX.dylib $(THEOS_OBJ_DIR)/iSponsorBlock.dylib $(THEOS_OBJ_DIR)/YouPiP.dylib $(THEOS_OBJ_DIR)/YouTubeDislikesReturn.dylib $(THEOS_OBJ_DIR)/YTABConfig.dylib $(THEOS_OBJ_DIR)/YTUHD.dylib $(THEOS_OBJ_DIR)/DontEatMyContent.dylib
|
||||
$(TWEAK_NAME)_INJECT_DYLIBS = Tweaks/uYou/Library/MobileSubstrate/DynamicLibraries/uYou.dylib $(THEOS_OBJ_DIR)/libFLEX.dylib $(THEOS_OBJ_DIR)/iSponsorBlock.dylib $(THEOS_OBJ_DIR)/YouPiP.dylib $(THEOS_OBJ_DIR)/YouTubeDislikesReturn.dylib $(THEOS_OBJ_DIR)/YTABConfig.dylib $(THEOS_OBJ_DIR)/YTUHD.dylib $(THEOS_OBJ_DIR)/DontEatMyContent.dylib $(THEOS_OBJ_DIR)/MrBeastify.dylib $(THEOS_OBJ_DIR)/YTNoCommunityPosts.dylib $(THEOS_OBJ_DIR)/YTVideoOverlay.dylib $(THEOS_OBJ_DIR)/YouMute.dylib $(THEOS_OBJ_DIR)/YouQuality.dylib
|
||||
$(TWEAK_NAME)_EMBED_LIBRARIES = $(THEOS_OBJ_DIR)/libcolorpicker.dylib
|
||||
$(TWEAK_NAME)_EMBED_FRAMEWORKS = $(_THEOS_LOCAL_DATA_DIR)/$(THEOS_OBJ_DIR_NAME)/install/Library/Frameworks/Alderis.framework
|
||||
$(TWEAK_NAME)_EMBED_BUNDLES = $(wildcard Bundles/*.bundle)
|
||||
|
|
@ -37,7 +37,7 @@ $(TWEAK_NAME)_EMBED_EXTENSIONS = $(wildcard Extensions/*.appex)
|
|||
|
||||
include $(THEOS)/makefiles/common.mk
|
||||
ifneq ($(JAILBROKEN),1)
|
||||
SUBPROJECTS += Tweaks/Alderis Tweaks/FLEXing/libflex Tweaks/iSponsorBlock Tweaks/Return-YouTube-Dislikes Tweaks/YouPiP Tweaks/YTABConfig Tweaks/YTUHD Tweaks/DontEatMyContent Tweaks/YTVideoOverlay Tweaks/YouMute Tweaks/YouQuality
|
||||
SUBPROJECTS += Tweaks/Alderis Tweaks/FLEXing/libflex Tweaks/iSponsorBlock Tweaks/Return-YouTube-Dislikes Tweaks/YouPiP Tweaks/YTABConfig Tweaks/YTUHD Tweaks/DontEatMyContent Tweaks/MrBeastify Tweaks/YTNoCommunityPosts Tweaks/YTVideoOverlay Tweaks/YouMute Tweaks/YouQuality
|
||||
include $(THEOS_MAKE_PATH)/aggregate.mk
|
||||
endif
|
||||
include $(THEOS_MAKE_PATH)/tweak.mk
|
||||
|
|
|
|||
100
README.md
100
README.md
|
|
@ -1,5 +1,4 @@
|
|||

|
||||
***
|
||||
|
||||
<p align="center">
|
||||
<img src="https://img.shields.io/badge/Platform-iOS%20%7C%20iPadOS%2014.0%2B-yellow" alt="Badge"/>
|
||||
|
|
@ -11,17 +10,17 @@
|
|||
</p>
|
||||
|
||||
<p align="center">
|
||||
<a href="https://github.com/qnblackcat/uYouPlus/releases/latest"><img src="https://custom-icon-badges.demolab.com/github/v/release/qnblackcat/uYouPlus?color=brightgreen&label=Latest%20release" alt="Badge"></img></a>
|
||||
<a href="https://github.com/qnblackcat/uYouPlus/releases/latest"><img src="https://img.shields.io/github/downloads/qnblackcat/uYouPlus/total?label=Download" alt="Badge"></img></a>
|
||||
<a href="https://github.com/qnblackcat/uYouPlus/commit"><img src="https://custom-icon-badges.demolab.com/github/last-commit/qnblackcat/uYouPlus?logo=history&logoColor=white&label=Last commit" alt="Badge"></img></a>
|
||||
<a href="https://github.com/qnblackcat/uYouPlus/issues"><img src="https://custom-icon-badges.demolab.com/github/issues-raw/qnblackcat/uYouPlus?logo=issue-opened&label=Issues" alt="Badge"></img></a>
|
||||
<a href="https://github.com/arichorn/uYouPlusExtra/releases/latest"><img src="https://custom-icon-badges.demolab.com/github/v/release/arichorn/uYouPlusExtra?color=brightgreen&label=Latest%20release" alt="Badge"></img></a>
|
||||
<a href="https://github.com/arichorn/uYouPlusExtra/releases/latest"><img src="https://img.shields.io/github/downloads/qnblackcat/uYouPlus/total?label=Download" alt="Badge"></img></a>
|
||||
<a href="https://github.com/arichorn/uYouPlusExtra/commit"><img src="https://custom-icon-badges.demolab.com/github/last-commit/arichorn/uYouPlusExtra?logo=history&logoColor=white&label=Last commit" alt="Badge"></img></a>
|
||||
<a href="https://github.com/arichorn/uYouPlusExtra/issues"><img src="https://custom-icon-badges.demolab.com/github/issues-raw/arichorn/uYouPlusExtra?logo=issue-opened&label=Issues" alt="Badge"></img></a>
|
||||
|
||||
</p>
|
||||
|
||||
<p align="center">
|
||||
<img src="https://img.shields.io/github/stars/qnblackcat/uYouPlus?style=social" alt="Badge"/>
|
||||
<img src="https://img.shields.io/github/forks/qnblackcat/uYouPlus?style=social" alt="Badge"/>
|
||||
<a href="https://github.com/qnblackcat/uYouPlus#support-the-developers"><img src="https://img.shields.io/badge/-Support-lightgrey?style=social&logo=paypal" alt="Badge"></img></a>
|
||||
<img src="https://img.shields.io/github/stars/arichorn/uYouPlusExtra?style=social" alt="Badge"/>
|
||||
<img src="https://img.shields.io/github/forks/arichorn/uYouPlusExtra?style=social" alt="Badge"/>
|
||||
<a href="https://github.com/arichorn/uYouPlusExtra#support-the-developers"><img src="https://img.shields.io/badge/-Support-lightgrey?style=social&logo=paypal" alt="Badge"></img></a>
|
||||
</p>
|
||||
|
||||
# Table of Contents
|
||||
|
|
@ -46,6 +45,12 @@
|
|||
</a>
|
||||
<h4 align='center'><a href='https://twitter.com/miro92'>MiRO92</a></h4>
|
||||
</td>
|
||||
<td id='qnblackcat'>
|
||||
<a href='https://github.com/qnblackcat'>
|
||||
<img src='https://github.com/qnblackcat.png' width='140px;'>
|
||||
</a>
|
||||
<h4 align='center'><a href='https://twitter.com/qnblackcat'>qnblackcat</a></h4>
|
||||
</td>
|
||||
<td id='poomsmart'>
|
||||
<a href='https://github.com/PoomSmart'>
|
||||
<img src='https://github.com/PoomSmart.png' width='140px;'>
|
||||
|
|
@ -64,15 +69,15 @@
|
|||
</a>
|
||||
<h4 align='center'><a href='https://twitter.com/bandarhl'>BandarHelal</a></h4>
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td id='galactic-dev'>
|
||||
<a href='https://github.com/Galactic-Dev'>
|
||||
<img src='https://github.com/Galactic-Dev.png' width='140px;'>
|
||||
</a>
|
||||
<h4 align='center'><a href='https://twitter.com/dev_galactic'>galactic</a></h4>
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td id='julioverne'>
|
||||
<a href='https://github.com/julioverne'>
|
||||
<img src='https://github.com/julioverne.png' width='140px;'>
|
||||
|
|
@ -97,15 +102,15 @@
|
|||
</a>
|
||||
<h4 align='center'><a href='https://twitter.com/therealFoxster'>Foxster</a></h4>
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td id='ichitaso'>
|
||||
<a href='https://github.com/ichitaso'>
|
||||
<img src='https://github.com/ichitaso.png' width='140px;'>
|
||||
</a>
|
||||
<h4 align='center'><a href='https://twitter.com/ichitaso'>ichitaso</a></h4>
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td id='ahmed-bafkir'>
|
||||
<a href='https://github.com/AhmedBafkir'>
|
||||
<img src='https://github.com/AhmedBafkir.png' width='140px;'>
|
||||
|
|
@ -168,6 +173,10 @@
|
|||
|
||||
15. **YTVideoOverlay**: add buttons to overlay the video.
|
||||
|
||||
16. **YTNoCommunityPosts**: Tweak to disable all Community Posts on the YouTube app. **<-- uYouPlusExtra Exclusive Feature (may change)**
|
||||
|
||||
17. **LowContrastMode**: this tweak allows users to darken the text in the YouTube app. **<-- uYouPlusExtra Exclusive Feature (may change)**
|
||||
|
||||
</details>
|
||||
|
||||
# Known issues
|
||||
|
|
@ -178,36 +187,36 @@
|
|||
|
||||
# Download
|
||||
|
||||
- **uYouPlus** (or you can call it uYou+) requires iOS or iPadOS 14.0 or later. The latest version of **uYouPlus** can be found in the [Release tab](https://github.com/qnblackcat/uYouPlus/releases/latest).
|
||||
- **uYouPlusExtra** (or you can just call it uYou+) requires iOS or iPadOS 14.0 or later. The latest version of **uYouPlusExtra** ipa can be found in the [Release tab](https://github.com/arichorn/uYouPlusExtra/releases/latest).
|
||||
|
||||
<!-- - For AltStore user:
|
||||
- For AltStore user:
|
||||
|
||||
- My official AltStore repo: https://qnblackcat.github.io/AltStore/
|
||||
- My official AltStore repo: https://therealfoxster.github.io/altsource-viewer/index.html?source=https://raw.githubusercontent.com/arichorn/arichorn.github.io/main/apps.json
|
||||
|
||||
- [Open in AltStore (v18.14.1-3.0)](https://tinyurl.com/yv6wrxjz) - It will take a while to install because AltStore needs to download the IPA first. -->
|
||||
- [Open in AltStore (v18.34.5-3.0.1)](https://tinyurl.com/mr3nrdz2) - It will take a while to install because AltStore needs to download the IPA first.
|
||||
|
||||
- Version info: _(last update: Aug 5)_
|
||||
- Version info: _(last update: Sep 5)_
|
||||
|
||||
<details>
|
||||
<summary>Expand ℹ️</summary>
|
||||
|
||||
| **Tweaks/App** | **Developer** | **Version** | **Open source** |
|
||||
| - | - | :-: | :-: |
|
||||
| **YouTube** | Google Inc | 18.30.7 | ✖︎ |
|
||||
| [uYou](https://github.com/MiRO92/uYou-for-YouTube) | [MiRO92](https://twitter.com/miro92) | 3.0 | ✖︎ |
|
||||
| **YouTube** | Google Inc | 18.34.5 | ✖︎ |
|
||||
| [uYou](https://github.com/MiRO92/uYou-for-YouTube) | [MiRO92](https://twitter.com/miro92) | 3.0.1 | ✖︎ |
|
||||
| **Open in YouTube** | [CokePokes](https://github.com/CokePokes) | 1.2 | [✔︎](https://github.com/CokePokes/YoutubeExtensions) |
|
||||
| **iSponsorBlock** | [Galactic-Dev](https://github.com/Galactic-Dev) | 1.0-15 | [✔︎](https://github.com/Galactic-Dev/iSponsorBlock) |
|
||||
| **iSponsorBlock** | [Galactic-Dev](https://github.com/Galactic-Dev) | 1.2 | [✔︎](https://github.com/Galactic-Dev/iSponsorBlock) |
|
||||
| **BigYTMiniPlayer** | [Galactic-Dev](https://github.com/Galactic-Dev) | 1.0-1 | [✔︎](https://github.com/Galactic-Dev/BigYTMiniPlayer) |
|
||||
| **YTNoHoverCards** | [level3tjg](https://twitter.com/level3tjg) | 0.0.3 | [✔︎](https://github.com/level3tjg/YTNoHoverCards) |
|
||||
| **YTMiniplayerEnabler** | [level3tjg](https://twitter.com/level3tjg) | 0.0.2 | [✔︎](https://github.com/level3tjg/YTMiniplayerEnabler) |
|
||||
| **DontEatMyContent** | [therealFoxster](https://github.com/therealFoxster) | 1.0.6 | [✔︎](https://github.com/therealFoxster/DontEatMyContent) |
|
||||
| **DontEatMyContent** | [therealFoxster](https://github.com/therealFoxster) | 1.0.10 | [✔︎](https://github.com/therealFoxster/DontEatMyContent) |
|
||||
| **YTSpeed** | [Lyvendia](https://github.com/Lyvendia) | 1.0.1 | [✔︎](https://github.com/Lyvendia/YTSpeed) |
|
||||
| **YTCastConfirm** | [JamieBerghmans](https://github.com/JamieBerghmans) | 1.0.0 | [✔︎](https://github.com/JamieBerghmans/YTCastConfirm) |
|
||||
| **Alderis Color Picker** | [HASHBANG Productions](https://github.com/hbang) | 1.2| [✔︎](https://github.com/hbang/Alderis) |
|
||||
| **YTUHD** | [PoomSmart](https://twitter.com/poomsmart) | 1.3.5-1 | [✔︎](https://github.com/PoomSmart/YTUHD) |
|
||||
| **YouPiP** | [PoomSmart](https://twitter.com/poomsmart) | 1.7.19-1 | [✔︎](https://github.com/PoomSmart/YouPiP) |
|
||||
| **YTUHD** | [PoomSmart](https://twitter.com/poomsmart) | 1.4.0 | [✔︎](https://github.com/PoomSmart/YTUHD) |
|
||||
| **YouPiP** | [PoomSmart](https://twitter.com/poomsmart) | 1.7.20 | [✔︎](https://github.com/PoomSmart/YouPiP) |
|
||||
| **IAmYouTube** | [PoomSmart](https://twitter.com/poomsmart) | 1.2.0 | [✔︎](https://github.com/PoomSmart/IAmYouTube) |
|
||||
| **YTABConfig** | [PoomSmart](https://twitter.com/poomsmart) | 1.5.0 | [✔︎](https://github.com/PoomSmart/YTABConfig) |
|
||||
| **YTABConfig** | [PoomSmart](https://twitter.com/poomsmart) | 1.5.0-1 | [✔︎](https://github.com/PoomSmart/YTABConfig) |
|
||||
| **YTReExplore** | [PoomSmart](https://twitter.com/poomsmart) | 1.0.2 | [✔︎](https://github.com/PoomSmart/YTReExplore) |
|
||||
| **NoYTPremium** | [PoomSmart](https://twitter.com/poomsmart) | 1.0.4 | [✔︎](https://github.com/PoomSmart/NoYTPremium) |
|
||||
| **YTNoPaidPromo** | [PoomSmart](https://twitter.com/poomsmart) | 1.0.0 | [✔︎](https://github.com/PoomSmart/YTNoPaidPromo) |
|
||||
|
|
@ -216,15 +225,24 @@
|
|||
| **YouMute** | [PoomSmart](https://twitter.com/poomsmart) | 1.2.1-2 | [✔︎](https://github.com/PoomSmart/YouMute) |
|
||||
| **YouQuality** | [PoomSmart](https://twitter.com/poomsmart) | 1.1.4 | [✔︎](https://github.com/PoomSmart/YouQuality) |
|
||||
| **YTVideoOverlay** | [PoomSmart](https://twitter.com/poomsmart) | 1.1.0-2 | [✔︎](https://github.com/PoomSmart/YTVideoOverlay) |
|
||||
| **YTNoCommunityPosts** | [michael-winay](https://github.com/michael-winay) | 0.0.2 | [✔︎](https://github.com/michael-winay/YTNoCommunityPosts) |
|
||||
| **LowContrastMode** | [arichorn](https://github.com/arichorn) | 1.4.2 | [✔︎](https://github.com/arichorn/YTLowContrastMode) |
|
||||
|
||||
</details>
|
||||
|
||||
# uYou Tweak Compatibility List
|
||||
|
||||
| Developer | Tweak Name and Version | App Version Compatibility | iOS Version Compatibility |
|
||||
|-----------|:----------------------:|:-------------------------:|:-------------------------:|
|
||||
| MiRO92 | uYou 2.1/2.3~1 | Works on v16.42.3-18.01.6 | Works on iOS13-iOS15 |
|
||||
| MiRO92 | uYou 3.0 | Works on v18.06.6-18.18.2 | Works on iOS14-iOS15 |
|
||||
| MiRO92 | uYou 3.0.1 | Works on v18.06.6-latest | Works on iOS14-iOS16 |
|
||||
|
||||
# Installation
|
||||
See [Installation - Wiki](https://github.com/qnblackcat/uYouPlus/wiki/Installation).
|
||||
|
||||
# Support the developers
|
||||
- [**MiRO92**](https://twitter.com/miro92): https://github.com/MiRO92/uYou-for-YouTube#support
|
||||
- [**Poomsmart**](https://twitter.com/poomsmart): https://poomsmart.github.io
|
||||
- [**level3tjg**](https://twitter.com/level3tjg): https://ko-fi.com/level3tjg
|
||||
- [**BandarHL**](https://twitter.com/bandarhl): https://www.paypal.com/paypalme/BandarHL
|
||||
- [**julioverne**](https://twitter.com/ijulioverne): https://www.patreon.com/julioverne
|
||||
|
|
@ -238,4 +256,30 @@ See [FAQ - Wiki](https://github.com/qnblackcat/uYouPlus/wiki/FAQ).
|
|||
|
||||
# Building (optional)
|
||||
|
||||
See [Building - Wiki](https://github.com/qnblackcat/uYouPlus/wiki/Building).
|
||||
See [qnblackcat/Building - Wiki](https://github.com/qnblackcat/uYouPlus/wiki/Building)
|
||||
or [arichorn/Building - Wiki](https://github.com/arichorn/uYouPlusExtra/wiki/Building).
|
||||
|
||||
<details>
|
||||
<summary>Balackburn's YTLitePlus</summary>
|
||||
# change from uYouPlus/uYouPlusExtra to YTLitePlus (optional)
|
||||
|
||||
hello, this is here to show yall this tweak. I've been seeing the YTLitePlus tweak on reddit for quite some time now and decided to join in. before you download the tweak you must look at the Pros and Cons below before downloading because it lets you know more about the tweak.
|
||||
|
||||
https://github.com/Balackburn/YTLitePlus/releases
|
||||
|
||||
**Pros**
|
||||
|
||||
- YTLitePlus is stable and more tweakable then uYouPlus/uYouPlusExtra.
|
||||
|
||||
- YTLitePlus has more features in YTLite Settings that uYouPlusExtra doesn't have.
|
||||
|
||||
- YTLitePlus has a lightweight Version of the App Version Spoofer which makes it easier to use.
|
||||
|
||||
- YTLitePlus does not make your device heat up unlike uYouPlusExtra.
|
||||
|
||||
**Cons**
|
||||
|
||||
- No Video Downloading in YTLitePlus.
|
||||
|
||||
- Video Quality on WiFi not in YTLitePlus.
|
||||
</details>
|
||||
|
|
|
|||
20
SECURITY.md
Normal file
20
SECURITY.md
Normal file
|
|
@ -0,0 +1,20 @@
|
|||
# Security Policy for uYouPlus Developers
|
||||
If I verify a reported security vulnerability, my policy is:
|
||||
|
||||
- the uYouPlusExtra Developer will patch the current main branch, as well as the immediate prior minor release branch.
|
||||
|
||||
- the Contributors are allowed to patch the current main branch with custom features and the ability to add new & updated Localizable Strings.
|
||||
|
||||
- After fully patching the main branch, the uYouPlusExtra Developer will issue a new release for the main branch along with LTS release branches.
|
||||
|
||||
## Supported Versions
|
||||
|
||||
these versions of the project are
|
||||
currently being supported with security/feature updates.
|
||||
|
||||
| Version | LTS Support of the uYouPlusExtra Tweak | YT Version Supported by Google | App Stability |
|
||||
| ------- | -------------------------------------- | ------------------------------ | -------------------- |
|
||||
| [latest](https://github.com/arichorn/uYouPlusExtra/releases/latest) | ✅ | ✅ | The latest version is stable! |
|
||||
| [17.49.6-2.3.1 LTS](https://github.com/arichorn/uYouPlusExtra/releases/tag/v17.49.6-2.3.1-F4) | ✅ | ✅ | This version is Stable, this version may be unstable to some if using it on iOS 17 Beta. |
|
||||
| [17.38.10-2.1 LTS](https://github.com/arichorn/uYouPlusExtra/releases/latest) | N/A | ✅ | This new LTS Release will soon to replace **16.42.3-2.1** next year. |
|
||||
| [16.42.3-2.1 LTS](https://github.com/arichorn/uYouPlusExtra/releases/tag/v16.42.3-2.1-F19) | ❌ | ✅ until 2024+ | Unstable if you are using iOS 16 or later, Stage Manager won't work correctly when playing videos in the video player, The App Pivot Bar does not hide when playing videos in iOS 16+ due to iOS/iPadOS Changes but this version can still get new features from Google like for these new ones that were recently added in as an example --> (Shorts, Continue Watching Section, Watch It Again Section, Handles & etc.) so overrall this YouTube Version is still supported by Google. |
|
||||
1262
Settings.xm
1262
Settings.xm
File diff suppressed because it is too large
Load diff
43
Source/LowContrastMode.swift
Normal file
43
Source/LowContrastMode.swift
Normal file
|
|
@ -0,0 +1,43 @@
|
|||
import UIKit
|
||||
|
||||
class ViewController: UIViewController {
|
||||
|
||||
@IBOutlet weak var textField: UITextField!
|
||||
@IBOutlet weak var colorButton: UIButton!
|
||||
|
||||
var textColor: UIColor = (red: 0.56, green: 0.56, blue: 0.56, alpha: 1.00)
|
||||
|
||||
override func viewDidLoad() {
|
||||
super.viewDidLoad()
|
||||
|
||||
// Configure Text Field
|
||||
textField.placeholder = "YouTube"
|
||||
|
||||
// Configure Color Button
|
||||
colorButton.setTitleColor(textColor, for: .normal)
|
||||
}
|
||||
|
||||
@IBAction func onColorButtonTap(_ sender: Any) {
|
||||
let colorPicker = UIColorPickerViewController()
|
||||
colorPicker.delegate = self
|
||||
present(colorPicker, animated: true, completion: nil)
|
||||
}
|
||||
}
|
||||
|
||||
extension ViewController: UITextFieldDelegate {
|
||||
|
||||
func textFieldShouldReturn(_ textField: UITextField) -> Bool {
|
||||
textField.resignFirstResponder()
|
||||
return true
|
||||
}
|
||||
}
|
||||
|
||||
extension ViewController: UIColorPickerViewControllerDelegate {
|
||||
|
||||
func colorPickerViewControllerDidSelectColor(_ viewController: UIColorPickerViewController) {
|
||||
textColor = viewController.selectedColor
|
||||
colorButton.setTitleColor(textColor, for: .normal)
|
||||
}
|
||||
|
||||
func colorPickerViewControllerDidFinish(_ viewController: UIColorPickerViewController) {
|
||||
dismiss
|
||||
458
Source/LowContrastMode.xm
Normal file
458
Source/LowContrastMode.xm
Normal file
|
|
@ -0,0 +1,458 @@
|
|||
#import "../Header.h"
|
||||
|
||||
//
|
||||
static BOOL IsEnabled(NSString *key) {
|
||||
return [[NSUserDefaults standardUserDefaults] boolForKey:key];
|
||||
}
|
||||
static int contrastMode() {
|
||||
return [[NSUserDefaults standardUserDefaults] integerForKey:@"lcm"];
|
||||
}
|
||||
static BOOL lowContrastMode() {
|
||||
return IsEnabled(@"lowContrastMode_enabled") && contrastMode() == 0;
|
||||
}
|
||||
/*
|
||||
static BOOL customContrastMode() {
|
||||
return IsEnabled(@"lowContrastMode_enabled") && contrastMode() == 1;
|
||||
}
|
||||
*/
|
||||
|
||||
UIColor *lcmHexColor;
|
||||
|
||||
%group gLowContrastMode // Low Contrast Mode v1.4.2 (Compatible with only YouTube v16.05.7-v17.38.10)
|
||||
%hook UIColor
|
||||
+ (UIColor *)whiteColor { // Dark Theme Color
|
||||
return [UIColor colorWithRed: 0.56 green: 0.56 blue: 0.56 alpha: 1.00];
|
||||
}
|
||||
+ (UIColor *)lightTextColor {
|
||||
return [UIColor colorWithRed: 0.56 green: 0.56 blue: 0.56 alpha: 1.00];
|
||||
}
|
||||
+ (UIColor *)placeholderTextColor {
|
||||
return [UIColor colorWithRed: 0.56 green: 0.56 blue: 0.56 alpha: 1.00];
|
||||
}
|
||||
+ (UIColor *)labelColor {
|
||||
return [UIColor colorWithRed: 0.56 green: 0.56 blue: 0.56 alpha: 1.00];
|
||||
}
|
||||
+ (UIColor *)secondaryLabelColor {
|
||||
return [UIColor colorWithRed: 0.56 green: 0.56 blue: 0.56 alpha: 1.00];
|
||||
}
|
||||
+ (UIColor *)tertiaryLabelColor {
|
||||
return [UIColor colorWithRed: 0.56 green: 0.56 blue: 0.56 alpha: 1.00];
|
||||
}
|
||||
+ (UIColor *)quaternaryLabelColor {
|
||||
return [UIColor colorWithRed: 0.56 green: 0.56 blue: 0.56 alpha: 1.00];
|
||||
}
|
||||
%end
|
||||
%hook YTCommonColorPalette
|
||||
- (UIColor *)textPrimary {
|
||||
return self.pageStyle == 1 ? [UIColor whiteColor] : %orig;
|
||||
}
|
||||
- (UIColor *)textSecondary {
|
||||
return self.pageStyle == 1 ? [UIColor whiteColor] : %orig;
|
||||
}
|
||||
- (UIColor *)overlayTextPrimary {
|
||||
return self.pageStyle == 1 ? [UIColor whiteColor] : %orig;
|
||||
}
|
||||
- (UIColor *)overlayTextSecondary {
|
||||
return self.pageStyle == 1 ? [UIColor whiteColor] : %orig;
|
||||
}
|
||||
- (UIColor *)iconActive {
|
||||
return self.pageStyle == 1 ? [UIColor whiteColor] : %orig;
|
||||
}
|
||||
- (UIColor *)iconActiveOther {
|
||||
return self.pageStyle == 1 ? [UIColor whiteColor] : %orig;
|
||||
}
|
||||
- (UIColor *)brandIconActive {
|
||||
return self.pageStyle == 1 ? [UIColor whiteColor] : %orig;
|
||||
}
|
||||
- (UIColor *)staticBrandWhite {
|
||||
return self.pageStyle == 1 ? [UIColor whiteColor] : %orig;
|
||||
}
|
||||
- (UIColor *)overlayIconActiveOther {
|
||||
return self.pageStyle == 1 ? [UIColor whiteColor] : %orig;
|
||||
}
|
||||
%end
|
||||
%hook YTColor
|
||||
+ (UIColor *)white2 {
|
||||
return [UIColor whiteColor];
|
||||
}
|
||||
+ (UIColor *)white3 {
|
||||
return [UIColor whiteColor];
|
||||
}
|
||||
+ (UIColor *)white4 {
|
||||
return [UIColor whiteColor];
|
||||
}
|
||||
+ (UIColor *)white5 {
|
||||
return [UIColor whiteColor];
|
||||
}
|
||||
%end
|
||||
%hook QTMColorGroup
|
||||
- (UIColor *)tint100 {
|
||||
return [UIColor whiteColor];
|
||||
}
|
||||
- (UIColor *)tint300 {
|
||||
return [UIColor whiteColor];
|
||||
}
|
||||
- (UIColor *)bodyTextColor {
|
||||
return [UIColor whiteColor];
|
||||
}
|
||||
- (UIColor *)bodyTextColorOnLighterColor {
|
||||
return [UIColor whiteColor];
|
||||
}
|
||||
- (UIColor *)bodyTextColorOnRegularColor {
|
||||
return [UIColor whiteColor];
|
||||
}
|
||||
- (UIColor *)bodyTextColorOnDarkerColor {
|
||||
return [UIColor whiteColor];
|
||||
}
|
||||
- (UIColor *)bodyTextColorOnAccentColor {
|
||||
return [UIColor whiteColor];
|
||||
}
|
||||
- (UIColor *)bodyTextColorOnOnBrightAccentColor {
|
||||
return [UIColor whiteColor];
|
||||
}
|
||||
- (UIColor *)lightBodyTextColor {
|
||||
return [UIColor whiteColor];
|
||||
}
|
||||
- (UIColor *)buttonBackgroundColor {
|
||||
return [UIColor whiteColor];
|
||||
}
|
||||
%end
|
||||
%hook YTQTMButton
|
||||
- (void)setImage:(UIImage *)image {
|
||||
UIImage *currentImage = [image imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate];
|
||||
[self setTintColor:[UIColor whiteColor]];
|
||||
%orig(currentImage);
|
||||
}
|
||||
%end
|
||||
%hook WKCompositingView // YouTube Playables (v18.34.5+)
|
||||
- (void)layoutSubviews {
|
||||
%orig;
|
||||
for (UILabel *label in self.subviews) {
|
||||
if ([label isKindOfClass:[UILabel class]]) {
|
||||
label.textColor = [UIColor whiteColor];
|
||||
}
|
||||
}
|
||||
}
|
||||
%end
|
||||
%hook UIExtendedSRGColorSpace
|
||||
- (void)setTextColor:(UIColor *)textColor {
|
||||
textColor = [[UIColor whiteColor] colorWithAlphaComponent:0.9];
|
||||
%orig();
|
||||
}
|
||||
%end
|
||||
%hook VideoTitleLabel
|
||||
- (void)setTextColor:(UIColor *)textColor {
|
||||
textColor = [UIColor whiteColor];
|
||||
%orig(textColor);
|
||||
}
|
||||
%end
|
||||
%hook UILabel
|
||||
+ (void)load {
|
||||
@autoreleasepool {
|
||||
[[UILabel appearance] setTextColor:[UIColor whiteColor]];
|
||||
}
|
||||
}
|
||||
- (void)setTextColor:(UIColor *)textColor {
|
||||
%log;
|
||||
textColor = [UIColor whiteColor];
|
||||
%orig(textColor);
|
||||
}
|
||||
%end
|
||||
%hook UITextField
|
||||
- (void)setTextColor:(UIColor *)textColor {
|
||||
%log;
|
||||
textColor = [UIColor whiteColor];
|
||||
%orig(textColor);
|
||||
}
|
||||
%end
|
||||
%hook UITextView
|
||||
- (void)setTextColor:(UIColor *)textColor {
|
||||
%log;
|
||||
textColor = [UIColor whiteColor];
|
||||
%orig(textColor);
|
||||
}
|
||||
%end
|
||||
%hook UISearchBar
|
||||
- (void)setTextColor:(UIColor *)textColor {
|
||||
textColor = [UIColor whiteColor];
|
||||
%orig(textColor);
|
||||
}
|
||||
%end
|
||||
%hook UISegmentedControl
|
||||
- (void)setTitleTextAttributes:(NSDictionary *)attributes forState:(UIControlState)state {
|
||||
NSMutableDictionary *modifiedAttributes = [NSMutableDictionary dictionaryWithDictionary:attributes];
|
||||
[modifiedAttributes setObject:[UIColor whiteColor] forKey:NSForegroundColorAttributeName];
|
||||
%orig(modifiedAttributes, state);
|
||||
}
|
||||
%end
|
||||
%hook UIButton
|
||||
- (void)setTitleColor:(UIColor *)color forState:(UIControlState)state {
|
||||
color = [UIColor whiteColor];
|
||||
%orig(color, state);
|
||||
}
|
||||
%end
|
||||
%hook UIBarButtonItem
|
||||
- (void)setTitleTextAttributes:(NSDictionary *)attributes forState:(UIControlState)state {
|
||||
NSMutableDictionary *modifiedAttributes = [NSMutableDictionary dictionaryWithDictionary:attributes];
|
||||
[modifiedAttributes setObject:[UIColor whiteColor] forKey:NSForegroundColorAttributeName];
|
||||
%orig(modifiedAttributes, state);
|
||||
}
|
||||
%end
|
||||
%hook NSAttributedString
|
||||
- (instancetype)initWithString:(NSString *)str attributes:(NSDictionary<NSAttributedStringKey, id> *)attrs {
|
||||
NSMutableDictionary *modifiedAttributes = [NSMutableDictionary dictionaryWithDictionary:attrs];
|
||||
[modifiedAttributes setObject:[UIColor whiteColor] forKey:NSForegroundColorAttributeName];
|
||||
return %orig(str, modifiedAttributes);
|
||||
}
|
||||
%end
|
||||
%hook CATextLayer
|
||||
- (void)setTextColor:(CGColorRef)textColor {
|
||||
%orig([UIColor whiteColor].CGColor);
|
||||
}
|
||||
%end
|
||||
%hook ASTextNode
|
||||
- (NSAttributedString *)attributedString {
|
||||
NSAttributedString *originalAttributedString = %orig;
|
||||
NSMutableAttributedString *newAttributedString = [originalAttributedString mutableCopy];
|
||||
[newAttributedString addAttribute:NSForegroundColorAttributeName value:[UIColor whiteColor] range:NSMakeRange(0, newAttributedString.length)];
|
||||
return newAttributedString;
|
||||
}
|
||||
%end
|
||||
%hook ASTextFieldNode
|
||||
- (void)setTextColor:(UIColor *)textColor {
|
||||
%orig([UIColor whiteColor]);
|
||||
}
|
||||
%end
|
||||
%hook ASTextView
|
||||
- (void)setTextColor:(UIColor *)textColor {
|
||||
%orig([UIColor whiteColor]);
|
||||
}
|
||||
%end
|
||||
%hook ASButtonNode
|
||||
- (void)setTextColor:(UIColor *)textColor {
|
||||
%orig([UIColor whiteColor]);
|
||||
}
|
||||
%end
|
||||
%end
|
||||
|
||||
/*
|
||||
%group gCustomContrastMode // Custom Contrast Mode (Hex Color)
|
||||
%hook UIColor
|
||||
+ (UIColor *)whiteColor {
|
||||
return lcmHexColor;
|
||||
}
|
||||
+ (UIColor *)lightTextColor {
|
||||
return lcmHexColor;
|
||||
}
|
||||
+ (UIColor *)placeholderTextColor {
|
||||
return lcmHexColor;
|
||||
}
|
||||
+ (UIColor *)labelColor {
|
||||
return lcmHexColor;
|
||||
}
|
||||
+ (UIColor *)secondaryLabelColor {
|
||||
return lcmHexColor;
|
||||
}
|
||||
+ (UIColor *)tertiaryLabelColor {
|
||||
return lcmHexColor;
|
||||
}
|
||||
+ (UIColor *)quaternaryLabelColor {
|
||||
return lcmHexColor;
|
||||
}
|
||||
%end
|
||||
%hook YTCommonColorPalette
|
||||
- (UIColor *)textPrimary {
|
||||
return self.pageStyle == 1 ? [UIColor whiteColor] : %orig;
|
||||
}
|
||||
- (UIColor *)textSecondary {
|
||||
return self.pageStyle == 1 ? [UIColor whiteColor] : %orig;
|
||||
}
|
||||
- (UIColor *)overlayTextPrimary {
|
||||
return self.pageStyle == 1 ? [UIColor whiteColor] : %orig;
|
||||
}
|
||||
- (UIColor *)overlayTextSecondary {
|
||||
return self.pageStyle == 1 ? [UIColor whiteColor] : %orig;
|
||||
}
|
||||
- (UIColor *)iconActive {
|
||||
return self.pageStyle == 1 ? [UIColor whiteColor] : %orig;
|
||||
}
|
||||
- (UIColor *)iconActiveOther {
|
||||
return self.pageStyle == 1 ? [UIColor whiteColor] : %orig;
|
||||
}
|
||||
- (UIColor *)brandIconActive {
|
||||
return self.pageStyle == 1 ? [UIColor whiteColor] : %orig;
|
||||
}
|
||||
- (UIColor *)staticBrandWhite {
|
||||
return self.pageStyle == 1 ? [UIColor whiteColor] : %orig;
|
||||
}
|
||||
- (UIColor *)overlayIconActiveOther {
|
||||
return self.pageStyle == 1 ? [UIColor whiteColor] : %orig;
|
||||
}
|
||||
%end
|
||||
%hook YTColor
|
||||
+ (UIColor *)white2 {
|
||||
return [UIColor whiteColor];
|
||||
}
|
||||
+ (UIColor *)white3 {
|
||||
return [UIColor whiteColor];
|
||||
}
|
||||
+ (UIColor *)white4 {
|
||||
return [UIColor whiteColor];
|
||||
}
|
||||
+ (UIColor *)white5 {
|
||||
return [UIColor whiteColor];
|
||||
}
|
||||
%end
|
||||
%hook QTMColorGroup
|
||||
- (UIColor *)tint100 {
|
||||
return [UIColor whiteColor];
|
||||
}
|
||||
- (UIColor *)tint300 {
|
||||
return [UIColor whiteColor];
|
||||
}
|
||||
- (UIColor *)bodyTextColor {
|
||||
return [UIColor whiteColor];
|
||||
}
|
||||
- (UIColor *)bodyTextColorOnLighterColor {
|
||||
return [UIColor whiteColor];
|
||||
}
|
||||
- (UIColor *)bodyTextColorOnRegularColor {
|
||||
return [UIColor whiteColor];
|
||||
}
|
||||
- (UIColor *)bodyTextColorOnDarkerColor {
|
||||
return [UIColor whiteColor];
|
||||
}
|
||||
- (UIColor *)bodyTextColorOnAccentColor {
|
||||
return [UIColor whiteColor];
|
||||
}
|
||||
- (UIColor *)bodyTextColorOnOnBrightAccentColor {
|
||||
return [UIColor whiteColor];
|
||||
}
|
||||
- (UIColor *)lightBodyTextColor {
|
||||
return [UIColor whiteColor];
|
||||
}
|
||||
- (UIColor *)buttonBackgroundColor {
|
||||
return [UIColor whiteColor];
|
||||
}
|
||||
%end
|
||||
%hook YTQTMButton
|
||||
- (void)setImage:(UIImage *)image {
|
||||
UIImage *currentImage = [image imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate];
|
||||
[self setTintColor:[UIColor whiteColor]];
|
||||
%orig(currentImage);
|
||||
}
|
||||
%end
|
||||
%hook UIExtendedSRGColorSpace
|
||||
- (void)setTextColor:(UIColor *)textColor {
|
||||
textColor = [[UIColor whiteColor] colorWithAlphaComponent:0.9];
|
||||
%orig();
|
||||
}
|
||||
%end
|
||||
%hook VideoTitleLabel
|
||||
- (void)setTextColor:(UIColor *)textColor {
|
||||
textColor = [UIColor whiteColor];
|
||||
%orig(textColor);
|
||||
}
|
||||
%end
|
||||
%hook UILabel
|
||||
+ (void)load {
|
||||
@autoreleasepool {
|
||||
[[UILabel appearance] setTextColor:[UIColor whiteColor]];
|
||||
}
|
||||
}
|
||||
- (void)setTextColor:(UIColor *)textColor {
|
||||
%log;
|
||||
textColor = [UIColor whiteColor];
|
||||
%orig(textColor);
|
||||
}
|
||||
%end
|
||||
%hook UITextField
|
||||
- (void)setTextColor:(UIColor *)textColor {
|
||||
%log;
|
||||
textColor = [UIColor whiteColor];
|
||||
%orig(textColor);
|
||||
}
|
||||
%end
|
||||
%hook UITextView
|
||||
- (void)setTextColor:(UIColor *)textColor {
|
||||
%log;
|
||||
textColor = [UIColor whiteColor];
|
||||
%orig(textColor);
|
||||
}
|
||||
%end
|
||||
%hook UISearchBar
|
||||
- (void)setTextColor:(UIColor *)textColor {
|
||||
textColor = [UIColor whiteColor];
|
||||
%orig(textColor);
|
||||
}
|
||||
%end
|
||||
%hook UISegmentedControl
|
||||
- (void)setTitleTextAttributes:(NSDictionary *)attributes forState:(UIControlState)state {
|
||||
NSMutableDictionary *modifiedAttributes = [NSMutableDictionary dictionaryWithDictionary:attributes];
|
||||
[modifiedAttributes setObject:[UIColor whiteColor] forKey:NSForegroundColorAttributeName];
|
||||
%orig(modifiedAttributes, state);
|
||||
}
|
||||
%end
|
||||
%hook UIButton
|
||||
- (void)setTitleColor:(UIColor *)color forState:(UIControlState)state {
|
||||
color = [UIColor whiteColor];
|
||||
%orig(color, state);
|
||||
}
|
||||
%end
|
||||
%hook UIBarButtonItem
|
||||
- (void)setTitleTextAttributes:(NSDictionary *)attributes forState:(UIControlState)state {
|
||||
NSMutableDictionary *modifiedAttributes = [NSMutableDictionary dictionaryWithDictionary:attributes];
|
||||
[modifiedAttributes setObject:[UIColor whiteColor] forKey:NSForegroundColorAttributeName];
|
||||
%orig(modifiedAttributes, state);
|
||||
}
|
||||
%end
|
||||
%hook NSAttributedString
|
||||
- (instancetype)initWithString:(NSString *)str attributes:(NSDictionary<NSAttributedStringKey, id> *)attrs {
|
||||
NSMutableDictionary *modifiedAttributes = [NSMutableDictionary dictionaryWithDictionary:attrs];
|
||||
[modifiedAttributes setObject:[UIColor whiteColor] forKey:NSForegroundColorAttributeName];
|
||||
return %orig(str, modifiedAttributes);
|
||||
}
|
||||
%end
|
||||
%hook CATextLayer
|
||||
- (void)setTextColor:(CGColorRef)textColor {
|
||||
%orig([UIColor whiteColor].CGColor);
|
||||
}
|
||||
%end
|
||||
%hook ASTextNode
|
||||
- (NSAttributedString *)attributedString {
|
||||
NSAttributedString *originalAttributedString = %orig;
|
||||
NSMutableAttributedString *newAttributedString = [originalAttributedString mutableCopy];
|
||||
[newAttributedString addAttribute:NSForegroundColorAttributeName value:[UIColor whiteColor] range:NSMakeRange(0, newAttributedString.length)];
|
||||
return newAttributedString;
|
||||
}
|
||||
%end
|
||||
%hook ASTextFieldNode
|
||||
- (void)setTextColor:(UIColor *)textColor {
|
||||
%orig([UIColor whiteColor]);
|
||||
}
|
||||
%end
|
||||
%hook ASTextView
|
||||
- (void)setTextColor:(UIColor *)textColor {
|
||||
%orig([UIColor whiteColor]);
|
||||
}
|
||||
%end
|
||||
%hook ASButtonNode
|
||||
- (void)setTextColor:(UIColor *)textColor {
|
||||
%orig([UIColor whiteColor]);
|
||||
}
|
||||
%end
|
||||
%end
|
||||
*/
|
||||
|
||||
# pragma mark - ctor
|
||||
%ctor {
|
||||
%init;
|
||||
if (lowContrastMode()) {
|
||||
%init(gLowContrastMode);
|
||||
}
|
||||
/*
|
||||
if (customContrastMode()) {
|
||||
%init(gCustomContrastMode);
|
||||
}
|
||||
*/
|
||||
}
|
||||
638
Source/Themes.xm
Normal file
638
Source/Themes.xm
Normal file
|
|
@ -0,0 +1,638 @@
|
|||
#import "../Header.h"
|
||||
|
||||
static BOOL IsEnabled(NSString *key) {
|
||||
return [[NSUserDefaults standardUserDefaults] boolForKey:key];
|
||||
}
|
||||
static BOOL isDarkMode() {
|
||||
return ([[NSUserDefaults standardUserDefaults] integerForKey:@"page_style"] == 1);
|
||||
}
|
||||
static BOOL oledDarkTheme() {
|
||||
return ([[NSUserDefaults standardUserDefaults] integerForKey:@"appTheme"] == 1);
|
||||
}
|
||||
static BOOL oldDarkTheme() {
|
||||
return ([[NSUserDefaults standardUserDefaults] integerForKey:@"appTheme"] == 2);
|
||||
}
|
||||
|
||||
// Themes.xm - Theme Options
|
||||
// Old dark theme (gray)
|
||||
%group gOldDarkTheme
|
||||
UIColor *originalColor = [UIColor colorWithRed:0.129 green:0.129 blue:0.129 alpha:1.0];
|
||||
%hook YTCommonColorPalette
|
||||
- (UIColor *)background1 {
|
||||
return self.pageStyle == 1 ? originalColor : %orig;
|
||||
}
|
||||
- (UIColor *)background2 {
|
||||
return self.pageStyle == 1 ? originalColor : %orig;
|
||||
}
|
||||
- (UIColor *)background3 {
|
||||
return self.pageStyle == 1 ? originalColor : %orig;
|
||||
}
|
||||
- (UIColor *)baseBackground {
|
||||
return self.pageStyle == 1 ? originalColor : %orig;
|
||||
}
|
||||
- (UIColor *)brandBackgroundSolid {
|
||||
return self.pageStyle == 1 ? originalColor : %orig;
|
||||
}
|
||||
- (UIColor *)brandBackgroundPrimary {
|
||||
return self.pageStyle == 1 ? originalColor : %orig;
|
||||
}
|
||||
- (UIColor *)brandBackgroundSecondary {
|
||||
return self.pageStyle == 1 ? [originalColor colorWithAlphaComponent:0.9] : %orig;
|
||||
}
|
||||
- (UIColor *)raisedBackground {
|
||||
return self.pageStyle == 1 ? originalColor : %orig;
|
||||
}
|
||||
- (UIColor *)staticBrandBlack {
|
||||
return self.pageStyle == 1 ? originalColor : %orig;
|
||||
}
|
||||
- (UIColor *)generalBackgroundA {
|
||||
return self.pageStyle == 1 ? originalColor : %orig;
|
||||
}
|
||||
- (UIColor *)generalBackgroundB {
|
||||
return self.pageStyle == 1 ? originalColor : %orig;
|
||||
}
|
||||
- (UIColor *)menuBackground {
|
||||
return self.pageStyle == 1 ? originalColor : %orig;
|
||||
}
|
||||
%end
|
||||
|
||||
%hook YTInnerTubeCollectionViewController
|
||||
- (UIColor *)backgroundColor:(NSInteger)pageStyle {
|
||||
return pageStyle == 1 ? originalColor : %orig;
|
||||
}
|
||||
%end
|
||||
|
||||
// Explore
|
||||
%hook ASScrollView
|
||||
- (void)didMoveToWindow {
|
||||
%orig;
|
||||
if (isDarkMode()) {
|
||||
self.backgroundColor = [UIColor clearColor];
|
||||
}
|
||||
}
|
||||
%end
|
||||
|
||||
// Your videos
|
||||
%hook ASCollectionView
|
||||
- (void)didMoveToWindow {
|
||||
%orig;
|
||||
if (isDarkMode() && [self.nextResponder isKindOfClass:%c(_ASDisplayView)]) {
|
||||
self.superview.backgroundColor = originalColor;
|
||||
}
|
||||
}
|
||||
%end
|
||||
|
||||
// Sub menu?
|
||||
%hook ELMView
|
||||
- (void)didMoveToWindow {
|
||||
%orig;
|
||||
if (isDarkMode()) {
|
||||
self.subviews[0].backgroundColor = [UIColor clearColor];
|
||||
}
|
||||
}
|
||||
%end
|
||||
|
||||
// iSponsorBlock
|
||||
%hook SponsorBlockSettingsController
|
||||
- (void)viewDidLoad {
|
||||
if (self.traitCollection.userInterfaceStyle == UIUserInterfaceStyleDark) {
|
||||
%orig;
|
||||
self.tableView.backgroundColor = originalColor;
|
||||
} else { return %orig; }
|
||||
}
|
||||
%end
|
||||
|
||||
%hook SponsorBlockViewController
|
||||
- (void)viewDidLoad {
|
||||
if (self.traitCollection.userInterfaceStyle == UIUserInterfaceStyleDark) {
|
||||
%orig;
|
||||
self.view.backgroundColor = originalColor;
|
||||
} else { return %orig; }
|
||||
}
|
||||
%end
|
||||
|
||||
// Search View
|
||||
%hook YTSearchBarView
|
||||
- (void)setBackgroundColor:(UIColor *)color {
|
||||
return isDarkMode() ? %orig(originalColor) : %orig;
|
||||
}
|
||||
%end
|
||||
|
||||
// History Search view
|
||||
%hook YTSearchBoxView
|
||||
- (void)setBackgroundColor:(UIColor *)color {
|
||||
return isDarkMode() ? %orig(originalColor) : %orig;
|
||||
|
||||
}
|
||||
%end
|
||||
|
||||
// Comment view
|
||||
%hook YTCommentView
|
||||
- (void)setBackgroundColor:(UIColor *)color {
|
||||
return isDarkMode() ? %orig(originalColor) : %orig;
|
||||
}
|
||||
%end
|
||||
|
||||
%hook YTCreateCommentAccessoryView
|
||||
- (void)setBackgroundColor:(UIColor *)color {
|
||||
return isDarkMode() ? %orig(originalColor) : %orig;
|
||||
}
|
||||
%end
|
||||
|
||||
%hook YTCreateCommentTextView
|
||||
- (void)setBackgroundColor:(UIColor *)color {
|
||||
return isDarkMode() ? %orig(originalColor) : %orig;
|
||||
}
|
||||
- (void)setTextColor:(UIColor *)color { // fix black text in #Shorts video's comment
|
||||
return isDarkMode() ? %orig([UIColor whiteColor]) : %orig;
|
||||
}
|
||||
%end
|
||||
|
||||
%hook YTCommentDetailHeaderCell
|
||||
- (void)didMoveToWindow {
|
||||
%orig;
|
||||
if (isDarkMode()) {
|
||||
self.subviews[2].backgroundColor = originalColor;
|
||||
}
|
||||
}
|
||||
%end
|
||||
|
||||
%hook YTAsyncCollectionView
|
||||
- (void)layoutSubviews {
|
||||
%orig();
|
||||
if ([self.nextResponder isKindOfClass:NSClassFromString(@"YTWatchNextResultsViewController")]) {
|
||||
if (isDarkMode()) {
|
||||
self.subviews[0].subviews[0].backgroundColor = originalColor;
|
||||
}
|
||||
}
|
||||
}
|
||||
%end
|
||||
|
||||
%hook YTFormattedStringLabel // YT is werid...
|
||||
- (void)setBackgroundColor:(UIColor *)color {
|
||||
return isDarkMode() ? %orig([UIColor clearColor]) : %orig;
|
||||
}
|
||||
%end
|
||||
|
||||
// Live chat comment
|
||||
%hook YCHLiveChatActionPanelView
|
||||
- (void)setBackgroundColor:(UIColor *)color {
|
||||
return isDarkMode() ? %orig(originalColor) : %orig;
|
||||
}
|
||||
%end
|
||||
|
||||
%hook YCHLiveChatView
|
||||
- (void)setBackgroundColor:(UIColor *)color {
|
||||
return isDarkMode() ? %orig(originalColor) : %orig;
|
||||
}
|
||||
- (void)didMoveToWindow {
|
||||
%orig;
|
||||
if (isDarkMode()) {
|
||||
self.subviews[1].backgroundColor = originalColor;
|
||||
}
|
||||
}
|
||||
%end
|
||||
|
||||
%hook YTEmojiTextView
|
||||
- (void)setBackgroundColor:(UIColor *)color {
|
||||
return isDarkMode() ? %orig(originalColor) : %orig;
|
||||
}
|
||||
%end
|
||||
|
||||
%hook YTAppView
|
||||
- (void)setBackgroundColor:(UIColor *)color {
|
||||
return isDarkMode() ? %orig(originalColor) : %orig;
|
||||
}
|
||||
%end
|
||||
|
||||
%hook YTCollectionView
|
||||
- (void)setBackgroundColor:(UIColor *)color {
|
||||
return isDarkMode() ? %orig(originalColor) : %orig;
|
||||
}
|
||||
%end
|
||||
|
||||
%hook YTChannelListSubMenuView
|
||||
- (void)setBackgroundColor:(UIColor *)color {
|
||||
return isDarkMode() ? %orig(originalColor) : %orig;
|
||||
}
|
||||
%end
|
||||
|
||||
%hook YTChannelSubMenuView
|
||||
- (void)setBackgroundColor:(UIColor *)color {
|
||||
return isDarkMode() ? %orig(originalColor) : %orig;
|
||||
}
|
||||
%end
|
||||
|
||||
%hook YTWrapperSplitView
|
||||
- (void)setBackgroundColor:(UIColor *)color {
|
||||
return isDarkMode() ? %orig(originalColor) : %orig;
|
||||
}
|
||||
%end
|
||||
|
||||
%hook YTPageView
|
||||
- (void)setBackgroundColor:(UIColor *)color {
|
||||
return isDarkMode() ? %orig(originalColor) : %orig;
|
||||
}
|
||||
%end
|
||||
|
||||
%hook YTWatchView
|
||||
- (void)setBackgroundColor:(UIColor *)color {
|
||||
return isDarkMode() ? %orig(originalColor) : %orig;
|
||||
}
|
||||
%end
|
||||
|
||||
%hook YTPrivacyTosFooterView
|
||||
- (void)setBackgroundColor:(UIColor *)color {
|
||||
return isDarkMode() ? %orig(originalColor) : %orig;
|
||||
}
|
||||
%end
|
||||
|
||||
//
|
||||
%hook YTBackstageCreateRepostDetailView
|
||||
- (void)setBackgroundColor:(UIColor *)color {
|
||||
return isDarkMode() ? %orig(originalColor) : %orig;
|
||||
}
|
||||
%end
|
||||
|
||||
// Others
|
||||
%hook _ASDisplayView
|
||||
- (void)layoutSubviews {
|
||||
%orig;
|
||||
if (isDarkMode()) {
|
||||
UIResponder *responder = [self nextResponder];
|
||||
while (responder != nil) {
|
||||
if ([responder isKindOfClass:NSClassFromString(@"YTActionSheetDialogViewController")]) {
|
||||
self.backgroundColor = originalColor;
|
||||
}
|
||||
if ([responder isKindOfClass:NSClassFromString(@"YTPanelLoadingStrategyViewController")]) {
|
||||
self.backgroundColor = originalColor;
|
||||
}
|
||||
if ([responder isKindOfClass:NSClassFromString(@"YTTabHeaderElementsViewController")]) {
|
||||
self.backgroundColor = originalColor;
|
||||
}
|
||||
if ([responder isKindOfClass:NSClassFromString(@"YTEditSheetControllerElementsContentViewController")]) {
|
||||
self.backgroundColor = originalColor;
|
||||
}
|
||||
responder = [responder nextResponder];
|
||||
}
|
||||
}
|
||||
}
|
||||
- (void)didMoveToWindow {
|
||||
%orig;
|
||||
if (isDarkMode()) {
|
||||
if ([self.nextResponder isKindOfClass:%c(ASScrollView)]) { self.backgroundColor = [UIColor clearColor]; }
|
||||
if ([self.accessibilityIdentifier isEqualToString:@"brand.promo_view"]) { self.superview.backgroundColor = originalColor; }
|
||||
if ([self.accessibilityIdentifier isEqualToString:@"eml.cvr"]) { self.backgroundColor = originalColor; }
|
||||
if ([self.accessibilityIdentifier isEqualToString:@"rich_header"]) { self.backgroundColor = originalColor; }
|
||||
if ([self.accessibilityIdentifier isEqualToString:@"id.ui.comment_cell"]) { self.backgroundColor = originalColor; }
|
||||
if ([self.accessibilityIdentifier isEqualToString:@"id.ui.cancel.button"]) { self.superview.backgroundColor = [UIColor clearColor]; }
|
||||
if ([self.accessibilityIdentifier isEqualToString:@"id.elements.components.comment_composer"]) { self.backgroundColor = originalColor; }
|
||||
if ([self.accessibilityIdentifier isEqualToString:@"id.elements.components.filter_chip_bar"]) { self.backgroundColor = originalColor; }
|
||||
if ([self.accessibilityIdentifier isEqualToString:@"id.elements.components.video_list_entry"]) { self.backgroundColor = originalColor; }
|
||||
if ([self.accessibilityIdentifier isEqualToString:@"id.comment.guidelines_text"]) { self.superview.backgroundColor = originalColor; }
|
||||
if ([self.accessibilityIdentifier isEqualToString:@"id.comment.channel_guidelines_bottom_sheet_container"]) { self.backgroundColor = originalColor; }
|
||||
if ([self.accessibilityIdentifier isEqualToString:@"id.comment.channel_guidelines_entry_banner_container"]) { self.backgroundColor = originalColor; }
|
||||
if ([self.accessibilityIdentifier isEqualToString:@"id.comment.comment_group_detail_container"]) { self.backgroundColor = [UIColor clearColor]; }
|
||||
}
|
||||
}
|
||||
%end
|
||||
%end
|
||||
|
||||
// OLED dark mode by @BandarHL
|
||||
UIColor* raisedColor = [UIColor blackColor];
|
||||
%group gOLED
|
||||
%hook YTCommonColorPalette
|
||||
- (UIColor *)background1 {
|
||||
return self.pageStyle == 1 ? [UIColor blackColor] : %orig;
|
||||
}
|
||||
- (UIColor *)background2 {
|
||||
return self.pageStyle == 1 ? [UIColor blackColor] : %orig;
|
||||
}
|
||||
- (UIColor *)background3 {
|
||||
return self.pageStyle == 1 ? [UIColor blackColor] : %orig;
|
||||
}
|
||||
- (UIColor *)baseBackground {
|
||||
return self.pageStyle == 1 ? [UIColor blackColor] : %orig;
|
||||
}
|
||||
- (UIColor *)brandBackgroundSolid {
|
||||
return self.pageStyle == 1 ? [UIColor blackColor] : %orig;
|
||||
}
|
||||
- (UIColor *)brandBackgroundPrimary {
|
||||
return self.pageStyle == 1 ? [UIColor blackColor] : %orig;
|
||||
}
|
||||
- (UIColor *)brandBackgroundSecondary {
|
||||
return self.pageStyle == 1 ? [[UIColor blackColor] colorWithAlphaComponent:0.9] : %orig;
|
||||
}
|
||||
- (UIColor *)raisedBackground {
|
||||
return self.pageStyle == 1 ? [UIColor blackColor] : %orig;
|
||||
}
|
||||
- (UIColor *)staticBrandBlack {
|
||||
return self.pageStyle == 1 ? [UIColor blackColor] : %orig;
|
||||
}
|
||||
- (UIColor *)generalBackgroundA {
|
||||
return self.pageStyle == 1 ? [UIColor blackColor] : %orig;
|
||||
}
|
||||
- (UIColor *)generalBackgroundB {
|
||||
return self.pageStyle == 1 ? [UIColor blackColor] : %orig;
|
||||
}
|
||||
- (UIColor *)menuBackground {
|
||||
return self.pageStyle == 1 ? [UIColor blackColor] : %orig;
|
||||
}
|
||||
%end
|
||||
|
||||
/*
|
||||
// uYou settings (Conflicts iSponsorBlock)
|
||||
%hook UITableViewCell
|
||||
- (void)_layoutSystemBackgroundView {
|
||||
%orig;
|
||||
UIView *systemBackgroundView = [self valueForKey:@"_systemBackgroundView"];
|
||||
NSString *backgroundViewKey = class_getInstanceVariable(systemBackgroundView.class, "_colorView") ? @"_colorView" : @"_backgroundView";
|
||||
((UIView *)[systemBackgroundView valueForKey:backgroundViewKey]).backgroundColor = [UIColor blackColor];
|
||||
}
|
||||
- (void)_layoutSystemBackgroundView:(BOOL)arg1 {
|
||||
%orig;
|
||||
((UIView *)[[self valueForKey:@"_systemBackgroundView"] valueForKey:@"_colorView"]).backgroundColor = [UIColor blackColor];
|
||||
}
|
||||
%end
|
||||
|
||||
%hook settingsReorderTable
|
||||
- (void)viewDidLayoutSubviews {
|
||||
%orig;
|
||||
self.tableView.backgroundColor = [UIColor blackColor];
|
||||
}
|
||||
%end
|
||||
|
||||
%hook FRPSelectListTable
|
||||
- (void)viewDidLayoutSubviews {
|
||||
%orig;
|
||||
self.tableView.backgroundColor = [UIColor blackColor];
|
||||
}
|
||||
%end
|
||||
|
||||
%hook FRPreferences
|
||||
- (void)viewDidLayoutSubviews {
|
||||
%orig;
|
||||
self.tableView.backgroundColor = [UIColor blackColor];
|
||||
}
|
||||
%end
|
||||
*/
|
||||
|
||||
%hook YTInnerTubeCollectionViewController
|
||||
- (UIColor *)backgroundColor:(NSInteger)pageStyle {
|
||||
return pageStyle == 1 ? [UIColor blackColor] : %orig;
|
||||
}
|
||||
%end
|
||||
|
||||
// Explore
|
||||
%hook ASScrollView
|
||||
- (void)didMoveToWindow {
|
||||
%orig;
|
||||
if (isDarkMode()) {
|
||||
self.backgroundColor = [UIColor clearColor];
|
||||
}
|
||||
}
|
||||
%end
|
||||
|
||||
// Your videos
|
||||
%hook ASCollectionView
|
||||
- (void)didMoveToWindow {
|
||||
%orig;
|
||||
if (isDarkMode() && [self.nextResponder isKindOfClass:%c(_ASDisplayView)]) {
|
||||
self.superview.backgroundColor = [UIColor blackColor];
|
||||
}
|
||||
}
|
||||
%end
|
||||
|
||||
// Sub menu?
|
||||
%hook ELMView
|
||||
- (void)didMoveToWindow {
|
||||
%orig;
|
||||
if (isDarkMode()) {
|
||||
self.subviews[0].backgroundColor = [UIColor clearColor];
|
||||
}
|
||||
}
|
||||
%end
|
||||
|
||||
// iSponsorBlock
|
||||
%hook SponsorBlockSettingsController
|
||||
- (void)viewDidLoad {
|
||||
if (self.traitCollection.userInterfaceStyle == UIUserInterfaceStyleDark) {
|
||||
%orig;
|
||||
self.tableView.backgroundColor = [UIColor blackColor];
|
||||
} else { return %orig; }
|
||||
}
|
||||
%end
|
||||
|
||||
%hook SponsorBlockViewController
|
||||
- (void)viewDidLoad {
|
||||
if (self.traitCollection.userInterfaceStyle == UIUserInterfaceStyleDark) {
|
||||
%orig;
|
||||
self.view.backgroundColor = [UIColor blackColor];
|
||||
} else { return %orig; }
|
||||
}
|
||||
%end
|
||||
|
||||
// Search View
|
||||
%hook YTSearchBarView
|
||||
- (void)setBackgroundColor:(UIColor *)color {
|
||||
return isDarkMode() ? %orig([UIColor blackColor]) : %orig;
|
||||
}
|
||||
%end
|
||||
|
||||
// History Search view
|
||||
%hook YTSearchBoxView
|
||||
- (void)setBackgroundColor:(UIColor *)color {
|
||||
return isDarkMode() ? %orig([UIColor blackColor]) : %orig;
|
||||
|
||||
}
|
||||
%end
|
||||
|
||||
// Comment view
|
||||
%hook YTCommentView
|
||||
- (void)setBackgroundColor:(UIColor *)color {
|
||||
return isDarkMode() ? %orig([UIColor blackColor]) : %orig;
|
||||
}
|
||||
%end
|
||||
|
||||
%hook YTCreateCommentAccessoryView
|
||||
- (void)setBackgroundColor:(UIColor *)color {
|
||||
return isDarkMode() ? %orig([UIColor blackColor]) : %orig;
|
||||
}
|
||||
%end
|
||||
|
||||
%hook YTCreateCommentTextView
|
||||
- (void)setBackgroundColor:(UIColor *)color {
|
||||
return isDarkMode() ? %orig([UIColor blackColor]) : %orig;
|
||||
}
|
||||
- (void)setTextColor:(UIColor *)color { // fix black text in #Shorts video's comment
|
||||
return isDarkMode() ? %orig([UIColor whiteColor]) : %orig;
|
||||
}
|
||||
%end
|
||||
|
||||
%hook YTCommentDetailHeaderCell
|
||||
- (void)didMoveToWindow {
|
||||
%orig;
|
||||
if (isDarkMode()) {
|
||||
self.subviews[2].backgroundColor = [UIColor blackColor];
|
||||
}
|
||||
}
|
||||
%end
|
||||
|
||||
%hook YTFormattedStringLabel // YT is werid...
|
||||
- (void)setBackgroundColor:(UIColor *)color {
|
||||
return isDarkMode() ? %orig([UIColor clearColor]) : %orig;
|
||||
}
|
||||
%end
|
||||
|
||||
// Live chat comment
|
||||
%hook YCHLiveChatActionPanelView
|
||||
- (void)setBackgroundColor:(UIColor *)color {
|
||||
return isDarkMode() ? %orig([UIColor blackColor]) : %orig;
|
||||
}
|
||||
%end
|
||||
|
||||
%hook YTEmojiTextView
|
||||
- (void)setBackgroundColor:(UIColor *)color {
|
||||
return isDarkMode() ? %orig([UIColor blackColor]) : %orig;
|
||||
}
|
||||
%end
|
||||
|
||||
%hook YCHLiveChatView
|
||||
- (void)didMoveToWindow {
|
||||
%orig;
|
||||
if (isDarkMode()) {
|
||||
self.subviews[1].backgroundColor = [UIColor blackColor];
|
||||
}
|
||||
}
|
||||
%end
|
||||
|
||||
%hook YTCollectionView
|
||||
- (void)setBackgroundColor:(UIColor *)color {
|
||||
return isDarkMode() ? %orig([UIColor blackColor]) : %orig;
|
||||
}
|
||||
%end
|
||||
|
||||
//
|
||||
%hook YTBackstageCreateRepostDetailView
|
||||
- (void)setBackgroundColor:(UIColor *)color {
|
||||
return isDarkMode() ? %orig([UIColor blackColor]) : %orig;
|
||||
}
|
||||
%end
|
||||
|
||||
// Others
|
||||
%hook _ASDisplayView
|
||||
- (void)layoutSubviews {
|
||||
%orig;
|
||||
if (isDarkMode()) {
|
||||
UIResponder *responder = [self nextResponder];
|
||||
while (responder != nil) {
|
||||
if ([responder isKindOfClass:NSClassFromString(@"YTActionSheetDialogViewController")]) {
|
||||
self.backgroundColor = [UIColor blackColor];
|
||||
}
|
||||
if ([responder isKindOfClass:NSClassFromString(@"YTPanelLoadingStrategyViewController")]) {
|
||||
self.backgroundColor = [UIColor blackColor];
|
||||
}
|
||||
if ([responder isKindOfClass:NSClassFromString(@"YTTabHeaderElementsViewController")]) {
|
||||
self.backgroundColor = [UIColor blackColor];
|
||||
}
|
||||
if ([responder isKindOfClass:NSClassFromString(@"YTEditSheetControllerElementsContentViewController")]) {
|
||||
self.backgroundColor = [UIColor blackColor];
|
||||
}
|
||||
responder = [responder nextResponder];
|
||||
}
|
||||
}
|
||||
}
|
||||
- (void)didMoveToWindow {
|
||||
%orig;
|
||||
if (isDarkMode()) {
|
||||
if ([self.nextResponder isKindOfClass:%c(ASScrollView)]) { self.backgroundColor = [UIColor clearColor]; }
|
||||
if ([self.accessibilityIdentifier isEqualToString:@"brand.promo_view"]) { self.backgroundColor = [UIColor blackColor]; }
|
||||
if ([self.accessibilityIdentifier isEqualToString:@"eml.cvr"]) { self.backgroundColor = [UIColor blackColor]; }
|
||||
if ([self.accessibilityIdentifier isEqualToString:@"eml.live_chat_text_message"]) { self.backgroundColor = [UIColor blackColor]; }
|
||||
if ([self.accessibilityIdentifier isEqualToString:@"rich_header"]) { self.backgroundColor = [UIColor blackColor]; }
|
||||
if ([self.accessibilityIdentifier isEqualToString:@"id.ui.comment_cell"]) { self.backgroundColor = [UIColor blackColor]; }
|
||||
if ([self.accessibilityIdentifier isEqualToString:@"id.ui.cancel.button"]) { self.superview.backgroundColor = [UIColor clearColor]; }
|
||||
if ([self.accessibilityIdentifier isEqualToString:@"id.elements.components.comment_composer"]) { self.backgroundColor = [UIColor blackColor]; }
|
||||
if ([self.accessibilityIdentifier isEqualToString:@"id.elements.components.filter_chip_bar"]) { self.backgroundColor = [UIColor blackColor]; }
|
||||
if ([self.accessibilityIdentifier isEqualToString:@"id.elements.components.video_list_entry"]) { self.backgroundColor = [UIColor blackColor]; }
|
||||
if ([self.accessibilityIdentifier isEqualToString:@"id.comment.guidelines_text"]) { self.superview.backgroundColor = [UIColor blackColor]; }
|
||||
if ([self.accessibilityIdentifier isEqualToString:@"id.comment.channel_guidelines_bottom_sheet_container"]) { self.backgroundColor = [UIColor blackColor]; }
|
||||
if ([self.accessibilityIdentifier isEqualToString:@"id.comment.channel_guidelines_entry_banner_container"]) { self.backgroundColor = [UIColor blackColor]; }
|
||||
if ([self.accessibilityIdentifier isEqualToString:@"id.comment.comment_group_detail_container"]) { self.backgroundColor = [UIColor clearColor]; }
|
||||
}
|
||||
}
|
||||
%end
|
||||
|
||||
// Open link with...
|
||||
%hook ASWAppSwitchingSheetHeaderView
|
||||
- (void)setBackgroundColor:(UIColor *)color {
|
||||
return isDarkMode() ? %orig(raisedColor) : %orig;
|
||||
}
|
||||
%end
|
||||
|
||||
%hook ASWAppSwitchingSheetFooterView
|
||||
- (void)setBackgroundColor:(UIColor *)color {
|
||||
return isDarkMode() ? %orig(raisedColor) : %orig;
|
||||
}
|
||||
%end
|
||||
|
||||
%hook ASWAppSwitcherCollectionViewCell
|
||||
- (void)didMoveToWindow {
|
||||
%orig;
|
||||
if (isDarkMode()) {
|
||||
self.backgroundColor = raisedColor;
|
||||
self.subviews[1].backgroundColor = raisedColor;
|
||||
self.superview.backgroundColor = raisedColor;
|
||||
}
|
||||
}
|
||||
%end
|
||||
%end
|
||||
|
||||
// OLED keyboard by @ichitaso <3 - http://gist.github.com/ichitaso/935100fd53a26f18a9060f7195a1be0e
|
||||
%group gOLEDKB
|
||||
%hook UIPredictionViewController
|
||||
- (void)loadView {
|
||||
%orig;
|
||||
[self.view setBackgroundColor:[UIColor blackColor]];
|
||||
}
|
||||
%end
|
||||
|
||||
%hook UICandidateViewController
|
||||
- (void)loadView {
|
||||
%orig;
|
||||
[self.view setBackgroundColor:[UIColor blackColor]];
|
||||
}
|
||||
%end
|
||||
|
||||
%hook UIKeyboardDockView
|
||||
- (void)didMoveToWindow {
|
||||
%orig;
|
||||
self.backgroundColor = [UIColor blackColor];
|
||||
}
|
||||
%end
|
||||
|
||||
%hook UIKeyboardLayoutStar
|
||||
- (void)didMoveToWindow {
|
||||
%orig;
|
||||
self.backgroundColor = [UIColor blackColor];
|
||||
}
|
||||
%end
|
||||
|
||||
%hook UIKBRenderConfig // Prediction text color
|
||||
- (void)setLightKeyboard:(BOOL)arg1 { %orig(NO); }
|
||||
%end
|
||||
%end
|
||||
|
||||
# pragma mark - ctor
|
||||
%ctor {
|
||||
%init;
|
||||
if (IsEnabled(@"oledKeyBoard_enabled")) {
|
||||
%init(gOLEDKB);
|
||||
}
|
||||
if (oledDarkTheme()) {
|
||||
%init(gOLED);
|
||||
}
|
||||
if (oldDarkTheme()) {
|
||||
%init(gOldDarkTheme);
|
||||
}
|
||||
}
|
||||
1591
Source/VersionSpoofer.xm
Normal file
1591
Source/VersionSpoofer.xm
Normal file
File diff suppressed because it is too large
Load diff
90
Source/update-submodules.txt
Normal file
90
Source/update-submodules.txt
Normal file
|
|
@ -0,0 +1,90 @@
|
|||
// Template for whenever I refresh the main branch. and to re-add the submodules afterwards.
|
||||
|
||||
name: Update Submodules
|
||||
|
||||
on:
|
||||
workflow_dispatch:
|
||||
|
||||
jobs:
|
||||
update-submodules:
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
steps:
|
||||
- name: Checkout code
|
||||
uses: actions/checkout@v3.6.0
|
||||
|
||||
- name: Set up Git
|
||||
run: |
|
||||
git config --global user.email "actions@github.com"
|
||||
git config --global user.name "GitHub Actions"
|
||||
|
||||
- name: Add uYouPlusExtra submodules
|
||||
run: |
|
||||
git submodule add https://github.com/leminlimez/MrBeastify.git Tweaks/MrBeastify
|
||||
git submodule add https://github.com/michael-winay/YTNoCommunityPosts.git Tweaks/YTNoCommunityPosts
|
||||
# git submodule add https://github.com/arichorn/YTHoldForSpeed.git Tweaks/YTHoldForSpeed
|
||||
git add .
|
||||
git commit -m "added uYouPlusExtra submodules"
|
||||
git push origin
|
||||
|
||||
# - name: Update submodules
|
||||
# run: |
|
||||
# git submodule update --init --recursive --remote
|
||||
# git add .
|
||||
# git commit -m "updated submodules"
|
||||
# git push origin
|
||||
# continue-on-error: true
|
||||
|
||||
- name: Update submodules
|
||||
run: |
|
||||
git submodule update --init --recursive --remote Tweaks/Alderis
|
||||
git add .
|
||||
git submodule update --init --recursive --remote Tweaks/DontEatMyContent
|
||||
git add .
|
||||
git submodule update --init --recursive --remote Tweaks/MrBeastify
|
||||
git add .
|
||||
git submodule update --init --recursive --remote Tweaks/PSHeader
|
||||
git add .
|
||||
git submodule update --init --recursive --remote Tweaks/Return-YouTube-Dislikes
|
||||
git add .
|
||||
git submodule update --init --recursive --remote Tweaks/YTABConfig
|
||||
git add .
|
||||
git submodule update --init --recursive --remote Tweaks/YTNoCommunityPosts
|
||||
git add .
|
||||
git submodule update --init --recursive --remote Tweaks/YTUHD
|
||||
git add .
|
||||
git submodule update --init --recursive --remote Tweaks/YTVideoOverlay
|
||||
git add .
|
||||
git submodule update --init --recursive --remote Tweaks/YouMute
|
||||
git add .
|
||||
git submodule update --init --recursive --remote Tweaks/YouPiP
|
||||
git add .
|
||||
git submodule update --init --recursive --remote Tweaks/YouQuality
|
||||
git add .
|
||||
git submodule update --init --recursive --remote Tweaks/YouTubeHeader
|
||||
git add .
|
||||
git submodule update --init --recursive --remote Tweaks/iSponsorBlock
|
||||
git add .
|
||||
git commit -m "updated submodules"
|
||||
git push origin
|
||||
continue-on-error: true
|
||||
|
||||
- name: Make .bundle files
|
||||
run: |
|
||||
cd Bundles
|
||||
ln -s ../Tweaks/MrBeastify/layout/Library/Application\ Support/MrBeastify.bundle MrBeastify.bundle
|
||||
ln -s ../Tweaks/YTNoCommunityPosts/layout/Library/Application\ Support/YTNoCommunityPosts.bundle YTNoCommunityPosts.bundle
|
||||
ln -s ../Tweaks/YTVideoOverlay/layout/Library/Application\ Support/YTVideoOverlay.bundle YTVideoOverlay.bundle
|
||||
ln -s ../Tweaks/YouMute/layout/Library/Application\ Support/YouMute.bundle YouMute.bundle
|
||||
ln -s ../Tweaks/YouQuality/layout/Library/Application\ Support/YouQuality.bundle YouQuality.bundle
|
||||
git add .
|
||||
git commit -m "Added bundles"
|
||||
git push origin
|
||||
|
||||
- name: Check exit code
|
||||
run: |
|
||||
exit_code=$?
|
||||
if [ $exit_code -ne 0 ]; then
|
||||
echo "Submodule update failed with exit code $exit_code"
|
||||
exit 1
|
||||
fi
|
||||
|
|
@ -1 +1 @@
|
|||
Subproject commit a514fbe4e063a1157da6e68fc05633ef9cec0f44
|
||||
Subproject commit c6fe81f55bd33c0e943150bf77826cbb251d668c
|
||||
1
Tweaks/MrBeastify
Submodule
1
Tweaks/MrBeastify
Submodule
|
|
@ -0,0 +1 @@
|
|||
Subproject commit 1ab07d1e473566aef7ef0cab2866db4e0ac450cc
|
||||
|
|
@ -1 +1 @@
|
|||
Subproject commit 91fc25a8504faa62eca55dae451fe11ac7d1602d
|
||||
Subproject commit c994fbfa1b9c1551d975563a18b9d3626fa10c92
|
||||
1
Tweaks/YTNoCommunityPosts
Submodule
1
Tweaks/YTNoCommunityPosts
Submodule
|
|
@ -0,0 +1 @@
|
|||
Subproject commit 86f949d14095abe7ee5efae08e57d7c4b2d0a613
|
||||
|
|
@ -1 +1 @@
|
|||
Subproject commit 23dcadf5b418c4da60fb1dd76192f38f68530c48
|
||||
Subproject commit 865cd8321efdf201f4dda26805921cbddc8afac8
|
||||
|
|
@ -1 +1 @@
|
|||
Subproject commit 96954d578d56e6762f0b179a2b837598a542d40c
|
||||
Subproject commit 74f8265ed22e829146a01b0d5c0bb1c4980599f5
|
||||
|
|
@ -1,8 +0,0 @@
|
|||
read -p $'\e[34m==> \e[1;39mPath to the decrypted YouTube.ipa or YouTube.app: ' PATHTOYT
|
||||
make package IPA=$PATHTOYT FINALPACKAGE=1
|
||||
if [[ $? -eq 0 ]]; then
|
||||
open packages
|
||||
echo "\033[0;32m==> \033[1;39mSHASUM256: $(shasum -a 256 packages/*.ipa)"
|
||||
else
|
||||
echo "\033[0;31m==> \033[1;39mFailed building uYouPlus"
|
||||
fi
|
||||
|
|
@ -130,6 +130,9 @@
|
|||
"HIDE_CHIP_BAR" = "إخفاء الشريط العلوي";
|
||||
"HIDE_CHIP_BAR_DESC" = "إخفاء الشريط العلوي من تبويب الصفحة الرئيسية (موسيقى، ألعاب فيديو، تشكيلات ...) ومن تبويب الاشتراكات (كل الفيديوهات، متابعة المشاهدة,...). تتطلب إعادة تشغيل التطبيق.";
|
||||
|
||||
"HIDE_PLAY_NEXT_IN_QUEUE" = "إخفاء \"تشغيل المقطع التالي من قائمة الانتظار\"";
|
||||
"HIDE_PLAY_NEXT_IN_QUEUE_DESC" = "إخفاء خيار \"تشغيل التالي من قائمة الانتظار\" من قائمة السياق في حسابات يوتيوب المدفوعة";
|
||||
|
||||
"NEW_MINIPLAYER_STYLE" = "تغيير شكل المشغّل المصغر (أداة BigYTMiniPlayer)";
|
||||
"NEW_MINIPLAYER_STYLE_DESC" = "تغيير شكل المشغّل المصغر في الآيفون إلى نفس شكله في الآيباد - تتطلب إغلاق التطبيق وإعادة فتحه.";
|
||||
|
||||
|
|
|
|||
|
|
@ -130,6 +130,9 @@
|
|||
"HIDE_CHIP_BAR" = "Hide the Upper bar";
|
||||
"HIDE_CHIP_BAR_DESC" = "Hide Upper bar in the Home feeds (Trends, Music, Gaming...) and Subcription feeds (All videos, Continue watching...). App restart is required.";
|
||||
|
||||
"HIDE_PLAY_NEXT_IN_QUEUE" = "Hide \"Play next in queue\"";
|
||||
"HIDE_PLAY_NEXT_IN_QUEUE_DESC" = "Hide the premium \"Play next in queue\" option in video context menus";
|
||||
|
||||
"NEW_MINIPLAYER_STYLE" = "Nový styl minipřehrávače (BigYTMiniPlayer)";
|
||||
"NEW_MINIPLAYER_STYLE_DESC" = "Je potřeba restart aplikace.";
|
||||
|
||||
|
|
|
|||
|
|
@ -130,6 +130,9 @@
|
|||
"HIDE_CHIP_BAR" = "Obere Leiste ausblenden";
|
||||
"HIDE_CHIP_BAR_DESC" = "Obere Leiste in den Home-Feeds (Trends, Musik, Spiele...) und Abo-Feeds (Alle Videos, Weiterschauen...) ausblenden. App-Neustart erforderlich.";
|
||||
|
||||
"HIDE_PLAY_NEXT_IN_QUEUE" = "Hide \"Play next in queue\"";
|
||||
"HIDE_PLAY_NEXT_IN_QUEUE_DESC" = "Hide the premium \"Play next in queue\" option in video context menus";
|
||||
|
||||
"NEW_MINIPLAYER_STYLE" = "Neuer Miniplayer Style (BigYTMiniPlayer)";
|
||||
"NEW_MINIPLAYER_STYLE_DESC" = "App-Neustart erforderlich!";
|
||||
|
||||
|
|
|
|||
|
|
@ -130,6 +130,9 @@
|
|||
"HIDE_CHIP_BAR" = "Hide the Upper bar";
|
||||
"HIDE_CHIP_BAR_DESC" = "Hide Upper bar in the Home feeds (Trends, Music, Gaming...) and Subcription feeds (All videos, Continue watching...). App restart is required.";
|
||||
|
||||
"HIDE_PLAY_NEXT_IN_QUEUE" = "Hide \"Play next in queue\"";
|
||||
"HIDE_PLAY_NEXT_IN_QUEUE_DESC" = "Hide the premium \"Play next in queue\" option in video context menus";
|
||||
|
||||
"NEW_MINIPLAYER_STYLE" = "Καινούργιο miniplayer θέμα στην μπάρα (BigYTMiniPlayer)";
|
||||
"NEW_MINIPLAYER_STYLE_DESC" = "Απαιτείται επανεκκίνηση της εφαρμογής.";
|
||||
|
||||
|
|
|
|||
|
|
@ -130,6 +130,9 @@
|
|||
"HIDE_CHIP_BAR" = "Hide the Upper bar";
|
||||
"HIDE_CHIP_BAR_DESC" = "Hide Upper bar in the Home feeds (Trends, Music, Gaming...) and Subscription feeds (All videos, Continue watching...).";
|
||||
|
||||
"HIDE_PLAY_NEXT_IN_QUEUE" = "Hide \"Play next in queue\"";
|
||||
"HIDE_PLAY_NEXT_IN_QUEUE_DESC" = "Hide the premium \"Play next in queue\" option in video context menus";
|
||||
|
||||
"NEW_MINIPLAYER_STYLE" = "New mini player bar style (BigYTMiniPlayer)";
|
||||
"NEW_MINIPLAYER_STYLE_DESC" = "App restart is required.";
|
||||
|
||||
|
|
|
|||
|
|
@ -130,6 +130,9 @@
|
|||
"HIDE_CHIP_BAR" = "Ocultar la barra superior";
|
||||
"HIDE_CHIP_BAR_DESC" = "Ocultar la barra superior de las fuentes de inicio (Tendencias, Música, Juegos...) y de suscripción (Todos los vídeos, Seguir viendo...). Es necesario reiniciar la aplicación.";
|
||||
|
||||
"HIDE_PLAY_NEXT_IN_QUEUE" = "Hide \"Play next in queue\"";
|
||||
"HIDE_PLAY_NEXT_IN_QUEUE_DESC" = "Hide the premium \"Play next in queue\" option in video context menus";
|
||||
|
||||
"NEW_MINIPLAYER_STYLE" = "Nuevo estilo de barra del minirreproductor (BigYTMiniPlayer)";
|
||||
"NEW_MINIPLAYER_STYLE_DESC" = "Requiere reiniciar la app.";
|
||||
|
||||
|
|
|
|||
|
|
@ -130,6 +130,9 @@
|
|||
"HIDE_CHIP_BAR" = "Masquer la barre supérieure";
|
||||
"HIDE_CHIP_BAR_DESC" = "Masquer la barre supérieure dans les fils d'actualité (Tendances, Musique, Gaming...) et les fils d'abonnement (Toutes les vidéos, Poursuivre la lecture...). Un redémarrage de l'application est nécessaire.";
|
||||
|
||||
"HIDE_PLAY_NEXT_IN_QUEUE" = "Hide \"Play next in queue\"";
|
||||
"HIDE_PLAY_NEXT_IN_QUEUE_DESC" = "Hide the premium \"Play next in queue\" option in video context menus";
|
||||
|
||||
"NEW_MINIPLAYER_STYLE" = "Nouveau style de barre de mini-lecteur (BigYTMiniPlayer)";
|
||||
"NEW_MINIPLAYER_STYLE_DESC" = "Un redémarrage de l'application est nécessaire";
|
||||
|
||||
|
|
|
|||
|
|
@ -130,6 +130,9 @@
|
|||
"HIDE_CHIP_BAR" = "Hide the Upper bar";
|
||||
"HIDE_CHIP_BAR_DESC" = "Hide Upper bar in the Home feeds (Trends, Music, Gaming...) and Subcription feeds (All videos, Continue watching...). App restart is required.";
|
||||
|
||||
"HIDE_PLAY_NEXT_IN_QUEUE" = "Hide \"Play next in queue\"";
|
||||
"HIDE_PLAY_NEXT_IN_QUEUE_DESC" = "Hide the premium \"Play next in queue\" option in video context menus";
|
||||
|
||||
"NEW_MINIPLAYER_STYLE" = "עיצוב נגן קטן חדש (BigYTMiniPlayer)";
|
||||
"NEW_MINIPLAYER_STYLE_DESC" = "נדרש לפתוח מחדש את היישום.";
|
||||
|
||||
|
|
|
|||
|
|
@ -130,6 +130,9 @@
|
|||
"HIDE_CHIP_BAR" = "Hide the Upper bar";
|
||||
"HIDE_CHIP_BAR_DESC" = "Hide Upper bar in the Home feeds (Trends, Music, Gaming...) and Subcription feeds (All videos, Continue watching...). App restart is required.";
|
||||
|
||||
"HIDE_PLAY_NEXT_IN_QUEUE" = "Hide \"Play next in queue\"";
|
||||
"HIDE_PLAY_NEXT_IN_QUEUE_DESC" = "Hide the premium \"Play next in queue\" option in video context menus";
|
||||
|
||||
"NEW_MINIPLAYER_STYLE" = "Új minilejátszó sáv (BigYTMiniPlayer)";
|
||||
"NEW_MINIPLAYER_STYLE_DESC" = "Az alkalmazás újraindítása szükséges.";
|
||||
|
||||
|
|
|
|||
|
|
@ -130,6 +130,9 @@
|
|||
"HIDE_CHIP_BAR" = "Nascondi la barra superiore";
|
||||
"HIDE_CHIP_BAR_DESC" = "Nascondi la barra superiore nella Home (Tendenze, Musica, Giochi...) e Iscrizioni (Tutti i video, Continua a guardare...). È richiesto il riavvio dell'app.";
|
||||
|
||||
"HIDE_PLAY_NEXT_IN_QUEUE" = "Hide \"Play next in queue\"";
|
||||
"HIDE_PLAY_NEXT_IN_QUEUE_DESC" = "Hide the premium \"Play next in queue\" option in video context menus";
|
||||
|
||||
"NEW_MINIPLAYER_STYLE" = "Nuovo stile per la barra del miniplayer (BigYTMiniPlayer)";
|
||||
"NEW_MINIPLAYER_STYLE_DESC" = "È richiesto un riavvio dell'app.";
|
||||
|
||||
|
|
|
|||
|
|
@ -130,6 +130,9 @@
|
|||
"HIDE_CHIP_BAR" = "トップバーを非表示";
|
||||
"HIDE_CHIP_BAR_DESC" = "ホーム(トレンド,音楽,ゲーム...)とサブスクリプション(すべてのビデオ、視聴を続ける...)リボンのトップバーを非表示にします。アプリの再起動が必要です。";
|
||||
|
||||
"HIDE_PLAY_NEXT_IN_QUEUE" = "Hide \"Play next in queue\"";
|
||||
"HIDE_PLAY_NEXT_IN_QUEUE_DESC" = "Hide the premium \"Play next in queue\" option in video context menus";
|
||||
|
||||
"NEW_MINIPLAYER_STYLE" = "新しいミニプレーヤー・バーを使う (BigYTMiniPlayer)";
|
||||
"NEW_MINIPLAYER_STYLE_DESC" = "アプリの再起動が必要です。";
|
||||
|
||||
|
|
|
|||
|
|
@ -130,6 +130,9 @@
|
|||
"HIDE_CHIP_BAR" = "피드 선택 막대 숨기기";
|
||||
"HIDE_CHIP_BAR_DESC" = "앱의 홈 화면에서 맞춤 동영상(인기 급상승, 음악, 게임...)과 구독 피드(전체, 감상한 동영상...) 선택 막대를 숨깁니다. 앱을 다시 시작해야 합니다.";
|
||||
|
||||
"HIDE_PLAY_NEXT_IN_QUEUE" = "Hide \"Play next in queue\"";
|
||||
"HIDE_PLAY_NEXT_IN_QUEUE_DESC" = "Hide the premium \"Play next in queue\" option in video context menus";
|
||||
|
||||
"NEW_MINIPLAYER_STYLE" = "새로운 스타일의 미니 플레이어 (BigYTMiniPlayer)";
|
||||
"NEW_MINIPLAYER_STYLE_DESC" = "앱을 다시 시작해야 합니다.";
|
||||
|
||||
|
|
|
|||
|
|
@ -130,6 +130,9 @@
|
|||
"HIDE_CHIP_BAR" = "Hide the Upper bar";
|
||||
"HIDE_CHIP_BAR_DESC" = "Hide Upper bar in the Home feeds (Trends, Music, Gaming...) and Subcription feeds (All videos, Continue watching...). App restart is required.";
|
||||
|
||||
"HIDE_PLAY_NEXT_IN_QUEUE" = "Hide \"Play next in queue\"";
|
||||
"HIDE_PLAY_NEXT_IN_QUEUE_DESC" = "Hide the premium \"Play next in queue\" option in video context menus";
|
||||
|
||||
"NEW_MINIPLAYER_STYLE" = "Nieuwe Mini Speler stijl (BigYTMiniPlayer)";
|
||||
"NEW_MINIPLAYER_STYLE_DESC" = "Je moet de app opnieuw opstarten om dit te activeren.";
|
||||
|
||||
|
|
|
|||
|
|
@ -130,6 +130,9 @@
|
|||
"HIDE_CHIP_BAR" = "Hide the Upper bar";
|
||||
"HIDE_CHIP_BAR_DESC" = "Hide Upper bar in the Home feeds (Trends, Music, Gaming...) and Subcription feeds (All videos, Continue watching...). App restart is required.";
|
||||
|
||||
"HIDE_PLAY_NEXT_IN_QUEUE" = "Hide \"Play next in queue\"";
|
||||
"HIDE_PLAY_NEXT_IN_QUEUE_DESC" = "Hide the premium \"Play next in queue\" option in video context menus";
|
||||
|
||||
"NEW_MINIPLAYER_STYLE" = "Nowy styl miniodtwarzacza (BigYTMiniPlayer)";
|
||||
"NEW_MINIPLAYER_STYLE_DESC" = "Restart aplikacji jest wymagany.";
|
||||
|
||||
|
|
|
|||
|
|
@ -130,6 +130,9 @@
|
|||
"HIDE_CHIP_BAR" = "Ocultar a Barra superior";
|
||||
"HIDE_CHIP_BAR_DESC" = "Oculta a Barra superior nos Feeds iniciais (Tendências, Música, Jogos...) e Feeds de inscrições (Todos os vídeos, Continuar assistindo...). A reinicialização do app é necessária.";
|
||||
|
||||
"HIDE_PLAY_NEXT_IN_QUEUE" = "Hide \"Play next in queue\"";
|
||||
"HIDE_PLAY_NEXT_IN_QUEUE_DESC" = "Hide the premium \"Play next in queue\" option in video context menus";
|
||||
|
||||
"NEW_MINIPLAYER_STYLE" = "Novo estilo de barra de miniplayer (BigYTMiniPlayer)";
|
||||
"NEW_MINIPLAYER_STYLE_DESC" = "A reinicialização do app é necessária.";
|
||||
|
||||
|
|
|
|||
|
|
@ -130,6 +130,9 @@
|
|||
"HIDE_CHIP_BAR" = "Hide the Upper bar";
|
||||
"HIDE_CHIP_BAR_DESC" = "Hide Upper bar in the Home feeds (Trends, Music, Gaming...) and Subcription feeds (All videos, Continue watching...). App restart is required.";
|
||||
|
||||
"HIDE_PLAY_NEXT_IN_QUEUE" = "Hide \"Play next in queue\"";
|
||||
"HIDE_PLAY_NEXT_IN_QUEUE_DESC" = "Hide the premium \"Play next in queue\" option in video context menus";
|
||||
|
||||
"NEW_MINIPLAYER_STYLE" = "Stil nou bară Miniplayer (BigYTMiniPlayer)";
|
||||
"NEW_MINIPLAYER_STYLE_DESC" = "Este necesară repornirea aplicației.";
|
||||
|
||||
|
|
|
|||
|
|
@ -130,6 +130,9 @@
|
|||
"HIDE_CHIP_BAR" = "Скрыть верхнюю панель";
|
||||
"HIDE_CHIP_BAR_DESC" = "Скрывает верхнюю панель на вкладках «Главная» (Тренды, Музыка, Игры...) и «Подписки» (Все видео, Продолжить просмотр...)\nТребуется перезапуск приложения.";
|
||||
|
||||
"HIDE_PLAY_NEXT_IN_QUEUE" = "Hide \"Play next in queue\"";
|
||||
"HIDE_PLAY_NEXT_IN_QUEUE_DESC" = "Hide the premium \"Play next in queue\" option in video context menus";
|
||||
|
||||
"NEW_MINIPLAYER_STYLE" = "Мини-плеер в стиле iPad (BigYTMiniPlayer)";
|
||||
"NEW_MINIPLAYER_STYLE_DESC" = "Потребуется перезагрузка.";
|
||||
|
||||
|
|
|
|||
|
|
@ -145,6 +145,9 @@ https://github.com/PoomSmart/Return-YouTube-Dislikes/tree/main/layout/Library/Ap
|
|||
"HIDE_CHIP_BAR" = "Hide the Upper bar";
|
||||
"HIDE_CHIP_BAR_DESC" = "Hide Upper bar in the Home feeds (Trends, Music, Gaming...) and Subscription feeds (All videos, Continue watching...).";
|
||||
|
||||
"HIDE_PLAY_NEXT_IN_QUEUE" = "Hide \"Play next in queue\"";
|
||||
"HIDE_PLAY_NEXT_IN_QUEUE_DESC" = "Hide the premium \"Play next in queue\" option in video context menus";
|
||||
|
||||
"NEW_MINIPLAYER_STYLE" = "New mini player bar style (BigYTMiniPlayer)";
|
||||
"NEW_MINIPLAYER_STYLE_DESC" = "App restart is required.";
|
||||
|
||||
|
|
|
|||
|
|
@ -127,6 +127,9 @@
|
|||
"HIDE_CHIP_BAR" = "Üst çubuğu gizle";
|
||||
"HIDE_CHIP_BAR_DESC" = "Ana Sayfa akışlarında (Trendler, Müzik, Oyun...) ve Abonelik akışlarında (Tüm videolar, İzlemeye devam et...) Üst çubuğu gizle. Uygulamanın yeniden başlatılması gerekir.";
|
||||
|
||||
"HIDE_PLAY_NEXT_IN_QUEUE" = "Hide \"Play next in queue\"";
|
||||
"HIDE_PLAY_NEXT_IN_QUEUE_DESC" = "Hide the premium \"Play next in queue\" option in video context menus";
|
||||
|
||||
"NEW_MINIPLAYER_STYLE" = "Yeni mini oynatıcı bar stili. (BigYTMiniPlayer)";
|
||||
"NEW_MINIPLAYER_STYLE_DESC" = "Uygulamanın yeniden başlatılması gerekir.";
|
||||
|
||||
|
|
|
|||
|
|
@ -130,6 +130,9 @@
|
|||
"HIDE_CHIP_BAR" = "Ẩn thanh phím tắt";
|
||||
"HIDE_CHIP_BAR_DESC" = "Ẩn thanh phím tắt trong Home feed (Thịnh hành, Âm nhạc, Trò chơi...) và trong Subciption feed (Tất cả, Tiếp tục xem...).";
|
||||
|
||||
"HIDE_PLAY_NEXT_IN_QUEUE" = "Hide \"Play next in queue\"";
|
||||
"HIDE_PLAY_NEXT_IN_QUEUE_DESC" = "Hide the premium \"Play next in queue\" option in video context menus";
|
||||
|
||||
"NEW_MINIPLAYER_STYLE" = "Giao diện trình phát thu nhỏ kiểu mới (BigYTMiniPlayer)";
|
||||
"NEW_MINIPLAYER_STYLE_DESC" = "Cần khởi động lại ứng dụng.";
|
||||
|
||||
|
|
|
|||
|
|
@ -130,6 +130,9 @@
|
|||
"HIDE_CHIP_BAR" = "隐藏顶部标签栏";
|
||||
"HIDE_CHIP_BAR_DESC" = "隐藏首页和订阅内容页顶部的标签栏(例如:首页顶部的“音乐”、“游戏”、“新闻”以及订阅内容页顶部的“今天”、“继续观看”、“未观看”等)。更改本设置后需要重启 App。";
|
||||
|
||||
"HIDE_PLAY_NEXT_IN_QUEUE" = "Hide \"Play next in queue\"";
|
||||
"HIDE_PLAY_NEXT_IN_QUEUE_DESC" = "Hide the premium \"Play next in queue\" option in video context menus";
|
||||
|
||||
"NEW_MINIPLAYER_STYLE" = "新迷你播放器风格 (BigYTMiniPlayer)";
|
||||
"NEW_MINIPLAYER_STYLE_DESC" = "更改本设置后需要重启 App。";
|
||||
|
||||
|
|
|
|||
|
|
@ -8,7 +8,7 @@
|
|||
"AUTO_FULLSCREEN" = "自動全螢幕 (YTAutoFullScreen)";
|
||||
"AUTO_FULLSCREEN_DESC" = "自動全螢幕播放影片。";
|
||||
|
||||
"DISABLE_DOUBLE_TAP_TO_SEEK" = "Disable double tap to seek";
|
||||
"DISABLE_DOUBLE_TAP_TO_SEEK" = "停用影片快轉與倒轉";
|
||||
"DISABLE_DOUBLE_TAP_TO_SEEK_DESC" = "";
|
||||
|
||||
"SNAP_TO_CHAPTER" = "停用章節跳轉";
|
||||
|
|
@ -131,6 +131,9 @@
|
|||
"HIDE_CHIP_BAR" = "隱藏上層欄位";
|
||||
"HIDE_CHIP_BAR_DESC" = "隱藏主畫面上層欄位 (話題, 音樂, 遊戲...) 和訂閱對象動態 (所有影片, 繼續觀看...). 需要重新啟動應用程式。";
|
||||
|
||||
"HIDE_PLAY_NEXT_IN_QUEUE" = "Hide \"Play next in queue\"";
|
||||
"HIDE_PLAY_NEXT_IN_QUEUE_DESC" = "Hide the premium \"Play next in queue\" option in video context menus";
|
||||
|
||||
"NEW_MINIPLAYER_STYLE" = "迷你播放器 (BigYTMiniPlayer)";
|
||||
"NEW_MINIPLAYER_STYLE_DESC" = "需要重新啟動應用程式。";
|
||||
|
||||
|
|
|
|||
875
uYouPlus.xm
875
uYouPlus.xm
File diff suppressed because it is too large
Load diff
Loading…
Reference in a new issue