From 1181e4e8f14a248922c3ca61fb7994826e04ac47 Mon Sep 17 00:00:00 2001 From: Mitchell Livingston Date: Mon, 20 Apr 2009 03:36:35 +0000 Subject: [PATCH] add ability to set transfer priority in the Mac ui --- NEWS | 1 + macosx/InfoWindowController.h | 4 +- macosx/InfoWindowController.m | 58 +++++++- macosx/TorrentTableView.h | 4 +- macosx/TorrentTableView.m | 44 +++++- macosx/en.lproj/InfoWindow.xib | 244 ++++++++++++++++++++++++++++++++- macosx/en.lproj/MainMenu.xib | 176 +++++++++++++++++++++++- 7 files changed, 515 insertions(+), 16 deletions(-) diff --git a/NEWS b/NEWS index 1d0d98cf8..e9ba16c57 100644 --- a/NEWS +++ b/NEWS @@ -4,6 +4,7 @@ NEWS file for Transmission - All Platforms + Random port, with optional randomization on startup + + Transfer prioritization + Option for transfers to specify if they are included in the global bandwidth limits - Mac + Requires Mac OS X 10.5 Leopard or newer diff --git a/macosx/InfoWindowController.h b/macosx/InfoWindowController.h index 2c82e661e..c0489be9e 100644 --- a/macosx/InfoWindowController.h +++ b/macosx/InfoWindowController.h @@ -70,7 +70,7 @@ IBOutlet FileOutlineController * fFileController; IBOutlet NSSearchField * fFileFilterField; - IBOutlet NSPopUpButton * fRatioPopUp; + IBOutlet NSPopUpButton * fPriorityPopUp, * fRatioPopUp; IBOutlet NSButton * fUploadLimitCheck, * fDownloadLimitCheck, * fGlobalLimitCheck; IBOutlet NSTextField * fUploadLimitField, * fDownloadLimitField, * fRatioLimitField, * fUploadLimitLabel, * fDownloadLimitLabel, * fPeersConnectLabel, @@ -110,6 +110,8 @@ - (void) setRatioSetting: (id) sender; - (void) setRatioLimit: (id) sender; +- (void) setPriority: (id) sender; + - (void) setPeersConnectLimit: (id) sender; @end diff --git a/macosx/InfoWindowController.m b/macosx/InfoWindowController.m index 0af760160..0b27b4f64 100644 --- a/macosx/InfoWindowController.m +++ b/macosx/InfoWindowController.m @@ -51,6 +51,10 @@ #define OPTION_POPUP_NO_LIMIT 1 #define OPTION_POPUP_LIMIT 2 +#define OPTION_POPUP_PRIORITY_HIGH 0 +#define OPTION_POPUP_PRIORITY_NORMAL 1 +#define OPTION_POPUP_PRIORITY_LOW 2 + #define INVALID -99 #define TRACKER_ADD_TAG 0 @@ -289,6 +293,9 @@ typedef enum [fGlobalLimitCheck setEnabled: NO]; [fGlobalLimitCheck setState: NSOffState]; + [fPriorityPopUp setEnabled: NO]; + [fPriorityPopUp selectItemAtIndex: -1]; + [fRatioPopUp setEnabled: NO]; [fRatioPopUp selectItemAtIndex: -1]; [fRatioLimitField setHidden: YES]; @@ -590,7 +597,7 @@ typedef enum NSInteger checkRatio = [torrent ratioSetting]; CGFloat ratioLimit = [torrent ratioLimit]; - while ((torrent = [enumerator nextObject]) && (checkRatio != INVALID || checkRatio != INVALID)) + while ((torrent = [enumerator nextObject]) && (checkRatio != INVALID || ratioLimit != INVALID)) { if (checkRatio != INVALID && checkRatio != [torrent ratioSetting]) checkRatio = INVALID; @@ -618,6 +625,30 @@ typedef enum else [fRatioLimitField setStringValue: @""]; + //get priority info + enumerator = [fTorrents objectEnumerator]; + torrent = [enumerator nextObject]; //first torrent + + NSInteger priority = [torrent priority]; + + while ((torrent = [enumerator nextObject]) && priority != INVALID) + { + if (priority != INVALID && priority != [torrent priority]) + priority = INVALID; + } + + //set priority view + if (priority == TR_PRI_HIGH) + index = OPTION_POPUP_PRIORITY_HIGH; + else if (priority == TR_PRI_NORMAL) + index = OPTION_POPUP_PRIORITY_NORMAL; + else if (priority == TR_PRI_LOW) + index = OPTION_POPUP_PRIORITY_LOW; + else + index = -1; + [fPriorityPopUp selectItemAtIndex: index]; + [fPriorityPopUp setEnabled: YES]; + //get peer info enumerator = [fTorrents objectEnumerator]; torrent = [enumerator nextObject]; //first torrent @@ -1258,6 +1289,30 @@ typedef enum [torrent setRatioLimit: limit]; } +- (void) setPriority: (id) sender +{ + tr_priority_t priority; + switch ([sender indexOfSelectedItem]) + { + case OPTION_POPUP_PRIORITY_HIGH: + priority = TR_PRI_HIGH; + break; + case OPTION_POPUP_PRIORITY_NORMAL: + priority = TR_PRI_NORMAL; + break; + case OPTION_POPUP_PRIORITY_LOW: + priority = TR_PRI_LOW; + break; + default: + return; + } + + for (Torrent * torrent in fTorrents) + [torrent setPriority: priority]; + + [[NSNotificationCenter defaultCenter] postNotificationName: @"UpdateUI" object: nil]; +} + - (void) setPeersConnectLimit: (id) sender { NSInteger limit = [sender intValue]; @@ -1266,7 +1321,6 @@ typedef enum [torrent setMaxPeerConnect: limit]; } - - (BOOL) control: (NSControl *) control textShouldBeginEditing: (NSText *) fieldEditor { [fInitialString release]; diff --git a/macosx/TorrentTableView.h b/macosx/TorrentTableView.h index 8fbdbe00f..a245be8e1 100644 --- a/macosx/TorrentTableView.h +++ b/macosx/TorrentTableView.h @@ -45,7 +45,7 @@ NSInteger fMouseControlRow, fMouseRevealRow, fMouseActionRow, fActionPushedRow; NSArray * fSelectedValues; - IBOutlet NSMenu * fActionMenu, * fUploadMenu, * fDownloadMenu, * fRatioMenu; + IBOutlet NSMenu * fActionMenu, * fUploadMenu, * fDownloadMenu, * fRatioMenu, * fPriorityMenu; IBOutlet NSMenuItem * fGlobalLimitItem; Torrent * fMenuTorrent; @@ -82,6 +82,8 @@ - (void) setQuickRatioMode: (id) sender; - (void) setQuickRatio: (id) sender; +- (void) setPriority: (id) sender; + - (void) checkFile: (id) sender; - (void) moveDataFile: (id) sender; diff --git a/macosx/TorrentTableView.m b/macosx/TorrentTableView.m index dafd85682..638eff99c 100644 --- a/macosx/TorrentTableView.m +++ b/macosx/TorrentTableView.m @@ -35,6 +35,10 @@ #define ACTION_MENU_UNLIMITED_TAG 102 #define ACTION_MENU_LIMIT_TAG 103 +#define ACTION_MENU_PRIORITY_HIGH_TAG 101 +#define ACTION_MENU_PRIORITY_NORMAL_TAG 102 +#define ACTION_MENU_PRIORITY_LOW_TAG 103 + #define GROUP_SPEED_IMAGE_COLUMN_WIDTH 8.0f #define GROUP_RATIO_IMAGE_COLUMN_WIDTH 10.0f @@ -546,11 +550,11 @@ - (void) displayTorrentMenuForEvent: (NSEvent *) event { - NSInteger row = [self rowAtPoint: [self convertPoint: [event locationInWindow] fromView: nil]]; + const NSInteger row = [self rowAtPoint: [self convertPoint: [event locationInWindow] fromView: nil]]; if (row < 0) return; - NSInteger numberOfNonFileItems = [fActionMenu numberOfItems]; + const NSInteger numberOfNonFileItems = [fActionMenu numberOfItems]; //update file action menu fMenuTorrent = [[self itemAtRow: row] retain]; @@ -645,6 +649,19 @@ item = [menu itemWithTag: ACTION_MENU_GLOBAL_TAG]; [item setState: mode == TR_RATIOLIMIT_GLOBAL ? NSOnState : NSOffState]; } + else if (menu == fPriorityMenu) + { + const tr_priority_t priority = [fMenuTorrent priority]; + + NSMenuItem * item = [menu itemWithTag: ACTION_MENU_PRIORITY_HIGH_TAG]; + [item setState: priority == TR_PRI_HIGH ? NSOnState : NSOffState]; + + item = [menu itemWithTag: ACTION_MENU_PRIORITY_NORMAL_TAG]; + [item setState: priority == TR_PRI_NORMAL ? NSOnState : NSOffState]; + + item = [menu itemWithTag: ACTION_MENU_PRIORITY_LOW_TAG]; + [item setState: priority == TR_PRI_LOW ? NSOnState : NSOffState]; + } else //assume the menu is part of the file list { if ([menu numberOfItems] > 0) @@ -776,6 +793,29 @@ [[NSNotificationCenter defaultCenter] postNotificationName: @"UpdateOptions" object: nil]; } +- (void) setPriority: (id) sender +{ + tr_priority_t priority; + switch ([sender tag]) + { + case ACTION_MENU_PRIORITY_HIGH_TAG: + priority = TR_PRI_HIGH; + break; + case ACTION_MENU_PRIORITY_NORMAL_TAG: + priority = TR_PRI_NORMAL; + break; + case ACTION_MENU_PRIORITY_LOW_TAG: + priority = TR_PRI_LOW; + break; + default: + return; + } + + [fMenuTorrent setPriority: priority]; + + [[NSNotificationCenter defaultCenter] postNotificationName: @"UpdateUI" object: nil]; +} + - (void) checkFile: (id) sender { NSIndexSet * indexSet = [(FileListNode *)[sender representedObject] indexes]; diff --git a/macosx/en.lproj/InfoWindow.xib b/macosx/en.lproj/InfoWindow.xib index 338f7179f..2b68deb34 100644 --- a/macosx/en.lproj/InfoWindow.xib +++ b/macosx/en.lproj/InfoWindow.xib @@ -4670,7 +4670,7 @@ zijOSc5pzorOqs66ztvO+88czzzPXc99z57Pvs/fz+/QANAg0EHQYdCC0KLQw9Dj0PPRFNE00VXRddGW 266 - {{9, 159}, {278, 14}} + {{9, 156}, {278, 17}} YES @@ -4683,6 +4683,22 @@ zijOSc5pzorOqs66ztvO+88czzzPXc99z57Pvs/fz+/QANAg0EHQYdCC0KLQw9Dj0PPRFNE00VXRddGW + + + 266 + {{9, 194}, {278, 17}} + + YES + + 67239424 + 272629760 + Priority + + + + + + 268 @@ -4935,6 +4951,22 @@ zijOSc5pzorOqs66ztvO+88czzzPXc99z57Pvs/fz+/QANAg0EHQYdCC0KLQw9Dj0PPRFNE00VXRddGW + + + 268 + {{9, 179}, {123, 17}} + + YES + + 67239424 + 272629760 + Total transfer priority: + + + + + + 266 @@ -5114,8 +5146,89 @@ zijOSc5pzorOqs66ztvO+88czzzPXc99z57Pvs/fz+/QANAg0EHQYdCC0KLQw9Dj0PPRFNE00VXRddGW 25 + + + 268 + {{134, 177}, {101, 22}} + + YES + + -2076049856 + 133120 + + + 109068543 + 129 + + NSImage + PriorityHigh + + + + 400 + 75 + + + Normal + + 1048576 + 2147483647 + 1 + + NSImage + PriorityNormal + + + + _popUpItemAction: + 1 + + + YES + + OtherViews + + YES + + + High + + 1048576 + 2147483647 + + + + _popUpItemAction: + + + + + + Low + + 1048576 + 2147483647 + + NSImage + PriorityLow + + + + _popUpItemAction: + 2 + + + + + 1 + 1 + YES + YES + 2 + + - {351, 178} + {351, 216} NSView @@ -5897,6 +6010,22 @@ zijOSc5pzorOqs66ztvO+88czzzPXc99z57Pvs/fz+/QANAg0EHQYdCC0KLQw9Dj0PPRFNE00VXRddGW 1808 + + + setPriority: + + + + 1819 + + + + fPriorityPopUp + + + + 1820 + @@ -6930,6 +7059,9 @@ zijOSc5pzorOqs66ztvO+88czzzPXc99z57Pvs/fz+/QANAg0EHQYdCC0KLQw9Dj0PPRFNE00VXRddGW + + + Options @@ -8160,6 +8292,78 @@ zijOSc5pzorOqs66ztvO+88czzzPXc99z57Pvs/fz+/QANAg0EHQYdCC0KLQw9Dj0PPRFNE00VXRddGW + + 1809 + + + YES + + + + + + 1810 + + + + + 1811 + + + YES + + + + + + 1812 + + + + + 1813 + + + YES + + + + + + 1814 + + + YES + + + + + + 1815 + + + YES + + + + + + + + 1816 + + + + + 1817 + + + + + 1818 + + + @@ -8566,6 +8770,19 @@ zijOSc5pzorOqs66ztvO+88czzzPXc99z57Pvs/fz+/QANAg0EHQYdCC0KLQw9Dj0PPRFNE00VXRddGW 1799.IBPluginDependency 1805.IBPluginDependency 1806.IBPluginDependency + 1809.IBPluginDependency + 1809.ImportedFromIB2 + 1810.IBPluginDependency + 1811.IBPluginDependency + 1811.ImportedFromIB2 + 1812.IBPluginDependency + 1813.IBPluginDependency + 1814.IBPluginDependency + 1815.IBEditorWindowLastContentRect + 1815.IBPluginDependency + 1816.IBPluginDependency + 1817.IBPluginDependency + 1818.IBPluginDependency 28.IBPluginDependency 28.ImportedFromIB2 29.IBPluginDependency @@ -8804,7 +9021,7 @@ zijOSc5pzorOqs66ztvO+88czzzPXc99z57Pvs/fz+/QANAg0EHQYdCC0KLQw9Dj0PPRFNE00VXRddGW com.apple.InterfaceBuilder.CocoaPlugin - {{256, 652}, {351, 178}} + {{256, 614}, {351, 216}} com.apple.InterfaceBuilder.CocoaPlugin {{519, 803}, {351, 160}} @@ -8826,7 +9043,7 @@ zijOSc5pzorOqs66ztvO+88czzzPXc99z57Pvs/fz+/QANAg0EHQYdCC0KLQw9Dj0PPRFNE00VXRddGW com.apple.InterfaceBuilder.CocoaPlugin - {{78, 855}, {138, 54}} + {{334, 634}, {138, 54}} com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin @@ -9073,6 +9290,19 @@ zijOSc5pzorOqs66ztvO+88czzzPXc99z57Pvs/fz+/QANAg0EHQYdCC0KLQw9Dj0PPRFNE00VXRddGW com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + {{379, 759}, {102, 54}} + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin {{0, 926}, {350, 75}} {{0, 926}, {350, 75}} @@ -9193,7 +9423,7 @@ zijOSc5pzorOqs66ztvO+88czzzPXc99z57Pvs/fz+/QANAg0EHQYdCC0KLQw9Dj0PPRFNE00VXRddGW - 1808 + 1820 @@ -9296,6 +9526,7 @@ zijOSc5pzorOqs66ztvO+88czzzPXc99z57Pvs/fz+/QANAg0EHQYdCC0KLQw9Dj0PPRFNE00VXRddGW setFileFilterText: setPeersConnectLimit: setPiecesView: + setPriority: setRatioLimit: setRatioSetting: setSpeedLimit: @@ -9317,6 +9548,7 @@ zijOSc5pzorOqs66ztvO+88czzzPXc99z57Pvs/fz+/QANAg0EHQYdCC0KLQw9Dj0PPRFNE00VXRddGW id id id + id @@ -9364,6 +9596,7 @@ zijOSc5pzorOqs66ztvO+88czzzPXc99z57Pvs/fz+/QANAg0EHQYdCC0KLQw9Dj0PPRFNE00VXRddGW fPiecesControl fPiecesField fPiecesView + fPriorityPopUp fProgressField fRatioField fRatioLimitField @@ -9434,6 +9667,7 @@ zijOSc5pzorOqs66ztvO+88czzzPXc99z57Pvs/fz+/QANAg0EHQYdCC0KLQw9Dj0PPRFNE00VXRddGW NSSegmentedControl NSTextField PiecesView + NSPopUpButton NSTextField NSTextField NSTextField diff --git a/macosx/en.lproj/MainMenu.xib b/macosx/en.lproj/MainMenu.xib index 5ac8ab79d..e355e728e 100644 --- a/macosx/en.lproj/MainMenu.xib +++ b/macosx/en.lproj/MainMenu.xib @@ -8,9 +8,8 @@ 353.00 YES + - - YES @@ -4271,6 +4270,71 @@ ARcABAAAAAEAAAACARwAAwAAAAEAAQAAAVIAAwAAAAEAAQAAAVMAAwAAAAIAAQABAAAAAA Menu YES + + + Priority + + 2147483647 + + + submenuAction: + + Priority + + YES + + + High + + 2147483647 + + NSImage + PriorityHigh + + + + 101 + + + + Normal + + 2147483647 + + NSImage + PriorityNormal + + + + 102 + + + + Low + + 2147483647 + + NSImage + PriorityLow + + + + 103 + + + + + + + YES + YES + + + 1048576 + 2147483647 + + + Download Bandwidth Limit @@ -6149,6 +6213,46 @@ ARcABAAAAAEAAAACARwAAwAAAAEAAQAAAVIAAwAAAAEAAQAAAVMAAwAAAAIAAQABAAAAAA 3193 + + + fPriorityMenu + + + + 3201 + + + + setPriority: + + + + 3202 + + + + setPriority: + + + + 3203 + + + + setPriority: + + + + 3204 + + + + delegate + + + + 3205 + @@ -7582,6 +7686,8 @@ ARcABAAAAAEAAAACARwAAwAAAAEAAQAAAVIAAwAAAAEAAQAAAVMAAwAAAAIAAQABAAAAAA + + TorrentActionMenu @@ -8168,6 +8274,46 @@ ARcABAAAAAEAAAACARwAAwAAAAEAAQAAAVIAAwAAAAEAAQAAAVMAAwAAAAIAAQABAAAAAA + + 3195 + + + + + 3196 + + + YES + + + + + + 3197 + + + YES + + + + + + + + 3198 + + + + + 3199 + + + + + 3200 + + + @@ -8724,6 +8870,14 @@ ARcABAAAAAEAAAACARwAAwAAAAEAAQAAAVIAAwAAAAEAAQAAAVMAAwAAAAIAAQABAAAAAA 3172.IBPluginDependency 3172.ImportedFromIB2 3190.IBPluginDependency + 3195.IBPluginDependency + 3195.ImportedFromIB2 + 3196.IBPluginDependency + 3197.IBEditorWindowLastContentRect + 3197.IBPluginDependency + 3198.IBPluginDependency + 3199.IBPluginDependency + 3200.IBPluginDependency 418.IBPluginDependency 418.ImportedFromIB2 456.IBEditorWindowLastContentRect @@ -9079,13 +9233,13 @@ ARcABAAAAAEAAAACARwAAwAAAAEAAQAAAVIAAwAAAAEAAQAAAVMAAwAAAAIAAQABAAAAAA com.apple.InterfaceBuilder.CocoaPlugin - {{0, 862}, {313, 133}} + {{9, 791}, {313, 163}} com.apple.InterfaceBuilder.CocoaPlugin {{381, 469}, {214, 113}} com.apple.InterfaceBuilder.CocoaPlugin - {{313, 942}, {135, 53}} + {{322, 871}, {135, 53}} com.apple.InterfaceBuilder.CocoaPlugin {{595, 509}, {135, 73}} @@ -9330,6 +9484,14 @@ ARcABAAAAAEAAAACARwAAwAAAAEAAQAAAVIAAwAAAAEAAQAAAVMAAwAAAAIAAQABAAAAAA com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + {{322, 891}, {105, 63}} + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + {{529, 336}, {277, 273}} com.apple.InterfaceBuilder.CocoaPlugin @@ -9401,7 +9563,7 @@ ARcABAAAAAEAAAACARwAAwAAAAEAAQAAAVIAAwAAAAEAAQAAAVMAAwAAAAIAAQABAAAAAA - 3193 + 3205 @@ -9795,6 +9957,7 @@ ARcABAAAAAEAAAACARwAAwAAAAEAAQAAAVIAAwAAAAEAAQAAAVMAAwAAAAIAAQABAAAAAA moveDataFile: paste: setGlobalLimit: + setPriority: setQuickLimit: setQuickLimitMode: setQuickRatio: @@ -9810,6 +9973,7 @@ ARcABAAAAAEAAAACARwAAwAAAAEAAQAAAVIAAwAAAAEAAQAAAVMAAwAAAAIAAQABAAAAAA id id id + id @@ -9822,6 +9986,7 @@ ARcABAAAAAEAAAACARwAAwAAAAEAAQAAAVIAAwAAAAEAAQAAAVMAAwAAAAIAAQABAAAAAA fController fDownloadMenu fGlobalLimitItem + fPriorityMenu fRatioMenu fUploadMenu @@ -9835,6 +10000,7 @@ ARcABAAAAAEAAAACARwAAwAAAAEAAQAAAVIAAwAAAAEAAQAAAVMAAwAAAAIAAQABAAAAAA NSMenuItem NSMenu NSMenu + NSMenu -- 2.40.0