fix(desktop): identify stale hosted catalog results

This commit is contained in:
2026-09-06 08:15:31 +03:00
parent 843635ed26
commit 00ac6eb86c
4 changed files with 232 additions and 9 deletions
+19
View File
@@ -76,6 +76,7 @@ pub struct State {
pub token: Secret,
pub query: String,
pub catalog: Vec<Summary>,
pub catalog_stale: bool,
pub next: Option<Id>,
pub selected: Option<Id>,
pub connection: Option<Connection>,
@@ -97,6 +98,7 @@ impl Default for State {
token: Secret::default(),
query: String::new(),
catalog: vec![],
catalog_stale: true,
next: None,
selected: None,
connection: None,
@@ -113,6 +115,23 @@ impl Default for State {
}
impl State {
pub fn invalidate_catalog(&mut self) {
self.catalog_stale = true;
self.next = None;
}
pub fn catalog_message(&self) -> Option<&'static str> {
if self.connection.is_none() {
Some("Connect / refresh to load models for this service.")
} else if self.catalog_stale {
Some("Catalog may be out of date. Connect / refresh to update these results.")
} else if self.catalog.is_empty() {
Some("No models found. Publish the current model or change the search.")
} else {
None
}
}
/// Keep explicit connection settings in memory, but never carry a resource
/// binding or in-flight result into another local document.
pub fn leave_document(&mut self) {
+3 -5
View File
@@ -180,10 +180,8 @@ fn dialog(app: &App) -> Element<'_, Message> {
]
.spacing(8),
);
if state.connection.is_some() && state.catalog.is_empty() {
content = content.push(label(
"No models found. Publish the current model or change the search.",
));
if let Some(message) = state.catalog_message() {
content = content.push(label(message));
}
for item in &state.catalog {
let selected = state.selected == Some(item.resource_id);
@@ -208,7 +206,7 @@ fn dialog(app: &App) -> Element<'_, Message> {
.on_press_maybe(enabled.then_some(Message::Hosted(Event::Select(item.resource_id)))),
);
}
if state.next.is_some() {
if !state.catalog_stale && state.next.is_some() {
content = content.push(control("More models", Event::More, enabled));
}
let publish_label = if state