pull/46/head
parent
456a2e3043
commit
2bb7d2502d
@ -1,13 +1,21 @@ |
|||||||
package io.legado.app.data.dao |
package io.legado.app.data.dao |
||||||
|
|
||||||
import androidx.room.Dao |
import androidx.room.* |
||||||
import androidx.room.Query |
import io.legado.app.data.entities.Cookie |
||||||
|
|
||||||
@Dao |
@Dao |
||||||
interface CookieDao { |
interface CookieDao { |
||||||
|
|
||||||
@Query("select * from cookies where url = :url") |
@Query("select * from cookies where url = :url") |
||||||
fun get(url: String) |
fun get(url: String): Cookie? |
||||||
|
|
||||||
|
|
||||||
|
@Insert(onConflict = OnConflictStrategy.REPLACE) |
||||||
|
fun insert(vararg cookie: Cookie) |
||||||
|
|
||||||
|
@Update |
||||||
|
fun update(vararg cookie: Cookie) |
||||||
|
|
||||||
|
@Query("delete from cookies where url = :url") |
||||||
|
fun delete(url: String) |
||||||
} |
} |
@ -0,0 +1,86 @@ |
|||||||
|
package io.legado.app.help.http |
||||||
|
|
||||||
|
import android.text.TextUtils |
||||||
|
import io.legado.app.App |
||||||
|
import io.legado.app.data.entities.Cookie |
||||||
|
|
||||||
|
|
||||||
|
object CookieStore { |
||||||
|
|
||||||
|
fun setCookie(url: String, cookie: String?) { |
||||||
|
try { |
||||||
|
val cookieBean = Cookie(url, cookie) |
||||||
|
App.db.cookieDao().insert(cookieBean) |
||||||
|
} catch (ignore: Exception) { |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
fun replaceCookie(url: String, cookie: String) { |
||||||
|
if (TextUtils.isEmpty(url) || TextUtils.isEmpty(cookie)) { |
||||||
|
return |
||||||
|
} |
||||||
|
val oldCookie = getCookie(url) |
||||||
|
|
||||||
|
if (TextUtils.isEmpty(oldCookie)) { |
||||||
|
setCookie(url, cookie) |
||||||
|
} else { |
||||||
|
val cookieMap = cookieToMap(oldCookie) |
||||||
|
cookieMap.putAll(cookieToMap(cookie)) |
||||||
|
val newCookie = mapToCookie(cookieMap) |
||||||
|
|
||||||
|
setCookie(url, newCookie) |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
fun getCookie(url: String): String { |
||||||
|
val cookieBean = App.db.cookieDao().get(url) |
||||||
|
return cookieBean?.cookie ?: "" |
||||||
|
} |
||||||
|
|
||||||
|
fun removeCookie(url: String) { |
||||||
|
App.db.cookieDao().delete(url) |
||||||
|
} |
||||||
|
|
||||||
|
fun clearCookies() { |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
private fun cookieToMap(cookie: String): MutableMap<String, String> { |
||||||
|
val cookieMap = mutableMapOf<String, String>() |
||||||
|
if (cookie.isBlank()) { |
||||||
|
return cookieMap |
||||||
|
} |
||||||
|
val pairArray = cookie.split(";".toRegex()).dropLastWhile { it.isEmpty() }.toTypedArray() |
||||||
|
for (pair in pairArray) { |
||||||
|
val pairs = pair.split("=".toRegex()).dropLastWhile { it.isEmpty() }.toTypedArray() |
||||||
|
if (pairs.size == 1) { |
||||||
|
continue |
||||||
|
} |
||||||
|
val key = pairs[0].trim { it <= ' ' } |
||||||
|
val value = pairs[1] |
||||||
|
if (value.isNotBlank() || value.trim { it <= ' ' } == "null") { |
||||||
|
cookieMap.put(key, value.trim { it <= ' ' }) |
||||||
|
} |
||||||
|
} |
||||||
|
return cookieMap |
||||||
|
} |
||||||
|
|
||||||
|
private fun mapToCookie(cookieMap: Map<String, String>?): String? { |
||||||
|
if (cookieMap == null || cookieMap.isEmpty()) { |
||||||
|
return null |
||||||
|
} |
||||||
|
val builder = StringBuilder() |
||||||
|
for (key in cookieMap.keys) { |
||||||
|
val value = cookieMap[key] |
||||||
|
if (value?.isNotBlank() == true) { |
||||||
|
builder.append(key) |
||||||
|
.append("=") |
||||||
|
.append(value) |
||||||
|
.append(";") |
||||||
|
} |
||||||
|
} |
||||||
|
return builder.deleteCharAt(builder.lastIndexOf(";")).toString() |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
} |
Loading…
Reference in new issue