77
88package cn.yurn.yutori.module.satori.adapter
99
10- import cn.yurn.yutori.ActionService
10+ import cn.yurn.yutori.AdapterActionService
11+ import cn.yurn.yutori.Channel
1112import cn.yurn.yutori.FormData
12- import cn.yurn.yutori.SatoriProperties
13+ import cn.yurn.yutori.Guild
14+ import cn.yurn.yutori.GuildMember
15+ import cn.yurn.yutori.GuildRole
16+ import cn.yurn.yutori.Message
17+ import cn.yurn.yutori.User
18+ import cn.yurn.yutori.Yutori
1319import cn.yurn.yutori.message.element.MessageElement
14- import cn.yurn.yutori.module.satori.BidiPagingListSerializer
15- import cn.yurn.yutori.module.satori.ChannelSerializer
16- import cn.yurn.yutori.module.satori.GuildMemberSerializer
17- import cn.yurn.yutori.module.satori.GuildRoleSerializer
18- import cn.yurn.yutori.module.satori.GuildSerializer
19- import cn.yurn.yutori.module.satori.LoginSerializer
20- import cn.yurn.yutori.module.satori.MessageSerializer
21- import cn.yurn.yutori.module.satori.PagingListSerializer
22- import cn.yurn.yutori.module.satori.UserSerializer
20+ import cn.yurn.yutori.module.satori.SatoriAdapterProperties
21+ import cn.yurn.yutori.module.satori.SerializableBidiPagingList
22+ import cn.yurn.yutori.module.satori.SerializableChannel
23+ import cn.yurn.yutori.module.satori.SerializableGuild
24+ import cn.yurn.yutori.module.satori.SerializableGuildMember
25+ import cn.yurn.yutori.module.satori.SerializableGuildRole
26+ import cn.yurn.yutori.module.satori.SerializableLogin
27+ import cn.yurn.yutori.module.satori.SerializableMessage
28+ import cn.yurn.yutori.module.satori.SerializablePagingList
29+ import cn.yurn.yutori.module.satori.SerializableUser
2330import cn.yurn.yutori.module.satori.serialize
2431import co.touchlab.kermit.Logger
2532import io.ktor.client.HttpClient
@@ -40,10 +47,12 @@ import io.ktor.http.contentType
4047import io.ktor.http.headers
4148import io.ktor.serialization.kotlinx.json.json
4249import io.ktor.utils.io.core.use
43- import kotlinx.serialization.builtins.ListSerializer
4450import kotlinx.serialization.json.Json
4551
46- class SatoriActionService (val properties : SatoriProperties , val name : String ) : ActionService {
52+ class SatoriActionService (
53+ val yutori : Yutori ,
54+ val properties : SatoriAdapterProperties
55+ ) : AdapterActionService {
4756 override suspend fun send (
4857 resource : String ,
4958 method : String ,
@@ -92,42 +101,42 @@ class SatoriActionService(val properties: SatoriProperties, val name: String) :
92101 )
93102 }
94103 })
95- Logger .d(name) {
104+ Logger .d(yutori. name) {
96105 """
97106 Satori Action Request: url: ${this .url} ,
98107 headers: ${this .headers.build()} ,
99108 body: ${this .body}
100109 """ .trimIndent()
101110 }
102111 }
103- Logger .d(name) { " Satori Action Response: $response " }
112+ Logger .d(yutori. name) { " Satori Action Response: $response " }
104113 val body = response.bodyAsText()
105114 when (resource) {
106115 " channel" -> when (method) {
107- " get" -> Json .decodeFromString( ChannelSerializer , body)
108- " list" -> Json .decodeFromString( PagingListSerializer ( ChannelSerializer ), body)
109- " create" -> Json .decodeFromString( ChannelSerializer , body)
116+ " get" -> Json .decodeFromString< SerializableChannel >( body).toUniverse(yutori )
117+ " list" -> Json .decodeFromString< SerializablePagingList < SerializableChannel , Channel >>( body).toUniverse(yutori )
118+ " create" -> Json .decodeFromString< SerializableChannel >( body).toUniverse(yutori )
110119 " update" -> Unit
111120 " delete" -> Unit
112121 " mute" -> Unit
113122 else -> throw UnsupportedOperationException (" Unsupported action: $resource .$method " )
114123 }
115124
116125 " user.channel" -> when (method) {
117- " create" -> Json .decodeFromString( ChannelSerializer , body)
126+ " create" -> Json .decodeFromString< SerializableChannel >( body).toUniverse(yutori )
118127 else -> throw UnsupportedOperationException (" Unsupported action: $resource .$method " )
119128 }
120129
121130 " guild" -> when (method) {
122- " get" -> Json .decodeFromString( GuildSerializer , body)
123- " list" -> Json .decodeFromString( PagingListSerializer ( GuildSerializer ), body)
131+ " get" -> Json .decodeFromString< SerializableGuild >( body).toUniverse(yutori )
132+ " list" -> Json .decodeFromString< SerializablePagingList < SerializableGuild , Guild >>( body).toUniverse(yutori )
124133 " approve" -> Unit
125134 else -> throw UnsupportedOperationException (" Unsupported action: $resource .$method " )
126135 }
127136
128137 " guild.member" -> when (method) {
129- " get" -> Json .decodeFromString( GuildMemberSerializer , body)
130- " list" -> Json .decodeFromString( PagingListSerializer ( GuildMemberSerializer ), body)
138+ " get" -> Json .decodeFromString< SerializableGuildMember >( body).toUniverse(yutori )
139+ " list" -> Json .decodeFromString< SerializablePagingList < SerializableGuildMember , GuildMember >>( body).toUniverse(yutori )
131140 " kick" -> Unit
132141 " mute" -> Unit
133142 " approve" -> Unit
@@ -141,42 +150,42 @@ class SatoriActionService(val properties: SatoriProperties, val name: String) :
141150 }
142151
143152 " guild.role" -> when (method) {
144- " list" -> Json .decodeFromString( PagingListSerializer ( GuildRoleSerializer ), body)
145- " create" -> Json .decodeFromString( GuildRoleSerializer , body)
153+ " list" -> Json .decodeFromString< SerializablePagingList < SerializableGuildRole , GuildRole >>( body).toUniverse(yutori )
154+ " create" -> Json .decodeFromString< SerializableGuildRole >( body).toUniverse(yutori )
146155 " update" -> Unit
147156 " delete" -> Unit
148157 else -> throw UnsupportedOperationException (" Unsupported action: $resource .$method " )
149158 }
150159
151160 " login" -> when (method) {
152- " get" -> Json .decodeFromString( LoginSerializer , body)
161+ " get" -> Json .decodeFromString< SerializableLogin >( body).toUniverse(yutori )
153162 else -> throw UnsupportedOperationException (" Unsupported action: $resource .$method " )
154163 }
155164
156165 " message" -> when (method) {
157- " create" -> Json .decodeFromString( ListSerializer ( MessageSerializer ), body)
158- " get" -> Json .decodeFromString( MessageSerializer , body)
166+ " create" -> Json .decodeFromString< List < SerializableMessage >>(body).map { it.toUniverse(yutori) }
167+ " get" -> Json .decodeFromString< SerializableMessage >( body).toUniverse(yutori )
159168 " delete" -> Unit
160169 " update" -> Unit
161- " list" -> Json .decodeFromString( BidiPagingListSerializer ( MessageSerializer ), body)
170+ " list" -> Json .decodeFromString< SerializableBidiPagingList < SerializableMessage , Message >>( body).toUniverse(yutori )
162171 else -> throw UnsupportedOperationException (" Unsupported action: $resource .$method " )
163172 }
164173
165174 " reaction" -> when (method) {
166175 " create" -> Unit
167176 " delete" -> Unit
168177 " clear" -> Unit
169- " list" -> Json .decodeFromString( PagingListSerializer ( UserSerializer ), body)
178+ " list" -> Json .decodeFromString< SerializablePagingList < SerializableUser , User >>( body).toUniverse(yutori )
170179 else -> throw UnsupportedOperationException (" Unsupported action: $resource .$method " )
171180 }
172181
173182 " user" -> when (method) {
174- " get" -> Json .decodeFromString( UserSerializer , body)
183+ " get" -> Json .decodeFromString< SerializableUser >( body).toUniverse(yutori )
175184 else -> throw UnsupportedOperationException (" Unsupported action: $resource .$method " )
176185 }
177186
178187 " friend" -> when (method) {
179- " list" -> Json .decodeFromString( PagingListSerializer ( UserSerializer ), body)
188+ " list" -> Json .decodeFromString< SerializablePagingList < SerializableUser , User >>( body).toUniverse(yutori )
180189 " approve" -> Unit
181190 else -> throw UnsupportedOperationException (" Unsupported action: $resource .$method " )
182191 }
@@ -224,14 +233,14 @@ class SatoriActionService(val properties: SatoriProperties, val name: String) :
224233 })
225234 }
226235 }
227- Logger .d(name) {
236+ Logger .d(yutori. name) {
228237 """
229238 Satori Action Request: url: $url ,
230239 body: $formData
231240 """ .trimIndent()
232241 }
233242 val response = client.submitFormWithBinaryData(url, formData)
234- Logger .d(name) { " Satori Action Response: $response " }
243+ Logger .d(yutori. name) { " Satori Action Response: $response " }
235244 response.body()
236245 }
237246}
0 commit comments