Optimize code

pull/606/head
FongMi 4 months ago
parent e21959ec4a
commit 1860e8dc14
  1. 13
      app/src/main/java/com/fongmi/android/tv/bean/Device.java
  2. 17
      app/src/main/java/com/fongmi/android/tv/ui/adapter/BaseDiffAdapter.java
  3. 6
      app/src/mobile/java/com/fongmi/android/tv/ui/dialog/CastDialog.java
  4. 4
      app/src/mobile/java/com/fongmi/android/tv/ui/dialog/SyncDialog.java
  5. 2
      catvod/build.gradle
  6. 20
      catvod/src/main/java/com/github/catvod/bean/Proxy.java
  7. 5
      catvod/src/main/java/com/github/catvod/net/OkAuthenticator.java
  8. 12
      catvod/src/main/java/com/github/catvod/net/OkDns.java
  9. 14
      catvod/src/main/java/com/github/catvod/net/OkProxySelector.java
  10. 6
      catvod/src/main/java/com/github/catvod/net/interceptor/AuthInterceptor.java
  11. 5
      catvod/src/main/java/com/github/catvod/net/interceptor/RequestInterceptor.java
  12. 5
      catvod/src/main/java/com/github/catvod/net/interceptor/ResponseInterceptor.java

@ -22,7 +22,7 @@ import java.util.Comparator;
import java.util.List;
@Entity(indices = @Index(value = {"uuid", "name"}, unique = true))
public class Device implements Diffable<Device> {
public class Device implements Diffable<Device>, Comparable<Device> {
@PrimaryKey(autoGenerate = true)
@SerializedName("id")
@ -191,13 +191,8 @@ public class Device implements Diffable<Device> {
return getName().equals(other.getName()) && getType() == other.getType();
}
public static class Sorter implements Comparator<Device> {
@Override
public int compare(Device o1, Device o2) {
int comp = Integer.compare(o1.getType(), o2.getType());
if (comp == 0) comp = o1.getName().compareToIgnoreCase(o2.getName());
return comp != 0 ? comp : o1.getUuid().compareTo(o2.getUuid());
}
@Override
public int compareTo(Device other) {
return Comparator.comparingInt(Device::getType).thenComparing(Device::getName, String.CASE_INSENSITIVE_ORDER).thenComparing(Device::getUuid).compare(this, other);
}
}

@ -9,11 +9,14 @@ import androidx.recyclerview.widget.RecyclerView;
import com.fongmi.android.tv.impl.Diffable;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
import java.util.Objects;
import java.util.stream.Collectors;
import java.util.stream.Stream;
public abstract class BaseDiffAdapter<T extends Diffable<T>, VH extends RecyclerView.ViewHolder> extends RecyclerView.Adapter<VH> {
public abstract class BaseDiffAdapter<T extends Diffable<T> & Comparable<? super T>, VH extends RecyclerView.ViewHolder> extends RecyclerView.Adapter<VH> {
protected final AsyncListDiffer<T> differ;
@ -75,11 +78,13 @@ public abstract class BaseDiffAdapter<T extends Diffable<T>, VH extends Recycler
setItems(current, runnable);
}
public void sort(T item, Comparator<T> comparator) {
List<T> current = new ArrayList<>(getItems());
current.add(item);
if (current.size() >= 2) current.sort(comparator);
setItems(current);
public void sort(T item) {
sort(item, null);
}
public void sort(T item, Runnable runnable) {
List<T> current = Stream.concat(getItems().stream(), Stream.of(item)).distinct().sorted().collect(Collectors.toList());
setItems(current, runnable);
}
public void remove(T item) {

@ -52,7 +52,6 @@ import okhttp3.Response;
public class CastDialog extends BaseDialog implements DeviceAdapter.OnClickListener, ScanTask.Listener, OnDeviceRegistryListener, OnDeviceControlListener, ServiceActionCallback<Unit>, okhttp3.Callback {
private final FormBody.Builder body;
private final Device.Sorter sorter;
private final OkHttpClient client;
private final ScanTask scanTask;
@ -68,7 +67,6 @@ public class CastDialog extends BaseDialog implements DeviceAdapter.OnClickListe
}
public CastDialog() {
sorter = new Device.Sorter();
scanTask = new ScanTask(this);
body = new FormBody.Builder();
body.add("device", Device.get().toString());
@ -163,12 +161,12 @@ public class CastDialog extends BaseDialog implements DeviceAdapter.OnClickListe
@Override
public void onFind(Device device) {
adapter.sort(device, sorter);
adapter.sort(device);
}
@Override
public void onDeviceAdded(@NonNull org.fourthline.cling.model.meta.Device<?, ?, ?> device) {
adapter.sort(DLNADevice.get().add(device), sorter);
adapter.sort(DLNADevice.get().add(device));
}
@Override

@ -46,7 +46,6 @@ import okhttp3.Response;
public class SyncDialog extends BaseDialog implements DeviceAdapter.OnClickListener, ScanTask.Listener {
private final FormBody.Builder body;
private final Device.Sorter sorter;
private final OkHttpClient client;
private final ScanTask scanTask;
private final TypedArray mode;
@ -60,7 +59,6 @@ public class SyncDialog extends BaseDialog implements DeviceAdapter.OnClickListe
}
public SyncDialog() {
sorter = new Device.Sorter();
body = new FormBody.Builder();
scanTask = new ScanTask(this);
client = OkHttp.client(Constant.TIMEOUT_SYNC);
@ -158,7 +156,7 @@ public class SyncDialog extends BaseDialog implements DeviceAdapter.OnClickListe
@Override
public void onFind(Device device) {
adapter.sort(device, sorter);
adapter.sort(device);
}
@Override

@ -17,6 +17,7 @@ android {
}
compileOptions {
coreLibraryDesugaringEnabled true
sourceCompatibility JavaVersion.VERSION_17
targetCompatibility JavaVersion.VERSION_17
}
@ -43,4 +44,5 @@ dependencies {
exclude group: 'com.google.j2objc', module: 'j2objc-annotations'
exclude group: 'org.codehaus.mojo', module: 'animal-sniffer-annotations'
}
coreLibraryDesugaring 'com.android.tools:desugar_jdk_libs_nio:2.1.5'
}

@ -12,10 +12,12 @@ import java.lang.reflect.Type;
import java.net.InetSocketAddress;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
import java.util.Objects;
import java.util.stream.Collectors;
public class Proxy {
public class Proxy implements Comparable<Proxy> {
@SerializedName("name")
private String name;
@ -25,6 +27,7 @@ public class Proxy {
private List<String> urls;
private List<java.net.Proxy> proxies;
private boolean wildcard;
public static List<Proxy> arrayFrom(JsonElement element) {
try {
@ -37,9 +40,8 @@ public class Proxy {
}
public void init() {
proxies = new ArrayList<>();
for (String url : getUrls()) proxies.add(create(url));
proxies.removeIf(Objects::isNull);
wildcard = getHosts().stream().anyMatch(host -> host.contains("*"));
proxies = getUrls().stream().map(this::create).filter(Objects::nonNull).toList();
}
public String getName() {
@ -66,12 +68,8 @@ public class Proxy {
return null;
}
public static void sort(List<Proxy> items) {
items.sort((o1, o2) -> {
boolean g1 = o1.getHosts().stream().anyMatch(h -> h.contains("*"));
boolean g2 = o2.getHosts().stream().anyMatch(h -> h.contains("*"));
if (g1 == g2) return 0;
return g1 ? 1 : -1;
});
@Override
public int compareTo(Proxy other) {
return Boolean.compare(this.wildcard, other.wildcard);
}
}

@ -12,6 +12,7 @@ import com.google.common.net.HttpHeaders;
import java.net.InetSocketAddress;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.CopyOnWriteArrayList;
import okhttp3.Authenticator;
import okhttp3.Request;
@ -23,10 +24,10 @@ public class OkAuthenticator implements Authenticator {
private final List<Proxy> proxy;
public OkAuthenticator() {
proxy = new ArrayList<>();
proxy = new CopyOnWriteArrayList<>();
}
public synchronized void addAll(List<Proxy> items) {
public void addAll(List<Proxy> items) {
proxy.addAll(items);
}

@ -7,10 +7,12 @@ import com.github.catvod.utils.Util;
import java.net.InetAddress;
import java.net.UnknownHostException;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
import kotlin._Assertions;
import okhttp3.Dns;
import okhttp3.HttpUrl;
import okhttp3.OkHttpClient;
@ -34,14 +36,8 @@ public class OkDns implements Dns {
map.clear();
}
public synchronized void addAll(List<String> hosts) {
for (String host : hosts) {
if (!host.contains("=")) continue;
String[] splits = host.split("=", 2);
String oldHost = splits[0];
String newHost = splits[1];
map.put(oldHost, newHost);
}
public void addAll(List<String> hosts) {
hosts.stream().map(host -> host.split("=", 2)).filter(splits -> splits.length == 2).forEach(splits -> map.put(splits[0], splits[1]));
}
@NonNull

@ -8,7 +8,12 @@ import java.net.ProxySelector;
import java.net.SocketAddress;
import java.net.URI;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;
import java.util.concurrent.CopyOnWriteArrayList;
import java.util.function.Consumer;
import java.util.stream.Collectors;
import java.util.stream.Stream;
public class OkProxySelector extends ProxySelector {
@ -16,14 +21,15 @@ public class OkProxySelector extends ProxySelector {
private final ProxySelector system;
public OkProxySelector() {
proxy = new ArrayList<>();
proxy = new CopyOnWriteArrayList<>();
system = ProxySelector.getDefault();
}
public synchronized void addAll(List<Proxy> items) {
for (Proxy item : items) item.init();
proxy.addAll(items);
Proxy.sort(proxy);
items.forEach(Proxy::init);
List<Proxy> newList = Stream.concat(proxy.stream(), items.stream()).sorted().toList();
proxy.clear();
proxy.addAll(newList);
}
public void clear() {

@ -33,10 +33,10 @@ public class AuthInterceptor implements Interceptor {
if (response.code() != 401) return response;
String host = request.url().host();
String user = request.url().uri().getUserInfo();
String header = response.header(HttpHeaders.WWW_AUTHENTICATE);
if (user == null && userMap.containsKey(host)) user = userMap.get(host);
if (user == null) user = userMap.get(host);
if (user == null) return response;
else response.close();
response.close();
String header = response.header(HttpHeaders.WWW_AUTHENTICATE);
String auth = digest(header) ? Util.digest(user, header, request) : Util.basic(user);
return chain.proceed(request.newBuilder().header(HttpHeaders.AUTHORIZATION, auth).build());
}

@ -33,8 +33,9 @@ public class RequestInterceptor implements Interceptor {
}
private void checkAuth(HttpUrl url, Request.Builder builder) {
String host = url.host();
String auth = url.queryParameter("auth");
if (auth != null) authMap.put(url.host(), auth);
if (authMap.containsKey(url.host()) && auth == null) builder.url(url.newBuilder().addQueryParameter("auth", authMap.get(url.host())).build());
if (auth != null) authMap.put(host, auth);
else if (authMap.containsKey(host)) builder.url(url.newBuilder().addQueryParameter("auth", authMap.get(host)).build());
}
}

@ -12,6 +12,7 @@ import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.CopyOnWriteArrayList;
import java.util.zip.Inflater;
import java.util.zip.InflaterInputStream;
@ -29,11 +30,11 @@ public class ResponseInterceptor implements Interceptor {
private final ConcurrentHashMap<String, String> redirectMap;
public ResponseInterceptor() {
headers = new ArrayList<>();
headers = new CopyOnWriteArrayList<>();
redirectMap = new ConcurrentHashMap<>();
}
public synchronized void addAll(List<Header> items) {
public void addAll(List<Header> items) {
headers.addAll(items);
}

Loading…
Cancel
Save