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=bfd5b1b8822f91820b1866015a69bd4793ea059f;hpb=2f1e414e86c61435cd8b3991c475e0832f6de2fb;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 bfd5b1b..736b452 100644 --- a/src/main/kotlin/net/pterodactylus/sone/freenet/wot/IdentityLoader.kt +++ b/src/main/kotlin/net/pterodactylus/sone/freenet/wot/IdentityLoader.kt @@ -1,5 +1,5 @@ /* - * Sone - IdentityLoader.kt - Copyright © 2013–2019 David Roden + * Sone - IdentityLoader.kt - Copyright © 2013–2020 David Roden * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -30,14 +30,13 @@ class IdentityLoader @Inject constructor(private val webOfTrustConnector: WebOfT private val logger: Logger = Logger.getLogger(IdentityLoader::class.java.name) - @Throws(WebOfTrustException::class) - fun loadIdentities() = + fun loadAllIdentities() = time({ stopwatch, identities -> "Loaded ${identities.size} own identities in ${stopwatch.elapsed(MILLISECONDS) / 1000.0}s." }) { webOfTrustConnector.loadAllOwnIdentities() - }.let(this::loadTrustedIdentitiesForOwnIdentities) + }.let(this::loadAllIdentitiesForOwnIdentities) + .mergeRemoteIdentities() - @Throws(PluginException::class) - private fun loadTrustedIdentitiesForOwnIdentities(ownIdentities: Collection) = + private fun loadAllIdentitiesForOwnIdentities(ownIdentities: Collection) = ownIdentities .also { logger.fine { "Getting trusted identities for ${it.size} own identities..." } } .associateWith { ownIdentity -> @@ -48,7 +47,7 @@ class IdentityLoader @Inject constructor(private val webOfTrustConnector: WebOfT } 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) + webOfTrustConnector.loadAllIdentities(ownIdentity, context?.context) } } } @@ -61,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() } + } + }