package com.boardgamegeek.service; import android.content.ContentValues; import android.content.Context; import android.net.Uri; import android.support.annotation.NonNull; import com.boardgamegeek.R; import com.boardgamegeek.io.Adapter; import com.boardgamegeek.io.BggService; import com.boardgamegeek.model.Company; import com.boardgamegeek.provider.BggContract; import com.boardgamegeek.provider.BggContract.Publishers; import java.io.IOException; import retrofit2.Response; import timber.log.Timber; public class SyncPublisher extends UpdateTask { private final int publisherId; public SyncPublisher(int publisherId) { this.publisherId = publisherId; } @NonNull @Override public String getDescription(Context context) { if (isValid()) { return context.getString(R.string.sync_msg_publisher_valid, String.valueOf(publisherId)); } return context.getString(R.string.sync_msg_publisher_invalid); } @Override public boolean isValid() { return publisherId != BggContract.INVALID_ID; } @Override public void execute(@NonNull Context context) { BggService service = Adapter.createForXml(); try { final Response<Company> response = service.company(BggService.COMPANY_TYPE_PUBLISHER, publisherId).execute(); Company company = response.body(); if (company == null) { Timber.w("Publisher %1$s is null: %2$s", publisherId, response.errorBody().string()); } else { Uri uri = Publishers.buildPublisherUri(publisherId); context.getContentResolver().update(uri, toValues(company), null, null); Timber.i("Synced Publisher: %s", publisherId); } } catch (IOException e) { throw new RuntimeException(e); } } @NonNull private static ContentValues toValues(@NonNull Company company) { ContentValues values = new ContentValues(); values.put(Publishers.PUBLISHER_NAME, company.name); values.put(Publishers.PUBLISHER_DESCRIPTION, company.description); values.put(Publishers.UPDATED, System.currentTimeMillis()); return values; } }