From: <mst...@us...> - 2010-01-15 01:37:35
|
Revision: 1472 http://vienna-rss.svn.sourceforge.net/vienna-rss/?rev=1472&view=rev Author: mstroeck Date: 2010-01-15 01:37:29 +0000 (Fri, 15 Jan 2010) Log Message: ----------- Put the URL cleanup code into HelperFunctions now that it is used in more than one place, to prevent code duplication. Modified Paths: -------------- trunk/2.5.0/BrowserPane.m trunk/2.5.0/HelperFunctions.h trunk/2.5.0/HelperFunctions.m trunk/2.5.0/PluginManager.m Modified: trunk/2.5.0/BrowserPane.m =================================================================== --- trunk/2.5.0/BrowserPane.m 2010-01-15 01:16:31 UTC (rev 1471) +++ trunk/2.5.0/BrowserPane.m 2010-01-15 01:37:29 UTC (rev 1472) @@ -199,34 +199,12 @@ if ([theURL rangeOfString:@"://"].location == NSNotFound) theURL = [NSString stringWithFormat:@"http://%@", theURL]; - // This is a hack to handle Internationalized Domain Names. - // WebKit does is automatically, so we tap into that. - NSURL *urlToLoad = nil; - NSPasteboard * pasteboard = [NSPasteboard pasteboardWithName:@"ViennaIDNURLPasteboard"]; - [pasteboard declareTypes:[NSArray arrayWithObject:NSStringPboardType] owner:nil]; - @try - { - if ([pasteboard setString:theURL forType:NSStringPboardType]) - urlToLoad = [WebView URLFromPasteboard:pasteboard]; - } - @catch (NSException * exception) - { - urlToLoad = nil; - } - - if (urlToLoad == nil) - urlToLoad = [NSURL URLWithString:theURL]; + // cleanUpUrl is a hack to handle Internationalized Domain Names. WebKit handles them automatically, so we tap into that. + NSURL *urlToLoad = cleanUpUrl(theURL); if (urlToLoad != nil) - { [self loadURL:urlToLoad inBackground:NO]; - } else - { - // TODO: present error message to user? - NSBeep(); - NSLog(@"Can't create URL from string '%@'.", theURL); [self activateAddressBar]; - } } -(void)setViewTitle:(NSString *) newTitle Modified: trunk/2.5.0/HelperFunctions.h =================================================================== --- trunk/2.5.0/HelperFunctions.h 2010-01-15 01:16:31 UTC (rev 1471) +++ trunk/2.5.0/HelperFunctions.h 2010-01-15 01:37:29 UTC (rev 1472) @@ -44,5 +44,6 @@ NSMenuItem * menuWithTitleAndAction(NSString * theTitle, SEL theSelector); NSMenuItem * copyOfMenuWithAction(SEL theSelector); NSString * getDefaultBrowser(void); +NSURL * cleanUpUrl(NSString * theUrl); BOOL hasOSScriptsMenu(void); OSStatus GotoHelpPage(CFStringRef pagePath, CFStringRef anchorName); Modified: trunk/2.5.0/HelperFunctions.m =================================================================== --- trunk/2.5.0/HelperFunctions.m 2010-01-15 01:16:31 UTC (rev 1471) +++ trunk/2.5.0/HelperFunctions.m 2010-01-15 01:37:29 UTC (rev 1472) @@ -20,6 +20,7 @@ #import "HelperFunctions.h" #import <SystemConfiguration/SCNetworkReachability.h> #import <Carbon/Carbon.h> +#import <WebKit/WebKit.h> // Private functions static OSStatus RegisterMyHelpBook(void); @@ -78,6 +79,33 @@ return nil; } +/* cleanUpUrl + * Uses WebKit to clean up user-entered URLs that might contain umlauts, diacritics and other + * IDNA related stuff in the domain, or God knows what in filenames and arguments. + */ +NSURL * cleanUpUrl(NSString * theUrl) +{ + NSURL *urlToLoad = nil; + NSPasteboard * pasteboard = [NSPasteboard pasteboardWithName:@"ViennaIDNURLPasteboard"]; + [pasteboard declareTypes:[NSArray arrayWithObject:NSStringPboardType] owner:nil]; + @try + { + if ([pasteboard setString:theUrl forType:NSStringPboardType]) + urlToLoad = [WebView URLFromPasteboard:pasteboard]; + } + @catch (NSException * exception) + { + urlToLoad = nil; + { + // TODO: present error message to user? + NSBeep(); + NSLog(@"Can't create URL from string '%@'.", theUrl); + } + } + + return urlToLoad; +} + /* copyOfMenuWithAction * Returns an NSMenuItem that matches the one that implements the corresponding * action in the application main menu. Returns nil if no match is found. Modified: trunk/2.5.0/PluginManager.m =================================================================== --- trunk/2.5.0/PluginManager.m 2010-01-15 01:16:31 UTC (rev 1471) +++ trunk/2.5.0/PluginManager.m 2010-01-15 01:37:29 UTC (rev 1472) @@ -177,32 +177,9 @@ if (urlString != nil) { - // Let WebKit do the heavy lifting of cleaning up the URL, as there are lots of things - // that can go wrong otherwise: International Domain Names, umlauts or diacritics in titles, etc. ... - NSURL *urlToLoad = nil; - NSPasteboard * pasteboard = [NSPasteboard pasteboardWithName:@"ViennaIDNURLPasteboard"]; - [pasteboard declareTypes:[NSArray arrayWithObject:NSStringPboardType] owner:nil]; - @try - { - if ([pasteboard setString:urlString forType:NSStringPboardType]) - urlToLoad = [WebView URLFromPasteboard:pasteboard]; - } - @catch (NSException * exception) - { - urlToLoad = nil; - } - - if (urlToLoad == nil) - urlToLoad = [NSURL URLWithString:urlString]; - + NSURL * urlToLoad = cleanUpUrl(urlString); if (urlToLoad != nil) [[NSApp delegate] openURL:urlToLoad inPreferredBrowser:YES]; - else - { - // TODO: present error message to user? - NSBeep(); - NSLog(@"Can't create URL from string '%@'.", urlString); - } } } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |