BandarHelal

Untitled

May 1st, 2021 (edited)
2,640
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. // YTHeaders.h
  2.  
  3. @interface YTQTMButton : UIButton
  4. @property(readonly, nonatomic) long long pageStyle;
  5. @property(nonatomic) CGFloat minHitTargetSize;
  6. @property(nonatomic) CGFloat horizontalContentPadding;
  7. @property(nonatomic) CGFloat verticalContentPadding;
  8. @property(nonatomic) CGFloat buttonImageTitlePadding;
  9. @property(nonatomic) long long buttonLayoutStyle;
  10. + (id)buttonWithImage:(id)arg1 accessibilityLabel:(id)arg2 accessibilityIdentifier:(id)arg3;
  11. + (id)barButtonWithImage:(id)arg1 accessibilityLabel:(id)arg2 accessibilityIdentifier:(id)arg3;
  12. @end
  13.  
  14. @interface YTReelPlayerBottomButton : YTQTMButton
  15. @end
  16.  
  17. @interface YTIFormatStream : NSObject
  18. @property(copy, nonatomic) NSString *URL; // @dynamic URL;
  19. @property(nonatomic) int fps; // @dynamic fps;
  20. @property(nonatomic) int height; // @dynamic height;
  21. @property(nonatomic) _Bool highReplication; // @dynamic highReplication;
  22. @property(nonatomic) int itag; // @dynamic itag;
  23. @property(nonatomic) long long lastModified; // @dynamic lastModified;
  24. @property(nonatomic) float loudnessDb; // @dynamic loudnessDb;
  25. @property(nonatomic) double maxDvrDurationSec; // @dynamic maxDvrDurationSec;
  26. @property(copy, nonatomic) NSString *mimeType; // @dynamic mimeType;
  27. @property(nonatomic) int projectionType; // @dynamic projectionType;
  28. @property(copy, nonatomic) NSString *quality; // @dynamic quality;
  29. @property(copy, nonatomic) NSString *qualityLabel; // @dynamic qualityLabel;
  30. @property(copy, nonatomic) NSString *signatureCipher; // @dynamic signatureCipher;
  31. @property(nonatomic) int spatialAudioType; // @dynamic spatialAudioType;
  32. @property(nonatomic) int stereoLayout; // @dynamic stereoLayout;
  33. @property(nonatomic) double targetDurationSec; // @dynamic targetDurationSec;
  34. @property(nonatomic) int type; // @dynamic type;
  35. @property(nonatomic) int width; // @dynamic width;
  36. @property(copy, nonatomic) NSString *xtags; // @dynamic xtags;
  37. @end
  38.  
  39. @interface MLFormat : NSObject
  40. @property(readonly, nonatomic) int singleDimensionResolution;
  41. @property(readonly, nonatomic) NSString *qualityLabel;
  42. @property(readonly, nonatomic) int audioQuality;
  43. @property(readonly, nonatomic) NSString *xtags;
  44. @property(readonly, nonatomic) int itag;
  45. @property(readonly, nonatomic) YTIFormatStream *formatStream;
  46. @property(readonly, nonatomic) _Bool isVideo;
  47. @property(readonly, nonatomic) _Bool isAudio;
  48. @property(readonly, nonatomic) double FPS;
  49. @property(readonly, nonatomic) int height;
  50. @property(readonly, nonatomic) int width;
  51. @property(readonly, nonatomic) NSString *ID;
  52. @property(readonly, nonatomic) _Bool isText;
  53. @property(readonly, nonatomic, getter=isLocalFile) _Bool localFile;
  54. @property(readonly, nonatomic) NSString *debugIDForQOE;
  55. @property(readonly, nonatomic) long long lastModifiedTimeMicroseconds;
  56. @property(readonly, nonatomic) float aspectRatio;
  57. @property(readonly, nonatomic) _Bool OTF;
  58. @property(readonly, nonatomic) NSString *streamIdentifierTagsLabel;
  59. @property(readonly, nonatomic) _Bool isDefaultAudio;
  60. @property(readonly, nonatomic, getter=isVideoOnly) _Bool videoOnly;
  61. @property(readonly, nonatomic, getter=isAudioOnly) _Bool audioOnly;
  62. @property(readonly, nonatomic, getter=isVideoVertical) _Bool videoVertical;
  63. @property(readonly, nonatomic, getter=isFairPlayFormat) _Bool fairPlayFormat;
  64. @property(readonly, nonatomic, getter=isWebMFormat) _Bool webMFormat;
  65. @property(readonly, nonatomic, getter=isMP4Format) _Bool MP4Format;
  66. @property(readonly, nonatomic, getter=isHLSFormat) _Bool HLSFormat;
  67. @end
  68.  
  69. @interface YTSingleVideoController : NSObject
  70. @property(readonly, nonatomic) NSArray *selectableVideoFormats;
  71. @property(readonly, nonatomic) NSArray *selectableAudioFormats;
  72. @end
  73.  
  74. @interface YTLightweightPlayerViewController : UIViewController
  75. @property(readonly, nonatomic) id /*<YTSingleVideoObservable>*/ contentVideo;
  76. @property(readonly, nonatomic) id /*<YTSingleVideoObservable>*/ activeVideo;
  77. @end
  78.  
  79. @interface YTReelWatchPlaybackOverlayView : UIView
  80. @property(readonly, nonatomic) YTQTMButton *overflowButton;
  81. @property(readonly, nonatomic) __weak id /*<YTResponder>*/ parentResponder;
  82. // @property(readonly, nonatomic) NSArray *interactiveElements;
  83. @end
  84.  
  85. @interface YTReelPlayerViewController : UIViewController
  86. @property (strong, nonatomic) UIWindow *window2;
  87. @property (retain, nonatomic) YTLightweightPlayerViewController *player;
  88. - (void)pause;
  89. - (void)play;
  90. - (void)restart;
  91. - (void)reelContentViewRequestsSuspendPlayback:(id)arg1;
  92. - (void)reelContentViewRequestsResumePlayback:(id)arg1;
  93. - (void)didPressDownloadButton;
  94. @end
  95.  
  96. @interface YTReelContentView : UIView
  97. @property(readonly, nonatomic) YTReelWatchPlaybackOverlayView *playbackOverlay;
  98. @property(readonly, nonatomic) __weak id parentResponder;
  99. @end
  100.  
  101. // YTFleetDownloader.xm
  102. %hook YTReelPlayerViewController
  103. %property (strong, nonatomic) UIWindow *window2;
  104. - (void)viewDidLoad {
  105.     %orig;
  106.     UIButton *DownloadButton = [%c(YTQTMButton) buttonWithImage:[UIImage systemImageNamed:@"arrow.down"] accessibilityLabel:@"download fleet button" accessibilityIdentifier:@"download.fleet.button"];
  107.     [DownloadButton setTranslatesAutoresizingMaskIntoConstraints:false];
  108.     [DownloadButton addTarget:self action:@selector(didPressDownloadButton) forControlEvents:64];
  109.     [DownloadButton.imageView setTintColor:UIColor.whiteColor];
  110.     if ([self.view isKindOfClass:NSClassFromString(@"YTReelContentView")]) {
  111.         YTReelContentView *_view = self.view;
  112.         [_view.playbackOverlay addSubview:DownloadButton];
  113.        
  114.         [NSLayoutConstraint activateConstraints:@[
  115.             [DownloadButton.trailingAnchor constraintEqualToAnchor:_view.trailingAnchor],
  116.             [DownloadButton.bottomAnchor constraintEqualToAnchor:_view.playbackOverlay.overflowButton.topAnchor],
  117.             [DownloadButton.heightAnchor constraintEqualToConstant:48],
  118.             [DownloadButton.widthAnchor constraintEqualToConstant:64]
  119.         ]];
  120.     }
  121. }
  122. %new - (void)didPressDownloadButton {
  123.     self.window2 = [[UIWindow alloc] initWithFrame:UIScreen.mainScreen.bounds];
  124.     self.window2.windowLevel = UIWindowLevelAlert;
  125.     [self.window2 setRootViewController:[[UIViewController alloc] init]];
  126.     [self.window2 makeKeyAndVisible];
  127.    
  128.     [self reelContentViewRequestsSuspendPlayback:self];
  129.     UIAlertController *alert = [UIAlertController alertControllerWithTitle:@"hi" message:nil preferredStyle:UIAlertControllerStyleActionSheet];
  130.     YTSingleVideoController *video = self.player.activeVideo;
  131.     for (MLFormat *format in video.selectableVideoFormats) {
  132.         if ([format.formatStream.mimeType containsString:@"video/mp4"]) {
  133.             UIAlertAction *download = [UIAlertAction actionWithTitle:[NSString stringWithFormat:@"%dx%d", format.formatStream.width, format.formatStream.height] style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) {
  134.                 self.window2.rootViewController.view = nil;
  135.                 self.window2.rootViewController = nil;
  136.                 self.window2.windowScene = nil;
  137.                 [self.window2 setHidden:true];
  138.                 [self reelContentViewRequestsResumePlayback:self];
  139.             }];
  140.             [alert addAction:download];
  141.         }
  142.     }
  143.     [alert addAction:[UIAlertAction actionWithTitle:@"Cancel" style:UIAlertActionStyleCancel handler:^(UIAlertAction * _Nonnull action) {
  144.         self.window2.rootViewController.view = nil;
  145.          self.window2.rootViewController = nil;
  146.          self.window2.windowScene = nil;
  147.          [self.window2 setHidden:true];
  148.          [self reelContentViewRequestsResumePlayback:self];
  149.     }]];
  150.     [self.window2.rootViewController presentViewController:alert animated:true completion:nil];
  151. }
  152. %end
Advertisement
Add Comment
Please, Sign In to add comment