From fa4bb92f7dceef5e4e911d0b0318f788f8fa214a Mon Sep 17 00:00:00 2001 From: maziggy Date: Tue, 10 Mar 2026 08:31:44 +0100 Subject: [PATCH] Add higher FTP timeout options for large 3MF files (#660) Large Hueforge 3MF files (~28 MB) can't be downloaded from the printer's FTP server within the previous 120s max timeout, especially during active printing. Added 180s and 300s timeout options to the FTP settings dropdown. --- CHANGELOG.md | 3 +++ backend/app/schemas/settings.py | 2 +- frontend/src/pages/SettingsPage.tsx | 2 +- 3 files changed, 5 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 6e6a8f6c1..62d1cb97c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,6 +8,9 @@ All notable changes to Bambuddy will be documented in this file. - **Virtual Printer Queue Auto-Dispatch Toggle** ([#587](https://github.com/maziggy/bambuddy/issues/587)) — Added an "Auto-dispatch" toggle to virtual printers in Queue mode. When enabled (default), prints sent from the slicer are added to the queue and start automatically on the assigned printer — matching the current behavior. When disabled, prints are added to the queue with `manual_start` set, so they wait for manual dispatch. This allows users who want to review and manually assign prints before they start. Requested by @Percy2Live. - **Queue All Plates** ([#530](https://github.com/maziggy/bambuddy/issues/530)) — Multi-plate 3MF files can now be queued in one action. When adding a multi-plate file to the queue, a "Queue All N Plates" toggle appears in the plate selector. When activated, every plate is added as a separate queue entry (one per plate × per selected printer), each individually editable from the queue page. The toggle is only available in add-to-queue mode (not reprint or edit). Requested by @Dendrowen. +### Improved +- **Higher FTP Timeout Options for Large Files** ([#660](https://github.com/maziggy/bambuddy/issues/660)) — Added 180s and 300s FTP timeout options in Settings. The previous maximum of 120s was insufficient for large 3MF files (e.g. 28 MB Hueforge models) which can't be downloaded from the printer's FTP server within 2 minutes, especially during active printing. Reported by @PasDoe. + ### Fixed - **Clear Plate Prompt Shown for Staged Queue Items** — The "Clear Plate & Start Next" button on the printer card appeared when all pending queue items were staged (`manual_start`/Queue Only), even though the scheduler won't auto-start them. The clear plate prompt now only appears when there are auto-dispatchable items that the scheduler will actually start after the plate is cleared. - **Ethernet Badge Always Shown on Printer Cards** — The printer card network badge always showed "Ethernet" instead of the WiFi signal indicator, even on printers without an ethernet port. The `home_flag` bit 18 was incorrectly interpreted as indicating a wired connection. Removed the faulty ethernet detection; the WiFi signal badge now displays correctly when the printer reports signal strength. diff --git a/backend/app/schemas/settings.py b/backend/app/schemas/settings.py index 12ba45229..b9df8062b 100644 --- a/backend/app/schemas/settings.py +++ b/backend/app/schemas/settings.py @@ -93,7 +93,7 @@ class AppSettings(BaseModel): ftp_retry_enabled: bool = Field(default=True, description="Enable automatic retry for FTP operations") ftp_retry_count: int = Field(default=3, description="Number of retry attempts for FTP operations (1-10)") ftp_retry_delay: int = Field(default=2, description="Seconds to wait between FTP retry attempts (1-30)") - ftp_timeout: int = Field(default=30, description="FTP connection timeout in seconds (10-120)") + ftp_timeout: int = Field(default=30, description="FTP connection timeout in seconds (10-300)") # MQTT Relay settings for publishing events to external broker mqtt_enabled: bool = Field(default=False, description="Enable MQTT event publishing to external broker") diff --git a/frontend/src/pages/SettingsPage.tsx b/frontend/src/pages/SettingsPage.tsx index c7bca3ad8..a21c6763b 100644 --- a/frontend/src/pages/SettingsPage.tsx +++ b/frontend/src/pages/SettingsPage.tsx @@ -2064,7 +2064,7 @@ export function SettingsPage() { onChange={(e) => updateSetting('ftp_timeout', parseInt(e.target.value))} className="w-full px-3 py-2 pr-10 bg-bambu-dark border border-bambu-dark-tertiary rounded-lg text-white focus:border-bambu-green focus:outline-none appearance-none cursor-pointer" > - {[10, 15, 20, 30, 45, 60, 90, 120].map(n => ( + {[10, 15, 20, 30, 45, 60, 90, 120, 180, 300].map(n => ( ))}