trackwhat-small / src /js /client.js
eggman-poff's picture
Upload folder using huggingface_hub
947c106 verified
Raw
History Blame Contribute Delete
6.46 kB
// @ts-nocheck
import * as shared from "./lib/shared.js";
import { createAnalysisController } from "./lib/analysisController.js";
import { createCaptureFlow } from "./lib/captureFlow.js";
import { setCaptureStatus, setButtonState, setScanMs, mountScanIntervalControl, preparePreviewHost } from "./lib/captureUi.js";
import { mountTrackSelection, mountVisionModelControl } from "./lib/captureInputs.js";
import { updateTrackPills, updateManageTracksButtonState, openTracksTab, openPillTarget } from "./lib/dom.js";
import { startCountdownTimer, stopCountdownTimer, scheduleNextScan, updateCountdown } from "./lib/timing.js";
import { captureFrame, drawSyntheticFrame } from "./lib/captureCanvas.js";
const {
normalizeScanMs,
readStoredScanMs,
normalizeVisionModel,
visionModelLabel,
readStoredVisionModel,
readStoredVisionModelRaw,
formatScanInterval,
formatCountdown,
readSoloMode,
readVisionModelControlValue,
isSyntheticLoopMode,
captureModeSuffix,
effectiveScanMs,
readLatestAnalysisProject,
updateSmartDelayFromLatestResult,
summarizeDebugValue,
recordDebugTrace,
storedScanMs,
state,
} = shared;
export function initCaptureClient() {
state.smartDelayMs = state.smartDelayMs || 0;
state.sameProjectStreak = state.sameProjectStreak || 0;
state.lastProjectName = state.lastProjectName || '';
state.debugTrace = state.debugTrace || [];
state.recordDebugTrace = window.__trackwhatDesktopCaptureTrace || state.recordDebugTrace || null;
window.__trackwhatDesktopCaptureDebug = { trace: () => state.debugTrace.slice(), clear: () => (state.debugTrace = [], []) };
window['__trackwhatDesktopCaptureTrace']?.('state.init', { scanMs: state.scanMs, automationMode: state.automationMode });
const analysis = createAnalysisController({ state, scheduleNextScan, setCaptureStatus });
const flow = createCaptureFlow({
requestAnalysis: analysis.requestAnalysis,
recoverStaleAnalysis: analysis.recoverStaleAnalysis,
setAnalysisPending: analysis.setAnalysisPending,
});
function runLocalTestAnalysis() {
if (!drawSyntheticFrame()) {
setCaptureStatus('Local test frame could not be rendered.');
return;
}
setCaptureStatus('Analyzing local test frame...');
analysis.requestAnalysis(false);
}
function bindDelegatedClicks() {
if (window.__trackwhatDesktopCaptureDelegated) return;
window.__trackwhatDesktopCaptureDelegated = true;
document.addEventListener('click', (event) => {
const button = event.target?.closest?.('#desktop-capture-btn');
if (!button) return;
window['__trackwhatDesktopCaptureTrace']?.('analysis.click.delegated-capture', { active: state.active, analysisPending: state.analysisPending, allowAnalysisClick: state.allowAnalysisClick });
event.preventDefault();
event.stopPropagation();
event.stopImmediatePropagation();
state.active ? flow.stopCapture() : void flow.startCapture();
}, true);
document.addEventListener('click', (event) => {
const loopButton = event.target?.closest?.('#loop-toggle-btn');
if (!loopButton) return;
window['__trackwhatDesktopCaptureTrace']?.('analysis.click.delegated-loop', { active: state.active, loopPaused: state.loopPaused });
event.preventDefault();
event.stopPropagation();
event.stopImmediatePropagation();
flow.toggleCaptureLoop();
}, true);
document.addEventListener('click', (event) => {
const analyzeButton = event.target?.closest?.('#analyze-screenshot-btn, #header-analyze-btn');
if (!analyzeButton) return;
if (state.allowAnalysisClick) return;
analysis.recoverStaleAnalysis('delegated-analyze');
window['__trackwhatDesktopCaptureTrace']?.('analysis.click.delegated-analyze', { active: state.active, analysisPending: state.analysisPending, allowAnalysisClick: state.allowAnalysisClick });
event.preventDefault();
event.stopPropagation();
event.stopImmediatePropagation();
if (state.analysisPending) {
setCaptureStatus('Analysis still running. Waiting for completion.');
return;
}
if (state.active) {
flow.captureAndAnalyze(true, true);
return;
}
void flow.startCapture();
}, true);
document.addEventListener('click', (event) => {
const testButton = event.target?.closest?.('#local-test-analyze-btn');
if (!testButton) return;
event.preventDefault();
event.stopPropagation();
event.stopImmediatePropagation();
analysis.recoverStaleAnalysis('delegated-local-test');
runLocalTestAnalysis();
}, true);
document.addEventListener('change', (event) => {
if (event.target?.closest?.('#solo-mode')) updateTrackPills();
}, true);
document.addEventListener('input', (event) => {
if (event.target?.closest?.('#solo-mode')) updateTrackPills();
}, true);
}
function observeSectionState() {
if (window.__trackwhatManageTracksObserver) return;
window.__trackwhatManageTracksObserver = new MutationObserver(() => {
updateManageTracksButtonState();
});
window.__trackwhatManageTracksObserver.observe(document.body, {
subtree: true,
childList: true,
attributes: true,
attributeFilter: ['class', 'aria-selected'],
});
}
document.addEventListener('click', (event) => {
const target = event.target;
if (target instanceof HTMLElement && target.closest('[data-manage-tracks]')) {
openTracksTab();
return;
}
const pill = target instanceof HTMLElement ? target.closest('.track-pill[data-track-id]') : null;
if (pill instanceof HTMLElement) openPillTarget(pill);
});
window.__trackwhatDesktopCaptureState = state;
window.__trackwhatDesktopCapture = {
active: () => state.active,
start: flow.startCapture,
stop: flow.stopCapture,
toggle: flow.toggleCapture,
toggleLoop: flow.toggleCaptureLoop,
captureFrame,
captureAndAnalyze: flow.captureAndAnalyze,
};
bindDelegatedClicks();
mountTrackSelection();
observeSectionState();
preparePreviewHost();
mountScanIntervalControl();
mountVisionModelControl();
setButtonState(state.active);
setScanMs(state.scanMs);
window.setTimeout(preparePreviewHost, 100);
window.setTimeout(() => setButtonState(state.active), 50);
window.setTimeout(updateTrackPills, 75);
window.setTimeout(updateManageTracksButtonState, 75);
updateCountdown();
}