diff options
Diffstat (limited to 'app/src/main/kotlin/com/pitchedapps/frost/facebook/FbCookie.kt')
-rw-r--r-- | app/src/main/kotlin/com/pitchedapps/frost/facebook/FbCookie.kt | 53 |
1 files changed, 38 insertions, 15 deletions
diff --git a/app/src/main/kotlin/com/pitchedapps/frost/facebook/FbCookie.kt b/app/src/main/kotlin/com/pitchedapps/frost/facebook/FbCookie.kt index 2146ae26..2d46f36a 100644 --- a/app/src/main/kotlin/com/pitchedapps/frost/facebook/FbCookie.kt +++ b/app/src/main/kotlin/com/pitchedapps/frost/facebook/FbCookie.kt @@ -7,25 +7,46 @@ import com.pitchedapps.frost.dbflow.removeCookie import com.pitchedapps.frost.dbflow.saveFbCookie import com.pitchedapps.frost.utils.L import com.pitchedapps.frost.utils.Prefs +import io.reactivex.Observable +import io.reactivex.android.schedulers.AndroidSchedulers +import io.reactivex.subjects.SingleSubject /** * Created by Allan Wang on 2017-05-30. */ object FbCookie { - var webCookie: String? + val webCookie: String? get() = CookieManager.getInstance().getCookie(FB_URL_BASE) - set(value) { - CookieManager.getInstance().setCookie(FB_URL_BASE, value) - CookieManager.getInstance().flush() + + fun setWebCookie(cookie: String?, callback: (() -> Unit)?) { + with(CookieManager.getInstance()) { + removeAllCookies({ + if (cookie == null) { + callback?.invoke() + return@removeAllCookies + } + L.d("Setting cookie to $cookie") + val cookies = cookie.split(";").map { Pair(it, SingleSubject.create<Boolean>()) } + cookies.forEach { (cookie, callback) -> setCookie(FB_URL_BASE, cookie, { callback.onSuccess(it) }) } + Observable.zip<Boolean, Unit>(cookies.map { (_, callback) -> callback.toObservable() }, {}).subscribeOn(AndroidSchedulers.mainThread()).subscribe({ + callback?.invoke() + L.d("Cookies set: $webCookie") + flush() + }) + }) } + } operator fun invoke() { L.d("User ${Prefs.userId}") + with(CookieManager.getInstance()) { + setAcceptCookie(true) + } val dbCookie = loadFbCookie(Prefs.userId)?.cookie if (dbCookie != null && webCookie == null) { L.d("DbCookie found & WebCookie is null; setting webcookie") - webCookie = dbCookie + setWebCookie(dbCookie, null) } } @@ -37,28 +58,30 @@ object FbCookie { saveFbCookie(cookie) } - fun reset() { + fun reset(callback: () -> Unit) { Prefs.userId = Prefs.userIdDefault with(CookieManager.getInstance()) { - removeAllCookies(null) - flush() + removeAllCookies({ + flush() + callback.invoke() + }) } } - fun switchUser(id: Long) = switchUser(loadFbCookie(id)) + fun switchUser(id: Long, callback: () -> Unit) = switchUser(loadFbCookie(id), callback) - fun switchUser(name: String) = switchUser(loadFbCookie(name)) + fun switchUser(name: String, callback: () -> Unit) = switchUser(loadFbCookie(name), callback) - fun switchUser(cookie: CookieModel?) { + fun switchUser(cookie: CookieModel?, callback: () -> Unit) { if (cookie == null) return + L.d("Switching user to $cookie") Prefs.userId = cookie.id - webCookie = cookie.cookie - //TODO add webview refresh event + setWebCookie(cookie.cookie, callback) } - fun logout(id:Long) { + fun logout(id: Long, callback: () -> Unit) { L.d("Logging out user $id") removeCookie(id) - reset() + reset(callback) } }
\ No newline at end of file |