Merge pull request 'refactor: migrate ztools and Silo to kindred-addon-sdk (#250)' (#260) from feat/migrate-addons-to-sdk into main
Some checks failed
Build and Test / build (push) Failing after 1m39s

Reviewed-on: #260
This commit was merged in pull request #260.
This commit is contained in:
2026-02-17 15:50:58 +00:00
3 changed files with 34 additions and 56 deletions

View File

@@ -55,26 +55,17 @@ def _register_silo_origin():
def _setup_silo_auth_panel():
"""Dock the Silo authentication panel in the right-hand side panel."""
try:
from PySide import QtCore, QtWidgets
from kindred_sdk import register_dock_panel
mw = FreeCADGui.getMainWindow()
if mw is None:
return
def _factory():
import silo_commands
# Don't create duplicate panels
if mw.findChild(QtWidgets.QDockWidget, "SiloDatabaseAuth"):
return
auth = silo_commands.SiloAuthDockWidget()
# Prevent GC of the auth timer by stashing on the widget
auth.widget._auth = auth
return auth.widget
import silo_commands
auth = silo_commands.SiloAuthDockWidget()
panel = QtWidgets.QDockWidget("Database Auth", mw)
panel.setObjectName("SiloDatabaseAuth")
panel.setWidget(auth.widget)
# Keep the auth object alive so its QTimer isn't destroyed while running
panel._auth = auth
mw.addDockWidget(QtCore.Qt.RightDockWidgetArea, panel)
register_dock_panel("SiloDatabaseAuth", "Database Auth", _factory)
except Exception as e:
FreeCAD.Console.PrintLog(f"Create: Silo auth panel skipped: {e}\n")
@@ -82,49 +73,36 @@ def _setup_silo_auth_panel():
def _setup_silo_activity_panel():
"""Show a dock widget with recent Silo database activity."""
try:
from PySide import QtCore, QtWidgets
from kindred_sdk import register_dock_panel
mw = FreeCADGui.getMainWindow()
if mw is None:
return
def _factory():
from PySide import QtWidgets
# Don't create duplicate panels
if mw.findChild(QtWidgets.QDockWidget, "SiloDatabaseActivity"):
return
widget = QtWidgets.QWidget()
layout = QtWidgets.QVBoxLayout(widget)
activity_list = QtWidgets.QListWidget()
layout.addWidget(activity_list)
panel = QtWidgets.QDockWidget("Database Activity", mw)
panel.setObjectName("SiloDatabaseActivity")
try:
import silo_commands
widget = QtWidgets.QWidget()
layout = QtWidgets.QVBoxLayout(widget)
items = silo_commands._client.list_items()
if isinstance(items, list):
for item in items[:20]:
pn = item.get("part_number", "")
desc = item.get("description", "")
updated = item.get("updated_at", "")
if updated:
updated = updated[:10]
activity_list.addItem(f"{pn} - {desc} - {updated}")
if activity_list.count() == 0:
activity_list.addItem("(No items in database)")
except Exception:
activity_list.addItem("(Unable to connect to Silo database)")
activity_list = QtWidgets.QListWidget()
layout.addWidget(activity_list)
return widget
try:
import silo_commands
items = silo_commands._client.list_items()
if isinstance(items, list):
for item in items[:20]:
pn = item.get("part_number", "")
desc = item.get("description", "")
updated = item.get("updated_at", "")
if updated:
updated = updated[:10]
activity_list.addItem(f"{pn} - {desc} - {updated}")
if activity_list.count() == 0:
activity_list.addItem("(No items in database)")
except Exception:
activity_list.addItem("(Unable to connect to Silo database)")
panel.setWidget(widget)
mw.addDockWidget(QtCore.Qt.RightDockWidgetArea, panel)
# Give the activity panel most of the vertical space
auth_panel = mw.findChild(QtWidgets.QDockWidget, "SiloDatabaseAuth")
if auth_panel:
mw.resizeDocks([auth_panel, panel], [120, 500], QtCore.Qt.Vertical)
register_dock_panel("SiloDatabaseActivity", "Database Activity", _factory)
except Exception as e:
FreeCAD.Console.PrintLog(f"Create: Silo activity panel skipped: {e}\n")