Commit Graph

2 Commits

Author SHA1 Message Date
c5f00219fa feat(silo): async save queue — background upload with coalescing (#392)
Local save is synchronous (data safe on disk before returning).
Network upload (file, DAG, BOM) runs in a background QThread.

New files:
- silo_upload_queue.py: UploadTask dataclass + UploadWorker(QThread)
  with coalescing, cancel, shutdown, and Qt signals
- silo_status_widget.py: SyncStatusWidget for status bar feedback

Modified:
- silo_commands.py: _extract_dag_data, _extract_bom_data, _enqueue_upload
  helpers; Silo_Save and Silo_Commit use async enqueue
- silo_origin.py: saveDocument() saves locally then enqueues async upload
- InitGui.py: upload queue init at 700ms, shutdown handler via atexit

Thread safety: worker never accesses App.Document or Qt widgets;
all data pre-extracted on main thread as plain dicts/strings.
Queue uses threading.Lock; signals cross thread boundary via Qt.
2026-03-05 11:08:44 -06:00
forbes-0023
9187622239 chore: add root package.xml, Init.py, and InitGui.py (#373)
Move package.xml from freecad/ to mod root following the standard
addon layout used by sdk, gears, datums, and solver.

Add root Init.py (sys.path setup for silo-client) and InitGui.py
that consolidates all Silo GUI initialization:
- SiloWorkbench class and registration
- Silo overlay context registration
- Document observer for .kc tree building
- Auth and activity dock panels via kindred_sdk
- First-start settings check
- Start page override
- kindred:// URL handler

This decouples Silo initialization from src/Mod/Create/InitGui.py,
which previously held five Silo-specific deferred setup functions.
2026-03-03 08:19:42 -06:00