Save and use registry_owner for rating lookups on flat-dir tools
Tools in flat directories (no owner subdir) had no way to resolve the registry owner for rating API calls. This affected both own-published tools and admin-published official tools. - Publish dialog: save registry_owner from the publish response - Status sync worker: backfill registry_owner from hash-based lookup - get_tool_registry_info: check registry_owner before fallback_owner Existing tools get backfilled on next background sync. Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
parent
9a284d7d04
commit
5ff108cdb3
|
|
@ -658,6 +658,10 @@ class PublishDialog(QDialog):
|
||||||
config_data = self._published_config.copy()
|
config_data = self._published_config.copy()
|
||||||
config_data["registry_hash"] = config_hash
|
config_data["registry_hash"] = config_hash
|
||||||
config_data["registry_status"] = moderation_status
|
config_data["registry_status"] = moderation_status
|
||||||
|
# Save the registry owner so rating lookups work
|
||||||
|
registry_owner = result.get("owner")
|
||||||
|
if registry_owner:
|
||||||
|
config_data["registry_owner"] = registry_owner
|
||||||
# Clear any old feedback
|
# Clear any old feedback
|
||||||
config_data.pop("registry_feedback", None)
|
config_data.pop("registry_feedback", None)
|
||||||
config_path.write_text(yaml.dump(config_data, default_flow_style=False, sort_keys=False))
|
config_path.write_text(yaml.dump(config_data, default_flow_style=False, sort_keys=False))
|
||||||
|
|
|
||||||
|
|
@ -89,6 +89,7 @@ class StatusSyncWorker(QThread):
|
||||||
|
|
||||||
new_status = status_data.get("status", "pending")
|
new_status = status_data.get("status", "pending")
|
||||||
new_feedback = status_data.get("feedback")
|
new_feedback = status_data.get("feedback")
|
||||||
|
new_owner = status_data.get("owner")
|
||||||
|
|
||||||
old_status = config_data.get("registry_status", "pending")
|
old_status = config_data.get("registry_status", "pending")
|
||||||
old_feedback = config_data.get("registry_feedback")
|
old_feedback = config_data.get("registry_feedback")
|
||||||
|
|
@ -103,6 +104,10 @@ class StatusSyncWorker(QThread):
|
||||||
elif "registry_feedback" in config_data:
|
elif "registry_feedback" in config_data:
|
||||||
del config_data["registry_feedback"]
|
del config_data["registry_feedback"]
|
||||||
changed = True
|
changed = True
|
||||||
|
# Backfill registry_owner from sync data
|
||||||
|
if new_owner and config_data.get("registry_owner") != new_owner:
|
||||||
|
config_data["registry_owner"] = new_owner
|
||||||
|
changed = True
|
||||||
|
|
||||||
if changed:
|
if changed:
|
||||||
config_path.write_text(yaml.dump(config_data, default_flow_style=False, sort_keys=False))
|
config_path.write_text(yaml.dump(config_data, default_flow_style=False, sort_keys=False))
|
||||||
|
|
@ -182,7 +187,12 @@ def get_tool_registry_info(tool_name: str, fallback_owner: Optional[str] = None)
|
||||||
owner, name = tool_name.split("/", 1)
|
owner, name = tool_name.split("/", 1)
|
||||||
return (owner, name)
|
return (owner, name)
|
||||||
|
|
||||||
# Flat dir: check source.author or installed_from in config
|
# Flat dir: check registry_owner (saved at publish time)
|
||||||
|
registry_owner = config_data.get("registry_owner")
|
||||||
|
if registry_owner:
|
||||||
|
return (registry_owner, tool_name)
|
||||||
|
|
||||||
|
# Check source.author or installed_from in config
|
||||||
source = config_data.get("source", {})
|
source = config_data.get("source", {})
|
||||||
if isinstance(source, dict) and source.get("author"):
|
if isinstance(source, dict) and source.get("author"):
|
||||||
return (source["author"], tool_name)
|
return (source["author"], tool_name)
|
||||||
|
|
@ -809,6 +819,10 @@ class ToolsPage(QWidget):
|
||||||
|
|
||||||
self.info_text.setHtml("\n".join(lines))
|
self.info_text.setHtml("\n".join(lines))
|
||||||
|
|
||||||
|
# Ensure slug is available for own published tools (fallback owner).
|
||||||
|
if not self._my_slug_fetched:
|
||||||
|
self._fetch_my_slug()
|
||||||
|
|
||||||
# Update rating bar below the detail text
|
# Update rating bar below the detail text
|
||||||
self._update_rating_bar(qname)
|
self._update_rating_bar(qname)
|
||||||
|
|
||||||
|
|
@ -1011,14 +1025,14 @@ class ToolsPage(QWidget):
|
||||||
|
|
||||||
def _fetch_rating_if_needed(self, tool_name: str):
|
def _fetch_rating_if_needed(self, tool_name: str):
|
||||||
"""Fetch rating data for a registry tool if not cached."""
|
"""Fetch rating data for a registry tool if not cached."""
|
||||||
registry_info = get_tool_registry_info(tool_name, self._my_slug)
|
|
||||||
if not registry_info:
|
|
||||||
return
|
|
||||||
|
|
||||||
# Ensure we have the user slug (non-blocking first time; runs in main thread once)
|
# Ensure we have the user slug (non-blocking first time; runs in main thread once)
|
||||||
if not self._my_slug_fetched:
|
if not self._my_slug_fetched:
|
||||||
self._fetch_my_slug()
|
self._fetch_my_slug()
|
||||||
|
|
||||||
|
registry_info = get_tool_registry_info(tool_name, self._my_slug)
|
||||||
|
if not registry_info:
|
||||||
|
return
|
||||||
|
|
||||||
if tool_name in self._rating_cache:
|
if tool_name in self._rating_cache:
|
||||||
# Already cached - just update buttons
|
# Already cached - just update buttons
|
||||||
self._update_rate_button()
|
self._update_rate_button()
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue