diff --git a/Source/uYouPlus.xm b/Source/uYouPlus.xm index c0141da..a526468 100644 --- a/Source/uYouPlus.xm +++ b/Source/uYouPlus.xm @@ -501,53 +501,34 @@ static NSString *accessGroupID() { // YTSpeed - https://github.com/Lyvendia/YTSpeed %group gYTSpeed %hook YTVarispeedSwitchController -- (instancetype)init { - if ((self = %orig)) { - const int size = 17; +- (id)init { + id result = %orig; + + const int size = 17; float speeds[] = {0.25, 0.5, 0.75, 1.0, 1.25, 1.5, 1.75, 2.0, 2.25, 2.5, 2.75, 3.0, 3.25, 3.5, 3.75, 4.0, 5.0}; id varispeedSwitchControllerOptions[size]; - for (int i = 0; i < size; ++i) { - id title = [NSString stringWithFormat:@"%.2fx", speeds[i]]; - varispeedSwitchControllerOptions[i] = [[%c(YTVarispeedSwitchControllerOption) alloc] initWithTitle:title rate:speeds[i]]; - } + for (int i = 0; i < size; ++i) { + id title = [NSString stringWithFormat:@"%.2fx", speeds[i]]; + varispeedSwitchControllerOptions[i] = [[%c(YTVarispeedSwitchControllerOption) alloc] initWithTitle:title rate:speeds[i]]; + } - NSUInteger count = sizeof(varispeedSwitchControllerOptions) / sizeof(id); - NSArray *varispeedArray = [NSArray arrayWithObjects:varispeedSwitchControllerOptions count:count]; - MSHookIvar(self, "_options") = varispeedArray; - } - return self; -} -%end + NSUInteger count = sizeof(varispeedSwitchControllerOptions) / sizeof(id); + NSArray *varispeedArray = [NSArray arrayWithObjects:varispeedSwitchControllerOptions count:count]; + MSHookIvar(self, "_options") = varispeedArray; -%hook YTLocalPlaybackController -- (instancetype)initWithParentResponder:(id)parentResponder overlayFactory:(id)overlayFactory playerView:(id)playerView playbackControllerDelegate:(id)playbackControllerDelegate viewportSizeProvider:(id)viewportSizeProvider shouldDelayAdsPlaybackCoordinatorCreation:(BOOL)shouldDelayAdsPlaybackCoordinatorCreation { - float savedRate = [[NSUserDefaults standardUserDefaults] floatForKey:@"YoutubeSpeed_PlaybackRate"]; - if ((self = %orig)) { - MSHookIvar(self, "_restoredPlaybackRate") = savedRate == 0 ? DEFAULT_RATE : savedRate; - } - return self; -} -- (void)setPlaybackRate:(float)rate { - %orig; - [[NSUserDefaults standardUserDefaults] setFloat: rate forKey:@"YoutubeSpeed_PlaybackRate"]; + return result; } %end %hook MLHAMQueuePlayer -- (instancetype)initWithStickySettings:(id)stickySettings playerViewProvider:(id)playerViewProvider { - id result = %orig; - float savedRate = [[NSUserDefaults standardUserDefaults] floatForKey:@"YoutubeSpeed_PlaybackRate"]; - [self setRate: savedRate == 0 ? DEFAULT_RATE : savedRate]; - return result; -} - (void)setRate:(float)rate { - MSHookIvar(self, "_rate") = rate; + MSHookIvar(self, "_rate") = rate; MSHookIvar(self, "_preferredRate") = rate; id player = MSHookIvar(self, "_player"); [player setRate: rate]; - + id stickySettings = MSHookIvar(self, "_stickySettings"); [stickySettings setRate: rate]; @@ -557,6 +538,13 @@ static NSString *accessGroupID() { [singleVideoController playerRateDidChange: rate]; } %end + +%hook YTPlayerViewController +%property (nonatomic, assign) float playbackRate; +- (void)singleVideo:(id)video playbackRateDidChange:(float)rate { + %orig; +} +%end %end # pragma mark - uYouPlus