Compare commits

...

3 commits

3 changed files with 12 additions and 8 deletions

View file

@ -28,7 +28,7 @@ object History {
suspend fun update(vararg entries: HistoryEntry) suspend fun update(vararg entries: HistoryEntry)
} }
suspend fun record(uri: String, title: String?) { suspend fun record(uri: String, title: String? = null) {
val now = System.currentTimeMillis() val now = System.currentTimeMillis()
val dao = Database.INSTANCE.historyEntryDao() val dao = Database.INSTANCE.historyEntryDao()
val entry = dao.get(uri) val entry = dao.get(uri)

View file

@ -63,7 +63,7 @@ class PageFragment : Fragment(), PageAdapter.Listener {
Log.d(TAG, "onViewCreated: reuse current URL, probably fragment recreation") Log.d(TAG, "onViewCreated: reuse current URL, probably fragment recreation")
} else if (vm.visitedUrls.isEmpty()) { } else if (vm.visitedUrls.isEmpty()) {
Log.d(TAG, "onViewCreated: no current URL, open home if configured") Log.d(TAG, "onViewCreated: no current URL, open home if configured")
Preferences.getHomeUrl(requireContext())?.let { openUrl(it) } Preferences.getHomeUrl(requireContext())?.let { if (it.isNotBlank()) openUrl(it) }
} }
} }
@ -182,10 +182,13 @@ class PageFragment : Fragment(), PageAdapter.Listener {
}) })
} }
.show() .show()
vm.visitedUrls.add(event.uri.toString())
} }
is PageViewModel.RedirectEvent -> { 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 -> { is PageViewModel.FailureEvent -> {
var message = event.details var message = event.details

View file

@ -74,7 +74,7 @@ class PageViewModel(
) : Event() ) : Event()
/** The server is redirecting us. */ /** 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. */ /** The server responded with a failure code or we encountered a local issue. */
data class FailureEvent( data class FailureEvent(
@ -156,7 +156,7 @@ class PageViewModel(
Response.Code.Category.SUCCESS -> Response.Code.Category.SUCCESS ->
handleSuccessResponse(response, uri) handleSuccessResponse(response, uri)
Response.Code.Category.REDIRECT -> 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 -> Response.Code.Category.SERVER_ERROR, Response.Code.Category.CLIENT_ERROR ->
handleErrorResponse(response) handleErrorResponse(response)
else -> else ->
@ -253,8 +253,8 @@ class PageViewModel(
handleSuccessGemtextResponse(response, uri) // TODO render plain text as... something else? handleSuccessGemtextResponse(response, uri) // TODO render plain text as... something else?
/** Notify observers that a redirect has been returned. */ /** Notify observers that a redirect has been returned. */
private fun handleRedirectResponse(response: Response, redirects: Int) { private fun handleRedirectResponse(response: Response, uri: Uri, redirects: Int) {
event.postValue(RedirectEvent(response.meta, redirects)) event.postValue(RedirectEvent(response.meta, uri.toString(), redirects))
} }
/** /**
@ -311,6 +311,7 @@ class PageViewModel(
onSuccess = { mediaUri -> onSuccess = { mediaUri ->
event.postValue(DownloadCompletedEvent(mediaUri, mimeType)) event.postValue(DownloadCompletedEvent(mediaUri, mimeType))
state.postValue(State.IDLE) state.postValue(State.IDLE)
viewModelScope.launch(Dispatchers.IO) { History.record(uri.toString()) }
}, },
onError = { msg -> signalError("Download failed: $msg") } onError = { msg -> signalError("Download failed: $msg") }
) )