package com.boardgamegeek.service; import android.content.ContentValues; import com.boardgamegeek.provider.BggContract.Collection; import com.boardgamegeek.service.model.CollectionItem; import com.boardgamegeek.util.StringUtils; import okhttp3.FormBody; import okhttp3.OkHttpClient; public class CollectionRatingUploadTask extends CollectionUploadTask { private static final String N_A_SPAN = "<span>N/A</span>"; private static final String RATING_DIV = "<div class='ratingtext'>"; public static final double INVALID_RATING = -1.0; private double rating; public CollectionRatingUploadTask(OkHttpClient client) { super(client); } @Override public String getTimestampColumn() { return Collection.RATING_DIRTY_TIMESTAMP; } @Override public void addCollectionItem(CollectionItem collectionItem) { super.addCollectionItem(collectionItem); rating = INVALID_RATING; } @Override public boolean isDirty() { return collectionItem.getRatingTimestamp() > 0; } @Override protected FormBody createForm(CollectionItem collectionItem) { return createFormBuilder() .add("fieldname", "rating") .add("rating", String.valueOf(collectionItem.getRating())) .build(); } @Override protected void saveContent(String content) { if (content.contains(N_A_SPAN)) { rating = CollectionRatingUploadTask.INVALID_RATING; } else if (content.contains(RATING_DIV)) { int index = content.indexOf(RATING_DIV) + RATING_DIV.length(); String message = content.substring(index); index = message.indexOf("<"); if (index > 0) { message = message.substring(0, index); } rating = StringUtils.parseDouble(message.trim(), CollectionRatingUploadTask.INVALID_RATING); } else { rating = CollectionRatingUploadTask.INVALID_RATING; } } @Override public void appendContentValues(ContentValues contentValues) { contentValues.put(Collection.RATING, rating); contentValues.put(Collection.RATING_DIRTY_TIMESTAMP, 0); } }