diff --git a/app/src/main/java/dev/lowrespalmtree/comet/PageFragment.kt b/app/src/main/java/dev/lowrespalmtree/comet/PageFragment.kt index d0717e9..74aa6bc 100644 --- a/app/src/main/java/dev/lowrespalmtree/comet/PageFragment.kt +++ b/app/src/main/java/dev/lowrespalmtree/comet/PageFragment.kt @@ -185,7 +185,11 @@ class PageFragment : Fragment(), PageAdapter.Listener { vm.visitedUrls.add(event.uri.toString()) } is PageViewModel.RedirectEvent -> { - openUrl(event.uri, base = vm.currentUrl, redirections = event.redirects) + openUrl( + event.uri, + base = vm.currentUrl.ifEmpty { event.sourceUri }, + redirections = event.redirects + ) } is PageViewModel.FailureEvent -> { var message = event.details diff --git a/app/src/main/java/dev/lowrespalmtree/comet/PageViewModel.kt b/app/src/main/java/dev/lowrespalmtree/comet/PageViewModel.kt index c21bde1..f9684e9 100644 --- a/app/src/main/java/dev/lowrespalmtree/comet/PageViewModel.kt +++ b/app/src/main/java/dev/lowrespalmtree/comet/PageViewModel.kt @@ -74,7 +74,7 @@ class PageViewModel( ) : Event() /** The server is redirecting us. */ - data class RedirectEvent(val uri: String, val redirects: Int) : Event() + data class RedirectEvent(val uri: String, val sourceUri: String, val redirects: Int) : Event() /** The server responded with a failure code or we encountered a local issue. */ data class FailureEvent( @@ -156,7 +156,7 @@ class PageViewModel( Response.Code.Category.SUCCESS -> handleSuccessResponse(response, uri) Response.Code.Category.REDIRECT -> - handleRedirectResponse(response, redirects = redirects + 1) + handleRedirectResponse(response, uri, redirects = redirects + 1) Response.Code.Category.SERVER_ERROR, Response.Code.Category.CLIENT_ERROR -> handleErrorResponse(response) else -> @@ -253,8 +253,8 @@ class PageViewModel( handleSuccessGemtextResponse(response, uri) // TODO render plain text as... something else? /** Notify observers that a redirect has been returned. */ - private fun handleRedirectResponse(response: Response, redirects: Int) { - event.postValue(RedirectEvent(response.meta, redirects)) + private fun handleRedirectResponse(response: Response, uri: Uri, redirects: Int) { + event.postValue(RedirectEvent(response.meta, uri.toString(), redirects)) } /**