qa: shared instances post release (#6893)

* fix: 20 user cap

* qa: invite modal dropdown + other + clamp limits

* fix: hide filters if just one type

* feat: update req banner

* feat: invite management frontend

* fix: moderation issues with shared instances

* feat: instance icon improvements

* fix: better offline handling

* fix: lint

* feat: show avatar in install to play modal

* feat: smaller qa points

* fix: fmt

* fix: fmt

* fix: yeet svg

* fix: 50 user limit
This commit is contained in:
Calum H.
2026-07-28 14:10:12 +00:00
committed by GitHub
parent 5d34e7902a
commit 82348fe40a
61 changed files with 1809 additions and 307 deletions
+23
View File
@@ -56,6 +56,8 @@ pub fn init<R: tauri::Runtime>() -> tauri::plugin::TauriPlugin<R> {
instance_share_get_users,
instance_share_invite_users,
instance_share_create_invite_link,
instance_share_get_invites,
instance_share_revoke_invite,
instance_share_remove_users,
instance_share_get_publish_preview,
instance_share_publish,
@@ -825,6 +827,27 @@ pub async fn instance_share_create_invite_link(
.await?)
}
#[tauri::command]
pub async fn instance_share_get_invites(
instance_id: &str,
) -> Result<Vec<theseus::instance::SharedInstanceInvite>> {
Ok(theseus::instance::get_shared_instance_invites(instance_id).await?)
}
#[tauri::command]
pub async fn instance_share_revoke_invite(
instance_id: &str,
invite_id: String,
) -> Result<()> {
Ok(
theseus::instance::revoke_shared_instance_invite(
instance_id,
invite_id,
)
.await?,
)
}
#[tauri::command]
pub async fn instance_share_remove_users(
instance_id: &str,
+13 -2
View File
@@ -91,14 +91,25 @@ macro_rules! impl_serialize {
theseus::ErrorKind::SharedInstanceUnavailable(reason) => Some(reason),
_ => None,
};
let code = match theseus_error.raw.as_ref() {
theseus::ErrorKind::SharedInstanceUnavailable(_) => {
Some("shared_instance_unavailable")
}
theseus::ErrorKind::SharedInstancesApiError(_) => {
Some("shared_instances_api_error")
}
_ => None,
};
let mut state = serializer.serialize_struct(
"Theseus",
if unavailable_reason.is_some() { 4 } else { 2 },
2 + usize::from(code.is_some()) + usize::from(unavailable_reason.is_some()),
)?;
state.serialize_field("field_name", "Theseus")?;
state.serialize_field("message", &theseus_error.to_string())?;
if let Some(code) = code {
state.serialize_field("code", code)?;
}
if let Some(reason) = unavailable_reason {
state.serialize_field("code", "shared_instance_unavailable")?;
state.serialize_field("reason", reason)?;
}
state.end()