mirror of
https://github.com/qbittorrent/qBittorrent.git
synced 2025-12-31 20:58:07 -06:00
194 lines
9.0 KiB
HTML
194 lines
9.0 KiB
HTML
<!DOCTYPE html>
|
|
<html lang="${LANG}" class="dark">
|
|
|
|
<head>
|
|
<meta charset="UTF-8">
|
|
<title>QBT_TR(Torrent Upload/Download Ratio Limiting)QBT_TR[CONTEXT=UpDownRatioDialog]</title>
|
|
<link rel="stylesheet" href="css/style.css?v=${CACHEID}" type="text/css">
|
|
<script src="scripts/lib/MooTools-Core-1.6.0-compat-compressed.js"></script>
|
|
<script src="scripts/lib/MooTools-More-1.6.0-compat-compressed.js"></script>
|
|
<script src="scripts/localpreferences.js?v=${CACHEID}"></script>
|
|
<script src="scripts/color-scheme.js?v=${CACHEID}"></script>
|
|
<script>
|
|
"use strict";
|
|
|
|
const UseGlobalLimit = -2;
|
|
const NoLimit = -1;
|
|
|
|
window.addEventListener("DOMContentLoaded", () => {
|
|
window.addEventListener("keydown", (event) => {
|
|
switch (event.key) {
|
|
case "Enter":
|
|
event.preventDefault();
|
|
$("save").click();
|
|
break;
|
|
case "Escape":
|
|
event.preventDefault();
|
|
window.parent.qBittorrent.Client.closeFrameWindow(window);
|
|
break;
|
|
}
|
|
});
|
|
|
|
const searchParams = new URLSearchParams(window.location.search);
|
|
const origValues = searchParams.get("orig").split("|");
|
|
|
|
const values = {
|
|
ratioLimit: Number(origValues[0]),
|
|
seedingTimeLimit: Number(origValues[1]),
|
|
inactiveSeedingTimeLimit: Number(origValues[2]),
|
|
maxRatio: Number(origValues[3]),
|
|
maxSeedingTime: Number(origValues[4]),
|
|
maxInactiveSeedingTime: Number(origValues[5])
|
|
};
|
|
|
|
// select default when orig values not passed. using double equals to compare string and int
|
|
if ((origValues[0] === "")
|
|
|| ((values.ratioLimit === UseGlobalLimit)
|
|
&& (values.seedingTimeLimit === UseGlobalLimit)
|
|
&& (values.inactiveSeedingTimeLimit === UseGlobalLimit))) {
|
|
// use default option
|
|
setSelectedRadioValue("shareLimit", "default");
|
|
}
|
|
else if ((values.maxRatio === NoLimit) && (values.maxSeedingTime === NoLimit) && (values.maxInactiveSeedingTime === NoLimit)) {
|
|
setSelectedRadioValue("shareLimit", "none");
|
|
// TODO set input boxes to *global* max ratio and seeding time
|
|
}
|
|
else {
|
|
setSelectedRadioValue("shareLimit", "custom");
|
|
if (values.ratioLimit >= 0) {
|
|
$("setRatio").checked = true;
|
|
$("ratio").value = values.ratioLimit.toFixed(2);
|
|
}
|
|
if (values.seedingTimeLimit >= 0) {
|
|
$("setTotalMinutes").checked = true;
|
|
$("totalMinutes").value = values.seedingTimeLimit;
|
|
}
|
|
if (values.inactiveSeedingTimeLimit >= 0) {
|
|
$("setInactiveMinutes").checked = true;
|
|
$("inactiveMinutes").value = values.inactiveSeedingTimeLimit;
|
|
}
|
|
}
|
|
|
|
shareLimitChanged();
|
|
|
|
$("default").focus();
|
|
$("save").addEventListener("click", (e) => {
|
|
e.preventDefault();
|
|
e.stopPropagation();
|
|
|
|
if (!isFormValid())
|
|
return;
|
|
|
|
const shareLimit = getSelectedRadioValue("shareLimit");
|
|
let ratioLimitValue = 0.00;
|
|
let seedingTimeLimitValue = 0;
|
|
let inactiveSeedingTimeLimitValue = 0;
|
|
|
|
if (shareLimit === "default") {
|
|
ratioLimitValue = seedingTimeLimitValue = inactiveSeedingTimeLimitValue = UseGlobalLimit;
|
|
}
|
|
else if (shareLimit === "none") {
|
|
ratioLimitValue = seedingTimeLimitValue = inactiveSeedingTimeLimitValue = NoLimit;
|
|
}
|
|
else if (shareLimit === "custom") {
|
|
ratioLimitValue = $("setRatio").checked ? $("ratio").value : -1;
|
|
seedingTimeLimitValue = $("setTotalMinutes").checked ? $("totalMinutes").value : -1;
|
|
inactiveSeedingTimeLimitValue = $("setInactiveMinutes").checked ? $("inactiveMinutes").value : -1;
|
|
}
|
|
else {
|
|
return;
|
|
}
|
|
|
|
fetch("api/v2/torrents/setShareLimits", {
|
|
method: "POST",
|
|
body: new URLSearchParams({
|
|
hashes: searchParams.get("hashes"),
|
|
ratioLimit: ratioLimitValue,
|
|
seedingTimeLimit: seedingTimeLimitValue,
|
|
inactiveSeedingTimeLimit: inactiveSeedingTimeLimitValue
|
|
})
|
|
})
|
|
.then(async (response) => {
|
|
if (!response.ok)
|
|
return;
|
|
|
|
window.parent.qBittorrent.Client.closeFrameWindow(window);
|
|
});
|
|
});
|
|
});
|
|
|
|
const getSelectedRadioValue = (name) => {
|
|
const radios = document.getElementsByName(name);
|
|
|
|
for (let i = 0; i < radios.length; ++i) {
|
|
const radio = radios[i];
|
|
if (radio.checked)
|
|
return radio.value;
|
|
}
|
|
};
|
|
|
|
const setSelectedRadioValue = (name, value) => {
|
|
const radios = document.getElementsByName(name);
|
|
|
|
for (let i = 0; i < radios.length; ++i) {
|
|
const radio = radios[i];
|
|
if (radio.value === value)
|
|
radio.checked = true;
|
|
}
|
|
};
|
|
|
|
const shareLimitChanged = () => {
|
|
const customShareLimit = getSelectedRadioValue("shareLimit") === "custom";
|
|
$("setRatio").disabled = !customShareLimit;
|
|
$("setTotalMinutes").disabled = !customShareLimit;
|
|
$("setInactiveMinutes").disabled = !customShareLimit;
|
|
|
|
enableInputBoxes();
|
|
|
|
$("save").disabled = !isFormValid();
|
|
};
|
|
|
|
const enableInputBoxes = () => {
|
|
$("ratio").disabled = $("setRatio").disabled || !$("setRatio").checked;
|
|
$("totalMinutes").disabled = $("setTotalMinutes").disabled || !$("setTotalMinutes").checked;
|
|
$("inactiveMinutes").disabled = $("setInactiveMinutes").disabled || !$("setInactiveMinutes").checked;
|
|
|
|
$("save").disabled = !isFormValid();
|
|
};
|
|
|
|
const isFormValid = () => {
|
|
return !((getSelectedRadioValue("shareLimit") === "custom") && !$("setRatio").checked
|
|
&& !$("setTotalMinutes").checked && !$("setInactiveMinutes").checked);
|
|
};
|
|
</script>
|
|
</head>
|
|
|
|
<body>
|
|
<div style="padding: 10px 10px 0px 10px;">
|
|
<input type="radio" name="shareLimit" id="default" value="default" onchange="shareLimitChanged()" checked style="margin-bottom: 5px;"><label for="default">QBT_TR(Use global share limit)QBT_TR[CONTEXT=UpDownRatioDialog]</label><br>
|
|
<input type="radio" name="shareLimit" id="shareLimitNone" value="none" onchange="shareLimitChanged()" style="margin-bottom: 5px;"><label for="shareLimitNone">QBT_TR(Set no share limit)QBT_TR[CONTEXT=UpDownRatioDialog]</label><br>
|
|
<input type="radio" name="shareLimit" id="shareLimitCustom" value="custom" onchange="shareLimitChanged()" style="margin-bottom: 5px;"><label for="shareLimitCustom">QBT_TR(Set share limit to)QBT_TR[CONTEXT=UpDownRatioDialog]</label><br>
|
|
|
|
<div style="margin-left: 40px; margin-bottom: 5px;">
|
|
<input type="checkbox" id="setRatio" class="shareLimitInput" onclick="enableInputBoxes()">
|
|
<label id="ratioLabel" for="setRatio">QBT_TR(ratio)QBT_TR[CONTEXT=UpDownRatioDialog]</label>
|
|
<input type="number" id="ratio" value="0.00" step=".01" min="0" max="9999" class="shareLimitInput" aria-labelledby="ratioLabel">
|
|
</div>
|
|
<div style="margin-left: 40px; margin-bottom: 5px;">
|
|
<input type="checkbox" id="setTotalMinutes" class="shareLimitInput" onclick="enableInputBoxes()">
|
|
<label id="totalMinutesLabel" for="setTotalMinutes">QBT_TR(total minutes)QBT_TR[CONTEXT=UpDownRatioDialog]</label>
|
|
<input type="number" id="totalMinutes" value="0" step="1" min="0" class="shareLimitInput" aria-labelledby="totalMinutesLabel">
|
|
</div>
|
|
<div style="margin-left: 40px; margin-bottom: 5px;">
|
|
<input type="checkbox" id="setInactiveMinutes" class="shareLimitInput" onclick="enableInputBoxes()">
|
|
<label id="inactiveMinutesLabel" for="setInactiveMinutes">QBT_TR(inactive minutes)QBT_TR[CONTEXT=UpDownRatioDialog]</label>
|
|
<input type="number" id="inactiveMinutes" value="0" step="1" min="0" class="shareLimitInput" aria-labelledby="inactiveMinutesLabel">
|
|
</div>
|
|
<div style="text-align: center; padding-top: 10px;">
|
|
<input type="button" value="QBT_TR(Save)QBT_TR[CONTEXT=HttpServer]" id="save">
|
|
</div>
|
|
</div>
|
|
</body>
|
|
|
|
</html>
|