+
+ override fun loadData(priority: Priority, callback: DataFetcher.DataCallback<in InputStream>) {
+ cookie.fbRequest(fail = { callback.fail("Invalid auth") }) {
+ if (cancelled) return@fbRequest callback.fail("Cancelled")
+ val url = getFullSizedImage(fbid).invoke() ?: return@fbRequest callback.fail("Null url")
+ if (cancelled) return@fbRequest callback.fail("Cancelled")
+ urlCall = Request.Builder().url(url).get().call()
+
+ inputStream = try {
+ urlCall?.execute()?.body()?.byteStream()
+ } catch (e: IOException) {
+ null
+ }
+
+ callback.onDataReady(inputStream)
+ }
+ }
+
+ override fun cleanup() {
+ try {
+ inputStream?.close()
+ } catch (e: IOException) {
+ } finally {
+ inputStream = null
+ }
+ }
+
+ override fun cancel() {
+ cancelled = true
+ urlCall?.cancel()
+ urlCall = null
+ cleanup()
+ }
+}
@@ -0,0 +1,27 @@
+package com.pitchedapps.frost.facebook.requests
+
+import com.pitchedapps.frost.facebook.FB_URL_BASE
+
+/**
+ * Created by Allan Wang on 29/12/17.
+ */
+fun RequestAuth.markNotificationRead(notifId: Long): FrostRequest<Boolean> {
+
+ val body = listOf(
+ "click_type" to "notification_click",
+ "id" to notifId,
+ "target_id" to "null",
+ "fb_dtsg" to fb_dtsg,
+ "__user" to userId
+ ).withEmptyData("m_sess", "__dyn", "__req", "__ajax__")
+
+ return frostRequest(::executeForNoError) {
+ url("${FB_URL_BASE}a/jewel_notifications_log.php")
+ post(body.toForm())
+ }
+}
+
+fun RequestAuth.markNotificationsRead(vararg notifId: Long) =
+ notifId.toTypedArray().zip<Long, Boolean, Boolean>(
+ { it.all { it } },
+ { markNotificationRead(it).invoke() })
\ No newline at end of file
@@ -9,9 +9,9 @@ import android.content.Context
import android.content.Intent
import android.os.BaseBundle
import android.os.PersistableBundle
-import com.pitchedapps.frost.facebook.RequestAuth
-import com.pitchedapps.frost.facebook.fbRequest
-import com.pitchedapps.frost.facebook.markNotificationRead
+import com.pitchedapps.frost.facebook.requests.RequestAuth
+import com.pitchedapps.frost.facebook.requests.fbRequest
+import com.pitchedapps.frost.facebook.requests.markNotificationRead
import com.pitchedapps.frost.utils.EnumBundle
import com.pitchedapps.frost.utils.EnumBundleCompanion
import com.pitchedapps.frost.utils.EnumCompanion
@@ -1,6 +1,6 @@
package com.pitchedapps.frost
-import com.pitchedapps.frost.facebook.zip
+import com.pitchedapps.frost.facebook.requests.zip
import com.pitchedapps.frost.injectors.CssHider
import org.junit.Test
import kotlin.test.assertTrue
@@ -41,6 +41,12 @@ class FbRegexTest {
assertEquals(id, FB_MESSAGE_NOTIF_ID_MATCHER.find(data)[1]?.toLong(), "thread_fbid mismatch")
val userData = "threadlist_row_other_user_fbid_${id}thread_fbid_"
assertEquals(id, FB_MESSAGE_NOTIF_ID_MATCHER.find(userData)[1]?.toLong(), "user_fbid mismatch")
+ }
+ @Test
+ fun jsonUrlRegex() {
+ val url = "https://www.hello.world"
+ val data = "\"uri\":\"$url\"}"
+ assertEquals(url, FB_JSON_URL_MATCHER.find(data)[1])
}
}
\ No newline at end of file
@@ -1,5 +1,8 @@
package com.pitchedapps.frost.facebook
+import com.pitchedapps.frost.facebook.requests.getAuth
+import com.pitchedapps.frost.facebook.requests.getFullSizedImage
+import com.pitchedapps.frost.facebook.requests.markNotificationRead
import com.pitchedapps.frost.internal.AUTH
import com.pitchedapps.frost.internal.COOKIE
import com.pitchedapps.frost.internal.USER_ID
@@ -48,4 +51,12 @@ class FbRequestTest {
AUTH.markNotificationRead(notifId).call.assertNoError()
}
+ @Test
+ fun fullSizeImage() {
+ val fbid = 10155966932992838L // google's current cover photo
+ val url = AUTH.getFullSizedImage(fbid).invoke()
+ println(url)
+ assertTrue(url?.startsWith("https://scontent") == true)
+ }
+
}
\ No newline at end of file
@@ -1,6 +1,8 @@
package com.pitchedapps.frost.internal
import com.pitchedapps.frost.facebook.*
+import com.pitchedapps.frost.facebook.requests.RequestAuth
+import com.pitchedapps.frost.facebook.requests.getAuth
import com.pitchedapps.frost.utils.frostJsoup
import org.junit.Assume
import java.io.File