瀏覽代碼

Minor changes

len 8 年之前
父節點
當前提交
82f4e3157a
共有 1 個文件被更改,包括 34 次插入37 次删除
  1. 34 37
      app/src/main/java/eu/kanade/tachiyomi/data/track/myanimelist/MyanimelistApi.kt

+ 34 - 37
app/src/main/java/eu/kanade/tachiyomi/data/track/myanimelist/MyanimelistApi.kt

@@ -6,6 +6,7 @@ import eu.kanade.tachiyomi.data.database.models.Track
 import eu.kanade.tachiyomi.data.network.GET
 import eu.kanade.tachiyomi.data.network.POST
 import eu.kanade.tachiyomi.data.network.asObservable
+import eu.kanade.tachiyomi.data.network.asObservableSuccess
 import eu.kanade.tachiyomi.data.track.TrackManager
 import eu.kanade.tachiyomi.util.selectInt
 import eu.kanade.tachiyomi.util.selectText
@@ -22,28 +23,16 @@ class MyanimelistApi(private val client: OkHttpClient, username: String, passwor
     fun addLibManga(track: Track): Observable<Track> {
         return Observable.defer {
             client.newCall(POST(getAddUrl(track), headers, getMangaPostPayload(track)))
-                    .asObservable()
-                    .map { response ->
-                        response.body().close()
-                        if (!response.isSuccessful) {
-                            throw Exception("Could not add manga")
-                        }
-                        track
-                    }
+                    .asObservableSuccess()
+                    .map { track }
         }
     }
 
     fun updateLibManga(track: Track): Observable<Track> {
         return Observable.defer {
             client.newCall(POST(getUpdateUrl(track), headers, getMangaPostPayload(track)))
-                    .asObservable()
-                    .map { response ->
-                        response.body().close()
-                        if (!response.isSuccessful) {
-                            throw Exception("Could not update manga")
-                        }
-                        track
-                    }
+                    .asObservableSuccess()
+                    .map { track }
         }
     }
 
@@ -111,37 +100,45 @@ class MyanimelistApi(private val client: OkHttpClient, username: String, passwor
     }
 
     private fun getMangaPostPayload(track: Track): RequestBody {
-        val xml = Xml.newSerializer()
+        val data = xml {
+            element(ENTRY_TAG) {
+                if (track.last_chapter_read != 0) {
+                    text(CHAPTER_TAG, track.last_chapter_read.toString())
+                }
+                text(STATUS_TAG, track.status.toString())
+                text(SCORE_TAG, track.score.toString())
+            }
+        }
+
+        return FormBody.Builder()
+                .add("data", data)
+                .build()
+    }
+
+    private inline fun xml(block: XmlSerializer.() -> Unit): String {
+        val x = Xml.newSerializer()
         val writer = StringWriter()
 
-        with(xml) {
+        with(x) {
             setOutput(writer)
             startDocument("UTF-8", false)
-            startTag("", ENTRY_TAG)
-
-            // Last chapter read
-            if (track.last_chapter_read != 0) {
-                inTag(CHAPTER_TAG, track.last_chapter_read.toString())
-            }
-            // Manga status in the list
-            inTag(STATUS_TAG, track.status.toString())
-
-            // Manga score
-            inTag(SCORE_TAG, track.score.toString())
-
-            endTag("", ENTRY_TAG)
+            block()
             endDocument()
         }
 
-        val form = FormBody.Builder()
-        form.add("data", writer.toString())
-        return form.build()
+        return writer.toString()
+    }
+
+    private inline fun XmlSerializer.element(tag: String, block: XmlSerializer.() -> Unit) {
+        startTag("", tag)
+        block()
+        endTag("", tag)
     }
 
-    fun XmlSerializer.inTag(tag: String, body: String, namespace: String = "") {
-        startTag(namespace, tag)
+    private fun XmlSerializer.text(tag: String, body: String) {
+        startTag("", tag)
         text(body)
-        endTag(namespace, tag)
+        endTag("", tag)
     }
 
     fun getLoginUrl() = Uri.parse(baseUrl).buildUpon()