pull/46/head
parent
456a2e3043
commit
2bb7d2502d
@ -1,13 +1,21 @@ |
||||
package io.legado.app.data.dao |
||||
|
||||
import androidx.room.Dao |
||||
import androidx.room.Query |
||||
import androidx.room.* |
||||
import io.legado.app.data.entities.Cookie |
||||
|
||||
@Dao |
||||
interface CookieDao { |
||||
|
||||
@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