-
Notifications
You must be signed in to change notification settings - Fork 1
/
Tweak.x
119 lines (92 loc) · 3.17 KB
/
Tweak.x
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
#import "../YTVideoOverlay/Header.h"
#import "../YTVideoOverlay/Init.x"
#import <YouTubeHeader/YTMainAppVideoPlayerOverlayViewController.h>
#define TweakKey @"YouSpeed"
@interface YTMainAppControlsOverlayView (YouSpeed)
- (void)didPressYouSpeed:(id)arg;
- (void)updateYouSpeedButton:(id)arg;
@end
@interface YTInlinePlayerBarContainerView (YouSpeed)
- (void)didPressYouSpeed:(id)arg;
- (void)updateYouSpeedButton:(id)arg;
@end
NSString *YouSpeedUpdateNotification = @"YouSpeedUpdateNotification";
NSString *currentSpeedLabel = @"1x";
%group Video
%hook YTPlayerOverlayManager
- (void)varispeedSwitchController:(id)arg1 didSelectRate:(float)rate {
NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init];
formatter.numberStyle = NSNumberFormatterDecimalStyle;
formatter.minimumFractionDigits = 0;
formatter.maximumFractionDigits = 2;
NSString *rateString = [formatter stringFromNumber:[NSNumber numberWithFloat:rate]];
currentSpeedLabel = [NSString stringWithFormat:@"%@x", rateString];
[[NSNotificationCenter defaultCenter] postNotificationName:YouSpeedUpdateNotification object:nil];
%orig;
}
%end
%end
%group Top
%hook YTMainAppControlsOverlayView
- (id)initWithDelegate:(id)delegate {
self = %orig;
[self updateYouSpeedButton:nil];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(updateYouSpeedButton:) name:YouSpeedUpdateNotification object:nil];
return self;
}
- (id)initWithDelegate:(id)delegate autoplaySwitchEnabled:(BOOL)autoplaySwitchEnabled {
self = %orig;
[self updateYouSpeedButton:nil];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(updateYouSpeedButton:) name:YouSpeedUpdateNotification object:nil];
return self;
}
- (void)dealloc {
[[NSNotificationCenter defaultCenter] removeObserver:self name:YouSpeedUpdateNotification object:nil];
%orig;
}
%new(v@:@)
- (void)updateYouSpeedButton:(id)arg {
[self.overlayButtons[TweakKey] setTitle:currentSpeedLabel forState:0];
}
%new(v@:@)
- (void)didPressYouSpeed:(id)arg {
YTMainAppVideoPlayerOverlayViewController *c = [self valueForKey:@"_eventsDelegate"];
[c didPressVarispeed:arg];
[self updateYouSpeedButton:nil];
}
%end
%end
%group Bottom
%hook YTInlinePlayerBarContainerView
- (id)init {
self = %orig;
[self updateYouSpeedButton:nil];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(updateYouSpeedButton:) name:YouSpeedUpdateNotification object:nil];
return self;
}
- (void)dealloc {
[[NSNotificationCenter defaultCenter] removeObserver:self name:YouSpeedUpdateNotification object:nil];
%orig;
}
%new(v@:@)
- (void)updateYouSpeedButton:(id)arg {
[self.overlayButtons[TweakKey] setTitle:currentSpeedLabel forState:0];
}
%new(v@:@)
- (void)didPressYouSpeed:(id)arg {
YTMainAppVideoPlayerOverlayViewController *c = [self.delegate valueForKey:@"_delegate"];
[c didPressVarispeed:arg];
[self updateYouSpeedButton:nil];
}
%end
%end
%ctor {
initYTVideoOverlay(TweakKey, @{
AccessibilityLabelKey: @"Speed",
SelectorKey: @"didPressYouSpeed:",
AsTextKey: @YES
});
%init(Video);
%init(Top);
%init(Bottom);
}