11package com.home.reader.api
22
3- import android.content.Context
4- import coil.request.ImageRequest
53import com.google.gson.Gson
64import com.google.gson.reflect.TypeToken
75import com.home.reader.api.dto.Credentials
86import com.home.reader.api.dto.Issue
7+ import com.home.reader.api.dto.ReadingProgressUpdate
98import com.home.reader.api.dto.Result
109import com.home.reader.api.dto.Series
1110import com.home.reader.api.dto.Token
@@ -16,8 +15,10 @@ import okhttp3.RequestBody.Companion.toRequestBody
1615import okhttp3.Response
1716import java.io.InputStreamReader
1817import java.lang.reflect.Type
18+ import java.time.ZoneId
19+ import java.time.ZonedDateTime
1920
20- class ApiProcessor (private val host : String , private val context : Context ) {
21+ class ApiProcessor (private val host : String ) {
2122 private val client = OkHttpClient ()
2223
2324 private companion object {
@@ -34,8 +35,9 @@ class ApiProcessor(private val host: String, private val context: Context) {
3435 ).type
3536
3637 const val AUTH = " /customer/login"
37- const val ALL_SERIES = " /comics/series"
38- const val ISSUES_OF_SERIES = " /comics/series/%s/issues"
38+ const val SERIES = " /series"
39+ const val ISSUE = " /issue"
40+ const val ISSUES = " /issues"
3941 }
4042
4143 fun login (username : String , password : String ): Result <Token > {
@@ -53,27 +55,19 @@ class ApiProcessor(private val host: String, private val context: Context) {
5355 fun getSeries (token : String ): Result <List <Series >> {
5456 val request = Request .Builder ()
5557 .get()
56- .url(" $host$ALL_SERIES " )
58+ .url(" $host$SERIES " )
5759 .addAuthorizationHeader(token)
5860 .build()
5961
6062 return client.newCall(request).execute().toResult(SERIES_RESULT_TYPE )
6163 }
6264
63- fun buildImageRequest (
64- issueId : Long ,
65- token : String ,
66- page : Int = 0,
67- size : String = "origin"
68- ): ImageRequest {
69- return ImageRequest .Builder (context = context)
70- .data(" $host /file/$issueId /$page ?size=$size " )
71- .addHeader(" Authorization" , " Bearer $token " )
72- .build()
65+ fun buildImageUrl (url : String ): String {
66+ return host + url
7367 }
7468
7569 fun getIssues (seriesId : Long , token : String ): Result <List <Issue >> {
76- val path = ISSUES_OF_SERIES .format( seriesId)
70+ val path = " $SERIES / $ seriesId$ISSUES "
7771 val request = Request .Builder ()
7872 .get()
7973 .url(" $host$path " )
@@ -83,6 +77,29 @@ class ApiProcessor(private val host: String, private val context: Context) {
8377 return client.newCall(request).execute().toResult(ISSUES_RESULT_TYPE )
8478 }
8579
80+ fun updateProgress (issueId : Long , currentPage : Int , token : String ): Result <Boolean > {
81+ val progressUpdate = ReadingProgressUpdate (
82+ currentPage = currentPage,
83+ updateTime = ZonedDateTime .now(ZoneId .of(" UTC" )).toEpochSecond()
84+ )
85+
86+ val body = Gson ().toJson(progressUpdate).toRequestBody(CONTENT_TYPE )
87+
88+ val path = " $ISSUE /$issueId "
89+ val request = Request .Builder ()
90+ .put(body)
91+ .url(host + path)
92+ .addAuthorizationHeader(token)
93+ .build()
94+
95+ val response = client.newCall(request).execute()
96+ if (response.code != 200 ) {
97+ return Result .failure(response.code)
98+ }
99+
100+ return Result (true )
101+ }
102+
86103 private fun Request.Builder.addAuthorizationHeader (token : String ): Request .Builder {
87104 return this .addHeader(" Authorization" , " Bearer $token " )
88105 }
0 commit comments