root/trunk/Preferences/JVFileTransferPreferences.m

Revision 3505, 3.7 kB (checked in by timothy, 2 years ago)

Adding NAT traversal support using either UPnP or NAT-PMP. There is new setting in the file transfer preferences to disable this feature. The library we used is a stripped down version of libtransmission (http://transmission.m0k.org). #949

Line 
1 #import "JVFileTransferPreferences.h"
2 #import "MVFileTransferController.h"
3
4 @implementation JVFileTransferPreferences
5 - (NSString *) preferencesNibName {
6         return @"JVFileTransferPreferences";
7 }
8
9 - (BOOL) hasChangesPending {
10         return NO;
11 }
12
13 - (NSImage *) imageForPreferenceNamed:(NSString *) name {
14         return [NSImage imageNamed:@"FileTransferPreferences"];
15 }
16
17 - (BOOL) isResizable {
18         return NO;
19 }
20
21 - (void) initializeFromDefaults {
22         NSRange range = [MVFileTransfer fileTransferPortRange];
23         [minRate setIntValue:range.location];
24         [maxRate setIntValue:( range.location + range.length )];
25
26         BOOL autoOpen = [MVFileTransfer isAutoPortMappingEnabled];
27         [autoOpenPorts setState:( autoOpen ? NSOnState: NSOffState )];
28
29         NSString *path = [MVFileTransferController userPreferredDownloadFolder];
30         NSMenuItem *menuItem = [saveDownloads itemAtIndex:[saveDownloads indexOfItemWithTag:2]];
31         NSImage *icon = [[NSWorkspace sharedWorkspace] iconForFile:path];
32         [icon setScalesWhenResized:YES];
33         [icon setSize:NSMakeSize( 16., 16. )];
34
35         [menuItem setTitle:[[NSFileManager defaultManager] displayNameAtPath:path]];
36         [menuItem setImage:icon];
37         [menuItem setRepresentedObject:path];
38
39         if( [[NSUserDefaults standardUserDefaults] boolForKey:@"JVAskForTransferSaveLocation"] ) {
40                 [saveDownloads selectItemAtIndex:[saveDownloads indexOfItemWithTag:1]];
41         } else {
42                 [saveDownloads selectItem:menuItem];
43         }
44 }
45
46 - (IBAction) changePortRange:(id) sender {
47         NSRange range = NSMakeRange( [minRate intValue], ( [maxRate intValue] - [minRate intValue] ) );
48         [[NSUserDefaults standardUserDefaults] setObject:NSStringFromRange( range ) forKey:@"JVFileTransferPortRange"];
49         [MVFileTransfer setFileTransferPortRange:range];
50 }
51
52 - (IBAction) changeAutoOpenPorts:(id) sender {
53         BOOL autoOpen = ( [sender state] == NSOnState );
54         [[NSUserDefaults standardUserDefaults] setBool:autoOpen forKey:@"JVAutoOpenTransferPorts"];
55         [MVFileTransfer setAutoPortMappingEnabled:autoOpen];
56 }
57
58 - (IBAction) changeSaveDownloads:(id) sender {
59         if( [sender tag] == 3 ) {
60                 NSOpenPanel *openPanel = [[NSOpenPanel openPanel] retain];
61                 [openPanel setCanChooseDirectories:YES];
62                 [openPanel setCanChooseFiles:NO];
63                 [openPanel setAllowsMultipleSelection:NO];
64                 [openPanel setResolvesAliases:NO];
65                 [openPanel beginSheetForDirectory:[MVFileTransferController userPreferredDownloadFolder] file:nil types:nil modalForWindow:[[self viewForPreferenceNamed:nil] window] modalDelegate:self didEndSelector:@selector( saveDownloadsOpenPanelDidEnd:returnCode:contextInfo: ) contextInfo:NULL];
66         } else if( [sender tag] == 2 ) {
67                 [[NSUserDefaults standardUserDefaults] setBool:NO forKey:@"JVAskForTransferSaveLocation"];
68         } else {
69                 [[NSUserDefaults standardUserDefaults] setBool:YES forKey:@"JVAskForTransferSaveLocation"];
70         }
71 }
72
73 - (void) saveDownloadsOpenPanelDidEnd:(NSOpenPanel *) sheet returnCode:(int) returnCode contextInfo:(void *) contextInfo {
74         [sheet autorelease];
75         if( returnCode == NSOKButton ) {
76                 NSMenuItem *menuItem = [saveDownloads itemAtIndex:[saveDownloads indexOfItemWithTag:2]];
77                 NSImage *icon = [[NSWorkspace sharedWorkspace] iconForFile:[sheet directory]];
78                 [icon setScalesWhenResized:YES];
79                 [icon setSize:NSMakeSize( 16., 16. )];
80
81                 [menuItem setTitle:[[NSFileManager defaultManager] displayNameAtPath:[sheet directory]]];
82                 [menuItem setImage:icon];
83                 [menuItem setRepresentedObject:[sheet directory]];
84                 [saveDownloads selectItem:menuItem];
85
86                 [[NSUserDefaults standardUserDefaults] setBool:NO forKey:@"JVAskForTransferSaveLocation"];
87                 [MVFileTransferController setUserPreferredDownloadFolder:[sheet directory]];
88         } else {
89                 [saveDownloads selectItemAtIndex:[saveDownloads indexOfItemWithTag:1]];
90                 [[NSUserDefaults standardUserDefaults] setBool:YES forKey:@"JVAskForTransferSaveLocation"];
91         }
92 }
93 @end
Note: See TracBrowser for help on using the browser.