mirror of
https://github.com/qbittorrent/qBittorrent.git
synced 2026-01-04 14:42:29 -06:00
This PR exposes the LibTorrent Peer Turnover Settings in qBT Advanced Settings in order to allow users to adjust how frequently slow and uninteresting connections are closed to allow potentially better / faster connections to be made. The default settings are to turnover peers when the number of connections is at least 90% of allowed global or per torrent connections, and to disconnect the least attractive 4% of these connections every 5 minutes. See https://www.libtorrent.org/reference-Settings.html#peer_turnover
2309 lines
127 KiB
HTML
2309 lines
127 KiB
HTML
<div id="DownloadsTab" class="PrefTab">
|
|
<fieldset class="settings">
|
|
<legend>QBT_TR(When adding a torrent)QBT_TR[CONTEXT=OptionsDialog]</legend>
|
|
<div class="formRow">
|
|
<input type="checkbox" id="createsubfolder_checkbox" />
|
|
<label for="createsubfolder_checkbox">QBT_TR(Keep top-level folder)QBT_TR[CONTEXT=OptionsDialog]</label>
|
|
</div>
|
|
<div class="formRow">
|
|
<input type="checkbox" id="dontstartdownloads_checkbox" />
|
|
<label for="dontstartdownloads_checkbox">QBT_TR(Do not start the download automatically)QBT_TR[CONTEXT=OptionsDialog]</label>
|
|
</div>
|
|
<div class="formRow">
|
|
<input type="checkbox" id="deletetorrentfileafter_checkbox" />
|
|
<label for="deletetorrentfileafter_checkbox">QBT_TR(Delete .torrent files afterwards)QBT_TR[CONTEXT=OptionsDialog]</label>
|
|
</div>
|
|
</fieldset>
|
|
|
|
<div class="formRow">
|
|
<input type="checkbox" id="preallocateall_checkbox" />
|
|
<label for="preallocateall_checkbox">QBT_TR(Pre-allocate disk space for all files)QBT_TR[CONTEXT=OptionsDialog]</label>
|
|
</div>
|
|
<div class="formRow">
|
|
<span id="appendexttr">
|
|
<input type="checkbox" id="appendext_checkbox"/>
|
|
<label for="appendext_checkbox">QBT_TR(Append .!qB extension to incomplete files)QBT_TR[CONTEXT=OptionsDialog]</label>
|
|
</span>
|
|
</div>
|
|
|
|
<fieldset class="settings">
|
|
<legend>QBT_TR(Saving Management)QBT_TR[CONTEXT=HttpServer]</legend>
|
|
<table>
|
|
<tr>
|
|
<td>
|
|
<label>QBT_TR(Default Torrent Management Mode:)QBT_TR[CONTEXT=OptionsDialog]</label>
|
|
</td>
|
|
<td>
|
|
<select id="default_tmm_combobox">
|
|
<option value="false" selected>QBT_TR(Manual)QBT_TR[CONTEXT=OptionsDialog]</option>
|
|
<option value="true">QBT_TR(Automatic)QBT_TR[CONTEXT=OptionsDialog]</option>
|
|
</select>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td>
|
|
<label>QBT_TR(When Torrent Category changed:)QBT_TR[CONTEXT=OptionsDialog]</label>
|
|
</td>
|
|
<td>
|
|
<select id="torrent_changed_tmm_combobox">
|
|
<option value="true">QBT_TR(Relocate torrent)QBT_TR[CONTEXT=OptionsDialog]</option>
|
|
<option value="false" selected>QBT_TR(Switch torrent to Manual Mode)QBT_TR[CONTEXT=OptionsDialog]</option>
|
|
</select>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td>
|
|
<label>QBT_TR(When Default Save Path changed:)QBT_TR[CONTEXT=OptionsDialog]</label>
|
|
</td>
|
|
<td>
|
|
<select id="save_path_changed_tmm_combobox">
|
|
<option value="true">QBT_TR(Relocate affected torrents)QBT_TR[CONTEXT=OptionsDialog]</option>
|
|
<option value="false" selected>QBT_TR(Switch affected torrents to Manual Mode)QBT_TR[CONTEXT=OptionsDialog]</option>
|
|
</select>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td>
|
|
<label>QBT_TR(When Category Save Path changed:)QBT_TR[CONTEXT=OptionsDialog]</label>
|
|
</td>
|
|
<td>
|
|
<select id="category_changed_tmm_combobox">
|
|
<option value="true">QBT_TR(Relocate affected torrents)QBT_TR[CONTEXT=OptionsDialog]</option>
|
|
<option value="false" selected>QBT_TR(Switch affected torrents to Manual Mode)QBT_TR[CONTEXT=OptionsDialog]</option>
|
|
</select>
|
|
</td>
|
|
</tr>
|
|
</table>
|
|
<table>
|
|
<tr>
|
|
<td>
|
|
<label for="savepath_text">QBT_TR(Default Save Path:)QBT_TR[CONTEXT=OptionsDialog]</label>
|
|
</td>
|
|
<td>
|
|
<input type="text" id="savepath_text" autocorrect="off" autocapitalize="none" />
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td>
|
|
<input type="checkbox" id="temppath_checkbox" onclick="qBittorrent.Preferences.updateTempDirEnabled();" />
|
|
<label for="temppath_checkbox">QBT_TR(Keep incomplete torrents in:)QBT_TR[CONTEXT=OptionsDialog]</label>
|
|
</td>
|
|
<td>
|
|
<input type="text" id="temppath_text" autocorrect="off" autocapitalize="none" />
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td>
|
|
<input type="checkbox" id="exportdir_checkbox" onclick="qBittorrent.Preferences.updateExportDirEnabled();" />
|
|
<label for="exportdir_checkbox">QBT_TR(Copy .torrent files to:)QBT_TR[CONTEXT=OptionsDialog]</label>
|
|
</td>
|
|
<td>
|
|
<input type="text" id="exportdir_text" autocorrect="off" autocapitalize="none" />
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td>
|
|
<input type="checkbox" id="exportdirfin_checkbox" onclick="qBittorrent.Preferences.updateExportDirFinEnabled();" />
|
|
<label for="exportdirfin_checkbox">QBT_TR(Copy .torrent files for finished downloads to:)QBT_TR[CONTEXT=OptionsDialog]</label>
|
|
</td>
|
|
<td>
|
|
<input type="text" id="exportdirfin_text" autocorrect="off" autocapitalize="none" />
|
|
</td>
|
|
</tr>
|
|
</table>
|
|
</fieldset>
|
|
|
|
<fieldset class="settings">
|
|
<legend>QBT_TR(Automatically add torrents from:)QBT_TR[CONTEXT=OptionsDialog]</legend>
|
|
<table id="watched_folders_tab" style="border: 1px solid black;">
|
|
<thead>
|
|
<tr>
|
|
<th>QBT_TR(Monitored Folder)QBT_TR[CONTEXT=ScanFoldersModel]</th>
|
|
<th>QBT_TR(Override Save Location)QBT_TR[CONTEXT=ScanFoldersModel]</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody></tbody>
|
|
<tfoot>
|
|
<tr>
|
|
<td style="padding-top:4px;"><input type="text" id="new_watch_folder_txt" autocorrect="off" autocapitalize="none" /></td>
|
|
<td style="padding-top:4px;">
|
|
<div class="select-watched-folder-editable">
|
|
<select id="new_watch_folder_select" onchange="qBittorrent.Preferences.changeWatchFolderSelect(this)">
|
|
<option value="watch_folder">QBT_TR(Monitored folder)QBT_TR[CONTEXT=ScanFoldersModel]</option>
|
|
<option selected value="default_folder">QBT_TR(Default save location)QBT_TR[CONTEXT=ScanFoldersModel]</option>
|
|
<option value="other">QBT_TR(Other...)QBT_TR[CONTEXT=HttpServer]</option>
|
|
</select>
|
|
<input id="new_watch_folder_other_txt" type="text" value="QBT_TR(Monitored folder)QBT_TR[CONTEXT=ScanFoldersModel]" hidden />
|
|
<img src="icons/list-add.svg" alt="Add" style="padding-left:170px;width:16px;cursor:pointer;" onclick="qBittorrent.Preferences.addWatchFolder();" />
|
|
</div>
|
|
</td>
|
|
</tr>
|
|
</tfoot>
|
|
</table>
|
|
</fieldset>
|
|
|
|
<fieldset class="settings">
|
|
<legend>
|
|
<input type="checkbox" id="mail_notification_checkbox" onclick="qBittorrent.Preferences.updateMailNotification();" />
|
|
<label for="mail_notification_checkbox">QBT_TR(Email notification upon download completion)QBT_TR[CONTEXT=OptionsDialog]</label>
|
|
</legend>
|
|
<table>
|
|
<tr>
|
|
<td>
|
|
<label for="src_email_txt">QBT_TR(From:)QBT_TR[CONTEXT=OptionsDialog]</label>
|
|
</td>
|
|
<td>
|
|
<input type="text" id="src_email_txt" />
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td>
|
|
<label for="dest_email_txt">QBT_TR(To:)QBT_TR[CONTEXT=OptionsDialog]</label>
|
|
</td>
|
|
<td>
|
|
<input type="text" id="dest_email_txt" />
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td>
|
|
<label for="smtp_server_txt">QBT_TR(SMTP server:)QBT_TR[CONTEXT=OptionsDialog]</label>
|
|
</td>
|
|
<td>
|
|
<input type="text" id="smtp_server_txt" />
|
|
</td>
|
|
</tr>
|
|
</table>
|
|
<div class="formRow">
|
|
<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>
|
|
</div>
|
|
<fieldset class="settings">
|
|
<legend>
|
|
<input type="checkbox" id="mail_auth_checkbox" onclick="qBittorrent.Preferences.updateMailAuthSettings();" />
|
|
<label for="mail_auth_checkbox">QBT_TR(Authentication)QBT_TR[CONTEXT=OptionsDialog]</label>
|
|
</legend>
|
|
<table>
|
|
<tr>
|
|
<td>
|
|
<label for="mail_username_text">QBT_TR(Username:)QBT_TR[CONTEXT=OptionsDialog]</label>
|
|
</td>
|
|
<td>
|
|
<input type="text" id="mail_username_text" />
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td>
|
|
<label for="mail_password_text">QBT_TR(Password:)QBT_TR[CONTEXT=OptionsDialog]</label>
|
|
</td>
|
|
<td>
|
|
<input type="password" id="mail_password_text" />
|
|
</td>
|
|
</tr>
|
|
</table>
|
|
</fieldset>
|
|
</fieldset>
|
|
|
|
<fieldset class="settings">
|
|
<legend>
|
|
<input type="checkbox" id="autorun_checkbox" onclick="qBittorrent.Preferences.updateAutoRun();" />
|
|
<label for="autorun_checkbox">QBT_TR(Run external program on torrent completion)QBT_TR[CONTEXT=OptionsDialog]</label>
|
|
</legend>
|
|
<div class="formRow">
|
|
<input type="text" id="autorunProg_txt" style="width: 400px;" />
|
|
</div>
|
|
<div style="font-style: italic;">QBT_TR(Supported parameters (case sensitive):)QBT_TR[CONTEXT=OptionsDialog]
|
|
<ul>
|
|
<li>QBT_TR(%N: Torrent name)QBT_TR[CONTEXT=OptionsDialog]</li>
|
|
<li>QBT_TR(%L: Category)QBT_TR[CONTEXT=OptionsDialog]</li>
|
|
<li>QBT_TR(%G: Tags (separated by comma))QBT_TR[CONTEXT=OptionsDialog]</li>
|
|
<li>QBT_TR(%F: Content path (same as root path for multifile torrent))QBT_TR[CONTEXT=OptionsDialog]</li>
|
|
<li>QBT_TR(%R: Root path (first torrent subdirectory path))QBT_TR[CONTEXT=OptionsDialog]</li>
|
|
<li>QBT_TR(%D: Save path)QBT_TR[CONTEXT=OptionsDialog]</li>
|
|
<li>QBT_TR(%C: Number of files)QBT_TR[CONTEXT=OptionsDialog]</li>
|
|
<li>QBT_TR(%Z: Torrent size (bytes))QBT_TR[CONTEXT=OptionsDialog]</li>
|
|
<li>QBT_TR(%T: Current tracker)QBT_TR[CONTEXT=OptionsDialog]</li>
|
|
<li>QBT_TR(%I: Info hash)QBT_TR[CONTEXT=OptionsDialog]</li>
|
|
</ul>
|
|
QBT_TR(Tip: Encapsulate parameter with quotation marks to avoid text being cut off at whitespace (e.g., "%N"))QBT_TR[CONTEXT=OptionsDialog]
|
|
</div>
|
|
</fieldset>
|
|
</div>
|
|
|
|
<div id="ConnectionTab" class="PrefTab invisible">
|
|
<div class="formRow">
|
|
<label>QBT_TR(Enabled protocol:)QBT_TR[CONTEXT=OptionsDialog]</label>
|
|
<select id="enable_protocol_combobox">
|
|
<option value="0" selected>QBT_TR(TCP and μTP)QBT_TR[CONTEXT=OptionsDialog]</option>
|
|
<option value="1">TCP</option>
|
|
<option value="2">μTP</option>
|
|
</select>
|
|
</div>
|
|
<fieldset class="settings">
|
|
<legend>QBT_TR(Listening Port)QBT_TR[CONTEXT=OptionsDialog]</legend>
|
|
<div class="formRow">
|
|
<label for="port_value">QBT_TR(Port used for incoming connections:)QBT_TR[CONTEXT=OptionsDialog]</label>
|
|
<input type="text" id="port_value" style="width: 4em;" />
|
|
<button style="margin-left: 1em;" onclick="qBittorrent.Preferences.generateRandomPort();">Random</button>
|
|
</div>
|
|
<div class="formRow">
|
|
<input type="checkbox" id="upnp_checkbox" />
|
|
<label for="upnp_checkbox">QBT_TR(Use UPnP / NAT-PMP port forwarding from my router)QBT_TR[CONTEXT=OptionsDialog]</label>
|
|
</div>
|
|
<div class="formRow">
|
|
<input type="checkbox" id="random_port_checkbox" onclick="qBittorrent.Preferences.updatePortValueEnabled();" />
|
|
<label for="random_port_checkbox">QBT_TR(Use different port on each startup)QBT_TR[CONTEXT=OptionsDialog]</label>
|
|
</div>
|
|
</fieldset>
|
|
|
|
<fieldset class="settings">
|
|
<legend>QBT_TR(Connections Limits)QBT_TR[CONTEXT=OptionsDialog]</legend>
|
|
<table>
|
|
<tr>
|
|
<td>
|
|
<input type="checkbox" id="max_connec_checkbox" onclick="qBittorrent.Preferences.updateMaxConnecEnabled();" />
|
|
<label for="max_connec_checkbox">QBT_TR(Global maximum number of connections:)QBT_TR[CONTEXT=OptionsDialog]</label>
|
|
</td>
|
|
<td><input type="text" id="max_connec_value" style="width: 4em;" /></td>
|
|
</tr>
|
|
<tr>
|
|
<td>
|
|
<input type="checkbox" id="max_connec_per_torrent_checkbox" onclick="qBittorrent.Preferences.updateMaxConnecPerTorrentEnabled();" />
|
|
<label for="max_connec_per_torrent_checkbox">QBT_TR(Maximum number of connections per torrent:)QBT_TR[CONTEXT=OptionsDialog]</label>
|
|
</td>
|
|
<td><input type="text" id="max_connec_per_torrent_value" style="width: 4em;" /></td>
|
|
</tr>
|
|
<tr>
|
|
<td>
|
|
<input type="checkbox" id="max_uploads_checkbox" onclick="qBittorrent.Preferences.updateMaxUploadsEnabled();" />
|
|
<label for="max_uploads_checkbox">QBT_TR(Global maximum number of upload slots:)QBT_TR[CONTEXT=OptionsDialog]</label>
|
|
</td>
|
|
<td><input type="text" id="max_uploads_value" style="width: 4em;" /></td>
|
|
</tr>
|
|
<tr>
|
|
<td>
|
|
<input type="checkbox" id="max_uploads_per_torrent_checkbox" onclick="qBittorrent.Preferences.updateMaxUploadsPerTorrentEnabled();" />
|
|
<label for="max_uploads_per_torrent_checkbox">QBT_TR(Maximum number of upload slots per torrent:)QBT_TR[CONTEXT=OptionsDialog]</label>
|
|
</td>
|
|
<td><input type="text" id="max_uploads_per_torrent_value" style="width: 4em;" /></td>
|
|
</tr>
|
|
</table>
|
|
</fieldset>
|
|
|
|
<fieldset class="settings">
|
|
<legend>QBT_TR(Proxy Server)QBT_TR[CONTEXT=OptionsDialog]</legend>
|
|
<table>
|
|
<tr>
|
|
<td>
|
|
<label for="peer_proxy_type_select">QBT_TR(Type:)QBT_TR[CONTEXT=OptionsDialog]</label>
|
|
</td>
|
|
<td>
|
|
<select id="peer_proxy_type_select" onchange="qBittorrent.Preferences.updatePeerProxySettings();">
|
|
<option value="none">QBT_TR((None))QBT_TR[CONTEXT=OptionsDialog]</option>
|
|
<option value="socks4">QBT_TR(SOCKS4)QBT_TR[CONTEXT=OptionsDialog]</option>
|
|
<option value="socks5">QBT_TR(SOCKS5)QBT_TR[CONTEXT=OptionsDialog]</option>
|
|
<option value="http">QBT_TR(HTTP)QBT_TR[CONTEXT=OptionsDialog]</option>
|
|
</select>
|
|
</td>
|
|
<td>
|
|
<label for="peer_proxy_host_text">QBT_TR(Host:)QBT_TR[CONTEXT=OptionsDialog]</label>
|
|
</td>
|
|
<td>
|
|
<input type="text" id="peer_proxy_host_text" />
|
|
</td>
|
|
<td>
|
|
<label for="peer_proxy_port_value">QBT_TR(Port:)QBT_TR[CONTEXT=OptionsDialog]</label>
|
|
</td>
|
|
<td>
|
|
<input type="text" id="peer_proxy_port_value" style="width: 4em;" />
|
|
</td>
|
|
</tr>
|
|
</table>
|
|
<div class="formRow">
|
|
<input type="checkbox" id="use_peer_proxy_checkbox" />
|
|
<label for="use_peer_proxy_checkbox">QBT_TR(Use proxy for peer connections)QBT_TR[CONTEXT=OptionsDialog]</label>
|
|
</div>
|
|
<div class="formRow">
|
|
<input type="checkbox" id="proxy_only_for_torrents_checkbox" />
|
|
<label for="proxy_only_for_torrents_checkbox">QBT_TR(Use proxy only for torrents)QBT_TR[CONTEXT=OptionsDialog]</label>
|
|
</div>
|
|
<fieldset class="settings">
|
|
<legend>
|
|
<input type="checkbox" id="peer_proxy_auth_checkbox" onclick="qBittorrent.Preferences.updatePeerProxyAuthSettings();" />
|
|
<label for="peer_proxy_auth_checkbox">QBT_TR(Authentication)QBT_TR[CONTEXT=OptionsDialog]</label>
|
|
</legend>
|
|
<table>
|
|
<tr>
|
|
<td>
|
|
<label for="peer_proxy_username_text">QBT_TR(Username:)QBT_TR[CONTEXT=OptionsDialog]</label>
|
|
</td>
|
|
<td>
|
|
<input type="text" id="peer_proxy_username_text" />
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td>
|
|
<label for="peer_proxy_password_text">QBT_TR(Password:)QBT_TR[CONTEXT=OptionsDialog]</label>
|
|
</td>
|
|
<td>
|
|
<input type="password" id="peer_proxy_password_text" />
|
|
</td>
|
|
</tr>
|
|
</table>
|
|
<div class="formRow">
|
|
<span>QBT_TR(Info: The password is saved unencrypted)QBT_TR[CONTEXT=OptionsDialog]</span>
|
|
</div>
|
|
</fieldset>
|
|
</fieldset>
|
|
|
|
<fieldset class="settings">
|
|
<legend>
|
|
<input type="checkbox" id="ipfilter_enabled_checkbox" onclick="qBittorrent.Preferences.updateFilterSettings();" />
|
|
<label for="ipfilter_enabled_checkbox">QBT_TR(IP Filtering)QBT_TR[CONTEXT=OptionsDialog]</label>
|
|
</legend>
|
|
<div class="formRow">
|
|
<label for="ipfilter_text">QBT_TR(Filter path (.dat, .p2p, .p2b):)QBT_TR[CONTEXT=OptionsDialog]</label>
|
|
<input type="text" id="ipfilter_text" />
|
|
</div>
|
|
<div class="formRow">
|
|
<input type="checkbox" id="ipfilter_trackers_checkbox" />
|
|
<label for="ipfilter_trackers_checkbox">QBT_TR(Apply to trackers)QBT_TR[CONTEXT=OptionsDialog]</label>
|
|
</div>
|
|
<div class="formRow">
|
|
<fieldset class="settings">
|
|
<legend>QBT_TR(Manually banned IP addresses...)QBT_TR[CONTEXT=OptionsDialog]</legend>
|
|
<textarea id="banned_IPs_textarea" rows="5" cols="70"></textarea>
|
|
</fieldset>
|
|
</div>
|
|
</fieldset>
|
|
</div>
|
|
|
|
<div id="SpeedTab" class="PrefTab invisible">
|
|
<fieldset class="settings">
|
|
<legend>QBT_TR(Global Rate Limits)QBT_TR[CONTEXT=OptionsDialog]</legend>
|
|
<table>
|
|
<tr>
|
|
<td rowspan="2">
|
|
<img src="icons/slow_off.svg" style="height: 1em;" alt="QBT_TR(Alternative speed limits)QBT_TR[CONTEXT=MainWindow]">
|
|
</td>
|
|
<td><label for="up_limit_value">QBT_TR(Upload:)QBT_TR[CONTEXT=OptionsDialog]</label></td>
|
|
<td><input type="number" id="up_limit_value" style="width: 4em;" min="0" /> QBT_TR(KiB/s)QBT_TR[CONTEXT=OptionsDialog]</td>
|
|
</tr>
|
|
<tr>
|
|
<td><label for="dl_limit_value">QBT_TR(Download:)QBT_TR[CONTEXT=OptionsDialog]</label></td>
|
|
<td><input type="number" id="dl_limit_value" style="width: 4em;" min="0" /> QBT_TR(KiB/s)QBT_TR[CONTEXT=OptionsDialog]</td>
|
|
</tr>
|
|
</table>
|
|
<i>QBT_TR(0 means unlimited)QBT_TR[CONTEXT=OptionsDialog]</i>
|
|
</fieldset>
|
|
|
|
<fieldset class="settings">
|
|
<legend>QBT_TR(Alternative Rate Limits)QBT_TR[CONTEXT=OptionsDialog]</legend>
|
|
<table>
|
|
<tr>
|
|
<td rowspan="2">
|
|
<img src="icons/slow.svg" style="height: 1em;" alt="QBT_TR(Alternative speed limits)QBT_TR[CONTEXT=MainWindow]">
|
|
</td>
|
|
<td><label for="alt_up_limit_value">QBT_TR(Upload:)QBT_TR[CONTEXT=OptionsDialog]</label></td>
|
|
<td><input type="number" id="alt_up_limit_value" style="width: 4em;" min="0" /> QBT_TR(KiB/s)QBT_TR[CONTEXT=OptionsDialog]</td>
|
|
</tr>
|
|
<tr>
|
|
<td><label for="alt_dl_limit_value">QBT_TR(Download:)QBT_TR[CONTEXT=OptionsDialog]</label></td>
|
|
<td><input type="number" id="alt_dl_limit_value" style="width: 4em;" min="0" /> QBT_TR(KiB/s)QBT_TR[CONTEXT=OptionsDialog]</td>
|
|
</tr>
|
|
</table>
|
|
<i>QBT_TR(0 means unlimited)QBT_TR[CONTEXT=OptionsDialog]</i>
|
|
|
|
<fieldset class="settings">
|
|
<legend>
|
|
<input type="checkbox" id="limit_sheduling_checkbox" onclick="qBittorrent.Preferences.updateSchedulingEnabled();" />
|
|
<label for="limit_sheduling_checkbox">QBT_TR(Schedule the use of alternative rate limits)QBT_TR[CONTEXT=OptionsDialog]</label>
|
|
</legend>
|
|
<div class="formRow">
|
|
QBT_TR(From:)QBT_TR[CONTEXT=OptionsDialog]
|
|
<input type="text" id="schedule_from_hour" style="width: 1.5em;" />:<input type="text" id="schedule_from_min" style="width: 1.5em;" /> QBT_TR(To:)QBT_TR[CONTEXT=OptionsDialog]
|
|
<input type="text" id="schedule_to_hour" style="width: 1.5em;" />:<input type="text" id="schedule_to_min" style="width: 1.5em;" />
|
|
</div>
|
|
<div class="formRow">
|
|
QBT_TR(When:)QBT_TR[CONTEXT=OptionsDialog]
|
|
<select id="schedule_freq_select">
|
|
<option value="0">QBT_TR(Every day)QBT_TR[CONTEXT=OptionsDialog]</option>
|
|
<option value="1">QBT_TR(Weekdays)QBT_TR[CONTEXT=OptionsDialog]</option>
|
|
<option value="2">QBT_TR(Weekends)QBT_TR[CONTEXT=OptionsDialog]</option>
|
|
<option value="3">QBT_TR(Monday)QBT_TR[CONTEXT=HttpServer]</option>
|
|
<option value="4">QBT_TR(Tuesday)QBT_TR[CONTEXT=HttpServer]</option>
|
|
<option value="5">QBT_TR(Wednesday)QBT_TR[CONTEXT=HttpServer]</option>
|
|
<option value="6">QBT_TR(Thursday)QBT_TR[CONTEXT=HttpServer]</option>
|
|
<option value="7">QBT_TR(Friday)QBT_TR[CONTEXT=HttpServer]</option>
|
|
<option value="8">QBT_TR(Saturday)QBT_TR[CONTEXT=HttpServer]</option>
|
|
<option value="9">QBT_TR(Sunday)QBT_TR[CONTEXT=HttpServer]</option>
|
|
</select>
|
|
</div>
|
|
</fieldset>
|
|
</fieldset>
|
|
|
|
<fieldset class="settings">
|
|
<legend>QBT_TR(Rate Limits Settings)QBT_TR[CONTEXT=OptionsDialog]</legend>
|
|
<div class="formRow">
|
|
<input type="checkbox" id="limit_utp_rate_checkbox" />
|
|
<label for="limit_utp_rate_checkbox">QBT_TR(Apply rate limit to µTP protocol)QBT_TR[CONTEXT=OptionsDialog]</label>
|
|
</div>
|
|
<div class="formRow">
|
|
<input type="checkbox" id="limit_tcp_overhead_checkbox" />
|
|
<label for="limit_tcp_overhead_checkbox">QBT_TR(Apply rate limit to transport overhead)QBT_TR[CONTEXT=OptionsDialog]</label>
|
|
</div>
|
|
<div class="formRow">
|
|
<input type="checkbox" id="limit_lan_peers_checkbox" />
|
|
<label for="limit_lan_peers_checkbox">QBT_TR(Apply rate limit to peers on LAN)QBT_TR[CONTEXT=OptionsDialog]</label>
|
|
</div>
|
|
</fieldset>
|
|
</div>
|
|
|
|
<div id="BittorrentTab" class="PrefTab invisible">
|
|
<fieldset class="settings">
|
|
<legend>QBT_TR(Privacy)QBT_TR[CONTEXT=OptionsDialog]</legend>
|
|
<div class="formRow">
|
|
<input type="checkbox" id="dht_checkbox" />
|
|
<label for="dht_checkbox">QBT_TR(Enable DHT (decentralized network) to find more peers)QBT_TR[CONTEXT=OptionsDialog]</label>
|
|
</div>
|
|
<div class="formRow">
|
|
<input type="checkbox" id="pex_checkbox" />
|
|
<label for="pex_checkbox">QBT_TR(Enable Peer Exchange (PeX) to find more peers)QBT_TR[CONTEXT=OptionsDialog]</label>
|
|
</div>
|
|
<div class="formRow">
|
|
<input type="checkbox" id="lsd_checkbox" />
|
|
<label for="lsd_checkbox">QBT_TR(Enable Local Peer Discovery to find more peers)QBT_TR[CONTEXT=OptionsDialog]</label>
|
|
</div>
|
|
<div class="formRow">
|
|
<label for="encryption_select">QBT_TR(Encryption mode:)QBT_TR[CONTEXT=OptionsDialog]</label>
|
|
<select id="encryption_select">
|
|
<option value="0">QBT_TR(Allow encryption)QBT_TR[CONTEXT=OptionsDialog]</option>
|
|
<option value="1">QBT_TR(Require encryption)QBT_TR[CONTEXT=OptionsDialog]</option>
|
|
<option value="2">QBT_TR(Disable encryption)QBT_TR[CONTEXT=OptionsDialog]</option>
|
|
</select>
|
|
</div>
|
|
<div class="formRow">
|
|
<input type="checkbox" id="anonymous_mode_checkbox" />
|
|
<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>
|
|
</div>
|
|
</fieldset>
|
|
|
|
<fieldset class="settings">
|
|
<legend>
|
|
<input type="checkbox" id="queueing_checkbox" onclick="qBittorrent.Preferences.updateQueueingSystem();" />
|
|
<label for="queueing_checkbox">QBT_TR(Torrent Queueing)QBT_TR[CONTEXT=OptionsDialog]</label>
|
|
</legend>
|
|
<table>
|
|
<tr>
|
|
<td>
|
|
<label for="max_active_dl_value">QBT_TR(Maximum active downloads:)QBT_TR[CONTEXT=OptionsDialog]</label>
|
|
</td>
|
|
<td>
|
|
<input type="text" id="max_active_dl_value" style="width: 4em;" />
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td>
|
|
<label for="max_active_up_value">QBT_TR(Maximum active uploads:)QBT_TR[CONTEXT=OptionsDialog]</label>
|
|
</td>
|
|
<td>
|
|
<input type="text" id="max_active_up_value" style="width: 4em;" />
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td>
|
|
<label for="max_active_to_value">QBT_TR(Maximum active torrents:)QBT_TR[CONTEXT=OptionsDialog]</label>
|
|
</td>
|
|
<td>
|
|
<input type="text" id="max_active_to_value" style="width: 4em;" />
|
|
</td>
|
|
</tr>
|
|
</table>
|
|
<fieldset class="settings">
|
|
<legend>
|
|
<input type="checkbox" id="dont_count_slow_torrents_checkbox" onclick="qBittorrent.Preferences.updateSlowTorrentsSettings();" />
|
|
<label for="dont_count_slow_torrents_checkbox">QBT_TR(Do not count slow torrents in these limits)QBT_TR[CONTEXT=OptionsDialog]</label>
|
|
</legend>
|
|
<table>
|
|
<tr>
|
|
<td>
|
|
<label for="dl_rate_threshold">QBT_TR(Download rate threshold:)QBT_TR[CONTEXT=OptionsDialog]</label>
|
|
</td>
|
|
<td>
|
|
<input type="text" id="dl_rate_threshold" style="width: 4em;" /> QBT_TR(KiB/s)QBT_TR[CONTEXT=OptionsDialog]
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td>
|
|
<label for="ul_rate_threshold">QBT_TR(Upload rate threshold:)QBT_TR[CONTEXT=OptionsDialog]</label>
|
|
</td>
|
|
<td>
|
|
<input type="text" id="ul_rate_threshold" style="width: 4em;" /> QBT_TR(KiB/s)QBT_TR[CONTEXT=OptionsDialog]
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td>
|
|
<label for="torrent_inactive_timer">QBT_TR(Torrent inactivity timer:)QBT_TR[CONTEXT=OptionsDialog]</label>
|
|
</td>
|
|
<td>
|
|
<input type="text" id="torrent_inactive_timer" style="width: 4em;" /> QBT_TR(seconds)QBT_TR[CONTEXT=OptionsDialog]
|
|
</td>
|
|
</tr>
|
|
</table>
|
|
</fieldset>
|
|
</fieldset>
|
|
|
|
<fieldset class="settings">
|
|
<legend>QBT_TR(Seeding Limits)QBT_TR[CONTEXT=OptionsDialog]</legend>
|
|
<table>
|
|
<tr>
|
|
<td>
|
|
<input type="checkbox" id="max_ratio_checkbox" onclick="qBittorrent.Preferences.updateMaxRatioTimeEnabled();" />
|
|
<label for="max_ratio_checkbox">QBT_TR(When ratio reaches)QBT_TR[CONTEXT=OptionsDialog]</label>
|
|
</td>
|
|
<td>
|
|
<input type="text" id="max_ratio_value" style="width: 4em;" />
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td>
|
|
<label for="max_seeding_time_checkbox">QBT_TR(When seeding time reaches)QBT_TR[CONTEXT=OptionsDialog]</label>
|
|
<input type="checkbox" id="max_seeding_time_checkbox" onclick="qBittorrent.Preferences.updateMaxRatioTimeEnabled();" />
|
|
</td>
|
|
<td>
|
|
<input type="text" id="max_seeding_time_value" style="width: 4em;" />QBT_TR(minutes)QBT_TR[CONTEXT=OptionsDialog]
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td style="text-align: right;"><label for="max_ratio_act">QBT_TR(then)QBT_TR[CONTEXT=OptionsDialog]</label></td>
|
|
<td>
|
|
<select id="max_ratio_act">
|
|
<option value="0">QBT_TR(Pause torrent)QBT_TR[CONTEXT=OptionsDialog]</option>
|
|
<option value="1">QBT_TR(Remove torrent)QBT_TR[CONTEXT=OptionsDialog]</option>
|
|
<option value="3">QBT_TR(Remove torrent and its files)QBT_TR[CONTEXT=OptionsDialog]</option>
|
|
<option value="2">QBT_TR(Enable super seeding for torrent)QBT_TR[CONTEXT=OptionsDialog]</option>
|
|
</select>
|
|
</td>
|
|
</tr>
|
|
</table>
|
|
</fieldset>
|
|
|
|
<fieldset class="settings">
|
|
<legend>
|
|
<input type="checkbox" id="add_trackers_checkbox" onclick="qBittorrent.Preferences.updateAddTrackersEnabled();" />
|
|
<label for="add_trackers_checkbox">QBT_TR(Automatically add these trackers to new downloads:)QBT_TR[CONTEXT=OptionsDialog]</label>
|
|
</legend>
|
|
<textarea id="add_trackers_textarea" rows="5" cols="70"></textarea>
|
|
</fieldset>
|
|
</div>
|
|
|
|
<div id="RSSTab" class="PrefTab invisible">
|
|
<fieldset class="settings">
|
|
<legend>QBT_TR(RSS Reader)QBT_TR[CONTEXT=OptionsDialog]</legend>
|
|
<div class="formRow">
|
|
<input type="checkbox" id="enable_fetching_rss_feeds_checkbox" />
|
|
<label for="enable_fetching_rss_feeds_checkbox">QBT_TR(Enable fetching RSS feeds)QBT_TR[CONTEXT=OptionsDialog]</label>
|
|
</div>
|
|
<table>
|
|
<tr>
|
|
<td>
|
|
<label for="feed_refresh_interval">QBT_TR(Feeds refresh interval:)QBT_TR[CONTEXT=OptionsDialog]</label>
|
|
</td>
|
|
<td>
|
|
<input type="text" id="feed_refresh_interval" style="width: 4em;" /> QBT_TR( min)QBT_TR[CONTEXT=OptionsDialog]
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td>
|
|
<label for="maximum_article_number">QBT_TR(Maximum number of articles per feed:)QBT_TR[CONTEXT=OptionsDialog]</label>
|
|
</td>
|
|
<td>
|
|
<input type="text" id="maximum_article_number" style="width: 4em;" />
|
|
</td>
|
|
</tr>
|
|
</table>
|
|
</fieldset>
|
|
|
|
<fieldset class="settings">
|
|
<legend>QBT_TR(RSS Torrent Auto Downloader)QBT_TR[CONTEXT=OptionsDialog]</legend>
|
|
<div class="formRow">
|
|
<input type="checkbox" id="enable_auto_downloading_rss_torrents_checkbox" />
|
|
<label for="enable_auto_downloading_rss_torrents_checkbox">QBT_TR(Enable auto downloading of RSS torrents)QBT_TR[CONTEXT=OptionsDialog]</label>
|
|
</div>
|
|
<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>
|
|
</fieldset>
|
|
|
|
<fieldset class="settings">
|
|
<legend>QBT_TR(RSS Smart Episode Filter)QBT_TR[CONTEXT=OptionsDialog]</legend>
|
|
<div class="formRow">
|
|
<input type="checkbox" id="downlock_repack_proper_episodes" />
|
|
|
|
<label for="downlock_repack_proper_episodes">QBT_TR(Download REPACK/PROPER episodes)QBT_TR[CONTEXT=OptionsDialog]</label>
|
|
</div>
|
|
<label for="rss_filter_textarea">QBT_TR(Filters:)QBT_TR[CONTEXT=OptionsDialog]</label><br>
|
|
<textarea id="rss_filter_textarea" rows="6" cols="70"></textarea>
|
|
</fieldset>
|
|
</div>
|
|
|
|
<div id="WebUITab" class="PrefTab invisible">
|
|
<fieldset class="settings">
|
|
<legend>QBT_TR(Language)QBT_TR[CONTEXT=OptionsDialog]</legend>
|
|
<label for="locale_select">QBT_TR(User Interface Language:)QBT_TR[CONTEXT=OptionsDialog]</label>
|
|
<select id="locale_select">
|
|
<option value="en">English</option>
|
|
<option value="en_AU">English(Australia)</option>
|
|
<option value="en_GB">English(United Kingdom)</option>
|
|
<option value="eo_EO">Esperanto</option>
|
|
<option value="fr_FR">Français</option>
|
|
<option value="de_DE">Deutsch</option>
|
|
<option value="hu_HU">Magyar</option>
|
|
<option value="is">Íslenska</option>
|
|
<option value="id">Bahasa Indonesia</option>
|
|
<option value="it_IT">Italiano</option>
|
|
<option value="nl_NL">Nederlands</option>
|
|
<option value="es_ES">Español</option>
|
|
<option value="ca_ES">Català</option>
|
|
<option value="gl_ES">Galego</option>
|
|
<option value="oc">lenga d'òc</option>
|
|
<option value="pt_BR">Português brasileiro</option>
|
|
<option value="pt_PT">Português</option>
|
|
<option value="pl_PL">Polski</option>
|
|
<option value="lv_LV">latviešu valoda</option>
|
|
<option value="lt_LT">Lietuvių</option>
|
|
<option value="ms_MY">بهاس ملايو</option>
|
|
<option value="cs_CZ">Čeština</option>
|
|
<option value="sk_SK">Slovenčina</option>
|
|
<option value="sl_SI">Slovenščina</option>
|
|
<option value="sr_CS">Српски</option>
|
|
<option value="hi_IN">हिन्दी, हिंदी</option>
|
|
<option value="hr_HR">Hrvatski</option>
|
|
<option value="hy_AM">Հայերեն</option>
|
|
<option value="ro_RO">Română</option>
|
|
<option value="tr_TR">Türkçe</option>
|
|
<option value="el_GR">Ελληνικά</option>
|
|
<option value="sv_SE">Svenska</option>
|
|
<option value="fi_FI">Suomi</option>
|
|
<option value="nb_NO">Norsk</option>
|
|
<option value="da_DK">Dansk</option>
|
|
<option value="bg_BG">Български</option>
|
|
<option value="uk_UA">Українська</option>
|
|
<option value="uz@Latn">أۇزبېك</option>
|
|
<option value="ru_RU">Русский</option>
|
|
<option value="ja_JP">日本語</option>
|
|
<option value="he_IL">עברית</option>
|
|
<option value="ar_AE">عربي</option>
|
|
<option value="ka_GE">ქართული</option>
|
|
<option value="be_BY">Беларуская</option>
|
|
<option value="eu_ES">Euskara</option>
|
|
<option value="vi_VN">tiếng Việt</option>
|
|
<option value="zh">简体中文</option>
|
|
<option value="zh_TW">正體中文</option>
|
|
<option value="zh_HK">香港正體字</option>
|
|
<option value="ko_KR">한글</option>
|
|
</select>
|
|
</fieldset>
|
|
|
|
<fieldset class="settings">
|
|
<legend>QBT_TR(Web User Interface (Remote control))QBT_TR[CONTEXT=OptionsDialog]</legend>
|
|
<table>
|
|
<tr>
|
|
<td>
|
|
<label for="webui_address_value">QBT_TR(IP address:)QBT_TR[CONTEXT=OptionsDialog]</label>
|
|
</td>
|
|
<td>
|
|
<input type="text" id="webui_address_value" />
|
|
<label for="webui_port_value" style="margin-left: 10px;">QBT_TR(Port:)QBT_TR[CONTEXT=OptionsDialog]</label>
|
|
<input type="text" id="webui_port_value" style="width: 4em;" />
|
|
</td>
|
|
</tr>
|
|
</table>
|
|
<div class="formRow">
|
|
<input type="checkbox" id="webui_upnp_checkbox" />
|
|
<label for="webui_upnp_checkbox">QBT_TR(Use UPnP / NAT-PMP to forward the port from my router)QBT_TR[CONTEXT=OptionsDialog]</label>
|
|
</div>
|
|
<fieldset class="settings">
|
|
<legend>
|
|
<input type="checkbox" id="use_https_checkbox" onclick="qBittorrent.Preferences.updateHttpsSettings();" />
|
|
<label for="use_https_checkbox">QBT_TR(Use HTTPS instead of HTTP)QBT_TR[CONTEXT=OptionsDialog]</label>
|
|
</legend>
|
|
<table>
|
|
<tr>
|
|
<td>
|
|
<label for="ssl_cert_text">QBT_TR(Certificate:)QBT_TR[CONTEXT=OptionsDialog]</label>
|
|
</td>
|
|
<td>
|
|
<input type="text" id="ssl_cert_text" style="width: 30em;" />
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td>
|
|
<label for="ssl_key_text">QBT_TR(Key:)QBT_TR[CONTEXT=OptionsDialog]</label>
|
|
</td>
|
|
<td>
|
|
<input type="text" id="ssl_key_text" style="width: 30em;" />
|
|
</td>
|
|
</tr>
|
|
</table>
|
|
<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>
|
|
</fieldset>
|
|
|
|
<fieldset class="settings">
|
|
<legend>QBT_TR(Authentication)QBT_TR[CONTEXT=OptionsDialog]</legend>
|
|
<table>
|
|
<tr>
|
|
<td>
|
|
<label for="webui_username_text">QBT_TR(Username:)QBT_TR[CONTEXT=OptionsDialog]</label>
|
|
</td>
|
|
<td>
|
|
<input type="text" id="webui_username_text" />
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td>
|
|
<label for="webui_password_text">QBT_TR(Password:)QBT_TR[CONTEXT=OptionsDialog]</label>
|
|
</td>
|
|
<td>
|
|
<input type="password" id="webui_password_text" placeholder="QBT_TR(Change current password)QBT_TR[CONTEXT=OptionsDialog]" autocomplete="new-password" />
|
|
</td>
|
|
</tr>
|
|
</table>
|
|
<div class="formRow">
|
|
<input type="checkbox" id="bypass_local_auth_checkbox" />
|
|
<label for="bypass_local_auth_checkbox">QBT_TR(Bypass authentication for clients on localhost)QBT_TR[CONTEXT=OptionsDialog]</label>
|
|
</div>
|
|
<div class="formRow">
|
|
<input type="checkbox" id="bypass_auth_subnet_whitelist_checkbox" onclick="qBittorrent.Preferences.updateBypasssAuthSettings();" />
|
|
<label for="bypass_auth_subnet_whitelist_checkbox">QBT_TR(Bypass authentication for clients in whitelisted IP subnets)QBT_TR[CONTEXT=OptionsDialog]</label>
|
|
</div>
|
|
<div class="formRow" style="padding-left: 30px; padding-top: 5px;">
|
|
<textarea id="bypass_auth_subnet_whitelist_textarea" rows="5" cols="48" placeholder="Example: 172.17.32.0/24, fdff:ffff:c8::/40"></textarea>
|
|
</div>
|
|
<table>
|
|
<tr>
|
|
<td><label for="webUIMaxAuthFailCountInput">QBT_TR(Ban client after consecutive failures:)QBT_TR[CONTEXT=OptionsDialog]</label></td>
|
|
<td><input type="number" id="webUIMaxAuthFailCountInput" style="width: 4em;" min="0" /></td>
|
|
</tr>
|
|
<tr>
|
|
<td style="text-align: right;"><label for="webUIBanDurationInput">QBT_TR(ban for:)QBT_TR[CONTEXT=OptionsDialog]</label></td>
|
|
<td><input type="number" id="webUIBanDurationInput" style="width: 4em;" min="1" />QBT_TR(seconds)QBT_TR[CONTEXT=OptionsDialog]</td>
|
|
</tr>
|
|
</table>
|
|
<table>
|
|
<tr>
|
|
<td><label for="webUISessionTimeoutInput">QBT_TR(Session timeout:)QBT_TR[CONTEXT=OptionsDialog]</label></td>
|
|
<td><input type="number" id="webUISessionTimeoutInput" style="width: 4em;" min="0" /> QBT_TR(seconds)QBT_TR[CONTEXT=OptionsDialog]</td>
|
|
</tr>
|
|
</table>
|
|
</fieldset>
|
|
|
|
<fieldset class="settings">
|
|
<legend><input type="checkbox" id="use_alt_webui_checkbox" onclick="qBittorrent.Preferences.updateAlternativeWebUISettings();" />
|
|
<label for="use_alt_webui_checkbox">QBT_TR(Use alternative Web UI)QBT_TR[CONTEXT=OptionsDialog]</label></legend>
|
|
<div class="formRow">
|
|
<label for="webui_files_location_textarea">QBT_TR(Files location:)QBT_TR[CONTEXT=OptionsDialog]</label>
|
|
<input type="text" id="webui_files_location_textarea" />
|
|
</div>
|
|
</fieldset>
|
|
|
|
<fieldset class="settings">
|
|
<legend>QBT_TR(Security)QBT_TR[CONTEXT=OptionsDialog]</legend>
|
|
<div class="formRow">
|
|
<input type="checkbox" id="clickjacking_protection_checkbox" />
|
|
<label for="clickjacking_protection_checkbox">QBT_TR(Enable clickjacking protection)QBT_TR[CONTEXT=OptionsDialog]</label>
|
|
</div>
|
|
<div class="formRow">
|
|
<input type="checkbox" id="csrf_protection_checkbox" />
|
|
<label for="csrf_protection_checkbox">QBT_TR(Enable Cross-Site Request Forgery (CSRF) protection)QBT_TR[CONTEXT=OptionsDialog]</label>
|
|
</div>
|
|
<div class="formRow">
|
|
<input type="checkbox" id="secureCookieCheckbox" />
|
|
<label for="secureCookieCheckbox">QBT_TR(Enable cookie Secure flag (requires HTTPS))QBT_TR[CONTEXT=OptionsDialog]</label>
|
|
</div>
|
|
|
|
<fieldset class="settings">
|
|
<legend>
|
|
<input type="checkbox" id="host_header_validation_checkbox" onclick="qBittorrent.Preferences.updateHostHeaderValidationSettings();" />
|
|
<label for="host_header_validation_checkbox">QBT_TR(Enable Host header validation)QBT_TR[CONTEXT=OptionsDialog]</label>
|
|
</legend>
|
|
<table>
|
|
<tr>
|
|
<td>
|
|
<label for="webui_domain_textarea">QBT_TR(Server domains:)QBT_TR[CONTEXT=OptionsDialog]</label>
|
|
</td>
|
|
<td>
|
|
<textarea id="webui_domain_textarea" rows="1" cols="60"></textarea>
|
|
</td>
|
|
</tr>
|
|
</table>
|
|
</fieldset>
|
|
</fieldset>
|
|
|
|
<fieldset class="settings">
|
|
<legend>
|
|
<input type="checkbox" id="webUIUseCustomHTTPHeadersCheckbox" onclick="qBittorrent.Preferences.updateWebUICustomHTTPHeadersSettings();" />
|
|
<label for="webUIUseCustomHTTPHeadersCheckbox">QBT_TR(Add custom HTTP headers)QBT_TR[CONTEXT=OptionsDialog]</label>
|
|
</legend>
|
|
<textarea id="webUICustomHTTPHeadersTextarea" placeholder="QBT_TR(Header: value pairs, one per line)QBT_TR[CONTEXT=OptionsDialog]" style="width: 90%;"></textarea>
|
|
</fieldset>
|
|
</fieldset>
|
|
|
|
<fieldset class="settings">
|
|
<legend>
|
|
<input type="checkbox" id="use_dyndns_checkbox" onclick="qBittorrent.Preferences.updateDynDnsSettings();" />
|
|
<label for="use_dyndns_checkbox">QBT_TR(Update my dynamic domain name)QBT_TR[CONTEXT=OptionsDialog]</label>
|
|
</legend>
|
|
<select id="dyndns_select">
|
|
<option value="0">DynDNS</option>
|
|
<option value="1">NO-IP</option>
|
|
</select>
|
|
<input type="button" value="QBT_TR(Register)QBT_TR[CONTEXT=OptionsDialog]" onclick="qBittorrent.Preferences.registerDynDns();" />
|
|
<table style="margin-top: 10px;">
|
|
<tr>
|
|
<td>
|
|
<label for="dyndns_domain_text">QBT_TR(Domain name:)QBT_TR[CONTEXT=OptionsDialog]</label>
|
|
</td>
|
|
<td>
|
|
<input type="text" id="dyndns_domain_text" />
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td>
|
|
<label for="dyndns_username_text">QBT_TR(Username:)QBT_TR[CONTEXT=OptionsDialog]</label>
|
|
</td>
|
|
<td>
|
|
<input type="text" id="dyndns_username_text" />
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td>
|
|
<label for="dyndns_password_text">QBT_TR(Password:)QBT_TR[CONTEXT=OptionsDialog]</label>
|
|
</td>
|
|
<td>
|
|
<input type="password" id="dyndns_password_text" />
|
|
</td>
|
|
</tr>
|
|
</table>
|
|
</fieldset>
|
|
</div>
|
|
|
|
<div id="AdvancedTab" class="PrefTab invisible">
|
|
<fieldset class="settings">
|
|
<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>
|
|
<table>
|
|
<tr>
|
|
<td>
|
|
<label for="networkInterface">QBT_TR(Network Interface:)QBT_TR[CONTEXT=OptionsDialog]</label>
|
|
</td>
|
|
<td>
|
|
<select id="networkInterface" style="width: 15em;">
|
|
</select>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td>
|
|
<label for="optionalIPAddressToBind">QBT_TR(Optional IP Address to bind to:)QBT_TR[CONTEXT=OptionsDialog]</label>
|
|
</td>
|
|
<td>
|
|
<select id="optionalIPAddressToBind" style="width: 15em;">
|
|
</select>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td>
|
|
<label for="saveResumeDataInterval">QBT_TR(Save resume data interval:)QBT_TR[CONTEXT=OptionsDialog]</label>
|
|
</td>
|
|
<td>
|
|
<input type="text" id="saveResumeDataInterval" style="width: 15em;"> QBT_TR(min)QBT_TR[CONTEXT=OptionsDialog]
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td>
|
|
<label for="recheckTorrentsOnCompletion">QBT_TR(Recheck torrents on completion:)QBT_TR[CONTEXT=OptionsDialog]</label>
|
|
</td>
|
|
<td>
|
|
<input type="checkbox" id="recheckTorrentsOnCompletion">
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td>
|
|
<label for="resolvePeerCountries">QBT_TR(Resolve peer countries:)QBT_TR[CONTEXT=OptionsDialog]</label>
|
|
</td>
|
|
<td>
|
|
<input type="checkbox" id="resolvePeerCountries">
|
|
</td>
|
|
</tr>
|
|
</table>
|
|
</fieldset>
|
|
<fieldset class="settings">
|
|
<legend>QBT_TR(libtorrent Section)QBT_TR[CONTEXT=OptionsDialog] (<a href="https://www.libtorrent.org/reference.html" target="_blank">QBT_TR(Open documentation)QBT_TR[CONTEXT=HttpServer]</a>)</legend>
|
|
<table>
|
|
<tr>
|
|
<td>
|
|
<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>
|
|
</td>
|
|
<td>
|
|
<input type="text" id="asyncIOThreads" style="width: 15em;" />
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td>
|
|
<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>
|
|
</td>
|
|
<td>
|
|
<input type="text" id="filePoolSize" style="width: 15em;" />
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td>
|
|
<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>
|
|
</td>
|
|
<td>
|
|
<input type="text" id="outstandMemoryWhenCheckingTorrents" style="width: 15em;" /> QBT_TR(MiB)QBT_TR[CONTEXT=OptionsDialog]
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td>
|
|
<label for="diskCache">QBT_TR(Disk cache:)QBT_TR[CONTEXT=OptionsDialog] <a href="https://www.libtorrent.org/reference-Settings.html#cache_size" target="_blank">(?)</a></label>
|
|
</td>
|
|
<td>
|
|
<input type="text" id="diskCache" style="width: 15em;" /> QBT_TR(MiB)QBT_TR[CONTEXT=OptionsDialog]
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td>
|
|
<label for="diskCacheExpiryInterval">QBT_TR(Disk cache expiry interval:)QBT_TR[CONTEXT=OptionsDialog] <a href="https://www.libtorrent.org/reference-Settings.html#cache_expiry" target="_blank">(?)</a></label>
|
|
</td>
|
|
<td>
|
|
<input type="text" id="diskCacheExpiryInterval" style="width: 15em;"> QBT_TR(s)QBT_TR[CONTEXT=OptionsDialog]
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td>
|
|
<label for="enableOSCache">QBT_TR(Enable OS cache:)QBT_TR[CONTEXT=OptionsDialog] <a href="https://www.libtorrent.org/reference-Settings.html#disk_io_write_mode" target="_blank">(?)</a></label>
|
|
</td>
|
|
<td>
|
|
<input type="checkbox" id="enableOSCache" />
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td>
|
|
<label for="coalesceReadsAndWrites">QBT_TR(Coalesce reads & writes:)QBT_TR[CONTEXT=OptionsDialog] <a href="https://www.libtorrent.org/reference-Settings.html#coalesce_reads" target="_blank">(?)</a></label>
|
|
</td>
|
|
<td>
|
|
<input type="checkbox" id="coalesceReadsAndWrites" />
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td>
|
|
<label for="pieceExtentAffinity">QBT_TR(Use piece extent affinity (requires libtorrent >= 1.2.2):)QBT_TR[CONTEXT=OptionsDialog] <a href="https://libtorrent.org/single-page-ref.html#piece_extent_affinity" target="_blank">(?)</a></label>
|
|
</td>
|
|
<td>
|
|
<input type="checkbox" id="pieceExtentAffinity" />
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td>
|
|
<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>
|
|
</td>
|
|
<td>
|
|
<input type="checkbox" id="sendUploadPieceSuggestions" />
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td>
|
|
<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>
|
|
</td>
|
|
<td>
|
|
<input type="text" id="sendBufferWatermark" style="width: 15em;" /> QBT_TR(KiB)QBT_TR[CONTEXT=OptionsDialog]
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td>
|
|
<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>
|
|
</td>
|
|
<td>
|
|
<input type="text" id="sendBufferLowWatermark" style="width: 15em;" /> QBT_TR(KiB)QBT_TR[CONTEXT=OptionsDialog]
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td>
|
|
<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>
|
|
</td>
|
|
<td>
|
|
<input type="text" id="sendBufferWatermarkFactor" style="width: 15em;" /> %
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td>
|
|
<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>
|
|
</td>
|
|
<td>
|
|
<input type="text" id="socketBacklogSize" style="width: 15em;" />
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td>
|
|
<label for="outgoingPortsMin">QBT_TR(Outgoing ports (Min) [0: Disabled]:)QBT_TR[CONTEXT=OptionsDialog]</label>
|
|
</td>
|
|
<td>
|
|
<input type="text" id="outgoingPortsMin" style="width: 15em;" />
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td>
|
|
<label for="outgoingPortsMax">QBT_TR(Outgoing ports (Max) [0: Disabled]:)QBT_TR[CONTEXT=OptionsDialog]</label>
|
|
</td>
|
|
<td>
|
|
<input type="text" id="outgoingPortsMax" style="width: 15em;" />
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td>
|
|
<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>
|
|
</td>
|
|
<td>
|
|
<input type="text" id="UPnPLeaseDuration" style="width: 15em;" />
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td>
|
|
<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>
|
|
</td>
|
|
<td>
|
|
<select id="utpTCPMixedModeAlgorithm" style="width: 15em;">
|
|
<option value="0">QBT_TR(Prefer TCP)QBT_TR[CONTEXT=OptionsDialog]</option>
|
|
<option value="1">QBT_TR(Peer proportional (throttles TCP))QBT_TR[CONTEXT=OptionsDialog]</option>
|
|
</select>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td>
|
|
<label for="allowMultipleConnectionsFromTheSameIPAddress">QBT_TR(Allow multiple connections from the same IP address:)QBT_TR[CONTEXT=OptionsDialog]</label>
|
|
</td>
|
|
<td>
|
|
<input type="checkbox" id="allowMultipleConnectionsFromTheSameIPAddress" />
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td>
|
|
<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>
|
|
</td>
|
|
<td>
|
|
<input type="checkbox" id="validateHTTPSTrackerCertificate" />
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td>
|
|
<label for="enableEmbeddedTracker">QBT_TR(Enable embedded tracker:)QBT_TR[CONTEXT=OptionsDialog]</label>
|
|
</td>
|
|
<td>
|
|
<input type="checkbox" id="enableEmbeddedTracker" />
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td>
|
|
<label for="embeddedTrackerPort">QBT_TR(Embedded tracker port:)QBT_TR[CONTEXT=OptionsDialog]</label>
|
|
</td>
|
|
<td>
|
|
<input type="text" id="embeddedTrackerPort" style="width: 15em;" />
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td>
|
|
<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>
|
|
</td>
|
|
<td>
|
|
<select id="uploadSlotsBehavior" style="width: 15em;">
|
|
<option value="0">QBT_TR(Fixed slots)QBT_TR[CONTEXT=OptionsDialog]</option>
|
|
<option value="1">QBT_TR(Upload rate based)QBT_TR[CONTEXT=OptionsDialog]</option>
|
|
</select>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td>
|
|
<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>
|
|
</td>
|
|
<td>
|
|
<select id="uploadChokingAlgorithm" style="width: 15em;">
|
|
<option value="0">QBT_TR(Round-robin)QBT_TR[CONTEXT=OptionsDialog]</option>
|
|
<option value="1">QBT_TR(Fastest upload)QBT_TR[CONTEXT=OptionsDialog]</option>
|
|
<option value="2">QBT_TR(Anti-leech)QBT_TR[CONTEXT=OptionsDialog]</option>
|
|
</select>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td>
|
|
<label for="announceAllTrackers">QBT_TR(Always announce to all trackers in a tier:)QBT_TR[CONTEXT=OptionsDialog]</label>
|
|
</td>
|
|
<td>
|
|
<input type="checkbox" id="announceAllTrackers" />
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td>
|
|
<label for="announceAllTiers">QBT_TR(Always announce to all tiers:)QBT_TR[CONTEXT=OptionsDialog]</label>
|
|
</td>
|
|
<td>
|
|
<input type="checkbox" id="announceAllTiers" />
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td>
|
|
<label for="announceIP">QBT_TR(IP Address to report to trackers (requires restart):)QBT_TR[CONTEXT=OptionsDialog]</label>
|
|
</td>
|
|
<td>
|
|
<input type="text" id="announceIP" style="width: 15em;" />
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td>
|
|
<label for="stopTrackerTimeout">QBT_TR(Stop tracker timeout:)QBT_TR[CONTEXT=OptionsDialog] <a href="https://www.libtorrent.org/reference-Settings.html#stop_tracker_timeout" target="_blank">(?)</a></label>
|
|
</td>
|
|
<td>
|
|
<input type="text" id="stopTrackerTimeout" style="width: 15em;" />
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td>
|
|
<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>
|
|
</td>
|
|
<td>
|
|
<input type="text" id="peerTurnover" style="width: 15em;" /> %
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td>
|
|
<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>
|
|
</td>
|
|
<td>
|
|
<input type="text" id="peerTurnoverCutoff" style="width: 15em;" /> %
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td>
|
|
<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>
|
|
</td>
|
|
<td>
|
|
<input type="text" id="peerTurnoverInterval" style="width: 15em;" /> s
|
|
</td>
|
|
</tr>
|
|
</table>
|
|
</fieldset>
|
|
</div>
|
|
|
|
<div style="text-align: center; margin-top: 1em;"><input type="button" value="QBT_TR(Save)QBT_TR[CONTEXT=HttpServer]" onclick="qBittorrent.Preferences.applyPreferences();" /></div>
|
|
|
|
<script>
|
|
'use strict';
|
|
|
|
if (window.qBittorrent === undefined) {
|
|
window.qBittorrent = {};
|
|
}
|
|
|
|
window.qBittorrent.Preferences = (function() {
|
|
const exports = function() {
|
|
return {
|
|
updateTempDirEnabled: updateTempDirEnabled,
|
|
updateExportDirEnabled: updateExportDirEnabled,
|
|
updateExportDirFinEnabled: updateExportDirFinEnabled,
|
|
addWatchFolder: addWatchFolder,
|
|
changeWatchFolderSelect: changeWatchFolderSelect,
|
|
updateMailNotification: updateMailNotification,
|
|
updateMailAuthSettings: updateMailAuthSettings,
|
|
updateAutoRun: updateAutoRun,
|
|
generateRandomPort: generateRandomPort,
|
|
updatePortValueEnabled: updatePortValueEnabled,
|
|
updateMaxConnecEnabled: updateMaxConnecEnabled,
|
|
updateMaxConnecPerTorrentEnabled: updateMaxConnecPerTorrentEnabled,
|
|
updateMaxUploadsEnabled: updateMaxUploadsEnabled,
|
|
updateMaxUploadsPerTorrentEnabled: updateMaxUploadsPerTorrentEnabled,
|
|
updatePeerProxySettings: updatePeerProxySettings,
|
|
updatePeerProxyAuthSettings: updatePeerProxyAuthSettings,
|
|
updateFilterSettings: updateFilterSettings,
|
|
updateSchedulingEnabled: updateSchedulingEnabled,
|
|
updateQueueingSystem: updateQueueingSystem,
|
|
updateSlowTorrentsSettings: updateSlowTorrentsSettings,
|
|
updateMaxRatioTimeEnabled: updateMaxRatioTimeEnabled,
|
|
updateAddTrackersEnabled: updateAddTrackersEnabled,
|
|
updateHttpsSettings: updateHttpsSettings,
|
|
updateBypasssAuthSettings: updateBypasssAuthSettings,
|
|
updateAlternativeWebUISettings: updateAlternativeWebUISettings,
|
|
updateHostHeaderValidationSettings: updateHostHeaderValidationSettings,
|
|
updateWebUICustomHTTPHeadersSettings: updateWebUICustomHTTPHeadersSettings,
|
|
updateDynDnsSettings: updateDynDnsSettings,
|
|
registerDynDns: registerDynDns,
|
|
applyPreferences: applyPreferences
|
|
};
|
|
};
|
|
|
|
// Downloads tab
|
|
const WatchedFoldersTable = new HtmlTable($("watched_folders_tab"));
|
|
|
|
const updateTempDirEnabled = function() {
|
|
const isTempDirEnabled = $('temppath_checkbox').getProperty('checked');
|
|
$('temppath_text').setProperty('disabled', !isTempDirEnabled);
|
|
};
|
|
|
|
const addWatchFolder = function() {
|
|
const new_folder = $('new_watch_folder_txt').getProperty('value').trim();
|
|
if (new_folder.length <= 0) return;
|
|
|
|
const new_other = $('new_watch_folder_other_txt').getProperty('value').trim();
|
|
if (new_other.length <= 0) return;
|
|
|
|
const new_select = $('new_watch_folder_select').getProperty('value').trim();
|
|
|
|
const i = $('watched_folders_tab').getChildren('tbody')[0].getChildren('tr').length;
|
|
pushWatchFolder(i, new_folder, new_select, new_other);
|
|
|
|
// Clear fields
|
|
$('new_watch_folder_txt').setProperty('value', '');
|
|
const elt = $('new_watch_folder_select');
|
|
elt.setProperty('value', 'watch_folder');
|
|
const text = elt.options[elt.selectedIndex].innerHTML;
|
|
$('new_watch_folder_other_txt').setProperty('value', text);
|
|
};
|
|
|
|
const changeWatchFolderSelect = function(item) {
|
|
if (item.value == "other") {
|
|
item.nextElementSibling.hidden = false;
|
|
item.nextElementSibling.value = 'QBT_TR(Type folder here)QBT_TR[CONTEXT=HttpServer]';
|
|
item.nextElementSibling.select();
|
|
}
|
|
else {
|
|
item.nextElementSibling.hidden = true;
|
|
const text = item.options[item.selectedIndex].innerHTML;
|
|
item.nextElementSibling.value = text;
|
|
}
|
|
};
|
|
|
|
const pushWatchFolder = function(pos, folder, sel, other) {
|
|
const myinput = "<input id='text_watch_" + pos + "' type='text' value='" + folder + "'>";
|
|
const disableInput = (sel != "other");
|
|
const mycb = "<div class='select-watched-folder-editable'>"
|
|
+ "<select id ='cb_watch_" + pos + "' onchange='qBittorrent.Preferences.changeWatchFolderSelect(this)'>"
|
|
+ "<option value='watch_folder'>QBT_TR(Monitored folder)QBT_TR[CONTEXT=ScanFoldersModel]</option>"
|
|
+ "<option value='default_folder'>QBT_TR(Default save location)QBT_TR[CONTEXT=ScanFoldersModel]</option>"
|
|
+ "<option value='other'>QBT_TR(Other...)QBT_TR[CONTEXT=HttpServer]</option>"
|
|
+ "</select>"
|
|
+ "<input id='cb_watch_txt_" + pos + "' type='text' " + (disableInput ? "hidden " : "") + "/></div>";
|
|
|
|
WatchedFoldersTable.push([myinput, mycb]);
|
|
$('cb_watch_' + pos).setProperty('value', sel);
|
|
if (disableInput) {
|
|
const elt = $('cb_watch_' + pos);
|
|
other = elt.options[elt.selectedIndex].innerHTML;
|
|
}
|
|
$('cb_watch_txt_' + pos).setProperty('value', other);
|
|
};
|
|
|
|
const getWatchedFolders = function() {
|
|
const nb_folders = $("watched_folders_tab").getChildren("tbody")[0].getChildren("tr").length;
|
|
const folders = new Hash();
|
|
for (let i = 0; i < nb_folders; ++i) {
|
|
const fpath = $('text_watch_' + i).getProperty('value').trim();
|
|
if (fpath.length > 0) {
|
|
let other;
|
|
const sel = $('cb_watch_' + i).getProperty('value').trim();
|
|
if (sel == "other") {
|
|
other = $('cb_watch_txt_' + i).getProperty('value').trim();
|
|
}
|
|
else {
|
|
other = (sel == "watch_folder") ? 0 : 1;
|
|
}
|
|
folders.set(fpath, other);
|
|
}
|
|
}
|
|
return folders;
|
|
};
|
|
|
|
const updateExportDirEnabled = function() {
|
|
const isExportDirEnabled = $('exportdir_checkbox').getProperty('checked');
|
|
$('exportdir_text').setProperty('disabled', !isExportDirEnabled);
|
|
};
|
|
|
|
const updateExportDirFinEnabled = function() {
|
|
const isExportDirFinEnabled = $('exportdirfin_checkbox').getProperty('checked');
|
|
$('exportdirfin_text').setProperty('disabled', !isExportDirFinEnabled);
|
|
};
|
|
|
|
const updateMailNotification = function() {
|
|
const isMailNotificationEnabled = $('mail_notification_checkbox').getProperty('checked');
|
|
$('src_email_txt').setProperty('disabled', !isMailNotificationEnabled);
|
|
$('dest_email_txt').setProperty('disabled', !isMailNotificationEnabled);
|
|
$('smtp_server_txt').setProperty('disabled', !isMailNotificationEnabled);
|
|
$('mail_ssl_checkbox').setProperty('disabled', !isMailNotificationEnabled);
|
|
$('mail_auth_checkbox').setProperty('disabled', !isMailNotificationEnabled);
|
|
|
|
if (!isMailNotificationEnabled) {
|
|
$('mail_auth_checkbox').setProperty('checked', !isMailNotificationEnabled);
|
|
updateMailAuthSettings();
|
|
}
|
|
};
|
|
|
|
const updateMailAuthSettings = function() {
|
|
const isMailAuthEnabled = $('mail_auth_checkbox').getProperty('checked');
|
|
$('mail_username_text').setProperty('disabled', !isMailAuthEnabled);
|
|
$('mail_password_text').setProperty('disabled', !isMailAuthEnabled);
|
|
};
|
|
|
|
const updateAutoRun = function() {
|
|
const isAutoRunEnabled = $('autorun_checkbox').getProperty('checked');
|
|
$('autorunProg_txt').setProperty('disabled', !isAutoRunEnabled);
|
|
};
|
|
|
|
// Connection tab
|
|
const updatePortValueEnabled = function() {
|
|
const checked = $('random_port_checkbox').getProperty('checked');
|
|
$('port_value').setProperty('disabled', checked);
|
|
};
|
|
|
|
const updateMaxConnecEnabled = function() {
|
|
const isMaxConnecEnabled = $('max_connec_checkbox').getProperty('checked');
|
|
$('max_connec_value').setProperty('disabled', !isMaxConnecEnabled);
|
|
};
|
|
|
|
const updateMaxConnecPerTorrentEnabled = function() {
|
|
const isMaxConnecPerTorrentEnabled = $('max_connec_per_torrent_checkbox').getProperty('checked');
|
|
$('max_connec_per_torrent_value').setProperty('disabled', !isMaxConnecPerTorrentEnabled);
|
|
};
|
|
|
|
const updateMaxUploadsEnabled = function() {
|
|
const isMaxUploadsEnabled = $('max_uploads_checkbox').getProperty('checked');
|
|
$('max_uploads_value').setProperty('disabled', !isMaxUploadsEnabled);
|
|
};
|
|
|
|
const updateMaxUploadsPerTorrentEnabled = function() {
|
|
const isMaxUploadsPerTorrentEnabled = $('max_uploads_per_torrent_checkbox').getProperty('checked');
|
|
$('max_uploads_per_torrent_value').setProperty('disabled', !isMaxUploadsPerTorrentEnabled);
|
|
};
|
|
|
|
const updatePeerProxySettings = function() {
|
|
const isPeerProxyTypeSelected = $('peer_proxy_type_select').getProperty('value') != "none";
|
|
$('peer_proxy_host_text').setProperty('disabled', !isPeerProxyTypeSelected);
|
|
$('peer_proxy_port_value').setProperty('disabled', !isPeerProxyTypeSelected);
|
|
$('use_peer_proxy_checkbox').setProperty('disabled', !isPeerProxyTypeSelected);
|
|
const isPeerProxyAuthenticatable = ($('peer_proxy_type_select').getProperty('value') === "socks5" || $('peer_proxy_type_select').getProperty('value') === "http");
|
|
$('proxy_only_for_torrents_checkbox').setProperty('disabled', !isPeerProxyAuthenticatable);
|
|
|
|
if ($('peer_proxy_type_select').getProperty('value') === "socks4")
|
|
$('proxy_only_for_torrents_checkbox').setProperty('checked', true);
|
|
|
|
$('peer_proxy_auth_checkbox').setProperty('disabled', !isPeerProxyAuthenticatable);
|
|
|
|
updatePeerProxyAuthSettings();
|
|
};
|
|
|
|
const updatePeerProxyAuthSettings = function() {
|
|
const isPeerProxyAuthEnabled = (!$('peer_proxy_auth_checkbox').getProperty('disabled') && $('peer_proxy_auth_checkbox').getProperty('checked'));
|
|
$('peer_proxy_username_text').setProperty('disabled', !isPeerProxyAuthEnabled);
|
|
$('peer_proxy_password_text').setProperty('disabled', !isPeerProxyAuthEnabled);
|
|
};
|
|
|
|
const updateFilterSettings = function() {
|
|
const isIPFilterEnabled = $('ipfilter_enabled_checkbox').getProperty('checked');
|
|
$('ipfilter_text').setProperty('disabled', !isIPFilterEnabled);
|
|
$('ipfilter_trackers_checkbox').setProperty('disabled', !isIPFilterEnabled);
|
|
$('banned_IPs_textarea').setProperty('disabled', !isIPFilterEnabled);
|
|
};
|
|
|
|
// Speed tab
|
|
const updateSchedulingEnabled = function() {
|
|
const isLimitSchedulingEnabled = $('limit_sheduling_checkbox').getProperty('checked');
|
|
$('schedule_from_hour').setProperty('disabled', !isLimitSchedulingEnabled);
|
|
$('schedule_from_min').setProperty('disabled', !isLimitSchedulingEnabled);
|
|
$('schedule_to_hour').setProperty('disabled', !isLimitSchedulingEnabled);
|
|
$('schedule_to_min').setProperty('disabled', !isLimitSchedulingEnabled);
|
|
$('schedule_freq_select').setProperty('disabled', !isLimitSchedulingEnabled);
|
|
};
|
|
|
|
// Bittorrent tab
|
|
const updateQueueingSystem = function() {
|
|
const isQueueingEnabled = $('queueing_checkbox').getProperty('checked');
|
|
$('max_active_dl_value').setProperty('disabled', !isQueueingEnabled);
|
|
$('max_active_up_value').setProperty('disabled', !isQueueingEnabled);
|
|
$('max_active_to_value').setProperty('disabled', !isQueueingEnabled);
|
|
$('dont_count_slow_torrents_checkbox').setProperty('disabled', !isQueueingEnabled);
|
|
updateSlowTorrentsSettings();
|
|
};
|
|
|
|
const updateSlowTorrentsSettings = function() {
|
|
const isDontCountSlowTorrentsEnabled = (!$('dont_count_slow_torrents_checkbox').getProperty('disabled')) && $('dont_count_slow_torrents_checkbox').getProperty('checked');
|
|
$('dl_rate_threshold').setProperty('disabled', !isDontCountSlowTorrentsEnabled);
|
|
$('ul_rate_threshold').setProperty('disabled', !isDontCountSlowTorrentsEnabled);
|
|
$('torrent_inactive_timer').setProperty('disabled', !isDontCountSlowTorrentsEnabled);
|
|
};
|
|
|
|
const updateMaxRatioTimeEnabled = function() {
|
|
const isMaxRatioEnabled = $('max_ratio_checkbox').getProperty('checked');
|
|
$('max_ratio_value').setProperty('disabled', !isMaxRatioEnabled);
|
|
|
|
const isMaxSeedingTimeEnabled = $('max_seeding_time_checkbox').getProperty('checked');
|
|
$('max_seeding_time_value').setProperty('disabled', !isMaxSeedingTimeEnabled);
|
|
|
|
$('max_ratio_act').setProperty('disabled', !(isMaxRatioEnabled || isMaxSeedingTimeEnabled));
|
|
};
|
|
|
|
const updateAddTrackersEnabled = function() {
|
|
const isAddTrackersEnabled = $('add_trackers_checkbox').getProperty('checked');
|
|
$('add_trackers_textarea').setProperty('disabled', !isAddTrackersEnabled);
|
|
};
|
|
|
|
// Web UI tab
|
|
const updateHttpsSettings = function() {
|
|
const isUseHttpsEnabled = $('use_https_checkbox').getProperty('checked');
|
|
$('ssl_cert_text').setProperty('disabled', !isUseHttpsEnabled);
|
|
$('ssl_key_text').setProperty('disabled', !isUseHttpsEnabled);
|
|
$('secureCookieCheckbox').setProperty('disabled', !isUseHttpsEnabled);
|
|
};
|
|
|
|
const updateBypasssAuthSettings = function() {
|
|
const isBypassAuthSubnetWhitelistEnabled = $('bypass_auth_subnet_whitelist_checkbox').getProperty('checked');
|
|
$('bypass_auth_subnet_whitelist_textarea').setProperty('disabled', !isBypassAuthSubnetWhitelistEnabled);
|
|
};
|
|
|
|
const updateAlternativeWebUISettings = function() {
|
|
const isUseAlternativeWebUIEnabled = $('use_alt_webui_checkbox').getProperty('checked');
|
|
$('webui_files_location_textarea').setProperty('disabled', !isUseAlternativeWebUIEnabled);
|
|
};
|
|
|
|
const updateHostHeaderValidationSettings = function() {
|
|
const isHostHeaderValidationEnabled = $('host_header_validation_checkbox').getProperty('checked');
|
|
$('webui_domain_textarea').setProperty('disabled', !isHostHeaderValidationEnabled);
|
|
};
|
|
|
|
const updateWebUICustomHTTPHeadersSettings = function() {
|
|
const isEnabled = $('webUIUseCustomHTTPHeadersCheckbox').getProperty('checked');
|
|
$('webUICustomHTTPHeadersTextarea').setProperty('disabled', !isEnabled);
|
|
};
|
|
|
|
const updateDynDnsSettings = function() {
|
|
const isDynDnsEnabled = $('use_dyndns_checkbox').getProperty('checked');
|
|
$('dyndns_select').setProperty('disabled', !isDynDnsEnabled);
|
|
$('dyndns_domain_text').setProperty('disabled', !isDynDnsEnabled);
|
|
$('dyndns_username_text').setProperty('disabled', !isDynDnsEnabled);
|
|
$('dyndns_password_text').setProperty('disabled', !isDynDnsEnabled);
|
|
};
|
|
|
|
const registerDynDns = function() {
|
|
if ($('dyndns_select').getProperty('value').toInt() == 1) {
|
|
window.open("http://www.no-ip.com/services/managed_dns/free_dynamic_dns.html", "NO-IP Registration");
|
|
}
|
|
else {
|
|
window.open("https://www.dyndns.com/account/services/hosts/add.html", "DynDNS Registration");
|
|
}
|
|
};
|
|
|
|
const generateRandomPort = function() {
|
|
const min = 1024;
|
|
const max = 65535;
|
|
const port = Math.floor(Math.random() * (max - min + 1) + min);
|
|
$('port_value').setProperty('value', port);
|
|
};
|
|
|
|
const time_padding = function(val) {
|
|
let ret = val.toString();
|
|
if (ret.length == 1)
|
|
ret = '0' + ret;
|
|
return ret;
|
|
};
|
|
|
|
// Advanced Tab
|
|
const updateNetworkInterfaces = function(default_iface) {
|
|
const url = 'api/v2/app/networkInterfaceList';
|
|
$('networkInterface').empty();
|
|
new Request.JSON({
|
|
url: url,
|
|
method: 'get',
|
|
noCache: true,
|
|
onFailure: function() {
|
|
alert("Could not contact qBittorrent");
|
|
},
|
|
onSuccess: function(ifaces) {
|
|
if (!ifaces) return;
|
|
|
|
$('networkInterface').options.add(new Option('QBT_TR(Any interface)QBT_TR[CONTEXT=OptionsDialog]', ''));
|
|
ifaces.forEach(function(item, index) {
|
|
$('networkInterface').options.add(new Option(item.name, item.value));
|
|
});
|
|
$('networkInterface').setProperty('value', default_iface);
|
|
}
|
|
}).send();
|
|
};
|
|
|
|
const updateInterfaceAddresses = function(iface, default_addr) {
|
|
const url = 'api/v2/app/networkInterfaceAddressList';
|
|
$('optionalIPAddressToBind').empty();
|
|
new Request.JSON({
|
|
url: url,
|
|
method: 'get',
|
|
noCache: true,
|
|
data: {
|
|
'iface': iface
|
|
},
|
|
onFailure: function() {
|
|
alert("Could not contact qBittorrent");
|
|
},
|
|
onSuccess: function(addresses) {
|
|
if (!addresses) return;
|
|
|
|
$('optionalIPAddressToBind').options.add(new Option('QBT_TR(All addresses)QBT_TR[CONTEXT=OptionDialog]', ''));
|
|
$('optionalIPAddressToBind').options.add(new Option('QBT_TR(All IPv4 addresses)QBT_TR[CONTEXT=OptionDialog]', '0.0.0.0'));
|
|
$('optionalIPAddressToBind').options.add(new Option('QBT_TR(All IPv6 addresses)QBT_TR[CONTEXT=OptionDialog]', '::'));
|
|
addresses.forEach(function(item, index) {
|
|
$('optionalIPAddressToBind').options.add(new Option(item, item));
|
|
});
|
|
$('optionalIPAddressToBind').setProperty('value', default_addr);
|
|
}
|
|
}).send();
|
|
};
|
|
|
|
const loadPreferences = function() {
|
|
const url = 'api/v2/app/preferences';
|
|
new Request.JSON({
|
|
url: url,
|
|
method: 'get',
|
|
noCache: true,
|
|
onFailure: function() {
|
|
alert("Could not contact qBittorrent");
|
|
},
|
|
onSuccess: function(pref) {
|
|
if (pref) {
|
|
// Downloads tab
|
|
// When adding a torrent
|
|
$('createsubfolder_checkbox').setProperty('checked', pref.create_subfolder_enabled);
|
|
$('dontstartdownloads_checkbox').setProperty('checked', pref.start_paused_enabled);
|
|
$('deletetorrentfileafter_checkbox').setProperty('checked', pref.auto_delete_mode);
|
|
|
|
$('preallocateall_checkbox').setProperty('checked', pref.preallocate_all);
|
|
$('appendext_checkbox').setProperty('checked', pref.incomplete_files_ext);
|
|
|
|
// Saving Management
|
|
$('default_tmm_combobox').setProperty('value', pref.auto_tmm_enabled);
|
|
$('torrent_changed_tmm_combobox').setProperty('value', pref.torrent_changed_tmm_enabled);
|
|
$('save_path_changed_tmm_combobox').setProperty('value', pref.save_path_changed_tmm_enabled);
|
|
$('category_changed_tmm_combobox').setProperty('value', pref.category_changed_tmm_enabled);
|
|
$('savepath_text').setProperty('value', pref.save_path);
|
|
$('temppath_checkbox').setProperty('checked', pref.temp_path_enabled);
|
|
$('temppath_text').setProperty('value', pref.temp_path);
|
|
updateTempDirEnabled();
|
|
if (pref.export_dir != '') {
|
|
$('exportdir_checkbox').setProperty('checked', true);
|
|
$('exportdir_text').setProperty('value', pref.export_dir);
|
|
}
|
|
else {
|
|
$('exportdir_checkbox').setProperty('checked', false);
|
|
$('exportdir_text').setProperty('value', '');
|
|
}
|
|
updateExportDirEnabled();
|
|
if (pref.export_dir_fin != '') {
|
|
$('exportdirfin_checkbox').setProperty('checked', true);
|
|
$('exportdirfin_text').setProperty('value', pref.export_dir_fin);
|
|
}
|
|
else {
|
|
$('exportdirfin_checkbox').setProperty('checked', false);
|
|
$('exportdirfin_text').setProperty('value', '');
|
|
}
|
|
updateExportDirFinEnabled();
|
|
|
|
// Automatically add torrents from
|
|
let i = 0;
|
|
for (const folder in pref.scan_dirs) {
|
|
let sel;
|
|
let other = "";
|
|
if (typeof pref.scan_dirs[folder] == "string") {
|
|
other = pref.scan_dirs[folder];
|
|
sel = "other";
|
|
}
|
|
else {
|
|
sel = (pref.scan_dirs[folder] == 0) ? "watch_folder" : "default_folder";
|
|
}
|
|
pushWatchFolder(i++, folder, sel, other);
|
|
}
|
|
|
|
// Email notification upon download completion
|
|
$('mail_notification_checkbox').setProperty('checked', pref.mail_notification_enabled);
|
|
$('src_email_txt').setProperty('value', pref.mail_notification_sender);
|
|
$('dest_email_txt').setProperty('value', pref.mail_notification_email);
|
|
$('smtp_server_txt').setProperty('value', pref.mail_notification_smtp);
|
|
$('mail_ssl_checkbox').setProperty('checked', pref.mail_notification_ssl_enabled);
|
|
$('mail_auth_checkbox').setProperty('checked', pref.mail_notification_auth_enabled);
|
|
$('mail_username_text').setProperty('value', pref.mail_notification_username);
|
|
$('mail_password_text').setProperty('value', pref.mail_notification_password);
|
|
updateMailNotification();
|
|
updateMailAuthSettings();
|
|
|
|
// Run an external program on torrent completion
|
|
$('autorun_checkbox').setProperty('checked', pref.autorun_enabled);
|
|
$('autorunProg_txt').setProperty('value', pref.autorun_program);
|
|
updateAutoRun();
|
|
|
|
// Connection tab
|
|
// Listening Port
|
|
$('port_value').setProperty('value', pref.listen_port.toInt());
|
|
$('upnp_checkbox').setProperty('checked', pref.upnp);
|
|
$('random_port_checkbox').setProperty('checked', pref.random_port);
|
|
updatePortValueEnabled();
|
|
|
|
// Connections Limits
|
|
const max_connec = pref.max_connec.toInt();
|
|
if (max_connec <= 0) {
|
|
$('max_connec_checkbox').setProperty('checked', false);
|
|
$('max_connec_value').setProperty('value', 500);
|
|
}
|
|
else {
|
|
$('max_connec_checkbox').setProperty('checked', true);
|
|
$('max_connec_value').setProperty('value', max_connec);
|
|
}
|
|
updateMaxConnecEnabled();
|
|
const max_connec_per_torrent = pref.max_connec_per_torrent.toInt();
|
|
if (max_connec_per_torrent <= 0) {
|
|
$('max_connec_per_torrent_checkbox').setProperty('checked', false);
|
|
$('max_connec_per_torrent_value').setProperty('value', 100);
|
|
}
|
|
else {
|
|
$('max_connec_per_torrent_checkbox').setProperty('checked', true);
|
|
$('max_connec_per_torrent_value').setProperty('value', max_connec_per_torrent);
|
|
}
|
|
updateMaxConnecPerTorrentEnabled();
|
|
const max_uploads = pref.max_uploads.toInt();
|
|
if (max_uploads <= 0) {
|
|
$('max_uploads_checkbox').setProperty('checked', false);
|
|
$('max_uploads_value').setProperty('value', 8);
|
|
}
|
|
else {
|
|
$('max_uploads_checkbox').setProperty('checked', true);
|
|
$('max_uploads_value').setProperty('value', max_uploads);
|
|
}
|
|
updateMaxUploadsEnabled();
|
|
const max_uploads_per_torrent = pref.max_uploads_per_torrent.toInt();
|
|
if (max_uploads_per_torrent <= 0) {
|
|
$('max_uploads_per_torrent_checkbox').setProperty('checked', false);
|
|
$('max_uploads_per_torrent_value').setProperty('value', 4);
|
|
}
|
|
else {
|
|
$('max_uploads_per_torrent_checkbox').setProperty('checked', true);
|
|
$('max_uploads_per_torrent_value').setProperty('value', max_uploads_per_torrent);
|
|
}
|
|
updateMaxUploadsPerTorrentEnabled();
|
|
|
|
// Proxy Server
|
|
switch (pref.proxy_type.toInt()) {
|
|
case 5: //SOCKS4
|
|
$('peer_proxy_type_select').setProperty('value', 'socks4');
|
|
break;
|
|
case 2: // SOCKS5
|
|
case 4: // SOCKS5_PW
|
|
$('peer_proxy_type_select').setProperty('value', 'socks5');
|
|
break;
|
|
case 1: // HTTP
|
|
case 3: // HTTP_PW
|
|
$('peer_proxy_type_select').setProperty('value', 'http');
|
|
break;
|
|
default: // NONE
|
|
$('peer_proxy_type_select').setProperty('value', 'none');
|
|
}
|
|
updatePeerProxySettings();
|
|
$('peer_proxy_host_text').setProperty('value', pref.proxy_ip);
|
|
$('peer_proxy_port_value').setProperty('value', pref.proxy_port);
|
|
$('use_peer_proxy_checkbox').setProperty('checked', pref.proxy_peer_connections);
|
|
$('proxy_only_for_torrents_checkbox').setProperty('checked', pref.proxy_torrents_only);
|
|
$('peer_proxy_auth_checkbox').setProperty('checked', pref.proxy_auth_enabled);
|
|
updatePeerProxyAuthSettings();
|
|
$('peer_proxy_username_text').setProperty('value', pref.proxy_username);
|
|
$('peer_proxy_password_text').setProperty('value', pref.proxy_password);
|
|
|
|
// IP Filtering
|
|
$('ipfilter_enabled_checkbox').setProperty('checked', pref.ip_filter_enabled);
|
|
$('ipfilter_text').setProperty('value', pref.ip_filter_path);
|
|
$('ipfilter_trackers_checkbox').setProperty('checked', pref.ip_filter_trackers);
|
|
$('banned_IPs_textarea').setProperty('value', pref.banned_IPs);
|
|
updateFilterSettings();
|
|
|
|
// Speed tab
|
|
// Global Rate Limits
|
|
$('up_limit_value').setProperty('value', (pref.up_limit.toInt() / 1024));
|
|
$('dl_limit_value').setProperty('value', (pref.dl_limit.toInt() / 1024));
|
|
// Alternative Global Rate Limits
|
|
$('alt_up_limit_value').setProperty('value', (pref.alt_up_limit.toInt() / 1024));
|
|
$('alt_dl_limit_value').setProperty('value', (pref.alt_dl_limit.toInt() / 1024));
|
|
|
|
$('enable_protocol_combobox').setProperty('value', pref.bittorrent_protocol);
|
|
$('limit_utp_rate_checkbox').setProperty('checked', pref.limit_utp_rate);
|
|
$('limit_tcp_overhead_checkbox').setProperty('checked', pref.limit_tcp_overhead);
|
|
$('limit_lan_peers_checkbox').setProperty('checked', pref.limit_lan_peers);
|
|
|
|
// Scheduling
|
|
$('limit_sheduling_checkbox').setProperty('checked', pref.scheduler_enabled);
|
|
$('schedule_from_hour').setProperty('value', time_padding(pref.schedule_from_hour));
|
|
$('schedule_from_min').setProperty('value', time_padding(pref.schedule_from_min));
|
|
$('schedule_to_hour').setProperty('value', time_padding(pref.schedule_to_hour));
|
|
$('schedule_to_min').setProperty('value', time_padding(pref.schedule_to_min));
|
|
$('schedule_freq_select').setProperty('value', pref.scheduler_days);
|
|
updateSchedulingEnabled();
|
|
|
|
// Bittorrent tab
|
|
// Privacy
|
|
$('dht_checkbox').setProperty('checked', pref.dht);
|
|
$('pex_checkbox').setProperty('checked', pref.pex);
|
|
$('lsd_checkbox').setProperty('checked', pref.lsd);
|
|
const encryption = pref.encryption.toInt();
|
|
$('encryption_select').getChildren('option')[encryption].setAttribute('selected', '');
|
|
$('anonymous_mode_checkbox').setProperty('checked', pref.anonymous_mode);
|
|
|
|
// Torrent Queueing
|
|
$('queueing_checkbox').setProperty('checked', pref.queueing_enabled);
|
|
$('max_active_dl_value').setProperty('value', pref.max_active_downloads.toInt());
|
|
$('max_active_up_value').setProperty('value', pref.max_active_uploads.toInt());
|
|
$('max_active_to_value').setProperty('value', pref.max_active_torrents.toInt());
|
|
$('dont_count_slow_torrents_checkbox').setProperty('checked', pref.dont_count_slow_torrents);
|
|
$('dl_rate_threshold').setProperty('value', pref.slow_torrent_dl_rate_threshold.toInt());
|
|
$('ul_rate_threshold').setProperty('value', pref.slow_torrent_ul_rate_threshold.toInt());
|
|
$('torrent_inactive_timer').setProperty('value', pref.slow_torrent_inactive_timer.toInt());
|
|
updateQueueingSystem();
|
|
|
|
// Share Limiting
|
|
$('max_ratio_checkbox').setProperty('checked', pref.max_ratio_enabled);
|
|
if (pref.max_ratio_enabled)
|
|
$('max_ratio_value').setProperty('value', pref.max_ratio);
|
|
else
|
|
$('max_ratio_value').setProperty('value', 1);
|
|
$('max_seeding_time_checkbox').setProperty('checked', pref.max_seeding_time_enabled);
|
|
if (pref.max_seeding_time_enabled)
|
|
$('max_seeding_time_value').setProperty('value', pref.max_seeding_time.toInt());
|
|
else
|
|
$('max_seeding_time_value').setProperty('value', 1440);
|
|
let maxRatioAct = 0;
|
|
switch (pref.max_ratio_act.toInt()) {
|
|
case 0: // Pause
|
|
default:
|
|
maxRatioAct = 0;
|
|
break;
|
|
case 1: // Remove
|
|
maxRatioAct = 1;
|
|
break;
|
|
case 2: // Enable super seeding
|
|
maxRatioAct = 3;
|
|
break;
|
|
case 3: // Remove torrent and files
|
|
maxRatioAct = 2;
|
|
break;
|
|
}
|
|
$('max_ratio_act').getChildren('option')[maxRatioAct].setAttribute('selected', '');
|
|
updateMaxRatioTimeEnabled();
|
|
|
|
// Add trackers
|
|
$('add_trackers_checkbox').setProperty('checked', pref.add_trackers_enabled);
|
|
$('add_trackers_textarea').setProperty('value', pref.add_trackers);
|
|
updateAddTrackersEnabled();
|
|
|
|
// RSS Tab
|
|
$('enable_fetching_rss_feeds_checkbox').setProperty('checked', pref.rss_processing_enabled);
|
|
$('feed_refresh_interval').setProperty('value', pref.rss_refresh_interval);
|
|
$('maximum_article_number').setProperty('value', pref.rss_max_articles_per_feed);
|
|
$('enable_auto_downloading_rss_torrents_checkbox').setProperty('checked', pref.rss_auto_downloading_enabled);
|
|
$('downlock_repack_proper_episodes').setProperty('checked', pref.rss_download_repack_proper_episodes);
|
|
$('rss_filter_textarea').setProperty('value', pref.rss_smart_episode_filters);
|
|
|
|
// Web UI tab
|
|
// Language
|
|
$('locale_select').setProperty('value', pref.locale);
|
|
|
|
// HTTP Server
|
|
$('webui_domain_textarea').setProperty('value', pref.web_ui_domain_list);
|
|
$('webui_address_value').setProperty('value', pref.web_ui_address);
|
|
$('webui_port_value').setProperty('value', pref.web_ui_port);
|
|
$('webui_upnp_checkbox').setProperty('checked', pref.web_ui_upnp);
|
|
$('use_https_checkbox').setProperty('checked', pref.use_https);
|
|
$('ssl_cert_text').setProperty('value', pref.web_ui_https_cert_path);
|
|
$('ssl_key_text').setProperty('value', pref.web_ui_https_key_path);
|
|
updateHttpsSettings();
|
|
|
|
// Authentication
|
|
$('webui_username_text').setProperty('value', pref.web_ui_username);
|
|
$('bypass_local_auth_checkbox').setProperty('checked', pref.bypass_local_auth);
|
|
$('bypass_auth_subnet_whitelist_checkbox').setProperty('checked', pref.bypass_auth_subnet_whitelist_enabled);
|
|
$('bypass_auth_subnet_whitelist_textarea').setProperty('value', pref.bypass_auth_subnet_whitelist);
|
|
updateBypasssAuthSettings();
|
|
$('webUIMaxAuthFailCountInput').setProperty('value', pref.web_ui_max_auth_fail_count.toInt());
|
|
$('webUIBanDurationInput').setProperty('value', pref.web_ui_ban_duration.toInt());
|
|
$('webUISessionTimeoutInput').setProperty('value', pref.web_ui_session_timeout.toInt());
|
|
|
|
// Use alternative Web UI
|
|
$('use_alt_webui_checkbox').setProperty('checked', pref.alternative_webui_enabled);
|
|
$('webui_files_location_textarea').setProperty('value', pref.alternative_webui_path);
|
|
updateAlternativeWebUISettings();
|
|
|
|
// Security
|
|
$('clickjacking_protection_checkbox').setProperty('checked', pref.web_ui_clickjacking_protection_enabled);
|
|
$('csrf_protection_checkbox').setProperty('checked', pref.web_ui_csrf_protection_enabled);
|
|
$('secureCookieCheckbox').setProperty('checked', pref.web_ui_secure_cookie_enabled);
|
|
$('host_header_validation_checkbox').setProperty('checked', pref.web_ui_host_header_validation_enabled);
|
|
updateHostHeaderValidationSettings();
|
|
|
|
// Custom HTTP headers
|
|
$('webUIUseCustomHTTPHeadersCheckbox').setProperty('checked', pref.web_ui_use_custom_http_headers_enabled);
|
|
$('webUICustomHTTPHeadersTextarea').setProperty('value', pref.web_ui_custom_http_headers);
|
|
updateWebUICustomHTTPHeadersSettings();
|
|
|
|
// Update my dynamic domain name
|
|
$('use_dyndns_checkbox').setProperty('checked', pref.dyndns_enabled);
|
|
$('dyndns_select').setProperty('value', pref.dyndns_service);
|
|
$('dyndns_domain_text').setProperty('value', pref.dyndns_domain);
|
|
$('dyndns_username_text').setProperty('value', pref.dyndns_username);
|
|
$('dyndns_password_text').setProperty('value', pref.dyndns_password);
|
|
updateDynDnsSettings();
|
|
|
|
// Advanced settings
|
|
// qBittorrent section
|
|
updateNetworkInterfaces(pref.current_network_interface);
|
|
updateInterfaceAddresses(pref.current_network_interface, pref.current_interface_address);
|
|
$('saveResumeDataInterval').setProperty('value', pref.save_resume_data_interval);
|
|
$('recheckTorrentsOnCompletion').setProperty('checked', pref.recheck_completed_torrents);
|
|
$('resolvePeerCountries').setProperty('checked', pref.resolve_peer_countries);
|
|
// libtorrent section
|
|
$('asyncIOThreads').setProperty('value', pref.async_io_threads);
|
|
$('filePoolSize').setProperty('value', pref.file_pool_size);
|
|
$('outstandMemoryWhenCheckingTorrents').setProperty('value', pref.checking_memory_use);
|
|
$('diskCache').setProperty('value', pref.disk_cache);
|
|
$('diskCacheExpiryInterval').setProperty('value', pref.disk_cache_ttl);
|
|
$('enableOSCache').setProperty('checked', pref.enable_os_cache);
|
|
$('coalesceReadsAndWrites').setProperty('checked', pref.enable_coalesce_read_write);
|
|
$('pieceExtentAffinity').setProperty('checked', pref.enable_piece_extent_affinity);
|
|
$('sendUploadPieceSuggestions').setProperty('checked', pref.enable_upload_suggestions);
|
|
$('sendBufferWatermark').setProperty('value', pref.send_buffer_watermark);
|
|
$('sendBufferLowWatermark').setProperty('value', pref.send_buffer_low_watermark);
|
|
$('sendBufferWatermarkFactor').setProperty('value', pref.send_buffer_watermark_factor);
|
|
$('socketBacklogSize').setProperty('value', pref.socket_backlog_size);
|
|
$('outgoingPortsMin').setProperty('value', pref.outgoing_ports_min);
|
|
$('outgoingPortsMax').setProperty('value', pref.outgoing_ports_max);
|
|
$('UPnPLeaseDuration').setProperty('value', pref.upnp_lease_duration);
|
|
$('utpTCPMixedModeAlgorithm').setProperty('value', pref.utp_tcp_mixed_mode);
|
|
$('allowMultipleConnectionsFromTheSameIPAddress').setProperty('checked', pref.enable_multi_connections_from_same_ip);
|
|
$('validateHTTPSTrackerCertificate').setProperty('checked', pref.validate_https_tracker_certificate);
|
|
$('enableEmbeddedTracker').setProperty('checked', pref.enable_embedded_tracker);
|
|
$('embeddedTrackerPort').setProperty('value', pref.embedded_tracker_port);
|
|
$('uploadSlotsBehavior').setProperty('value', pref.upload_slots_behavior);
|
|
$('uploadChokingAlgorithm').setProperty('value', pref.upload_choking_algorithm);
|
|
$('announceAllTrackers').setProperty('checked', pref.announce_to_all_trackers);
|
|
$('announceAllTiers').setProperty('checked', pref.announce_to_all_tiers);
|
|
$('announceIP').setProperty('value', pref.announce_ip);
|
|
$('stopTrackerTimeout').setProperty('value', pref.stop_tracker_timeout);
|
|
$('peerTurnover').setProperty('value', pref.peer_turnover);
|
|
$('peerTurnoverCutoff').setProperty('value', pref.peer_turnover_cutoff);
|
|
$('peerTurnoverInterval').setProperty('value', pref.peer_turnover_interval);
|
|
}
|
|
}
|
|
}).send();
|
|
};
|
|
|
|
const applyPreferences = function() {
|
|
const settings = new Hash();
|
|
// Validate form data
|
|
// Downloads tab
|
|
// When adding a torrent
|
|
settings.set('create_subfolder_enabled', $('createsubfolder_checkbox').getProperty('checked'));
|
|
settings.set('start_paused_enabled', $('dontstartdownloads_checkbox').getProperty('checked'));
|
|
settings.set('auto_delete_mode', $('deletetorrentfileafter_checkbox').getProperty('checked'));
|
|
|
|
settings.set('preallocate_all', $('preallocateall_checkbox').getProperty('checked'));
|
|
settings.set('incomplete_files_ext', $('appendext_checkbox').getProperty('checked'));
|
|
|
|
// Saving Management
|
|
settings.set('auto_tmm_enabled', $('default_tmm_combobox').getProperty('value'));
|
|
settings.set('torrent_changed_tmm_enabled', $('torrent_changed_tmm_combobox').getProperty('value'));
|
|
settings.set('save_path_changed_tmm_enabled', $('save_path_changed_tmm_combobox').getProperty('value'));
|
|
settings.set('category_changed_tmm_enabled', $('category_changed_tmm_combobox').getProperty('value'));
|
|
settings.set('save_path', $('savepath_text').getProperty('value'));
|
|
settings.set('temp_path_enabled', $('temppath_checkbox').getProperty('checked'));
|
|
settings.set('temp_path', $('temppath_text').getProperty('value'));
|
|
if ($('exportdir_checkbox').getProperty('checked'))
|
|
settings.set('export_dir', $('exportdir_text').getProperty('value'));
|
|
else
|
|
settings.set('export_dir', '');
|
|
if ($('exportdirfin_checkbox').getProperty('checked'))
|
|
settings.set('export_dir_fin', $('exportdirfin_text').getProperty('value'));
|
|
else
|
|
settings.set('export_dir_fin', '');
|
|
|
|
// Automatically add torrents from
|
|
settings.set('scan_dirs', getWatchedFolders());
|
|
|
|
// Email notification upon download completion
|
|
settings.set('mail_notification_enabled', $('mail_notification_checkbox').getProperty('checked'));
|
|
settings.set('mail_notification_sender', $('src_email_txt').getProperty('value'));
|
|
settings.set('mail_notification_email', $('dest_email_txt').getProperty('value'));
|
|
settings.set('mail_notification_smtp', $('smtp_server_txt').getProperty('value'));
|
|
settings.set('mail_notification_ssl_enabled', $('mail_ssl_checkbox').getProperty('checked'));
|
|
settings.set('mail_notification_auth_enabled', $('mail_auth_checkbox').getProperty('checked'));
|
|
settings.set('mail_notification_username', $('mail_username_text').getProperty('value'));
|
|
settings.set('mail_notification_password', $('mail_password_text').getProperty('value'));
|
|
|
|
// Run an external program on torrent completion
|
|
settings.set('autorun_enabled', $('autorun_checkbox').getProperty('checked'));
|
|
settings.set('autorun_program', $('autorunProg_txt').getProperty('value'));
|
|
|
|
// Connection tab
|
|
// Listening Port
|
|
const listen_port = $('port_value').getProperty('value').toInt();
|
|
if (isNaN(listen_port) || listen_port < 1 || listen_port > 65535) {
|
|
alert("QBT_TR(The port used for incoming connections must be between 1 and 65535.)QBT_TR[CONTEXT=HttpServer]");
|
|
return;
|
|
}
|
|
settings.set('listen_port', listen_port);
|
|
settings.set('upnp', $('upnp_checkbox').getProperty('checked'));
|
|
settings.set('random_port', $('random_port_checkbox').getProperty('checked'));
|
|
|
|
// Connections Limits
|
|
let max_connec = -1;
|
|
if ($('max_connec_checkbox').getProperty('checked')) {
|
|
max_connec = $('max_connec_value').getProperty('value').toInt();
|
|
if (isNaN(max_connec) || max_connec <= 0) {
|
|
alert("QBT_TR(Maximum number of connections limit must be greater than 0 or disabled.)QBT_TR[CONTEXT=HttpServer]");
|
|
return;
|
|
}
|
|
}
|
|
settings.set('max_connec', max_connec);
|
|
let max_connec_per_torrent = -1;
|
|
if ($('max_connec_per_torrent_checkbox').getProperty('checked')) {
|
|
max_connec_per_torrent = $('max_connec_per_torrent_value').getProperty('value').toInt();
|
|
if (isNaN(max_connec_per_torrent) || max_connec_per_torrent <= 0) {
|
|
alert("QBT_TR(Maximum number of connections per torrent limit must be greater than 0 or disabled.)QBT_TR[CONTEXT=HttpServer]");
|
|
return;
|
|
}
|
|
}
|
|
settings.set('max_connec_per_torrent', max_connec_per_torrent);
|
|
let max_uploads = -1;
|
|
if ($('max_uploads_checkbox').getProperty('checked')) {
|
|
max_uploads = $('max_uploads_value').getProperty('value').toInt();
|
|
if (isNaN(max_uploads) || max_uploads <= 0) {
|
|
alert("QBT_TR(Global number of upload slots limit must be greater than 0 or disabled.)QBT_TR[CONTEXT=HttpServer]");
|
|
return;
|
|
}
|
|
}
|
|
settings.set('max_uploads', max_uploads);
|
|
let max_uploads_per_torrent = -1;
|
|
if ($('max_uploads_per_torrent_checkbox').getProperty('checked')) {
|
|
max_uploads_per_torrent = $('max_uploads_per_torrent_value').getProperty('value').toInt();
|
|
if (isNaN(max_uploads_per_torrent) || max_uploads_per_torrent <= 0) {
|
|
alert("QBT_TR(Maximum number of upload slots per torrent limit must be greater than 0 or disabled.)QBT_TR[CONTEXT=HttpServer]");
|
|
return;
|
|
}
|
|
}
|
|
settings.set('max_uploads_per_torrent', max_uploads_per_torrent);
|
|
|
|
// Proxy Server
|
|
const proxy_type_str = $('peer_proxy_type_select').getProperty('value');
|
|
let proxy_type = 0;
|
|
let proxy_auth_enabled = false;
|
|
if (proxy_type_str == "socks5") {
|
|
if ($('peer_proxy_auth_checkbox').getProperty('checked')) {
|
|
proxy_type = 4;
|
|
proxy_auth_enabled = true;
|
|
}
|
|
else {
|
|
proxy_type = 2;
|
|
}
|
|
}
|
|
else {
|
|
if (proxy_type_str == "socks4") {
|
|
proxy_type = 5;
|
|
}
|
|
else {
|
|
if (proxy_type_str == "http") {
|
|
if ($('peer_proxy_auth_checkbox').getProperty('checked')) {
|
|
proxy_type = 3;
|
|
proxy_auth_enabled = true;
|
|
}
|
|
else {
|
|
proxy_type = 1;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
settings.set('proxy_type', proxy_type);
|
|
settings.set('proxy_auth_enabled', proxy_auth_enabled);
|
|
settings.set('proxy_ip', $('peer_proxy_host_text').getProperty('value'));
|
|
settings.set('proxy_port', $('peer_proxy_port_value').getProperty('value').toInt());
|
|
settings.set('proxy_peer_connections', $('use_peer_proxy_checkbox').getProperty('checked'));
|
|
settings.set('proxy_torrents_only', $('proxy_only_for_torrents_checkbox').getProperty('checked'));
|
|
settings.set('proxy_username', $('peer_proxy_username_text').getProperty('value'));
|
|
settings.set('proxy_password', $('peer_proxy_password_text').getProperty('value'));
|
|
|
|
// IP Filtering
|
|
settings.set('ip_filter_enabled', $('ipfilter_enabled_checkbox').getProperty('checked'));
|
|
settings.set('ip_filter_path', $('ipfilter_text').getProperty('value'));
|
|
settings.set('ip_filter_trackers', $('ipfilter_trackers_checkbox').getProperty('checked'));
|
|
settings.set('banned_IPs', $('banned_IPs_textarea').getProperty('value'));
|
|
|
|
// Speed tab
|
|
// Global Rate Limits
|
|
const up_limit = $('up_limit_value').getProperty('value').toInt() * 1024;
|
|
if (isNaN(up_limit) || up_limit < 0) {
|
|
alert("QBT_TR(Global upload rate limit must be greater than 0 or disabled.)QBT_TR[CONTEXT=HttpServer]");
|
|
return;
|
|
}
|
|
settings.set('up_limit', up_limit);
|
|
|
|
const dl_limit = $('dl_limit_value').getProperty('value').toInt() * 1024;
|
|
if (isNaN(dl_limit) || dl_limit < 0) {
|
|
alert("QBT_TR(Global download rate limit must be greater than 0 or disabled.)QBT_TR[CONTEXT=HttpServer]");
|
|
return;
|
|
}
|
|
settings.set('dl_limit', dl_limit);
|
|
|
|
// Alternative Global Rate Limits
|
|
const alt_up_limit = $('alt_up_limit_value').getProperty('value').toInt() * 1024;
|
|
if (isNaN(alt_up_limit) || alt_up_limit < 0) {
|
|
alert("QBT_TR(Alternative upload rate limit must be greater than 0 or disabled.)QBT_TR[CONTEXT=HttpServer]");
|
|
return;
|
|
}
|
|
settings.set('alt_up_limit', alt_up_limit);
|
|
|
|
const alt_dl_limit = $('alt_dl_limit_value').getProperty('value').toInt() * 1024;
|
|
if (isNaN(alt_dl_limit) || alt_dl_limit < 0) {
|
|
alert("QBT_TR(Alternative download rate limit must be greater than 0 or disabled.)QBT_TR[CONTEXT=HttpServer]");
|
|
return;
|
|
}
|
|
settings.set('alt_dl_limit', alt_dl_limit);
|
|
|
|
settings.set('bittorrent_protocol', $('enable_protocol_combobox').getProperty('value'));
|
|
settings.set('limit_utp_rate', $('limit_utp_rate_checkbox').getProperty('checked'));
|
|
settings.set('limit_tcp_overhead', $('limit_tcp_overhead_checkbox').getProperty('checked'));
|
|
settings.set('limit_lan_peers', $('limit_lan_peers_checkbox').getProperty('checked'));
|
|
|
|
// Scheduler
|
|
const scheduling_enabled = $('limit_sheduling_checkbox').getProperty('checked');
|
|
settings.set('scheduler_enabled', scheduling_enabled);
|
|
if (scheduling_enabled) {
|
|
settings.set('schedule_from_hour', $('schedule_from_hour').getProperty('value').toInt());
|
|
settings.set('schedule_from_min', $('schedule_from_min').getProperty('value').toInt());
|
|
settings.set('schedule_to_hour', $('schedule_to_hour').getProperty('value').toInt());
|
|
settings.set('schedule_to_min', $('schedule_to_min').getProperty('value').toInt());
|
|
settings.set('scheduler_days', $('schedule_freq_select').getProperty('value').toInt());
|
|
}
|
|
|
|
// Bittorrent tab
|
|
// Privacy
|
|
settings.set('dht', $('dht_checkbox').getProperty('checked'));
|
|
settings.set('pex', $('pex_checkbox').getProperty('checked'));
|
|
settings.set('lsd', $('lsd_checkbox').getProperty('checked'));
|
|
settings.set('encryption', $('encryption_select').getSelected()[0].getProperty('value'));
|
|
settings.set('anonymous_mode', $('anonymous_mode_checkbox').getProperty('checked'));
|
|
|
|
// Torrent Queueing
|
|
settings.set('queueing_enabled', $('queueing_checkbox').getProperty('checked'));
|
|
if ($('queueing_checkbox').getProperty('checked')) {
|
|
const max_active_downloads = $('max_active_dl_value').getProperty('value').toInt();
|
|
if (isNaN(max_active_downloads) || max_active_downloads < -1) {
|
|
alert("QBT_TR(Maximum active downloads must be greater than -1.)QBT_TR[CONTEXT=HttpServer]");
|
|
return;
|
|
}
|
|
settings.set('max_active_downloads', max_active_downloads);
|
|
const max_active_uploads = $('max_active_up_value').getProperty('value').toInt();
|
|
if (isNaN(max_active_uploads) || max_active_uploads < -1) {
|
|
alert("QBT_TR(Maximum active uploads must be greater than -1.)QBT_TR[CONTEXT=HttpServer]");
|
|
return;
|
|
}
|
|
settings.set('max_active_uploads', max_active_uploads);
|
|
const max_active_torrents = $('max_active_to_value').getProperty('value').toInt();
|
|
if (isNaN(max_active_torrents) || max_active_torrents < -1) {
|
|
alert("QBT_TR(Maximum active torrents must be greater than -1.)QBT_TR[CONTEXT=HttpServer]");
|
|
return;
|
|
}
|
|
settings.set('max_active_torrents', max_active_torrents);
|
|
settings.set('dont_count_slow_torrents', $('dont_count_slow_torrents_checkbox').getProperty('checked'));
|
|
const dl_rate_threshold = $('dl_rate_threshold').getProperty('value').toInt();
|
|
if (isNaN(dl_rate_threshold) || (dl_rate_threshold < 1)) {
|
|
alert("QBT_TR(Download rate threshold must be greater than 0.)QBT_TR[CONTEXT=HttpServer]");
|
|
return;
|
|
}
|
|
settings.set('slow_torrent_dl_rate_threshold', dl_rate_threshold);
|
|
const ul_rate_threshold = $('ul_rate_threshold').getProperty('value').toInt();
|
|
if (isNaN(ul_rate_threshold) || (ul_rate_threshold < 1)) {
|
|
alert("QBT_TR(Upload rate threshold must be greater than 0.)QBT_TR[CONTEXT=HttpServer]");
|
|
return;
|
|
}
|
|
settings.set('slow_torrent_ul_rate_threshold', ul_rate_threshold);
|
|
const torrent_inactive_timer = $('torrent_inactive_timer').getProperty('value').toInt();
|
|
if (isNaN(torrent_inactive_timer) || (torrent_inactive_timer < 1)) {
|
|
alert("QBT_TR(Torrent inactivity timer must be greater than 0.)QBT_TR[CONTEXT=HttpServer]");
|
|
return;
|
|
}
|
|
settings.set('slow_torrent_inactive_timer', torrent_inactive_timer);
|
|
}
|
|
|
|
// Share Ratio Limiting
|
|
let max_ratio = -1;
|
|
if ($('max_ratio_checkbox').getProperty('checked')) {
|
|
max_ratio = $('max_ratio_value').getProperty('value');
|
|
if (isNaN(max_ratio) || max_ratio < 0 || max_ratio > 9998) {
|
|
alert("QBT_TR(Share ratio limit must be between 0 and 9998.)QBT_TR[CONTEXT=HttpServer]");
|
|
return;
|
|
}
|
|
}
|
|
settings.set('max_ratio_enabled', $('max_ratio_checkbox').getProperty('checked'));
|
|
settings.set('max_ratio', max_ratio);
|
|
settings.set('max_ratio_act', $('max_ratio_act').getProperty('value').toInt());
|
|
|
|
let max_seeding_time = -1;
|
|
if ($('max_seeding_time_checkbox').getProperty('checked')) {
|
|
max_seeding_time = $('max_seeding_time_value').getProperty('value').toInt();
|
|
if (isNaN(max_seeding_time) || max_seeding_time < 0 || max_seeding_time > 525600) {
|
|
alert("QBT_TR(Seeding time limit must be between 0 and 525600 minutes.)QBT_TR[CONTEXT=HttpServer]");
|
|
return;
|
|
}
|
|
}
|
|
settings.set('max_seeding_time_enabled', $('max_seeding_time_checkbox').getProperty('checked'));
|
|
settings.set('max_seeding_time', max_seeding_time);
|
|
settings.set('max_ratio_act', $('max_ratio_act').getProperty('value').toInt());
|
|
|
|
// Add trackers
|
|
settings.set('add_trackers_enabled', $('add_trackers_checkbox').getProperty('checked'));
|
|
settings.set('add_trackers', $('add_trackers_textarea').getProperty('value'));
|
|
|
|
// RSS Tab
|
|
settings.set('rss_processing_enabled', $('enable_fetching_rss_feeds_checkbox').getProperty('checked'));
|
|
settings.set('rss_refresh_interval', $('feed_refresh_interval').getProperty('value'));
|
|
settings.set('rss_max_articles_per_feed', $('maximum_article_number').getProperty('value'));
|
|
settings.set('rss_auto_downloading_enabled', $('enable_auto_downloading_rss_torrents_checkbox').getProperty('checked'));
|
|
settings.set('rss_download_repack_proper_episodes', $('downlock_repack_proper_episodes').getProperty('checked'));
|
|
settings.set('rss_smart_episode_filters', $('rss_filter_textarea').getProperty('value'));
|
|
|
|
// Web UI tab
|
|
// Language
|
|
settings.set('locale', $('locale_select').getProperty('value'));
|
|
|
|
// HTTP Server
|
|
settings.set('web_ui_domain_list', $('webui_domain_textarea').getProperty('value'));
|
|
const web_ui_address = $('webui_address_value').getProperty('value').toString();
|
|
const web_ui_port = $('webui_port_value').getProperty('value').toInt();
|
|
if (isNaN(web_ui_port) || web_ui_port < 1 || web_ui_port > 65535) {
|
|
alert("QBT_TR(The port used for the Web UI must be between 1 and 65535.)QBT_TR[CONTEXT=HttpServer]");
|
|
return;
|
|
}
|
|
settings.set('web_ui_address', web_ui_address);
|
|
settings.set('web_ui_port', web_ui_port);
|
|
settings.set('web_ui_upnp', $('webui_upnp_checkbox').getProperty('checked'));
|
|
settings.set('use_https', $('use_https_checkbox').getProperty('checked'));
|
|
settings.set('web_ui_https_cert_path', $('ssl_cert_text').getProperty('value'));
|
|
settings.set('web_ui_https_key_path', $('ssl_key_text').getProperty('value'));
|
|
|
|
// Authentication
|
|
const web_ui_username = $('webui_username_text').getProperty('value');
|
|
if (web_ui_username.length < 3) {
|
|
alert("QBT_TR(The Web UI username must be at least 3 characters long.)QBT_TR[CONTEXT=OptionsDialog]");
|
|
return;
|
|
}
|
|
const web_ui_password = $('webui_password_text').getProperty('value');
|
|
if ((0 < web_ui_password.length) && (web_ui_password.length < 6)) {
|
|
alert("QBT_TR(The Web UI password must be at least 6 characters long.)QBT_TR[CONTEXT=OptionsDialog]");
|
|
return;
|
|
}
|
|
|
|
settings.set('web_ui_username', web_ui_username);
|
|
if (web_ui_password.length > 0)
|
|
settings.set('web_ui_password', web_ui_password);
|
|
settings.set('bypass_local_auth', $('bypass_local_auth_checkbox').getProperty('checked'));
|
|
settings.set('bypass_auth_subnet_whitelist_enabled', $('bypass_auth_subnet_whitelist_checkbox').getProperty('checked'));
|
|
settings.set('bypass_auth_subnet_whitelist', $('bypass_auth_subnet_whitelist_textarea').getProperty('value'));
|
|
settings.set('web_ui_max_auth_fail_count', $('webUIMaxAuthFailCountInput').getProperty('value'));
|
|
settings.set('web_ui_ban_duration', $('webUIBanDurationInput').getProperty('value'));
|
|
settings.set('web_ui_session_timeout', $('webUISessionTimeoutInput').getProperty('value'));
|
|
|
|
// Use alternative Web UI
|
|
const alternative_webui_enabled = $('use_alt_webui_checkbox').getProperty('checked');
|
|
const webui_files_location_textarea = $('webui_files_location_textarea').getProperty('value');
|
|
if (alternative_webui_enabled && (webui_files_location_textarea.trim() === "")) {
|
|
alert("QBT_TR(The alternative Web UI files location cannot be blank.)QBT_TR[CONTEXT=OptionsDialog]");
|
|
return;
|
|
}
|
|
settings.set('alternative_webui_enabled', alternative_webui_enabled);
|
|
settings.set('alternative_webui_path', webui_files_location_textarea);
|
|
|
|
// Security
|
|
settings.set('web_ui_clickjacking_protection_enabled', $('clickjacking_protection_checkbox').getProperty('checked'));
|
|
settings.set('web_ui_csrf_protection_enabled', $('csrf_protection_checkbox').getProperty('checked'));
|
|
settings.set('web_ui_secure_cookie_enabled', $('secureCookieCheckbox').getProperty('checked'));
|
|
settings.set('web_ui_host_header_validation_enabled', $('host_header_validation_checkbox').getProperty('checked'));
|
|
|
|
// Custom HTTP headers
|
|
settings.set('web_ui_use_custom_http_headers_enabled', $('webUIUseCustomHTTPHeadersCheckbox').getProperty('checked'));
|
|
settings.set('web_ui_custom_http_headers', $('webUICustomHTTPHeadersTextarea').getProperty('value'));
|
|
|
|
// Update my dynamic domain name
|
|
settings.set('dyndns_enabled', $('use_dyndns_checkbox').getProperty('checked'));
|
|
settings.set('dyndns_service', $('dyndns_select').getProperty('value'));
|
|
settings.set('dyndns_domain', $('dyndns_domain_text').getProperty('value'));
|
|
settings.set('dyndns_username', $('dyndns_username_text').getProperty('value'));
|
|
settings.set('dyndns_password', $('dyndns_password_text').getProperty('value'));
|
|
|
|
// Update advanced settings
|
|
// qBittorrent section
|
|
settings.set('current_network_interface', $('networkInterface').getProperty('value'));
|
|
settings.set('current_interface_address', $('optionalIPAddressToBind').getProperty('value'));
|
|
settings.set('save_resume_data_interval', $('saveResumeDataInterval').getProperty('value'));
|
|
settings.set('recheck_completed_torrents', $('recheckTorrentsOnCompletion').getProperty('checked'));
|
|
settings.set('resolve_peer_countries', $('resolvePeerCountries').getProperty('checked'));
|
|
|
|
// libtorrent section
|
|
settings.set('async_io_threads', $('asyncIOThreads').getProperty('value'));
|
|
settings.set('file_pool_size', $('filePoolSize').getProperty('value'));
|
|
settings.set('checking_memory_use', $('outstandMemoryWhenCheckingTorrents').getProperty('value'));
|
|
settings.set('disk_cache', $('diskCache').getProperty('value'));
|
|
settings.set('disk_cache_ttl', $('diskCacheExpiryInterval').getProperty('value'));
|
|
settings.set('enable_os_cache', $('enableOSCache').getProperty('checked'));
|
|
settings.set('enable_coalesce_read_write', $('coalesceReadsAndWrites').getProperty('checked'));
|
|
settings.set('enable_piece_extent_affinity', $('pieceExtentAffinity').getProperty('checked'));
|
|
settings.set('enable_upload_suggestions', $('sendUploadPieceSuggestions').getProperty('checked'));
|
|
settings.set('send_buffer_watermark', $('sendBufferWatermark').getProperty('value'));
|
|
settings.set('send_buffer_low_watermark', $('sendBufferLowWatermark').getProperty('value'));
|
|
settings.set('send_buffer_watermark_factor', $('sendBufferWatermarkFactor').getProperty('value'));
|
|
settings.set('socket_backlog_size', $('socketBacklogSize').getProperty('value'));
|
|
settings.set('outgoing_ports_min', $('outgoingPortsMin').getProperty('value'));
|
|
settings.set('outgoing_ports_max', $('outgoingPortsMax').getProperty('value'));
|
|
settings.set('upnp_lease_duration', $('UPnPLeaseDuration').getProperty('value'));
|
|
settings.set('utp_tcp_mixed_mode', $('utpTCPMixedModeAlgorithm').getProperty('value'));
|
|
settings.set('enable_multi_connections_from_same_ip', $('allowMultipleConnectionsFromTheSameIPAddress').getProperty('checked'));
|
|
settings.set('validate_https_tracker_certificate', $('validateHTTPSTrackerCertificate').getProperty('checked'));
|
|
settings.set('enable_embedded_tracker', $('enableEmbeddedTracker').getProperty('checked'));
|
|
settings.set('embedded_tracker_port', $('embeddedTrackerPort').getProperty('value'));
|
|
settings.set('upload_slots_behavior', $('uploadSlotsBehavior').getProperty('value'));
|
|
settings.set('upload_choking_algorithm', $('uploadChokingAlgorithm').getProperty('value'));
|
|
settings.set('announce_to_all_trackers', $('announceAllTrackers').getProperty('checked'));
|
|
settings.set('announce_to_all_tiers', $('announceAllTiers').getProperty('checked'));
|
|
settings.set('announce_ip', $('announceIP').getProperty('value'));
|
|
settings.set('stop_tracker_timeout', $('stopTrackerTimeout').getProperty('value'));
|
|
settings.set('peer_turnover', $('peerTurnover').getProperty('value'));
|
|
settings.set('peer_turnover_cutoff', $('peerTurnoverCutoff').getProperty('value'));
|
|
settings.set('peer_turnover_interval', $('peerTurnoverInterval').getProperty('value'));
|
|
|
|
// Send it to qBT
|
|
const json_str = JSON.encode(settings);
|
|
|
|
new Request({
|
|
url: 'api/v2/app/setPreferences',
|
|
method: 'post',
|
|
data: {
|
|
'json': json_str,
|
|
},
|
|
onFailure: function() {
|
|
alert("QBT_TR(Unable to save program preferences, qBittorrent is probably unreachable.)QBT_TR[CONTEXT=HttpServer]");
|
|
window.parent.closeWindows();
|
|
},
|
|
onSuccess: function() {
|
|
// Close window
|
|
window.parent.location.reload();
|
|
window.parent.closeWindows();
|
|
}
|
|
}).send();
|
|
};
|
|
|
|
$('networkInterface').addEvent('change', function() {
|
|
updateInterfaceAddresses($(this).getProperty('value'), '');
|
|
});
|
|
|
|
loadPreferences();
|
|
|
|
return exports();
|
|
})();
|
|
</script>
|