From 9dec47a6ca0c5d16c919110d6fec3db001922649 Mon Sep 17 00:00:00 2001 From: Uladzimir Karpenka Date: Mon, 8 Jun 2026 12:49:09 +0300 Subject: [PATCH] Phase 3 (batch 32): extract StartWithDevice from BtnStartStopClick Factor the "start with an already-chosen device" sequence (preload sample rate + async WDSP open + DoConnectDevice) out of BtnStartStopClick into StartWithDevice(Dev). BtnStartStopClick's START branch now resolves the device (dialog/autostart) and calls StartWithDevice; the web overlay will reuse the same method to connect without the modal dialog. Behavior-preserving. Co-Authored-By: Claude Opus 4.8 --- MainForm.pas | 23 +++++++++++++++++------ 1 file changed, 17 insertions(+), 6 deletions(-) diff --git a/MainForm.pas b/MainForm.pas index 66b6ac5..05147f6 100644 --- a/MainForm.pas +++ b/MainForm.pas @@ -330,6 +330,9 @@ type Count: Integer); procedure OnWDSPOpenDone(Success: Boolean); procedure DoConnectDevice(const Dev: THPSDRDevice); + // Старт с уже выбранным устройством (preload rate + WDSP open + connect). + // Переиспользуется десктоп-диалогом и web-оверлеем — без модального диалога. + procedure StartWithDevice(const Dev: THPSDRDevice); // DSP/Audio callbacks (вызываются из рабочих потоков) procedure OnAudioReady(const Left, Right: array of Single; Count: Integer); @@ -3561,12 +3564,7 @@ end; procedure TMainForm.BtnStartStopClick(Sender: TObject); var - i: Integer; Dev: THPSDRDevice; - PreG: TGlobalSettings; - PreBands: array[0..CFG_BAND_COUNT-1] of TBandSettings; - PreloadRate: Integer; - FoundByIP: Boolean; AutoIP: string; begin if FController.FNetwork.Connected then @@ -3637,11 +3635,24 @@ begin end; end; - // Создаём запись устройства из IP + BoardType из диалога если есть + // Создаём запись устройства из IP + BoardType (из диалога/autostart) и стартуем. FillChar(Dev, SizeOf(Dev), 0); Dev.IPAddress := FPendingIP; Dev.BoardType := FPendingBoardType; + StartWithDevice(Dev); +end; +procedure TMainForm.StartWithDevice(const Dev: THPSDRDevice); +// Запуск с уже выбранным устройством — общий путь для десктоп-диалога и +// web-оверлея (без модального диалога). Подбор sample rate до WDSP, открытие +// WDSP (async) и подключение. +var + PreloadRate: Integer; + FoundByIP: Boolean; + i: Integer; + PreG: TGlobalSettings; + PreBands: array[0..CFG_BAND_COUNT-1] of TBandSettings; +begin // Подбираем sample rate до открытия WDSP, чтобы не делать двойной Open: // 1) Open на 192k, 2) сразу ChangeSampleRate+Open ещё раз. // Если устройство уже было обнаружено (есть MAC) и есть сохранённый профиль,