From f401399efd627b810f407039281d43c4fbd07ebc Mon Sep 17 00:00:00 2001 From: Mitchell Livingston Date: Thu, 26 Nov 2009 16:38:21 +0000 Subject: [PATCH] register to automatically accept when a user clicks a magnet link --- macosx/Controller.h | 2 +- macosx/Controller.m | 67 +++++++++++++++++++++++---------------------- macosx/Info.plist | 12 ++++++++ macosx/Torrent.m | 3 +- 4 files changed, 50 insertions(+), 34 deletions(-) diff --git a/macosx/Controller.h b/macosx/Controller.h index ee9485efa..87ab19f91 100644 --- a/macosx/Controller.h +++ b/macosx/Controller.h @@ -127,7 +127,7 @@ typedef enum - (void) invalidOpenAlert: (NSString *) filename; - (void) duplicateOpenAlert: (NSString *) name; -- (void) openURL: (NSURL *) torrentURL; +- (void) openURL: (NSString *) urlString; - (void) openURLEndSheet: (id) sender; - (void) openURLCancelEndSheet: (id) sender; - (void) openURLShowSheet: (id) sender; diff --git a/macosx/Controller.m b/macosx/Controller.m index d90d9ff2b..1f2347e8c 100644 --- a/macosx/Controller.m +++ b/macosx/Controller.m @@ -345,6 +345,14 @@ static void sleepCallback(void * controller, io_service_t y, natural_t messageTy tr_sessionSetRPCCallback(fLib, rpcCallback, self); + //register for dock icon drags + [[NSAppleEventManager sharedAppleEventManager] setEventHandler: self andSelector: @selector(handleOpenContentsEvent:replyEvent:) + forEventClass: kCoreEventClass andEventID: kAEOpenContents]; + + //register for magnet URLs + [[NSAppleEventManager sharedAppleEventManager] setEventHandler: self andSelector: @selector(handleOpenContentsEvent:replyEvent:) + forEventClass: kInternetEventClass andEventID: kAEGetURL]; + [GrowlApplicationBridge setGrowlDelegate: self]; [[UKKQueue sharedFileWatcher] setDelegate: self]; @@ -566,10 +574,6 @@ static void sleepCallback(void * controller, io_service_t y, natural_t messageTy { [NSApp setServicesProvider: self]; - //register for dock icon drags - [[NSAppleEventManager sharedAppleEventManager] setEventHandler: self andSelector: @selector(handleOpenContentsEvent:replyEvent:) - forEventClass: kCoreEventClass andEventID: kAEOpenContents]; - //auto importing [self checkAutoImportDirectory]; @@ -757,7 +761,7 @@ static void sleepCallback(void * controller, io_service_t y, natural_t messageTy urlString = [directObject stringValue]; if (urlString) - [self openURL: [NSURL URLWithString: urlString]]; + [self openURL: urlString]; } - (void) download: (NSURLDownload *) download decideDestinationWithSuggestedFilename: (NSString *) suggestedName @@ -1080,9 +1084,31 @@ static void sleepCallback(void * controller, io_service_t y, natural_t messageTy [alert release]; } -- (void) openURL: (NSURL *) url +- (void) openURL: (NSString *) urlString { - [[NSURLDownload alloc] initWithRequest: [NSURLRequest requestWithURL: url] delegate: self]; + if ([urlString rangeOfString: @"magnet:" options: (NSAnchoredSearch | NSCaseInsensitiveSearch)].location != NSNotFound) + [self openMagnet: urlString]; + else + { + if ([urlString rangeOfString: @"://"].location == NSNotFound) + { + if ([urlString rangeOfString: @"."].location == NSNotFound) + { + NSInteger beforeCom; + if ((beforeCom = [urlString rangeOfString: @"/"].location) != NSNotFound) + urlString = [NSString stringWithFormat: @"http://www.%@.com/%@", + [urlString substringToIndex: beforeCom], + [urlString substringFromIndex: beforeCom + 1]]; + else + urlString = [NSString stringWithFormat: @"http://www.%@.com/", urlString]; + } + else + urlString = [@"http://" stringByAppendingString: urlString]; + } + + NSURL * url = [NSURL URLWithString: urlString]; + [[NSURLDownload alloc] initWithRequest: [NSURLRequest requestWithURL: url] delegate: self]; + } } - (void) openURLShowSheet: (id) sender @@ -1129,30 +1155,7 @@ static void sleepCallback(void * controller, io_service_t y, natural_t messageTy return; NSString * urlString = [fURLSheetTextField stringValue]; - - if ([urlString rangeOfString: @"magnet:" options: (NSAnchoredSearch | NSCaseInsensitiveSearch)].location != NSNotFound) - [self openMagnet: urlString]; - else - { - if ([urlString rangeOfString: @"://"].location == NSNotFound) - { - if ([urlString rangeOfString: @"."].location == NSNotFound) - { - NSInteger beforeCom; - if ((beforeCom = [urlString rangeOfString: @"/"].location) != NSNotFound) - urlString = [NSString stringWithFormat: @"http://www.%@.com/%@", - [urlString substringToIndex: beforeCom], - [urlString substringFromIndex: beforeCom + 1]]; - else - urlString = [NSString stringWithFormat: @"http://www.%@.com/", urlString]; - } - else - urlString = [@"http://" stringByAppendingString: urlString]; - } - - NSURL * url = [NSURL URLWithString: urlString]; - [self performSelectorOnMainThread: @selector(openURL:) withObject: url waitUntilDone: NO]; - } + [self performSelectorOnMainThread: @selector(openURL:) withObject: urlString waitUntilDone: NO]; } - (void) createFile: (id) sender @@ -2875,7 +2878,7 @@ static void sleepCallback(void * controller, io_service_t y, natural_t messageTy NSURL * url; if ((url = [NSURL URLFromPasteboard: pasteboard])) { - [self openURL: url]; + [[NSURLDownload alloc] initWithRequest: [NSURLRequest requestWithURL: url] delegate: self]; return YES; } } diff --git a/macosx/Info.plist b/macosx/Info.plist index 96fe48ebd..5824a4d33 100644 --- a/macosx/Info.plist +++ b/macosx/Info.plist @@ -45,6 +45,18 @@ TR## CFBundleShortVersionString VERSION_STRING_INFOPLIST + CFBundleURLTypes + + + CFBundleURLSchemes + + magnet + dht + + CFBundleURLName + BitTorrent Magnet URL + + CFBundleVersion SVN_REVISION_NUM CFBundleGetInfoString diff --git a/macosx/Torrent.m b/macosx/Torrent.m index 628e8fa2b..cf896e240 100644 --- a/macosx/Torrent.m +++ b/macosx/Torrent.m @@ -909,7 +909,8 @@ int trashDataFile(const char * filename) - (NSString *) progressString { if ([self isMagnet]) - return NSLocalizedString(@"Magnetized transfer - acquiring torrent information", "Torrent -> progress string"); + return [NSString stringWithFormat: @"%@ - %@", NSLocalizedString(@"Magnetized transfer", "Torrent -> progress string"), + NSLocalizedString(@"torrent information needed", "Torrent -> progress string")]; NSString * string; -- 2.40.0