Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 3 additions & 1 deletion core/conversations/src/conversation.rs
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ pub type ConversationId = String;
pub type ConversationIdRef<'a> = &'a str;

/// Behaviour shared by every conversation kind.
pub(crate) trait Convo<S: ExternalServices> {
pub(crate) trait Convo<S: ExternalServices>: Identified {
fn send_content(&mut self, cx: &mut ServiceContext<S>, content: &[u8])
-> Result<(), ChatError>;

Expand All @@ -40,6 +40,8 @@ pub(crate) trait GroupConvo<S: ExternalServices>: Convo<S> + std::fmt::Debug + S
cx: &mut ServiceContext<S>,
members: &[IdentIdRef],
) -> Result<(), ChatError>;
}

pub(crate) trait Identified {
fn id(&self) -> ConversationIdRef<'_>;
}
17 changes: 8 additions & 9 deletions core/conversations/src/conversation/group_v1.rs
Original file line number Diff line number Diff line change
Expand Up @@ -11,12 +11,13 @@ use prost::Message as _;
use shared_traits::IdentIdRef;

use crate::account_directory::{AccountDirectory, resolve_device_ids};
use crate::conversation::ConversationIdRef;
use crate::inbox_v2::MlsProvider;
use crate::service_context::{ExternalServices, ServiceContext};

use crate::{
DeliveryService, IdentityProvider,
conversation::{ChatError, Convo, GroupConvo},
conversation::{ChatError, Convo, GroupConvo, Identified},
outcomes::{Content, ConvoOutcome},
service_traits::KeyPackageProvider,
types::AddressedEncryptedPayload,
Expand Down Expand Up @@ -174,10 +175,6 @@ impl GroupV1Convo {
Ok(keypackages)
}

pub fn id(&self) -> &str {
&self.convo_id
}

fn send_message<S: ExternalServices>(
&mut self,
content: &[u8],
Expand Down Expand Up @@ -205,6 +202,12 @@ impl GroupV1Convo {
}
}

impl Identified for GroupV1Convo {
fn id(&self) -> ConversationIdRef<'_> {
&self.convo_id
}
}

impl<S: ExternalServices> Convo<S> for GroupV1Convo {
fn send_content(
&mut self,
Expand Down Expand Up @@ -344,8 +347,4 @@ impl<S: ExternalServices> GroupConvo<S> for GroupV1Convo {
.publish(env)
.map_err(|e| ChatError::Generic(format!("Publish: {e}")))
}

fn id(&self) -> super::ConversationIdRef<'_> {
&self.convo_id
}
}
11 changes: 7 additions & 4 deletions core/conversations/src/conversation/group_v2.rs
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ use crate::IdentityProvider;
use crate::conversation::{ConversationIdRef, ExternalServices, ServiceContext};
use crate::{
ConvoOutcome, DeliveryService, RegistrationService,
conversation::{ChatError, Convo, GroupConvo},
conversation::{ChatError, Convo, GroupConvo, Identified},
};

/// Namespace used for de-mls (GroupV2) keypackages, so they don't collide
Expand Down Expand Up @@ -272,6 +272,12 @@ impl GroupV2Convo {
}
}

impl Identified for GroupV2Convo {
fn id(&self) -> ConversationIdRef<'_> {
&self.convo_id
}
}

impl<S> Convo<S> for GroupV2Convo
where
S: ExternalServices,
Expand Down Expand Up @@ -347,9 +353,6 @@ impl<S> GroupConvo<S> for GroupV2Convo
where
S: ExternalServices,
{
fn id(&self) -> ConversationIdRef<'_> {
&self.convo_id
}
#[instrument(name = "groupv2.add_member", skip_all, fields(user_id = %service_ctx.mls_identity.display_name()))]
fn add_member(
&mut self,
Expand Down
12 changes: 7 additions & 5 deletions core/conversations/src/conversation/privatev1.rs
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ use storage::{ConversationKind, ConversationMeta, ConversationStore};

use crate::{
DeliveryService,
conversation::{ChatError, ConversationId, Convo},
conversation::{ChatError, ConversationId, ConversationIdRef, Convo, Identified},
errors::EncryptionError,
inbox::PRIVATE_V1_INBOX_ADDRESS,
outcomes::{Content, ConvoOutcome},
Expand Down Expand Up @@ -200,10 +200,6 @@ impl PrivateV1Convo {
}
}

pub fn id(&self) -> &str {
&self.local_convo_id
}

pub fn encrypt_content<S: RatchetStore>(
&mut self,
content: &[u8],
Expand Down Expand Up @@ -235,6 +231,12 @@ impl PrivateV1Convo {
}
}

impl Identified for PrivateV1Convo {
fn id(&self) -> ConversationIdRef<'_> {
&self.local_convo_id
}
}

impl<S: ExternalServices> Convo<S> for PrivateV1Convo {
fn send_content(
&mut self,
Expand Down
8 changes: 5 additions & 3 deletions core/conversations/src/core.rs
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
use crate::causal_history::{CausalHistoryStore, MissingMessage};
use crate::conversation::{ConversationIdRef, GroupV1Convo, GroupV2Convo, PrivateV1Convo};
use crate::conversation::{
ConversationIdRef, GroupV1Convo, GroupV2Convo, Identified, PrivateV1Convo,
};
use crate::service_context::{ExternalServices, ServiceContext};
use crate::{DeliveryService, IdentityProvider, RegistrationService, WakeupService};
use crate::{
Expand Down Expand Up @@ -470,8 +472,8 @@ enum ConvoTypeOwned<S: ExternalServices> {
Group(Box<dyn GroupConvo<S>>),
}

impl<'a, S: ExternalServices> ConvoTypeOwned<S> {
pub fn id(&'a self) -> ConversationIdRef<'a> {
impl<S: ExternalServices> Identified for ConvoTypeOwned<S> {
fn id(&self) -> ConversationIdRef<'_> {
match self {
ConvoTypeOwned::Group(group_convo) => group_convo.id(),
}
Expand Down
1 change: 1 addition & 0 deletions core/conversations/src/inbox_v2.rs
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@ use crate::RegistrationService;
use crate::conversation::GroupConvo;
use crate::conversation::GroupV1Convo;
use crate::conversation::GroupV2Convo;
use crate::conversation::Identified as _;
use crate::service_context::{ExternalServices, ServiceContext};
use crate::utils::{blake2b_hex, hash_size};
use crate::{
Expand Down
Loading