app: switch to loading posts using Ktor

Signed-off-by: Harsh Shandilya <me@msfjarvis.dev>
This commit is contained in:
Harsh Shandilya 2020-11-08 16:13:41 +05:30
parent 836b5ef725
commit f7e0ba6544
No known key found for this signature in database
GPG key ID: 366D7BBAD1031E80

View file

@ -3,9 +3,10 @@ package dev.msfjarvis.lobsters.ui.viewmodel
import androidx.hilt.lifecycle.ViewModelInject import androidx.hilt.lifecycle.ViewModelInject
import androidx.lifecycle.ViewModel import androidx.lifecycle.ViewModel
import androidx.lifecycle.viewModelScope import androidx.lifecycle.viewModelScope
import dev.msfjarvis.lobsters.api.LobstersApi
import dev.msfjarvis.lobsters.data.source.PostsDatabase import dev.msfjarvis.lobsters.data.source.PostsDatabase
import dev.msfjarvis.lobsters.model.LobstersPost import dev.msfjarvis.lobsters.model.LobstersPost
import io.ktor.client.HttpClient
import io.ktor.client.request.get
import kotlinx.coroutines.CoroutineExceptionHandler import kotlinx.coroutines.CoroutineExceptionHandler
import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.MutableStateFlow
import kotlinx.coroutines.flow.StateFlow import kotlinx.coroutines.flow.StateFlow
@ -15,7 +16,7 @@ import java.net.SocketTimeoutException
import java.net.UnknownHostException import java.net.UnknownHostException
class LobstersViewModel @ViewModelInject constructor( class LobstersViewModel @ViewModelInject constructor(
private val lobstersApi: LobstersApi, private val client: HttpClient,
database: PostsDatabase, database: PostsDatabase,
) : ViewModel() { ) : ViewModel() {
private var apiPage = 1 private var apiPage = 1
@ -56,8 +57,7 @@ class LobstersViewModel @ViewModelInject constructor(
private fun getMorePostsInternal(firstLoad: Boolean) { private fun getMorePostsInternal(firstLoad: Boolean) {
viewModelScope.launch(coroutineExceptionHandler) { viewModelScope.launch(coroutineExceptionHandler) {
val newPosts = lobstersApi.getHottestPosts(apiPage) val newPosts = client.get<List<LobstersPost>>("https://lobste.rs/hottest.json?page=$apiPage")
.toList()
if (firstLoad) { if (firstLoad) {
_posts.value = newPosts _posts.value = newPosts
postsDao.deleteAllPosts() postsDao.deleteAllPosts()