mirror of
https://github.com/arichornlover/uYouEnhanced.git
synced 2026-04-21 11:52:00 +00:00
Update youtube-native-share to v0.1.0
This commit is contained in:
parent
344719f0a8
commit
0437a05f1b
1 changed files with 50 additions and 18 deletions
|
|
@ -109,29 +109,15 @@ static inline NSString* extractIdWithFormat(GPBUnknownFieldSet *fields, NSIntege
|
||||||
return [NSString stringWithFormat:format, id];
|
return [NSString stringWithFormat:format, id];
|
||||||
}
|
}
|
||||||
|
|
||||||
%hook ELMPBShowActionSheetCommand
|
static BOOL showNativeShareSheet(NSString *serializedShareEntity) {
|
||||||
- (void)executeWithCommandContext:(id)_context handler:(id)_handler {
|
GPBMessage *shareEntity = [%c(GPBMessage) deserializeFromString:serializedShareEntity];
|
||||||
if (!self.hasOnAppear)
|
|
||||||
return %orig;
|
|
||||||
GPBExtensionDescriptor *innertubeCommandDescriptor = [%c(YTIInnertubeCommandExtensionRoot) innertubeCommand];
|
|
||||||
if (![self.onAppear hasExtension:innertubeCommandDescriptor])
|
|
||||||
return %orig;
|
|
||||||
YTICommand *innertubeCommand = [self.onAppear getExtension:innertubeCommandDescriptor];
|
|
||||||
GPBExtensionDescriptor *updateShareSheetCommandDescriptor = [%c(YTIUpdateShareSheetCommand) updateShareSheetCommand];
|
|
||||||
if(![innertubeCommand hasExtension:updateShareSheetCommandDescriptor])
|
|
||||||
return %orig;
|
|
||||||
YTIUpdateShareSheetCommand *updateShareSheetCommand = [innertubeCommand getExtension:updateShareSheetCommandDescriptor];
|
|
||||||
if (!updateShareSheetCommand.hasSerializedShareEntity)
|
|
||||||
return %orig;
|
|
||||||
|
|
||||||
GPBMessage *shareEntity = [%c(GPBMessage) deserializeFromString:updateShareSheetCommand.serializedShareEntity];
|
|
||||||
GPBUnknownFieldSet *fields = shareEntity.unknownFields;
|
GPBUnknownFieldSet *fields = shareEntity.unknownFields;
|
||||||
NSString *shareUrl;
|
NSString *shareUrl;
|
||||||
|
|
||||||
if ([fields hasField:ShareEntityFieldClip]) {
|
if ([fields hasField:ShareEntityFieldClip]) {
|
||||||
GPBUnknownField *shareEntityClip = [fields getField:ShareEntityFieldClip];
|
GPBUnknownField *shareEntityClip = [fields getField:ShareEntityFieldClip];
|
||||||
if ([shareEntityClip.lengthDelimitedList count] != 1)
|
if ([shareEntityClip.lengthDelimitedList count] != 1)
|
||||||
return %orig;
|
return FALSE;
|
||||||
GPBMessage *clipMessage = [%c(GPBMessage) parseFromData:[shareEntityClip.lengthDelimitedList firstObject] error:nil];
|
GPBMessage *clipMessage = [%c(GPBMessage) parseFromData:[shareEntityClip.lengthDelimitedList firstObject] error:nil];
|
||||||
shareUrl = extractIdWithFormat(clipMessage.unknownFields, 1, @"https://youtube.com/clip/%@");
|
shareUrl = extractIdWithFormat(clipMessage.unknownFields, 1, @"https://youtube.com/clip/%@");
|
||||||
}
|
}
|
||||||
|
|
@ -152,10 +138,56 @@ static inline NSString* extractIdWithFormat(GPBUnknownFieldSet *fields, NSIntege
|
||||||
shareUrl = extractIdWithFormat(fields, ShareEntityFieldVideo, @"https://youtube.com/watch?v=%@");
|
shareUrl = extractIdWithFormat(fields, ShareEntityFieldVideo, @"https://youtube.com/watch?v=%@");
|
||||||
|
|
||||||
if (!shareUrl)
|
if (!shareUrl)
|
||||||
return %orig;
|
return FALSE;
|
||||||
|
|
||||||
UIActivityViewController *activityViewController = [[UIActivityViewController alloc]initWithActivityItems:@[shareUrl] applicationActivities:nil];
|
UIActivityViewController *activityViewController = [[UIActivityViewController alloc]initWithActivityItems:@[shareUrl] applicationActivities:nil];
|
||||||
[[%c(YTUIUtils) topViewControllerForPresenting] presentViewController:activityViewController animated:YES completion:^{}];
|
[[%c(YTUIUtils) topViewControllerForPresenting] presentViewController:activityViewController animated:YES completion:^{}];
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* -------------------- iPad Layout -------------------- */
|
||||||
|
|
||||||
|
%hook YTShareRequestViewController
|
||||||
|
- (id)initWithService:(id)_service parentResponder:(id)_parentResponder {
|
||||||
|
// disable the default share sheet behavior and force the app to call [YTAccountScopedCommandRouter handleCommand]
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
%end
|
||||||
|
|
||||||
|
%hook YTAccountScopedCommandRouter
|
||||||
|
- (BOOL)handleCommand:(id)command entry:(id)_entry fromView:(id)_fromView sender:(id)_sender completionBlock:(id)_completionBlock {
|
||||||
|
GPBExtensionDescriptor *shareEntityEndpointDescriptor = [%c(YTIShareEntityEndpoint) shareEntityEndpoint];
|
||||||
|
if (![command hasExtension:shareEntityEndpointDescriptor])
|
||||||
|
return %orig;
|
||||||
|
YTIShareEntityEndpoint *shareEntityEndpoint = [command getExtension:shareEntityEndpointDescriptor];
|
||||||
|
if(!shareEntityEndpoint.hasSerializedShareEntity)
|
||||||
|
return %orig;
|
||||||
|
if (!showNativeShareSheet(shareEntityEndpoint.serializedShareEntity))
|
||||||
|
return %orig;
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
%end
|
||||||
|
|
||||||
|
|
||||||
|
/* ------------------- iPhone Layout ------------------- */
|
||||||
|
|
||||||
|
%hook ELMPBShowActionSheetCommand
|
||||||
|
- (void)executeWithCommandContext:(id)_context handler:(id)_handler {
|
||||||
|
if (!self.hasOnAppear)
|
||||||
|
return %orig;
|
||||||
|
GPBExtensionDescriptor *innertubeCommandDescriptor = [%c(YTIInnertubeCommandExtensionRoot) innertubeCommand];
|
||||||
|
if (![self.onAppear hasExtension:innertubeCommandDescriptor])
|
||||||
|
return %orig;
|
||||||
|
YTICommand *innertubeCommand = [self.onAppear getExtension:innertubeCommandDescriptor];
|
||||||
|
GPBExtensionDescriptor *updateShareSheetCommandDescriptor = [%c(YTIUpdateShareSheetCommand) updateShareSheetCommand];
|
||||||
|
if(![innertubeCommand hasExtension:updateShareSheetCommandDescriptor])
|
||||||
|
return %orig;
|
||||||
|
YTIUpdateShareSheetCommand *updateShareSheetCommand = [innertubeCommand getExtension:updateShareSheetCommandDescriptor];
|
||||||
|
if (!updateShareSheetCommand.hasSerializedShareEntity)
|
||||||
|
return %orig;
|
||||||
|
if (!showNativeShareSheet(updateShareSheetCommand.serializedShareEntity))
|
||||||
|
return %orig;
|
||||||
}
|
}
|
||||||
%end
|
%end
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue