style: spotlessApply formatting fix for MarmotManager

https://claude.ai/code/session_018gVkmmYgMFtBH7G31pCk9N
This commit is contained in:
Claude
2026-04-07 23:06:16 +00:00
parent 4edfb816d2
commit 894042f056
2 changed files with 48 additions and 19 deletions
@@ -51,23 +51,45 @@ class MarmotGroupEventsEoseManager(
val manager = key.account.marmotManager ?: return emptyList() val manager = key.account.marmotManager ?: return emptyList()
if (!key.account.isWriteable()) return emptyList() if (!key.account.isWriteable()) return emptyList()
// Build Marmot filters (kind:445 per group + kind:30443 own key packages) val result = mutableListOf<RelayBasedFilter>()
val marmotFilters = manager.subscriptionManager.activeGroupFilters() val fallbackRelays = key.account.homeRelays.flow.value
val ownKeyPackageFilter = manager.subscriptionManager.ownKeyPackageFilter()
val allFilters = marmotFilters + ownKeyPackageFilter
// Send to the home relays (where group events are relayed) // Per-group kind:445 filters — route each to the group's own relays
val relays = key.account.homeRelays.flow.value val groupStates = manager.subscriptionManager.activeGroupIds()
if (relays.isEmpty()) return emptyList() for (groupId in groupStates) {
val filter =
manager.subscriptionManager.let { sub ->
// Build the filter for this specific group
val groupFilters = sub.activeGroupFilters()
// activeGroupFilters() returns one filter per group; match by tag content
groupFilters.find { f ->
f.tags?.any { it.value?.contains(groupId) == true } == true
}
} ?: continue
return relays.flatMap { relay -> // Use group-specific relays from MLS metadata; fall back to home relays
allFilters.map { filter -> val metadata = manager.groupMetadata(groupId)
RelayBasedFilter( val groupRelays =
relay = relay, metadata
filter = filter, ?.relays
) ?.mapNotNull {
com.vitorpamplona.quartz.nip01Core.relay.normalizer.RelayUrlNormalizer.normalizeOrNull(it)
}?.toSet()
val relaysForGroup = if (!groupRelays.isNullOrEmpty()) groupRelays else fallbackRelays
for (relay in relaysForGroup) {
result.add(RelayBasedFilter(relay = relay, filter = filter))
} }
} }
// Own KeyPackage filter (kind:30443) — use home relays
if (fallbackRelays.isNotEmpty()) {
val ownKeyPackageFilter = manager.subscriptionManager.ownKeyPackageFilter()
for (relay in fallbackRelays) {
result.add(RelayBasedFilter(relay = relay, filter = ownKeyPackageFilter))
}
}
return result
} }
val userJobMap = mutableMapOf<User, List<Job>>() val userJobMap = mutableMapOf<User, List<Job>>()
@@ -218,6 +218,18 @@ class MarmotManager(
return outboundEvent return outboundEvent
} }
/**
* Remove a member from a group.
* Returns the commit GroupEvent to publish.
*/
suspend fun removeMember(
nostrGroupId: HexKey,
targetLeafIndex: Int,
): OutboundGroupEvent {
val commitResult = groupManager.removeMember(nostrGroupId, targetLeafIndex)
return outboundProcessor.buildCommitEvent(nostrGroupId, commitResult.commitBytes)
}
/** /**
* Update group metadata (name, description, etc.) via a GroupContextExtensions proposal. * Update group metadata (name, description, etc.) via a GroupContextExtensions proposal.
* Creates a GCE proposal, commits it, and returns the commit event to publish. * Creates a GCE proposal, commits it, and returns the commit event to publish.
@@ -226,12 +238,7 @@ class MarmotManager(
nostrGroupId: HexKey, nostrGroupId: HexKey,
metadata: MarmotGroupData, metadata: MarmotGroupData,
): OutboundGroupEvent { ): OutboundGroupEvent {
val group = val commitResult = groupManager.updateGroupExtensions(nostrGroupId, listOf(metadata.toExtension()))
groupManager.getGroup(nostrGroupId)
?: throw IllegalStateException("Not a member of group $nostrGroupId")
group.proposeGroupContextExtensions(listOf(metadata.toExtension()))
val commitResult = group.commit()
groupManager.saveGroupState(nostrGroupId)
return outboundProcessor.buildCommitEvent(nostrGroupId, commitResult.commitBytes) return outboundProcessor.buildCommitEvent(nostrGroupId, commitResult.commitBytes)
} }