1 /******************************************************************************
2  * Copyright (c) 2005-2019 Transmission authors and contributors
3  *
4  * Permission is hereby granted, free of charge, to any person obtaining a
5  * copy of this software and associated documentation files (the "Software"),
6  * to deal in the Software without restriction, including without limitation
7  * the rights to use, copy, modify, merge, publish, distribute, sublicense,
8  * and/or sell copies of the Software, and to permit persons to whom the
9  * Software is furnished to do so, subject to the following conditions:
10  *
11  * The above copyright notice and this permission notice shall be included in
12  * all copies or substantial portions of the Software.
13  *
14  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
15  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
16  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
17  * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
18  * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
19  * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
20  * DEALINGS IN THE SOFTWARE.
21  *****************************************************************************/
22 
23 #import <Cocoa/Cocoa.h>
24 
25 #include <libtransmission/transmission.h>
26 
27 @class PortChecker;
28 
29 @interface PrefsController : NSWindowController <NSToolbarDelegate>
30 {
31     tr_session * fHandle;
32     NSUserDefaults * fDefaults;
33     BOOL fHasLoaded;
34 
35     IBOutlet NSView * fGeneralView, * fTransfersView, * fBandwidthView, * fPeersView, * fNetworkView, * fRemoteView, * fGroupsView;
36 
37     NSString * fInitialString;
38 
39     IBOutlet NSButton *fSystemPreferencesButton;
40     IBOutlet NSTextField * fCheckForUpdatesLabel;
41     IBOutlet NSButton * fCheckForUpdatesButton, * fCheckForUpdatesBetaButton;
42 
43     IBOutlet NSPopUpButton * fFolderPopUp, * fIncompleteFolderPopUp, * fImportFolderPopUp, * fDoneScriptPopUp;
44     IBOutlet NSButton * fShowMagnetAddWindowCheck;
45     IBOutlet NSTextField * fRatioStopField, * fIdleStopField, * fQueueDownloadField, * fQueueSeedField, * fStalledField;
46 
47     IBOutlet NSTextField * fUploadField, * fDownloadField,
48                         * fSpeedLimitUploadField, * fSpeedLimitDownloadField;
49     IBOutlet NSPopUpButton * fAutoSpeedDayTypePopUp;
50 
51     IBOutlet NSTextField * fPeersGlobalField, * fPeersTorrentField,
52                         * fBlocklistURLField, * fBlocklistMessageField, * fBlocklistDateField;
53     IBOutlet NSButton * fBlocklistButton;
54 
55     PortChecker * fPortChecker;
56     IBOutlet NSTextField * fPortField, * fPortStatusField;
57     IBOutlet NSButton * fNatCheck;
58     IBOutlet NSImageView * fPortStatusImage;
59     IBOutlet NSProgressIndicator * fPortStatusProgress;
60     NSTimer * fPortStatusTimer;
61     int fPeerPort, fNatStatus;
62 
63     IBOutlet NSTextField * fRPCPortField, * fRPCPasswordField;
64     IBOutlet NSTableView * fRPCWhitelistTable;
65     NSMutableArray * fRPCWhitelistArray;
66     IBOutlet NSSegmentedControl * fRPCAddRemoveControl;
67     NSString * fRPCPassword;
68 }
69 
70 - (id) initWithHandle: (tr_session *) handle;
71 
72 - (void) setAutoUpdateToBeta: (id) sender;
73 
74 - (void) setPort: (id) sender;
75 - (void) randomPort: (id) sender;
76 - (void) setRandomPortOnStart: (id) sender;
77 - (void) setNat: (id) sender;
78 - (void) updatePortStatus;
79 - (void) portCheckerDidFinishProbing: (PortChecker *) portChecker;
80 
81 - (NSArray *) sounds;
82 - (void) setSound: (id) sender;
83 
84 - (void) setUTP: (id) sender;
85 
86 - (void) setPeersGlobal: (id) sender;
87 - (void) setPeersTorrent: (id) sender;
88 
89 - (void) setPEX: (id) sender;
90 - (void) setDHT: (id) sender;
91 - (void) setLPD: (id) sender;
92 
93 - (void) setEncryptionMode: (id) sender;
94 
95 - (void) setBlocklistEnabled: (id) sender;
96 - (void) updateBlocklist: (id) sender;
97 - (void) setBlocklistAutoUpdate: (id) sender;
98 - (void) updateBlocklistFields;
99 - (void) updateBlocklistURLField;
100 - (void) updateBlocklistButton;
101 
102 - (void) setAutoStartDownloads: (id) sender;
103 
104 - (void) setBadge: (id) sender;
105 
106 - (IBAction) openNotificationSystemPrefs: (NSButton *) sender;
107 
108 - (void) resetWarnings: (id) sender;
109 
110 - (void) setDefaultForMagnets: (id) sender;
111 
112 - (void) setQueue: (id) sender;
113 - (void) setQueueNumber: (id) sender;
114 
115 - (void) setStalled: (id) sender;
116 - (void) setStalledMinutes: (id) sender;
117 
118 - (void) setDownloadLocation: (id) sender;
119 - (void) folderSheetShow: (id) sender;
120 - (void) incompleteFolderSheetShow: (id) sender;
121 - (void) setUseIncompleteFolder: (id) sender;
122 
123 - (void) setRenamePartialFiles: (id) sender;
124 
125 - (IBAction) setShowAddMagnetWindow: (id) sender;
126 - (void) updateShowAddMagnetWindowField;
127 
128 - (void) setDoneScriptEnabled: (id) sender;
129 - (void) doneScriptSheetShow: (id) sender;
130 
131 - (void) applyRatioSetting: (id) sender;
132 - (void) setRatioStop: (id) sender;
133 - (void) updateRatioStopField;
134 - (void) updateRatioStopFieldOld;
135 
136 - (void) applyIdleStopSetting: (id) sender;
137 - (void) setIdleStop: (id) sender;
138 - (void) updateLimitStopField;
139 
140 - (void) applySpeedSettings: (id) sender;
141 - (void) applyAltSpeedSettings;
142 
143 - (void) updateLimitFields;
144 - (void) setGlobalLimit: (id) sender;
145 
146 - (void) setSpeedLimit: (id) sender;
147 - (void) setAutoSpeedLimit: (id) sender;
148 - (void) setAutoSpeedLimitTime: (id) sender;
149 - (void) setAutoSpeedLimitDay: (id) sender;
150 + (NSInteger) dateToTimeSum: (NSDate *) date;
151 + (NSDate *) timeSumToDate: (NSInteger) sum;
152 
153 - (void) setAutoImport: (id) sender;
154 - (void) importFolderSheetShow: (id) sender;
155 
156 - (void) setAutoSize: (id) sender;
157 
158 - (void) setRPCEnabled: (id) sender;
159 - (void) linkWebUI: (id) sender;
160 - (void) setRPCAuthorize: (id) sender;
161 - (void) setRPCUsername: (id) sender;
162 - (void) setRPCPassword: (id) sender;
163 - (void) updateRPCPassword;
164 - (void) setRPCPort: (id) sender;
165 - (void) setRPCUseWhitelist: (id) sender;
166 - (void) setRPCWebUIDiscovery: (id) sender;
167 - (void) updateRPCWhitelist;
168 - (void) addRemoveRPCIP: (id) sender;
169 
170 - (void) helpForScript: (id) sender;
171 - (void) helpForPeers: (id) sender;
172 - (void) helpForNetwork: (id) sender;
173 - (void) helpForRemote: (id) sender;
174 
175 - (void) rpcUpdatePrefs;
176 
177 @end
178