diff --git a/static/js/modes/sstv-general.js b/static/js/modes/sstv-general.js index 444ef0a..f023f0a 100644 --- a/static/js/modes/sstv-general.js +++ b/static/js/modes/sstv-general.js @@ -245,7 +245,14 @@ const SSTVGeneral = (function() { renderGallery(); showNotification('SSTV', 'New image decoded!'); updateStatusUI('listening', 'Listening...'); + // Clear decode progress so signal monitor can take over + const liveContent = document.getElementById('sstvGeneralLiveContent'); + if (liveContent) liveContent.innerHTML = ''; } else if (data.status === 'detecting') { + // Ignore detecting events if currently decoding (e.g. Doppler updates) + const dot = document.getElementById('sstvGeneralStripDot'); + if (dot && dot.classList.contains('decoding')) return; + updateStatusUI('listening', data.message || 'Listening...'); if (data.signal_level !== undefined) { renderSignalMonitor(data); diff --git a/static/js/modes/sstv.js b/static/js/modes/sstv.js index 2830f8a..2d02a24 100644 --- a/static/js/modes/sstv.js +++ b/static/js/modes/sstv.js @@ -680,7 +680,14 @@ const SSTV = (function() { renderGallery(); showNotification('SSTV', 'New image decoded!'); updateStatusUI('listening', 'Listening...'); + // Clear decode progress so signal monitor can take over + const liveContent = document.getElementById('sstvLiveContent'); + if (liveContent) liveContent.innerHTML = ''; } else if (data.status === 'detecting') { + // Ignore detecting events if currently decoding (e.g. Doppler updates) + const dot = document.getElementById('sstvStripDot'); + if (dot && dot.classList.contains('decoding')) return; + updateStatusUI('listening', data.message || 'Listening...'); if (data.signal_level !== undefined) { renderSignalMonitor(data); diff --git a/utils/sstv/sstv_decoder.py b/utils/sstv/sstv_decoder.py index 368edac..3035adc 100644 --- a/utils/sstv/sstv_decoder.py +++ b/utils/sstv/sstv_decoder.py @@ -92,8 +92,8 @@ class DecodeProgress: progress_percent: int = 0 message: str | None = None image: SSTVImage | None = None - signal_level: int = 0 # 0-100 RMS audio level - sstv_tone: str | None = None # 'leader', 'sync', 'pixel', None + signal_level: int | None = None # 0-100 RMS audio level, None = not measured + sstv_tone: str | None = None # 'leader', 'sync', 'noise', None def to_dict(self) -> dict: result: dict = { @@ -107,10 +107,10 @@ class DecodeProgress: result['message'] = self.message if self.image: result['image'] = self.image.to_dict() - if self.status == 'detecting': + if self.signal_level is not None: result['signal_level'] = self.signal_level - if self.sstv_tone: - result['sstv_tone'] = self.sstv_tone + if self.sstv_tone: + result['sstv_tone'] = self.sstv_tone return result