Use the repository for the login

This commit is contained in:
davide
2022-07-20 13:43:00 +02:00
parent 3be942a807
commit dc10cafb1b
6 changed files with 89 additions and 70 deletions

View File

@ -0,0 +1,15 @@
package bou.amine.apps.readerforselfossv2.DI
import bou.amine.apps.readerforselfossv2.rest.SelfossApi
import bou.amine.apps.readerforselfossv2.rest.SelfossApiImpl
import bou.amine.apps.readerforselfossv2.service.ApiDetailsService
import bou.amine.apps.readerforselfossv2.service.ApiDetailsServiceImpl
import org.kodein.di.DI
import org.kodein.di.bind
import org.kodein.di.instance
import org.kodein.di.singleton
val networkModule by DI.Module {
bind<ApiDetailsService>() with singleton { ApiDetailsServiceImpl() }
bind<SelfossApi>() with singleton { SelfossApiImpl(instance()) }
}

View File

@ -9,7 +9,6 @@ interface Repository {
var selectedItems: List<SelfossModel.Item>
// API
fun getItems(): List<SelfossModel.Item>
fun getMoreItems(): List<SelfossModel.Item>
fun stats(): SelfossModel.Stats
fun getTags(): List<SelfossModel.Tag>
@ -27,6 +26,6 @@ interface Repository {
filter: String): Boolean
fun deleteSource(id: Int): Boolean
fun updateRemote(): Boolean
fun login(): Boolean
fun refreshLoginInformation(): Boolean
suspend fun login(): Boolean
fun refreshLoginInformation()
}

View File

@ -3,17 +3,14 @@ package bou.amine.apps.readerforselfossv2.repository
import bou.amine.apps.readerforselfossv2.rest.SelfossApi
import bou.amine.apps.readerforselfossv2.rest.SelfossModel
import com.russhwolf.settings.Settings
import io.github.aakira.napier.Napier
class RepositoryImpl(api: SelfossApi) : Repository {
class RepositoryImpl(private val api: SelfossApi) : Repository {
val settings = Settings()
override lateinit var items: List<SelfossModel.Item>
override lateinit var selectedItems: List<SelfossModel.Item>
override fun getItems(): List<SelfossModel.Item> {
return items
}
override fun getMoreItems(): List<SelfossModel.Item> {
TODO("Not yet implemented")
}
@ -72,11 +69,21 @@ class RepositoryImpl(api: SelfossApi) : Repository {
TODO("Not yet implemented")
}
override fun login(): Boolean {
TODO("Not yet implemented")
override suspend fun login(): Boolean {
var result = false
try {
val response = api.login()
if (response != null && response.isSuccess) {
result = true
}
} catch (cause: Throwable) {
Napier.e(cause.message!!, tag = "1")
Napier.e(cause.stackTraceToString(),tag = "1")
}
return result
}
override fun refreshLoginInformation(): Boolean {
TODO("Not yet implemented")
override fun refreshLoginInformation() {
api.refreshLoginInformation()
}
}

View File

@ -16,6 +16,8 @@ interface SelfossApi {
val client: HttpClient
fun url(path: String): String
fun refreshLoginInformation()
suspend fun login(): SelfossModel.SuccessResponse?
suspend fun getItems(
@ -64,43 +66,51 @@ interface SelfossApi {
class SelfossApiImpl(private val apiDetailsService: ApiDetailsService) : SelfossApi {
override val client = HttpClient() {
install(ContentNegotiation) {
install(HttpCache)
json(Json {
prettyPrint = true
isLenient = true
ignoreUnknownKeys = true
})
}
install(Logging) {
logger = object: Logger {
override fun log(message: String) {
apiDetailsService.logApiCalls(message)
}
}
level = LogLevel.ALL
}
/* TODO: Auth as basic
if (apiDetailsService.getUserName().isNotEmpty() && apiDetailsService.getPassword().isNotEmpty()) {
override var client = createHttpClient()
install(Auth) {
basic {
credentials {
BasicAuthCredentials(username = apiDetailsService.getUserName(), password = apiDetailsService.getPassword())
}
sendWithoutRequest {
true
private fun createHttpClient(): HttpClient {
return HttpClient {
install(ContentNegotiation) {
install(HttpCache)
json(Json {
prettyPrint = true
isLenient = true
ignoreUnknownKeys = true
})
}
install(Logging) {
logger = object : Logger {
override fun log(message: String) {
apiDetailsService.logApiCalls(message)
}
}
level = LogLevel.ALL
}
}*/
expectSuccess = false
/* TODO: Auth as basic
if (apiDetailsService.getUserName().isNotEmpty() && apiDetailsService.getPassword().isNotEmpty()) {
install(Auth) {
basic {
credentials {
BasicAuthCredentials(username = apiDetailsService.getUserName(), password = apiDetailsService.getPassword())
}
sendWithoutRequest {
true
}
}
}
}*/
expectSuccess = false
}
}
override fun url(path: String) =
"${apiDetailsService.getBaseUrl()}$path"
override fun refreshLoginInformation() {
apiDetailsService.refresh()
client = createHttpClient()
}
override suspend fun login(): SelfossModel.SuccessResponse? =
client.get(url("/login")) {