generated from Grigo/AndroidTemplate
fixed dirty code Gold
This commit is contained in:
+38
-4
@@ -38,8 +38,13 @@ let mapInitialFitDone = false;
|
||||
let userMovedMap = false;
|
||||
let programmaticMove = false;
|
||||
let cmdFormDirty = false;
|
||||
let cmdFormHoldUntil = 0;
|
||||
|
||||
const CMD_INPUT_IDS = ['cmdModemMode', 'cmdFq', 'cmdPw', 'cmdSf', 'cmdPl', 'cmdBw', 'cmdCr', 'cmdBr', 'cmdFd', 'cmdTm', 'cmdRole'];
|
||||
const CMD_INPUT_IDS = [
|
||||
'cmdModemMode', 'cmdFq', 'cmdPw', 'cmdSf', 'cmdPl', 'cmdBw', 'cmdCr',
|
||||
'cmdBr', 'cmdFd', 'cmdGd', 'cmdTm', 'cmdRole'
|
||||
];
|
||||
const CMD_FORM_HOLD_MS = 10000;
|
||||
|
||||
let trackTxLayers = [];
|
||||
let trackRxLayers = [];
|
||||
@@ -552,8 +557,30 @@ function renderTimelineCompare(txTel, rxTel, txId, rxId) {
|
||||
|
||||
function setCmdFormDirty(dirty) {
|
||||
cmdFormDirty = dirty;
|
||||
refreshCmdFormHint();
|
||||
}
|
||||
|
||||
function setCmdFormHold(ms = CMD_FORM_HOLD_MS) {
|
||||
cmdFormHoldUntil = Date.now() + ms;
|
||||
refreshCmdFormHint();
|
||||
}
|
||||
|
||||
function isCmdFormHeld() {
|
||||
return Date.now() < cmdFormHoldUntil;
|
||||
}
|
||||
|
||||
function refreshCmdFormHint() {
|
||||
const hint = document.getElementById('cmdDraftHint');
|
||||
if (hint) hint.style.display = dirty ? 'block' : 'none';
|
||||
if (!hint) return;
|
||||
if (cmdFormDirty) {
|
||||
hint.style.display = 'block';
|
||||
hint.textContent = 'Черновик — значения с устройства не подставляются';
|
||||
} else if (isCmdFormHeld()) {
|
||||
hint.style.display = 'block';
|
||||
hint.textContent = 'Ожидание подтверждения с устройства…';
|
||||
} else {
|
||||
hint.style.display = 'none';
|
||||
}
|
||||
}
|
||||
|
||||
function setupCmdFormDirtyTracking() {
|
||||
@@ -647,7 +674,8 @@ function fillCmdFormFromDevice(d, opts = {}) {
|
||||
if (!d) return;
|
||||
const force = opts.force === true;
|
||||
refreshCmdDeviceStatus(d);
|
||||
if (!force && cmdFormDirty) return;
|
||||
refreshCmdFormHint();
|
||||
if (!force && (cmdFormDirty || isCmdFormHeld())) return;
|
||||
fillCmdInputsFromDevice(d);
|
||||
}
|
||||
|
||||
@@ -913,6 +941,8 @@ async function applySelectedMacroPreset() {
|
||||
});
|
||||
if (!ok) return;
|
||||
appliedMacroPresetId = preset.id;
|
||||
setCmdFormDirty(false);
|
||||
setCmdFormHold();
|
||||
renderMacroPresetList();
|
||||
if (status) status.textContent = `Применён: ${preset.name || preset.id}`;
|
||||
}
|
||||
@@ -4571,6 +4601,7 @@ async function postCommand(toDeviceId, kind, payload) {
|
||||
document.getElementById('btnCmdApply').onclick = () => {
|
||||
postCommand(document.getElementById('cmdTargetSelect').value, 'at', { lines: buildMacroLines() });
|
||||
setCmdFormDirty(false);
|
||||
setCmdFormHold();
|
||||
};
|
||||
document.getElementById('btnCmdApplySymmetric')?.addEventListener('click', async () => {
|
||||
const params = buildMacroParams();
|
||||
@@ -4585,7 +4616,10 @@ document.getElementById('btnCmdApplySymmetric')?.addEventListener('click', async
|
||||
const rxOk = await postCommand(rx.device_id, 'at', {
|
||||
lines: macroLinesFromParams({ ...params, role: 'RX' })
|
||||
});
|
||||
if (txOk && rxOk) setCmdFormDirty(false);
|
||||
if (txOk && rxOk) {
|
||||
setCmdFormDirty(false);
|
||||
setCmdFormHold();
|
||||
}
|
||||
});
|
||||
document.getElementById('btnMacroPresetApply')?.addEventListener('click', () => {
|
||||
applySelectedMacroPreset().catch(e => alert(e.message || String(e)));
|
||||
|
||||
Reference in New Issue
Block a user