package com.github.javiersantos.appupdater;
import android.util.Log;
import com.github.javiersantos.appupdater.objects.Update;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.Reader;
import java.net.MalformedURLException;
import java.net.URL;
import java.nio.charset.Charset;
class JSONParser {
private URL jsonUrl;
private static final String KEY_LATEST_VERSION = "latestVersion";
private static final String KEY_LATEST_VERSION_CODE = "latestVersionCode";
private static final String KEY_RELEASE_NOTES = "releaseNotes";
private static final String KEY_URL = "url";
public JSONParser(String url) {
try {
this.jsonUrl = new URL(url);
} catch (MalformedURLException e) {
throw new RuntimeException(e);
}
}
public Update parse(){
try {
JSONObject json = readJsonFromUrl();
Update update = new Update();
update.setLatestVersion(json.getString(KEY_LATEST_VERSION).trim());
update.setLatestVersionCode(json.optInt(KEY_LATEST_VERSION_CODE));
JSONArray releaseArr = json.optJSONArray(KEY_RELEASE_NOTES);
if (releaseArr != null) {
StringBuilder builder = new StringBuilder();
for (int i = 0; i < releaseArr.length(); ++i) {
builder.append(releaseArr.getString(i).trim());
if (i != releaseArr.length() - 1)
builder.append(System.getProperty("line.separator"));
}
update.setReleaseNotes(builder.toString());
}
URL url = new URL(json.getString(KEY_URL).trim());
update.setUrlToDownload(url);
return update;
} catch (IOException e) {
Log.e("AppUpdater", "The server is down or there isn't an active Internet connection.", e);
} catch (JSONException e) {
Log.e("AppUpdater", "The JSON updater file is mal-formatted. AppUpdate can't check for updates.");
}
return null;
}
private String readAll(Reader rd) throws IOException {
StringBuilder sb = new StringBuilder();
int cp;
while ((cp = rd.read()) != -1) {
sb.append((char) cp);
}
return sb.toString();
}
private JSONObject readJsonFromUrl() throws IOException, JSONException {
InputStream is = this.jsonUrl.openStream();
try {
BufferedReader rd = new BufferedReader(new InputStreamReader(is, Charset.forName("UTF-8")));
String jsonText = readAll(rd);
return new JSONObject(jsonText);
} finally {
is.close();
}
}
}