1 package net.pterodactylus.sone.freenet
3 import freenet.client.*
5 import kotlinx.coroutines.*
6 import net.pterodactylus.sone.core.*
8 class AsyncFreenetInterface(private val freenetClient: FreenetClient) {
10 suspend fun fetchUri(freenetUri: FreenetURI): Fetched {
11 var currentUri = freenetUri
12 var result: FetchResult? = null
13 while (result == null) {
15 result = withContext(Dispatchers.Default) { freenetClient.fetch(currentUri) }
16 } catch (fetchException: FetchException) {
17 if (fetchException.mode == FetchException.FetchExceptionMode.PERMANENT_REDIRECT) {
18 currentUri = fetchException.newURI
24 return Fetched(currentUri, result)