package com.qubling.sidekick.fetch.cpan; import java.util.Map; import org.json.JSONArray; import org.json.JSONException; import org.json.JSONObject; import com.qubling.sidekick.instance.Release; import com.qubling.sidekick.model.Model; import com.qubling.sidekick.search.ResultSet; import com.qubling.sidekick.util.JSONFragment; public class ReleaseFavoritesUpdateFetcher extends ReleaseUpdateFetcher { private String myPrivateToken; public ReleaseFavoritesUpdateFetcher(Model<Release> model, String myPrivateToken) { super(model, SearchSection.FAVORITE, "favorite_by_distribution"); this.myPrivateToken = myPrivateToken; } @Override public boolean needsUpdate(Release release) { return !release.hasFavoriteCount(); } @Override protected void prepareRequest(Map<String, Object> variables) { JSONFragment releasesTerms = makeReleasesTerms("favorite"); variables.put("distributions", releasesTerms); variables.put("myPrivateToken", myPrivateToken); } @Override protected void consumeResponse(JSONObject response) throws JSONException { ResultSet<Release> releases = getResultSet(); JSONArray favorites = response.getJSONObject("facets").getJSONObject("favorites").getJSONArray("terms"); for (int i = 0; i < favorites.length(); i++) { JSONObject favorite = favorites.getJSONObject(i); String releaseName = favorite.getString("term"); int favoriteCount = favorite.getInt("count"); Release release = releases.get(releaseName); if (release != null) { release.setFavoriteCount(favoriteCount); } } JSONArray myFavorites = response.getJSONObject("facets").getJSONObject("myfavorites").getJSONArray("terms"); for (int i = 0; i < myFavorites.length(); i++) { JSONObject favorite = myFavorites.getJSONObject(i); String releaseName = favorite.getString("term"); //int favoriteCount = favorite.getInt("count"); Release release = releases.get(releaseName); if (release != null) { release.setMyFavorite(true); } } } @Override public String toString() { return getModel() + ":ReleaseFavoritesUpdateFetcher(" + getResultSet() + ")"; } }