Add adapter for Fever folders api call
This commit is contained in:
parent
eb6d487f8f
commit
9189be9d93
@ -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")
|
||||
}
|
||||
}
|
@ -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()
|
||||
}
|
||||
}
|
||||
|
@ -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")
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
}
|
17
api/src/test/resources/services/fever/folders.json
Normal file
17
api/src/test/resources/services/fever/folders.json
Normal 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"
|
||||
}
|
||||
]
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user