Skip to content

Instantly share code, notes, and snippets.

@r-plus
Last active December 23, 2015 14:39
Show Gist options
  • Select an option

  • Save r-plus/6649887 to your computer and use it in GitHub Desktop.

Select an option

Save r-plus/6649887 to your computer and use it in GitHub Desktop.
// Contributor: Thanks wakinchan's work to compatible for GoogleTranslate v2.0
// https://github.com/wakinchan/GoogleTranslateScheme
#define kNewURLScheme "googletranslate://tweak?q="
@interface TextTranslator : NSObject <UIApplicationDelegate>
- (id)initWithDelegate:(id)delegate userInfo:(id)info translateText:(id)text fromLanguage:(id)language toLanguage:(id)language5 localeLanguage:(id)language6 inputMethod:(int)method;
- (void)start;
@end
@interface TranslateViewController : UIViewController
@end
@interface GTRTabBarController : UIViewController
- (void)setSelectedIndex:(unsigned int)arg1;
@end
@interface TranslateAppDelegate : NSObject <UIApplicationDelegate>
@property(readonly, weak, nonatomic) TranslateViewController *translateViewController;
@property(strong, nonatomic) GTRTabBarController *tabBarController;
@end
%hook TranslateAppDelegate
static inline BOOL OpenFromTweakURL(TranslateAppDelegate *self, NSURL *url)
{
NSString *urlString = [url absoluteString];
if ([urlString hasPrefix:@kNewURLScheme]) {
NSString *query = [urlString substringFromIndex:[@kNewURLScheme length]];
NSString *decodedString = (__bridge_transfer NSString *)CFURLCreateStringByReplacingPercentEscapesUsingEncoding(
kCFAllocatorDefault,
(CFStringRef)query,
CFSTR(""),
kCFStringEncodingUTF8);
NSArray *languages = [NSLocale preferredLanguages];
NSString *currentLanguage = [languages[0] substringToIndex:2];
TextTranslator *tt = [[%c(TextTranslator) alloc] initWithDelegate:self.translateViewController
userInfo:nil
translateText:decodedString
fromLanguage:@"auto"
toLanguage:currentLanguage
localeLanguage:@"en"
inputMethod:0];
[tt start];
[self.tabBarController setSelectedIndex:0];
return YES;
} else {
return NO;
}
}
%group Add
%new(c@:@@@@)
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)application3 annotation:(id)annotation
{
return OpenFromTweakURL(self, url);
}
%end
%group Hook
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)application3 annotation:(id)annotation
{
if ([[url absoluteString] hasPrefix:@kNewURLScheme])
return OpenFromTweakURL(self, url);
else
return %orig;
}
%end
%end
%ctor {
@autoreleasepool {
if ([[[%c(TranslateAppDelegate) alloc] init] respondsToSelector:@selector(application:openURL:sourceApplication:annotation:)]) {
%init(Hook);
} else {
%init(Add);
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment