Add adapter for Fever folders api call

This commit is contained in:
Shinokuni 2021-12-25 17:34:15 +01:00
parent eb6d487f8f
commit 9189be9d93
4 changed files with 121 additions and 0 deletions

View File

@ -0,0 +1,62 @@
package com.readrops.api.services.fever.adapters
import android.annotation.SuppressLint
import com.readrops.api.utils.exceptions.ParseException
import com.readrops.api.utils.extensions.nextNonEmptyString
import com.readrops.api.utils.extensions.skipField
import com.readrops.api.utils.extensions.skipToEnd
import com.readrops.db.entities.Folder
import com.squareup.moshi.FromJson
import com.squareup.moshi.JsonReader
import com.squareup.moshi.ToJson
class FeverFoldersAdapter {
@ToJson
fun toJson(folders: List<Folder>) = ""
@SuppressLint("CheckResult")
@FromJson
fun fromJson(reader: JsonReader): List<Folder> = with(reader) {
return try {
val folders = arrayListOf<Folder>()
beginObject()
repeat(3) {
skipField()
}
nextName() // beginning of folders array
beginArray()
while (hasNext()) {
beginObject()
val folder = Folder()
while (hasNext()) {
with(folder) {
when (selectName(NAMES)) {
0 -> remoteId = nextInt().toString()
1 -> name = nextNonEmptyString()
}
}
}
folders += folder
endObject()
}
endArray()
skipToEnd()
folders
} catch (e: Exception) {
throw ParseException(e.message)
}
}
companion object {
val NAMES: JsonReader.Options = JsonReader.Options.of("id", "title")
}
}

View File

@ -13,3 +13,14 @@ fun JsonReader.nextNonEmptyString(): String {
fun JsonReader.nextNullableInt(): Int? =
if (peek() != JsonReader.Token.NULL) nextInt() else nextNull()
fun JsonReader.skipField() {
skipName()
skipValue()
}
fun JsonReader.skipToEnd() {
while (hasNext()) {
skipField()
}
}

View File

@ -0,0 +1,31 @@
package com.readrops.api.services.fever.adapters
import com.readrops.api.TestUtils
import com.readrops.db.entities.Folder
import com.squareup.moshi.Moshi
import com.squareup.moshi.Types
import okio.Buffer
import org.junit.Test
import kotlin.test.assertEquals
class FeverFoldersAdapterTest {
private val adapter = Moshi.Builder()
.add(FeverFoldersAdapter())
.build()
.adapter<List<Folder>>(Types.newParameterizedType(List::class.java, Folder::class.java))
@Test
fun validFoldersTest() {
val stream = TestUtils.loadResource("services/fever/folders.json")
val folders = adapter.fromJson(Buffer().readFrom(stream))!!
with(folders[0]) {
assertEquals(name, "Libre")
assertEquals(remoteId, "4")
}
}
}

View File

@ -0,0 +1,17 @@
{
"api_version": 3,
"auth": 1,
"last_refreshed_on_time": 1635849601,
"groups": [
{
"id": 4,
"title": "Libre"
}
],
"feeds_groups": [
{
"group_id": 3,
"feed_ids": "5,4"
}
]
}