diff options
author | Allan Wang <me@allanwang.ca> | 2018-12-26 18:35:01 -0500 |
---|---|---|
committer | Allan Wang <me@allanwang.ca> | 2018-12-26 18:35:01 -0500 |
commit | bddb58f035b9190732f22db4b2cc1464b68fff17 (patch) | |
tree | f650731e97bd94d5dd2725b13d657059eb9c4ee1 /app/src/main/kotlin/com/pitchedapps/frost/facebook/requests/Images.kt | |
parent | 3a3096be58bacd9408c10ef5d8add6c32204d4e9 (diff) | |
download | frost-bddb58f035b9190732f22db4b2cc1464b68fff17.tar.gz frost-bddb58f035b9190732f22db4b2cc1464b68fff17.tar.bz2 frost-bddb58f035b9190732f22db4b2cc1464b68fff17.zip |
Merge new auth flyweight and update hd image fetcher
Diffstat (limited to 'app/src/main/kotlin/com/pitchedapps/frost/facebook/requests/Images.kt')
-rw-r--r-- | app/src/main/kotlin/com/pitchedapps/frost/facebook/requests/Images.kt | 30 |
1 files changed, 16 insertions, 14 deletions
diff --git a/app/src/main/kotlin/com/pitchedapps/frost/facebook/requests/Images.kt b/app/src/main/kotlin/com/pitchedapps/frost/facebook/requests/Images.kt index e0ccea81..4afd8e8a 100644 --- a/app/src/main/kotlin/com/pitchedapps/frost/facebook/requests/Images.kt +++ b/app/src/main/kotlin/com/pitchedapps/frost/facebook/requests/Images.kt @@ -33,8 +33,9 @@ import com.pitchedapps.frost.facebook.FB_URL_BASE import com.pitchedapps.frost.facebook.formattedFbUrl import com.pitchedapps.frost.facebook.get import io.reactivex.Maybe +import kotlinx.coroutines.runBlocking +import kotlinx.coroutines.withTimeout import okhttp3.Call -import okhttp3.Request import java.io.IOException import java.io.InputStream @@ -123,21 +124,22 @@ class HdImageFetcher(private val model: HdImageMaybe) : DataFetcher<InputStream> override fun loadData(priority: Priority, callback: DataFetcher.DataCallback<in InputStream>) { if (!model.isValid) return callback.fail("Model is invalid") - model.cookie.fbRequest(fail = { callback.fail("Invalid auth") }) { - if (cancelled) return@fbRequest callback.fail("Cancelled") - val url = getFullSizedImage(model.id).invoke() - ?: return@fbRequest callback.fail("Null url") - if (cancelled) return@fbRequest callback.fail("Cancelled") - if (!url.contains("png") && !url.contains("jpg")) return@fbRequest callback.fail("Invalid format") - urlCall = Request.Builder().url(url).get().call() - - inputStream = try { - urlCall?.execute()?.body()?.byteStream() - } catch (e: IOException) { - null + val result: Result<InputStream?> = runCatching { + runBlocking { + withTimeout(20000L) { + val auth = fbAuth.fetch(model.cookie) + if (cancelled) throw RuntimeException("Cancelled") + val url = auth.getFullSizedImage(model.id).invoke() ?: throw RuntimeException("Null url") + if (cancelled) throw RuntimeException("Cancelled") + if (!url.contains("png") && !url.contains("jpg")) throw RuntimeException("Invalid format") + urlCall?.execute()?.body()?.byteStream() + } } - callback.onDataReady(inputStream) } + if (result.isSuccess) + callback.onDataReady(result.getOrNull()) + else + callback.onLoadFailed(result.exceptionOrNull() as? Exception ?: RuntimeException("Failed")) } override fun cleanup() { |