mirror of
https://github.com/qbittorrent/qBittorrent.git
synced 2026-01-01 05:08:05 -06:00
Display External IP Address in status bar
This change displays the last detected IPv4 and/or IPv6 address(es) in the GUI and WebUI's status bar. This does not yet handle systems with multiple addresses of the same type (e.g. multiple IPv6 addresses). PR #21383. --------- Co-authored-by: Odin Vex <44311901+OdinVex@users.noreply.github.com>
This commit is contained in:
committed by
GitHub
parent
fb9b3c0f34
commit
f89c4c32ed
@@ -136,6 +136,7 @@ void AppController::preferencesAction()
|
||||
// Language
|
||||
data[u"locale"_s] = pref->getLocale();
|
||||
data[u"performance_warning"_s] = session->isPerformanceWarningEnabled();
|
||||
data[u"status_bar_external_ip"_s] = pref->isStatusbarExternalIPDisplayed();
|
||||
// Transfer List
|
||||
data[u"confirm_torrent_deletion"_s] = pref->confirmTorrentDeletion();
|
||||
// Log file
|
||||
@@ -519,6 +520,8 @@ void AppController::setPreferencesAction()
|
||||
pref->setLocale(locale);
|
||||
}
|
||||
}
|
||||
if (hasKey(u"status_bar_external_ip"_s))
|
||||
pref->setStatusbarExternalIPDisplayed(it.value().toBool());
|
||||
if (hasKey(u"performance_warning"_s))
|
||||
session->setPerformanceWarningEnabled(it.value().toBool());
|
||||
// Transfer List
|
||||
|
||||
@@ -85,6 +85,8 @@ namespace
|
||||
const QString KEY_TRANSFER_DLRATELIMIT = u"dl_rate_limit"_s;
|
||||
const QString KEY_TRANSFER_DLSPEED = u"dl_info_speed"_s;
|
||||
const QString KEY_TRANSFER_FREESPACEONDISK = u"free_space_on_disk"_s;
|
||||
const QString KEY_TRANSFER_LAST_EXTERNAL_ADDRESS_V4 = u"last_external_address_v4"_s;
|
||||
const QString KEY_TRANSFER_LAST_EXTERNAL_ADDRESS_V6 = u"last_external_address_v6"_s;
|
||||
const QString KEY_TRANSFER_UPDATA = u"up_info_data"_s;
|
||||
const QString KEY_TRANSFER_UPRATELIMIT = u"up_rate_limit"_s;
|
||||
const QString KEY_TRANSFER_UPSPEED = u"up_info_speed"_s;
|
||||
@@ -159,6 +161,8 @@ namespace
|
||||
map[KEY_TRANSFER_AVERAGE_TIME_QUEUE] = cacheStatus.averageJobTime;
|
||||
map[KEY_TRANSFER_TOTAL_QUEUED_SIZE] = cacheStatus.queuedBytes;
|
||||
|
||||
map[KEY_TRANSFER_LAST_EXTERNAL_ADDRESS_V4] = session->lastExternalIPv4Address();
|
||||
map[KEY_TRANSFER_LAST_EXTERNAL_ADDRESS_V6] = session->lastExternalIPv6Address();
|
||||
map[KEY_TRANSFER_DHT_NODES] = sessionStatus.dhtNodes;
|
||||
map[KEY_TRANSFER_CONNECTION_STATUS] = session->isListening()
|
||||
? (sessionStatus.hasIncomingConnections ? u"connected"_s : u"firewalled"_s)
|
||||
@@ -446,6 +450,8 @@ void SyncController::updateFreeDiskSpace(const qint64 freeDiskSpace)
|
||||
// - "dl_info_data": bytes downloaded
|
||||
// - "dl_info_speed": download speed
|
||||
// - "dl_rate_limit: download rate limit
|
||||
// - "last_external_address_v4": last external address v4
|
||||
// - "last_external_address_v6": last external address v6
|
||||
// - "up_info_data: bytes uploaded
|
||||
// - "up_info_speed: upload speed
|
||||
// - "up_rate_limit: upload speed limit
|
||||
|
||||
@@ -45,6 +45,8 @@ const QString KEY_TRANSFER_DLRATELIMIT = u"dl_rate_limit"_s;
|
||||
const QString KEY_TRANSFER_UPSPEED = u"up_info_speed"_s;
|
||||
const QString KEY_TRANSFER_UPDATA = u"up_info_data"_s;
|
||||
const QString KEY_TRANSFER_UPRATELIMIT = u"up_rate_limit"_s;
|
||||
const QString KEY_TRANSFER_LAST_EXTERNAL_ADDRESS_V4 = u"last_external_address_v4"_s;
|
||||
const QString KEY_TRANSFER_LAST_EXTERNAL_ADDRESS_V6 = u"last_external_address_v6"_s;
|
||||
const QString KEY_TRANSFER_DHT_NODES = u"dht_nodes"_s;
|
||||
const QString KEY_TRANSFER_CONNECTION_STATUS = u"connection_status"_s;
|
||||
|
||||
@@ -57,11 +59,14 @@ const QString KEY_TRANSFER_CONNECTION_STATUS = u"connection_status"_s;
|
||||
// - "up_info_data": Data uploaded this session
|
||||
// - "dl_rate_limit": Download rate limit
|
||||
// - "up_rate_limit": Upload rate limit
|
||||
// - "last_external_address_v4": external IPv4 address
|
||||
// - "last_external_address_v6": external IPv6 address
|
||||
// - "dht_nodes": DHT nodes connected to
|
||||
// - "connection_status": Connection status
|
||||
void TransferController::infoAction()
|
||||
{
|
||||
const BitTorrent::SessionStatus &sessionStatus = BitTorrent::Session::instance()->status();
|
||||
const auto *btSession = BitTorrent::Session::instance();
|
||||
const BitTorrent::SessionStatus &sessionStatus = btSession->status();
|
||||
|
||||
QJsonObject dict;
|
||||
|
||||
@@ -69,10 +74,12 @@ void TransferController::infoAction()
|
||||
dict[KEY_TRANSFER_DLDATA] = static_cast<qint64>(sessionStatus.totalPayloadDownload);
|
||||
dict[KEY_TRANSFER_UPSPEED] = static_cast<qint64>(sessionStatus.payloadUploadRate);
|
||||
dict[KEY_TRANSFER_UPDATA] = static_cast<qint64>(sessionStatus.totalPayloadUpload);
|
||||
dict[KEY_TRANSFER_DLRATELIMIT] = BitTorrent::Session::instance()->downloadSpeedLimit();
|
||||
dict[KEY_TRANSFER_UPRATELIMIT] = BitTorrent::Session::instance()->uploadSpeedLimit();
|
||||
dict[KEY_TRANSFER_DLRATELIMIT] = btSession->downloadSpeedLimit();
|
||||
dict[KEY_TRANSFER_UPRATELIMIT] = btSession->uploadSpeedLimit();
|
||||
dict[KEY_TRANSFER_LAST_EXTERNAL_ADDRESS_V4] = btSession->lastExternalIPv4Address();
|
||||
dict[KEY_TRANSFER_LAST_EXTERNAL_ADDRESS_V6] = btSession->lastExternalIPv6Address();
|
||||
dict[KEY_TRANSFER_DHT_NODES] = static_cast<qint64>(sessionStatus.dhtNodes);
|
||||
if (!BitTorrent::Session::instance()->isListening())
|
||||
if (!btSession->isListening())
|
||||
dict[KEY_TRANSFER_CONNECTION_STATUS] = u"disconnected"_s;
|
||||
else
|
||||
dict[KEY_TRANSFER_CONNECTION_STATUS] = sessionStatus.hasIncomingConnections ? u"connected"_s : u"firewalled"_s;
|
||||
|
||||
@@ -278,8 +278,10 @@
|
||||
<tbody>
|
||||
<tr>
|
||||
<td id="freeSpaceOnDisk"></td>
|
||||
<td class="statusBarSeparator"></td>
|
||||
<td id="DHTNodes"></td>
|
||||
<td class="statusBarSeparator invisible"></td>
|
||||
<td id="externalIPs" class="invisible"></td>
|
||||
<td class="statusBarSeparator invisible"></td>
|
||||
<td id="DHTNodes" class="invisible"></td>
|
||||
<td class="statusBarSeparator"></td>
|
||||
<td><img id="connectionStatus" alt="QBT_TR(Connection status: Firewalled)QBT_TR[CONTEXT=MainWindow]" title="QBT_TR(Connection status: Firewalled)QBT_TR[CONTEXT=MainWindow]" src="images/firewalled.svg" style="height: 1.5em;"></td>
|
||||
<td class="statusBarSeparator"></td>
|
||||
|
||||
@@ -956,6 +956,28 @@ window.addEventListener("DOMContentLoaded", () => {
|
||||
|
||||
$("freeSpaceOnDisk").textContent = "QBT_TR(Free space: %1)QBT_TR[CONTEXT=HttpServer]".replace("%1", window.qBittorrent.Misc.friendlyUnit(serverState.free_space_on_disk));
|
||||
|
||||
const externalIPsElement = document.getElementById("externalIPs");
|
||||
if (window.qBittorrent.Cache.preferences.get().status_bar_external_ip) {
|
||||
const lastExternalAddressV4 = serverState.last_external_address_v4;
|
||||
const lastExternalAddressV6 = serverState.last_external_address_v6;
|
||||
const hasIPv4Address = lastExternalAddressV4 !== "";
|
||||
const hasIPv6Address = lastExternalAddressV6 !== "";
|
||||
let lastExternalAddressLabel = "QBT_TR(External IP: N/A)QBT_TR[CONTEXT=HttpServer]";
|
||||
if (hasIPv4Address && hasIPv6Address)
|
||||
lastExternalAddressLabel = "QBT_TR(External IPs: %1, %2)QBT_TR[CONTEXT=HttpServer]";
|
||||
else if (hasIPv4Address || hasIPv6Address)
|
||||
lastExternalAddressLabel = "QBT_TR(External IP: %1%2)QBT_TR[CONTEXT=HttpServer]";
|
||||
// replace in reverse order ('%2' before '%1') in case address contains a % character.
|
||||
// for example, see https://en.wikipedia.org/wiki/IPv6_address#Scoped_literal_IPv6_addresses_(with_zone_index)
|
||||
externalIPsElement.textContent = lastExternalAddressLabel.replace("%2", lastExternalAddressV6).replace("%1", lastExternalAddressV4);
|
||||
externalIPsElement.classList.remove("invisible");
|
||||
externalIPsElement.previousElementSibling.classList.remove("invisible");
|
||||
}
|
||||
else {
|
||||
externalIPsElement.classList.add("invisible");
|
||||
externalIPsElement.previousElementSibling.classList.add("invisible");
|
||||
}
|
||||
|
||||
const dhtElement = document.getElementById("DHTNodes");
|
||||
if (window.qBittorrent.Cache.preferences.get().dht) {
|
||||
dhtElement.textContent = "QBT_TR(DHT: %1 nodes)QBT_TR[CONTEXT=StatusBar]".replace("%1", serverState.dht_nodes);
|
||||
|
||||
@@ -90,6 +90,11 @@
|
||||
</table>
|
||||
</fieldset>
|
||||
|
||||
<div class="formRow" style="margin-bottom: 3px;">
|
||||
<input type="checkbox" id="statusBarExternalIP">
|
||||
<label for="statusBarExternalIP">QBT_TR(Show external IP in status bar)QBT_TR[CONTEXT=OptionsDialog]</label>
|
||||
</div>
|
||||
|
||||
<div class="formRow" style="margin-bottom: 5px;">
|
||||
<input type="checkbox" id="performanceWarning">
|
||||
<label for="performanceWarning">QBT_TR(Log performance warnings)QBT_TR[CONTEXT=OptionsDialog]</label>
|
||||
@@ -2157,6 +2162,7 @@ Use ';' to split multiple entries. Can use wildcard '*'.)QBT_TR[CONTEXT=OptionsD
|
||||
// Language
|
||||
updateWebuiLocaleSelect(pref.locale);
|
||||
updateColoSchemeSelect();
|
||||
$("statusBarExternalIP").checked = pref.status_bar_external_ip;
|
||||
$("performanceWarning").checked = pref.performance_warning;
|
||||
document.getElementById("displayFullURLTrackerColumn").checked = (LocalPreferences.get("full_url_tracker_column", "false") === "true");
|
||||
document.getElementById("hideZeroFiltersCheckbox").checked = (LocalPreferences.get("hide_zero_status_filters", "false") === "true");
|
||||
@@ -2582,6 +2588,7 @@ Use ';' to split multiple entries. Can use wildcard '*'.)QBT_TR[CONTEXT=OptionsD
|
||||
LocalPreferences.set("color_scheme", "light");
|
||||
else
|
||||
LocalPreferences.set("color_scheme", "dark");
|
||||
settings["status_bar_external_ip"] = $("statusBarExternalIP").checked;
|
||||
settings["performance_warning"] = $("performanceWarning").checked;
|
||||
LocalPreferences.set("full_url_tracker_column", document.getElementById("displayFullURLTrackerColumn").checked.toString());
|
||||
LocalPreferences.set("hide_zero_status_filters", document.getElementById("hideZeroFiltersCheckbox").checked.toString());
|
||||
|
||||
Reference in New Issue
Block a user