package me.ccrama.redditslide.Tumblr;
import android.app.Activity;
import android.content.SharedPreferences;
import android.net.Uri;
import android.os.AsyncTask;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.google.gson.Gson;
import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
import com.google.gson.JsonParser;
import org.jetbrains.annotations.NotNull;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import me.ccrama.redditslide.Constants;
import me.ccrama.redditslide.Reddit;
import me.ccrama.redditslide.util.HttpUtil;
import me.ccrama.redditslide.util.LogUtil;
import okhttp3.OkHttpClient;
/**
* Created by carlo_000 on 2/1/2016.
*/
public class TumblrUtils {
public static SharedPreferences tumblrRequests;
private static String cutEnds(String s) {
if (s.endsWith("/")) {
return s.substring(0, s.length() - 1);
} else {
return s;
}
}
public static class GetTumblrPostWithCallback
extends AsyncTask<String, Void, ArrayList<JsonElement>> {
public String blog, id;
public Activity baseActivity;
private OkHttpClient client;
private Gson gson;
public void onError() {
}
public GetTumblrPostWithCallback(@NotNull String url, @NotNull Activity baseActivity) {
this.baseActivity = baseActivity;
Uri i = Uri.parse(url);
id = i.getPathSegments().get(1);
blog = i.getHost().split("\\.")[0];
client = Reddit.client;
gson = new Gson();
}
public void doWithData(List<Photo> data) {
if (data == null || data.isEmpty()) {
onError();
}
}
JsonElement[] target;
int count;
int done;
TumblrPost post;
public void parseJson(JsonElement baseData) {
try {
post = new ObjectMapper().readValue(baseData.toString(), TumblrPost.class);
baseActivity.runOnUiThread(new Runnable() {
@Override
public void run() {
doWithData(post.getResponse().getPosts().get(0).getPhotos());
}
});
} catch (IOException e) {
e.printStackTrace();
LogUtil.e(e, "parseJson error, baseData [" + baseData + "]");
}
}
@Override
protected ArrayList<JsonElement> doInBackground(final String... sub) {
if (baseActivity != null) {
String apiUrl = "https://api.tumblr.com/v2/blog/"
+ blog
+ "/posts?api_key="
+ Constants.TUMBLR_API_KEY
+ "&id="
+ id;
LogUtil.v(apiUrl);
if (tumblrRequests.contains(apiUrl) && new JsonParser().parse(
tumblrRequests.getString(apiUrl, "")).getAsJsonObject().has("response")) {
parseJson(new JsonParser().parse(tumblrRequests.getString(apiUrl, ""))
.getAsJsonObject());
} else {
LogUtil.v(apiUrl);
final JsonObject result = HttpUtil.getJsonObject(client, gson, apiUrl);
if (result != null && result.has("response") && result.get("response").getAsJsonObject().has("posts") && result.get("response").getAsJsonObject().get("posts").getAsJsonArray().get(0).getAsJsonObject().has("photos")) {
tumblrRequests.edit().putString(apiUrl, result.toString()).apply();
parseJson(result);
} else {
onError();
}
}
return null;
}
return null;
}
}
}