diff --git a/bindings/electron/src/index.d.ts b/bindings/electron/src/index.d.ts index 92e437c567a..f368805e5d0 100644 --- a/bindings/electron/src/index.d.ts +++ b/bindings/electron/src/index.d.ts @@ -617,14 +617,22 @@ export type ClientAcceptTosError = // ClientCancelInvitationError -export interface ClientCancelInvitationErrorAlreadyDeleted { - tag: "AlreadyDeleted" +export interface ClientCancelInvitationErrorAlreadyCancelled { + tag: "AlreadyCancelled" + error: string +} +export interface ClientCancelInvitationErrorCompleted { + tag: "Completed" error: string } export interface ClientCancelInvitationErrorInternal { tag: "Internal" error: string } +export interface ClientCancelInvitationErrorNotAllowed { + tag: "NotAllowed" + error: string +} export interface ClientCancelInvitationErrorNotFound { tag: "NotFound" error: string @@ -634,8 +642,10 @@ export interface ClientCancelInvitationErrorOffline { error: string } export type ClientCancelInvitationError = - | ClientCancelInvitationErrorAlreadyDeleted + | ClientCancelInvitationErrorAlreadyCancelled + | ClientCancelInvitationErrorCompleted | ClientCancelInvitationErrorInternal + | ClientCancelInvitationErrorNotAllowed | ClientCancelInvitationErrorNotFound | ClientCancelInvitationErrorOffline diff --git a/bindings/electron/src/meths.rs b/bindings/electron/src/meths.rs index 0d033f10760..e6567b67cda 100644 --- a/bindings/electron/src/meths.rs +++ b/bindings/electron/src/meths.rs @@ -4095,9 +4095,14 @@ fn variant_client_cancel_invitation_error_rs_to_js<'a>( let js_display = JsString::try_new(cx, &rs_obj.to_string()).or_throw(cx)?; js_obj.set(cx, "error", js_display)?; match rs_obj { - libparsec::ClientCancelInvitationError::AlreadyDeleted { .. } => { + libparsec::ClientCancelInvitationError::AlreadyCancelled { .. } => { + let js_tag = JsString::try_new(cx, "ClientCancelInvitationErrorAlreadyCancelled") + .or_throw(cx)?; + js_obj.set(cx, "tag", js_tag)?; + } + libparsec::ClientCancelInvitationError::Completed { .. } => { let js_tag = - JsString::try_new(cx, "ClientCancelInvitationErrorAlreadyDeleted").or_throw(cx)?; + JsString::try_new(cx, "ClientCancelInvitationErrorCompleted").or_throw(cx)?; js_obj.set(cx, "tag", js_tag)?; } libparsec::ClientCancelInvitationError::Internal { .. } => { @@ -4105,6 +4110,11 @@ fn variant_client_cancel_invitation_error_rs_to_js<'a>( JsString::try_new(cx, "ClientCancelInvitationErrorInternal").or_throw(cx)?; js_obj.set(cx, "tag", js_tag)?; } + libparsec::ClientCancelInvitationError::NotAllowed { .. } => { + let js_tag = + JsString::try_new(cx, "ClientCancelInvitationErrorNotAllowed").or_throw(cx)?; + js_obj.set(cx, "tag", js_tag)?; + } libparsec::ClientCancelInvitationError::NotFound { .. } => { let js_tag = JsString::try_new(cx, "ClientCancelInvitationErrorNotFound").or_throw(cx)?; diff --git a/bindings/generator/api/invite.py b/bindings/generator/api/invite.py index 77054713c4b..aab81beebc7 100644 --- a/bindings/generator/api/invite.py +++ b/bindings/generator/api/invite.py @@ -587,7 +587,13 @@ class Offline: class NotFound: pass - class AlreadyDeleted: + class NotAllowed: + pass + + class AlreadyCancelled: + pass + + class Completed: pass class Internal: diff --git a/bindings/web/src/meths.rs b/bindings/web/src/meths.rs index 9b19bad856b..e929452c9eb 100644 --- a/bindings/web/src/meths.rs +++ b/bindings/web/src/meths.rs @@ -4453,11 +4453,18 @@ fn variant_client_cancel_invitation_error_rs_to_js( let js_display = &rs_obj.to_string(); Reflect::set(&js_obj, &"error".into(), &js_display.into())?; match rs_obj { - libparsec::ClientCancelInvitationError::AlreadyDeleted { .. } => { + libparsec::ClientCancelInvitationError::AlreadyCancelled { .. } => { Reflect::set( &js_obj, &"tag".into(), - &"ClientCancelInvitationErrorAlreadyDeleted".into(), + &"ClientCancelInvitationErrorAlreadyCancelled".into(), + )?; + } + libparsec::ClientCancelInvitationError::Completed { .. } => { + Reflect::set( + &js_obj, + &"tag".into(), + &"ClientCancelInvitationErrorCompleted".into(), )?; } libparsec::ClientCancelInvitationError::Internal { .. } => { @@ -4467,6 +4474,13 @@ fn variant_client_cancel_invitation_error_rs_to_js( &"ClientCancelInvitationErrorInternal".into(), )?; } + libparsec::ClientCancelInvitationError::NotAllowed { .. } => { + Reflect::set( + &js_obj, + &"tag".into(), + &"ClientCancelInvitationErrorNotAllowed".into(), + )?; + } libparsec::ClientCancelInvitationError::NotFound { .. } => { Reflect::set( &js_obj, diff --git a/client/src/components/header/InvitationsButton.vue b/client/src/components/header/InvitationsButton.vue index 5c132ace05f..9a83d0400ac 100644 --- a/client/src/components/header/InvitationsButton.vue +++ b/client/src/components/header/InvitationsButton.vue @@ -109,11 +109,13 @@ async function cancelUserInvitation(invitation: UserInvitation): Promise { ); await updateInvitations(); } else { - // In both those cases we can just refresh the list and the invitation should disappear, no need + // In all those cases we can just refresh the list and the invitation should disappear, no need // to warn the user. if ( result.error.tag === ClientCancelInvitationErrorTag.NotFound || - result.error.tag === ClientCancelInvitationErrorTag.AlreadyDeleted + result.error.tag === ClientCancelInvitationErrorTag.NotAllowed || + result.error.tag === ClientCancelInvitationErrorTag.AlreadyCancelled || + result.error.tag === ClientCancelInvitationErrorTag.Completed ) { await updateInvitations(); } else { diff --git a/client/src/plugins/libparsec/definitions.ts b/client/src/plugins/libparsec/definitions.ts index 3266f7eeed0..6d196a76a75 100644 --- a/client/src/plugins/libparsec/definitions.ts +++ b/client/src/plugins/libparsec/definitions.ts @@ -658,20 +658,30 @@ export type ClientAcceptTosError = // ClientCancelInvitationError export enum ClientCancelInvitationErrorTag { - AlreadyDeleted = 'ClientCancelInvitationErrorAlreadyDeleted', + AlreadyCancelled = 'ClientCancelInvitationErrorAlreadyCancelled', + Completed = 'ClientCancelInvitationErrorCompleted', Internal = 'ClientCancelInvitationErrorInternal', + NotAllowed = 'ClientCancelInvitationErrorNotAllowed', NotFound = 'ClientCancelInvitationErrorNotFound', Offline = 'ClientCancelInvitationErrorOffline', } -export interface ClientCancelInvitationErrorAlreadyDeleted { - tag: ClientCancelInvitationErrorTag.AlreadyDeleted +export interface ClientCancelInvitationErrorAlreadyCancelled { + tag: ClientCancelInvitationErrorTag.AlreadyCancelled + error: string +} +export interface ClientCancelInvitationErrorCompleted { + tag: ClientCancelInvitationErrorTag.Completed error: string } export interface ClientCancelInvitationErrorInternal { tag: ClientCancelInvitationErrorTag.Internal error: string } +export interface ClientCancelInvitationErrorNotAllowed { + tag: ClientCancelInvitationErrorTag.NotAllowed + error: string +} export interface ClientCancelInvitationErrorNotFound { tag: ClientCancelInvitationErrorTag.NotFound error: string @@ -681,8 +691,10 @@ export interface ClientCancelInvitationErrorOffline { error: string } export type ClientCancelInvitationError = - | ClientCancelInvitationErrorAlreadyDeleted + | ClientCancelInvitationErrorAlreadyCancelled + | ClientCancelInvitationErrorCompleted | ClientCancelInvitationErrorInternal + | ClientCancelInvitationErrorNotAllowed | ClientCancelInvitationErrorNotFound | ClientCancelInvitationErrorOffline diff --git a/libparsec/crates/client/src/invite/greeter.rs b/libparsec/crates/client/src/invite/greeter.rs index 030cbe92d34..a76ec9db864 100644 --- a/libparsec/crates/client/src/invite/greeter.rs +++ b/libparsec/crates/client/src/invite/greeter.rs @@ -202,8 +202,12 @@ pub enum CancelInvitationError { Offline, #[error("Invitation not found")] NotFound, - #[error("Invitation already deleted")] - AlreadyDeleted, + #[error("Author not allowed")] + NotAllowed, + #[error("Invitation already cancelled")] + AlreadyCancelled, + #[error("Invitation already completed")] + Completed, #[error(transparent)] Internal(#[from] anyhow::Error), } @@ -228,9 +232,9 @@ pub async fn cancel_invitation( match rep { Rep::Ok => Ok(()), - Rep::AuthorNotAllowed => Err(CancelInvitationError::NotFound), - Rep::InvitationAlreadyCancelled => Err(CancelInvitationError::AlreadyDeleted), - Rep::InvitationCompleted => Err(CancelInvitationError::AlreadyDeleted), + Rep::AuthorNotAllowed => Err(CancelInvitationError::NotAllowed), + Rep::InvitationAlreadyCancelled => Err(CancelInvitationError::AlreadyCancelled), + Rep::InvitationCompleted => Err(CancelInvitationError::Completed), Rep::InvitationNotFound => Err(CancelInvitationError::NotFound), rep @ Rep::UnknownStatus { .. } => { Err(anyhow::anyhow!("Unexpected server response: {:?}", rep).into())