Skip to content

Commit 6d3d3ee

Browse files
committed
Avatar fix
1 parent b2eecda commit 6d3d3ee

1 file changed

Lines changed: 35 additions & 6 deletions

File tree

opencloudApp/src/main/java/eu/opencloud/android/presentation/thumbnails/ThumbnailsRequester.kt

Lines changed: 35 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -82,7 +82,10 @@ object ThumbnailsRequester : KoinComponent {
8282

8383
fun getAvatarUri(account: Account): String {
8484
val accountManager = AccountManager.get(appContext)
85-
val baseUrl = accountManager.getUserData(account, eu.opencloud.android.lib.common.accounts.AccountUtils.Constants.KEY_OC_BASE_URL)
85+
val baseUrl =
86+
accountManager.getUserData(account, eu.opencloud.android.lib.common.accounts.AccountUtils.Constants.KEY_OC_BASE_URL)
87+
?.trimEnd('/')
88+
.orEmpty()
8689
val username = AccountUtils.getUsernameOfAccount(account.name)
8790
return "$baseUrl/index.php/avatar/${android.net.Uri.encode(username)}/384"
8891
}
@@ -122,7 +125,7 @@ object ThumbnailsRequester : KoinComponent {
122125

123126
ImageLoader(appContext).newBuilder().okHttpClient(
124127
okHttpClient = openCloudClient.okHttpClient.newBuilder()
125-
.addNetworkInterceptor(coilRequestHeaderInterceptor).build()
128+
.addInterceptor(coilRequestHeaderInterceptor).build()
126129
).logger(DebugLogger())
127130
.memoryCache {
128131
getSharedMemoryCache()
@@ -148,9 +151,26 @@ object ThumbnailsRequester : KoinComponent {
148151
OC_X_REQUEST_ID to RandomUtils.generateRandomUUID(),
149152
)
150153

151-
val request = chain.request().newBuilder()
152-
requestHeaders.toHeaders().forEach { request.addHeader(it.first, it.second) }
153-
val response = chain.proceed(request.build())
154+
val requestBuilder = chain.request().newBuilder()
155+
requestHeaders.toHeaders().forEach { requestBuilder.addHeader(it.first, it.second) }
156+
val requestWithHeaders = requestBuilder.build()
157+
158+
var response = chain.proceed(requestWithHeaders)
159+
160+
val originalUrl = requestWithHeaders.url.toString()
161+
if (
162+
originalUrl.contains("/index.php/avatar/") &&
163+
(!response.isSuccessful || !isProbablyAnImage(response))
164+
) {
165+
response.close()
166+
167+
val baseUrl = originalUrl.substringBefore("/index.php/avatar/").trimEnd('/')
168+
val graphUrl = "$baseUrl/graph/v1.0/me/photo/\$value"
169+
170+
val graphRequest = requestWithHeaders.newBuilder().url(graphUrl).build()
171+
response = chain.proceed(graphRequest)
172+
}
173+
154174
var builder = response.newBuilder()
155175
var changed = false
156176

@@ -161,7 +181,11 @@ object ThumbnailsRequester : KoinComponent {
161181
changed = true
162182
}
163183

164-
if (chain.request().url.toString().contains("/avatar/") && response.header("Content-Type").isNullOrEmpty()) {
184+
val finalRequestUrl = response.request.url.toString()
185+
if (
186+
(finalRequestUrl.contains("/avatar/") || finalRequestUrl.contains("/photo/\$value")) &&
187+
response.header("Content-Type").isNullOrEmpty()
188+
) {
165189
builder.addHeader("Content-Type", "image/png")
166190
changed = true
167191
}
@@ -171,5 +195,10 @@ object ThumbnailsRequester : KoinComponent {
171195
}
172196
return response
173197
}
198+
199+
private fun isProbablyAnImage(response: Response): Boolean {
200+
val contentType = response.header("Content-Type")
201+
return contentType.isNullOrEmpty() || contentType.startsWith("image")
202+
}
174203
}
175204
}

0 commit comments

Comments
 (0)