Peach VPN v4.0版本的 MD5 值为:44c7a87caba90fec9b7945dd44651111

以下内容为反编译后的 BackendResistanceHelper.java 源代码,内容仅作参考


package com.peacholo.peach.BackendResistance;

import android.content.Context;
import com.google.gson.Gson;
import com.peacholo.peach.BackendResistance.BackendCaller;
import com.peacholo.peach.BackendResistance.BackendResistanceCaller;
import com.peacholo.peach.Helper.SharedPreferencesHelper;
import com.peacholo.peach.Model.BackendResistance;
import java.util.ArrayList;
import java.util.Random;

public class BackendResistanceHelper {
    private static final String KEY_BACKEND_RESISTANCE = "KEY_BACKEND_RESISTANCE";
    private static final String KEY_CHOSEN_BACKEND_URL = "KEY_CHOSEN_BACKEND_URL";
    private static final String SHP_NAME = "BackendResistanceHelper";

    public static void backendResistanceCheck(final Context context, final Runnable runnable) {
        if (shouldFetchBackendResistanceData(context)) {
            new BackendResistanceCaller(context, getResistanceUrls(context), 10000, new BackendResistanceCaller.OnJobResultListener() {
                @Override
                public void onJobDone(BackendResistance backendResistance) {
                    BackendResistanceHelper.setBackendResistances(context, backendResistance);
                    BackendResistanceHelper.checkBackendUrls(context, runnable);
                }

                @Override
                public void onJobFailed() {
                    Runnable runnable2 = runnable;
                    if (runnable2 != null) {
                        runnable2.run();
                    }
                }
            }).start();
        } else {
            checkBackendUrls(context, runnable);
        }
    }

    public static void checkBackendUrls(final Context context, final Runnable runnable) {
        new BackendCaller(context, getBackendUrls(context), 10000, new BackendCaller.OnJobResultListener() {
            @Override
            public void onJobDone(String str) {
                BackendResistanceHelper.setChosenBackendUrl(context, str);
                Runnable runnable2 = runnable;
                if (runnable2 != null) {
                    runnable2.run();
                }
            }

            @Override
            public void onJobFailed() {
                Runnable runnable2 = runnable;
                if (runnable2 != null) {
                    runnable2.run();
                }
            }
        }).start();
    }

    public static BackendResistance getBackendResistances(Context context) {
        String string = new SharedPreferencesHelper(context, SHP_NAME).getString(KEY_BACKEND_RESISTANCE);
        return (string == null || string.isEmpty()) ? new BackendResistance() : (BackendResistance) new Gson().fromJson(string, BackendResistance.class);
    }

    public static ArrayList<String> getBackendUrls(Context context) {
        BackendResistance backendResistances = getBackendResistances(context);
        return backendResistances.getSaveTimeInMillis() == 0 ? getDefaultBackendUrls() : backendResistances.getBackendUrls();
    }

    public static String getChosenBackendUrl(Context context) {
        String string = new SharedPreferencesHelper(context, SHP_NAME).getString(KEY_CHOSEN_BACKEND_URL);
        return !isValid(string) ? getDefaultChosenBackendUrls() : string;
    }

    private static ArrayList<String> getDefaultBackendUrls() {
        ArrayList<String> arrayList = new ArrayList<>();
        arrayList.add("http://peacholo.com");
        arrayList.add("http://zivarsoft.com");
        arrayList.add("http://sholezanza.com");
        return arrayList;
    }

    private static String getDefaultChosenBackendUrls() {
        ArrayList<String> defaultBackendUrls = getDefaultBackendUrls();
        return defaultBackendUrls.get(new Random().nextInt(defaultBackendUrls.size()));
    }

    private static ArrayList<String> getDefaultResistanceUrls() {
        ArrayList<String> arrayList = new ArrayList<>();
        arrayList.add("http://peacholo.com/peach.json");
        arrayList.add("http://zivarsoft.com/peach.json");
        arrayList.add("http://sholezanza.com/peach.json");
        arrayList.add("https://raw.githubusercontent.com/sileacorina2/Peach/main/Peach.json");
        return arrayList;
    }

    public static ArrayList<String> getResistanceUrls(Context context) {
        BackendResistance backendResistances = getBackendResistances(context);
        return backendResistances.getSaveTimeInMillis() == 0 ? getDefaultResistanceUrls() : backendResistances.getResistanceUrl();
    }

    public static boolean isValid(String str) {
        return (str == null || str.isEmpty()) ? false : true;
    }

    public static void setBackendResistances(Context context, BackendResistance backendResistance) {
        backendResistance.setSaveTimeInMillis(System.currentTimeMillis());
        SharedPreferencesHelper sharedPreferencesHelper = new SharedPreferencesHelper(context, SHP_NAME);
        if (backendResistance != null) {
            sharedPreferencesHelper.putString(KEY_BACKEND_RESISTANCE, new Gson().toJson(backendResistance));
        } else {
            sharedPreferencesHelper.putString(KEY_BACKEND_RESISTANCE, new Gson().toJson(new BackendResistance()));
        }
    }

    public static void setChosenBackendUrl(Context context, String str) {
        new SharedPreferencesHelper(context, SHP_NAME).putString(KEY_CHOSEN_BACKEND_URL, str);
    }

    public static boolean shouldFetchBackendResistanceData(Context context) {
        BackendResistance backendResistances = getBackendResistances(context);
        if (backendResistances.getSaveTimeInMillis() == 0) {
            return true;
        }
        return !(backendResistances.getSaveTimeInMillis() + ((long) backendResistances.getValidationPeriod()) > System.currentTimeMillis());
    }
}