@@ -8,23 +8,18 @@ import org.json.JSONObject
88 * Created by @yzzzd on 4/22/18.
99 */
1010
11- class ApiObserver (
12- block : suspend () -> String ,
13- dispatcher : CoroutineDispatcher ,
14- toast : Boolean = false ,
15- responseListener : ResponseListener
16- ) {
11+ class ApiObserver (block : suspend () -> String , dispatcher : CoroutineDispatcher , toast : Boolean = false , responseListener : ResponseListener ) {
1712
18- constructor (
19- block: suspend () -> String ,
20- toast: Boolean = false ,
21- responseListener: ResponseListener
22- ) : this (block, Dispatchers .IO , toast, responseListener)
13+ constructor (block: suspend () -> String , toast: Boolean = false , responseListener: ResponseListener ) : this (block, Dispatchers .IO , toast, responseListener)
2314
2415 init {
2516 val exception = CoroutineExceptionHandler { coroutineContext, throwable ->
2617 val response = ApiResponse (isToast = toast).responseError(throwable)
27- responseListener.onError(response)
18+ if (response.isTokenExpired) {
19+ responseListener.onExpired(response)
20+ } else {
21+ responseListener.onError(response)
22+ }
2823 }
2924
3025 CoroutineScope (exception + dispatcher).launch {
@@ -40,37 +35,34 @@ class ApiObserver(
4035 fun onError (response : ApiResponse ) {
4136 EventBus .getDefault().post(response)
4237 }
43- }
44- }
4538
46- /* *
47- * @param block suspend function
48- * @param dispatcher Default [Dispatchers.IO]
49- * @param toast Default false
50- * @param listener Anonymus class to handle response
51- */
52- suspend fun apiObserver (
53- block : suspend () -> String ,
54- dispatcher : CoroutineDispatcher = Dispatchers .IO ,
55- toast : Boolean = false,
56- listener : ResponseListener
57- ) {
58- try {
59- val responseJSON = withContext(dispatcher) {
60- val response = block.invoke()
61- JSONObject (response)
39+ fun onExpired (response : ApiResponse ) {
40+ EventBus .getDefault().post(response)
6241 }
63- listener.onSuccess(responseJSON)
64- } catch (t: Throwable ) {
65- val response = ApiResponse (isToast = toast).responseError(t)
66- listener.onError(response)
6742 }
68- }
69-
70- interface ResponseListener {
71- suspend fun onSuccess (response : JSONObject )
7243
73- suspend fun onError (response : ApiResponse ) {
74- EventBus .getDefault().post(response)
44+ companion object {
45+ /* *
46+ * @param block suspend function
47+ * @param dispatcher Default [Dispatchers.IO]
48+ * @param toast Default false
49+ * @param listener Anonymous class to handle response
50+ */
51+ suspend fun apiObserver (block : suspend () -> String , dispatcher : CoroutineDispatcher = Dispatchers .IO , toast : Boolean = false, listener : ResponseListener ) {
52+ try {
53+ val responseJSON = withContext(dispatcher) {
54+ val response = block.invoke()
55+ JSONObject (response)
56+ }
57+ listener.onSuccess(responseJSON)
58+ } catch (t: Throwable ) {
59+ val response = ApiResponse (isToast = toast).responseError(t)
60+ if (response.isTokenExpired) {
61+ listener.onExpired(response)
62+ } else {
63+ listener.onError(response)
64+ }
65+ }
66+ }
7567 }
7668}
0 commit comments