package com.boardgamegeek.service;
import android.accounts.Account;
import android.content.Context;
import android.support.annotation.NonNull;
import android.text.TextUtils;
import com.boardgamegeek.R;
import com.boardgamegeek.auth.Authenticator;
import com.boardgamegeek.io.Adapter;
import com.boardgamegeek.io.BggService;
import com.boardgamegeek.model.PlaysResponse;
import com.boardgamegeek.model.persister.PlayPersister;
import timber.log.Timber;
public class SyncPlaysByDate extends UpdateTask {
private final String date;
public SyncPlaysByDate(String date) {
this.date = date;
}
@NonNull
@Override
public String getDescription(Context context) {
if (isValid()) {
return context.getString(R.string.sync_msg_plays_date_valid, date);
}
return context.getString(R.string.sync_msg_plays_date_invalid);
}
@Override
public boolean isValid() {
return !TextUtils.isEmpty(date);
}
@Override
public void execute(@NonNull Context context) {
Account account = Authenticator.getAccount(context);
if (account == null) {
return;
}
BggService service = Adapter.createForXml();
PlayPersister persister = new PlayPersister(context);
PlaysResponse response;
try {
final long startTime = System.currentTimeMillis();
int page = 1;
do {
response = service.playsByDate(account.name, date, date, page).execute().body();
persister.save(response.plays, startTime);
page++;
} while (response.hasMorePages());
if (SyncService.isPlaysSyncUpToDate(context)) {
SyncService.calculateAndUpdateHIndex(context);
}
Timber.i("Synced plays for date " + date);
} catch (Exception e) {
// TODO bubble error up?
Timber.i("Problem syncing plays by date", e);
}
}
}