@@ -23,6 +23,8 @@ import fr.free.nrw.commons.utils.ConfigUtils.isBetaFlavour
23
23
import fr.free.nrw.commons.wikidata.model.GetWikidataEditCountResponse
24
24
import io.reactivex.Observable
25
25
import io.reactivex.Single
26
+ import kotlinx.coroutines.Dispatchers
27
+ import kotlinx.coroutines.withContext
26
28
import okhttp3.HttpUrl
27
29
import okhttp3.HttpUrl.Companion.toHttpUrlOrNull
28
30
import okhttp3.OkHttpClient
@@ -53,8 +55,10 @@ class OkHttpJsonApiClient @Inject constructor(
53
55
): Observable <LeaderboardResponse > {
54
56
val fetchLeaderboardUrlTemplate =
55
57
wikiMediaToolforgeUrl.toString() + LeaderboardConstants .LEADERBOARD_END_POINT
56
- val url = String .format(Locale .ENGLISH ,
57
- fetchLeaderboardUrlTemplate, userName, duration, category, limit, offset)
58
+ val url = String .format(
59
+ Locale .ENGLISH ,
60
+ fetchLeaderboardUrlTemplate, userName, duration, category, limit, offset
61
+ )
58
62
val urlBuilder: HttpUrl .Builder = url.toHttpUrlOrNull()!! .newBuilder()
59
63
.addQueryParameter(" user" , userName)
60
64
.addQueryParameter(" duration" , duration)
@@ -83,66 +87,72 @@ class OkHttpJsonApiClient @Inject constructor(
83
87
})
84
88
}
85
89
86
- fun getFileUsagesOnCommons (
90
+ suspend fun getFileUsagesOnCommons (
87
91
fileName : String? ,
88
92
pageSize : Int
89
- ): Observable <FileUsagesResponse ?> {
90
- val urlBuilder = BuildConfig .FILE_USAGES_BASE_URL .toHttpUrlOrNull()!! .newBuilder()
91
- urlBuilder.addQueryParameter(" prop" , " fileusage" )
92
- urlBuilder.addQueryParameter(" titles" , fileName)
93
- urlBuilder.addQueryParameter(" fulimit" , pageSize.toString())
93
+ ): FileUsagesResponse ? {
94
+ return withContext(Dispatchers .IO ) {
94
95
95
- Timber .i(" Url %s" , urlBuilder.toString())
96
- val request: Request = Request .Builder ()
97
- .url(urlBuilder.toString())
98
- .build()
96
+ return @withContext try {
99
97
100
- return Observable .fromCallable({
101
- val response: Response = okHttpClient.newCall(request).execute()
102
- if (response.body != null && response.isSuccessful) {
103
- val json: String = response.body!! .string()
104
- try {
105
- return @fromCallable gson.fromJson<FileUsagesResponse >(
98
+ val urlBuilder = BuildConfig .FILE_USAGES_BASE_URL .toHttpUrlOrNull()!! .newBuilder()
99
+ urlBuilder.addQueryParameter(" prop" , " fileusage" )
100
+ urlBuilder.addQueryParameter(" titles" , fileName)
101
+ urlBuilder.addQueryParameter(" fulimit" , pageSize.toString())
102
+
103
+ Timber .i(" Url %s" , urlBuilder.toString())
104
+ val request: Request = Request .Builder ()
105
+ .url(urlBuilder.toString())
106
+ .build()
107
+
108
+ val response: Response = okHttpClient.newCall(request).execute()
109
+ if (response.body != null && response.isSuccessful) {
110
+ val json: String = response.body!! .string()
111
+ gson.fromJson<FileUsagesResponse >(
106
112
json,
107
113
FileUsagesResponse ::class .java
108
114
)
109
- } catch (e: java.lang.Exception ) {
110
- return @fromCallable null
111
- }
115
+ } else null
116
+ } catch (e: Exception ) {
117
+ Timber .e(e)
118
+ null
112
119
}
113
- null
114
- })
120
+ }
115
121
}
116
122
117
- fun getGlobalFileUsages (
123
+ suspend fun getGlobalFileUsages (
118
124
fileName : String? ,
119
125
pageSize : Int
120
- ): Observable <GlobalFileUsagesResponse ?> {
121
- val urlBuilder = BuildConfig .FILE_USAGES_BASE_URL .toHttpUrlOrNull()!! .newBuilder()
122
- urlBuilder.addQueryParameter(" prop" , " globalusage" )
123
- urlBuilder.addQueryParameter(" titles" , fileName)
124
- urlBuilder.addQueryParameter(" gulimit" , pageSize.toString())
126
+ ): GlobalFileUsagesResponse ? {
125
127
126
- Timber .i(" Url %s" , urlBuilder.toString())
127
- val request: Request = Request .Builder ()
128
- .url(urlBuilder.toString())
129
- .build()
128
+ return withContext(Dispatchers .IO ) {
130
129
131
- return Observable .fromCallable({
132
- val response: Response = okHttpClient.newCall(request).execute()
133
- if (response.body != null && response.isSuccessful) {
134
- val json: String = response.body!! .string()
135
- try {
136
- return @fromCallable gson.fromJson<GlobalFileUsagesResponse >(
130
+ return @withContext try {
131
+
132
+ val urlBuilder = BuildConfig .FILE_USAGES_BASE_URL .toHttpUrlOrNull()!! .newBuilder()
133
+ urlBuilder.addQueryParameter(" prop" , " globalusage" )
134
+ urlBuilder.addQueryParameter(" titles" , fileName)
135
+ urlBuilder.addQueryParameter(" gulimit" , pageSize.toString())
136
+
137
+ Timber .i(" Url %s" , urlBuilder.toString())
138
+ val request: Request = Request .Builder ()
139
+ .url(urlBuilder.toString())
140
+ .build()
141
+
142
+ val response: Response = okHttpClient.newCall(request).execute()
143
+ if (response.body != null && response.isSuccessful) {
144
+ val json: String = response.body!! .string()
145
+
146
+ gson.fromJson<GlobalFileUsagesResponse >(
137
147
json,
138
148
GlobalFileUsagesResponse ::class .java
139
149
)
140
- } catch (e: java.lang.Exception ) {
141
- return @fromCallable null
142
- }
150
+ } else null
151
+ } catch (e: Exception ) {
152
+ Timber .e(e)
153
+ null
143
154
}
144
- null
145
- })
155
+ }
146
156
}
147
157
148
158
fun setAvatar (username : String? , avatar : String? ): Single <UpdateAvatarResponse ?> {
0 commit comments