From 5bf81818158a687a9a4d8b2f845975ae64196fb3 Mon Sep 17 00:00:00 2001 From: dayanch96 <38832025+dayanch96@users.noreply.github.com> Date: Wed, 28 Feb 2024 15:02:46 +0300 Subject: [PATCH] 2.7 --- Makefile | 6 +- Reachability.h | 103 ++++ Reachability.m | 508 ++++++++++++++++++ Settings.x | 491 +++++++++-------- YTLite.h | 143 +++-- YTLite.x | 462 +++++++++++----- YouTubeHeaders.h | 24 + .../YTLite.bundle/coffee.png | Bin 0 -> 8449 bytes .../en.lproj/Localizable.strings | 37 +- .../es.lproj/Localizable.strings | 35 +- .../fr.lproj/Localizable.strings | 35 +- .../YTLite.bundle/github.png | Bin 0 -> 9518 bytes .../ja.lproj/Localizable.strings | 35 +- .../YTLite.bundle/paypal.png | Bin 0 -> 4930 bytes .../ru.lproj/Localizable.strings | 37 +- .../vi.lproj/Localizable.strings | 35 +- .../zh-Hans.lproj/Localizable.strings | 37 +- .../zh-Hant.lproj/Localizable.strings | 35 +- .../com.dvntm.ytlite_2.7_iphoneos-arm.deb | Bin 0 -> 96908 bytes .../com.dvntm.ytlite_2.7_iphoneos-arm64.deb | Bin 0 -> 97016 bytes 20 files changed, 1593 insertions(+), 430 deletions(-) create mode 100644 Reachability.h create mode 100644 Reachability.m create mode 100644 YouTubeHeaders.h create mode 100644 layout/Library/Application Support/YTLite.bundle/coffee.png create mode 100644 layout/Library/Application Support/YTLite.bundle/github.png create mode 100644 layout/Library/Application Support/YTLite.bundle/paypal.png create mode 100644 packages/com.dvntm.ytlite_2.7_iphoneos-arm.deb create mode 100644 packages/com.dvntm.ytlite_2.7_iphoneos-arm64.deb diff --git a/Makefile b/Makefile index 63944b7..34f058b 100644 --- a/Makefile +++ b/Makefile @@ -5,14 +5,14 @@ endif DEBUG=0 FINALPACKAGE=1 ARCHS = arm64 -PACKAGE_VERSION = 2.6.3 +PACKAGE_VERSION = 2.7 TARGET := iphone:clang:latest:13.0 include $(THEOS)/makefiles/common.mk TWEAK_NAME = YTLite -$(TWEAK_NAME)_FRAMEWORKS = UIKit Foundation +$(TWEAK_NAME)_FRAMEWORKS = UIKit Foundation SystemConfiguration $(TWEAK_NAME)_CFLAGS = -fobjc-arc -DTWEAK_VERSION=$(PACKAGE_VERSION) -$(TWEAK_NAME)_FILES = YTLite.x Settings.x Sideloading.x +$(TWEAK_NAME)_FILES = $(wildcard *.x *.m) include $(THEOS_MAKE_PATH)/tweak.mk diff --git a/Reachability.h b/Reachability.h new file mode 100644 index 0000000..73883c3 --- /dev/null +++ b/Reachability.h @@ -0,0 +1,103 @@ +/* + Copyright (c) 2011, Tony Million. + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE + LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + POSSIBILITY OF SUCH DAMAGE. + */ + +#import +#import + +//! Project version number for MacOSReachability. +FOUNDATION_EXPORT double ReachabilityVersionNumber; + +//! Project version string for MacOSReachability. +FOUNDATION_EXPORT const unsigned char ReachabilityVersionString[]; + +/** + * Create NS_ENUM macro if it does not exist on the targeted version of iOS or OS X. + * + * @see http://nshipster.com/ns_enum-ns_options/ + **/ +#ifndef NS_ENUM +#define NS_ENUM(_type, _name) enum _name : _type _name; enum _name : _type +#endif + +extern NSString *const kReachabilityChangedNotification; + +typedef NS_ENUM(NSInteger, NetworkStatus) { + // Apple NetworkStatus Compatible Names. + NotReachable = 0, + ReachableViaWiFi = 2, + ReachableViaWWAN = 1 +}; + +@class Reachability; + +typedef void (^NetworkReachable)(Reachability * reachability); +typedef void (^NetworkUnreachable)(Reachability * reachability); +typedef void (^NetworkReachability)(Reachability * reachability, SCNetworkConnectionFlags flags); + + +@interface Reachability : NSObject + +@property (nonatomic, copy) NetworkReachable reachableBlock; +@property (nonatomic, copy) NetworkUnreachable unreachableBlock; +@property (nonatomic, copy) NetworkReachability reachabilityBlock; + +@property (nonatomic, assign) BOOL reachableOnWWAN; + + ++(instancetype)reachabilityWithHostname:(NSString*)hostname; +// This is identical to the function above, but is here to maintain +//compatibility with Apples original code. (see .m) ++(instancetype)reachabilityWithHostName:(NSString*)hostname; ++(instancetype)reachabilityForInternetConnection; ++(instancetype)reachabilityWithAddress:(void *)hostAddress; ++(instancetype)reachabilityForLocalWiFi; ++(instancetype)reachabilityWithURL:(NSURL*)url; + +-(instancetype)initWithReachabilityRef:(SCNetworkReachabilityRef)ref; + +-(BOOL)startNotifier; +-(void)stopNotifier; + +-(BOOL)isReachable; +-(BOOL)isReachableViaWWAN; +-(BOOL)isReachableViaWiFi; + +// WWAN may be available, but not active until a connection has been established. +// WiFi may require a connection for VPN on Demand. +-(BOOL)isConnectionRequired; // Identical DDG variant. +-(BOOL)connectionRequired; // Apple's routine. +// Dynamic, on demand connection? +-(BOOL)isConnectionOnDemand; +// Is user intervention required? +-(BOOL)isInterventionRequired; + +-(NetworkStatus)currentReachabilityStatus; +-(SCNetworkReachabilityFlags)reachabilityFlags; +-(NSString*)currentReachabilityString; +-(NSString*)currentReachabilityFlags; + +@end diff --git a/Reachability.m b/Reachability.m new file mode 100644 index 0000000..5324390 --- /dev/null +++ b/Reachability.m @@ -0,0 +1,508 @@ +/* + Copyright (c) 2011, Tony Million. + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE + LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + POSSIBILITY OF SUCH DAMAGE. + */ + +#import "Reachability.h" + +#import +#import +#import +#import +#import +#import + + +NSString *const kReachabilityChangedNotification = @"kReachabilityChangedNotification"; + + +@interface Reachability () + +@property (nonatomic, assign) SCNetworkReachabilityRef reachabilityRef; +@property (nonatomic, strong) dispatch_queue_t reachabilitySerialQueue; +@property (nonatomic, strong) id reachabilityObject; + +-(void)reachabilityChanged:(SCNetworkReachabilityFlags)flags; +-(BOOL)isReachableWithFlags:(SCNetworkReachabilityFlags)flags; + +@end + + +static NSString *reachabilityFlags(SCNetworkReachabilityFlags flags) +{ + return [NSString stringWithFormat:@"%c%c %c%c%c%c%c%c%c", +#if TARGET_OS_IPHONE + (flags & kSCNetworkReachabilityFlagsIsWWAN) ? 'W' : '-', +#else + 'X', +#endif + (flags & kSCNetworkReachabilityFlagsReachable) ? 'R' : '-', + (flags & kSCNetworkReachabilityFlagsConnectionRequired) ? 'c' : '-', + (flags & kSCNetworkReachabilityFlagsTransientConnection) ? 't' : '-', + (flags & kSCNetworkReachabilityFlagsInterventionRequired) ? 'i' : '-', + (flags & kSCNetworkReachabilityFlagsConnectionOnTraffic) ? 'C' : '-', + (flags & kSCNetworkReachabilityFlagsConnectionOnDemand) ? 'D' : '-', + (flags & kSCNetworkReachabilityFlagsIsLocalAddress) ? 'l' : '-', + (flags & kSCNetworkReachabilityFlagsIsDirect) ? 'd' : '-']; +} + +// Start listening for reachability notifications on the current run loop +static void TMReachabilityCallback(SCNetworkReachabilityRef target, SCNetworkReachabilityFlags flags, void* info) +{ +#pragma unused (target) + + Reachability *reachability = ((__bridge Reachability*)info); + + // We probably don't need an autoreleasepool here, as GCD docs state each queue has its own autorelease pool, + // but what the heck eh? + @autoreleasepool + { + [reachability reachabilityChanged:flags]; + } +} + + +@implementation Reachability + +#pragma mark - Class Constructor Methods + ++(instancetype)reachabilityWithHostName:(NSString*)hostname +{ + return [Reachability reachabilityWithHostname:hostname]; +} + ++(instancetype)reachabilityWithHostname:(NSString*)hostname +{ + SCNetworkReachabilityRef ref = SCNetworkReachabilityCreateWithName(NULL, [hostname UTF8String]); + if (ref) + { + id reachability = [[self alloc] initWithReachabilityRef:ref]; + + return reachability; + } + + return nil; +} + ++(instancetype)reachabilityWithAddress:(void *)hostAddress +{ + SCNetworkReachabilityRef ref = SCNetworkReachabilityCreateWithAddress(kCFAllocatorDefault, (const struct sockaddr*)hostAddress); + if (ref) + { + id reachability = [[self alloc] initWithReachabilityRef:ref]; + + return reachability; + } + + return nil; +} + ++(instancetype)reachabilityForInternetConnection +{ + struct sockaddr_in zeroAddress; + bzero(&zeroAddress, sizeof(zeroAddress)); + zeroAddress.sin_len = sizeof(zeroAddress); + zeroAddress.sin_family = AF_INET; + + return [self reachabilityWithAddress:&zeroAddress]; +} + ++(instancetype)reachabilityForLocalWiFi +{ + struct sockaddr_in localWifiAddress; + bzero(&localWifiAddress, sizeof(localWifiAddress)); + localWifiAddress.sin_len = sizeof(localWifiAddress); + localWifiAddress.sin_family = AF_INET; + // IN_LINKLOCALNETNUM is defined in as 169.254.0.0 + localWifiAddress.sin_addr.s_addr = htonl(IN_LINKLOCALNETNUM); + + return [self reachabilityWithAddress:&localWifiAddress]; +} + ++(instancetype)reachabilityWithURL:(NSURL*)url +{ + id reachability; + + NSString *host = url.host; + BOOL isIpAddress = [self isIpAddress:host]; + + if (isIpAddress) + { + NSNumber *port = url.port ?: [url.scheme isEqualToString:@"https"] ? @(443) : @(80); + + struct sockaddr_in address; + address.sin_len = sizeof(address); + address.sin_family = AF_INET; + address.sin_port = htons([port intValue]); + address.sin_addr.s_addr = inet_addr([host UTF8String]); + + reachability = [self reachabilityWithAddress:&address]; + } + else + { + reachability = [self reachabilityWithHostname:host]; + } + + return reachability; +} + ++(BOOL)isIpAddress:(NSString*)host +{ + struct in_addr pin; + return 1 == inet_aton([host UTF8String], &pin); +} + + +// Initialization methods + +-(instancetype)initWithReachabilityRef:(SCNetworkReachabilityRef)ref +{ + self = [super init]; + if (self != nil) + { + self.reachableOnWWAN = YES; + self.reachabilityRef = ref; + + // We need to create a serial queue. + // We allocate this once for the lifetime of the notifier. + + self.reachabilitySerialQueue = dispatch_queue_create("com.tonymillion.reachability", NULL); + } + + return self; +} + +-(void)dealloc +{ + [self stopNotifier]; + + if(self.reachabilityRef) + { + CFRelease(self.reachabilityRef); + self.reachabilityRef = nil; + } + + self.reachableBlock = nil; + self.unreachableBlock = nil; + self.reachabilityBlock = nil; + self.reachabilitySerialQueue = nil; +} + +#pragma mark - Notifier Methods + +// Notifier +// NOTE: This uses GCD to trigger the blocks - they *WILL NOT* be called on THE MAIN THREAD +// - In other words DO NOT DO ANY UI UPDATES IN THE BLOCKS. +// INSTEAD USE dispatch_async(dispatch_get_main_queue(), ^{UISTUFF}) (or dispatch_sync if you want) + +-(BOOL)startNotifier +{ + // allow start notifier to be called multiple times + if(self.reachabilityObject && (self.reachabilityObject == self)) + { + return YES; + } + + + SCNetworkReachabilityContext context = { 0, NULL, NULL, NULL, NULL }; + context.info = (__bridge void *)self; + + if(SCNetworkReachabilitySetCallback(self.reachabilityRef, TMReachabilityCallback, &context)) + { + // Set it as our reachability queue, which will retain the queue + if(SCNetworkReachabilitySetDispatchQueue(self.reachabilityRef, self.reachabilitySerialQueue)) + { + // this should do a retain on ourself, so as long as we're in notifier mode we shouldn't disappear out from under ourselves + // woah + self.reachabilityObject = self; + return YES; + } + else + { +#ifdef DEBUG + NSLog(@"SCNetworkReachabilitySetDispatchQueue() failed: %s", SCErrorString(SCError())); +#endif + + // UH OH - FAILURE - stop any callbacks! + SCNetworkReachabilitySetCallback(self.reachabilityRef, NULL, NULL); + } + } + else + { +#ifdef DEBUG + NSLog(@"SCNetworkReachabilitySetCallback() failed: %s", SCErrorString(SCError())); +#endif + } + + // if we get here we fail at the internet + self.reachabilityObject = nil; + return NO; +} + +-(void)stopNotifier +{ + // First stop, any callbacks! + SCNetworkReachabilitySetCallback(self.reachabilityRef, NULL, NULL); + + // Unregister target from the GCD serial dispatch queue. + SCNetworkReachabilitySetDispatchQueue(self.reachabilityRef, NULL); + + self.reachabilityObject = nil; +} + +#pragma mark - reachability tests + +// This is for the case where you flick the airplane mode; +// you end up getting something like this: +//Reachability: WR ct----- +//Reachability: -- ------- +//Reachability: WR ct----- +//Reachability: -- ------- +// We treat this as 4 UNREACHABLE triggers - really apple should do better than this + +#define testcase (kSCNetworkReachabilityFlagsConnectionRequired | kSCNetworkReachabilityFlagsTransientConnection) + +-(BOOL)isReachableWithFlags:(SCNetworkReachabilityFlags)flags +{ + BOOL connectionUP = YES; + + if(!(flags & kSCNetworkReachabilityFlagsReachable)) + connectionUP = NO; + + if( (flags & testcase) == testcase ) + connectionUP = NO; + +#if TARGET_OS_IPHONE + if(flags & kSCNetworkReachabilityFlagsIsWWAN) + { + // We're on 3G. + if(!self.reachableOnWWAN) + { + // We don't want to connect when on 3G. + connectionUP = NO; + } + } +#endif + + return connectionUP; +} + +-(BOOL)isReachable +{ + SCNetworkReachabilityFlags flags; + + if(!SCNetworkReachabilityGetFlags(self.reachabilityRef, &flags)) + return NO; + + return [self isReachableWithFlags:flags]; +} + +-(BOOL)isReachableViaWWAN +{ +#if TARGET_OS_IPHONE + + SCNetworkReachabilityFlags flags = 0; + + if(SCNetworkReachabilityGetFlags(self.reachabilityRef, &flags)) + { + // Check we're REACHABLE + if(flags & kSCNetworkReachabilityFlagsReachable) + { + // Now, check we're on WWAN + if(flags & kSCNetworkReachabilityFlagsIsWWAN) + { + return YES; + } + } + } +#endif + + return NO; +} + +-(BOOL)isReachableViaWiFi +{ + SCNetworkReachabilityFlags flags = 0; + + if(SCNetworkReachabilityGetFlags(self.reachabilityRef, &flags)) + { + // Check we're reachable + if((flags & kSCNetworkReachabilityFlagsReachable)) + { +#if TARGET_OS_IPHONE + // Check we're NOT on WWAN + if((flags & kSCNetworkReachabilityFlagsIsWWAN)) + { + return NO; + } +#endif + return YES; + } + } + + return NO; +} + + +// WWAN may be available, but not active until a connection has been established. +// WiFi may require a connection for VPN on Demand. +-(BOOL)isConnectionRequired +{ + return [self connectionRequired]; +} + +-(BOOL)connectionRequired +{ + SCNetworkReachabilityFlags flags; + + if(SCNetworkReachabilityGetFlags(self.reachabilityRef, &flags)) + { + return (flags & kSCNetworkReachabilityFlagsConnectionRequired); + } + + return NO; +} + +// Dynamic, on demand connection? +-(BOOL)isConnectionOnDemand +{ + SCNetworkReachabilityFlags flags; + + if (SCNetworkReachabilityGetFlags(self.reachabilityRef, &flags)) + { + return ((flags & kSCNetworkReachabilityFlagsConnectionRequired) && + (flags & (kSCNetworkReachabilityFlagsConnectionOnTraffic | kSCNetworkReachabilityFlagsConnectionOnDemand))); + } + + return NO; +} + +// Is user intervention required? +-(BOOL)isInterventionRequired +{ + SCNetworkReachabilityFlags flags; + + if (SCNetworkReachabilityGetFlags(self.reachabilityRef, &flags)) + { + return ((flags & kSCNetworkReachabilityFlagsConnectionRequired) && + (flags & kSCNetworkReachabilityFlagsInterventionRequired)); + } + + return NO; +} + + +#pragma mark - reachability status stuff + +-(NetworkStatus)currentReachabilityStatus +{ + if([self isReachable]) + { + if([self isReachableViaWiFi]) + return ReachableViaWiFi; + +#if TARGET_OS_IPHONE + return ReachableViaWWAN; +#endif + } + + return NotReachable; +} + +-(SCNetworkReachabilityFlags)reachabilityFlags +{ + SCNetworkReachabilityFlags flags = 0; + + if(SCNetworkReachabilityGetFlags(self.reachabilityRef, &flags)) + { + return flags; + } + + return 0; +} + +-(NSString*)currentReachabilityString +{ + NetworkStatus temp = [self currentReachabilityStatus]; + + if(temp == ReachableViaWWAN) + { + // Updated for the fact that we have CDMA phones now! + return NSLocalizedString(@"Cellular", @""); + } + if (temp == ReachableViaWiFi) + { + return NSLocalizedString(@"WiFi", @""); + } + + return NSLocalizedString(@"No Connection", @""); +} + +-(NSString*)currentReachabilityFlags +{ + return reachabilityFlags([self reachabilityFlags]); +} + +#pragma mark - Callback function calls this method + +-(void)reachabilityChanged:(SCNetworkReachabilityFlags)flags +{ + if([self isReachableWithFlags:flags]) + { + if(self.reachableBlock) + { + self.reachableBlock(self); + } + } + else + { + if(self.unreachableBlock) + { + self.unreachableBlock(self); + } + } + + if(self.reachabilityBlock) + { + self.reachabilityBlock(self, flags); + } + + // this makes sure the change notification happens on the MAIN THREAD + dispatch_async(dispatch_get_main_queue(), ^{ + [[NSNotificationCenter defaultCenter] postNotificationName:kReachabilityChangedNotification + object:self]; + }); +} + +#pragma mark - Debug Description + +- (NSString *) description +{ + NSString *description = [NSString stringWithFormat:@"<%@: %p (%@)>", + NSStringFromClass([self class]), self, [self currentReachabilityFlags]]; + return description; +} + +@end diff --git a/Settings.x b/Settings.x index 3e28420..c521a6d 100644 --- a/Settings.x +++ b/Settings.x @@ -41,6 +41,21 @@ static NSString *GetCacheSize() { } %end +%hook YTSettingsCell +- (void)layoutSubviews { + %orig; + + BOOL isYTLite = [self.accessibilityIdentifier isEqualToString:@"YTLiteSectionItem"]; + YTTouchFeedbackController *feedback = [self valueForKey:@"_touchFeedbackController"]; + ABCSwitch *abcSwitch = [self valueForKey:@"_switch"]; + + if (isYTLite) { + feedback.feedbackColor = [UIColor colorWithRed:0.75 green:0.50 blue:0.90 alpha:1.0]; + abcSwitch.onTintColor = [UIColor colorWithRed:0.75 green:0.50 blue:0.90 alpha:1.0]; + } +} +%end + %hook YTSettingsSectionItemManager %new - (void)updatePrefsForKey:(NSString *)key enabled:(BOOL)enabled { @@ -68,12 +83,13 @@ static NSString *GetCacheSize() { CFNotificationCenterPostNotification(CFNotificationCenterGetDarwinNotifyCenter(), CFSTR("com.dvntm.ytlite.prefschanged"), NULL, NULL, YES); } -static YTSettingsSectionItem *createSwitchItem(NSString *title, NSString *titleDescription, NSString *key, BOOL *value, id selfObject) { +static YTSettingsSectionItem *createSwitchItem(NSString *title, NSString *key, BOOL *value, id selfObject) { Class YTSettingsSectionItemClass = %c(YTSettingsSectionItem); Class YTAlertViewClass = %c(YTAlertView); - YTSettingsSectionItem *item = [YTSettingsSectionItemClass switchItemWithTitle:title - titleDescription:titleDescription - accessibilityIdentifier:nil + + YTSettingsSectionItem *item = [YTSettingsSectionItemClass switchItemWithTitle:LOC(title) + titleDescription:LOC([NSString stringWithFormat:@"%@Desc", title]) + accessibilityIdentifier:@"YTLiteSectionItem" switchOn:*value switchBlock:^BOOL(YTSettingsCell *cell, BOOL enabled) { if ([key isEqualToString:@"shortsOnlyMode"]) { @@ -107,17 +123,17 @@ static YTSettingsSectionItem *createSwitchItem(NSString *title, NSString *titleD YTSettingsViewController *settingsViewController = [self valueForKey:@"_settingsViewControllerDelegate"]; id selfObject = self; - YTSettingsSectionItem *space = [%c(YTSettingsSectionItem) itemWithTitle:nil accessibilityIdentifier:nil detailTextBlock:nil selectBlock:^BOOL (YTSettingsCell *cell, NSUInteger arg1) { return YES; }]; + YTSettingsSectionItem *space = [%c(YTSettingsSectionItem) itemWithTitle:nil accessibilityIdentifier:@"YTLiteSectionItem" detailTextBlock:nil selectBlock:nil]; YTSettingsSectionItem *general = [YTSettingsSectionItemClass itemWithTitle:LOC(@"General") - accessibilityIdentifier:nil + accessibilityIdentifier:@"YTLiteSectionItem" detailTextBlock:^NSString *() { return @"‣"; } selectBlock:^BOOL (YTSettingsCell *cell, NSUInteger arg1) { NSArray *rows = @[ - createSwitchItem(LOC(@"RemoveAds"), LOC(@"RemoveAdsDesc"), @"noAds", &kNoAds, selfObject), - createSwitchItem(LOC(@"BackgroundPlayback"), LOC(@"BackgroundPlaybackDesc"), @"backgroundPlayback", &kBackgroundPlayback, selfObject) + createSwitchItem(@"RemoveAds", @"noAds", &kNoAds, selfObject), + createSwitchItem(@"BackgroundPlayback", @"backgroundPlayback", &kBackgroundPlayback, selfObject) ]; YTSettingsPickerViewController *picker = [[%c(YTSettingsPickerViewController) alloc] initWithNavTitle:LOC(@"General") pickerSectionTitle:nil rows:rows selectedItemIndex:NSNotFound parentResponder:[self parentResponder]]; @@ -127,26 +143,26 @@ static YTSettingsSectionItem *createSwitchItem(NSString *title, NSString *titleD [sectionItems addObject:general]; YTSettingsSectionItem *navbar = [YTSettingsSectionItemClass itemWithTitle:LOC(@"Navbar") - accessibilityIdentifier:nil + accessibilityIdentifier:@"YTLiteSectionItem" detailTextBlock:^NSString *() { return @"‣"; } selectBlock:^BOOL (YTSettingsCell *cell, NSUInteger arg1) { NSArray *rows = @[ - createSwitchItem(LOC(@"RemoveCast"), LOC(@"RemoveCastDesc"), @"noCast", &kNoCast, selfObject), - createSwitchItem(LOC(@"RemoveNotifications"), LOC(@"RemoveNotificationsDesc"), @"removeNotifsButton", &kNoNotifsButton, selfObject), - createSwitchItem(LOC(@"RemoveSearch"), LOC(@"RemoveSearchDesc"), @"removeSearchButton", &kNoSearchButton, selfObject), - createSwitchItem(LOC(@"RemoveVoiceSearch"), LOC(@"RemoveVoiceSearchDesc"), @"removeVoiceSearchButton", &kNoVoiceSearchButton, selfObject) + createSwitchItem(@"RemoveCast", @"noCast", &kNoCast, selfObject), + createSwitchItem(@"RemoveNotifications", @"removeNotifsButton", &kNoNotifsButton, selfObject), + createSwitchItem(@"RemoveSearch", @"removeSearchButton", &kNoSearchButton, selfObject), + createSwitchItem(@"RemoveVoiceSearch", @"removeVoiceSearchButton", &kNoVoiceSearchButton, selfObject) ]; if (kAdvancedMode) { - YTSettingsSectionItem *addStickyNavbar = createSwitchItem(LOC(@"StickyNavbar"), LOC(@"StickyNavbarDesc"), @"stickyNavbar", &kStickyNavbar, selfObject); + YTSettingsSectionItem *addStickyNavbar = createSwitchItem(@"StickyNavbar", @"stickyNavbar", &kStickyNavbar, selfObject); rows = [rows arrayByAddingObject:addStickyNavbar]; - YTSettingsSectionItem *addNoSubbar = createSwitchItem(LOC(@"NoSubbar"), LOC(@"NoSubbarDesc"), @"noSubbar", &kNoSubbar, selfObject); + YTSettingsSectionItem *addNoSubbar = createSwitchItem(@"NoSubbar", @"noSubbar", &kNoSubbar, selfObject); rows = [rows arrayByAddingObject:addNoSubbar]; - YTSettingsSectionItem *addNoYTLogo = createSwitchItem(LOC(@"NoYTLogo"), LOC(@"NoYTLogoDesc"), @"noYTLogo", &kNoYTLogo, selfObject); + YTSettingsSectionItem *addNoYTLogo = createSwitchItem(@"NoYTLogo", @"noYTLogo", &kNoYTLogo, selfObject); rows = [rows arrayByAddingObject:addNoYTLogo]; } @@ -158,24 +174,24 @@ static YTSettingsSectionItem *createSwitchItem(NSString *title, NSString *titleD if (kAdvancedMode) { YTSettingsSectionItem *overlay = [YTSettingsSectionItemClass itemWithTitle:LOC(@"Overlay") - accessibilityIdentifier:nil + accessibilityIdentifier:@"YTLiteSectionItem" detailTextBlock:^NSString *() { return @"‣"; } selectBlock:^BOOL (YTSettingsCell *cell, NSUInteger arg1) { NSArray *rows = @[ - createSwitchItem(LOC(@"HideAutoplay"), LOC(@"HideAutoplayDesc"), @"hideAutoplay", &kHideAutoplay, selfObject), - createSwitchItem(LOC(@"HideSubs"), LOC(@"HideSubsDesc"), @"hideSubs", &kHideSubs, selfObject), - createSwitchItem(LOC(@"NoHUDMsgs"), LOC(@"NoHUDMsgsDesc"), @"noHUDMsgs", &kNoHUDMsgs, selfObject), - createSwitchItem(LOC(@"HidePrevNext"), LOC(@"HidePrevNextDesc"), @"hidePrevNext", &kHidePrevNext, selfObject), - createSwitchItem(LOC(@"ReplacePrevNext"), LOC(@"ReplacePrevNextDesc"), @"replacePrevNext", &kReplacePrevNext, selfObject), - createSwitchItem(LOC(@"NoDarkBg"), LOC(@"NoDarkBgDesc"), @"noDarkBg", &kNoDarkBg, selfObject), - createSwitchItem(LOC(@"NoEndScreenCards"), LOC(@"NoEndScreenCardsDesc"), @"endScreenCards", &kEndScreenCards, selfObject), - createSwitchItem(LOC(@"NoFullscreenActions"), LOC(@"NoFullscreenActionsDesc"), @"noFullscreenActions", &kNoFullscreenActions, selfObject), - createSwitchItem(LOC(@"PersistentProgressBar"), LOC(@"PersistentProgressBarDesc"), @"persistentProgressBar", &kPersistentProgressBar, selfObject), - createSwitchItem(LOC(@"NoRelatedVids"), LOC(@"NoRelatedVidsDesc"), @"noRelatedVids", &kNoRelatedVids, selfObject), - createSwitchItem(LOC(@"NoPromotionCards"), LOC(@"NoPromotionCardsDesc"), @"noPromotionCards", &kNoPromotionCards, selfObject), - createSwitchItem(LOC(@"NoWatermarks"), LOC(@"NoWatermarksDesc"), @"noWatermarks", &kNoWatermarks, selfObject) + createSwitchItem(@"HideAutoplay", @"hideAutoplay", &kHideAutoplay, selfObject), + createSwitchItem(@"HideSubs", @"hideSubs", &kHideSubs, selfObject), + createSwitchItem(@"NoHUDMsgs", @"noHUDMsgs", &kNoHUDMsgs, selfObject), + createSwitchItem(@"HidePrevNext", @"hidePrevNext", &kHidePrevNext, selfObject), + createSwitchItem(@"ReplacePrevNext", @"replacePrevNext", &kReplacePrevNext, selfObject), + createSwitchItem(@"NoDarkBg", @"noDarkBg", &kNoDarkBg, selfObject), + createSwitchItem(@"NoEndScreenCards", @"endScreenCards", &kEndScreenCards, selfObject), + createSwitchItem(@"NoFullscreenActions", @"noFullscreenActions", &kNoFullscreenActions, selfObject), + createSwitchItem(@"PersistentProgressBar", @"persistentProgressBar", &kPersistentProgressBar, selfObject), + createSwitchItem(@"NoRelatedVids", @"noRelatedVids", &kNoRelatedVids, selfObject), + createSwitchItem(@"NoPromotionCards", @"noPromotionCards", &kNoPromotionCards, selfObject), + createSwitchItem(@"NoWatermarks", @"noWatermarks", &kNoWatermarks, selfObject) ]; YTSettingsPickerViewController *picker = [[%c(YTSettingsPickerViewController) alloc] initWithNavTitle:LOC(@"Overlay") pickerSectionTitle:nil rows:rows selectedItemIndex:NSNotFound parentResponder:[self parentResponder]]; @@ -185,27 +201,30 @@ static YTSettingsSectionItem *createSwitchItem(NSString *title, NSString *titleD [sectionItems addObject:overlay]; YTSettingsSectionItem *player = [YTSettingsSectionItemClass itemWithTitle:LOC(@"Player") - accessibilityIdentifier:nil + accessibilityIdentifier:@"YTLiteSectionItem" detailTextBlock:^NSString *() { return @"‣"; } selectBlock:^BOOL (YTSettingsCell *cell, NSUInteger arg1) { NSArray *rows = @[ - createSwitchItem(LOC(@"Miniplayer"), LOC(@"MiniplayerDesc"), @"miniplayer", &kMiniplayer, selfObject), - createSwitchItem(LOC(@"PortraitFullscreen"), LOC(@"PortraitFullscreenDesc"), @"portraitFullscreen", &kPortraitFullscreen, selfObject), - createSwitchItem(LOC(@"CopyWithTimestamp"), LOC(@"CopyWithTimestampDesc"), @"copyWithTimestamp", &kCopyWithTimestamp, selfObject), - createSwitchItem(LOC(@"DisableAutoplay"), LOC(@"DisableAutoplayDesc"), @"disableAutoplay", &kDisableAutoplay, selfObject), - createSwitchItem(LOC(@"DisableAutoCaptions"), LOC(@"DisableAutoCaptionsDesc"), @"disableAutoCaptions", &kDisableAutoCaptions, selfObject), - createSwitchItem(LOC(@"NoContentWarning"), LOC(@"NoContentWarningDesc"), @"noContentWarning", &kNoContentWarning, selfObject), - createSwitchItem(LOC(@"ClassicQuality"), LOC(@"ClassicQualityDesc"), @"classicQuality", &kClassicQuality, selfObject), - createSwitchItem(LOC(@"ExtraSpeedOptions"), LOC(@"ExtraSpeedOptionsDesc"), @"extraSpeedOptions", &kExtraSpeedOptions, selfObject), - createSwitchItem(LOC(@"DontSnap2Chapter"), LOC(@"DontSnap2ChapterDesc"), @"dontSnapToChapter", &kDontSnapToChapter, selfObject), - createSwitchItem(LOC(@"RedProgressBar"), LOC(@"RedProgressBarDesc"), @"redProgressBar", &kRedProgressBar, selfObject), - createSwitchItem(LOC(@"NoHints"), LOC(@"NoHintsDesc"), @"noHints", &kNoHints, selfObject), - createSwitchItem(LOC(@"NoFreeZoom"), LOC(@"NoFreeZoomDesc"), @"noFreeZoom", &kNoFreeZoom, selfObject), - createSwitchItem(LOC(@"AutoFullscreen"), LOC(@"AutoFullscreenDesc"), @"autoFullscreen", &kAutoFullscreen, selfObject), - createSwitchItem(LOC(@"ExitFullscreen"), LOC(@"ExitFullscreenDesc"), @"exitFullscreen", &kExitFullscreen, selfObject), - createSwitchItem(LOC(@"NoDoubleTap2Seek"), LOC(@"NoDoubleTap2SeekDesc"), @"noDoubleTapToSeek", &kNoDoubleTapToSeek, selfObject) + createSwitchItem(@"Miniplayer", @"miniplayer", &kMiniplayer, selfObject), + createSwitchItem(@"PortraitFullscreen", @"portraitFullscreen", &kPortraitFullscreen, selfObject), + createSwitchItem(@"CopyWithTimestamp", @"copyWithTimestamp", &kCopyWithTimestamp, selfObject), + createSwitchItem(@"DisableAutoplay", @"disableAutoplay", &kDisableAutoplay, selfObject), + createSwitchItem(@"DisableAutoCaptions", @"disableAutoCaptions", &kDisableAutoCaptions, selfObject), + createSwitchItem(@"NoContentWarning", @"noContentWarning", &kNoContentWarning, selfObject), + createSwitchItem(@"ClassicQuality", @"classicQuality", &kClassicQuality, selfObject), + createSwitchItem(@"ExtraSpeedOptions", @"extraSpeedOptions", &kExtraSpeedOptions, selfObject), + createSwitchItem(@"DontSnap2Chapter", @"dontSnapToChapter", &kDontSnapToChapter, selfObject), + createSwitchItem(@"RedProgressBar", @"redProgressBar", &kRedProgressBar, selfObject), + createSwitchItem(@"NoPlayerRemixButton", @"noPlayerRemixButton", &kNoPlayerRemixButton, selfObject), + createSwitchItem(@"NoPlayerClipButton", @"noPlayerClipButton", &kNoPlayerClipButton, selfObject), + createSwitchItem(@"NoPlayerDownloadButton", @"noPlayerDownloadButton", &kNoPlayerDownloadButton, selfObject), + createSwitchItem(@"NoHints", @"noHints", &kNoHints, selfObject), + createSwitchItem(@"NoFreeZoom", @"noFreeZoom", &kNoFreeZoom, selfObject), + createSwitchItem(@"AutoFullscreen", @"autoFullscreen", &kAutoFullscreen, selfObject), + createSwitchItem(@"ExitFullscreen", @"exitFullscreen", &kExitFullscreen, selfObject), + createSwitchItem(@"NoDoubleTap2Seek", @"noDoubleTapToSeek", &kNoDoubleTapToSeek, selfObject) ]; YTSettingsPickerViewController *picker = [[%c(YTSettingsPickerViewController) alloc] initWithNavTitle:LOC(@"Player") pickerSectionTitle:nil rows:rows selectedItemIndex:NSNotFound parentResponder:[self parentResponder]]; @@ -215,35 +234,35 @@ static YTSettingsSectionItem *createSwitchItem(NSString *title, NSString *titleD [sectionItems addObject:player]; YTSettingsSectionItem *shorts = [YTSettingsSectionItemClass itemWithTitle:LOC(@"Shorts") - accessibilityIdentifier:nil + accessibilityIdentifier:@"YTLiteSectionItem" detailTextBlock:^NSString *() { return @"‣"; } selectBlock:^BOOL (YTSettingsCell *cell, NSUInteger arg1) { NSArray *rows = @[ - createSwitchItem(LOC(@"ShortsOnlyMode"), LOC(@"ShortsOnlyModeDesc"), @"shortsOnlyMode", &kShortsOnlyMode, selfObject), - createSwitchItem(LOC(@"HideShorts"), LOC(@"HideShortsDesc"), @"hideShorts", &kHideShorts, selfObject), - createSwitchItem(LOC(@"ShortsProgress"), LOC(@"ShortsProgressDesc"), @"shortsProgress", &kShortsProgress, selfObject), - createSwitchItem(LOC(@"PinchToFullscreenShorts"), LOC(@"PinchToFullscreenShortsDesc"), @"pinchToFullscreenShorts", &kPinchToFullscreenShorts, selfObject), - createSwitchItem(LOC(@"ShortsToRegular"), LOC(@"ShortsToRegularDesc"), @"shortsToRegular", &kShortsToRegular, selfObject), - createSwitchItem(LOC(@"ResumeShorts"), LOC(@"ResumeShortsDesc"), @"resumeShorts", &kResumeShorts, selfObject), - createSwitchItem(LOC(@"HideShortsLogo"), LOC(@"HideShortsLogoDesc"), @"hideShortsLogo", &kHideShortsLogo, selfObject), - createSwitchItem(LOC(@"HideShortsSearch"), LOC(@"HideShortsSearchDesc"), @"hideShortsSearch", &kHideShortsSearch, selfObject), - createSwitchItem(LOC(@"HideShortsCamera"), LOC(@"HideShortsCameraDesc"), @"hideShortsCamera", &kHideShortsCamera, selfObject), - createSwitchItem(LOC(@"HideShortsMore"), LOC(@"HideShortsMoreDesc"), @"hideShortsMore", &kHideShortsMore, selfObject), - createSwitchItem(LOC(@"HideShortsSubscriptions"), LOC(@"HideShortsSubscriptionsDesc"), @"hideShortsSubscriptions", &kHideShortsSubscriptions, selfObject), - createSwitchItem(LOC(@"HideShortsLike"), LOC(@"HideShortsLikeDesc"), @"hideShortsLike", &kHideShortsLike, selfObject), - createSwitchItem(LOC(@"HideShortsDislike"), LOC(@"HideShortsDislikeDesc"), @"hideShortsDislike", &kHideShortsDislike, selfObject), - createSwitchItem(LOC(@"HideShortsComments"), LOC(@"HideShortsCommentsDesc"), @"hideShortsComments", &kHideShortsComments, selfObject), - createSwitchItem(LOC(@"HideShortsRemix"), LOC(@"HideShortsRemixDesc"), @"hideShortsRemix", &kHideShortsRemix, selfObject), - createSwitchItem(LOC(@"HideShortsShare"), LOC(@"HideShortsShareDesc"), @"hideShortsShare", &kHideShortsShare, selfObject), - createSwitchItem(LOC(@"HideShortsAvatars"), LOC(@"HideShortsAvatarsDesc"), @"hideShortsAvatars", &kHideShortsAvatars, selfObject), - createSwitchItem(LOC(@"HideShortsThanks"), LOC(@"HideShortsThanksDesc"), @"hideShortsThanks", &kHideShortsThanks, selfObject), - createSwitchItem(LOC(@"HideShortsSource"), LOC(@"HideShortsSourceDesc"), @"hideShortsSource", &kHideShortsSource, selfObject), - createSwitchItem(LOC(@"HideShortsChannelName"), LOC(@"HideShortsChannelNameDesc"), @"hideShortsChannelName", &kHideShortsChannelName, selfObject), - createSwitchItem(LOC(@"HideShortsDescription"), LOC(@"HideShortsDescriptionDesc"), @"hideShortsDescription", &kHideShortsDescription, selfObject), - createSwitchItem(LOC(@"HideShortsAudioTrack"), LOC(@"HideShortsAudioTrackDesc"), @"hideShortsAudioTrack", &kHideShortsAudioTrack, selfObject), - createSwitchItem(LOC(@"NoPromotionCards"), LOC(@"NoPromotionCardsDesc"), @"hideShortsPromoCards", &kHideShortsPromoCards, selfObject) + createSwitchItem(@"ShortsOnlyMode", @"shortsOnlyMode", &kShortsOnlyMode, selfObject), + createSwitchItem(@"HideShorts", @"hideShorts", &kHideShorts, selfObject), + createSwitchItem(@"ShortsProgress", @"shortsProgress", &kShortsProgress, selfObject), + createSwitchItem(@"PinchToFullscreenShorts", @"pinchToFullscreenShorts", &kPinchToFullscreenShorts, selfObject), + createSwitchItem(@"ShortsToRegular", @"shortsToRegular", &kShortsToRegular, selfObject), + createSwitchItem(@"ResumeShorts", @"resumeShorts", &kResumeShorts, selfObject), + createSwitchItem(@"HideShortsLogo", @"hideShortsLogo", &kHideShortsLogo, selfObject), + createSwitchItem(@"HideShortsSearch", @"hideShortsSearch", &kHideShortsSearch, selfObject), + createSwitchItem(@"HideShortsCamera", @"hideShortsCamera", &kHideShortsCamera, selfObject), + createSwitchItem(@"HideShortsMore", @"hideShortsMore", &kHideShortsMore, selfObject), + createSwitchItem(@"HideShortsSubscriptions", @"hideShortsSubscriptions", &kHideShortsSubscriptions, selfObject), + createSwitchItem(@"HideShortsLike", @"hideShortsLike", &kHideShortsLike, selfObject), + createSwitchItem(@"HideShortsDislike", @"hideShortsDislike", &kHideShortsDislike, selfObject), + createSwitchItem(@"HideShortsComments", @"hideShortsComments", &kHideShortsComments, selfObject), + createSwitchItem(@"HideShortsRemix", @"hideShortsRemix", &kHideShortsRemix, selfObject), + createSwitchItem(@"HideShortsShare", @"hideShortsShare", &kHideShortsShare, selfObject), + createSwitchItem(@"HideShortsAvatars", @"hideShortsAvatars", &kHideShortsAvatars, selfObject), + createSwitchItem(@"HideShortsThanks", @"hideShortsThanks", &kHideShortsThanks, selfObject), + createSwitchItem(@"HideShortsSource", @"hideShortsSource", &kHideShortsSource, selfObject), + createSwitchItem(@"HideShortsChannelName", @"hideShortsChannelName", &kHideShortsChannelName, selfObject), + createSwitchItem(@"HideShortsDescription", @"hideShortsDescription", &kHideShortsDescription, selfObject), + createSwitchItem(@"HideShortsAudioTrack", @"hideShortsAudioTrack", &kHideShortsAudioTrack, selfObject), + createSwitchItem(@"NoPromotionCards", @"hideShortsPromoCards", &kHideShortsPromoCards, selfObject) ]; YTSettingsPickerViewController *picker = [[%c(YTSettingsPickerViewController) alloc] initWithNavTitle:LOC(@"Shorts") pickerSectionTitle:nil rows:rows selectedItemIndex:NSNotFound parentResponder:[self parentResponder]]; [settingsViewController pushViewController:picker]; @@ -253,20 +272,20 @@ static YTSettingsSectionItem *createSwitchItem(NSString *title, NSString *titleD } YTSettingsSectionItem *tabbar = [YTSettingsSectionItemClass itemWithTitle:LOC(@"Tabbar") - accessibilityIdentifier:nil + accessibilityIdentifier:@"YTLiteSectionItem" detailTextBlock:^NSString *() { return @"‣"; } selectBlock:^BOOL (YTSettingsCell *cell, NSUInteger arg1) { NSArray *rows = @[ - createSwitchItem(LOC(@"RemoveLabels"), LOC(@"RemoveLabelsDesc"), @"removeLabels", &kRemoveLabels, selfObject), - createSwitchItem(LOC(@"RemoveIndicators"), LOC(@"RemoveIndicatorsDesc"), @"removeIndicators", &kRemoveIndicators, selfObject), - createSwitchItem(LOC(@"ReExplore"), LOC(@"ReExploreDesc"), @"reExplore", &kReExplore, selfObject), - createSwitchItem(LOC(@"AddExplore"), LOC(@"AddExploreDesc"), @"addExplore", &kAddExplore, selfObject), - createSwitchItem(LOC(@"HideShortsTab"), LOC(@"HideShortsTabDesc"), @"removeShorts", &kRemoveShorts, selfObject), - createSwitchItem(LOC(@"HideSubscriptionsTab"), LOC(@"HideSubscriptionsTabDesc"), @"removeSubscriptions", &kRemoveSubscriptions, selfObject), - createSwitchItem(LOC(@"HideUploadButton"), LOC(@"HideUploadButtonDesc"), @"removeUploads", &kRemoveUploads, selfObject), - createSwitchItem(LOC(@"HideLibraryTab"), LOC(@"HideLibraryTabDesc"), @"removeLibrary", &kRemoveLibrary, selfObject) + createSwitchItem(@"RemoveLabels", @"removeLabels", &kRemoveLabels, selfObject), + createSwitchItem(@"RemoveIndicators", @"removeIndicators", &kRemoveIndicators, selfObject), + createSwitchItem(@"ReExplore", @"reExplore", &kReExplore, selfObject), + createSwitchItem(@"AddExplore", @"addExplore", &kAddExplore, selfObject), + createSwitchItem(@"HideShortsTab", @"removeShorts", &kRemoveShorts, selfObject), + createSwitchItem(@"HideSubscriptionsTab", @"removeSubscriptions", &kRemoveSubscriptions, selfObject), + createSwitchItem(@"HideUploadButton", @"removeUploads", &kRemoveUploads, selfObject), + createSwitchItem(@"HideLibraryTab", @"removeLibrary", &kRemoveLibrary, selfObject) ]; YTSettingsPickerViewController *picker = [[%c(YTSettingsPickerViewController) alloc] initWithNavTitle:LOC(@"Tabbar") pickerSectionTitle:nil rows:rows selectedItemIndex:NSNotFound parentResponder:[self parentResponder]]; @@ -277,26 +296,32 @@ static YTSettingsSectionItem *createSwitchItem(NSString *title, NSString *titleD if (kAdvancedMode) { YTSettingsSectionItem *other = [YTSettingsSectionItemClass itemWithTitle:LOC(@"Other") - accessibilityIdentifier:nil + accessibilityIdentifier:@"YTLiteSectionItem" detailTextBlock:^NSString *() { return @"‣"; } selectBlock:^BOOL (YTSettingsCell *cell, NSUInteger arg1) { NSArray *rows = @[ - createSwitchItem(LOC(@"CopyVideoInfo"), LOC(@"CopyVideoInfoDesc"), @"copyVideoInfo", &kCopyVideoInfo, selfObject), - createSwitchItem(LOC(@"PostManager"), LOC(@"PostManagerDesc"), @"postManager", &kPostManager, selfObject), - createSwitchItem(LOC(@"SavePostImage"), LOC(@"SavePostImageDesc"), @"savePostImage", &kSavePostImage, selfObject), - createSwitchItem(LOC(@"SaveProfilePhoto"), LOC(@"SaveProfilePhotoDesc"), @"saveProfilePhoto", &kSaveProfilePhoto, selfObject), - createSwitchItem(LOC(@"CommentManager"), LOC(@"CommentManagerDesc"), @"commentManager", &kCommentManager, selfObject), - createSwitchItem(LOC(@"FixAlbums"), LOC(@"FixAlbumsDesc"), @"fixAlbums", &kFixAlbums, selfObject), - createSwitchItem(LOC(@"RemovePlayNext"), LOC(@"RemovePlayNextDesc"), @"removePlayNext", &kRemovePlayNext, selfObject), - createSwitchItem(LOC(@"NoContinueWatching"), LOC(@"NoContinueWatchingDesc"), @"noContinueWatching", &kNoContinueWatching, selfObject), - createSwitchItem(LOC(@"NoSearchHistory"), LOC(@"NoSearchHistoryDesc"), @"noSearchHistory", &kNoSearchHistory, selfObject), - createSwitchItem(LOC(@"NoRelatedWatchNexts"), LOC(@"NoRelatedWatchNextsDesc"), @"noRelatedWatchNexts", &kNoRelatedWatchNexts, selfObject), - createSwitchItem(LOC(@"StickSortComments"), LOC(@"StickSortCommentsDesc"), @"stickSortComments", &kStickSortComments, selfObject), - createSwitchItem(LOC(@"HideSortComments"), LOC(@"HideSortCommentsDesc"), @"hideSortComments", &kHideSortComments, selfObject), - createSwitchItem(LOC(@"PlaylistOldMinibar"), LOC(@"PlaylistOldMinibarDesc"), @"playlistOldMinibar", &kPlaylistOldMinibar, selfObject), - createSwitchItem(LOC(@"DisableRTL"), LOC(@"DisableRTLDesc"), @"disableRTL", &kDisableRTL, selfObject) + createSwitchItem(@"CopyVideoInfo", @"copyVideoInfo", &kCopyVideoInfo, selfObject), + createSwitchItem(@"PostManager", @"postManager", &kPostManager, selfObject), + createSwitchItem(@"SaveProfilePhoto", @"saveProfilePhoto", &kSaveProfilePhoto, selfObject), + createSwitchItem(@"CommentManager", @"commentManager", &kCommentManager, selfObject), + createSwitchItem(@"FixAlbums", @"fixAlbums", &kFixAlbums, selfObject), + createSwitchItem(@"RemovePlayNext", @"removePlayNext", &kRemovePlayNext, selfObject), + createSwitchItem(@"RemoveDownloadMenu", @"removeDownloadMenu", &kRemoveDownloadMenu, selfObject), + createSwitchItem(@"RemoveWatchLaterMenu", @"removeWatchLaterMenu", &kRemoveWatchLaterMenu, selfObject), + createSwitchItem(@"RemoveSaveToPlaylistMenu", @"removeSaveToPlaylistMenu", &kRemoveSaveToPlaylistMenu, selfObject), + createSwitchItem(@"RemoveShareMenu", @"removeShareMenu", &kRemoveShareMenu, selfObject), + createSwitchItem(@"RemoveNotInterestedMenu", @"removeNotInterestedMenu", &kRemoveNotInterestedMenu, selfObject), + createSwitchItem(@"RemoveDontRecommendMenu", @"removeDontRecommendMenu", &kRemoveDontRecommendMenu, selfObject), + createSwitchItem(@"RemoveReportMenu", @"removeReportMenu", &kRemoveReportMenu, selfObject), + createSwitchItem(@"NoContinueWatching", @"noContinueWatching", &kNoContinueWatching, selfObject), + createSwitchItem(@"NoSearchHistory", @"noSearchHistory", &kNoSearchHistory, selfObject), + createSwitchItem(@"NoRelatedWatchNexts", @"noRelatedWatchNexts", &kNoRelatedWatchNexts, selfObject), + createSwitchItem(@"StickSortComments", @"stickSortComments", &kStickSortComments, selfObject), + createSwitchItem(@"HideSortComments", @"hideSortComments", &kHideSortComments, selfObject), + createSwitchItem(@"PlaylistOldMinibar", @"playlistOldMinibar", &kPlaylistOldMinibar, selfObject), + createSwitchItem(@"DisableRTL", @"disableRTL", &kDisableRTL, selfObject) ]; YTSettingsPickerViewController *picker = [[%c(YTSettingsPickerViewController) alloc] initWithNavTitle:LOC(@"Other") pickerSectionTitle:nil rows:rows selectedItemIndex:NSNotFound parentResponder:[self parentResponder]]; @@ -307,88 +332,121 @@ static YTSettingsSectionItem *createSwitchItem(NSString *title, NSString *titleD [sectionItems addObject:space]; - YTSettingsSectionItem *startup = [YTSettingsSectionItemClass itemWithTitle:LOC(@"Startup") - accessibilityIdentifier:nil + YTSettingsSectionItem *wifiQuality = [YTSettingsSectionItemClass itemWithTitle:LOC(@"PlaybackQualityOnWiFi") + accessibilityIdentifier:@"YTLiteSectionItem" detailTextBlock:^NSString *() { - switch (kPivotIndex) { - case 1: - return LOC(@"Explore"); - case 2: - return LOC(@"ShortsTab"); - case 3: - return LOC(@"Subscriptions"); - case 4: - return LOC(@"Library"); - case 0: - default: - return LOC(@"Home"); - } + NSString *qualityLabel = kWiFiQualityIndex == 1 ? LOC(@"Best") : + kWiFiQualityIndex == 2 ? @"2160p60" : + kWiFiQualityIndex == 3 ? @"2160p" : + kWiFiQualityIndex == 4 ? @"1440p60" : + kWiFiQualityIndex == 5 ? @"1440p" : + kWiFiQualityIndex == 6 ? @"1080p60" : + kWiFiQualityIndex == 7 ? @"1080p" : + kWiFiQualityIndex == 8 ? @"720p60" : + kWiFiQualityIndex == 9 ? @"720p" : + kWiFiQualityIndex == 10 ? @"480p" : + kWiFiQualityIndex == 11 ? @"360p" : + LOC(@"Default"); + + return qualityLabel; } selectBlock:^BOOL (YTSettingsCell *cell, NSUInteger arg1) { - NSArray *rows = @[ - [YTSettingsSectionItemClass checkmarkItemWithTitle:LOC(@"Home") titleDescription:nil selectBlock:^BOOL (YTSettingsCell *home, NSUInteger arg1) { - kPivotIndex = 0; + NSMutableArray *rows = [NSMutableArray array]; + NSArray *qualityTitles = @[LOC(@"Default"), LOC(@"Best"), @"2160p60", @"2160p", @"1440p60", @"1440p", @"1080p60", @"1080p", @"720p60", @"720p", @"480p", @"360p"]; + + for (NSUInteger i = 0; i < qualityTitles.count; i++) { + NSString *title = qualityTitles[i]; + YTSettingsSectionItem *item = [YTSettingsSectionItemClass checkmarkItemWithTitle:title titleDescription:nil selectBlock:^BOOL (YTSettingsCell *cell, NSUInteger arg1) { + kWiFiQualityIndex = (int)arg1; [settingsViewController reloadData]; - [self updateIntegerPrefsForKey:@"pivotIndex" intValue:kPivotIndex]; + [self updateIntegerPrefsForKey:@"wifiQualityIndex" intValue:kWiFiQualityIndex]; return YES; - }], - [YTSettingsSectionItemClass checkmarkItemWithTitle:LOC(@"Explore") titleDescription:nil selectBlock:^BOOL (YTSettingsCell *library, NSUInteger arg1) { - if (!kReExplore && !kAddExplore) { - YTAlertView *alertView = [%c(YTAlertView) infoDialog]; - alertView.title = LOC(@"Warning"); - alertView.subtitle = LOC(@"TabIsHidden"); - [alertView show]; - return NO; + }]; + [rows addObject:item]; + } + + YTSettingsPickerViewController *picker = [[%c(YTSettingsPickerViewController) alloc] initWithNavTitle:LOC(@"SelectQuality") pickerSectionTitle:nil rows:rows selectedItemIndex:kWiFiQualityIndex parentResponder:[self parentResponder]]; + [settingsViewController pushViewController:picker]; + return YES; + }]; + [sectionItems addObject:wifiQuality]; + + YTSettingsSectionItem *cellQuality = [YTSettingsSectionItemClass itemWithTitle:LOC(@"PlaybackQualityOnCellular") + accessibilityIdentifier:@"YTLiteSectionItem" + detailTextBlock:^NSString *() { + NSString *qualityLabel = kCellQualityIndex == 1 ? LOC(@"Best") : + kCellQualityIndex == 2 ? @"2160p60" : + kCellQualityIndex == 3 ? @"2160p" : + kCellQualityIndex == 4 ? @"1440p60" : + kCellQualityIndex == 5 ? @"1440p" : + kCellQualityIndex == 6 ? @"1080p60" : + kCellQualityIndex == 7 ? @"1080p" : + kCellQualityIndex == 8 ? @"720p60" : + kCellQualityIndex == 9 ? @"720p" : + kCellQualityIndex == 10 ? @"480p" : + kCellQualityIndex == 11 ? @"360p" : + LOC(@"Default"); + + return qualityLabel; + } + selectBlock:^BOOL (YTSettingsCell *cell, NSUInteger arg1) { + NSMutableArray *rows = [NSMutableArray array]; + NSArray *qualityTitles = @[LOC(@"Default"), LOC(@"Best"), @"2160p60", @"2160p", @"1440p60", @"1440p", @"1080p60", @"1080p", @"720p60", @"720p", @"480p", @"360p"]; + + for (NSUInteger i = 0; i < qualityTitles.count; i++) { + NSString *title = qualityTitles[i]; + YTSettingsSectionItem *item = [YTSettingsSectionItemClass checkmarkItemWithTitle:title titleDescription:nil selectBlock:^BOOL (YTSettingsCell *cell, NSUInteger arg1) { + kCellQualityIndex = (int)arg1; + [settingsViewController reloadData]; + [self updateIntegerPrefsForKey:@"cellQualityIndex" intValue:kCellQualityIndex]; + return YES; + }]; + [rows addObject:item]; + } + + YTSettingsPickerViewController *picker = [[%c(YTSettingsPickerViewController) alloc] initWithNavTitle:LOC(@"SelectQuality") pickerSectionTitle:nil rows:rows selectedItemIndex:kCellQualityIndex parentResponder:[self parentResponder]]; + [settingsViewController pushViewController:picker]; + return YES; + }]; + [sectionItems addObject:cellQuality]; + + YTSettingsSectionItem *startup = [YTSettingsSectionItemClass itemWithTitle:LOC(@"Startup") + accessibilityIdentifier:@"YTLiteSectionItem" + detailTextBlock:^NSString *() { + NSString *tabLabel = kPivotIndex == 1 ? LOC(@"Explore") : + kPivotIndex == 2 ? LOC(@"ShortsTab") : + kPivotIndex == 3 ? LOC(@"Subscriptions") : + kPivotIndex == 4 ? LOC(@"Library") : + LOC(@"Home"); + + return tabLabel; + } + selectBlock:^BOOL (YTSettingsCell *cell, NSUInteger arg1) { + NSMutableArray *rows = [NSMutableArray array]; + NSArray *tabTitles = @[LOC(@"Home"), LOC(@"Explore"), LOC(@"ShortsTab"), LOC(@"Subscriptions"), LOC(@"Library")]; + + for (NSUInteger i = 0; i < tabTitles.count; i++) { + NSString *title = tabTitles[i]; + YTSettingsSectionItem *item = [YTSettingsSectionItemClass checkmarkItemWithTitle:title titleDescription:nil selectBlock:^BOOL (YTSettingsCell *cell, NSUInteger arg1) { + if (([title isEqualToString:LOC(@"Explore")] && !kReExplore && !kAddExplore) || + ([title isEqualToString:LOC(@"ShortsTab")] && kRemoveShorts) || + ([title isEqualToString:LOC(@"Subscriptions")] && kRemoveSubscriptions) || + ([title isEqualToString:LOC(@"Library")] && kRemoveLibrary)) { + YTAlertView *alertView = [%c(YTAlertView) infoDialog]; + alertView.title = LOC(@"Warning"); + alertView.subtitle = LOC(@"TabIsHidden"); + [alertView show]; + return NO; } else { - kPivotIndex = 1; + kPivotIndex = (int)arg1; [settingsViewController reloadData]; [self updateIntegerPrefsForKey:@"pivotIndex" intValue:kPivotIndex]; return YES; } - }], - [YTSettingsSectionItemClass checkmarkItemWithTitle:LOC(@"ShortsTab") titleDescription:nil selectBlock:^BOOL (YTSettingsCell *shorts, NSUInteger arg1) { - if (kRemoveShorts) { - YTAlertView *alertView = [%c(YTAlertView) infoDialog]; - alertView.title = LOC(@"Warning"); - alertView.subtitle = LOC(@"TabIsHidden"); - [alertView show]; - return NO; - } else { - kPivotIndex = 2; - [settingsViewController reloadData]; - [self updateIntegerPrefsForKey:@"pivotIndex" intValue:kPivotIndex]; - return YES; - } - }], - [YTSettingsSectionItemClass checkmarkItemWithTitle:LOC(@"Subscriptions") titleDescription:nil selectBlock:^BOOL (YTSettingsCell *subscriptions, NSUInteger arg1) { - if (kRemoveSubscriptions) { - YTAlertView *alertView = [%c(YTAlertView) infoDialog]; - alertView.title = LOC(@"Warning"); - alertView.subtitle = LOC(@"TabIsHidden"); - [alertView show]; - return NO; - } else { - kPivotIndex = 3; - [settingsViewController reloadData]; - [self updateIntegerPrefsForKey:@"pivotIndex" intValue:kPivotIndex]; - return YES; - } - }], - [YTSettingsSectionItemClass checkmarkItemWithTitle:LOC(@"Library") titleDescription:nil selectBlock:^BOOL (YTSettingsCell *library, NSUInteger arg1) { - if (kRemoveLibrary) { - YTAlertView *alertView = [%c(YTAlertView) infoDialog]; - alertView.title = LOC(@"Warning"); - alertView.subtitle = LOC(@"TabIsHidden"); - [alertView show]; - return NO; - } else { - kPivotIndex = 4; - [settingsViewController reloadData]; - [self updateIntegerPrefsForKey:@"pivotIndex" intValue:kPivotIndex]; - return YES; - } - }] - ]; + }]; + [rows addObject:item]; + } + YTSettingsPickerViewController *picker = [[%c(YTSettingsPickerViewController) alloc] initWithNavTitle:LOC(@"Startup") pickerSectionTitle:nil rows:rows selectedItemIndex:kPivotIndex parentResponder:[self parentResponder]]; [settingsViewController pushViewController:picker]; return YES; @@ -398,55 +456,72 @@ static YTSettingsSectionItem *createSwitchItem(NSString *title, NSString *titleD [sectionItems addObject:space]; - YTSettingsSectionItem *ps = [%c(YTSettingsSectionItem) itemWithTitle:@"PoomSmart" titleDescription:@"YouTube-X, YTNoPremium, YTClassicVideoQuality, YTShortsProgress, YTReExplore, SkipContentWarning, YTAutoFullscreen, YouTubeHeaders" accessibilityIdentifier:nil detailTextBlock:nil selectBlock:^BOOL (YTSettingsCell *cell, NSUInteger arg1) { + YTSettingsSectionItem *ps = [%c(YTSettingsSectionItem) itemWithTitle:@"PoomSmart" titleDescription:@"YouTube-X, YTNoPremium, YTClassicVideoQuality, YTShortsProgress, YTReExplore, SkipContentWarning, YTAutoFullscreen, YouTubeHeaders" accessibilityIdentifier:@"YTLiteSectionItem" detailTextBlock:nil selectBlock:^BOOL (YTSettingsCell *cell, NSUInteger arg1) { return [%c(YTUIUtils) openURL:[NSURL URLWithString:@"https://github.com/PoomSmart/"]]; }]; - YTSettingsSectionItem *miro = [%c(YTSettingsSectionItem) itemWithTitle:@"MiRO92" titleDescription:@"YTNoShorts" accessibilityIdentifier:nil detailTextBlock:nil selectBlock:^BOOL (YTSettingsCell *cell, NSUInteger arg1) { + YTSettingsSectionItem *miro = [%c(YTSettingsSectionItem) itemWithTitle:@"MiRO92" titleDescription:@"YTNoShorts" accessibilityIdentifier:@"YTLiteSectionItem" detailTextBlock:nil selectBlock:^BOOL (YTSettingsCell *cell, NSUInteger arg1) { return [%c(YTUIUtils) openURL:[NSURL URLWithString:@"https://github.com/MiRO92/"]]; }]; - YTSettingsSectionItem *lillie = [%c(YTSettingsSectionItem) itemWithTitle:@"Lillie" titleDescription:@"ExtraSpeedOptions" accessibilityIdentifier:nil detailTextBlock:nil selectBlock:^BOOL (YTSettingsCell *cell, NSUInteger arg1) { - return [%c(YTUIUtils) openURL:[NSURL URLWithString:@"https://github.com/LillieH1000"]]; + YTSettingsSectionItem *tonymillion = [%c(YTSettingsSectionItem) itemWithTitle:@"Tony Million" titleDescription:@"Reachability" accessibilityIdentifier:@"YTLiteSectionItem" detailTextBlock:nil selectBlock:^BOOL (YTSettingsCell *cell, NSUInteger arg1) { + return [%c(YTUIUtils) openURL:[NSURL URLWithString:@"https://github.com/tonymillion/Reachability"]]; }]; - YTSettingsSectionItem *stalker = [%c(YTSettingsSectionItem) itemWithTitle:@"Stalker" titleDescription:LOC(@"ChineseSimplified") accessibilityIdentifier:nil detailTextBlock:nil selectBlock:^BOOL (YTSettingsCell *cell, NSUInteger arg1) { + YTSettingsSectionItem *stalker = [%c(YTSettingsSectionItem) itemWithTitle:@"Stalker" titleDescription:LOC(@"ChineseSimplified") accessibilityIdentifier:@"YTLiteSectionItem" detailTextBlock:nil selectBlock:^BOOL (YTSettingsCell *cell, NSUInteger arg1) { return [%c(YTUIUtils) openURL:[NSURL URLWithString:@"https://github.com/xiangfeidexiaohuo"]]; }]; - YTSettingsSectionItem *clement = [%c(YTSettingsSectionItem) itemWithTitle:@"Clement" titleDescription:LOC(@"ChineseTraditional") accessibilityIdentifier:nil detailTextBlock:nil selectBlock:^BOOL (YTSettingsCell *cell, NSUInteger arg1) { + YTSettingsSectionItem *clement = [%c(YTSettingsSectionItem) itemWithTitle:@"Clement" titleDescription:LOC(@"ChineseTraditional") accessibilityIdentifier:@"YTLiteSectionItem" detailTextBlock:nil selectBlock:^BOOL (YTSettingsCell *cell, NSUInteger arg1) { return [%c(YTUIUtils) openURL:[NSURL URLWithString:@"https://twitter.com/a100900900"]]; }]; - YTSettingsSectionItem *balackburn = [%c(YTSettingsSectionItem) itemWithTitle:@"Balackburn" titleDescription:LOC(@"French") accessibilityIdentifier:nil detailTextBlock:nil selectBlock:^BOOL (YTSettingsCell *cell, NSUInteger arg1) { + YTSettingsSectionItem *balackburn = [%c(YTSettingsSectionItem) itemWithTitle:@"Balackburn" titleDescription:LOC(@"French") accessibilityIdentifier:@"YTLiteSectionItem" detailTextBlock:nil selectBlock:^BOOL (YTSettingsCell *cell, NSUInteger arg1) { return [%c(YTUIUtils) openURL:[NSURL URLWithString:@"https://github.com/Balackburn"]]; }]; - YTSettingsSectionItem *decibelios = [%c(YTSettingsSectionItem) itemWithTitle:@"DeciBelioS" titleDescription:LOC(@"Spanish") accessibilityIdentifier:nil detailTextBlock:nil selectBlock:^BOOL (YTSettingsCell *cell, NSUInteger arg1) { + YTSettingsSectionItem *decibelios = [%c(YTSettingsSectionItem) itemWithTitle:@"DeciBelioS" titleDescription:LOC(@"Spanish") accessibilityIdentifier:@"YTLiteSectionItem" detailTextBlock:nil selectBlock:^BOOL (YTSettingsCell *cell, NSUInteger arg1) { return [%c(YTUIUtils) openURL:[NSURL URLWithString:@"https://github.com/Deci8BelioS"]]; }]; - YTSettingsSectionItem *skeids = [%c(YTSettingsSectionItem) itemWithTitle:@"SKEIDs" titleDescription:LOC(@"Japanese") accessibilityIdentifier:nil detailTextBlock:nil selectBlock:^BOOL (YTSettingsCell *cell, NSUInteger arg1) { + YTSettingsSectionItem *skeids = [%c(YTSettingsSectionItem) itemWithTitle:@"SKEIDs" titleDescription:LOC(@"Japanese") accessibilityIdentifier:@"YTLiteSectionItem" detailTextBlock:nil selectBlock:^BOOL (YTSettingsCell *cell, NSUInteger arg1) { return [%c(YTUIUtils) openURL:[NSURL URLWithString:@"https://github.com/SKEIDs"]]; }]; - YTSettingsSectionItem *hiepvk = [%c(YTSettingsSectionItem) itemWithTitle:@"Hiepvk" titleDescription:LOC(@"Vietnamese") accessibilityIdentifier:nil detailTextBlock:nil selectBlock:^BOOL (YTSettingsCell *cell, NSUInteger arg1) { + YTSettingsSectionItem *hiepvk = [%c(YTSettingsSectionItem) itemWithTitle:@"Hiepvk" titleDescription:LOC(@"Vietnamese") accessibilityIdentifier:@"YTLiteSectionItem" detailTextBlock:nil selectBlock:^BOOL (YTSettingsCell *cell, NSUInteger arg1) { return [%c(YTUIUtils) openURL:[NSURL URLWithString:@"https://github.com/hiepvk"]]; }]; - YTSettingsSectionItem *dayanch96 = [%c(YTSettingsSectionItem) itemWithTitle:@"Dayanch96" titleDescription:LOC(@"Developer") accessibilityIdentifier:nil detailTextBlock:nil selectBlock:^BOOL (YTSettingsCell *cell, NSUInteger arg1) { + YTSettingsSectionItem *dayanch96 = [%c(YTSettingsSectionItem) itemWithTitle:@"Dayanch96" titleDescription:LOC(@"Developer") accessibilityIdentifier:@"YTLiteSectionItem" detailTextBlock:nil selectBlock:^BOOL (YTSettingsCell *cell, NSUInteger arg1) { return [%c(YTUIUtils) openURL:[NSURL URLWithString:@"https://github.com/Dayanch96/"]]; }]; - YTSettingsSectionItem *paypal = [%c(YTSettingsSectionItem) itemWithTitle:LOC(@"DonateViaPayPal") titleDescription:nil accessibilityIdentifier:nil detailTextBlock:^NSString *() { return @"♡"; } selectBlock:^BOOL (YTSettingsCell *cell, NSUInteger arg1) { - return [%c(YTUIUtils) openURL:[NSURL URLWithString:@"https://paypal.me/Dayanch96/"]]; + YTSettingsSectionItem *support = [%c(YTSettingsSectionItem) itemWithTitle:LOC(@"SupportDevelopment") accessibilityIdentifier:@"YTLiteSectionItem" detailTextBlock:^NSString *() { return @"♡"; } selectBlock:^BOOL (YTSettingsCell *cell, NSUInteger arg1) { + YTDefaultSheetController *sheetController = [%c(YTDefaultSheetController) sheetControllerWithMessage:LOC(@"SupportDevelopment") subMessage:LOC(@"SupportDevelopmentDesc") delegate:nil parentResponder:nil]; + YTActionSheetHeaderView *headerView = [sheetController valueForKey:@"_headerView"]; + YTFormattedStringLabel *subtitle = [headerView valueForKey:@"_subtitleLabel"]; + subtitle.numberOfLines = 0; + [headerView showHeaderDivider]; + + [sheetController addAction:[%c(YTActionSheetAction) actionWithTitle:@"PayPal" iconImage:[self resizedImageNamed:@"paypal"] secondaryIconImage:nil accessibilityIdentifier:nil handler:^ { + [%c(YTUIUtils) openURL:[NSURL URLWithString:@"https://paypal.me/dayanch96"]]; + }]]; + + [sheetController addAction:[%c(YTActionSheetAction) actionWithTitle:@"Github Sponsors" iconImage:[self resizedImageNamed:@"github"] secondaryIconImage:nil accessibilityIdentifier:nil handler:^ { + [%c(YTUIUtils) openURL:[NSURL URLWithString:@"https://github.com/sponsors/dayanch96"]]; + }]]; + + [sheetController addAction:[%c(YTActionSheetAction) actionWithTitle:@"Buy Me a Coffee" iconImage:[self resizedImageNamed:@"coffee"] secondaryIconImage:nil accessibilityIdentifier:nil handler:^ { + [%c(YTUIUtils) openURL:[NSURL URLWithString:@"https://www.buymeacoffee.com/dayanch96"]]; + }]]; + + UIViewController *currentController = UIApplication.sharedApplication.windows.firstObject.rootViewController; + [sheetController presentFromViewController:currentController.presentedViewController animated:YES completion:nil]; + + return YES; }]; - YTSettingsSectionItem *ghSponsors = [%c(YTSettingsSectionItem) itemWithTitle:LOC(@"SupportViaGhSponsors") titleDescription:nil accessibilityIdentifier:nil detailTextBlock:^NSString *() { return @"♡"; } selectBlock:^BOOL (YTSettingsCell *cell, NSUInteger arg1) { - return [%c(YTUIUtils) openURL:[NSURL URLWithString:@"https://github.com/sponsors/dayanch96"]]; - }]; - - YTSettingsSectionItem *cache = [%c(YTSettingsSectionItem) itemWithTitle:LOC(@"ClearCache") titleDescription:nil accessibilityIdentifier:nil detailTextBlock:^NSString *() { return GetCacheSize(); } selectBlock:^BOOL (YTSettingsCell *cell, NSUInteger arg1) { + YTSettingsSectionItem *cache = [%c(YTSettingsSectionItem) itemWithTitle:LOC(@"ClearCache") titleDescription:nil accessibilityIdentifier:@"YTLiteSectionItem" detailTextBlock:^NSString *() { return GetCacheSize(); } selectBlock:^BOOL (YTSettingsCell *cell, NSUInteger arg1) { dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ NSString *cachePath = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES).firstObject; [[NSFileManager defaultManager] removeItemAtPath:cachePath error:nil]; @@ -455,7 +530,7 @@ static YTSettingsSectionItem *createSwitchItem(NSString *title, NSString *titleD return YES; }]; - YTSettingsSectionItem *reset = [%c(YTSettingsSectionItem) itemWithTitle:LOC(@"ResetSettings") titleDescription:nil accessibilityIdentifier:nil detailTextBlock:nil selectBlock:^BOOL (YTSettingsCell *cell, NSUInteger arg1) { + YTSettingsSectionItem *reset = [%c(YTSettingsSectionItem) itemWithTitle:LOC(@"ResetSettings") titleDescription:nil accessibilityIdentifier:@"YTLiteSectionItem" detailTextBlock:nil selectBlock:^BOOL (YTSettingsCell *cell, NSUInteger arg1) { YTAlertView *alertView = [%c(YTAlertView) confirmationDialogWithAction:^{ NSString *prefsPath = [[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) firstObject] stringByAppendingPathComponent:@"YTLite.plist"]; [[NSFileManager defaultManager] removeItemAtPath:prefsPath error:nil]; @@ -473,19 +548,18 @@ static YTSettingsSectionItem *createSwitchItem(NSString *title, NSString *titleD }]; YTSettingsSectionItem *version = [YTSettingsSectionItemClass itemWithTitle:LOC(@"Version") - accessibilityIdentifier:nil + accessibilityIdentifier:@"YTLiteSectionItem" detailTextBlock:^NSString *() { return @(OS_STRINGIFY(TWEAK_VERSION)); } selectBlock:^BOOL (YTSettingsCell *cell, NSUInteger arg1) { - NSArray *rows = @[ps, miro, lillie, dayanch96, stalker, clement, balackburn, decibelios, skeids, hiepvk, space, createSwitchItem(LOC(@"Advanced"), nil, @"advancedMode", &kAdvancedMode, selfObject), cache, reset]; + NSArray *rows = @[ps, miro, tonymillion, dayanch96, stalker, clement, balackburn, decibelios, skeids, hiepvk, space, createSwitchItem(@"Advanced", @"advancedMode", &kAdvancedMode, selfObject), cache, reset]; YTSettingsPickerViewController *picker = [[%c(YTSettingsPickerViewController) alloc] initWithNavTitle:LOC(@"About") pickerSectionTitle:LOC(@"Credits") rows:rows selectedItemIndex:NSNotFound parentResponder:[self parentResponder]]; [settingsViewController pushViewController:picker]; return YES; }]; - [sectionItems addObject:paypal]; - [sectionItems addObject:ghSponsors]; + [sectionItems addObject:support]; [sectionItems addObject:version]; BOOL isNew = [settingsViewController respondsToSelector:@selector(setSectionItems:forCategory:title:icon:titleDescription:headerHidden:)]; @@ -500,27 +574,22 @@ static YTSettingsSectionItem *createSwitchItem(NSString *title, NSString *titleD return; } %orig; } + +%new +- (UIImage *)resizedImageNamed:(NSString *)iconName { + + UIGraphicsImageRenderer *renderer = [[UIGraphicsImageRenderer alloc] initWithSize:CGSizeMake(32, 32)]; + UIImage *image = [renderer imageWithActions:^(UIGraphicsImageRendererContext * _Nonnull rendererContext) { + UIView *imageView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 32, 32)]; + UIImageView *iconImageView = [[UIImageView alloc] initWithImage:[UIImage imageWithContentsOfFile:[YTLiteBundle() pathForResource:iconName ofType:@"png"]]]; + iconImageView.contentMode = UIViewContentModeScaleAspectFit; + iconImageView.clipsToBounds = YES; + iconImageView.frame = imageView.bounds; + + [imageView addSubview:iconImageView]; + [imageView.layer renderInContext:rendererContext.CGContext]; + }]; + + return image; +} %end - -%ctor { - if (!kAdvancedModeReminder && !kAdvancedMode) { - NSString *prefsPath = [[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) firstObject] stringByAppendingPathComponent:@"YTLite.plist"]; - NSMutableDictionary *prefs = [NSMutableDictionary dictionaryWithContentsOfFile:prefsPath]; - [prefs setObject:@(YES) forKey:@"advancedModeReminder"]; - [prefs writeToFile:prefsPath atomically:NO]; - CFNotificationCenterPostNotification(CFNotificationCenterGetDarwinNotifyCenter(), CFSTR("com.dvntm.ytlite.prefschanged"), NULL, NULL, YES); - - dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(3.0 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ - YTAlertView *alertView = [%c(YTAlertView) confirmationDialogWithAction:^{ - [prefs setObject:@(YES) forKey:@"advancedMode"]; - [prefs writeToFile:prefsPath atomically:NO]; - CFNotificationCenterPostNotification(CFNotificationCenterGetDarwinNotifyCenter(), CFSTR("com.dvntm.ytlite.prefschanged"), NULL, NULL, YES); - } - actionTitle:LOC(@"Yes") - cancelTitle:LOC(@"No")]; - alertView.title = @"YTLite"; - alertView.subtitle = [NSString stringWithFormat:LOC(@"AdvancedModeReminder"), @"YTLite", LOC(@"Version"), LOC(@"Advanced")]; - [alertView show]; - }); - } -} \ No newline at end of file diff --git a/YTLite.h b/YTLite.h index 689c832..cb9fdcb 100644 --- a/YTLite.h +++ b/YTLite.h @@ -2,28 +2,8 @@ #import #import #import -#import "../YouTubeHeader/YTAlertView.h" -#import "../YouTubeHeader/YTIGuideResponse.h" -#import "../YouTubeHeader/YTIGuideResponseSupportedRenderers.h" -#import "../YouTubeHeader/YTIPivotBarSupportedRenderers.h" -#import "../YouTubeHeader/YTIPivotBarRenderer.h" -#import "../YouTubeHeader/YTIBrowseRequest.h" -#import "../YouTubeHeader/YTISectionListRenderer.h" -#import "../YouTubeHeader/YTQTMButton.h" -#import "../YouTubeHeader/YTIButtonRenderer.h" -#import "../YouTubeHeader/YTVideoQualitySwitchOriginalController.h" -#import "../YouTubeHeader/YTPlayerViewController.h" -#import "../YouTubeHeader/YTWatchController.h" -#import "../YouTubeHeader/YTPlayerOverlay.h" -#import "../YouTubeHeader/YTPlayerOverlayProvider.h" -#import "../YouTubeHeader/YTSettingsViewController.h" -#import "../YouTubeHeader/YTSettingsSectionItem.h" -#import "../YouTubeHeader/YTSettingsSectionItemManager.h" -#import "../YouTubeHeader/YTSettingsPickerViewController.h" -#import "../YouTubeHeader/YTUIUtils.h" -#import "../YouTubeHeader/YTIMenuConditionalServiceItemRenderer.h" -#import "../YouTubeHeader/YTToastResponderEvent.h" -#import "../YouTubeHeader/YTPageStyleController.h" +#import "Reachability.h" +#import "YouTubeHeaders.h" static inline NSBundle *YTLiteBundle() { static NSBundle *bundle = nil; @@ -74,6 +54,9 @@ BOOL kClassicQuality; BOOL kExtraSpeedOptions; BOOL kDontSnapToChapter; BOOL kRedProgressBar; +BOOL kNoPlayerRemixButton; +BOOL kNoPlayerClipButton; +BOOL kNoPlayerDownloadButton; BOOL kNoHints; BOOL kNoFreeZoom; BOOL kAutoFullscreen; @@ -112,12 +95,18 @@ BOOL kRemoveUploads; BOOL kRemoveLibrary; BOOL kCopyVideoInfo; BOOL kPostManager; -BOOL kSavePostImage; BOOL kSaveProfilePhoto; BOOL kCommentManager; BOOL kSavePost; BOOL kFixAlbums; BOOL kRemovePlayNext; +BOOL kRemoveDownloadMenu; +BOOL kRemoveWatchLaterMenu; +BOOL kRemoveSaveToPlaylistMenu; +BOOL kRemoveShareMenu; +BOOL kRemoveNotInterestedMenu; +BOOL kRemoveDontRecommendMenu; +BOOL kRemoveReportMenu; BOOL kNoContinueWatching; BOOL kNoSearchHistory; BOOL kNoRelatedWatchNexts; @@ -127,16 +116,28 @@ BOOL kPlaylistOldMinibar; BOOL kDisableRTL; BOOL kAdvancedMode; BOOL kAdvancedModeReminder; +int kWiFiQualityIndex; +int kCellQualityIndex; int kPivotIndex; +@interface YTTouchFeedbackController : YTCollectionViewCell +@property (nonatomic, strong, readwrite) UIColor *feedbackColor; +@end + +@interface ABCSwitch : UIControl +@property (nonatomic, strong, readwrite) UIColor *onTintColor; +@end + +@interface YTSettingsCell () +- (void)setIndicatorIcon:(int)icon; +@end + @interface YTSettingsSectionItemManager (Custom) @property (nonatomic, strong) NSMutableDictionary *prefs; @property (nonatomic, strong) NSString *prefsPath; - (void)updatePrefsForKey:(NSString *)key enabled:(BOOL)enabled; - (void)updateIntegerPrefsForKey:(NSString *)key intValue:(NSInteger)intValue; -@end - -@interface YTPivotBarView : UIView +- (UIImage *)resizedImageNamed:(NSString *)iconName; @end @interface YTLightweightQTMButton () @@ -148,10 +149,6 @@ int kPivotIndex; - (void)setSizeWithPaddingAndInsets:(BOOL)sizeWithPaddingAndInsets; @end -@interface YTPivotBarItemView : UIView -@property (nonatomic, strong, readwrite) YTQTMButton *navigationButton; -@end - @interface YTRightNavigationButtons : UIView @property (nonatomic, strong) YTQTMButton *notificationButton; @property (nonatomic, strong) YTQTMButton *searchButton; @@ -171,11 +168,22 @@ int kPivotIndex; - (void)showPivotBar; @end +@interface YTPivotBarView : UIView +- (void)selectItemWithPivotIdentifier:(id)pivotIndentifier; +@end + @interface YTPivotBarViewController : UIViewController @property (nonatomic, weak, readwrite) YTAppViewController *parentViewController; +- (YTPivotBarView *)pivotBarView; - (void)selectItemWithPivotIdentifier:(id)pivotIndentifier; @end +@interface YTPivotBarItemView : UIView +@property (nonatomic, strong, readwrite) YTIPivotBarItemRenderer *renderer; +@property (nonatomic, weak, readwrite) YTPivotBarViewController *delegate; +@property (nonatomic, strong, readwrite) YTQTMButton *navigationButton; +@end + @interface YTScrollableNavigationController : UINavigationController @property (nonatomic, weak, readwrite) YTAppViewController *parentViewController; @end @@ -199,19 +207,43 @@ int kPivotIndex; @property (nonatomic, weak, readwrite) YTScrollableNavigationController *navigationController; @end -@interface YTIVideoDetails () +@interface YTIVideoDetails : NSObject @property (nonatomic, copy, readwrite) NSString *title; @property (nonatomic, copy, readwrite) NSString *shortDescription; @end -@interface YTPlayerViewController (YTAFS) +@interface YTIPlayerResponse : NSObject +@property (nonatomic, assign, readonly) YTIVideoDetails *videoDetails; +@end + +@interface YTPlayerResponse : NSObject +@property (nonatomic, assign, readonly) YTIPlayerResponse *playerData; +@end + +@interface MLQuickMenuVideoQualitySettingFormatConstraint : NSObject +- (instancetype)initWithVideoQualitySetting:(int)settings formatSelectionReason:(NSInteger)reason qualityLabel:(NSString *)label; +@end + +@interface MLFormat : NSObject +@property (nonatomic, assign, readonly) NSString *qualityLabel; +@property (nonatomic, assign, readonly) int singleDimensionResolution; +@end + +@interface YTSingleVideoController : NSObject +@property (nonatomic, assign, readonly) NSArray *selectableVideoFormats; +- (void)setVideoFormatConstraint:(MLQuickMenuVideoQualitySettingFormatConstraint *)formatConstraint; +@end + +@interface YTPlayerViewController : UIViewController @property (nonatomic, assign, readonly) YTPlayerResponse *playerResponse; +@property (nonatomic, assign, readonly) YTSingleVideoController *activeVideo; @property (nonatomic, weak, readwrite) UIViewController *parentViewController; @property (readonly, nonatomic) NSString *contentVideoID; - (void)setActiveCaptionTrack:(id)arg1; - (void)shortsToRegular; - (void)autoFullscreen; - (void)turnOffCaptions; +- (void)autoQuality; @end @interface YTPlayerView : UIView @@ -288,15 +320,16 @@ int kPivotIndex; @property (atomic, assign, readonly) NSMutableArray *allObjects; @end -@interface ASDisplayNode : NSObject +@interface ASDisplayNode () @property (nonatomic, assign, readonly) UIViewController *closestViewController; @property (atomic, assign, readonly) ASNodeAncestryEnumerator *supernodes; -@property (atomic, copy, readwrite) NSArray *yogaChildren; +// @property (atomic, copy, readwrite) NSArray *yogaChildren; @property (atomic) CALayer *layer; @end @interface ELMContainerNode : ASDisplayNode @property (nonatomic, strong, readwrite) NSString *copiedComment; +@property (nonatomic, strong, readwrite) NSURL *copiedURL; @end @interface ELMExpandableTextNode : ASDisplayNode @@ -307,6 +340,9 @@ int kPivotIndex; @property (atomic, copy, readwrite) NSURL *URL; @end +@interface YTImageZoomNode : ASNetworkImageNode +@end + @interface ASTextNode : ASDisplayNode @property (atomic, copy, readwrite) NSAttributedString *attributedText; @end @@ -314,18 +350,21 @@ int kPivotIndex; @interface _ASDisplayView : UIView @property (nonatomic, strong, readwrite) ASDisplayNode *keepalive_node; - (void)postManager:(UILongPressGestureRecognizer *)sender; -- (void)saveImage:(UILongPressGestureRecognizer *)sender; - (void)savePFP:(UILongPressGestureRecognizer *)sender; - (void)commentManager:(UILongPressGestureRecognizer *)sender; @end -@interface MLHAMQueuePlayer : NSObject -@property id playerEventCenter; --(void)setRate:(float)rate; -@end +// @interface MLHAMQueuePlayer : NSObject +// @property id playerEventCenter; +// -(void)setRate:(float)rate; +// @end @interface YTVarispeedSwitchControllerOption : NSObject -- (id)initWithTitle:(id)title rate:(float)rate; +- (id)initWithTitle:(NSString *)title rate:(float)rate; +@end + +@interface YTVarispeedSwitchController : NSObject +- (void)addActionForOption:(YTVarispeedSwitchControllerOption *)option; @end @interface HAMPlayerInternal : NSObject @@ -339,4 +378,28 @@ int kPivotIndex; @interface YTMainAppVideoPlayerOverlayViewController : UIViewController @property (readonly, nonatomic) CGFloat mediaTime; @property (readonly, nonatomic) NSString *videoID; +@end + +@interface YTFormattedStringLabel : UILabel +@end + +@interface YTActionSheetHeaderView : UIView +- (void)showHeaderDivider; +@end + +@interface YTActionSheetAction : NSObject ++ (instancetype)actionWithTitle:(NSString *)title iconImage:(UIImage *)image style:(NSInteger)style handler:(void (^)(void))handler; ++ (instancetype)actionWithTitle:(NSString *)title iconImage:(UIImage *)image secondaryIconImage:(UIImage *)secondaryIconImage accessibilityIdentifier:(NSString *)identifier handler:(void (^)(void))handler; ++ (instancetype)actionWithTitle:(NSString *)title titleColor:(UIColor *)titleColor iconImage:(UIImage *)image iconColor:(UIColor *)iconColor disableAutomaticButtonColor:(BOOL)autoColor accessibilityIdentifier:(NSString *)identifier handler:(void (^)(void))handler; +@end + +@interface YTDefaultSheetController : NSObject +- (void)addAction:(YTActionSheetAction *)action; +- (void)presentFromView:(UIView *)view animated:(BOOL)animated completion:(void(^)(void))completion; +- (void)presentFromViewController:(UIViewController *)vc animated:(BOOL)animated completion:(void(^)(void))completion; + ++ (instancetype)sheetControllerWithParentResponder:(id)parentResponder; ++ (instancetype)sheetControllerWithParentResponder:(id)parentResponder forcedSheetStyle:(NSInteger)style; ++ (instancetype)sheetControllerWithMessage:(NSString *)message delegate:(id)delegate parentResponder:(id)parentResponder; ++ (instancetype)sheetControllerWithMessage:(NSString *)message subMessage:(NSString *)subMessage delegate:(id)delegate parentResponder:(id)parentResponder; @end \ No newline at end of file diff --git a/YTLite.x b/YTLite.x index 4082e22..0334f74 100644 --- a/YTLite.x +++ b/YTLite.x @@ -1,5 +1,9 @@ #import "YTLite.h" +static UIImage *YTImageNamed(NSString *imageName) { + return [UIImage imageNamed:imageName inBundle:[NSBundle mainBundle] compatibleWithTraitCollection:nil]; +} + // YouTube-X (https://github.com/PoomSmart/YouTube-X/) // Background Playback %hook YTIPlayabilityStatus @@ -284,44 +288,22 @@ } %end -// Extra Speed Options (https://github.com/LillieH1000/YouTube-Reborn/blob/v4/Tweak.xm#L853) - Same code but for .x + +// Extra Speed Options %hook YTVarispeedSwitchController -- (void *)init { - void *ret = (void *)%orig; - if (kExtraSpeedOptions) { - NSArray *speedOptions = @[@"0.1x", @"0.25x", @"0.5x", @"0.75x", @"1x", @"1.25x", @"1.5x", @"1.75x", @"2x", @"2.5x", @"3x", @"3.5x", @"4x", @"5x"]; - NSMutableArray *speedOptionsCopy = [NSMutableArray new]; +- (void)setDelegate:(id)arg1 { + NSMutableArray *optionsCopy = [[self valueForKey:@"_options"] mutableCopy]; + NSArray *speedOptions = @[@"2.5", @"3", @"3.5", @"4", @"5"]; - for (NSString *title in speedOptions) { - float rate = [title floatValue]; - [speedOptionsCopy addObject:[[objc_lookUpClass("YTVarispeedSwitchControllerOption") alloc] initWithTitle:title rate:rate]]; - } - - Ivar optionsIvar = class_getInstanceVariable(object_getClass(self), "_options"); - object_setIvar(self, optionsIvar, [speedOptionsCopy copy]); - - } return ret; -} -%end - -%hook MLHAMQueuePlayer -- (void)setRate:(float)rate { - if (kExtraSpeedOptions) { - Ivar rateIvar = class_getInstanceVariable([self class], "_rate"); - if (rateIvar) { - float* ratePtr = (float *)((__bridge void *)self + ivar_getOffset(rateIvar)); - *ratePtr = rate; - } - - id ytPlayer = object_getIvar(self, class_getInstanceVariable([self class], "_player")); - if ([ytPlayer respondsToSelector:@selector(setRate:)]) { - [ytPlayer setRate:rate]; - } - - [self.playerEventCenter broadcastRateChange:rate]; - } else { - %orig(rate); + for (NSString *title in speedOptions) { + float rate = [title floatValue]; + YTVarispeedSwitchControllerOption *option = [[%c(YTVarispeedSwitchControllerOption) alloc] initWithTitle:title rate:rate]; + [optionsCopy addObject:option]; } + + if (kExtraSpeedOptions) [self setValue:[optionsCopy copy] forKey:@"_options"]; + + return %orig; } %end @@ -377,6 +359,7 @@ - (void)loadWithPlayerTransition:(id)arg1 playbackConfig:(id)arg2 { %orig; + if (kWiFiQualityIndex != 0 || kCellQualityIndex != 0) [NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(autoQuality) userInfo:nil repeats:NO]; if (kAutoFullscreen) [NSTimer scheduledTimerWithTimeInterval:0.75 target:self selector:@selector(autoFullscreen) userInfo:nil repeats:NO]; if (kShortsToRegular) [NSTimer scheduledTimerWithTimeInterval:0.75 target:self selector:@selector(shortsToRegular) userInfo:nil repeats:NO]; if (kDisableAutoCaptions) [NSTimer scheduledTimerWithTimeInterval:0.75 target:self selector:@selector(turnOffCaptions) userInfo:nil repeats:NO]; @@ -402,6 +385,76 @@ - (void)turnOffCaptions { [self setActiveCaptionTrack:nil]; } + +%new +- (void)autoQuality { + if (![self.view.superview isKindOfClass:NSClassFromString(@"YTWatchView")]) { + return; + } + + NetworkStatus status = [[Reachability reachabilityForInternetConnection] currentReachabilityStatus]; + NSInteger kQualityIndex = status == ReachableViaWiFi ? kWiFiQualityIndex : kCellQualityIndex; + + NSString *bestQualityLabel; + int highestResolution = 0; + for (MLFormat *format in self.activeVideo.selectableVideoFormats) { + int reso = format.singleDimensionResolution; + if (reso > highestResolution) { + highestResolution = reso; + bestQualityLabel = format.qualityLabel; + } + } + + NSString *qualityLabel = kQualityIndex == 1 ? bestQualityLabel : + kQualityIndex == 2 ? @"2160p60" : + kQualityIndex == 3 ? @"2160p" : + kQualityIndex == 4 ? @"1440p60" : + kQualityIndex == 5 ? @"1440p" : + kQualityIndex == 6 ? @"1080p60" : + kQualityIndex == 7 ? @"1080p" : + kQualityIndex == 8 ? @"720p60" : + kQualityIndex == 9 ? @"720p" : + kQualityIndex == 10 ? @"480p" : + kQualityIndex == 11 ? @"360p" : + nil; + + if (![qualityLabel isEqualToString:bestQualityLabel]) { + BOOL exactMatch = NO; + NSString *closestQualityLabel = qualityLabel; + + for (MLFormat *format in self.activeVideo.selectableVideoFormats) { + if ([format.qualityLabel isEqualToString:qualityLabel]) { + exactMatch = YES; + break; + } + } + + if (!exactMatch) { + NSInteger bestQualityDifference = NSIntegerMax; + + for (MLFormat *format in self.activeVideo.selectableVideoFormats) { + NSArray *formatСomponents = [format.qualityLabel componentsSeparatedByString:@"p"]; + NSArray *targetComponents = [qualityLabel componentsSeparatedByString:@"p"]; + if (formatСomponents.count == 2) { + NSInteger formatQuality = [formatСomponents.firstObject integerValue]; + NSInteger targetQuality = [targetComponents.firstObject integerValue]; + NSInteger difference = labs(formatQuality - targetQuality); + if (difference < bestQualityDifference) { + bestQualityDifference = difference; + closestQualityLabel = format.qualityLabel; + } + } + } + + qualityLabel = closestQualityLabel; + } + } + + MLQuickMenuVideoQualitySettingFormatConstraint *fc = [[%c(MLQuickMenuVideoQualitySettingFormatConstraint) alloc] init]; + if ([fc respondsToSelector:@selector(initWithVideoQualitySetting:formatSelectionReason:qualityLabel:)]) { + [self.activeVideo setVideoFormatConstraint:[fc initWithVideoQualitySetting:3 formatSelectionReason:2 qualityLabel:qualityLabel]]; + } +} %end // Exit Fullscreen on Finish @@ -468,6 +521,79 @@ } %end +// Remove Download button from the menu +%hook YTDefaultSheetController +- (void)addAction:(YTActionSheetAction *)action { + NSString *identifier = [action valueForKey:@"_accessibilityIdentifier"]; + + NSDictionary *actionsToRemove = @{ + @"7": @(kRemoveDownloadMenu), + @"1": @(kRemoveWatchLaterMenu), + @"3": @(kRemoveSaveToPlaylistMenu), + @"5": @(kRemoveShareMenu), + @"12": @(kRemoveNotInterestedMenu), + @"31": @(kRemoveDontRecommendMenu), + @"58": @(kRemoveReportMenu) + }; + + if (![actionsToRemove[identifier] boolValue]) { + %orig; + } +} +%end + +// Hide buttons under the video player (@PoomSmart) +static BOOL findCell(ASNodeController *nodeController, NSArray *identifiers) { + for (id child in [nodeController children]) { + if ([child isKindOfClass:%c(ELMNodeController)]) { + NSArray *elmChildren = [(ELMNodeController *)child children]; + for (ELMComponent *elmChild in elmChildren) { + for (NSString *identifier in identifiers) { + if ([[elmChild description] containsString:identifier]) + return YES; + } + } + } + + if ([child isKindOfClass:%c(ASNodeController)]) { + ASDisplayNode *childNode = ((ASNodeController *)child).node; // ELMContainerNode + NSArray *yogaChildren = childNode.yogaChildren; + for (ASDisplayNode *displayNode in yogaChildren) { + if ([identifiers containsObject:displayNode.accessibilityIdentifier]) + return YES; + } + + return findCell(child, identifiers); + } + + return NO; + } + return NO; +} + +%hook ASCollectionView +- (CGSize)sizeForElement:(ASCollectionElement *)element { + if ([self.accessibilityIdentifier isEqualToString:@"id.video.scrollable_action_bar"]) { + ASCellNode *node = [element node]; + ASNodeController *nodeController = [node controller]; + + if (kNoPlayerRemixButton && findCell(nodeController, @[@"id.video.remix.button"])) { + return CGSizeZero; + } + + if (kNoPlayerClipButton && findCell(nodeController, @[@"clip_button.eml"])) { + return CGSizeZero; + } + + if (kNoPlayerDownloadButton && findCell(nodeController, @[@"id.ui.add_to.offline.button"])) { + return CGSizeZero; + } + } + + return %orig; +} +%end + // Remove Premium Pop-up, Horizontal Video Carousel and Shorts (https://github.com/MiRO92/YTNoShorts) %hook YTAsyncCollectionView - (id)cellForItemAtIndexPath:(NSIndexPath *)indexPath { @@ -538,6 +664,7 @@ - (void)setRemixButton:(id)arg1 { if (!kHideShortsRemix) %orig; } - (void)setShareButton:(id)arg1 { if (!kHideShortsShare) %orig; } - (void)setNativePivotButton:(id)arg1 { if (!kHideShortsAvatars) %orig; } +- (void)setPivotButtonElementRenderer:(id)arg1 { if (!kHideShortsAvatars) %orig; } %end %hook YTReelHeaderView @@ -637,8 +764,61 @@ static BOOL isOverlayShown = YES; } %end +static void downloadImageFromURL(UIResponder *responder, NSURL *URL, BOOL download) { + NSString *URLString = URL.absoluteString; + + if (kFixAlbums && [URLString hasPrefix:@"https://yt3."]) { + URLString = [URLString stringByReplacingOccurrencesOfString:@"https://yt3." withString:@"https://yt4."]; + } + + NSURL *downloadURL = nil; + if ([URLString containsString:@"c-fcrop"]) { + NSRange croppedURL = [URLString rangeOfString:@"c-fcrop"]; + if (croppedURL.location != NSNotFound) { + NSString *newURL = [URLString stringByReplacingOccurrencesOfString:[URLString substringFromIndex:croppedURL.location] withString:@"nd-v1"]; + downloadURL = [NSURL URLWithString:newURL]; + } + } else { + downloadURL = URL; + } + + NSURLSession *session = [NSURLSession sharedSession]; + [[session dataTaskWithURL:downloadURL completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) { + if (data) { + if (download) { + [[PHPhotoLibrary sharedPhotoLibrary] performChanges:^{ + PHAssetCreationRequest *request = [PHAssetCreationRequest creationRequestForAsset]; + [request addResourceWithType:PHAssetResourceTypePhoto data:data options:nil]; + } completionHandler:^(BOOL success, NSError *error) { + [[%c(YTToastResponderEvent) eventWithMessage:success ? LOC(@"Saved") : [NSString stringWithFormat:LOC(@"%@: %@"), LOC(@"Error"), error.localizedDescription] firstResponder:responder] send]; + }]; + } else { + [UIPasteboard generalPasteboard].image = [UIImage imageWithData:data]; + [[%c(YTToastResponderEvent) eventWithMessage:LOC(@"Copied") firstResponder:responder] send]; + } + } else { + [[%c(YTToastResponderEvent) eventWithMessage:[NSString stringWithFormat:LOC(@"%@: %@"), LOC(@"Error"), error.localizedDescription] firstResponder:responder] send]; + } + }] resume]; +} + +static void genImageFromLayer(CALayer *layer, UIColor *backgroundColor, void (^completionHandler)(UIImage *)) { + UIGraphicsBeginImageContextWithOptions(layer.frame.size, NO, 0.0); + CGContextRef context = UIGraphicsGetCurrentContext(); + CGContextSetFillColorWithColor(context, backgroundColor.CGColor); + CGContextFillRect(context, CGRectMake(0, 0, layer.frame.size.width, layer.frame.size.height)); + [layer renderInContext:context]; + UIImage *image = UIGraphicsGetImageFromCurrentImageContext(); + UIGraphicsEndImageContext(); + + if (completionHandler) { + completionHandler(image); + } +} + %hook ELMContainerNode %property (nonatomic, strong) NSString *copiedComment; +%property (nonatomic, strong) NSURL *copiedURL; %end %hook ASDisplayNode @@ -674,52 +854,26 @@ static BOOL isOverlayShown = YES; } %end -static void downloadImageFromURL(UIResponder *responder, NSURL *URL) { - NSString *URLString = URL.absoluteString; +%hook YTImageZoomNode +- (BOOL)gestureRecognizer:(id)arg1 shouldRecognizeSimultaneouslyWithGestureRecognizer:(id)arg2 { + BOOL isImageLoaded = [self valueForKey:@"_didLoadImage"]; + if (kPostManager && isImageLoaded) { + ASDisplayNode *displayNode = (ASDisplayNode *)self; + ASNetworkImageNode *imageNode = (ASNetworkImageNode *)self; + NSURL *URL = imageNode.URL; - if (kFixAlbums && [URLString hasPrefix:@"https://yt3."]) { - URLString = [URLString stringByReplacingOccurrencesOfString:@"https://yt3." withString:@"https://yt4."]; - } - - NSURL *downloadURL = nil; - if ([URLString containsString:@"c-fcrop"]) { - NSRange croppedURL = [URLString rangeOfString:@"c-fcrop"]; - if (croppedURL.location != NSNotFound) { - NSString *newURL = [URLString stringByReplacingOccurrencesOfString:[URLString substringFromIndex:croppedURL.location] withString:@"nd-v1"]; - downloadURL = [NSURL URLWithString:newURL]; + NSMutableArray *allObjects = displayNode.supernodes.allObjects; + for (ELMContainerNode *containerNode in allObjects) { + if ([containerNode.description containsString:@"id.ui.backstage.original_post"]) { + containerNode.copiedURL = URL; + break; + } } - } else { - downloadURL = URL; } - NSURLSession *session = [NSURLSession sharedSession]; - [[session dataTaskWithURL:downloadURL completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) { - if (data) { - [[PHPhotoLibrary sharedPhotoLibrary] performChanges:^{ - PHAssetCreationRequest *request = [PHAssetCreationRequest creationRequestForAsset]; - [request addResourceWithType:PHAssetResourceTypePhoto data:data options:nil]; - } completionHandler:^(BOOL success, NSError *error) { - [[%c(YTToastResponderEvent) eventWithMessage:success ? LOC(@"Saved") : [NSString stringWithFormat:LOC(@"%@: %@"), LOC(@"Error"), error.localizedDescription] firstResponder:responder] send]; - }]; - } else { - [[%c(YTToastResponderEvent) eventWithMessage:[NSString stringWithFormat:LOC(@"%@: %@"), LOC(@"Error"), error.localizedDescription] firstResponder:responder] send]; - } - }] resume]; -} - -static void genImageFromLayer(CALayer *layer, UIColor *backgroundColor, void (^completionHandler)(UIImage *)) { - UIGraphicsBeginImageContextWithOptions(layer.frame.size, NO, 0.0); - CGContextRef context = UIGraphicsGetCurrentContext(); - CGContextSetFillColorWithColor(context, backgroundColor.CGColor); - CGContextFillRect(context, CGRectMake(0, 0, layer.frame.size.width, layer.frame.size.height)); - [layer renderInContext:context]; - UIImage *image = UIGraphicsGetImageFromCurrentImageContext(); - UIGraphicsEndImageContext(); - - if (completionHandler) { - completionHandler(image); - } + return %orig; } +%end %hook _ASDisplayView - (void)setKeepalive_node:(id)arg1 { @@ -727,7 +881,6 @@ static void genImageFromLayer(CALayer *layer, UIColor *backgroundColor, void (^c NSArray *gesturesInfo = @[ @{@"selector": @"postManager:", @"text": @"id.ui.backstage.original_post", @"key": @(kPostManager)}, - @{@"selector": @"saveImage:", @"text": @"YTImageZoomNode-View", @"key": @(kSavePostImage)}, @{@"selector": @"savePFP:", @"text": @"ELMImageNode-View", @"key": @(kSaveProfilePhoto)}, @{@"selector": @"commentManager:", @"text": @"id.ui.comment_cell", @"key": @(kCommentManager)} ]; @@ -760,11 +913,20 @@ static void genImageFromLayer(CALayer *layer, UIColor *backgroundColor, void (^c UIImage *image = [UIImage imageWithData:[NSData dataWithContentsOfURL:PFPURL]]; if (image) { - UIImageWriteToSavedPhotosAlbum(image, nil, nil, nil); + YTDefaultSheetController *sheetController = [%c(YTDefaultSheetController) sheetControllerWithParentResponder:nil]; + + [sheetController addAction:[%c(YTActionSheetAction) actionWithTitle:LOC(@"SaveProfilePicture") iconImage:YTImageNamed(@"yt_outline_image_24pt") style:0 handler:^ { + UIImageWriteToSavedPhotosAlbum(image, nil, nil, nil); - UIResponder *responder = self.nextResponder; - while (responder && ![responder isKindOfClass:[UIViewController class]]) responder = responder.nextResponder; - if (responder) [[%c(YTToastResponderEvent) eventWithMessage:LOC(@"Saved") firstResponder:responder] send]; + [[%c(YTToastResponderEvent) eventWithMessage:LOC(@"Saved") firstResponder:self.keepalive_node.closestViewController] send]; + }]]; + + [sheetController addAction:[%c(YTActionSheetAction) actionWithTitle:LOC(@"CopyProfilePicture") iconImage:YTImageNamed(@"yt_outline_library_image_24pt") style:0 handler:^ { + [UIPasteboard generalPasteboard].image = image; + [[%c(YTToastResponderEvent) eventWithMessage:LOC(@"Copied") firstResponder:self.keepalive_node.closestViewController] send]; + }]]; + + [sheetController presentFromViewController:self.keepalive_node.closestViewController animated:YES completion:nil]; } } } @@ -778,20 +940,30 @@ static void genImageFromLayer(CALayer *layer, UIColor *backgroundColor, void (^c ELMContainerNode *nodeForLayer = (ELMContainerNode *)self.keepalive_node.yogaChildren[0]; ELMContainerNode *containerNode = (ELMContainerNode *)self.keepalive_node; NSString *text = containerNode.copiedComment; + NSURL *URL = containerNode.copiedURL; CALayer *layer = nodeForLayer.layer; UIColor *backgroundColor = containerNode.closestViewController.view.backgroundColor; - UIAlertController *alertController = [UIAlertController alertControllerWithTitle:LOC(@"SelectAction") message:nil preferredStyle:UIAlertControllerStyleActionSheet]; - alertController.view.tintColor = [UIColor labelColor]; - - [alertController addAction:[UIAlertAction actionWithTitle:LOC(@"CopyPostText") style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) { + YTDefaultSheetController *sheetController = [%c(YTDefaultSheetController) sheetControllerWithParentResponder:nil]; + + [sheetController addAction:[%c(YTActionSheetAction) actionWithTitle:LOC(@"CopyPostText") iconImage:YTImageNamed(@"yt_outline_message_bubble_right_24pt") style:0 handler:^ { if (text) { [UIPasteboard generalPasteboard].string = text; [[%c(YTToastResponderEvent) eventWithMessage:LOC(@"Copied") firstResponder:containerNode.closestViewController] send]; } }]]; - [alertController addAction:[UIAlertAction actionWithTitle:LOC(@"SavePostAsImage") style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) { + if (URL) { + [sheetController addAction:[%c(YTActionSheetAction) actionWithTitle:LOC(@"SaveCurrentImage") iconImage:YTImageNamed(@"yt_outline_image_24pt") style:0 handler:^ { + downloadImageFromURL(containerNode.closestViewController, URL, YES); + }]]; + + [sheetController addAction:[%c(YTActionSheetAction) actionWithTitle:LOC(@"CopyCurrentImage") iconImage:YTImageNamed(@"yt_outline_library_image_24pt") style:0 handler:^ { + downloadImageFromURL(containerNode.closestViewController, URL, NO); + }]]; + } + + [sheetController addAction:[%c(YTActionSheetAction) actionWithTitle:LOC(@"SavePostAsImage") titleColor:[[UIColor redColor] colorWithAlphaComponent:0.7f] iconImage:YTImageNamed(@"yt_outline_image_24pt") iconColor:[[UIColor redColor] colorWithAlphaComponent:0.7f] disableAutomaticButtonColor:YES accessibilityIdentifier:nil handler:^ { genImageFromLayer(layer, backgroundColor, ^(UIImage *image) { [[PHPhotoLibrary sharedPhotoLibrary] performChanges:^{ PHAssetCreationRequest *request = [PHAssetCreationRequest creationRequestForAssetFromImage:image]; @@ -803,30 +975,14 @@ static void genImageFromLayer(CALayer *layer, UIColor *backgroundColor, void (^c }); }]]; - [alertController addAction:[UIAlertAction actionWithTitle:LOC(@"CopyPostAsImage") style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) { + [sheetController addAction:[%c(YTActionSheetAction) actionWithTitle:LOC(@"CopyPostAsImage") titleColor:[[UIColor redColor] colorWithAlphaComponent:0.7f] iconImage:YTImageNamed(@"yt_outline_library_image_24pt") iconColor:[[UIColor redColor] colorWithAlphaComponent:0.7f] disableAutomaticButtonColor:YES accessibilityIdentifier:nil handler:^ { genImageFromLayer(layer, backgroundColor, ^(UIImage *image) { [UIPasteboard generalPasteboard].image = image; [[%c(YTToastResponderEvent) eventWithMessage:LOC(@"Copied") firstResponder:containerNode.closestViewController] send]; }); }]]; - [alertController addAction:[UIAlertAction actionWithTitle:LOC(@"Cancel") style:UIAlertActionStyleCancel handler:nil]]; - - [containerNode.closestViewController presentViewController:alertController animated:YES completion:nil]; - } -} - -%new -- (void)saveImage:(UILongPressGestureRecognizer *)sender { - if (sender.state == UIGestureRecognizerStateBegan) { - - ASNetworkImageNode *imageNode = (ASNetworkImageNode *)self.keepalive_node; - NSURL *imageURL = imageNode.URL; - - UIResponder *responder = self.nextResponder; - while (responder && ![responder isKindOfClass:[UIViewController class]]) responder = responder.nextResponder; - - if (imageURL) downloadImageFromURL(responder, imageURL); + [sheetController presentFromViewController:containerNode.closestViewController animated:YES completion:nil]; } } @@ -839,17 +995,16 @@ static void genImageFromLayer(CALayer *layer, UIColor *backgroundColor, void (^c CALayer *layer = self.layer; UIColor *backgroundColor = containerNode.closestViewController.view.backgroundColor; - UIAlertController *alertController = [UIAlertController alertControllerWithTitle:LOC(@"SelectAction") message:nil preferredStyle:UIAlertControllerStyleActionSheet]; - alertController.view.tintColor = [UIColor labelColor]; + YTDefaultSheetController *sheetController = [%c(YTDefaultSheetController) sheetControllerWithParentResponder:nil]; - [alertController addAction:[UIAlertAction actionWithTitle:LOC(@"CopyCommentText") style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) { + [sheetController addAction:[%c(YTActionSheetAction) actionWithTitle:LOC(@"CopyCommentText") iconImage:YTImageNamed(@"yt_outline_message_bubble_right_24pt") style:0 handler:^ { if (comment) { [UIPasteboard generalPasteboard].string = comment; [[%c(YTToastResponderEvent) eventWithMessage:LOC(@"Copied") firstResponder:containerNode.closestViewController] send]; } }]]; - [alertController addAction:[UIAlertAction actionWithTitle:LOC(@"SaveCommentAsImage") style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) { + [sheetController addAction:[%c(YTActionSheetAction) actionWithTitle:LOC(@"SaveCommentAsImage") iconImage:YTImageNamed(@"yt_outline_image_24pt") style:0 handler:^ { genImageFromLayer(layer, backgroundColor, ^(UIImage *image) { [[PHPhotoLibrary sharedPhotoLibrary] performChanges:^{ PHAssetCreationRequest *request = [PHAssetCreationRequest creationRequestForAssetFromImage:image]; @@ -861,16 +1016,14 @@ static void genImageFromLayer(CALayer *layer, UIColor *backgroundColor, void (^c }); }]]; - [alertController addAction:[UIAlertAction actionWithTitle:LOC(@"CopyCommentAsImage") style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) { + [sheetController addAction:[%c(YTActionSheetAction) actionWithTitle:LOC(@"CopyCommentAsImage") iconImage:YTImageNamed(@"yt_outline_library_image_24pt") style:0 handler:^ { genImageFromLayer(layer, backgroundColor, ^(UIImage *image) { [UIPasteboard generalPasteboard].image = image; [[%c(YTToastResponderEvent) eventWithMessage:LOC(@"Copied") firstResponder:containerNode.closestViewController] send]; }); }]]; - [alertController addAction:[UIAlertAction actionWithTitle:LOC(@"Cancel") style:UIAlertActionStyleCancel handler:nil]]; - - [containerNode.closestViewController presentViewController:alertController animated:YES completion:nil]; + [sheetController presentFromViewController:containerNode.closestViewController animated:YES completion:nil]; } } %end @@ -942,26 +1095,12 @@ BOOL isTabSelected = NO; %orig; if (!isTabSelected && !kShortsOnlyMode) { - NSString *pivotIdentifier; - switch (kPivotIndex) { - case 0: - pivotIdentifier = @"FEwhat_to_watch"; - break; - case 1: - pivotIdentifier = @"FEexplore"; - break; - case 2: - pivotIdentifier = @"FEshorts"; - break; - case 3: - pivotIdentifier = @"FEsubscriptions"; - break; - case 4: - pivotIdentifier = @"FElibrary"; - break; - default: - return; - } + NSString *pivotIdentifier = kPivotIndex == 1 ? @"FEexplore" : + kPivotIndex == 2 ? @"FEshorts" : + kPivotIndex == 3 ? @"FEsubscriptions" : + kPivotIndex == 4 ? @"FElibrary" : + @"FEwhat_to_watch"; + [self selectItemWithPivotIdentifier:pivotIdentifier]; isTabSelected = YES; } @@ -1008,7 +1147,7 @@ BOOL isTabSelected = NO; copyInfoButton.accessibilityLabel = LOC(@"CopyVideoInfo"); [copyInfoButton setTag:999]; [copyInfoButton enableNewTouchFeedback]; - [copyInfoButton setImage:[UIImage imageNamed:@"yt_outline_copy_24pt" inBundle:[NSBundle mainBundle] compatibleWithTraitCollection:nil] forState:UIControlStateNormal]; + [copyInfoButton setImage:YTImageNamed(@"yt_outline_copy_24pt") forState:UIControlStateNormal]; [copyInfoButton setTintColor:[UIColor labelColor]]; [copyInfoButton setTranslatesAutoresizingMaskIntoConstraints:false]; [copyInfoButton addTarget:self action:@selector(didTapCopyInfoButton:) forControlEvents:UIControlEventTouchUpInside]; @@ -1032,22 +1171,19 @@ BOOL isTabSelected = NO; NSString *title = playerVC.playerResponse.playerData.videoDetails.title; NSString *shortDescription = playerVC.playerResponse.playerData.videoDetails.shortDescription; - UIAlertController *alertController = [UIAlertController alertControllerWithTitle:LOC(@"SelectAction") message:nil preferredStyle:UIAlertControllerStyleActionSheet]; - alertController.view.tintColor = [UIColor labelColor]; + YTDefaultSheetController *sheetController = [%c(YTDefaultSheetController) sheetControllerWithParentResponder:nil]; - [alertController addAction:[UIAlertAction actionWithTitle:LOC(@"CopyTitle") style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) { + [sheetController addAction:[%c(YTActionSheetAction) actionWithTitle:LOC(@"CopyTitle") iconImage:YTImageNamed(@"yt_outline_text_box_24pt") style:0 handler:^ { [UIPasteboard generalPasteboard].string = title; [[%c(YTToastResponderEvent) eventWithMessage:LOC(@"Copied") firstResponder:self.resizeDelegate] send]; }]]; - [alertController addAction:[UIAlertAction actionWithTitle:LOC(@"CopyDescription") style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) { + [sheetController addAction:[%c(YTActionSheetAction) actionWithTitle:LOC(@"CopyDescription") iconImage:YTImageNamed(@"yt_outline_message_bubble_right_24pt") style:0 handler:^ { [UIPasteboard generalPasteboard].string = shortDescription; [[%c(YTToastResponderEvent) eventWithMessage:LOC(@"Copied") firstResponder:self.resizeDelegate] send]; }]]; - [alertController addAction:[UIAlertAction actionWithTitle:LOC(@"Cancel") style:UIAlertActionStyleCancel handler:nil]]; - - [self.resizeDelegate presentViewController:alertController animated:YES completion:nil]; + [sheetController presentFromViewController:self.resizeDelegate animated:YES completion:nil]; } %end @@ -1121,6 +1257,9 @@ static void reloadPrefs() { kExtraSpeedOptions = [prefs[@"extraSpeedOptions"] boolValue] ?: NO; kDontSnapToChapter = [prefs[@"dontSnapToChapter"] boolValue] ?: NO; kRedProgressBar = [prefs[@"redProgressBar"] boolValue] ?: NO; + kNoPlayerRemixButton = [prefs[@"noPlayerRemixButton"] boolValue] ?: NO; + kNoPlayerClipButton = [prefs[@"noPlayerClipButton"] boolValue] ?: NO; + kNoPlayerDownloadButton = [prefs[@"noPlayerDownloadButton"] boolValue] ?: NO; kNoHints = [prefs[@"noHints"] boolValue] ?: NO; kNoFreeZoom = [prefs[@"noFreeZoom"] boolValue] ?: NO; kAutoFullscreen = [prefs[@"autoFullscreen"] boolValue] ?: NO; @@ -1159,11 +1298,17 @@ static void reloadPrefs() { kRemoveLibrary = [prefs[@"removeLibrary"] boolValue] ?: NO; kCopyVideoInfo = [prefs[@"copyVideoInfo"] boolValue] ?: NO; kPostManager = [prefs[@"postManager"] boolValue] ?: NO; - kSavePostImage = [prefs[@"savePostImage"] boolValue] ?: NO; - kSaveProfilePhoto = [prefs[@"savePostImage"] boolValue] ?: NO; + kSaveProfilePhoto = [prefs[@"saveProfilePhoto"] boolValue] ?: NO; kCommentManager = [prefs[@"commentManager"] boolValue] ?: NO; kFixAlbums = [prefs[@"fixAlbums"] boolValue] ?: NO; kRemovePlayNext = [prefs[@"removePlayNext"] boolValue] ?: NO; + kRemoveDownloadMenu = [prefs[@"removeDownloadMenu"] boolValue] ?: NO; + kRemoveWatchLaterMenu = [prefs[@"removeWatchLaterMenu"] boolValue] ?: NO; + kRemoveSaveToPlaylistMenu = [prefs[@"removeSaveToPlaylistMenu"] boolValue] ?: NO; + kRemoveShareMenu = [prefs[@"removeShareMenu"] boolValue] ?: NO; + kRemoveNotInterestedMenu = [prefs[@"removeNotInterestedMenu"] boolValue] ?: NO; + kRemoveDontRecommendMenu = [prefs[@"removeDontRecommendMenu"] boolValue] ?: NO; + kRemoveReportMenu = [prefs[@"removeReportMenu"] boolValue] ?: NO; kNoContinueWatching = [prefs[@"noContinueWatching"] boolValue] ?: NO; kNoSearchHistory = [prefs[@"noSearchHistory"] boolValue] ?: NO; kNoRelatedWatchNexts = [prefs[@"noRelatedWatchNexts"] boolValue] ?: NO; @@ -1171,6 +1316,8 @@ static void reloadPrefs() { kHideSortComments = [prefs[@"hideSortComments"] boolValue] ?: NO; kPlaylistOldMinibar = [prefs[@"playlistOldMinibar"] boolValue] ?: NO; kDisableRTL = [prefs[@"disableRTL"] boolValue] ?: NO; + kWiFiQualityIndex = (prefs[@"wifiQualityIndex"] != nil) ? [prefs[@"wifiQualityIndex"] intValue] : 0; + kCellQualityIndex = (prefs[@"cellQualityIndex"] != nil) ? [prefs[@"cellQualityIndex"] intValue] : 0; kPivotIndex = (prefs[@"pivotIndex"] != nil) ? [prefs[@"pivotIndex"] intValue] : 0; kAdvancedMode = [prefs[@"advancedMode"] boolValue] ?: NO; kAdvancedModeReminder = [prefs[@"advancedModeReminder"] boolValue] ?: NO; @@ -1207,6 +1354,9 @@ static void reloadPrefs() { @"extraSpeedOptions" : @(kExtraSpeedOptions), @"dontSnapToChapter" : @(kDontSnapToChapter), @"redProgressBar" : @(kRedProgressBar), + @"noPlayerRemixButton" : @(kNoPlayerRemixButton), + @"noPlayerClipButton" : @(kNoPlayerClipButton), + @"noPlayerDownloadButton" : @(kNoPlayerDownloadButton), @"noHints" : @(kNoHints), @"noFreeZoom" : @(kNoFreeZoom), @"autoFullscreen" : @(kAutoFullscreen), @@ -1245,11 +1395,17 @@ static void reloadPrefs() { @"removeLibrary" : @(kRemoveLibrary), @"copyVideoInfo" : @(kCopyVideoInfo), @"postManager" : @(kPostManager), - @"savePostImage" : @(kSavePostImage), @"saveProfilePhoto" : @(kSaveProfilePhoto), @"commentManager" : @(kCommentManager), @"fixAlbums" : @(kFixAlbums), @"removePlayNext" : @(kRemovePlayNext), + @"removeDownloadMenu" : @(kRemoveDownloadMenu), + @"removeWatchLaterMenu" : @(kRemoveWatchLaterMenu), + @"removeSaveToPlaylistMenu" : @(kRemoveSaveToPlaylistMenu), + @"removeShareMenu" : @(kRemoveShareMenu), + @"removeNotInterestedMenu" : @(kRemoveNotInterestedMenu), + @"removeDontRecommendMenu" : @(kRemoveDontRecommendMenu), + @"removeReportMenu" : @(kRemoveReportMenu), @"noContinueWatching" : @(kNoContinueWatching), @"noSearchHistory" : @(kNoSearchHistory), @"noRelatedWatchNexts" : @(kNoRelatedWatchNexts), @@ -1257,6 +1413,8 @@ static void reloadPrefs() { @"hideSortComments" : @(kHideSortComments), @"playlistOldMinibar" : @(kPlaylistOldMinibar), @"disableRTL" : @(kDisableRTL), + @"wifiQualityIndex" : @(kWiFiQualityIndex), + @"cellQualityIndex" : @(kCellQualityIndex), @"pivotIndex" : @(kPivotIndex), @"advancedMode" : @(kAdvancedMode), @"advancedModeReminder" : @(kAdvancedModeReminder) @@ -1279,6 +1437,24 @@ static void prefsChanged(CFNotificationCenterRef center, void *observer, CFStrin [prefs writeToFile:path atomically:NO]; } + if (![prefs[@"advancedMode"] boolValue] && ![prefs[@"advancedModeReminder"] boolValue]) { + [prefs setObject:@(YES) forKey:@"advancedModeReminder"]; + [prefs writeToFile:path atomically:NO]; + + dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(3.0 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ + YTAlertView *alertView = [%c(YTAlertView) confirmationDialogWithAction:^{ + [prefs setObject:@(YES) forKey:@"advancedMode"]; + [prefs writeToFile:path atomically:NO]; + CFNotificationCenterPostNotification(CFNotificationCenterGetDarwinNotifyCenter(), CFSTR("com.dvntm.ytlite.prefschanged"), NULL, NULL, YES); + } + actionTitle:LOC(@"Yes") + cancelTitle:LOC(@"No")]; + alertView.title = @"YTLite"; + alertView.subtitle = [NSString stringWithFormat:LOC(@"AdvancedModeReminder"), @"YTLite", LOC(@"Version"), LOC(@"Advanced")]; + [alertView show]; + }); + } + CFNotificationCenterAddObserver(CFNotificationCenterGetDarwinNotifyCenter(), NULL, (CFNotificationCallback)prefsChanged, CFSTR("com.dvntm.ytlite.prefschanged"), NULL, CFNotificationSuspensionBehaviorCoalesce); reloadPrefs(); } diff --git a/YouTubeHeaders.h b/YouTubeHeaders.h new file mode 100644 index 0000000..996851b --- /dev/null +++ b/YouTubeHeaders.h @@ -0,0 +1,24 @@ +#import "../YouTubeHeader/YTAlertView.h" +#import "../YouTubeHeader/YTIGuideResponse.h" +#import "../YouTubeHeader/YTIGuideResponseSupportedRenderers.h" +#import "../YouTubeHeader/YTIPivotBarSupportedRenderers.h" +#import "../YouTubeHeader/YTIPivotBarRenderer.h" +#import "../YouTubeHeader/YTIBrowseRequest.h" +#import "../YouTubeHeader/YTISectionListRenderer.h" +#import "../YouTubeHeader/YTQTMButton.h" +#import "../YouTubeHeader/YTIButtonRenderer.h" +#import "../YouTubeHeader/YTVideoQualitySwitchOriginalController.h" +#import "../YouTubeHeader/YTWatchController.h" +#import "../YouTubeHeader/YTPlayerOverlay.h" +#import "../YouTubeHeader/YTPlayerOverlayProvider.h" +#import "../YouTubeHeader/YTSettingsViewController.h" +#import "../YouTubeHeader/YTSettingsSectionItem.h" +#import "../YouTubeHeader/YTSettingsSectionItemManager.h" +#import "../YouTubeHeader/YTSettingsPickerViewController.h" +#import "../YouTubeHeader/YTUIUtils.h" +#import "../YouTubeHeader/YTIMenuConditionalServiceItemRenderer.h" +#import "../YouTubeHeader/YTToastResponderEvent.h" +#import "../YouTubeHeader/YTPageStyleController.h" +#import "../YouTubeHeader/ASCollectionElement.h" +#import "../YouTubeHeader/ASCollectionView.h" +#import "../YouTubeHeader/ELMNodeController.h" \ No newline at end of file diff --git a/layout/Library/Application Support/YTLite.bundle/coffee.png b/layout/Library/Application Support/YTLite.bundle/coffee.png new file mode 100644 index 0000000000000000000000000000000000000000..d84753c5c1b4d9bd8d3817e4ac1945f48f9b2665 GIT binary patch literal 8449 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 literal 0 HcmV?d00001 diff --git a/layout/Library/Application Support/YTLite.bundle/en.lproj/Localizable.strings b/layout/Library/Application Support/YTLite.bundle/en.lproj/Localizable.strings index d0e96b6..0a263b3 100644 --- a/layout/Library/Application Support/YTLite.bundle/en.lproj/Localizable.strings +++ b/layout/Library/Application Support/YTLite.bundle/en.lproj/Localizable.strings @@ -67,6 +67,12 @@ "DontSnap2ChapterDesc" = "Disables skipping to the next episode by double-tap gesture."; "RedProgressBar" = "Red progress bar"; "RedProgressBarDesc" = "Brings back red progress bar."; +"NoPlayerRemixButton" = "Remove remix button"; +"NoPlayerRemixButtonDesc" = "Removes remix button under the player."; +"NoPlayerClipButton" = "Remove clip button"; +"NoPlayerClipButtonDesc" = "Removes clip button under the player."; +"NoPlayerDownloadButton" = "Remove download button"; +"NoPlayerDownloadButtonDesc" = "Removes download button under the player."; "NoHints" = "Disable hints"; "NoHintsDesc" = "Disables hints by author which appears at the top-right corner during playback."; "NoFreeZoom" = "Disable free zoom gesture"; @@ -147,8 +153,6 @@ "CopyVideoInfoDesc" = "Adds button to copy video title and description into Video Description panel."; "PostManager" = "Save post information"; "PostManagerDesc" = "Allows to copy post text and save post as image by long tap."; -"SavePostImage" = "Save image from community posts"; -"SavePostImageDesc" = "Saves community post image to the Photos app by long tap."; "SaveProfilePhoto" = "Save profile picture"; "SaveProfilePhotoDesc" = "Saves profile picture to the Photos app by long tap."; "CommentManager" = "Save comment information"; @@ -157,6 +161,20 @@ "FixAlbumsDesc" = "Fixes the display of covers for users from Russia."; "RemovePlayNext" = "Remove \"Play next in queue\""; "RemovePlayNextDesc" = "Removes \"Play next in queue\" option from menu."; +"RemoveDownloadMenu" = "Remove \"Download\""; +"RemoveDownloadMenuDesc" = "Removes \"Download\" option from menu."; +"RemoveWatchLaterMenu" = "Remove \"Save to Watch Later\""; +"RemoveWatchLaterMenuDesc" = "Removes \"Save to Watch Later\" option from menu."; +"RemoveSaveToPlaylistMenu" = "Remove \"Save to playlist\""; +"RemoveSaveToPlaylistMenuDesc" = "Removes \"Save to playlist\" option from menu."; +"RemoveShareMenu" = "Remove \"Share\""; +"RemoveShareMenuDesc" = "Removes \"Share\" option from menu."; +"RemoveNotInterestedMenu" = "Remove \"Not interested\""; +"RemoveNotInterestedMenuDesc" = "Removes \"Not interested\" option from menu."; +"RemoveDontRecommendMenu" = "Remove \"Don't recommend channel\""; +"RemoveDontRecommendMenuDesc" = "Removes \"Don't recommend channel\" option from menu."; +"RemoveReportMenu" = "Remove \"Report\""; +"RemoveReportMenuDesc" = "Removes \"Report\" option from menu."; "NoContinueWatching" = "Remove \"Continue watching\""; "NoContinueWatchingDesc" = "Removes the \"Continue watching\" section containing unfinished videos from the Home page."; "NoSearchHistory" = "Hide search history"; @@ -172,6 +190,12 @@ "DisableRTL" = "Disable RTL formatting"; "DisableRTLDesc" = "Forcefully displays text in left-to-right (LTR) format for languages that are initially displayed in right-to-left (RTL)."; +"PlaybackQualityOnWiFi" = "Playback quality on WiFi"; +"PlaybackQualityOnCellular" = "Playback quality on Cellular"; +"SelectQuality" = "Select Quality"; +"Default" = "Default"; +"Best" = "Best"; + "Startup" = "Startup page"; "Home" = "Home"; "Explore" = "Explore"; @@ -181,8 +205,8 @@ "Warning" = "Warning"; "TabIsHidden" = "Hidden tab cannot be selected as startup page"; -"DonateViaPayPal" = "Donate via PayPal"; -"SupportViaGhSponsors" = "Support development via Github Sponsors"; +"SupportDevelopment" = "Support development"; +"SupportDevelopmentDesc" = "If you like YTLite and would like to support its development, you can do it using any of convenient ways below.\nThanks❤"; "Version" = "Version"; "About" = "About"; "Credits" = "Credits"; @@ -194,6 +218,7 @@ "Japanese" = "Japanese localization"; "Vietnamese" = "Vietnamese localization"; "Advanced" = "Advanced mode"; +"AdvancedDesc" = "More customizable mode"; "AdvancedModeReminder" = "Would you like to activate Advanced mode for YTLite?\n\nThis mode provides more than 50 additional options to customize and optimize your YouTube experience. You can enable/disable it later from Settings → %@ → %@ → %@."; "ClearCache" = "Clear cache"; "ResetSettings" = "Reset YTLite settings"; @@ -207,11 +232,15 @@ "CopyTitle" = "Copy title"; "CopyDescription" = "Copy description"; "CopyPostText" = "Copy post text"; +"SaveCurrentImage" = "Save current image"; +"CopyCurrentImage" = "Copy current image"; "SavePostAsImage" = "Save post as image"; "CopyPostAsImage" = "Copy post as image"; "CopyCommentText" = "Copy comment text"; "SaveCommentAsImage" = "Save comment as image"; "CopyCommentAsImage" = "Copy comment as image"; +"SaveProfilePicture" = "Save profile picture"; +"CopyProfilePicture" = "Copy profile picture"; "Cancel" = "Cancel"; "Copied" = "Copied to clipboard"; "Saved" = "Saved to Photos"; diff --git a/layout/Library/Application Support/YTLite.bundle/es.lproj/Localizable.strings b/layout/Library/Application Support/YTLite.bundle/es.lproj/Localizable.strings index 5624ad6..1e4b2d5 100644 --- a/layout/Library/Application Support/YTLite.bundle/es.lproj/Localizable.strings +++ b/layout/Library/Application Support/YTLite.bundle/es.lproj/Localizable.strings @@ -67,6 +67,12 @@ "DontSnap2ChapterDesc" = "Desactiva el salto al siguiente episodio mediante el gesto de doble toque."; "RedProgressBar" = "Barra de progreso roja"; "RedProgressBarDesc" = "Devuelve la barra de progreso roja."; +"NoPlayerRemixButton" = "Remove remix button"; +"NoPlayerRemixButtonDesc" = "Removes remix button under the player."; +"NoPlayerClipButton" = "Remove clip button"; +"NoPlayerClipButtonDesc" = "Removes clip button under the player."; +"NoPlayerDownloadButton" = "Remove download button"; +"NoPlayerDownloadButtonDesc" = "Removes download button under the player."; "NoHints" = "Desactivar sugerencias"; "NoHintsDesc" = "Desactiva las sugerencias del autor que aparecen en la esquina superior derecha durante la reproducción."; "NoFreeZoom" = "Desactivar gesto de zoom libre"; @@ -147,8 +153,6 @@ "CopyVideoInfoDesc" = "Adds button to copy video title and description into Video Description panel."; "PostManager" = "Save post information"; "PostManagerDesc" = "Allows to copy post text and save post as image by long tap."; -"SavePostImage" = "Guardar imagen de las entradas de la comunidad"; -"SavePostImageDesc" = "Guarda la imagen de las publicaciones de la comunidad en la aplicación Fotos con un toque prolongado"; "SaveProfilePhoto" = "Guardar foto de perfil"; "SaveProfilePhotoDesc" = "Guarda la imagen de perfil en la aplicación Fotos con un toque prolongado"; "CommentManager" = "Save comment information"; @@ -157,6 +161,20 @@ "FixAlbumsDesc" = "Corrige la visualización de portadas para usuarios de Rusia"; "RemovePlayNext" = "Eliminar \"Reproducir siguiente en cola\""; "RemovePlayNextDesc" = "Elimina la opción \"Reproducir siguiente en cola\" del menú."; +"RemoveDownloadMenu" = "Remove \"Download\""; +"RemoveDownloadMenuDesc" = "Removes \"Download\" option from menu."; +"RemoveWatchLaterMenu" = "Remove \"Save to Watch Later\""; +"RemoveWatchLaterMenuDesc" = "Removes \"Save to Watch Later\" option from menu."; +"RemoveSaveToPlaylistMenu" = "Remove \"Save to playlist\""; +"RemoveSaveToPlaylistMenuDesc" = "Removes \"Save to playlist\" option from menu."; +"RemoveShareMenu" = "Remove \"Share\""; +"RemoveShareMenuDesc" = "Removes \"Share\" option from menu."; +"RemoveNotInterestedMenu" = "Remove \"Not interested\""; +"RemoveNotInterestedMenuDesc" = "Removes \"Not interested\" option from menu."; +"RemoveDontRecommendMenu" = "Remove \"Don't recommend channel\""; +"RemoveDontRecommendMenuDesc" = "Removes \"Don't recommend channel\" option from menu."; +"RemoveReportMenu" = "Remove \"Report\""; +"RemoveReportMenuDesc" = "Removes \"Report\" option from menu."; "NoContinueWatching" = "Eliminar \"Continuar viendo\""; "NoContinueWatchingDesc" = "Elimina la sección \"Continuar viendo\" que contiene videos sin terminar de la página de inicio."; "NoSearchHistory" = "Ocultar el historial de búsqueda"; @@ -172,6 +190,12 @@ "DisableRTL" = "Desactivar el formato RTL"; "DisableRTLDesc" = "Muestra forzosamente el texto en formato de izquierda a derecha (LTR) para los idiomas que se muestran inicialmente en formato de derecha a izquierda (RTL)."; +"PlaybackQualityOnWiFi" = "Playback quality on WiFi"; +"PlaybackQualityOnCellular" = "Playback quality on Cellular"; +"SelectQuality" = "Select Quality"; +"Default" = "Default"; +"Best" = "Best"; + "Startup" = "Página de inicio"; "Home" = "Inicio"; "Explore" = "Explorar"; @@ -181,8 +205,8 @@ "Warning" = "Advertencia"; "TabIsHidden" = "No se puede seleccionar una pestaña oculta como página de inicio"; -"DonateViaPayPal" = "Donate via PayPal"; -"SupportViaGhSponsors" = "Support development via Github Sponsors"; +"SupportDevelopment" = "Support development"; +"SupportDevelopmentDesc" = "If you like YTLite and would like to support its development, you can do it using any of convenient ways below.\nThanks❤"; "Version" = "Versión"; "About" = "Acerca de"; "Credits" = "Créditos"; @@ -194,6 +218,7 @@ "Japanese" = "Traducción: Japonés"; "Vietnamese" = "Vietnamese localization"; "Advanced" = "Modo avanzado"; +"AdvancedDesc" = "More customizable mode"; "AdvancedModeReminder" = "¿Desea activar el modo Avanzado para YTLite?\n\nEste modo ofrece más de 50 opciones adicionales para personalizar y optimizar tu experiencia en YouTube. Puedes activarlo/desactivarlo más tarde desde Ajustes → %@ → %@ → %@."; "ClearCache" = "Clear cache"; "ResetSettings" = "Restablecer configuración de YTLite"; @@ -212,6 +237,8 @@ "CopyCommentText" = "Copy comment text"; "SaveCommentAsImage" = "Save comment as image"; "CopyCommentAsImage" = "Copy comment as image"; +"SaveProfilePicture" = "Save profile picture"; +"CopyProfilePicture" = "Copy profile picture"; "Cancel" = "Cancel"; "Copied" = "Copiado al portapapeles"; "Done" = "Done"; diff --git a/layout/Library/Application Support/YTLite.bundle/fr.lproj/Localizable.strings b/layout/Library/Application Support/YTLite.bundle/fr.lproj/Localizable.strings index b96e880..7992d77 100644 --- a/layout/Library/Application Support/YTLite.bundle/fr.lproj/Localizable.strings +++ b/layout/Library/Application Support/YTLite.bundle/fr.lproj/Localizable.strings @@ -67,6 +67,12 @@ "DontSnap2ChapterDesc" = "Désactive le passage à l'épisode suivant en double tapant."; "RedProgressBar" = "Barre de progression rouge"; "RedProgressBarDesc" = "Ramène la barre de progression rouge."; +"NoPlayerRemixButton" = "Remove remix button"; +"NoPlayerRemixButtonDesc" = "Removes remix button under the player."; +"NoPlayerClipButton" = "Remove clip button"; +"NoPlayerClipButtonDesc" = "Removes clip button under the player."; +"NoPlayerDownloadButton" = "Remove download button"; +"NoPlayerDownloadButtonDesc" = "Removes download button under the player."; "NoHints" = "Désactiver les indices"; "NoHintsDesc" = "Désactive les indices de l'auteur qui apparaissent dans le coin supérieur droit pendant la lecture."; "NoFreeZoom" = "Désactiver le geste de zoom libre"; @@ -147,8 +153,6 @@ "CopyVideoInfoDesc" = "Ajout d'un bouton permettant de copier le titre et la description de la vidéo dans le panneau Description de la vidéo."; "PostManager" = "Save post information"; "PostManagerDesc" = "Allows to copy post text and save post as image by long tap."; -"SavePostImage" = "Enregistrer l'image des publications de la communauté"; -"SavePostImageDesc" = "Enregistre l'image des publications de la communauté dans l'application Photos en appuyant longuement."; "SaveProfilePhoto" = "Enregistrer la photo de profil"; "SaveProfilePhotoDesc" = "Enregistre la photo de profil dans l'application Photos en appuyant longuement."; "CommentManager" = "Save comment information"; @@ -157,6 +161,20 @@ "FixAlbumsDesc" = "Répare l'affichage des couvertures pour les utilisateurs de Russie."; "RemovePlayNext" = "Supprimer \"Placer en première position dans la file d'attente\""; "RemovePlayNextDesc" = "Supprime l'option \"Placer en première position dans la file d'attente\" du menu."; +"RemoveDownloadMenu" = "Remove \"Download\""; +"RemoveDownloadMenuDesc" = "Removes \"Download\" option from menu."; +"RemoveWatchLaterMenu" = "Remove \"Save to Watch Later\""; +"RemoveWatchLaterMenuDesc" = "Removes \"Save to Watch Later\" option from menu."; +"RemoveSaveToPlaylistMenu" = "Remove \"Save to playlist\""; +"RemoveSaveToPlaylistMenuDesc" = "Removes \"Save to playlist\" option from menu."; +"RemoveShareMenu" = "Remove \"Share\""; +"RemoveShareMenuDesc" = "Removes \"Share\" option from menu."; +"RemoveNotInterestedMenu" = "Remove \"Not interested\""; +"RemoveNotInterestedMenuDesc" = "Removes \"Not interested\" option from menu."; +"RemoveDontRecommendMenu" = "Remove \"Don't recommend channel\""; +"RemoveDontRecommendMenuDesc" = "Removes \"Don't recommend channel\" option from menu."; +"RemoveReportMenu" = "Remove \"Report\""; +"RemoveReportMenuDesc" = "Removes \"Report\" option from menu."; "NoContinueWatching" = "Supprimer \"Continuer à regarder\""; "NoContinueWatchingDesc" = "Supprime la section \"Continuer à regarder\" contenant les vidéos inachevées de la page d'accueil."; "NoSearchHistory" = "Masquer l'historique de recherche"; @@ -172,6 +190,12 @@ "DisableRTL" = "Désactiver le formatage de droite à gauche"; "DisableRTLDesc" = "Affiche le texte de force en format de gauche à droite (LTR) pour les langues qui sont initialement affichées de droite à gauche (RTL)."; +"PlaybackQualityOnWiFi" = "Playback quality on WiFi"; +"PlaybackQualityOnCellular" = "Playback quality on Cellular"; +"SelectQuality" = "Select Quality"; +"Default" = "Default"; +"Best" = "Best"; + "Startup" = "Page de démarrage"; "Home" = "Accueil"; "Explore" = "Explorer"; @@ -181,8 +205,8 @@ "Warning" = "Avertissement"; "TabIsHidden" = "L'onglet masqué ne peut pas être sélectionné comme page de démarrage"; -"DonateViaPayPal" = "Faire un don via PayPal"; -"SupportViaGhSponsors" = "Soutenir le développement via les sponsors Github"; +"SupportDevelopment" = "Support development"; +"SupportDevelopmentDesc" = "If you like YTLite and would like to support its development, you can do it using any of convenient ways below.\nThanks❤"; "Version" = "Version"; "About" = "À propos"; "Credits" = "Crédits"; @@ -194,6 +218,7 @@ "Japanese" = "Localisation japonaise"; "Vietnamese" = "Localisation vietnamienne"; "Advanced" = "Mode avancé"; +"AdvancedDesc" = "More customizable mode"; "AdvancedModeReminder" = "Voulez-vous activer le mode avancé pour YTLite ?\n\nCe mode offre plus de 50 options supplémentaires pour personnaliser et optimiser votre expérience YouTube. Vous pouvez l'activer/désactiver ultérieurement depuis Paramètres → %@ → %@ → %@."; "ClearCache" = "Effacer le cache"; "ResetSettings" = "Réinitialiser les paramètres YTLite"; @@ -212,6 +237,8 @@ "CopyCommentText" = "Copy comment text"; "SaveCommentAsImage" = "Save comment as image"; "CopyCommentAsImage" = "Copy comment as image"; +"SaveProfilePicture" = "Save profile picture"; +"CopyProfilePicture" = "Copy profile picture"; "Cancel" = "Annuler"; "Copied" = "Copié dans le presse-papiers"; "Saved" = "Enregistré dans Photos"; diff --git a/layout/Library/Application Support/YTLite.bundle/github.png b/layout/Library/Application Support/YTLite.bundle/github.png new file mode 100644 index 0000000000000000000000000000000000000000..44a11d722c2ee99831ac9c85336e9a1e669ea1df GIT binary patch literal 9518 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 M07*qoM6N<$g85`sT>t<8 literal 0 HcmV?d00001 diff --git a/layout/Library/Application Support/YTLite.bundle/ja.lproj/Localizable.strings b/layout/Library/Application Support/YTLite.bundle/ja.lproj/Localizable.strings index 789fb76..f7237b3 100644 --- a/layout/Library/Application Support/YTLite.bundle/ja.lproj/Localizable.strings +++ b/layout/Library/Application Support/YTLite.bundle/ja.lproj/Localizable.strings @@ -67,6 +67,12 @@ "DontSnap2ChapterDesc" = "ダブルタップジェスチャーで次のエピソードへスキップするのを無効にします"; "RedProgressBar" = "赤いプログレスバー"; "RedProgressBarDesc" = "赤いプログレスバーを復元します"; +"NoPlayerRemixButton" = "Remove remix button"; +"NoPlayerRemixButtonDesc" = "Removes remix button under the player."; +"NoPlayerClipButton" = "Remove clip button"; +"NoPlayerClipButtonDesc" = "Removes clip button under the player."; +"NoPlayerDownloadButton" = "Remove download button"; +"NoPlayerDownloadButtonDesc" = "Removes download button under the player."; "NoHints" = "ヒントを無効化"; "NoHintsDesc" = "再生中に右上に表示される投稿者のヒントを無効にします"; "NoFreeZoom" = "フリーズームジェスチャーを無効化"; @@ -147,8 +153,6 @@ "CopyVideoInfoDesc" = "Adds button to copy video title and description into Video Description panel."; "PostManager" = "Save post information"; "PostManagerDesc" = "Allows to copy post text and save post as image by long tap."; -"SavePostImage" = "Save community posts image"; -"SavePostImageDesc" = "Saves community posts image to the Photos app by long tap."; "SaveProfilePhoto" = "Save profile picture"; "SaveProfilePhotoDesc" = "Saves profile picture to the Photos app by long tap."; "CommentManager" = "Save comment information"; @@ -157,6 +161,20 @@ "FixAlbumsDesc" = "Fixes the display of covers for users from Russia."; "RemovePlayNext" = "\"次に再生\"を削除"; "RemovePlayNextDesc" = "メニューから\"次に再生\"オプションを削除します"; +"RemoveDownloadMenu" = "Remove \"Download\""; +"RemoveDownloadMenuDesc" = "Removes \"Download\" option from menu."; +"RemoveWatchLaterMenu" = "Remove \"Save to Watch Later\""; +"RemoveWatchLaterMenuDesc" = "Removes \"Save to Watch Later\" option from menu."; +"RemoveSaveToPlaylistMenu" = "Remove \"Save to playlist\""; +"RemoveSaveToPlaylistMenuDesc" = "Removes \"Save to playlist\" option from menu."; +"RemoveShareMenu" = "Remove \"Share\""; +"RemoveShareMenuDesc" = "Removes \"Share\" option from menu."; +"RemoveNotInterestedMenu" = "Remove \"Not interested\""; +"RemoveNotInterestedMenuDesc" = "Removes \"Not interested\" option from menu."; +"RemoveDontRecommendMenu" = "Remove \"Don't recommend channel\""; +"RemoveDontRecommendMenuDesc" = "Removes \"Don't recommend channel\" option from menu."; +"RemoveReportMenu" = "Remove \"Report\""; +"RemoveReportMenuDesc" = "Removes \"Report\" option from menu."; "NoContinueWatching" = "\"続きを見る\"を削除"; "NoContinueWatchingDesc" = "ホームページに未完成の動画を含む\"続きを見る\"セクションを削除します"; "NoSearchHistory" = "検索履歴を非表示"; @@ -172,6 +190,12 @@ "DisableRTL" = "RTLフォーマットを無効化"; "DisableRTLDesc" = "RTLで表示される言語を左から右(LTR)の形式で表示するように強制します"; +"PlaybackQualityOnWiFi" = "Playback quality on WiFi"; +"PlaybackQualityOnCellular" = "Playback quality on Cellular"; +"SelectQuality" = "Select Quality"; +"Default" = "Default"; +"Best" = "Best"; + "Startup" = "スタートアップページ"; "Home" = "ホーム"; "Explore" = "探索"; @@ -181,8 +205,8 @@ "Warning" = "警告"; "TabIsHidden" = "非表示のタブはスタートアップページとして選択できません"; -"DonateViaPayPal" = "Donate via PayPal"; -"SupportViaGhSponsors" = "Support development via Github Sponsors"; +"SupportDevelopment" = "Support development"; +"SupportDevelopmentDesc" = "If you like YTLite and would like to support its development, you can do it using any of convenient ways below.\nThanks❤"; "Version" = "バージョン"; "About" = "About"; "Credits" = "クレジット"; @@ -194,6 +218,7 @@ "Japanese" = "日本語翻訳"; "Vietnamese" = "Vietnamese localization"; "Advanced" = "アドバンスモード"; +"AdvancedDesc" = "More customizable mode"; "AdvancedModeReminder" = "YTLiteでアドバンスモードを有効にしますか?\n\nこのモードでは50以上の追加オプションを使用してYouTubeのカスタマイズと最適化が可能です。後で、設定 → %@ → %@ → %@から変更できます"; "ClearCache" = "Clear cache"; "ResetSettings" = "YTLiteの設定をリセット"; @@ -212,6 +237,8 @@ "CopyCommentText" = "Copy comment text"; "SaveCommentAsImage" = "Save comment as image"; "CopyCommentAsImage" = "Copy comment as image"; +"SaveProfilePicture" = "Save profile picture"; +"CopyProfilePicture" = "Copy profile picture"; "Cancel" = "Cancel"; "Copied" = "Copied to clipboard"; "Saved" = "Saved to Photos"; diff --git a/layout/Library/Application Support/YTLite.bundle/paypal.png b/layout/Library/Application Support/YTLite.bundle/paypal.png new file mode 100644 index 0000000000000000000000000000000000000000..5b6a714aeace3f0b98e73d57742b14c401a69f8a GIT binary patch literal 4930 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¬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 h4*EGQeCe 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 literal 0 HcmV?d00001 diff --git a/packages/com.dvntm.ytlite_2.7_iphoneos-arm64.deb b/packages/com.dvntm.ytlite_2.7_iphoneos-arm64.deb new file mode 100644 index 0000000000000000000000000000000000000000..2f70931d656dccb2eb80c7a2f29a9463db426488 GIT binary patch literal 97016 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≺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 WOkqvaeJRxcwN-PNSpWa3R_gY=q(N8! literal 0 HcmV?d00001