Package jadx.gui.update

Source Code of jadx.gui.update.JadxUpdate$IUpdateCallback

package jadx.gui.update;

import jadx.api.JadxDecompiler;
import jadx.gui.update.data.Release;

import java.io.IOException;
import java.io.InputStreamReader;
import java.io.Reader;
import java.lang.reflect.Type;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Collections;
import java.util.Comparator;
import java.util.Iterator;
import java.util.List;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;

public class JadxUpdate {
  private static final Logger LOG = LoggerFactory.getLogger(JadxUpdate.class);

  public static final String JADX_RELEASES_URL = "https://github.com/skylot/jadx/releases";

  private static final String GITHUB_API_URL = "https://api.github.com/";
  private static final String GITHUB_RELEASES_URL = GITHUB_API_URL + "repos/skylot/jadx/releases";

  private static final Gson GSON = new Gson();

  private static final Type RELEASES_LIST_TYPE = new TypeToken<List<Release>>() {
  }.getType();

  private static final Comparator<Release> RELEASE_COMPARATOR = new Comparator<Release>() {
    @Override
    public int compare(Release o1, Release o2) {
      return VersionComparator.checkAndCompare(o1.getName(), o2.getName());
    }
  };

  public interface IUpdateCallback {
    void onUpdate(Release r);
  }

  private JadxUpdate() {
  }

  public static void check(final IUpdateCallback callback) {
    Runnable run = new Runnable() {
      @Override
      public void run() {
        try {
          Release release = checkForNewRelease();
          if (release != null) {
            callback.onUpdate(release);
          }
        } catch (Exception e) {
          LOG.debug("Jadx update error", e);
        }
      }
    };
    Thread thread = new Thread(run);
    thread.setName("Jadx update thread");
    thread.setPriority(Thread.MIN_PRIORITY);
    thread.start();
  }

  private static Release checkForNewRelease() throws IOException {
    String version = JadxDecompiler.getVersion();
    if (version.contains("dev")) {
      LOG.debug("Ignore check for update: development version");
      return null;
    }

    List<Release> list = get(GITHUB_RELEASES_URL, RELEASES_LIST_TYPE);
    if (list == null) {
      return null;
    }
    for (Iterator<Release> it = list.iterator(); it.hasNext(); ) {
      Release release = it.next();
      if (release.getName().equalsIgnoreCase(version)
          || release.isPrerelease()) {
        it.remove();
      }
    }
    if (list.isEmpty()) {
      return null;
    }
    Collections.sort(list, RELEASE_COMPARATOR);
    Release latest = list.get(list.size() - 1);
    if (VersionComparator.checkAndCompare(version, latest.getName()) == 0) {
      return null;
    }
    LOG.debug("Found new version: {}", latest);
    return latest;
  }

  private static <T> T get(String url, Type type) throws IOException {
    URL obj = new URL(url);
    HttpURLConnection con = (HttpURLConnection) obj.openConnection();
    con.setRequestMethod("GET");
    if (con.getResponseCode() == 200) {
      Reader reader = new InputStreamReader(con.getInputStream());
      return GSON.fromJson(reader, type);
    }
    return null;
  }
}
TOP

Related Classes of jadx.gui.update.JadxUpdate$IUpdateCallback

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.