X-Git-Url: https://git.pterodactylus.net/?a=blobdiff_plain;f=src%2Fmain%2Fkotlin%2Fnet%2Fpterodactylus%2Fsone%2Ffreenet%2Fwot%2FIdentityLoader.kt;h=736b4522457344a4da001718d70e9808d587ff67;hb=58bb46435ed76f41df7b2ffd9a74fe5a4c1762d3;hp=f6e1d5905af71b8fe44656ea94921a1a608fab1d;hpb=6ebf42a54cc1ef44bdd762ad06e9b1a84bd7ad25;p=Sone.git diff --git a/src/main/kotlin/net/pterodactylus/sone/freenet/wot/IdentityLoader.kt b/src/main/kotlin/net/pterodactylus/sone/freenet/wot/IdentityLoader.kt index f6e1d59..736b452 100644 --- a/src/main/kotlin/net/pterodactylus/sone/freenet/wot/IdentityLoader.kt +++ b/src/main/kotlin/net/pterodactylus/sone/freenet/wot/IdentityLoader.kt @@ -30,33 +30,11 @@ class IdentityLoader @Inject constructor(private val webOfTrustConnector: WebOfT private val logger: Logger = Logger.getLogger(IdentityLoader::class.java.name) - @Throws(WebOfTrustException::class) - fun loadTrustedIdentities() = - time({ stopwatch, identities -> "Loaded ${identities.size} own identities in ${stopwatch.elapsed(MILLISECONDS) / 1000.0}s." }) { - webOfTrustConnector.loadAllOwnIdentities() - }.let(this::loadTrustedIdentitiesForOwnIdentities) - fun loadAllIdentities() = time({ stopwatch, identities -> "Loaded ${identities.size} own identities in ${stopwatch.elapsed(MILLISECONDS) / 1000.0}s." }) { webOfTrustConnector.loadAllOwnIdentities() }.let(this::loadAllIdentitiesForOwnIdentities) - - @Throws(PluginException::class) - private fun loadTrustedIdentitiesForOwnIdentities(ownIdentities: Collection) = - ownIdentities - .also { logger.fine { "Getting trusted identities for ${it.size} own identities..." } } - .associateWith { ownIdentity -> - logger.fine { "Getting trusted identities for $ownIdentity..." } - if (ownIdentity.doesNotHaveCorrectContext()) { - logger.fine { "Skipping $ownIdentity because of incorrect context." } - emptySet() - } else { - logger.fine { "Loading trusted identities for $ownIdentity from WoT..." } - time({ stopwatch, identities -> "Loaded ${identities.size} identities for ${ownIdentity.nickname} in ${stopwatch.elapsed(MILLISECONDS) / 1000.0}s." }) { - webOfTrustConnector.loadTrustedIdentities(ownIdentity, context?.context) - } - } - } + .mergeRemoteIdentities() private fun loadAllIdentitiesForOwnIdentities(ownIdentities: Collection) = ownIdentities @@ -82,4 +60,17 @@ class IdentityLoader @Inject constructor(private val webOfTrustConnector: WebOfT loader().also { logger.fine(logMessage(stopwatch, it)) } } + private fun Map>.mergeRemoteIdentities() = + values.flatten() + .groupBy { it.id } + .mapValues { + it.value.reduce { accIdentity, identity -> + identity.trust.forEach { (ownIdentity, trust) -> accIdentity.setTrust(ownIdentity, trust) } + accIdentity + } + } + .let { reducedIdentities -> + mapValues { it.value.map { identity -> reducedIdentities[identity.id]!! }.toSet() } + } + }