mirror of https://github.com/FongMi/TV.git
parent
5c23e36b79
commit
d2ebbeaea6
@ -0,0 +1,52 @@ |
||||
package com.github.catvod.net.cookie; |
||||
|
||||
import android.text.TextUtils; |
||||
import android.webkit.CookieManager; |
||||
|
||||
import androidx.annotation.NonNull; |
||||
|
||||
import java.util.ArrayList; |
||||
import java.util.HashSet; |
||||
import java.util.List; |
||||
import java.util.Set; |
||||
|
||||
import okhttp3.Cookie; |
||||
import okhttp3.CookieJar; |
||||
import okhttp3.HttpUrl; |
||||
|
||||
public class MemoryCookieJar implements CookieJar { |
||||
|
||||
private final Set<WrappedCookie> cache; |
||||
private final CookieManager manager; |
||||
|
||||
public MemoryCookieJar() { |
||||
cache = new HashSet<>(); |
||||
manager = CookieManager.getInstance(); |
||||
} |
||||
|
||||
@NonNull |
||||
@Override |
||||
public synchronized List<Cookie> loadForRequest(@NonNull HttpUrl url) { |
||||
List<Cookie> items = new ArrayList<>(); |
||||
for (WrappedCookie item : cache) if (item.isExpired()) cache.remove(item); |
||||
for (WrappedCookie item : cache) if (item.matches(url)) items.add(item.unwrap()); |
||||
items.addAll(fromManager(url)); |
||||
return items; |
||||
} |
||||
|
||||
@Override |
||||
public synchronized void saveFromResponse(@NonNull HttpUrl url, List<Cookie> cookies) { |
||||
List<WrappedCookie> items = new ArrayList<>(); |
||||
for (Cookie cookie : cookies) items.add(WrappedCookie.wrap(cookie)); |
||||
for (Cookie cookie : cookies) manager.setCookie(url.toString(), cookie.toString()); |
||||
cache.removeAll(items); |
||||
cache.addAll(items); |
||||
} |
||||
|
||||
private List<Cookie> fromManager(HttpUrl url) { |
||||
List<Cookie> items = new ArrayList<>(); |
||||
String cookie = manager.getCookie(url.toString()); |
||||
if (!TextUtils.isEmpty(cookie)) for (String split : cookie.split(";")) items.add(Cookie.parse(url, split)); |
||||
return items; |
||||
} |
||||
} |
||||
@ -0,0 +1,48 @@ |
||||
package com.github.catvod.net.cookie; |
||||
|
||||
import okhttp3.Cookie; |
||||
import okhttp3.HttpUrl; |
||||
|
||||
public class WrappedCookie { |
||||
|
||||
private final Cookie cookie; |
||||
|
||||
public static WrappedCookie wrap(Cookie cookie) { |
||||
return new WrappedCookie(cookie); |
||||
} |
||||
|
||||
private WrappedCookie(Cookie cookie) { |
||||
this.cookie = cookie; |
||||
} |
||||
|
||||
public Cookie unwrap() { |
||||
return cookie; |
||||
} |
||||
|
||||
public boolean isExpired() { |
||||
return cookie.expiresAt() < System.currentTimeMillis(); |
||||
} |
||||
|
||||
public boolean matches(HttpUrl url) { |
||||
return cookie.matches(url); |
||||
} |
||||
|
||||
@Override |
||||
public boolean equals(Object obj) { |
||||
if (this == obj) return true; |
||||
if (!(obj instanceof WrappedCookie)) return false; |
||||
WrappedCookie it = (WrappedCookie) obj; |
||||
return cookie.name().equals(it.cookie.name()) && cookie.domain().equals(it.cookie.domain()) && cookie.path().equals(it.cookie.path()) && cookie.secure() == it.cookie.secure() && cookie.hostOnly() == it.cookie.hostOnly(); |
||||
} |
||||
|
||||
@Override |
||||
public int hashCode() { |
||||
int result = 17; |
||||
result = 31 * result + cookie.name().hashCode(); |
||||
result = 31 * result + cookie.domain().hashCode(); |
||||
result = 31 * result + cookie.path().hashCode(); |
||||
result = 31 * result + (cookie.secure() ? 0 : 1); |
||||
result = 31 * result + (cookie.hostOnly() ? 0 : 1); |
||||
return result; |
||||
} |
||||
} |
||||
Loading…
Reference in new issue