1 <div id=
"BehaviorTab" class=
"PrefTab">
2 <fieldset class=
"settings">
3 <legend>QBT_TR(Language)QBT_TR[CONTEXT=OptionsDialog]
</legend>
4 <label for=
"locale_select">QBT_TR(User Interface Language:)QBT_TR[CONTEXT=OptionsDialog]
</label>
5 <select id=
"locale_select">
10 <fieldset class=
"settings">
12 <input type=
"checkbox" id=
"filelog_checkbox" onclick=
"qBittorrent.Preferences.updateFileLogEnabled();" />
13 <label for=
"filelog_checkbox">QBT_TR(Log file)QBT_TR[CONTEXT=OptionsDialog]
</label>
16 <label for=
"filelog_save_path_input">QBT_TR(Save path:)QBT_TR[CONTEXT=OptionsDialog]
</label>
17 <input type=
"text" id=
"filelog_save_path_input" />
21 <td><input type=
"checkbox" id=
"filelog_backup_checkbox" onclick=
"qBittorrent.Preferences.updateFileLogBackupEnabled();" /></td>
22 <td><label for=
"filelog_backup_checkbox">QBT_TR(Backup the log file after:)QBT_TR[CONTEXT=OptionsDialog]
</label></td>
23 <td><input id=
"filelog_max_size_input" type=
"number" min=
"1" max=
"1024000" value=
"65" onchange=
"qBittorrent.Preferences.numberInputLimiter(this);" />QBT_TR(KiB)QBT_TR[CONTEXT=OptionsDialog]
</td>
26 <td><input type=
"checkbox" id=
"filelog_delete_old_checkbox" onclick=
"qBittorrent.Preferences.updateFileLogDeleteEnabled();" /></td>
27 <td><label for=
"filelog_delete_old_checkbox">QBT_TR(Delete backup logs older than:)QBT_TR[CONTEXT=OptionsDialog]
</label></td>
29 <input type=
"number" min=
"1" max=
"365" value=
"6" id=
"filelog_age_input" onchange=
"qBittorrent.Preferences.numberInputLimiter(this);" />
30 <select id=
"filelog_age_type_select">
31 <option value=
"0">QBT_TR(days)QBT_TR[CONTEXT=OptionsDialog]
</option>
32 <option value=
"1" selected
>QBT_TR(months)QBT_TR[CONTEXT=OptionsDialog]
</option>
33 <option value=
"2">QBT_TR(years)QBT_TR[CONTEXT=OptionsDialog]
</option>
41 <input type=
"checkbox" id=
"performanceWarning" />
42 <label for=
"performanceWarning">QBT_TR(Log performance warnings)QBT_TR[CONTEXT=OptionsDialog]
</label>
46 <div id=
"DownloadsTab" class=
"PrefTab invisible">
47 <fieldset class=
"settings">
48 <legend>QBT_TR(When adding a torrent)QBT_TR[CONTEXT=OptionsDialog]
</legend>
50 <label for=
"contentlayout_select">QBT_TR(Torrent content layout:)QBT_TR[CONTEXT=OptionsDialog]
</label>
51 <select id=
"contentlayout_select">
52 <option value=
"Original">QBT_TR(Original)QBT_TR[CONTEXT=OptionsDialog]
</option>
53 <option value=
"Subfolder">QBT_TR(Create subfolder)QBT_TR[CONTEXT=OptionsDialog]
</option>
54 <option value=
"NoSubfolder">QBT_TR(Don't create subfolder)QBT_TR[CONTEXT=OptionsDialog]
</option>
58 <input type=
"checkbox" id=
"addToTopOfQueueCheckbox" />
59 <label for=
"addToTopOfQueueCheckbox">QBT_TR(Add to top of queue)QBT_TR[CONTEXT=OptionsDialog]
</label>
62 <input type=
"checkbox" id=
"dontstartdownloads_checkbox" />
63 <label for=
"dontstartdownloads_checkbox">QBT_TR(Do not start the download automatically)QBT_TR[CONTEXT=OptionsDialog]
</label>
66 <label for=
"stopConditionSelect">QBT_TR(Torrent stop condition:)QBT_TR[CONTEXT=OptionsDialog]
</label>
67 <select id=
"stopConditionSelect">
68 <option value=
"None">QBT_TR(None)QBT_TR[CONTEXT=OptionsDialog]
</option>
69 <option value=
"MetadataReceived">QBT_TR(Metadata received)QBT_TR[CONTEXT=OptionsDialog]
</option>
70 <option value=
"FilesChecked">QBT_TR(Files checked)QBT_TR[CONTEXT=OptionsDialog]
</option>
74 <input type=
"checkbox" id=
"deletetorrentfileafter_checkbox" />
75 <label for=
"deletetorrentfileafter_checkbox">QBT_TR(Delete .torrent files afterwards)QBT_TR[CONTEXT=OptionsDialog]
</label>
80 <input type=
"checkbox" id=
"preallocateall_checkbox" />
81 <label for=
"preallocateall_checkbox">QBT_TR(Pre-allocate disk space for all files)QBT_TR[CONTEXT=OptionsDialog]
</label>
84 <span id=
"appendexttr">
85 <input type=
"checkbox" id=
"appendext_checkbox" />
86 <label for=
"appendext_checkbox">QBT_TR(Append .!qB extension to incomplete files)QBT_TR[CONTEXT=OptionsDialog]
</label>
90 <span id=
"unwantedfoldertr">
91 <input type=
"checkbox" id=
"unwantedfolder_checkbox" />
92 <label for=
"unwantedfolder_checkbox">QBT_TR(Keep unselected files in
".unwanted" folder)QBT_TR[CONTEXT=OptionsDialog]
</label>
96 <fieldset class=
"settings">
97 <legend>QBT_TR(Saving Management)QBT_TR[CONTEXT=HttpServer]
</legend>
101 <label>QBT_TR(Default Torrent Management Mode:)QBT_TR[CONTEXT=OptionsDialog]
</label>
104 <select id=
"default_tmm_combobox">
105 <option value=
"false" selected
>QBT_TR(Manual)QBT_TR[CONTEXT=OptionsDialog]
</option>
106 <option value=
"true">QBT_TR(Automatic)QBT_TR[CONTEXT=OptionsDialog]
</option>
112 <label>QBT_TR(When Torrent Category changed:)QBT_TR[CONTEXT=OptionsDialog]
</label>
115 <select id=
"torrent_changed_tmm_combobox">
116 <option value=
"true">QBT_TR(Relocate torrent)QBT_TR[CONTEXT=OptionsDialog]
</option>
117 <option value=
"false" selected
>QBT_TR(Switch torrent to Manual Mode)QBT_TR[CONTEXT=OptionsDialog]
</option>
123 <label>QBT_TR(When Default Save Path changed:)QBT_TR[CONTEXT=OptionsDialog]
</label>
126 <select id=
"save_path_changed_tmm_combobox">
127 <option value=
"true">QBT_TR(Relocate affected torrents)QBT_TR[CONTEXT=OptionsDialog]
</option>
128 <option value=
"false" selected
>QBT_TR(Switch affected torrents to Manual Mode)QBT_TR[CONTEXT=OptionsDialog]
</option>
134 <label>QBT_TR(When Category Save Path changed:)QBT_TR[CONTEXT=OptionsDialog]
</label>
137 <select id=
"category_changed_tmm_combobox">
138 <option value=
"true">QBT_TR(Relocate affected torrents)QBT_TR[CONTEXT=OptionsDialog]
</option>
139 <option value=
"false" selected
>QBT_TR(Switch affected torrents to Manual Mode)QBT_TR[CONTEXT=OptionsDialog]
</option>
144 <div class=
"formRow">
145 <input type=
"checkbox" id=
"use_subcategories_checkbox" />
146 <label for=
"use_subcategories_checkbox">QBT_TR(Use Subcategories)QBT_TR[CONTEXT=OptionsDialog]
</label>
151 <label for=
"savepath_text">QBT_TR(Default Save Path:)QBT_TR[CONTEXT=OptionsDialog]
</label>
154 <input type=
"text" id=
"savepath_text" autocorrect=
"off" autocapitalize=
"none" />
159 <input type=
"checkbox" id=
"temppath_checkbox" onclick=
"qBittorrent.Preferences.updateTempDirEnabled();" />
160 <label for=
"temppath_checkbox">QBT_TR(Keep incomplete torrents in:)QBT_TR[CONTEXT=OptionsDialog]
</label>
163 <input type=
"text" id=
"temppath_text" autocorrect=
"off" autocapitalize=
"none" />
168 <input type=
"checkbox" id=
"exportdir_checkbox" onclick=
"qBittorrent.Preferences.updateExportDirEnabled();" />
169 <label for=
"exportdir_checkbox">QBT_TR(Copy .torrent files to:)QBT_TR[CONTEXT=OptionsDialog]
</label>
172 <input type=
"text" id=
"exportdir_text" autocorrect=
"off" autocapitalize=
"none" />
177 <input type=
"checkbox" id=
"exportdirfin_checkbox" onclick=
"qBittorrent.Preferences.updateExportDirFinEnabled();" />
178 <label for=
"exportdirfin_checkbox">QBT_TR(Copy .torrent files for finished downloads to:)QBT_TR[CONTEXT=OptionsDialog]
</label>
181 <input type=
"text" id=
"exportdirfin_text" autocorrect=
"off" autocapitalize=
"none" />
187 <fieldset class=
"settings">
188 <legend>QBT_TR(Automatically add torrents from:)QBT_TR[CONTEXT=OptionsDialog]
</legend>
189 <table id=
"watched_folders_tab" style=
"border: 1px solid black;">
192 <th>QBT_TR(Monitored Folder)QBT_TR[CONTEXT=ScanFoldersModel]
</th>
193 <th>QBT_TR(Override Save Location)QBT_TR[CONTEXT=ScanFoldersModel]
</th>
200 <fieldset class=
"settings">
202 <input type=
"checkbox" id=
"excludedFileNamesCheckbox" onclick=
"qBittorrent.Preferences.updateExcludedFileNamesEnabled();" />
203 <label for=
"excludedFileNamesCheckbox">QBT_TR(Excluded file names)QBT_TR[CONTEXT=OptionsDialog]
</label>
205 <textarea id=
"excludedFileNamesTextarea" rows=
"6" cols=
"70"></textarea>
208 <fieldset class=
"settings">
210 <input type=
"checkbox" id=
"mail_notification_checkbox" onclick=
"qBittorrent.Preferences.updateMailNotification();" />
211 <label for=
"mail_notification_checkbox">QBT_TR(Email notification upon download completion)QBT_TR[CONTEXT=OptionsDialog]
</label>
216 <label for=
"src_email_txt">QBT_TR(From:)QBT_TR[CONTEXT=OptionsDialog]
</label>
219 <input type=
"text" id=
"src_email_txt" />
224 <label for=
"dest_email_txt">QBT_TR(To:)QBT_TR[CONTEXT=OptionsDialog]
</label>
227 <input type=
"text" id=
"dest_email_txt" />
232 <label for=
"smtp_server_txt">QBT_TR(SMTP server:)QBT_TR[CONTEXT=OptionsDialog]
</label>
235 <input type=
"text" id=
"smtp_server_txt" />
239 <div class=
"formRow">
240 <input type=
"checkbox" id=
"mail_ssl_checkbox" /><label for=
"mail_ssl_checkbox">QBT_TR(This server requires a secure connection (SSL))QBT_TR[CONTEXT=OptionsDialog]
</label>
242 <fieldset class=
"settings">
244 <input type=
"checkbox" id=
"mail_auth_checkbox" onclick=
"qBittorrent.Preferences.updateMailAuthSettings();" />
245 <label for=
"mail_auth_checkbox">QBT_TR(Authentication)QBT_TR[CONTEXT=OptionsDialog]
</label>
250 <label for=
"mail_username_text">QBT_TR(Username:)QBT_TR[CONTEXT=OptionsDialog]
</label>
253 <input type=
"text" id=
"mail_username_text" />
258 <label for=
"mail_password_text">QBT_TR(Password:)QBT_TR[CONTEXT=OptionsDialog]
</label>
261 <input type=
"password" id=
"mail_password_text" />
268 <fieldset class=
"settings">
270 QBT_TR(Run external program)QBT_TR[CONTEXT=OptionsDialog]
272 <div class=
"formRow">
273 <input type=
"checkbox" id=
"autorunOnTorrentAddedCheckbox" onclick=
"qBittorrent.Preferences.updateAutoRunOnTorrentAdded();" />
274 <label for=
"autorunOnTorrentAddedCheckbox">QBT_TR(Run external program on torrent added)QBT_TR[CONTEXT=OptionsDialog]
</label>
275 <input type=
"text" id=
"autorunOnTorrentAddedProgram" style=
"width: 400px;" />
277 <div class=
"formRow">
278 <input type=
"checkbox" id=
"autorun_checkbox" onclick=
"qBittorrent.Preferences.updateAutoRun();" />
279 <label for=
"autorun_checkbox">QBT_TR(Run external program on torrent finished)QBT_TR[CONTEXT=OptionsDialog]
</label>
280 <input type=
"text" id=
"autorunProg_txt" style=
"width: 400px;" />
282 <div style=
"font-style: italic;">QBT_TR(Supported parameters (case sensitive):)QBT_TR[CONTEXT=OptionsDialog]
284 <li>QBT_TR(%N: Torrent name)QBT_TR[CONTEXT=OptionsDialog]
</li>
285 <li>QBT_TR(%L: Category)QBT_TR[CONTEXT=OptionsDialog]
</li>
286 <li>QBT_TR(%G: Tags (separated by comma))QBT_TR[CONTEXT=OptionsDialog]
</li>
287 <li>QBT_TR(%F: Content path (same as root path for multifile torrent))QBT_TR[CONTEXT=OptionsDialog]
</li>
288 <li>QBT_TR(%R: Root path (first torrent subdirectory path))QBT_TR[CONTEXT=OptionsDialog]
</li>
289 <li>QBT_TR(%D: Save path)QBT_TR[CONTEXT=OptionsDialog]
</li>
290 <li>QBT_TR(%C: Number of files)QBT_TR[CONTEXT=OptionsDialog]
</li>
291 <li>QBT_TR(%Z: Torrent size (bytes))QBT_TR[CONTEXT=OptionsDialog]
</li>
292 <li>QBT_TR(%T: Current tracker)QBT_TR[CONTEXT=OptionsDialog]
</li>
293 <li>QBT_TR(%I: Info hash v1)QBT_TR[CONTEXT=OptionsDialog]
</li>
294 <li>QBT_TR(%J: Info hash v2)QBT_TR[CONTEXT=OptionsDialog]
</li>
295 <li>QBT_TR(%K: Torrent ID)QBT_TR[CONTEXT=OptionsDialog]
</li>
297 QBT_TR(Tip: Encapsulate parameter with quotation marks to avoid text being cut off at whitespace (e.g.,
"%N"))QBT_TR[CONTEXT=OptionsDialog]
302 <div id=
"ConnectionTab" class=
"PrefTab invisible">
303 <div class=
"formRow">
304 <label>QBT_TR(Peer connection protocol:)QBT_TR[CONTEXT=OptionsDialog]
</label>
305 <select id=
"enable_protocol_combobox">
306 <option value=
"0" selected
>QBT_TR(TCP and μTP)QBT_TR[CONTEXT=OptionsDialog]
</option>
307 <option value=
"1">TCP
</option>
308 <option value=
"2">μTP
</option>
311 <fieldset class=
"settings">
312 <legend>QBT_TR(Listening Port)QBT_TR[CONTEXT=OptionsDialog]
</legend>
313 <div class=
"formRow">
314 <label for=
"port_value">QBT_TR(Port used for incoming connections:)QBT_TR[CONTEXT=OptionsDialog]
</label>
315 <input type=
"text" id=
"port_value" style=
"width: 4em;" title=
"QBT_TR(Set to 0 to let your system pick an unused port)QBT_TR[CONTEXT=OptionsDialog]" />
316 <button type=
"button" style=
"margin-left: 1em;" onclick=
"qBittorrent.Preferences.generateRandomPort();">QBT_TR(Random)QBT_TR[CONTEXT=OptionsDialog]
</button>
318 <div class=
"formRow">
319 <input type=
"checkbox" id=
"upnp_checkbox" />
320 <label for=
"upnp_checkbox">QBT_TR(Use UPnP / NAT-PMP port forwarding from my router)QBT_TR[CONTEXT=OptionsDialog]
</label>
324 <fieldset class=
"settings">
325 <legend>QBT_TR(Connections Limits)QBT_TR[CONTEXT=OptionsDialog]
</legend>
329 <input type=
"checkbox" id=
"max_connec_checkbox" onclick=
"qBittorrent.Preferences.updateMaxConnecEnabled();" />
330 <label for=
"max_connec_checkbox">QBT_TR(Global maximum number of connections:)QBT_TR[CONTEXT=OptionsDialog]
</label>
332 <td><input type=
"text" id=
"max_connec_value" style=
"width: 4em;" /></td>
336 <input type=
"checkbox" id=
"max_connec_per_torrent_checkbox" onclick=
"qBittorrent.Preferences.updateMaxConnecPerTorrentEnabled();" />
337 <label for=
"max_connec_per_torrent_checkbox">QBT_TR(Maximum number of connections per torrent:)QBT_TR[CONTEXT=OptionsDialog]
</label>
339 <td><input type=
"text" id=
"max_connec_per_torrent_value" style=
"width: 4em;" /></td>
343 <input type=
"checkbox" id=
"max_uploads_checkbox" onclick=
"qBittorrent.Preferences.updateMaxUploadsEnabled();" />
344 <label for=
"max_uploads_checkbox">QBT_TR(Global maximum number of upload slots:)QBT_TR[CONTEXT=OptionsDialog]
</label>
346 <td><input type=
"text" id=
"max_uploads_value" style=
"width: 4em;" /></td>
350 <input type=
"checkbox" id=
"max_uploads_per_torrent_checkbox" onclick=
"qBittorrent.Preferences.updateMaxUploadsPerTorrentEnabled();" />
351 <label for=
"max_uploads_per_torrent_checkbox">QBT_TR(Maximum number of upload slots per torrent:)QBT_TR[CONTEXT=OptionsDialog]
</label>
353 <td><input type=
"text" id=
"max_uploads_per_torrent_value" style=
"width: 4em;" /></td>
358 <fieldset class=
"settings">
360 <input type=
"checkbox" id=
"i2pEnabledCheckbox" onclick=
"qBittorrent.Preferences.updateI2PSettingsEnabled();" />
361 <label for=
"i2pEnabledCheckbox">QBT_TR(I2P (Experimental) (requires libtorrent
>=
2.0))QBT_TR[CONTEXT=OptionsDialog]
</label>
366 <label for=
"i2pAddress">QBT_TR(Host:)QBT_TR[CONTEXT=OptionsDialog]
</label>
369 <input type=
"text" id=
"i2pAddress" />
372 <label for=
"i2pPort">QBT_TR(Port:)QBT_TR[CONTEXT=OptionsDialog]
</label>
375 <input type=
"number" id=
"i2pPort" min=
"0" max=
"65535" onchange=
"qBittorrent.Preferences.numberInputLimiter(this);" style=
"width: 5em;" />
379 <div class=
"formRow">
380 <input type=
"checkbox" id=
"i2pMixedMode" title=
"QBT_TR(If "mixed mode" is enabled, I2P torrents are allowed to also get peers from other sources than the tracker, and connect to regular IPs, not providing any anonymization. This may be useful if the user is not interested in the anonymization of I2P, but still wants to be able to connect to I2P peers.)QBT_TR[CONTEXT=OptionsDialog]" />
381 <label for=
"i2pMixedMode">QBT_TR(Mixed mode)QBT_TR[CONTEXT=OptionsDialog]
</label>
385 <fieldset class=
"settings">
386 <legend>QBT_TR(Proxy Server)QBT_TR[CONTEXT=OptionsDialog]
</legend>
390 <label for=
"peer_proxy_type_select">QBT_TR(Type:)QBT_TR[CONTEXT=OptionsDialog]
</label>
393 <select id=
"peer_proxy_type_select" onchange=
"qBittorrent.Preferences.updatePeerProxySettings();">
394 <option value=
"None">QBT_TR((None))QBT_TR[CONTEXT=OptionsDialog]
</option>
395 <option value=
"SOCKS4">QBT_TR(SOCKS4)QBT_TR[CONTEXT=OptionsDialog]
</option>
396 <option value=
"SOCKS5">QBT_TR(SOCKS5)QBT_TR[CONTEXT=OptionsDialog]
</option>
397 <option value=
"HTTP">QBT_TR(HTTP)QBT_TR[CONTEXT=OptionsDialog]
</option>
401 <label for=
"peer_proxy_host_text">QBT_TR(Host:)QBT_TR[CONTEXT=OptionsDialog]
</label>
404 <input type=
"text" id=
"peer_proxy_host_text" />
407 <label for=
"peer_proxy_port_value">QBT_TR(Port:)QBT_TR[CONTEXT=OptionsDialog]
</label>
410 <input type=
"text" id=
"peer_proxy_port_value" style=
"width: 4em;" />
415 <div class=
"formRow">
416 <input type=
"checkbox" id=
"proxyHostnameLookupCheckbox" title=
"QBT_TR(If checked, hostname lookups are done via the proxy.)QBT_TR[CONTEXT=OptionsDialog]" />
417 <label for=
"proxyHostnameLookupCheckbox">QBT_TR(Perform hostname lookup via proxy)QBT_TR[CONTEXT=OptionsDialog]
</label>
420 <fieldset class=
"settings">
422 <input type=
"checkbox" id=
"peer_proxy_auth_checkbox" onclick=
"qBittorrent.Preferences.updatePeerProxyAuthSettings();" />
423 <label for=
"peer_proxy_auth_checkbox">QBT_TR(Authentication)QBT_TR[CONTEXT=OptionsDialog]
</label>
428 <label for=
"peer_proxy_username_text">QBT_TR(Username:)QBT_TR[CONTEXT=OptionsDialog]
</label>
431 <input type=
"text" id=
"peer_proxy_username_text" />
436 <label for=
"peer_proxy_password_text">QBT_TR(Password:)QBT_TR[CONTEXT=OptionsDialog]
</label>
439 <input type=
"password" id=
"peer_proxy_password_text" />
443 <div class=
"formRow">
444 <span>QBT_TR(Info: The password is saved unencrypted)QBT_TR[CONTEXT=OptionsDialog]
</span>
448 <fieldset class=
"settings">
450 <input type=
"checkbox" id=
"proxy_bittorrent_checkbox" onclick=
"qBittorrent.Preferences.updatePeerProxySettings();" />
451 <label for=
"proxy_bittorrent_checkbox">QBT_TR(Use proxy for BitTorrent purposes)QBT_TR[CONTEXT=OptionsDialog]
</label>
453 <div class=
"formRow">
454 <input type=
"checkbox" id=
"use_peer_proxy_checkbox" />
455 <label for=
"use_peer_proxy_checkbox">QBT_TR(Use proxy for peer connections)QBT_TR[CONTEXT=OptionsDialog]
</label>
458 <div class=
"formRow">
459 <input type=
"checkbox" id=
"proxy_rss_checkbox" />
460 <label for=
"proxy_rss_checkbox">QBT_TR(Use proxy for RSS purposes)QBT_TR[CONTEXT=OptionsDialog]
</label>
462 <div class=
"formRow">
463 <input type=
"checkbox" id=
"proxy_misc_checkbox" />
464 <label for=
"proxy_misc_checkbox">QBT_TR(Use proxy for general purposes)QBT_TR[CONTEXT=OptionsDialog]
</label>
468 <fieldset class=
"settings">
470 <label>QBT_TR(IP Filtering)QBT_TR[CONTEXT=OptionsDialog]
</label>
472 <div class=
"formRow">
473 <input type=
"checkbox" id=
"ipfilter_text_checkbox" onclick=
"qBittorrent.Preferences.updateFilterSettings();" />
474 <label for=
"ipfilter_text_checkbox">QBT_TR(Filter path (.dat, .p2p, .p2b):)QBT_TR[CONTEXT=OptionsDialog]
</label>
475 <input type=
"text" id=
"ipfilter_text" />
477 <div class=
"formRow">
478 <input type=
"checkbox" id=
"ipfilter_trackers_checkbox" />
479 <label for=
"ipfilter_trackers_checkbox">QBT_TR(Apply to trackers)QBT_TR[CONTEXT=OptionsDialog]
</label>
481 <div class=
"formRow">
482 <fieldset class=
"settings">
483 <legend>QBT_TR(Manually banned IP addresses...)QBT_TR[CONTEXT=OptionsDialog]
</legend>
484 <textarea id=
"banned_IPs_textarea" rows=
"5" cols=
"70"></textarea>
490 <div id=
"SpeedTab" class=
"PrefTab invisible">
491 <fieldset class=
"settings">
492 <legend>QBT_TR(Global Rate Limits)QBT_TR[CONTEXT=OptionsDialog]
</legend>
496 <img src=
"images/slow_off.svg" style=
"height: 1.5em;" alt=
"QBT_TR(Alternative speed limits)QBT_TR[CONTEXT=MainWindow]">
498 <td><label for=
"up_limit_value">QBT_TR(Upload:)QBT_TR[CONTEXT=OptionsDialog]
</label></td>
499 <td><input type=
"number" id=
"up_limit_value" style=
"width: 4em;" min=
"0" /> QBT_TR(KiB/s)QBT_TR[CONTEXT=OptionsDialog]
</td>
502 <td><label for=
"dl_limit_value">QBT_TR(Download:)QBT_TR[CONTEXT=OptionsDialog]
</label></td>
503 <td><input type=
"number" id=
"dl_limit_value" style=
"width: 4em;" min=
"0" /> QBT_TR(KiB/s)QBT_TR[CONTEXT=OptionsDialog]
</td>
506 <i>QBT_TR(
0 means unlimited)QBT_TR[CONTEXT=OptionsDialog]
</i>
509 <fieldset class=
"settings">
510 <legend>QBT_TR(Alternative Rate Limits)QBT_TR[CONTEXT=OptionsDialog]
</legend>
514 <img src=
"images/slow.svg" style=
"height: 1.5em;" alt=
"QBT_TR(Alternative speed limits)QBT_TR[CONTEXT=MainWindow]">
516 <td><label for=
"alt_up_limit_value">QBT_TR(Upload:)QBT_TR[CONTEXT=OptionsDialog]
</label></td>
517 <td><input type=
"number" id=
"alt_up_limit_value" style=
"width: 4em;" min=
"0" /> QBT_TR(KiB/s)QBT_TR[CONTEXT=OptionsDialog]
</td>
520 <td><label for=
"alt_dl_limit_value">QBT_TR(Download:)QBT_TR[CONTEXT=OptionsDialog]
</label></td>
521 <td><input type=
"number" id=
"alt_dl_limit_value" style=
"width: 4em;" min=
"0" /> QBT_TR(KiB/s)QBT_TR[CONTEXT=OptionsDialog]
</td>
524 <i>QBT_TR(
0 means unlimited)QBT_TR[CONTEXT=OptionsDialog]
</i>
526 <fieldset class=
"settings">
528 <input type=
"checkbox" id=
"limitSchedulingCheckbox" onclick=
"qBittorrent.Preferences.updateSchedulingEnabled();" />
529 <label for=
"limitSchedulingCheckbox">QBT_TR(Schedule the use of alternative rate limits)QBT_TR[CONTEXT=OptionsDialog]
</label>
531 <div class=
"formRow">
532 QBT_TR(From:)QBT_TR[CONTEXT=OptionsDialog]
533 <input type=
"text" id=
"schedule_from_hour" style=
"width: 1.5em;" />:
<input type=
"text" id=
"schedule_from_min" style=
"width: 1.5em;" />
534 QBT_TR(To:)QBT_TR[CONTEXT=OptionsDialog]
535 <input type=
"text" id=
"schedule_to_hour" style=
"width: 1.5em;" />:
<input type=
"text" id=
"schedule_to_min" style=
"width: 1.5em;" />
537 <div class=
"formRow">
538 QBT_TR(When:)QBT_TR[CONTEXT=OptionsDialog]
539 <select id=
"schedule_freq_select">
540 <option value=
"0">QBT_TR(Every day)QBT_TR[CONTEXT=OptionsDialog]
</option>
541 <option value=
"1">QBT_TR(Weekdays)QBT_TR[CONTEXT=OptionsDialog]
</option>
542 <option value=
"2">QBT_TR(Weekends)QBT_TR[CONTEXT=OptionsDialog]
</option>
543 <option value=
"3">QBT_TR(Monday)QBT_TR[CONTEXT=HttpServer]
</option>
544 <option value=
"4">QBT_TR(Tuesday)QBT_TR[CONTEXT=HttpServer]
</option>
545 <option value=
"5">QBT_TR(Wednesday)QBT_TR[CONTEXT=HttpServer]
</option>
546 <option value=
"6">QBT_TR(Thursday)QBT_TR[CONTEXT=HttpServer]
</option>
547 <option value=
"7">QBT_TR(Friday)QBT_TR[CONTEXT=HttpServer]
</option>
548 <option value=
"8">QBT_TR(Saturday)QBT_TR[CONTEXT=HttpServer]
</option>
549 <option value=
"9">QBT_TR(Sunday)QBT_TR[CONTEXT=HttpServer]
</option>
555 <fieldset class=
"settings">
556 <legend>QBT_TR(Rate Limits Settings)QBT_TR[CONTEXT=OptionsDialog]
</legend>
557 <div class=
"formRow">
558 <input type=
"checkbox" id=
"limit_utp_rate_checkbox" />
559 <label for=
"limit_utp_rate_checkbox">QBT_TR(Apply rate limit to µTP protocol)QBT_TR[CONTEXT=OptionsDialog]
</label>
561 <div class=
"formRow">
562 <input type=
"checkbox" id=
"limit_tcp_overhead_checkbox" />
563 <label for=
"limit_tcp_overhead_checkbox">QBT_TR(Apply rate limit to transport overhead)QBT_TR[CONTEXT=OptionsDialog]
</label>
565 <div class=
"formRow">
566 <input type=
"checkbox" id=
"limit_lan_peers_checkbox" />
567 <label for=
"limit_lan_peers_checkbox">QBT_TR(Apply rate limit to peers on LAN)QBT_TR[CONTEXT=OptionsDialog]
</label>
572 <div id=
"BittorrentTab" class=
"PrefTab invisible">
573 <fieldset class=
"settings">
574 <legend>QBT_TR(Privacy)QBT_TR[CONTEXT=OptionsDialog]
</legend>
575 <div class=
"formRow">
576 <input type=
"checkbox" id=
"dht_checkbox" />
577 <label for=
"dht_checkbox">QBT_TR(Enable DHT (decentralized network) to find more peers)QBT_TR[CONTEXT=OptionsDialog]
</label>
579 <div class=
"formRow">
580 <input type=
"checkbox" id=
"pex_checkbox" />
581 <label for=
"pex_checkbox">QBT_TR(Enable Peer Exchange (PeX) to find more peers)QBT_TR[CONTEXT=OptionsDialog]
</label>
583 <div class=
"formRow">
584 <input type=
"checkbox" id=
"lsd_checkbox" />
585 <label for=
"lsd_checkbox">QBT_TR(Enable Local Peer Discovery to find more peers)QBT_TR[CONTEXT=OptionsDialog]
</label>
587 <div class=
"formRow">
588 <label for=
"encryption_select">QBT_TR(Encryption mode:)QBT_TR[CONTEXT=OptionsDialog]
</label>
589 <select id=
"encryption_select">
590 <option value=
"0">QBT_TR(Allow encryption)QBT_TR[CONTEXT=OptionsDialog]
</option>
591 <option value=
"1">QBT_TR(Require encryption)QBT_TR[CONTEXT=OptionsDialog]
</option>
592 <option value=
"2">QBT_TR(Disable encryption)QBT_TR[CONTEXT=OptionsDialog]
</option>
595 <div class=
"formRow">
596 <input type=
"checkbox" id=
"anonymous_mode_checkbox" />
597 <label for=
"anonymous_mode_checkbox">QBT_TR(Enable anonymous mode)QBT_TR[CONTEXT=OptionsDialog] (
<a target=
"_blank" href=
"https://github.com/qbittorrent/qBittorrent/wiki/Anonymous-Mode">QBT_TR(More information)QBT_TR[CONTEXT=HttpServer]
</a>)
</label>
601 <div class=
"formRow">
602 <label for=
"maxActiveCheckingTorrents">QBT_TR(Max active checking torrents:)QBT_TR[CONTEXT=OptionsDialog]
</label>
603 <input type=
"number" id=
"maxActiveCheckingTorrents" style=
"width: 4em;" min=
"-1" />
606 <fieldset class=
"settings">
608 <input type=
"checkbox" id=
"queueing_checkbox" onclick=
"qBittorrent.Preferences.updateQueueingSystem();" />
609 <label for=
"queueing_checkbox">QBT_TR(Torrent Queueing)QBT_TR[CONTEXT=OptionsDialog]
</label>
614 <label for=
"max_active_dl_value">QBT_TR(Maximum active downloads:)QBT_TR[CONTEXT=OptionsDialog]
</label>
617 <input type=
"text" id=
"max_active_dl_value" style=
"width: 4em;" />
622 <label for=
"max_active_up_value">QBT_TR(Maximum active uploads:)QBT_TR[CONTEXT=OptionsDialog]
</label>
625 <input type=
"text" id=
"max_active_up_value" style=
"width: 4em;" />
630 <label for=
"max_active_to_value">QBT_TR(Maximum active torrents:)QBT_TR[CONTEXT=OptionsDialog]
</label>
633 <input type=
"text" id=
"max_active_to_value" style=
"width: 4em;" />
637 <fieldset class=
"settings">
639 <input type=
"checkbox" id=
"dont_count_slow_torrents_checkbox" onclick=
"qBittorrent.Preferences.updateSlowTorrentsSettings();" />
640 <label for=
"dont_count_slow_torrents_checkbox">QBT_TR(Do not count slow torrents in these limits)QBT_TR[CONTEXT=OptionsDialog]
</label>
645 <label for=
"dl_rate_threshold">QBT_TR(Download rate threshold:)QBT_TR[CONTEXT=OptionsDialog]
</label>
648 <input type=
"text" id=
"dl_rate_threshold" style=
"width: 4em;" /> QBT_TR(KiB/s)QBT_TR[CONTEXT=OptionsDialog]
653 <label for=
"ul_rate_threshold">QBT_TR(Upload rate threshold:)QBT_TR[CONTEXT=OptionsDialog]
</label>
656 <input type=
"text" id=
"ul_rate_threshold" style=
"width: 4em;" /> QBT_TR(KiB/s)QBT_TR[CONTEXT=OptionsDialog]
661 <label for=
"torrent_inactive_timer">QBT_TR(Torrent inactivity timer:)QBT_TR[CONTEXT=OptionsDialog]
</label>
664 <input type=
"text" id=
"torrent_inactive_timer" style=
"width: 4em;" /> QBT_TR(seconds)QBT_TR[CONTEXT=OptionsDialog]
671 <fieldset class=
"settings">
672 <legend>QBT_TR(Seeding Limits)QBT_TR[CONTEXT=OptionsDialog]
</legend>
676 <input type=
"checkbox" id=
"max_ratio_checkbox" onclick=
"qBittorrent.Preferences.updateMaxRatioTimeEnabled();" />
677 <label for=
"max_ratio_checkbox">QBT_TR(When ratio reaches)QBT_TR[CONTEXT=OptionsDialog]
</label>
680 <input type=
"text" id=
"max_ratio_value" style=
"width: 4em;" />
685 <input type=
"checkbox" id=
"max_seeding_time_checkbox" onclick=
"qBittorrent.Preferences.updateMaxRatioTimeEnabled();" />
686 <label for=
"max_seeding_time_checkbox">QBT_TR(When total seeding time reaches)QBT_TR[CONTEXT=OptionsDialog]
</label>
689 <input type=
"text" id=
"max_seeding_time_value" style=
"width: 4em;" />QBT_TR(minutes)QBT_TR[CONTEXT=OptionsDialog]
694 <input type=
"checkbox" id=
"max_inactive_seeding_time_checkbox" onclick=
"qBittorrent.Preferences.updateMaxRatioTimeEnabled();" />
695 <label for=
"max_inactive_seeding_time_checkbox">QBT_TR(When inactive seeding time reaches)QBT_TR[CONTEXT=OptionsDialog]
</label>
698 <input type=
"text" id=
"max_inactive_seeding_time_value" style=
"width: 4em;" />QBT_TR(minutes)QBT_TR[CONTEXT=OptionsDialog]
702 <td style=
"text-align: right;"><label for=
"max_ratio_act">QBT_TR(then)QBT_TR[CONTEXT=OptionsDialog]
</label></td>
704 <select id=
"max_ratio_act">
705 <option value=
"0">QBT_TR(Pause torrent)QBT_TR[CONTEXT=OptionsDialog]
</option>
706 <option value=
"1">QBT_TR(Remove torrent)QBT_TR[CONTEXT=OptionsDialog]
</option>
707 <option value=
"3">QBT_TR(Remove torrent and its files)QBT_TR[CONTEXT=OptionsDialog]
</option>
708 <option value=
"2">QBT_TR(Enable super seeding for torrent)QBT_TR[CONTEXT=OptionsDialog]
</option>
715 <fieldset class=
"settings">
717 <input type=
"checkbox" id=
"add_trackers_checkbox" onclick=
"qBittorrent.Preferences.updateAddTrackersEnabled();" />
718 <label for=
"add_trackers_checkbox">QBT_TR(Automatically add these trackers to new downloads:)QBT_TR[CONTEXT=OptionsDialog]
</label>
720 <textarea id=
"add_trackers_textarea" rows=
"5" cols=
"70"></textarea>
724 <div id=
"RSSTab" class=
"PrefTab invisible">
725 <fieldset class=
"settings">
726 <legend>QBT_TR(RSS Reader)QBT_TR[CONTEXT=OptionsDialog]
</legend>
727 <div class=
"formRow">
728 <input type=
"checkbox" id=
"enable_fetching_rss_feeds_checkbox" />
729 <label for=
"enable_fetching_rss_feeds_checkbox">QBT_TR(Enable fetching RSS feeds)QBT_TR[CONTEXT=OptionsDialog]
</label>
734 <label for=
"feed_refresh_interval">QBT_TR(Feeds refresh interval:)QBT_TR[CONTEXT=OptionsDialog]
</label>
737 <input type=
"text" id=
"feed_refresh_interval" style=
"width: 4em;" /> QBT_TR( min)QBT_TR[CONTEXT=OptionsDialog]
742 <label for=
"feedFetchDelay">QBT_TR(Same host request delay:)QBT_TR[CONTEXT=OptionsDialog]
</label>
745 <input type=
"text" id=
"feedFetchDelay" style=
"width: 4em;" /> QBT_TR( sec)QBT_TR[CONTEXT=OptionsDialog]
750 <label for=
"maximum_article_number">QBT_TR(Maximum number of articles per feed:)QBT_TR[CONTEXT=OptionsDialog]
</label>
753 <input type=
"text" id=
"maximum_article_number" style=
"width: 4em;" />
759 <fieldset class=
"settings">
760 <legend>QBT_TR(RSS Torrent Auto Downloader)QBT_TR[CONTEXT=OptionsDialog]
</legend>
761 <div class=
"formRow">
762 <input type=
"checkbox" id=
"enable_auto_downloading_rss_torrents_checkbox" />
763 <label for=
"enable_auto_downloading_rss_torrents_checkbox">QBT_TR(Enable auto downloading of RSS torrents)QBT_TR[CONTEXT=OptionsDialog]
</label>
765 <button type=
"button" style=
"margin: 0 1em; width: calc(100% - 2.2em)" onclick=
"window.qBittorrent.Rss.openRssDownloader();">QBT_TR(Edit auto downloading rules...)QBT_TR[CONTEXT=OptionsDialog]
</button>
768 <fieldset class=
"settings">
769 <legend>QBT_TR(RSS Smart Episode Filter)QBT_TR[CONTEXT=OptionsDialog]
</legend>
770 <div class=
"formRow">
771 <input type=
"checkbox" id=
"downlock_repack_proper_episodes" />
773 <label for=
"downlock_repack_proper_episodes">QBT_TR(Download REPACK/PROPER episodes)QBT_TR[CONTEXT=OptionsDialog]
</label>
775 <label for=
"rss_filter_textarea">QBT_TR(Filters:)QBT_TR[CONTEXT=OptionsDialog]
</label><br>
776 <textarea id=
"rss_filter_textarea" rows=
"6" cols=
"70"></textarea>
780 <div id=
"WebUITab" class=
"PrefTab invisible">
781 <fieldset class=
"settings">
782 <legend>QBT_TR(Web User Interface (Remote control))QBT_TR[CONTEXT=OptionsDialog]
</legend>
786 <label for=
"webui_address_value">QBT_TR(IP address:)QBT_TR[CONTEXT=OptionsDialog]
</label>
789 <input type=
"text" id=
"webui_address_value" />
790 <label for=
"webui_port_value" style=
"margin-left: 10px;">QBT_TR(Port:)QBT_TR[CONTEXT=OptionsDialog]
</label>
791 <input type=
"text" id=
"webui_port_value" style=
"width: 4em;" />
795 <div class=
"formRow">
796 <input type=
"checkbox" id=
"webui_upnp_checkbox" />
797 <label for=
"webui_upnp_checkbox">QBT_TR(Use UPnP / NAT-PMP to forward the port from my router)QBT_TR[CONTEXT=OptionsDialog]
</label>
799 <fieldset class=
"settings">
801 <input type=
"checkbox" id=
"use_https_checkbox" onclick=
"qBittorrent.Preferences.updateHttpsSettings();" />
802 <label for=
"use_https_checkbox">QBT_TR(Use HTTPS instead of HTTP)QBT_TR[CONTEXT=OptionsDialog]
</label>
807 <label for=
"ssl_cert_text">QBT_TR(Certificate:)QBT_TR[CONTEXT=OptionsDialog]
</label>
810 <input type=
"text" id=
"ssl_cert_text" style=
"width: 30em;" />
815 <label for=
"ssl_key_text">QBT_TR(Key:)QBT_TR[CONTEXT=OptionsDialog]
</label>
818 <input type=
"text" id=
"ssl_key_text" style=
"width: 30em;" />
822 <div style=
"padding-left: 10px;"><a target=
"_blank" href=
"https://httpd.apache.org/docs/current/ssl/ssl_faq.html#aboutcerts">QBT_TR(Information about certificates)QBT_TR[CONTEXT=HttpServer]
</a></div>
825 <fieldset class=
"settings">
826 <legend>QBT_TR(Authentication)QBT_TR[CONTEXT=OptionsDialog]
</legend>
830 <label for=
"webui_username_text">QBT_TR(Username:)QBT_TR[CONTEXT=OptionsDialog]
</label>
833 <input type=
"text" id=
"webui_username_text" />
838 <label for=
"webui_password_text">QBT_TR(Password:)QBT_TR[CONTEXT=OptionsDialog]
</label>
841 <input type=
"password" id=
"webui_password_text" placeholder=
"QBT_TR(Change current password)QBT_TR[CONTEXT=OptionsDialog]" autocomplete=
"new-password" />
845 <div class=
"formRow">
846 <input type=
"checkbox" id=
"bypass_local_auth_checkbox" />
847 <label for=
"bypass_local_auth_checkbox">QBT_TR(Bypass authentication for clients on localhost)QBT_TR[CONTEXT=OptionsDialog]
</label>
849 <div class=
"formRow">
850 <input type=
"checkbox" id=
"bypass_auth_subnet_whitelist_checkbox" onclick=
"qBittorrent.Preferences.updateBypasssAuthSettings();" />
851 <label for=
"bypass_auth_subnet_whitelist_checkbox">QBT_TR(Bypass authentication for clients in whitelisted IP subnets)QBT_TR[CONTEXT=OptionsDialog]
</label>
853 <div class=
"formRow" style=
"padding-left: 30px; padding-top: 5px;">
854 <textarea id=
"bypass_auth_subnet_whitelist_textarea" rows=
"5" cols=
"48" placeholder=
"QBT_TR(Example: 172.17.32.0/24, fdff:ffff:c8::/40)QBT_TR[CONTEXT=OptionsDialog]"></textarea>
858 <td><label for=
"webUIMaxAuthFailCountInput">QBT_TR(Ban client after consecutive failures:)QBT_TR[CONTEXT=OptionsDialog]
</label></td>
859 <td><input type=
"number" id=
"webUIMaxAuthFailCountInput" style=
"width: 4em;" min=
"0" /></td>
862 <td style=
"text-align: right;"><label for=
"webUIBanDurationInput">QBT_TR(ban for:)QBT_TR[CONTEXT=OptionsDialog]
</label></td>
863 <td><input type=
"number" id=
"webUIBanDurationInput" style=
"width: 4em;" min=
"1" />QBT_TR(seconds)QBT_TR[CONTEXT=OptionsDialog]
</td>
868 <td><label for=
"webUISessionTimeoutInput">QBT_TR(Session timeout:)QBT_TR[CONTEXT=OptionsDialog]
</label></td>
869 <td><input type=
"number" id=
"webUISessionTimeoutInput" style=
"width: 4em;" min=
"0" /> QBT_TR(seconds)QBT_TR[CONTEXT=OptionsDialog]
</td>
874 <fieldset class=
"settings">
875 <legend><input type=
"checkbox" id=
"use_alt_webui_checkbox" onclick=
"qBittorrent.Preferences.updateAlternativeWebUISettings();" />
876 <label for=
"use_alt_webui_checkbox">QBT_TR(Use alternative Web UI)QBT_TR[CONTEXT=OptionsDialog]
</label>
878 <div class=
"formRow">
879 <label for=
"webui_files_location_textarea">QBT_TR(Files location:)QBT_TR[CONTEXT=OptionsDialog]
</label>
880 <input type=
"text" id=
"webui_files_location_textarea" />
884 <fieldset class=
"settings">
885 <legend>QBT_TR(Security)QBT_TR[CONTEXT=OptionsDialog]
</legend>
886 <div class=
"formRow">
887 <input type=
"checkbox" id=
"clickjacking_protection_checkbox" />
888 <label for=
"clickjacking_protection_checkbox">QBT_TR(Enable clickjacking protection)QBT_TR[CONTEXT=OptionsDialog]
</label>
890 <div class=
"formRow">
891 <input type=
"checkbox" id=
"csrf_protection_checkbox" />
892 <label for=
"csrf_protection_checkbox">QBT_TR(Enable Cross-Site Request Forgery (CSRF) protection)QBT_TR[CONTEXT=OptionsDialog]
</label>
894 <div class=
"formRow">
895 <input type=
"checkbox" id=
"secureCookieCheckbox" />
896 <label for=
"secureCookieCheckbox">QBT_TR(Enable cookie Secure flag (requires HTTPS))QBT_TR[CONTEXT=OptionsDialog]
</label>
899 <fieldset class=
"settings">
901 <input type=
"checkbox" id=
"host_header_validation_checkbox" onclick=
"qBittorrent.Preferences.updateHostHeaderValidationSettings();" />
902 <label for=
"host_header_validation_checkbox">QBT_TR(Enable Host header validation)QBT_TR[CONTEXT=OptionsDialog]
</label>
907 <label for=
"webui_domain_textarea">QBT_TR(Server domains:)QBT_TR[CONTEXT=OptionsDialog]
</label>
910 <textarea id=
"webui_domain_textarea" rows=
"1" cols=
"60" title=
"QBT_TR(Whitelist for filtering HTTP Host header values.
911 In order to defend against DNS rebinding attack,
912 you should put in domain names used by WebUI server.
914 Use ';' to split multiple entries. Can use wildcard '*'.)QBT_TR[CONTEXT=OptionsDialog]"></textarea>
921 <fieldset class=
"settings">
923 <input type=
"checkbox" id=
"webUIUseCustomHTTPHeadersCheckbox" onclick=
"qBittorrent.Preferences.updateWebUICustomHTTPHeadersSettings();" />
924 <label for=
"webUIUseCustomHTTPHeadersCheckbox">QBT_TR(Add custom HTTP headers)QBT_TR[CONTEXT=OptionsDialog]
</label>
926 <textarea id=
"webUICustomHTTPHeadersTextarea" placeholder=
"QBT_TR(Header: value pairs, one per line)QBT_TR[CONTEXT=OptionsDialog]" style=
"width: 90%;"></textarea>
929 <fieldset class=
"settings">
931 <input type=
"checkbox" id=
"webUIReverseProxySupportCheckbox" onclick=
"qBittorrent.Preferences.updateWebUIReverseProxySettings();" />
932 <label for=
"webUIReverseProxySupportCheckbox">QBT_TR(Enable reverse proxy support)QBT_TR[CONTEXT=OptionsDialog]
</label>
934 <div class=
"formRow">
935 <label for=
"webUIReverseProxiesListTextarea">QBT_TR(Trusted proxies list:)QBT_TR[CONTEXT=OptionsDialog]
</label>
936 <input type=
"text" id=
"webUIReverseProxiesListTextarea" title=
"QBT_TR(Specify reverse proxy IPs (or subnets, e.g. 0.0.0.0/24) in order to use forwarded client address (X-Forwarded-For header). Use ';' to split multiple entries.)QBT_TR[CONTEXT=OptionsDialog]" />
942 <fieldset class=
"settings">
944 <input type=
"checkbox" id=
"use_dyndns_checkbox" onclick=
"qBittorrent.Preferences.updateDynDnsSettings();" />
945 <label for=
"use_dyndns_checkbox">QBT_TR(Update my dynamic domain name)QBT_TR[CONTEXT=OptionsDialog]
</label>
947 <select id=
"dyndns_select">
948 <option value=
"0">DynDNS
</option>
949 <option value=
"1">NO-IP
</option>
951 <input type=
"button" value=
"QBT_TR(Register)QBT_TR[CONTEXT=OptionsDialog]" onclick=
"qBittorrent.Preferences.registerDynDns();" />
952 <table style=
"margin-top: 10px;">
955 <label for=
"dyndns_domain_text">QBT_TR(Domain name:)QBT_TR[CONTEXT=OptionsDialog]
</label>
958 <input type=
"text" id=
"dyndns_domain_text" />
963 <label for=
"dyndns_username_text">QBT_TR(Username:)QBT_TR[CONTEXT=OptionsDialog]
</label>
966 <input type=
"text" id=
"dyndns_username_text" />
971 <label for=
"dyndns_password_text">QBT_TR(Password:)QBT_TR[CONTEXT=OptionsDialog]
</label>
974 <input type=
"password" id=
"dyndns_password_text" />
981 <div id=
"AdvancedTab" class=
"PrefTab invisible">
982 <fieldset class=
"settings">
983 <legend>QBT_TR(qBittorrent Section)QBT_TR[CONTEXT=OptionsDialog]
(
<a href=
"https://github.com/qbittorrent/qBittorrent/wiki/Explanation-of-Options-in-qBittorrent#Advanced" target=
"_blank">QBT_TR(Open documentation)QBT_TR[CONTEXT=HttpServer]
</a>)
</legend>
987 <label for=
"resumeDataStorageType">QBT_TR(Resume data storage type (requires restart):)QBT_TR[CONTEXT=OptionsDialog]
</label>
990 <select id=
"resumeDataStorageType" style=
"width: 15em;">
991 <option value=
"Legacy">QBT_TR(Fastresume files)QBT_TR[CONTEXT=OptionsDialog]
</option>
992 <option value=
"SQLite">QBT_TR(SQLite database (experimental))QBT_TR[CONTEXT=OptionsDialog]
</option>
998 <label for=
"memoryWorkingSetLimit">QBT_TR(Physical memory (RAM) usage limit (applied if libtorrent
>=
2.0):)QBT_TR[CONTEXT=OptionsDialog]
<a href=
"https://wikipedia.org/wiki/Working_set" target=
"_blank">(?)
</a></label>
1001 <input type=
"text" id=
"memoryWorkingSetLimit" style=
"width: 15em;" title=
"QBT_TR(This option is less effective on Linux)QBT_TR[CONTEXT=OptionsDialog]"> QBT_TR(MiB)QBT_TR[CONTEXT=OptionsDialog]
1006 <label for=
"networkInterface">QBT_TR(Network interface:)QBT_TR[CONTEXT=OptionsDialog]
</label>
1009 <select id=
"networkInterface" style=
"width: 15em;">
1015 <label for=
"optionalIPAddressToBind">QBT_TR(Optional IP address to bind to:)QBT_TR[CONTEXT=OptionsDialog]
</label>
1018 <select id=
"optionalIPAddressToBind" style=
"width: 15em;">
1024 <label for=
"saveResumeDataInterval">QBT_TR(Save resume data interval:)QBT_TR[CONTEXT=OptionsDialog]
</label>
1027 <input type=
"text" id=
"saveResumeDataInterval" style=
"width: 15em;"> QBT_TR(min)QBT_TR[CONTEXT=OptionsDialog]
1032 <label for=
"torrentFileSizeLimit">QBT_TR(.torrent file size limit:)QBT_TR[CONTEXT=OptionsDialog]
</label>
1035 <input type=
"text" id=
"torrentFileSizeLimit" style=
"width: 15em;"> QBT_TR(MiB)QBT_TR[CONTEXT=OptionsDialog]
1040 <label for=
"recheckTorrentsOnCompletion">QBT_TR(Recheck torrents on completion:)QBT_TR[CONTEXT=OptionsDialog]
</label>
1043 <input type=
"checkbox" id=
"recheckTorrentsOnCompletion">
1048 <label for=
"refreshInterval">QBT_TR(Refresh interval:)QBT_TR[CONTEXT=OptionsDialog]
</label>
1051 <input type=
"text" id=
"refreshInterval" style=
"width: 15em;" title=
"QBT_TR(It controls the internal state update interval which in turn will affect UI updates)QBT_TR[CONTEXT=OptionsDialog]"> QBT_TR(ms)QBT_TR[CONTEXT=OptionsDialog]
1056 <label for=
"resolvePeerCountries">QBT_TR(Resolve peer countries:)QBT_TR[CONTEXT=OptionsDialog]
</label>
1059 <input type=
"checkbox" id=
"resolvePeerCountries">
1064 <label for=
"reannounceWhenAddressChanged">QBT_TR(Reannounce to all trackers when IP or port changed:)QBT_TR[CONTEXT=OptionsDialog]
</label>
1067 <input type=
"checkbox" id=
"reannounceWhenAddressChanged" />
1072 <label for=
"enableEmbeddedTracker">QBT_TR(Enable embedded tracker:)QBT_TR[CONTEXT=OptionsDialog]
</label>
1075 <input type=
"checkbox" id=
"enableEmbeddedTracker" />
1080 <label for=
"embeddedTrackerPort">QBT_TR(Embedded tracker port:)QBT_TR[CONTEXT=OptionsDialog]
</label>
1083 <input type=
"text" id=
"embeddedTrackerPort" style=
"width: 15em;" />
1088 <label for=
"embeddedTrackerPortForwarding">QBT_TR(Enable port forwarding for embedded tracker:)QBT_TR[CONTEXT=OptionsDialog]
</label>
1091 <input type=
"checkbox" id=
"embeddedTrackerPortForwarding" />
1096 <label for=
"markOfTheWeb">QBT_TR(Enable Mark-of-the-Web (MOTW) for downloaded files (require macOS or Windows):)QBT_TR[CONTEXT=OptionsDialog]
</label>
1099 <input type=
"checkbox" id=
"markOfTheWeb" />
1104 <label for=
"pythonExecutablePath">QBT_TR(Python executable path (may require restart):)QBT_TR[CONTEXT=OptionsDialog]
</label>
1107 <input type=
"text" id=
"pythonExecutablePath" placeholder=
"QBT_TR((Auto detect if empty))QBT_TR[CONTEXT=OptionsDialog]" style=
"width: 15em;" />
1112 <fieldset class=
"settings">
1113 <legend>QBT_TR(libtorrent Section)QBT_TR[CONTEXT=OptionsDialog]
(
<a href=
"https://www.libtorrent.org/reference-Settings.html" target=
"_blank">QBT_TR(Open documentation)QBT_TR[CONTEXT=HttpServer]
</a>)
</legend>
1117 <label for=
"bdecodeDepthLimit">QBT_TR(Bdecode depth limit:)QBT_TR[CONTEXT=OptionsDialog]
<a href=
"https://www.libtorrent.org/reference-Bdecoding.html#bdecode()" target=
"_blank">(?)
</a></label>
1120 <input type=
"text" id=
"bdecodeDepthLimit" style=
"width: 15em;" />
1125 <label for=
"bdecodeTokenLimit">QBT_TR(Bdecode token limit:)QBT_TR[CONTEXT=OptionsDialog]
<a href=
"https://www.libtorrent.org/reference-Bdecoding.html#bdecode()" target=
"_blank">(?)
</a></label>
1128 <input type=
"text" id=
"bdecodeTokenLimit" style=
"width: 15em;" />
1133 <label for=
"asyncIOThreads">QBT_TR(Asynchronous I/O threads:)QBT_TR[CONTEXT=OptionsDialog]
<a href=
"https://www.libtorrent.org/reference-Settings.html#aio_threads" target=
"_blank">(?)
</a></label>
1136 <input type=
"text" id=
"asyncIOThreads" style=
"width: 15em;" />
1141 <label for=
"hashingThreads">QBT_TR(Hashing threads (requires libtorrent
>=
2.0):)QBT_TR[CONTEXT=OptionsDialog]
<a href=
"https://www.libtorrent.org/reference-Settings.html#hashing_threads" target=
"_blank">(?)
</a></label>
1144 <input type=
"text" id=
"hashingThreads" style=
"width: 15em;" />
1149 <label for=
"filePoolSize">QBT_TR(File pool size:)QBT_TR[CONTEXT=OptionsDialog]
<a href=
"https://www.libtorrent.org/reference-Settings.html#file_pool_size" target=
"_blank">(?)
</a></label>
1152 <input type=
"text" id=
"filePoolSize" style=
"width: 15em;" />
1157 <label for=
"outstandMemoryWhenCheckingTorrents">QBT_TR(Outstanding memory when checking torrents:)QBT_TR[CONTEXT=OptionsDialog]
<a href=
"https://www.libtorrent.org/reference-Settings.html#checking_mem_usage" target=
"_blank">(?)
</a></label>
1160 <input type=
"text" id=
"outstandMemoryWhenCheckingTorrents" style=
"width: 15em;" /> QBT_TR(MiB)QBT_TR[CONTEXT=OptionsDialog]
1165 <label for=
"diskCache">QBT_TR(Disk cache (requires libtorrent
< 2.0):)QBT_TR[CONTEXT=OptionsDialog]
<a href=
"https://www.libtorrent.org/reference-Settings.html#cache_size" target=
"_blank">(?)
</a></label>
1168 <input type=
"text" id=
"diskCache" style=
"width: 15em;" /> QBT_TR(MiB)QBT_TR[CONTEXT=OptionsDialog]
1173 <label for=
"diskCacheExpiryInterval">QBT_TR(Disk cache expiry interval (requires libtorrent
< 2.0):)QBT_TR[CONTEXT=OptionsDialog]
<a href=
"https://www.libtorrent.org/reference-Settings.html#cache_expiry" target=
"_blank">(?)
</a></label>
1176 <input type=
"text" id=
"diskCacheExpiryInterval" style=
"width: 15em;"> QBT_TR(s)QBT_TR[CONTEXT=OptionsDialog]
1181 <label for=
"diskQueueSize">QBT_TR(Disk queue size:)QBT_TR[CONTEXT=OptionsDialog]
<a href=
"https://www.libtorrent.org/reference-Settings.html#max_queued_disk_bytes" target=
"_blank">(?)
</a></label>
1184 <input type=
"text" id=
"diskQueueSize" style=
"width: 15em;"> QBT_TR(KiB)QBT_TR[CONTEXT=OptionsDialog]
1189 <label for=
"diskIOType">QBT_TR(Disk IO type (libtorrent
>=
2.0; requires restart):)QBT_TR[CONTEXT=OptionsDialog]
<a href=
"https://www.libtorrent.org/single-page-ref.html#default-disk-io-constructor" target=
"_blank">(?)
</a></label>
1192 <select id=
"diskIOType" style=
"width: 15em;">
1193 <option value=
"0">QBT_TR(Default)QBT_TR[CONTEXT=OptionsDialog]
</option>
1194 <option value=
"1">QBT_TR(Memory mapped files)QBT_TR[CONTEXT=OptionsDialog]
</option>
1195 <option value=
"2">QBT_TR(POSIX-compliant)QBT_TR[CONTEXT=OptionsDialog]
</option>
1201 <label for=
"diskIOReadMode">QBT_TR(Disk IO read mode:)QBT_TR[CONTEXT=OptionsDialog]
<a href=
"https://www.libtorrent.org/reference-Settings.html#disk_io_read_mode" target=
"_blank">(?)
</a></label>
1204 <select id=
"diskIOReadMode" style=
"width: 15em;">
1205 <option value=
"0">QBT_TR(Disable OS cache)QBT_TR[CONTEXT=OptionsDialog]
</option>
1206 <option value=
"1">QBT_TR(Enable OS cache)QBT_TR[CONTEXT=OptionsDialog]
</option>
1212 <label for=
"diskIOWriteMode">QBT_TR(Disk IO write mode:)QBT_TR[CONTEXT=OptionsDialog]
<a href=
"https://www.libtorrent.org/reference-Settings.html#disk_io_write_mode" target=
"_blank">(?)
</a></label>
1215 <select id=
"diskIOWriteMode" style=
"width: 15em;">
1216 <option value=
"0">QBT_TR(Disable OS cache)QBT_TR[CONTEXT=OptionsDialog]
</option>
1217 <option value=
"1">QBT_TR(Enable OS cache)QBT_TR[CONTEXT=OptionsDialog]
</option>
1218 <option value=
"2">QBT_TR(Write-through (requires libtorrent
>=
2.0.6))QBT_TR[CONTEXT=OptionsDialog]
</option>
1224 <label for=
"coalesceReadsAndWrites">QBT_TR(Coalesce reads
& writes (requires libtorrent
< 2.0):)QBT_TR[CONTEXT=OptionsDialog]
<a href=
"https://www.libtorrent.org/reference-Settings.html#coalesce_reads" target=
"_blank">(?)
</a></label>
1227 <input type=
"checkbox" id=
"coalesceReadsAndWrites" />
1232 <label for=
"pieceExtentAffinity">QBT_TR(Use piece extent affinity:)QBT_TR[CONTEXT=OptionsDialog]
<a href=
"https://libtorrent.org/single-page-ref.html#piece_extent_affinity" target=
"_blank">(?)
</a></label>
1235 <input type=
"checkbox" id=
"pieceExtentAffinity" />
1240 <label for=
"sendUploadPieceSuggestions">QBT_TR(Send upload piece suggestions:)QBT_TR[CONTEXT=OptionsDialog]
<a href=
"https://www.libtorrent.org/reference-Settings.html#suggest_mode" target=
"_blank">(?)
</a></label>
1243 <input type=
"checkbox" id=
"sendUploadPieceSuggestions" />
1248 <label for=
"sendBufferWatermark">QBT_TR(Send buffer watermark:)QBT_TR[CONTEXT=OptionsDialog]
<a href=
"https://www.libtorrent.org/reference-Settings.html#send_buffer_watermark" target=
"_blank">(?)
</a></label>
1251 <input type=
"text" id=
"sendBufferWatermark" style=
"width: 15em;" /> QBT_TR(KiB)QBT_TR[CONTEXT=OptionsDialog]
1256 <label for=
"sendBufferLowWatermark">QBT_TR(Send buffer low watermark:)QBT_TR[CONTEXT=OptionsDialog]
<a href=
"https://www.libtorrent.org/reference-Settings.html#send_buffer_low_watermark" target=
"_blank">(?)
</a></label>
1259 <input type=
"text" id=
"sendBufferLowWatermark" style=
"width: 15em;" /> QBT_TR(KiB)QBT_TR[CONTEXT=OptionsDialog]
1264 <label for=
"sendBufferWatermarkFactor">QBT_TR(Send buffer watermark factor:)QBT_TR[CONTEXT=OptionsDialog]
<a href=
"https://www.libtorrent.org/reference-Settings.html#send_buffer_watermark_factor" target=
"_blank">(?)
</a></label>
1267 <input type=
"text" id=
"sendBufferWatermarkFactor" style=
"width: 15em;" /> %
1272 <label for=
"connectionSpeed">QBT_TR(Outgoing connections per second:)QBT_TR[CONTEXT=OptionsDialog]
<a href=
"https://www.libtorrent.org/reference-Settings.html#connection_speed" target=
"_blank">(?)
</a></label>
1275 <input type=
"text" id=
"connectionSpeed" style=
"width: 15em;" />
1280 <label for=
"socketSendBufferSize">QBT_TR(Socket send buffer size [
0: system default]:)QBT_TR[CONTEXT=OptionsDialog]
<a href=
"https://www.libtorrent.org/reference-Settings.html#send_socket_buffer_size" target=
"_blank">(?)
</a></label>
1283 <input type=
"text" id=
"socketSendBufferSize" style=
"width: 15em;" /> QBT_TR(KiB)QBT_TR[CONTEXT=OptionsDialog]
1288 <label for=
"socketReceiveBufferSize">QBT_TR(Socket receive buffer size [
0: system default]:)QBT_TR[CONTEXT=OptionsDialog]
<a href=
"https://www.libtorrent.org/reference-Settings.html#recv_socket_buffer_size" target=
"_blank">(?)
</a></label>
1291 <input type=
"text" id=
"socketReceiveBufferSize" style=
"width: 15em;" /> QBT_TR(KiB)QBT_TR[CONTEXT=OptionsDialog]
1296 <label for=
"socketBacklogSize">QBT_TR(Socket backlog size:)QBT_TR[CONTEXT=OptionsDialog]
<a href=
"https://www.libtorrent.org/reference-Settings.html#listen_queue_size" target=
"_blank">(?)
</a></label>
1299 <input type=
"text" id=
"socketBacklogSize" style=
"width: 15em;" />
1304 <label for=
"outgoingPortsMin">QBT_TR(Outgoing ports (Min) [
0: disabled]:)QBT_TR[CONTEXT=OptionsDialog]
<a href=
"https://www.libtorrent.org/reference-Settings.html#outgoing_port" target=
"_blank">(?)
</a></label>
1307 <input type=
"text" id=
"outgoingPortsMin" style=
"width: 15em;" />
1312 <label for=
"outgoingPortsMax">QBT_TR(Outgoing ports (Max) [
0: disabled]:)QBT_TR[CONTEXT=OptionsDialog]
<a href=
"https://www.libtorrent.org/reference-Settings.html#outgoing_port" target=
"_blank">(?)
</a></label>
1315 <input type=
"text" id=
"outgoingPortsMax" style=
"width: 15em;" />
1320 <label for=
"UPnPLeaseDuration">QBT_TR(UPnP lease duration [
0: permanent lease]:)QBT_TR[CONTEXT=OptionsDialog]
<a href=
"https://www.libtorrent.org/reference-Settings.html#upnp_lease_duration" target=
"_blank">(?)
</a></label>
1323 <input type=
"text" id=
"UPnPLeaseDuration" style=
"width: 15em;" />
1328 <label for=
"peerToS">QBT_TR(Type of service (ToS) for connections to peers)QBT_TR[CONTEXT=OptionsDialog]
<a href=
"https://www.libtorrent.org/reference-Settings.html#peer_tos" target=
"_blank">(?)
</a></label>
1331 <input type=
"text" id=
"peerToS" style=
"width: 15em;" />
1336 <label for=
"utpTCPMixedModeAlgorithm">QBT_TR(μTP-TCP mixed mode algorithm:)QBT_TR[CONTEXT=OptionsDialog]
<a href=
"https://www.libtorrent.org/reference-Settings.html#mixed_mode_algorithm" target=
"_blank">(?)
</a></label>
1339 <select id=
"utpTCPMixedModeAlgorithm" style=
"width: 15em;">
1340 <option value=
"0">QBT_TR(Prefer TCP)QBT_TR[CONTEXT=OptionsDialog]
</option>
1341 <option value=
"1">QBT_TR(Peer proportional (throttles TCP))QBT_TR[CONTEXT=OptionsDialog]
</option>
1347 <label for=
"IDNSupportCheckbox">QBT_TR(Support internationalized domain name (IDN):)QBT_TR[CONTEXT=OptionsDialog]
<a href=
"https://www.libtorrent.org/reference-Settings.html#allow_idna" target=
"_blank">(?)
</a></label>
1350 <input type=
"checkbox" id=
"IDNSupportCheckbox" />
1355 <label for=
"allowMultipleConnectionsFromTheSameIPAddress">QBT_TR(Allow multiple connections from the same IP address:)QBT_TR[CONTEXT=OptionsDialog]
<a href=
"https://www.libtorrent.org/reference-Settings.html#allow_multiple_connections_per_ip" target=
"_blank">(?)
</a></label>
1358 <input type=
"checkbox" id=
"allowMultipleConnectionsFromTheSameIPAddress" />
1363 <label for=
"validateHTTPSTrackerCertificate">QBT_TR(Validate HTTPS tracker certificate:)QBT_TR[CONTEXT=OptionsDialog]
<a href=
"https://www.libtorrent.org/reference-Settings.html#validate_https_trackers" target=
"_blank">(?)
</a></label>
1366 <input type=
"checkbox" id=
"validateHTTPSTrackerCertificate" />
1371 <label for=
"mitigateSSRF">QBT_TR(Server-side request forgery (SSRF) mitigation:)QBT_TR[CONTEXT=OptionsDialog]
<a href=
"https://www.libtorrent.org/reference-Settings.html#ssrf_mitigation" target=
"_blank">(?)
</a></label>
1374 <input type=
"checkbox" id=
"mitigateSSRF" />
1379 <label for=
"blockPeersOnPrivilegedPorts">QBT_TR(Disallow connection to peers on privileged ports:)QBT_TR[CONTEXT=OptionsDialog]
<a href=
"https://libtorrent.org/single-page-ref.html#no_connect_privileged_ports" target=
"_blank">(?)
</a></label>
1382 <input type=
"checkbox" id=
"blockPeersOnPrivilegedPorts" />
1387 <label for=
"uploadSlotsBehavior">QBT_TR(Upload slots behavior:)QBT_TR[CONTEXT=OptionsDialog]
<a href=
"https://www.libtorrent.org/reference-Settings.html#choking_algorithm" target=
"_blank">(?)
</a></label>
1390 <select id=
"uploadSlotsBehavior" style=
"width: 15em;">
1391 <option value=
"0">QBT_TR(Fixed slots)QBT_TR[CONTEXT=OptionsDialog]
</option>
1392 <option value=
"1">QBT_TR(Upload rate based)QBT_TR[CONTEXT=OptionsDialog]
</option>
1398 <label for=
"uploadChokingAlgorithm">QBT_TR(Upload choking algorithm:)QBT_TR[CONTEXT=OptionsDialog]
<a href=
"https://www.libtorrent.org/reference-Settings.html#seed_choking_algorithm" target=
"_blank">(?)
</a></label>
1401 <select id=
"uploadChokingAlgorithm" style=
"width: 15em;">
1402 <option value=
"0">QBT_TR(Round-robin)QBT_TR[CONTEXT=OptionsDialog]
</option>
1403 <option value=
"1">QBT_TR(Fastest upload)QBT_TR[CONTEXT=OptionsDialog]
</option>
1404 <option value=
"2">QBT_TR(Anti-leech)QBT_TR[CONTEXT=OptionsDialog]
</option>
1410 <label for=
"announceAllTrackers">QBT_TR(Always announce to all trackers in a tier:)QBT_TR[CONTEXT=OptionsDialog]
<a href=
"https://www.libtorrent.org/reference-Settings.html#announce_to_all_trackers" target=
"_blank">(?)
</a></label>
1413 <input type=
"checkbox" id=
"announceAllTrackers" />
1418 <label for=
"announceAllTiers">QBT_TR(Always announce to all tiers:)QBT_TR[CONTEXT=OptionsDialog]
<a href=
"https://www.libtorrent.org/reference-Settings.html#announce_to_all_tiers" target=
"_blank">(?)
</a></label>
1421 <input type=
"checkbox" id=
"announceAllTiers" />
1426 <label for=
"announceIP">QBT_TR(IP address reported to trackers (requires restart):)QBT_TR[CONTEXT=OptionsDialog]
<a href=
"https://www.libtorrent.org/reference-Settings.html#announce_ip" target=
"_blank">(?)
</a></label>
1429 <input type=
"text" id=
"announceIP" style=
"width: 15em;" />
1434 <label for=
"maxConcurrentHTTPAnnounces">QBT_TR(Max concurrent HTTP announces:)QBT_TR[CONTEXT=OptionsDialog]
<a href=
"https://www.libtorrent.org/reference-Settings.html#max_concurrent_http_announces" target=
"_blank">(?)
</a></label>
1437 <input type=
"text" id=
"maxConcurrentHTTPAnnounces" style=
"width: 15em;" />
1442 <label for=
"stopTrackerTimeout">QBT_TR(Stop tracker timeout [
0: disabled]:)QBT_TR[CONTEXT=OptionsDialog]
<a href=
"https://www.libtorrent.org/reference-Settings.html#stop_tracker_timeout" target=
"_blank">(?)
</a></label>
1445 <input type=
"text" id=
"stopTrackerTimeout" style=
"width: 15em;" />
1450 <label for=
"peerTurnover">QBT_TR(Peer turnover disconnect percentage:)QBT_TR[CONTEXT=OptionsDialog]
<a href=
"https://www.libtorrent.org/reference-Settings.html#peer_turnover" target=
"_blank">(?)
</a></label>
1453 <input type=
"text" id=
"peerTurnover" style=
"width: 15em;" /> %
1458 <label for=
"peerTurnoverCutoff">QBT_TR(Peer turnover threshold percentage:)QBT_TR[CONTEXT=OptionsDialog]
<a href=
"https://www.libtorrent.org/reference-Settings.html#peer_turnover" target=
"_blank">(?)
</a></label>
1461 <input type=
"text" id=
"peerTurnoverCutoff" style=
"width: 15em;" /> %
1466 <label for=
"peerTurnoverInterval">QBT_TR(Peer turnover disconnect interval:)QBT_TR[CONTEXT=OptionsDialog]
<a href=
"https://www.libtorrent.org/reference-Settings.html#peer_turnover" target=
"_blank">(?)
</a></label>
1469 <input type=
"text" id=
"peerTurnoverInterval" style=
"width: 15em;" /> s
1474 <label for=
"requestQueueSize">QBT_TR(Maximum outstanding requests to a single peer:)QBT_TR[CONTEXT=OptionsDialog]
<a href=
"https://www.libtorrent.org/reference-Settings.html#max_out_request_queue" target=
"_blank">(?)
</a></label>
1477 <input type=
"text" id=
"requestQueueSize" style=
"width: 15em;" />
1482 <label for=
"dhtBootstrapNodes">QBT_TR(DHT bootstrap nodes:)QBT_TR[CONTEXT=OptionsDialog]
<a href=
"https://www.libtorrent.org/reference-Settings.html#dht_bootstrap_nodes" target=
"_blank">(?)
</a></label>
1485 <input type=
"text" id=
"dhtBootstrapNodes" placeholder=
"QBT_TR(Resets to default if empty)QBT_TR[CONTEXT=OptionsDialog]" style=
"width: 15em;" />
1490 <label for=
"i2pInboundQuantity">QBT_TR(I2P inbound quantity (requires libtorrent
>=
2.0):)QBT_TR[CONTEXT=OptionsDialog]
<a href=
"https://www.libtorrent.org/reference-Settings.html#i2p_inbound_quantity" target=
"_blank">(?)
</a></label>
1493 <input id=
"i2pInboundQuantity" type=
"number" min=
"1" max=
"16" onchange=
"qBittorrent.Preferences.numberInputLimiter(this);" style=
"width: 15em;" />
1498 <label for=
"i2pOutboundQuantity">QBT_TR(I2P outbound quantity (requires libtorrent
>=
2.0):)QBT_TR[CONTEXT=OptionsDialog]
<a href=
"https://www.libtorrent.org/reference-Settings.html#i2p_outbound_quantity" target=
"_blank">(?)
</a></label>
1501 <input id=
"i2pOutboundQuantity" type=
"number" min=
"1" max=
"16" onchange=
"qBittorrent.Preferences.numberInputLimiter(this);" style=
"width: 15em;" />
1506 <label for=
"i2pInboundLength">QBT_TR(I2P inbound length (requires libtorrent
>=
2.0):)QBT_TR[CONTEXT=OptionsDialog]
<a href=
"https://www.libtorrent.org/reference-Settings.html#i2p_inbound_length" target=
"_blank">(?)
</a></label>
1509 <input id=
"i2pInboundLength" type=
"number" min=
"0" max=
"7" onchange=
"qBittorrent.Preferences.numberInputLimiter(this);" style=
"width: 15em;" />
1514 <label for=
"i2pOutboundLength">QBT_TR(I2P outbound length (requires libtorrent
>=
2.0):)QBT_TR[CONTEXT=OptionsDialog]
<a href=
"https://www.libtorrent.org/reference-Settings.html#i2p_outbound_length" target=
"_blank">(?)
</a></label>
1517 <input id=
"i2pOutboundLength" type=
"number" min=
"0" max=
"7" onchange=
"qBittorrent.Preferences.numberInputLimiter(this);" style=
"width: 15em;" />
1524 <div style=
"text-align: center; margin-top: 1em;"><input type=
"button" value=
"QBT_TR(Save)QBT_TR[CONTEXT=HttpServer]" onclick=
"qBittorrent.Preferences.applyPreferences();" /></div>
1529 if (window
.qBittorrent
=== undefined) {
1530 window
.qBittorrent
= {};
1533 window
.qBittorrent
.Preferences
= (function() {
1534 const exports = function() {
1536 numberInputLimiter
: numberInputLimiter
,
1537 updateFileLogEnabled
: updateFileLogEnabled
,
1538 updateFileLogBackupEnabled
: updateFileLogBackupEnabled
,
1539 updateFileLogDeleteEnabled
: updateFileLogDeleteEnabled
,
1540 updateTempDirEnabled
: updateTempDirEnabled
,
1541 updateExportDirEnabled
: updateExportDirEnabled
,
1542 updateExportDirFinEnabled
: updateExportDirFinEnabled
,
1543 addWatchFolder
: addWatchFolder
,
1544 updateExcludedFileNamesEnabled
: updateExcludedFileNamesEnabled
,
1545 changeWatchFolderSelect
: changeWatchFolderSelect
,
1546 updateMailNotification
: updateMailNotification
,
1547 updateMailAuthSettings
: updateMailAuthSettings
,
1548 updateAutoRun
: updateAutoRun
,
1549 updateAutoRunOnTorrentAdded
: updateAutoRunOnTorrentAdded
,
1550 generateRandomPort
: generateRandomPort
,
1551 updateMaxConnecEnabled
: updateMaxConnecEnabled
,
1552 updateMaxConnecPerTorrentEnabled
: updateMaxConnecPerTorrentEnabled
,
1553 updateMaxUploadsEnabled
: updateMaxUploadsEnabled
,
1554 updateMaxUploadsPerTorrentEnabled
: updateMaxUploadsPerTorrentEnabled
,
1555 updateI2PSettingsEnabled
: updateI2PSettingsEnabled
,
1556 updatePeerProxySettings
: updatePeerProxySettings
,
1557 updatePeerProxyAuthSettings
: updatePeerProxyAuthSettings
,
1558 updateFilterSettings
: updateFilterSettings
,
1559 updateSchedulingEnabled
: updateSchedulingEnabled
,
1560 updateQueueingSystem
: updateQueueingSystem
,
1561 updateSlowTorrentsSettings
: updateSlowTorrentsSettings
,
1562 updateMaxRatioTimeEnabled
: updateMaxRatioTimeEnabled
,
1563 updateAddTrackersEnabled
: updateAddTrackersEnabled
,
1564 updateHttpsSettings
: updateHttpsSettings
,
1565 updateBypasssAuthSettings
: updateBypasssAuthSettings
,
1566 updateAlternativeWebUISettings
: updateAlternativeWebUISettings
,
1567 updateHostHeaderValidationSettings
: updateHostHeaderValidationSettings
,
1568 updateWebUICustomHTTPHeadersSettings
: updateWebUICustomHTTPHeadersSettings
,
1569 updateWebUIReverseProxySettings
: updateWebUIReverseProxySettings
,
1570 updateDynDnsSettings
: updateDynDnsSettings
,
1571 updateWebuiLocaleSelect
: updateWebuiLocaleSelect
,
1572 registerDynDns
: registerDynDns
,
1573 applyPreferences
: applyPreferences
1578 const numberInputLimiter
= (input
) => {
1579 const min
= input
.getAttribute("min");
1580 const max
= input
.getAttribute("max");
1582 if (min
&& input
.value
.toInt() < min
.toInt())
1585 if (max
&& input
.value
.toInt() > max
.toInt())
1589 const updateFileLogEnabled = function() {
1590 const isFileLogEnabled
= $('filelog_checkbox').getProperty('checked');
1591 $('filelog_save_path_input').setProperty('disabled', !isFileLogEnabled
);
1592 $('filelog_backup_checkbox').setProperty('disabled', !isFileLogEnabled
);
1593 $('filelog_delete_old_checkbox').setProperty('disabled', !isFileLogEnabled
);
1595 updateFileLogBackupEnabled();
1596 updateFileLogDeleteEnabled();
1599 const updateFileLogBackupEnabled = function() {
1600 const pros
= $('filelog_backup_checkbox').getProperties('disabled', 'checked');
1601 $('filelog_max_size_input').setProperty('disabled', pros
.disabled
|| !pros
.checked
);
1604 const updateFileLogDeleteEnabled = function() {
1605 const pros
= $('filelog_delete_old_checkbox').getProperties('disabled', 'checked');
1606 $('filelog_age_input').setProperty('disabled', pros
.disabled
|| !pros
.checked
);
1607 $('filelog_age_type_select').setProperty('disabled', pros
.disabled
|| !pros
.checked
);
1611 const watchedFoldersTable
= new HtmlTable($("watched_folders_tab"));
1613 const updateTempDirEnabled = function() {
1614 const isTempDirEnabled
= $('temppath_checkbox').getProperty('checked');
1615 $('temppath_text').setProperty('disabled', !isTempDirEnabled
);
1618 const changeWatchFolderSelect
= (item
) => {
1619 if (item
.value
=== "other") {
1620 item
.nextElementSibling
.hidden
= false;
1621 item
.nextElementSibling
.value
= 'QBT_TR(Type folder here)QBT_TR[CONTEXT=ScanFoldersModel]';
1622 item
.nextElementSibling
.select();
1625 item
.nextElementSibling
.hidden
= true;
1626 const text
= item
.options
[item
.selectedIndex
].textContent
;
1627 item
.nextElementSibling
.value
= text
;
1631 const addWatchFolder
= (folder
= "", sel
= "default_folder", other
= "") => {
1632 const pos
= $('watched_folders_tab').getChildren('tbody')[0].getChildren('tr').length
;
1633 const myinput
= "<input id='text_watch_" + pos
+ "' type='text' value='" + folder
+ "'>";
1634 const disableInput
= (sel
!== "other");
1635 const mycb
= "<div class='select-watched-folder-editable'>"
1636 + "<select id ='cb_watch_" + pos
+ "' onchange='qBittorrent.Preferences.changeWatchFolderSelect(this)'>"
1637 + "<option value='watch_folder'>QBT_TR(Monitored folder)QBT_TR[CONTEXT=ScanFoldersModel]</option>"
1638 + "<option value='default_folder'>QBT_TR(Default save location)QBT_TR[CONTEXT=ScanFoldersModel]</option>"
1639 + "<option value='other'>QBT_TR(Other...)QBT_TR[CONTEXT=ScanFoldersModel]</option>"
1641 + "<input id='cb_watch_txt_" + pos
+ "' type='text' " + (disableInput
? "hidden " : "") + "/>"
1642 + "<img src='images/list-add.svg' id='addFolderImg_" + pos
+ "' alt='Add' style='padding-left:170px;width:16px;cursor:pointer;' onclick='qBittorrent.Preferences.addWatchFolder();' />"
1645 watchedFoldersTable
.push([myinput
, mycb
]);
1646 $('cb_watch_' + pos
).setProperty('value', sel
);
1648 const elt
= $('cb_watch_' + pos
);
1649 other
= elt
.options
[elt
.selectedIndex
].textContent
;
1651 $('cb_watch_txt_' + pos
).setProperty('value', other
);
1653 // hide previous img
1655 $('addFolderImg_' + (pos
- 1)).style
.display
= "none";
1658 const getWatchedFolders
= () => {
1659 const nb_folders
= $("watched_folders_tab").getChildren("tbody")[0].getChildren("tr").length
;
1660 const folders
= new Hash();
1661 for (let i
= 0; i
< nb_folders
; ++i
) {
1662 const fpath
= $('text_watch_' + i
).getProperty('value').trim();
1663 if (fpath
.length
> 0) {
1664 const sel
= $('cb_watch_' + i
).getProperty('value').trim();
1667 if (sel
=== "other")
1668 other
= $('cb_watch_txt_' + i
).getProperty('value').trim();
1670 other
= (sel
=== "watch_folder") ? 0 : 1;
1672 folders
.set(fpath
, other
);
1678 const updateExcludedFileNamesEnabled = function() {
1679 const isAExcludedFileNamesEnabled
= $('excludedFileNamesCheckbox').getProperty('checked');
1680 $('excludedFileNamesTextarea').setProperty('disabled', !isAExcludedFileNamesEnabled
);
1683 const updateExportDirEnabled = function() {
1684 const isExportDirEnabled
= $('exportdir_checkbox').getProperty('checked');
1685 $('exportdir_text').setProperty('disabled', !isExportDirEnabled
);
1688 const updateExportDirFinEnabled = function() {
1689 const isExportDirFinEnabled
= $('exportdirfin_checkbox').getProperty('checked');
1690 $('exportdirfin_text').setProperty('disabled', !isExportDirFinEnabled
);
1693 const updateMailNotification = function() {
1694 const isMailNotificationEnabled
= $('mail_notification_checkbox').getProperty('checked');
1695 $('src_email_txt').setProperty('disabled', !isMailNotificationEnabled
);
1696 $('dest_email_txt').setProperty('disabled', !isMailNotificationEnabled
);
1697 $('smtp_server_txt').setProperty('disabled', !isMailNotificationEnabled
);
1698 $('mail_ssl_checkbox').setProperty('disabled', !isMailNotificationEnabled
);
1699 $('mail_auth_checkbox').setProperty('disabled', !isMailNotificationEnabled
);
1701 if (!isMailNotificationEnabled
) {
1702 $('mail_auth_checkbox').setProperty('checked', !isMailNotificationEnabled
);
1703 updateMailAuthSettings();
1707 const updateMailAuthSettings = function() {
1708 const isMailAuthEnabled
= $('mail_auth_checkbox').getProperty('checked');
1709 $('mail_username_text').setProperty('disabled', !isMailAuthEnabled
);
1710 $('mail_password_text').setProperty('disabled', !isMailAuthEnabled
);
1713 const updateAutoRunOnTorrentAdded = function() {
1714 const isAutoRunOnTorrentAddedEnabled
= $('autorunOnTorrentAddedCheckbox').getProperty('checked');
1715 $('autorunOnTorrentAddedProgram').setProperty('disabled', !isAutoRunOnTorrentAddedEnabled
);
1718 const updateAutoRun = function() {
1719 const isAutoRunEnabled
= $('autorun_checkbox').getProperty('checked');
1720 $('autorunProg_txt').setProperty('disabled', !isAutoRunEnabled
);
1725 const updateMaxConnecEnabled = function() {
1726 const isMaxConnecEnabled
= $('max_connec_checkbox').getProperty('checked');
1727 $('max_connec_value').setProperty('disabled', !isMaxConnecEnabled
);
1730 const updateMaxConnecPerTorrentEnabled = function() {
1731 const isMaxConnecPerTorrentEnabled
= $('max_connec_per_torrent_checkbox').getProperty('checked');
1732 $('max_connec_per_torrent_value').setProperty('disabled', !isMaxConnecPerTorrentEnabled
);
1735 const updateMaxUploadsEnabled = function() {
1736 const isMaxUploadsEnabled
= $('max_uploads_checkbox').getProperty('checked');
1737 $('max_uploads_value').setProperty('disabled', !isMaxUploadsEnabled
);
1740 const updateMaxUploadsPerTorrentEnabled = function() {
1741 const isMaxUploadsPerTorrentEnabled
= $('max_uploads_per_torrent_checkbox').getProperty('checked');
1742 $('max_uploads_per_torrent_value').setProperty('disabled', !isMaxUploadsPerTorrentEnabled
);
1745 const updateI2PSettingsEnabled = function() {
1746 const isI2PEnabled
= $('i2pEnabledCheckbox').getProperty('checked');
1747 $('i2pAddress').setProperty('disabled', !isI2PEnabled
);
1748 $('i2pPort').setProperty('disabled', !isI2PEnabled
);
1749 $('i2pMixedMode').setProperty('disabled', !isI2PEnabled
);
1752 const updatePeerProxySettings = function() {
1753 const proxyType
= $('peer_proxy_type_select').getProperty('value');
1754 const isProxyDisabled
= (proxyType
=== "None");
1755 const isProxySocks4
= (proxyType
=== "SOCKS4");
1757 $('peer_proxy_host_text').setProperty('disabled', isProxyDisabled
);
1758 $('peer_proxy_port_value').setProperty('disabled', isProxyDisabled
);
1760 $('peer_proxy_auth_checkbox').setProperty('disabled', (isProxyDisabled
|| isProxySocks4
));
1761 $('proxy_bittorrent_checkbox').setProperty('disabled', isProxyDisabled
);
1762 $('use_peer_proxy_checkbox').setProperty('disabled', (isProxyDisabled
|| !$('proxy_bittorrent_checkbox').getProperty('checked')));
1763 $('proxyHostnameLookupCheckbox').setProperty('disabled', (isProxyDisabled
|| isProxySocks4
));
1764 $('proxy_rss_checkbox').setProperty('disabled', (isProxyDisabled
|| isProxySocks4
));
1765 $('proxy_misc_checkbox').setProperty('disabled', (isProxyDisabled
|| isProxySocks4
));
1767 updatePeerProxyAuthSettings();
1770 const updatePeerProxyAuthSettings = function() {
1771 const proxyType
= $('peer_proxy_type_select').getProperty('value');
1772 const isProxyDisabled
= (proxyType
=== "None");
1773 const isPeerProxyAuthEnabled
= (!$('peer_proxy_auth_checkbox').getProperty('disabled') && $('peer_proxy_auth_checkbox').getProperty('checked'));
1774 $('peer_proxy_username_text').setProperty('disabled', (isProxyDisabled
|| !isPeerProxyAuthEnabled
));
1775 $('peer_proxy_password_text').setProperty('disabled', (isProxyDisabled
|| !isPeerProxyAuthEnabled
));
1778 const updateFilterSettings = function() {
1779 const isIPFilterEnabled
= $('ipfilter_text_checkbox').getProperty('checked');
1780 $('ipfilter_text').setProperty('disabled', !isIPFilterEnabled
);
1784 const updateSchedulingEnabled = function() {
1785 const isLimitSchedulingEnabled
= $('limitSchedulingCheckbox').getProperty('checked');
1786 $('schedule_from_hour').setProperty('disabled', !isLimitSchedulingEnabled
);
1787 $('schedule_from_min').setProperty('disabled', !isLimitSchedulingEnabled
);
1788 $('schedule_to_hour').setProperty('disabled', !isLimitSchedulingEnabled
);
1789 $('schedule_to_min').setProperty('disabled', !isLimitSchedulingEnabled
);
1790 $('schedule_freq_select').setProperty('disabled', !isLimitSchedulingEnabled
);
1794 const updateQueueingSystem = function() {
1795 const isQueueingEnabled
= $('queueing_checkbox').getProperty('checked');
1796 $('max_active_dl_value').setProperty('disabled', !isQueueingEnabled
);
1797 $('max_active_up_value').setProperty('disabled', !isQueueingEnabled
);
1798 $('max_active_to_value').setProperty('disabled', !isQueueingEnabled
);
1799 $('dont_count_slow_torrents_checkbox').setProperty('disabled', !isQueueingEnabled
);
1800 updateSlowTorrentsSettings();
1803 const updateSlowTorrentsSettings = function() {
1804 const isDontCountSlowTorrentsEnabled
= (!$('dont_count_slow_torrents_checkbox').getProperty('disabled')) && $('dont_count_slow_torrents_checkbox').getProperty('checked');
1805 $('dl_rate_threshold').setProperty('disabled', !isDontCountSlowTorrentsEnabled
);
1806 $('ul_rate_threshold').setProperty('disabled', !isDontCountSlowTorrentsEnabled
);
1807 $('torrent_inactive_timer').setProperty('disabled', !isDontCountSlowTorrentsEnabled
);
1810 const updateMaxRatioTimeEnabled = function() {
1811 const isMaxRatioEnabled
= $('max_ratio_checkbox').getProperty('checked');
1812 $('max_ratio_value').setProperty('disabled', !isMaxRatioEnabled
);
1814 const isMaxSeedingTimeEnabled
= $('max_seeding_time_checkbox').getProperty('checked');
1815 $('max_seeding_time_value').setProperty('disabled', !isMaxSeedingTimeEnabled
);
1817 const isMaxInactiveSeedingTimeEnabled
= $('max_inactive_seeding_time_checkbox').getProperty('checked');
1818 $('max_inactive_seeding_time_value').setProperty('disabled', !isMaxInactiveSeedingTimeEnabled
);
1820 $('max_ratio_act').setProperty('disabled', !(isMaxRatioEnabled
|| isMaxSeedingTimeEnabled
|| isMaxInactiveSeedingTimeEnabled
));
1823 const updateAddTrackersEnabled = function() {
1824 const isAddTrackersEnabled
= $('add_trackers_checkbox').getProperty('checked');
1825 $('add_trackers_textarea').setProperty('disabled', !isAddTrackersEnabled
);
1829 const updateHttpsSettings = function() {
1830 const isUseHttpsEnabled
= $('use_https_checkbox').getProperty('checked');
1831 $('ssl_cert_text').setProperty('disabled', !isUseHttpsEnabled
);
1832 $('ssl_key_text').setProperty('disabled', !isUseHttpsEnabled
);
1833 $('secureCookieCheckbox').setProperty('disabled', !isUseHttpsEnabled
);
1836 const updateBypasssAuthSettings = function() {
1837 const isBypassAuthSubnetWhitelistEnabled
= $('bypass_auth_subnet_whitelist_checkbox').getProperty('checked');
1838 $('bypass_auth_subnet_whitelist_textarea').setProperty('disabled', !isBypassAuthSubnetWhitelistEnabled
);
1841 const updateAlternativeWebUISettings = function() {
1842 const isUseAlternativeWebUIEnabled
= $('use_alt_webui_checkbox').getProperty('checked');
1843 $('webui_files_location_textarea').setProperty('disabled', !isUseAlternativeWebUIEnabled
);
1846 const updateHostHeaderValidationSettings = function() {
1847 const isHostHeaderValidationEnabled
= $('host_header_validation_checkbox').getProperty('checked');
1848 $('webui_domain_textarea').setProperty('disabled', !isHostHeaderValidationEnabled
);
1851 const updateWebUICustomHTTPHeadersSettings = function() {
1852 const isEnabled
= $('webUIUseCustomHTTPHeadersCheckbox').getProperty('checked');
1853 $('webUICustomHTTPHeadersTextarea').setProperty('disabled', !isEnabled
);
1856 const updateWebUIReverseProxySettings = function() {
1857 const isEnabled
= $('webUIReverseProxySupportCheckbox').getProperty('checked');
1858 $('webUIReverseProxiesListTextarea').setProperty('disabled', !isEnabled
);
1861 const updateDynDnsSettings = function() {
1862 const isDynDnsEnabled
= $('use_dyndns_checkbox').getProperty('checked');
1863 $('dyndns_select').setProperty('disabled', !isDynDnsEnabled
);
1864 $('dyndns_domain_text').setProperty('disabled', !isDynDnsEnabled
);
1865 $('dyndns_username_text').setProperty('disabled', !isDynDnsEnabled
);
1866 $('dyndns_password_text').setProperty('disabled', !isDynDnsEnabled
);
1869 const registerDynDns = function() {
1870 if ($('dyndns_select').getProperty('value').toInt() == 1) {
1871 window
.open("http://www.no-ip.com/services/managed_dns/free_dynamic_dns.html", "NO-IP Registration");
1874 window
.open("https://www.dyndns.com/account/services/hosts/add.html", "DynDNS Registration");
1878 const generateRandomPort = function() {
1881 const port
= Math
.floor(Math
.random() * (max
- min
+ 1) + min
);
1882 $('port_value').setProperty('value', port
);
1885 const time_padding = function(val
) {
1886 let ret
= val
.toString();
1887 if (ret
.length
== 1)
1893 const updateNetworkInterfaces = function(default_iface
, default_iface_name
) {
1894 const url
= 'api/v2/app/networkInterfaceList';
1895 $('networkInterface').getChildren().each(c
=> c
.destroy());
1900 onFailure: function() {
1901 alert("Could not contact qBittorrent");
1903 onSuccess: function(ifaces
) {
1904 if (!Array
.isArray(ifaces
))
1907 // add the current network interface to the options if needed
1908 if (default_iface
&& !ifaces
.some((item
) => item
.value
=== default_iface
))
1909 ifaces
.push({ name
: default_iface_name
|| default_iface
, value
: default_iface
});
1911 $('networkInterface').options
.add(new Option('QBT_TR(Any interface)QBT_TR[CONTEXT=OptionsDialog]', ''));
1912 ifaces
.forEach(function(item
, index
) {
1913 $('networkInterface').options
.add(new Option(item
.name
, item
.value
));
1915 $('networkInterface').setProperty('value', default_iface
);
1920 const updateInterfaceAddresses = function(iface
, default_addr
) {
1921 const url
= 'api/v2/app/networkInterfaceAddressList';
1922 $('optionalIPAddressToBind').getChildren().each(c
=> c
.destroy());
1930 onFailure: function() {
1931 alert("Could not contact qBittorrent");
1933 onSuccess: function(addresses
) {
1937 $('optionalIPAddressToBind').options
.add(new Option('QBT_TR(All addresses)QBT_TR[CONTEXT=OptionDialog]', ''));
1938 $('optionalIPAddressToBind').options
.add(new Option('QBT_TR(All IPv4 addresses)QBT_TR[CONTEXT=OptionDialog]', '0.0.0.0'));
1939 $('optionalIPAddressToBind').options
.add(new Option('QBT_TR(All IPv6 addresses)QBT_TR[CONTEXT=OptionDialog]', '::'));
1940 addresses
.forEach(function(item
, index
) {
1941 $('optionalIPAddressToBind').options
.add(new Option(item
, item
));
1943 $('optionalIPAddressToBind').setProperty('value', default_addr
);
1948 const updateWebuiLocaleSelect
= (selected
) => {
1950 for (let i
= 0; i
< $('locale_select').options
.length
; i
++)
1951 languages
.push($('locale_select').options
[i
].value
);
1953 if (!languages
.includes(selected
)) {
1954 const lang
= selected
.slice(0, selected
.indexOf('_'));
1955 selected
= languages
.includes(lang
) ? lang
: 'en';
1957 $('locale_select').setProperty('value', selected
);
1960 const loadPreferences = function() {
1961 const url
= 'api/v2/app/preferences';
1966 onFailure: function() {
1967 alert("Could not contact qBittorrent");
1969 onSuccess: function(pref
) {
1972 $('filelog_checkbox').setProperty('checked', pref
.file_log_enabled
);
1973 $('filelog_save_path_input').setProperty('value', pref
.file_log_path
);
1974 $('filelog_backup_checkbox').setProperty('checked', pref
.file_log_backup_enabled
);
1975 $('filelog_max_size_input').setProperty('value', pref
.file_log_max_size
);
1976 $('filelog_delete_old_checkbox').setProperty('checked', pref
.file_log_delete_old
);
1977 $('filelog_age_input').setProperty('value', pref
.file_log_age
);
1978 $('filelog_age_type_select').setProperty('value', pref
.file_log_age_type
);
1979 updateFileLogEnabled();
1982 // When adding a torrent
1984 switch (pref
.torrent_content_layout
) {
1995 $('contentlayout_select').getChildren('option')[index
].selected
= true;
1996 $('addToTopOfQueueCheckbox').setProperty('checked', pref
.add_to_top_of_queue
);
1997 $('dontstartdownloads_checkbox').setProperty('checked', pref
.start_paused_enabled
);
1998 switch (pref
.torrent_stop_condition
) {
2002 case "MetadataReceived":
2005 case "FilesChecked":
2009 $('stopConditionSelect').getChildren('option')[index
].selected
= true;
2010 $('deletetorrentfileafter_checkbox').setProperty('checked', pref
.auto_delete_mode
);
2012 $('preallocateall_checkbox').setProperty('checked', pref
.preallocate_all
);
2013 $('appendext_checkbox').setProperty('checked', pref
.incomplete_files_ext
);
2014 $('unwantedfolder_checkbox').setProperty('checked', pref
.use_unwanted_folder
);
2016 // Saving Management
2017 $('default_tmm_combobox').setProperty('value', pref
.auto_tmm_enabled
);
2018 $('torrent_changed_tmm_combobox').setProperty('value', pref
.torrent_changed_tmm_enabled
);
2019 $('save_path_changed_tmm_combobox').setProperty('value', pref
.save_path_changed_tmm_enabled
);
2020 $('category_changed_tmm_combobox').setProperty('value', pref
.category_changed_tmm_enabled
);
2021 $('use_subcategories_checkbox').setProperty('checked', pref
.use_subcategories
);
2022 $('savepath_text').setProperty('value', pref
.save_path
);
2023 $('temppath_checkbox').setProperty('checked', pref
.temp_path_enabled
);
2024 $('temppath_text').setProperty('value', pref
.temp_path
);
2025 updateTempDirEnabled();
2026 if (pref
.export_dir
!= '') {
2027 $('exportdir_checkbox').setProperty('checked', true);
2028 $('exportdir_text').setProperty('value', pref
.export_dir
);
2031 $('exportdir_checkbox').setProperty('checked', false);
2032 $('exportdir_text').setProperty('value', '');
2034 updateExportDirEnabled();
2035 if (pref
.export_dir_fin
!= '') {
2036 $('exportdirfin_checkbox').setProperty('checked', true);
2037 $('exportdirfin_text').setProperty('value', pref
.export_dir_fin
);
2040 $('exportdirfin_checkbox').setProperty('checked', false);
2041 $('exportdirfin_text').setProperty('value', '');
2043 updateExportDirFinEnabled();
2045 // Automatically add torrents from
2046 for (const folder
in pref
.scan_dirs
) {
2047 if (!Object
.hasOwn(pref
.scan_dirs
, folder
))
2050 const folderType
= pref
.scan_dirs
[folder
];
2053 if (typeof folderType
=== "number") {
2054 sel
= (folderType
=== 0) ? "watch_folder" : "default_folder";
2060 addWatchFolder(folder
, sel
, other
);
2064 // Excluded file names
2065 $('excludedFileNamesCheckbox').setProperty('checked', pref
.excluded_file_names_enabled
);
2066 $('excludedFileNamesTextarea').setProperty('value', pref
.excluded_file_names
);
2068 // Email notification upon download completion
2069 $('mail_notification_checkbox').setProperty('checked', pref
.mail_notification_enabled
);
2070 $('src_email_txt').setProperty('value', pref
.mail_notification_sender
);
2071 $('dest_email_txt').setProperty('value', pref
.mail_notification_email
);
2072 $('smtp_server_txt').setProperty('value', pref
.mail_notification_smtp
);
2073 $('mail_ssl_checkbox').setProperty('checked', pref
.mail_notification_ssl_enabled
);
2074 $('mail_auth_checkbox').setProperty('checked', pref
.mail_notification_auth_enabled
);
2075 $('mail_username_text').setProperty('value', pref
.mail_notification_username
);
2076 $('mail_password_text').setProperty('value', pref
.mail_notification_password
);
2077 updateMailNotification();
2078 updateMailAuthSettings();
2080 // Run an external program on torrent added
2081 $('autorunOnTorrentAddedCheckbox').setProperty('checked', pref
.autorun_on_torrent_added_enabled
);
2082 $('autorunOnTorrentAddedProgram').setProperty('value', pref
.autorun_on_torrent_added_program
);
2083 updateAutoRunOnTorrentAdded();
2084 // Run an external program on torrent finished
2085 $('autorun_checkbox').setProperty('checked', pref
.autorun_enabled
);
2086 $('autorunProg_txt').setProperty('value', pref
.autorun_program
);
2091 $('port_value').setProperty('value', pref
.listen_port
.toInt());
2092 $('upnp_checkbox').setProperty('checked', pref
.upnp
);
2094 // Connections Limits
2095 const max_connec
= pref
.max_connec
.toInt();
2096 if (max_connec
<= 0) {
2097 $('max_connec_checkbox').setProperty('checked', false);
2098 $('max_connec_value').setProperty('value', 500);
2101 $('max_connec_checkbox').setProperty('checked', true);
2102 $('max_connec_value').setProperty('value', max_connec
);
2104 updateMaxConnecEnabled();
2105 const max_connec_per_torrent
= pref
.max_connec_per_torrent
.toInt();
2106 if (max_connec_per_torrent
<= 0) {
2107 $('max_connec_per_torrent_checkbox').setProperty('checked', false);
2108 $('max_connec_per_torrent_value').setProperty('value', 100);
2111 $('max_connec_per_torrent_checkbox').setProperty('checked', true);
2112 $('max_connec_per_torrent_value').setProperty('value', max_connec_per_torrent
);
2114 updateMaxConnecPerTorrentEnabled();
2115 const max_uploads
= pref
.max_uploads
.toInt();
2116 if (max_uploads
<= 0) {
2117 $('max_uploads_checkbox').setProperty('checked', false);
2118 $('max_uploads_value').setProperty('value', 8);
2121 $('max_uploads_checkbox').setProperty('checked', true);
2122 $('max_uploads_value').setProperty('value', max_uploads
);
2124 updateMaxUploadsEnabled();
2125 const max_uploads_per_torrent
= pref
.max_uploads_per_torrent
.toInt();
2126 if (max_uploads_per_torrent
<= 0) {
2127 $('max_uploads_per_torrent_checkbox').setProperty('checked', false);
2128 $('max_uploads_per_torrent_value').setProperty('value', 4);
2131 $('max_uploads_per_torrent_checkbox').setProperty('checked', true);
2132 $('max_uploads_per_torrent_value').setProperty('value', max_uploads_per_torrent
);
2134 updateMaxUploadsPerTorrentEnabled();
2137 $('i2pEnabledCheckbox').setProperty('checked', pref
.i2p_enabled
);
2138 $('i2pAddress').setProperty('value', pref
.i2p_address
);
2139 $('i2pPort').setProperty('value', pref
.i2p_port
);
2140 $('i2pMixedMode').setProperty('checked', pref
.i2p_mixed_mode
);
2141 updateI2PSettingsEnabled();
2144 $('peer_proxy_type_select').setProperty('value', pref
.proxy_type
);
2145 $('peer_proxy_host_text').setProperty('value', pref
.proxy_ip
);
2146 $('peer_proxy_port_value').setProperty('value', pref
.proxy_port
);
2147 $('peer_proxy_auth_checkbox').setProperty('checked', pref
.proxy_auth_enabled
);
2148 $('peer_proxy_username_text').setProperty('value', pref
.proxy_username
);
2149 $('peer_proxy_password_text').setProperty('value', pref
.proxy_password
);
2150 $('proxyHostnameLookupCheckbox').setProperty('checked', pref
.proxy_hostname_lookup
);
2151 $('proxy_bittorrent_checkbox').setProperty('checked', pref
.proxy_bittorrent
);
2152 $('use_peer_proxy_checkbox').setProperty('checked', pref
.proxy_peer_connections
);
2153 $('proxy_rss_checkbox').setProperty('checked', pref
.proxy_rss
);
2154 $('proxy_misc_checkbox').setProperty('checked', pref
.proxy_misc
);
2155 updatePeerProxySettings();
2158 $('ipfilter_text_checkbox').setProperty('checked', pref
.ip_filter_enabled
);
2159 $('ipfilter_text').setProperty('value', pref
.ip_filter_path
);
2160 $('ipfilter_trackers_checkbox').setProperty('checked', pref
.ip_filter_trackers
);
2161 $('banned_IPs_textarea').setProperty('value', pref
.banned_IPs
);
2162 updateFilterSettings();
2165 // Global Rate Limits
2166 $('up_limit_value').setProperty('value', (pref
.up_limit
.toInt() / 1024));
2167 $('dl_limit_value').setProperty('value', (pref
.dl_limit
.toInt() / 1024));
2168 // Alternative Global Rate Limits
2169 $('alt_up_limit_value').setProperty('value', (pref
.alt_up_limit
.toInt() / 1024));
2170 $('alt_dl_limit_value').setProperty('value', (pref
.alt_dl_limit
.toInt() / 1024));
2172 $('enable_protocol_combobox').setProperty('value', pref
.bittorrent_protocol
);
2173 $('limit_utp_rate_checkbox').setProperty('checked', pref
.limit_utp_rate
);
2174 $('limit_tcp_overhead_checkbox').setProperty('checked', pref
.limit_tcp_overhead
);
2175 $('limit_lan_peers_checkbox').setProperty('checked', pref
.limit_lan_peers
);
2178 $('limitSchedulingCheckbox').setProperty('checked', pref
.scheduler_enabled
);
2179 $('schedule_from_hour').setProperty('value', time_padding(pref
.schedule_from_hour
));
2180 $('schedule_from_min').setProperty('value', time_padding(pref
.schedule_from_min
));
2181 $('schedule_to_hour').setProperty('value', time_padding(pref
.schedule_to_hour
));
2182 $('schedule_to_min').setProperty('value', time_padding(pref
.schedule_to_min
));
2183 $('schedule_freq_select').setProperty('value', pref
.scheduler_days
);
2184 updateSchedulingEnabled();
2188 $('dht_checkbox').setProperty('checked', pref
.dht
);
2189 $('pex_checkbox').setProperty('checked', pref
.pex
);
2190 $('lsd_checkbox').setProperty('checked', pref
.lsd
);
2191 const encryption
= pref
.encryption
.toInt();
2192 $('encryption_select').getChildren('option')[encryption
].selected
= true;
2193 $('anonymous_mode_checkbox').setProperty('checked', pref
.anonymous_mode
);
2195 $('maxActiveCheckingTorrents').setProperty('value', pref
.max_active_checking_torrents
);
2198 $('queueing_checkbox').setProperty('checked', pref
.queueing_enabled
);
2199 $('max_active_dl_value').setProperty('value', pref
.max_active_downloads
.toInt());
2200 $('max_active_up_value').setProperty('value', pref
.max_active_uploads
.toInt());
2201 $('max_active_to_value').setProperty('value', pref
.max_active_torrents
.toInt());
2202 $('dont_count_slow_torrents_checkbox').setProperty('checked', pref
.dont_count_slow_torrents
);
2203 $('dl_rate_threshold').setProperty('value', pref
.slow_torrent_dl_rate_threshold
.toInt());
2204 $('ul_rate_threshold').setProperty('value', pref
.slow_torrent_ul_rate_threshold
.toInt());
2205 $('torrent_inactive_timer').setProperty('value', pref
.slow_torrent_inactive_timer
.toInt());
2206 updateQueueingSystem();
2209 $('max_ratio_checkbox').setProperty('checked', pref
.max_ratio_enabled
);
2210 $('max_ratio_value').setProperty('value', (pref
.max_ratio_enabled
? pref
.max_ratio
: 1));
2211 $('max_seeding_time_checkbox').setProperty('checked', pref
.max_seeding_time_enabled
);
2212 $('max_seeding_time_value').setProperty('value', (pref
.max_seeding_time_enabled
? pref
.max_seeding_time
.toInt() : 1440));
2213 $('max_inactive_seeding_time_checkbox').setProperty('checked', pref
.max_inactive_seeding_time_enabled
);
2214 $('max_inactive_seeding_time_value').setProperty('value', (pref
.max_inactive_seeding_time_enabled
? pref
.max_inactive_seeding_time
.toInt() : 1440));
2215 let maxRatioAct
= 0;
2216 switch (pref
.max_ratio_act
.toInt()) {
2224 case 2: // Enable super seeding
2227 case 3: // Remove torrent and files
2231 $('max_ratio_act').getChildren('option')[maxRatioAct
].selected
= true;
2232 updateMaxRatioTimeEnabled();
2235 $('add_trackers_checkbox').setProperty('checked', pref
.add_trackers_enabled
);
2236 $('add_trackers_textarea').setProperty('value', pref
.add_trackers
);
2237 updateAddTrackersEnabled();
2240 $('enable_fetching_rss_feeds_checkbox').setProperty('checked', pref
.rss_processing_enabled
);
2241 $('feed_refresh_interval').setProperty('value', pref
.rss_refresh_interval
);
2242 $('feedFetchDelay').setProperty('value', pref
.rss_fetch_delay
);
2243 $('maximum_article_number').setProperty('value', pref
.rss_max_articles_per_feed
);
2244 $('enable_auto_downloading_rss_torrents_checkbox').setProperty('checked', pref
.rss_auto_downloading_enabled
);
2245 $('downlock_repack_proper_episodes').setProperty('checked', pref
.rss_download_repack_proper_episodes
);
2246 $('rss_filter_textarea').setProperty('value', pref
.rss_smart_episode_filters
);
2250 updateWebuiLocaleSelect(pref
.locale
);
2251 $('performanceWarning').setProperty('checked', pref
.performance_warning
);
2254 $('webui_domain_textarea').setProperty('value', pref
.web_ui_domain_list
);
2255 $('webui_address_value').setProperty('value', pref
.web_ui_address
);
2256 $('webui_port_value').setProperty('value', pref
.web_ui_port
);
2257 $('webui_upnp_checkbox').setProperty('checked', pref
.web_ui_upnp
);
2258 $('use_https_checkbox').setProperty('checked', pref
.use_https
);
2259 $('ssl_cert_text').setProperty('value', pref
.web_ui_https_cert_path
);
2260 $('ssl_key_text').setProperty('value', pref
.web_ui_https_key_path
);
2261 updateHttpsSettings();
2264 $('webui_username_text').setProperty('value', pref
.web_ui_username
);
2265 $('bypass_local_auth_checkbox').setProperty('checked', pref
.bypass_local_auth
);
2266 $('bypass_auth_subnet_whitelist_checkbox').setProperty('checked', pref
.bypass_auth_subnet_whitelist_enabled
);
2267 $('bypass_auth_subnet_whitelist_textarea').setProperty('value', pref
.bypass_auth_subnet_whitelist
);
2268 updateBypasssAuthSettings();
2269 $('webUIMaxAuthFailCountInput').setProperty('value', pref
.web_ui_max_auth_fail_count
.toInt());
2270 $('webUIBanDurationInput').setProperty('value', pref
.web_ui_ban_duration
.toInt());
2271 $('webUISessionTimeoutInput').setProperty('value', pref
.web_ui_session_timeout
.toInt());
2273 // Use alternative Web UI
2274 $('use_alt_webui_checkbox').setProperty('checked', pref
.alternative_webui_enabled
);
2275 $('webui_files_location_textarea').setProperty('value', pref
.alternative_webui_path
);
2276 updateAlternativeWebUISettings();
2279 $('clickjacking_protection_checkbox').setProperty('checked', pref
.web_ui_clickjacking_protection_enabled
);
2280 $('csrf_protection_checkbox').setProperty('checked', pref
.web_ui_csrf_protection_enabled
);
2281 $('secureCookieCheckbox').setProperty('checked', pref
.web_ui_secure_cookie_enabled
);
2282 $('host_header_validation_checkbox').setProperty('checked', pref
.web_ui_host_header_validation_enabled
);
2283 updateHostHeaderValidationSettings();
2285 // Custom HTTP headers
2286 $('webUIUseCustomHTTPHeadersCheckbox').setProperty('checked', pref
.web_ui_use_custom_http_headers_enabled
);
2287 $('webUICustomHTTPHeadersTextarea').setProperty('value', pref
.web_ui_custom_http_headers
);
2288 updateWebUICustomHTTPHeadersSettings();
2291 $('webUIReverseProxySupportCheckbox').setProperty('checked', pref
.web_ui_reverse_proxy_enabled
);
2292 $('webUIReverseProxiesListTextarea').setProperty('value', pref
.web_ui_reverse_proxies_list
);
2293 updateWebUIReverseProxySettings();
2295 // Update my dynamic domain name
2296 $('use_dyndns_checkbox').setProperty('checked', pref
.dyndns_enabled
);
2297 $('dyndns_select').setProperty('value', pref
.dyndns_service
);
2298 $('dyndns_domain_text').setProperty('value', pref
.dyndns_domain
);
2299 $('dyndns_username_text').setProperty('value', pref
.dyndns_username
);
2300 $('dyndns_password_text').setProperty('value', pref
.dyndns_password
);
2301 updateDynDnsSettings();
2303 // Advanced settings
2304 // qBittorrent section
2305 $('resumeDataStorageType').setProperty('value', pref
.resume_data_storage_type
);
2306 $('memoryWorkingSetLimit').setProperty('value', pref
.memory_working_set_limit
);
2307 updateNetworkInterfaces(pref
.current_network_interface
, pref
.current_interface_name
);
2308 updateInterfaceAddresses(pref
.current_network_interface
, pref
.current_interface_address
);
2309 $('saveResumeDataInterval').setProperty('value', pref
.save_resume_data_interval
);
2310 $('torrentFileSizeLimit').setProperty('value', (pref
.torrent_file_size_limit
/ 1024 / 1024));
2311 $('recheckTorrentsOnCompletion').setProperty('checked', pref
.recheck_completed_torrents
);
2312 $('refreshInterval').setProperty('value', pref
.refresh_interval
);
2313 $('resolvePeerCountries').setProperty('checked', pref
.resolve_peer_countries
);
2314 $('reannounceWhenAddressChanged').setProperty('checked', pref
.reannounce_when_address_changed
);
2315 // libtorrent section
2316 $('bdecodeDepthLimit').setProperty('value', pref
.bdecode_depth_limit
);
2317 $('bdecodeTokenLimit').setProperty('value', pref
.bdecode_token_limit
);
2318 $('asyncIOThreads').setProperty('value', pref
.async_io_threads
);
2319 $('hashingThreads').setProperty('value', pref
.hashing_threads
);
2320 $('filePoolSize').setProperty('value', pref
.file_pool_size
);
2321 $('outstandMemoryWhenCheckingTorrents').setProperty('value', pref
.checking_memory_use
);
2322 $('diskCache').setProperty('value', pref
.disk_cache
);
2323 $('diskCacheExpiryInterval').setProperty('value', pref
.disk_cache_ttl
);
2324 $('diskQueueSize').setProperty('value', (pref
.disk_queue_size
/ 1024));
2325 $('diskIOType').setProperty('value', pref
.disk_io_type
);
2326 $('diskIOReadMode').setProperty('value', pref
.disk_io_read_mode
);
2327 $('diskIOWriteMode').setProperty('value', pref
.disk_io_write_mode
);
2328 $('coalesceReadsAndWrites').setProperty('checked', pref
.enable_coalesce_read_write
);
2329 $('pieceExtentAffinity').setProperty('checked', pref
.enable_piece_extent_affinity
);
2330 $('sendUploadPieceSuggestions').setProperty('checked', pref
.enable_upload_suggestions
);
2331 $('sendBufferWatermark').setProperty('value', pref
.send_buffer_watermark
);
2332 $('sendBufferLowWatermark').setProperty('value', pref
.send_buffer_low_watermark
);
2333 $('sendBufferWatermarkFactor').setProperty('value', pref
.send_buffer_watermark_factor
);
2334 $('connectionSpeed').setProperty('value', pref
.connection_speed
);
2335 $('socketSendBufferSize').setProperty('value', (pref
.socket_send_buffer_size
/ 1024));
2336 $('socketReceiveBufferSize').setProperty('value', (pref
.socket_receive_buffer_size
/ 1024));
2337 $('socketBacklogSize').setProperty('value', pref
.socket_backlog_size
);
2338 $('outgoingPortsMin').setProperty('value', pref
.outgoing_ports_min
);
2339 $('outgoingPortsMax').setProperty('value', pref
.outgoing_ports_max
);
2340 $('UPnPLeaseDuration').setProperty('value', pref
.upnp_lease_duration
);
2341 $('peerToS').setProperty('value', pref
.peer_tos
);
2342 $('utpTCPMixedModeAlgorithm').setProperty('value', pref
.utp_tcp_mixed_mode
);
2343 $('IDNSupportCheckbox').setProperty('checked', pref
.idn_support_enabled
);
2344 $('allowMultipleConnectionsFromTheSameIPAddress').setProperty('checked', pref
.enable_multi_connections_from_same_ip
);
2345 $('validateHTTPSTrackerCertificate').setProperty('checked', pref
.validate_https_tracker_certificate
);
2346 $('mitigateSSRF').setProperty('checked', pref
.ssrf_mitigation
);
2347 $('blockPeersOnPrivilegedPorts').setProperty('checked', pref
.block_peers_on_privileged_ports
);
2348 $('enableEmbeddedTracker').setProperty('checked', pref
.enable_embedded_tracker
);
2349 $('embeddedTrackerPort').setProperty('value', pref
.embedded_tracker_port
);
2350 $('embeddedTrackerPortForwarding').setProperty('checked', pref
.embedded_tracker_port_forwarding
);
2351 $('markOfTheWeb').setProperty('checked', pref
.mark_of_the_web
);
2352 $('pythonExecutablePath').setProperty('value', pref
.python_executable_path
);
2353 $('uploadSlotsBehavior').setProperty('value', pref
.upload_slots_behavior
);
2354 $('uploadChokingAlgorithm').setProperty('value', pref
.upload_choking_algorithm
);
2355 $('announceAllTrackers').setProperty('checked', pref
.announce_to_all_trackers
);
2356 $('announceAllTiers').setProperty('checked', pref
.announce_to_all_tiers
);
2357 $('announceIP').setProperty('value', pref
.announce_ip
);
2358 $('maxConcurrentHTTPAnnounces').setProperty('value', pref
.max_concurrent_http_announces
);
2359 $('stopTrackerTimeout').setProperty('value', pref
.stop_tracker_timeout
);
2360 $('peerTurnover').setProperty('value', pref
.peer_turnover
);
2361 $('peerTurnoverCutoff').setProperty('value', pref
.peer_turnover_cutoff
);
2362 $('peerTurnoverInterval').setProperty('value', pref
.peer_turnover_interval
);
2363 $('requestQueueSize').setProperty('value', pref
.request_queue_size
);
2364 $('dhtBootstrapNodes').setProperty('value', pref
.dht_bootstrap_nodes
);
2365 $('i2pInboundQuantity').setProperty('value', pref
.i2p_inbound_quantity
);
2366 $('i2pOutboundQuantity').setProperty('value', pref
.i2p_outbound_quantity
);
2367 $('i2pInboundLength').setProperty('value', pref
.i2p_inbound_length
);
2368 $('i2pOutboundLength').setProperty('value', pref
.i2p_outbound_length
);
2374 const applyPreferences = function() {
2375 const settings
= new Hash();
2376 // Validate form data
2379 settings
.set('file_log_enabled', $('filelog_checkbox').getProperty('checked'));
2380 settings
.set('file_log_path', $('filelog_save_path_input').getProperty('value'));
2381 settings
.set('file_log_backup_enabled', $('filelog_backup_checkbox').getProperty('checked'));
2382 settings
.set('file_log_max_size', $('filelog_max_size_input').getProperty('value'));
2383 settings
.set('file_log_delete_old', $('filelog_delete_old_checkbox').getProperty('checked'));
2384 settings
.set('file_log_age', $('filelog_age_input').getProperty('value'));
2385 settings
.set('file_log_age_type', $('filelog_age_type_select').getProperty('value'));
2388 // When adding a torrent
2389 settings
.set('torrent_content_layout', $('contentlayout_select').getSelected()[0].getProperty('value'));
2390 settings
.set('add_to_top_of_queue', $('addToTopOfQueueCheckbox').getProperty('checked'));
2391 settings
.set('start_paused_enabled', $('dontstartdownloads_checkbox').getProperty('checked'));
2392 settings
.set('torrent_stop_condition', $('stopConditionSelect').getSelected()[0].getProperty('value'));
2393 settings
.set('auto_delete_mode', $('deletetorrentfileafter_checkbox').getProperty('checked'));
2395 settings
.set('preallocate_all', $('preallocateall_checkbox').getProperty('checked'));
2396 settings
.set('incomplete_files_ext', $('appendext_checkbox').getProperty('checked'));
2397 settings
.set('use_unwanted_folder', $('unwantedfolder_checkbox').getProperty('checked'));
2399 // Saving Management
2400 settings
.set('auto_tmm_enabled', $('default_tmm_combobox').getProperty('value'));
2401 settings
.set('torrent_changed_tmm_enabled', $('torrent_changed_tmm_combobox').getProperty('value'));
2402 settings
.set('save_path_changed_tmm_enabled', $('save_path_changed_tmm_combobox').getProperty('value'));
2403 settings
.set('category_changed_tmm_enabled', $('category_changed_tmm_combobox').getProperty('value'));
2404 settings
.set('use_subcategories', $('use_subcategories_checkbox').getProperty('checked'));
2405 settings
.set('save_path', $('savepath_text').getProperty('value'));
2406 settings
.set('temp_path_enabled', $('temppath_checkbox').getProperty('checked'));
2407 settings
.set('temp_path', $('temppath_text').getProperty('value'));
2408 if ($('exportdir_checkbox').getProperty('checked'))
2409 settings
.set('export_dir', $('exportdir_text').getProperty('value'));
2411 settings
.set('export_dir', '');
2412 if ($('exportdirfin_checkbox').getProperty('checked'))
2413 settings
.set('export_dir_fin', $('exportdirfin_text').getProperty('value'));
2415 settings
.set('export_dir_fin', '');
2417 // Automatically add torrents from
2418 settings
.set('scan_dirs', getWatchedFolders());
2420 // Excluded file names
2421 settings
.set('excluded_file_names_enabled', $('excludedFileNamesCheckbox').getProperty('checked'));
2422 settings
.set('excluded_file_names', $('excludedFileNamesTextarea').getProperty('value'));
2424 // Email notification upon download completion
2425 settings
.set('mail_notification_enabled', $('mail_notification_checkbox').getProperty('checked'));
2426 settings
.set('mail_notification_sender', $('src_email_txt').getProperty('value'));
2427 settings
.set('mail_notification_email', $('dest_email_txt').getProperty('value'));
2428 settings
.set('mail_notification_smtp', $('smtp_server_txt').getProperty('value'));
2429 settings
.set('mail_notification_ssl_enabled', $('mail_ssl_checkbox').getProperty('checked'));
2430 settings
.set('mail_notification_auth_enabled', $('mail_auth_checkbox').getProperty('checked'));
2431 settings
.set('mail_notification_username', $('mail_username_text').getProperty('value'));
2432 settings
.set('mail_notification_password', $('mail_password_text').getProperty('value'));
2434 // Run an external program on torrent added
2435 settings
.set('autorun_on_torrent_added_enabled', $('autorunOnTorrentAddedCheckbox').getProperty('checked'));
2436 settings
.set('autorun_on_torrent_added_program', $('autorunOnTorrentAddedProgram').getProperty('value'));
2437 // Run an external program on torrent finished
2438 settings
.set('autorun_enabled', $('autorun_checkbox').getProperty('checked'));
2439 settings
.set('autorun_program', $('autorunProg_txt').getProperty('value'));
2443 const listen_port
= $('port_value').getProperty('value').toInt();
2444 if (isNaN(listen_port
) || (listen_port
< 0) || (listen_port
> 65535)) {
2445 alert("QBT_TR(The port used for incoming connections must be between 0 and 65535.)QBT_TR[CONTEXT=HttpServer]");
2448 settings
.set('listen_port', listen_port
);
2449 settings
.set('upnp', $('upnp_checkbox').getProperty('checked'));
2451 // Connections Limits
2452 let max_connec
= -1;
2453 if ($('max_connec_checkbox').getProperty('checked')) {
2454 max_connec
= $('max_connec_value').getProperty('value').toInt();
2455 if (isNaN(max_connec
) || max_connec
<= 0) {
2456 alert("QBT_TR(Maximum number of connections limit must be greater than 0 or disabled.)QBT_TR[CONTEXT=HttpServer]");
2460 settings
.set('max_connec', max_connec
);
2461 let max_connec_per_torrent
= -1;
2462 if ($('max_connec_per_torrent_checkbox').getProperty('checked')) {
2463 max_connec_per_torrent
= $('max_connec_per_torrent_value').getProperty('value').toInt();
2464 if (isNaN(max_connec_per_torrent
) || max_connec_per_torrent
<= 0) {
2465 alert("QBT_TR(Maximum number of connections per torrent limit must be greater than 0 or disabled.)QBT_TR[CONTEXT=HttpServer]");
2469 settings
.set('max_connec_per_torrent', max_connec_per_torrent
);
2470 let max_uploads
= -1;
2471 if ($('max_uploads_checkbox').getProperty('checked')) {
2472 max_uploads
= $('max_uploads_value').getProperty('value').toInt();
2473 if (isNaN(max_uploads
) || max_uploads
<= 0) {
2474 alert("QBT_TR(Global number of upload slots limit must be greater than 0 or disabled.)QBT_TR[CONTEXT=HttpServer]");
2478 settings
.set('max_uploads', max_uploads
);
2479 let max_uploads_per_torrent
= -1;
2480 if ($('max_uploads_per_torrent_checkbox').getProperty('checked')) {
2481 max_uploads_per_torrent
= $('max_uploads_per_torrent_value').getProperty('value').toInt();
2482 if (isNaN(max_uploads_per_torrent
) || max_uploads_per_torrent
<= 0) {
2483 alert("QBT_TR(Maximum number of upload slots per torrent limit must be greater than 0 or disabled.)QBT_TR[CONTEXT=HttpServer]");
2487 settings
.set('max_uploads_per_torrent', max_uploads_per_torrent
);
2490 settings
.set('i2p_enabled', $('i2pEnabledCheckbox').getProperty('checked'));
2491 settings
.set('i2p_address', $('i2pAddress').getProperty('value'));
2492 settings
.set('i2p_port', $('i2pPort').getProperty('value').toInt());
2493 settings
.set('i2p_mixed_mode', $('i2pMixedMode').getProperty('checked'));
2496 settings
.set('proxy_type', $('peer_proxy_type_select').getProperty('value'));
2497 settings
.set('proxy_ip', $('peer_proxy_host_text').getProperty('value'));
2498 settings
.set('proxy_port', $('peer_proxy_port_value').getProperty('value').toInt());
2499 settings
.set('proxy_auth_enabled', $('peer_proxy_auth_checkbox').getProperty('checked'));
2500 settings
.set('proxy_username', $('peer_proxy_username_text').getProperty('value'));
2501 settings
.set('proxy_password', $('peer_proxy_password_text').getProperty('value'));
2502 settings
.set('proxy_hostname_lookup', $('proxyHostnameLookupCheckbox').getProperty('checked'));
2503 settings
.set('proxy_bittorrent', $('proxy_bittorrent_checkbox').getProperty('checked'));
2504 settings
.set('proxy_peer_connections', $('use_peer_proxy_checkbox').getProperty('checked'));
2505 settings
.set('proxy_rss', $('proxy_rss_checkbox').getProperty('checked'));
2506 settings
.set('proxy_misc', $('proxy_misc_checkbox').getProperty('checked'));
2509 settings
.set('ip_filter_enabled', $('ipfilter_text_checkbox').getProperty('checked'));
2510 settings
.set('ip_filter_path', $('ipfilter_text').getProperty('value'));
2511 settings
.set('ip_filter_trackers', $('ipfilter_trackers_checkbox').getProperty('checked'));
2512 settings
.set('banned_IPs', $('banned_IPs_textarea').getProperty('value'));
2515 // Global Rate Limits
2516 const up_limit
= $('up_limit_value').getProperty('value').toInt() * 1024;
2517 if (isNaN(up_limit
) || up_limit
< 0) {
2518 alert("QBT_TR(Global upload rate limit must be greater than 0 or disabled.)QBT_TR[CONTEXT=HttpServer]");
2521 settings
.set('up_limit', up_limit
);
2523 const dl_limit
= $('dl_limit_value').getProperty('value').toInt() * 1024;
2524 if (isNaN(dl_limit
) || dl_limit
< 0) {
2525 alert("QBT_TR(Global download rate limit must be greater than 0 or disabled.)QBT_TR[CONTEXT=HttpServer]");
2528 settings
.set('dl_limit', dl_limit
);
2530 // Alternative Global Rate Limits
2531 const alt_up_limit
= $('alt_up_limit_value').getProperty('value').toInt() * 1024;
2532 if (isNaN(alt_up_limit
) || alt_up_limit
< 0) {
2533 alert("QBT_TR(Alternative upload rate limit must be greater than 0 or disabled.)QBT_TR[CONTEXT=HttpServer]");
2536 settings
.set('alt_up_limit', alt_up_limit
);
2538 const alt_dl_limit
= $('alt_dl_limit_value').getProperty('value').toInt() * 1024;
2539 if (isNaN(alt_dl_limit
) || alt_dl_limit
< 0) {
2540 alert("QBT_TR(Alternative download rate limit must be greater than 0 or disabled.)QBT_TR[CONTEXT=HttpServer]");
2543 settings
.set('alt_dl_limit', alt_dl_limit
);
2545 settings
.set('bittorrent_protocol', $('enable_protocol_combobox').getProperty('value'));
2546 settings
.set('limit_utp_rate', $('limit_utp_rate_checkbox').getProperty('checked'));
2547 settings
.set('limit_tcp_overhead', $('limit_tcp_overhead_checkbox').getProperty('checked'));
2548 settings
.set('limit_lan_peers', $('limit_lan_peers_checkbox').getProperty('checked'));
2551 const scheduling_enabled
= $('limitSchedulingCheckbox').getProperty('checked');
2552 settings
.set('scheduler_enabled', scheduling_enabled
);
2553 if (scheduling_enabled
) {
2554 settings
.set('schedule_from_hour', $('schedule_from_hour').getProperty('value').toInt());
2555 settings
.set('schedule_from_min', $('schedule_from_min').getProperty('value').toInt());
2556 settings
.set('schedule_to_hour', $('schedule_to_hour').getProperty('value').toInt());
2557 settings
.set('schedule_to_min', $('schedule_to_min').getProperty('value').toInt());
2558 settings
.set('scheduler_days', $('schedule_freq_select').getProperty('value').toInt());
2563 settings
.set('dht', $('dht_checkbox').getProperty('checked'));
2564 settings
.set('pex', $('pex_checkbox').getProperty('checked'));
2565 settings
.set('lsd', $('lsd_checkbox').getProperty('checked'));
2566 settings
.set('encryption', $('encryption_select').getSelected()[0].getProperty('value'));
2567 settings
.set('anonymous_mode', $('anonymous_mode_checkbox').getProperty('checked'));
2569 settings
.set('max_active_checking_torrents', $('maxActiveCheckingTorrents').getProperty('value'));
2572 settings
.set('queueing_enabled', $('queueing_checkbox').getProperty('checked'));
2573 if ($('queueing_checkbox').getProperty('checked')) {
2574 const max_active_downloads
= $('max_active_dl_value').getProperty('value').toInt();
2575 if (isNaN(max_active_downloads
) || max_active_downloads
< -1) {
2576 alert("QBT_TR(Maximum active downloads must be greater than -1.)QBT_TR[CONTEXT=HttpServer]");
2579 settings
.set('max_active_downloads', max_active_downloads
);
2580 const max_active_uploads
= $('max_active_up_value').getProperty('value').toInt();
2581 if (isNaN(max_active_uploads
) || max_active_uploads
< -1) {
2582 alert("QBT_TR(Maximum active uploads must be greater than -1.)QBT_TR[CONTEXT=HttpServer]");
2585 settings
.set('max_active_uploads', max_active_uploads
);
2586 const max_active_torrents
= $('max_active_to_value').getProperty('value').toInt();
2587 if (isNaN(max_active_torrents
) || max_active_torrents
< -1) {
2588 alert("QBT_TR(Maximum active torrents must be greater than -1.)QBT_TR[CONTEXT=HttpServer]");
2591 settings
.set('max_active_torrents', max_active_torrents
);
2592 settings
.set('dont_count_slow_torrents', $('dont_count_slow_torrents_checkbox').getProperty('checked'));
2593 const dl_rate_threshold
= $('dl_rate_threshold').getProperty('value').toInt();
2594 if (isNaN(dl_rate_threshold
) || (dl_rate_threshold
< 1)) {
2595 alert("QBT_TR(Download rate threshold must be greater than 0.)QBT_TR[CONTEXT=HttpServer]");
2598 settings
.set('slow_torrent_dl_rate_threshold', dl_rate_threshold
);
2599 const ul_rate_threshold
= $('ul_rate_threshold').getProperty('value').toInt();
2600 if (isNaN(ul_rate_threshold
) || (ul_rate_threshold
< 1)) {
2601 alert("QBT_TR(Upload rate threshold must be greater than 0.)QBT_TR[CONTEXT=HttpServer]");
2604 settings
.set('slow_torrent_ul_rate_threshold', ul_rate_threshold
);
2605 const torrent_inactive_timer
= $('torrent_inactive_timer').getProperty('value').toInt();
2606 if (isNaN(torrent_inactive_timer
) || (torrent_inactive_timer
< 1)) {
2607 alert("QBT_TR(Torrent inactivity timer must be greater than 0.)QBT_TR[CONTEXT=HttpServer]");
2610 settings
.set('slow_torrent_inactive_timer', torrent_inactive_timer
);
2613 // Share Ratio Limiting
2615 if ($('max_ratio_checkbox').getProperty('checked')) {
2616 max_ratio
= $('max_ratio_value').getProperty('value').toFloat();
2617 if (isNaN(max_ratio
) || (max_ratio
< 0) || (max_ratio
> 9998)) {
2618 alert("QBT_TR(Share ratio limit must be between 0 and 9998.)QBT_TR[CONTEXT=HttpServer]");
2622 settings
.set('max_ratio_enabled', $('max_ratio_checkbox').getProperty('checked'));
2623 settings
.set('max_ratio', max_ratio
);
2625 let max_seeding_time
= -1;
2626 if ($('max_seeding_time_checkbox').getProperty('checked')) {
2627 max_seeding_time
= $('max_seeding_time_value').getProperty('value').toInt();
2628 if (isNaN(max_seeding_time
) || (max_seeding_time
< 0) || (max_seeding_time
> 525600)) {
2629 alert("QBT_TR(Seeding time limit must be between 0 and 525600 minutes.)QBT_TR[CONTEXT=HttpServer]");
2633 settings
.set('max_seeding_time_enabled', $('max_seeding_time_checkbox').getProperty('checked'));
2634 settings
.set('max_seeding_time', max_seeding_time
);
2635 settings
.set('max_ratio_act', $('max_ratio_act').getProperty('value').toInt());
2637 let max_inactive_seeding_time
= -1;
2638 if ($('max_inactive_seeding_time_checkbox').getProperty('checked')) {
2639 max_inactive_seeding_time
= $('max_inactive_seeding_time_value').getProperty('value').toInt();
2640 if (isNaN(max_inactive_seeding_time
) || (max_inactive_seeding_time
< 0) || (max_inactive_seeding_time
> 525600)) {
2641 alert("QBT_TR(Seeding time limit must be between 0 and 525600 minutes.)QBT_TR[CONTEXT=HttpServer]");
2645 settings
.set('max_inactive_seeding_time_enabled', $('max_inactive_seeding_time_checkbox').getProperty('checked'));
2646 settings
.set('max_inactive_seeding_time', max_inactive_seeding_time
);
2647 settings
.set('max_ratio_act', $('max_ratio_act').getProperty('value').toInt());
2650 settings
.set('add_trackers_enabled', $('add_trackers_checkbox').getProperty('checked'));
2651 settings
.set('add_trackers', $('add_trackers_textarea').getProperty('value'));
2654 settings
.set('rss_processing_enabled', $('enable_fetching_rss_feeds_checkbox').getProperty('checked'));
2655 settings
.set('rss_refresh_interval', $('feed_refresh_interval').getProperty('value'));
2656 settings
.set('rss_fetch_delay', $('feedFetchDelay').getProperties('value'));
2657 settings
.set('rss_max_articles_per_feed', $('maximum_article_number').getProperty('value'));
2658 settings
.set('rss_auto_downloading_enabled', $('enable_auto_downloading_rss_torrents_checkbox').getProperty('checked'));
2659 settings
.set('rss_download_repack_proper_episodes', $('downlock_repack_proper_episodes').getProperty('checked'));
2660 settings
.set('rss_smart_episode_filters', $('rss_filter_textarea').getProperty('value'));
2664 settings
.set('locale', $('locale_select').getProperty('value'));
2665 settings
.set('performance_warning', $('performanceWarning').getProperty('checked'));
2668 settings
.set('web_ui_domain_list', $('webui_domain_textarea').getProperty('value'));
2669 const web_ui_address
= $('webui_address_value').getProperty('value').toString();
2670 const web_ui_port
= $('webui_port_value').getProperty('value').toInt();
2671 if (isNaN(web_ui_port
) || web_ui_port
< 1 || web_ui_port
> 65535) {
2672 alert("QBT_TR(The port used for the Web UI must be between 1 and 65535.)QBT_TR[CONTEXT=HttpServer]");
2675 settings
.set('web_ui_address', web_ui_address
);
2676 settings
.set('web_ui_port', web_ui_port
);
2677 settings
.set('web_ui_upnp', $('webui_upnp_checkbox').getProperty('checked'));
2679 const useHTTPS
= $('use_https_checkbox').getProperty('checked');
2680 settings
.set('use_https', useHTTPS
);
2682 const httpsCertificate
= $('ssl_cert_text').getProperty('value');
2683 settings
.set('web_ui_https_cert_path', httpsCertificate
);
2684 if (useHTTPS
&& (httpsCertificate
.length
=== 0)) {
2685 alert("QBT_TR(HTTPS certificate should not be empty)QBT_TR[CONTEXT=OptionsDialog]");
2689 const httpsKey
= $('ssl_key_text').getProperty('value');
2690 settings
.set('web_ui_https_key_path', httpsKey
);
2691 if (useHTTPS
&& (httpsKey
.length
=== 0)) {
2692 alert("QBT_TR(HTTPS key should not be empty)QBT_TR[CONTEXT=OptionsDialog]");
2697 const web_ui_username
= $('webui_username_text').getProperty('value');
2698 if (web_ui_username
.length
< 3) {
2699 alert("QBT_TR(The Web UI username must be at least 3 characters long.)QBT_TR[CONTEXT=OptionsDialog]");
2702 const web_ui_password
= $('webui_password_text').getProperty('value');
2703 if ((0 < web_ui_password
.length
) && (web_ui_password
.length
< 6)) {
2704 alert("QBT_TR(The Web UI password must be at least 6 characters long.)QBT_TR[CONTEXT=OptionsDialog]");
2708 settings
.set('web_ui_username', web_ui_username
);
2709 if (web_ui_password
.length
> 0)
2710 settings
.set('web_ui_password', web_ui_password
);
2711 settings
.set('bypass_local_auth', $('bypass_local_auth_checkbox').getProperty('checked'));
2712 settings
.set('bypass_auth_subnet_whitelist_enabled', $('bypass_auth_subnet_whitelist_checkbox').getProperty('checked'));
2713 settings
.set('bypass_auth_subnet_whitelist', $('bypass_auth_subnet_whitelist_textarea').getProperty('value'));
2714 settings
.set('web_ui_max_auth_fail_count', $('webUIMaxAuthFailCountInput').getProperty('value'));
2715 settings
.set('web_ui_ban_duration', $('webUIBanDurationInput').getProperty('value'));
2716 settings
.set('web_ui_session_timeout', $('webUISessionTimeoutInput').getProperty('value'));
2718 // Use alternative Web UI
2719 const alternative_webui_enabled
= $('use_alt_webui_checkbox').getProperty('checked');
2720 const webui_files_location_textarea
= $('webui_files_location_textarea').getProperty('value');
2721 if (alternative_webui_enabled
&& (webui_files_location_textarea
.trim() === "")) {
2722 alert("QBT_TR(The alternative Web UI files location cannot be blank.)QBT_TR[CONTEXT=OptionsDialog]");
2725 settings
.set('alternative_webui_enabled', alternative_webui_enabled
);
2726 settings
.set('alternative_webui_path', webui_files_location_textarea
);
2729 settings
.set('web_ui_clickjacking_protection_enabled', $('clickjacking_protection_checkbox').getProperty('checked'));
2730 settings
.set('web_ui_csrf_protection_enabled', $('csrf_protection_checkbox').getProperty('checked'));
2731 settings
.set('web_ui_secure_cookie_enabled', $('secureCookieCheckbox').getProperty('checked'));
2732 settings
.set('web_ui_host_header_validation_enabled', $('host_header_validation_checkbox').getProperty('checked'));
2734 // Custom HTTP headers
2735 settings
.set('web_ui_use_custom_http_headers_enabled', $('webUIUseCustomHTTPHeadersCheckbox').getProperty('checked'));
2736 settings
.set('web_ui_custom_http_headers', $('webUICustomHTTPHeadersTextarea').getProperty('value'));
2739 settings
.set('web_ui_reverse_proxy_enabled', $('webUIReverseProxySupportCheckbox').getProperty('checked'));
2740 settings
.set('web_ui_reverse_proxies_list', $('webUIReverseProxiesListTextarea').getProperty('value'));
2742 // Update my dynamic domain name
2743 settings
.set('dyndns_enabled', $('use_dyndns_checkbox').getProperty('checked'));
2744 settings
.set('dyndns_service', $('dyndns_select').getProperty('value'));
2745 settings
.set('dyndns_domain', $('dyndns_domain_text').getProperty('value'));
2746 settings
.set('dyndns_username', $('dyndns_username_text').getProperty('value'));
2747 settings
.set('dyndns_password', $('dyndns_password_text').getProperty('value'));
2749 // Update advanced settings
2750 // qBittorrent section
2751 settings
.set('resume_data_storage_type', $('resumeDataStorageType').getProperty('value'));
2752 settings
.set('memory_working_set_limit', $('memoryWorkingSetLimit').getProperty('value'));
2753 settings
.set('current_network_interface', $('networkInterface').getProperty('value'));
2754 settings
.set('current_interface_address', $('optionalIPAddressToBind').getProperty('value'));
2755 settings
.set('save_resume_data_interval', $('saveResumeDataInterval').getProperty('value'));
2756 settings
.set('torrent_file_size_limit', ($('torrentFileSizeLimit').getProperty('value') * 1024 * 1024));
2757 settings
.set('recheck_completed_torrents', $('recheckTorrentsOnCompletion').getProperty('checked'));
2758 settings
.set('refresh_interval', $('refreshInterval').getProperty('value'));
2759 settings
.set('resolve_peer_countries', $('resolvePeerCountries').getProperty('checked'));
2760 settings
.set('reannounce_when_address_changed', $('reannounceWhenAddressChanged').getProperty('checked'));
2762 // libtorrent section
2763 settings
.set('bdecode_depth_limit', $('bdecodeDepthLimit').getProperty('value'));
2764 settings
.set('bdecode_token_limit', $('bdecodeTokenLimit').getProperty('value'));
2765 settings
.set('async_io_threads', $('asyncIOThreads').getProperty('value'));
2766 settings
.set('hashing_threads', $('hashingThreads').getProperty('value'));
2767 settings
.set('file_pool_size', $('filePoolSize').getProperty('value'));
2768 settings
.set('checking_memory_use', $('outstandMemoryWhenCheckingTorrents').getProperty('value'));
2769 settings
.set('disk_cache', $('diskCache').getProperty('value'));
2770 settings
.set('disk_cache_ttl', $('diskCacheExpiryInterval').getProperty('value'));
2771 settings
.set('disk_queue_size', ($('diskQueueSize').getProperty('value') * 1024));
2772 settings
.set('disk_io_type', $('diskIOType').getProperty('value'));
2773 settings
.set('disk_io_read_mode', $('diskIOReadMode').getProperty('value'));
2774 settings
.set('disk_io_write_mode', $('diskIOWriteMode').getProperty('value'));
2775 settings
.set('enable_coalesce_read_write', $('coalesceReadsAndWrites').getProperty('checked'));
2776 settings
.set('enable_piece_extent_affinity', $('pieceExtentAffinity').getProperty('checked'));
2777 settings
.set('enable_upload_suggestions', $('sendUploadPieceSuggestions').getProperty('checked'));
2778 settings
.set('send_buffer_watermark', $('sendBufferWatermark').getProperty('value'));
2779 settings
.set('send_buffer_low_watermark', $('sendBufferLowWatermark').getProperty('value'));
2780 settings
.set('send_buffer_watermark_factor', $('sendBufferWatermarkFactor').getProperty('value'));
2781 settings
.set('connection_speed', $('connectionSpeed').getProperty('value'));
2782 settings
.set('socket_send_buffer_size', ($('socketSendBufferSize').getProperty('value') * 1024));
2783 settings
.set('socket_receive_buffer_size', ($('socketReceiveBufferSize').getProperty('value') * 1024));
2784 settings
.set('socket_backlog_size', $('socketBacklogSize').getProperty('value'));
2785 settings
.set('outgoing_ports_min', $('outgoingPortsMin').getProperty('value'));
2786 settings
.set('outgoing_ports_max', $('outgoingPortsMax').getProperty('value'));
2787 settings
.set('upnp_lease_duration', $('UPnPLeaseDuration').getProperty('value'));
2788 settings
.set('peer_tos', $('peerToS').getProperty('value'));
2789 settings
.set('utp_tcp_mixed_mode', $('utpTCPMixedModeAlgorithm').getProperty('value'));
2790 settings
.set('idn_support_enabled', $('IDNSupportCheckbox').getProperty('checked'));
2791 settings
.set('enable_multi_connections_from_same_ip', $('allowMultipleConnectionsFromTheSameIPAddress').getProperty('checked'));
2792 settings
.set('validate_https_tracker_certificate', $('validateHTTPSTrackerCertificate').getProperty('checked'));
2793 settings
.set('ssrf_mitigation', $('mitigateSSRF').getProperty('checked'));
2794 settings
.set('block_peers_on_privileged_ports', $('blockPeersOnPrivilegedPorts').getProperty('checked'));
2795 settings
.set('enable_embedded_tracker', $('enableEmbeddedTracker').getProperty('checked'));
2796 settings
.set('embedded_tracker_port', $('embeddedTrackerPort').getProperty('value'));
2797 settings
.set('embedded_tracker_port_forwarding', $('embeddedTrackerPortForwarding').getProperty('checked'));
2798 settings
.set('mark_of_the_web', $('markOfTheWeb').getProperty('checked'));
2799 settings
.set('python_executable_path', $('pythonExecutablePath').getProperty('value'));
2800 settings
.set('upload_slots_behavior', $('uploadSlotsBehavior').getProperty('value'));
2801 settings
.set('upload_choking_algorithm', $('uploadChokingAlgorithm').getProperty('value'));
2802 settings
.set('announce_to_all_trackers', $('announceAllTrackers').getProperty('checked'));
2803 settings
.set('announce_to_all_tiers', $('announceAllTiers').getProperty('checked'));
2804 settings
.set('announce_ip', $('announceIP').getProperty('value'));
2805 settings
.set('max_concurrent_http_announces', $('maxConcurrentHTTPAnnounces').getProperty('value'));
2806 settings
.set('stop_tracker_timeout', $('stopTrackerTimeout').getProperty('value'));
2807 settings
.set('peer_turnover', $('peerTurnover').getProperty('value'));
2808 settings
.set('peer_turnover_cutoff', $('peerTurnoverCutoff').getProperty('value'));
2809 settings
.set('peer_turnover_interval', $('peerTurnoverInterval').getProperty('value'));
2810 settings
.set('request_queue_size', $('requestQueueSize').getProperty('value'));
2811 settings
.set('dht_bootstrap_nodes', $('dhtBootstrapNodes').getProperty('value'));
2812 settings
.set('i2p_inbound_quantity', $('i2pInboundQuantity').getProperty('value'));
2813 settings
.set('i2p_outbound_quantity', $('i2pOutboundQuantity').getProperty('value'));
2814 settings
.set('i2p_inbound_length', $('i2pInboundLength').getProperty('value'));
2815 settings
.set('i2p_outbound_length', $('i2pOutboundLength').getProperty('value'));
2818 const json_str
= JSON
.encode(settings
);
2821 url
: 'api/v2/app/setPreferences',
2826 onFailure: function() {
2827 alert("QBT_TR(Unable to save program preferences, qBittorrent is probably unreachable.)QBT_TR[CONTEXT=HttpServer]");
2828 window
.parent
.closeWindows();
2830 onSuccess: function() {
2832 window
.parent
.location
.reload();
2833 window
.parent
.closeWindows();
2838 $('networkInterface').addEvent('change', function() {
2839 updateInterfaceAddresses($(this).getProperty('value'), '');
2847 Object
.freeze(window
.qBittorrent
.Preferences
);