Skip to content

Commit

Permalink
add the inboxid functions
Browse files Browse the repository at this point in the history
  • Loading branch information
nplasterer committed Jan 17, 2025
1 parent 7cd4daa commit 9de265c
Showing 1 changed file with 96 additions and 3 deletions.
99 changes: 96 additions & 3 deletions library/src/main/java/org/xmtp/android/library/Conversations.kt
Original file line number Diff line number Diff line change
Expand Up @@ -104,9 +104,7 @@ data class Conversations(
messageExpirationFromMs: Long?,
messageExpirationMs: Long?,
): Group {
if (accountAddresses.size == 1 &&
accountAddresses.first().lowercase() == client.address.lowercase()
) {
if (accountAddresses.any { it.equals(client.address, ignoreCase = true) }) {
throw XMTPException("Recipient is sender")
}
val falseAddresses =
Expand All @@ -133,6 +131,84 @@ data class Conversations(
return Group(client.inboxId, group)
}

suspend fun newGroupWithInboxId(
inboxIds: List<String>,
permissions: GroupPermissionPreconfiguration = GroupPermissionPreconfiguration.ALL_MEMBERS,
groupName: String = "",
groupImageUrlSquare: String = "",
groupDescription: String = "",
groupPinnedFrameUrl: String = "",
messageExpirationFromMs: Long? = null,
messageExpirationMs: Long? = null,
): Group {
return newGroupInternalWithInboxId(
inboxIds,
GroupPermissionPreconfiguration.toFfiGroupPermissionOptions(permissions),
groupName,
groupImageUrlSquare,
groupDescription,
groupPinnedFrameUrl,
null,
messageExpirationFromMs,
messageExpirationMs,
)
}

suspend fun newGroupCustomPermissionsWithInboxId(
inboxIds: List<String>,
permissionPolicySet: PermissionPolicySet,
groupName: String = "",
groupImageUrlSquare: String = "",
groupDescription: String = "",
groupPinnedFrameUrl: String = "",
messageExpirationFromMs: Long? = null,
messageExpirationMs: Long? = null,
): Group {
return newGroupInternalWithInboxId(
inboxIds,
FfiGroupPermissionsOptions.CUSTOM_POLICY,
groupName,
groupImageUrlSquare,
groupDescription,
groupPinnedFrameUrl,
PermissionPolicySet.toFfiPermissionPolicySet(permissionPolicySet),
messageExpirationFromMs,
messageExpirationMs
)
}

private suspend fun newGroupInternalWithInboxId(
inboxIds: List<String>,
permissions: FfiGroupPermissionsOptions,
groupName: String,
groupImageUrlSquare: String,
groupDescription: String,
groupPinnedFrameUrl: String,
permissionsPolicySet: FfiPermissionPolicySet?,
messageExpirationFromMs: Long?,
messageExpirationMs: Long?,
): Group {
if (inboxIds.any { it.equals(client.inboxId, ignoreCase = true) }) {
throw XMTPException("Recipient is sender")
}

val group =
ffiConversations.createGroupWithInboxIds(
inboxIds,
opts = FfiCreateGroupOptions(
permissions = permissions,
groupName = groupName,
groupImageUrlSquare = groupImageUrlSquare,
groupDescription = groupDescription,
groupPinnedFrameUrl = groupPinnedFrameUrl,
customPermissionPolicySet = permissionsPolicySet,
messageExpirationFromMs = messageExpirationFromMs,
messageExpirationMs = messageExpirationMs,
)
)
return Group(client.inboxId, group)
}

// Sync from the network the latest list of conversations
suspend fun sync() {
ffiConversations.sync()
Expand Down Expand Up @@ -169,6 +245,23 @@ data class Conversations(
return dm
}

suspend fun newConversationWithInboxId(inboxId: String): Conversation {
val dm = findOrCreateDmWithInboxId(inboxId)
return Conversation.Dm(dm)
}

suspend fun findOrCreateDmWithInboxId(inboxId: String): Dm {
if (inboxId.lowercase() == client.inboxId.lowercase()) {
throw XMTPException("Recipient is sender")
}
var dm = client.findDmByInboxId(inboxId)
if (dm == null) {
val dmConversation = ffiConversations.createDmWithInboxId(inboxId.lowercase())
dm = Dm(client.inboxId, dmConversation)
}
return dm
}

fun listGroups(
after: Date? = null,
before: Date? = null,
Expand Down

0 comments on commit 9de265c

Please sign in to comment.