package co.touchlab.droidconandroid.tasks.persisted; import android.content.Context; import java.sql.SQLException; import java.util.List; import co.touchlab.android.threading.eventbus.EventBusExt; import co.touchlab.android.threading.tasks.persisted.PersistedTask; import co.touchlab.droidconandroid.data.DatabaseHelper; import co.touchlab.droidconandroid.data.TalkSubmission; import co.touchlab.droidconandroid.network.DataHelper; import co.touchlab.droidconandroid.network.TalkVotingWrapper; import co.touchlab.droidconandroid.network.VoteRequest; import co.touchlab.droidconandroid.presenter.AppManager; import co.touchlab.squeaky.dao.Dao; /** * Created by toidiu on 7/20/14. */ public class GetTalkSubmissionPersisted extends VotePersistedTask { public List<TalkSubmission> list; public static void startMe(Context context) { //should CALL ONLY FROM VoteFragment getQueue(context).execute(new GetTalkSubmissionPersisted()); } public GetTalkSubmissionPersisted() { } @Override protected void run(Context context) throws Throwable { VoteRequest voteRequest = DataHelper.makeRequestAdapter(context, AppManager .getPlatformClient()).create(VoteRequest.class); List<TalkVotingWrapper> talkSubmission = voteRequest.getTalkSubmission( AppManager.getPlatformClient().getConventionId()); list = TalkVotingWrapper.parseResp(talkSubmission); final Dao<TalkSubmission> dao = DatabaseHelper.getInstance(context).getTalkSubDao(); DatabaseHelper.getInstance(context).inTransaction(new Runnable() { @Override public void run() { for(TalkSubmission t : list) { try { assignRandomInt(t, dao); dao.createOrUpdate(t); } catch(SQLException e) { throw new RuntimeException(e); } } } }); } private void assignRandomInt(TalkSubmission t, Dao<TalkSubmission> dao) throws SQLException { TalkSubmission dbTalk = dao.queryForId(t.id); if(dbTalk != null) { t.random = dbTalk.random; } else { while(true) { Integer randInt = TalkSubmission.getRandInt(); List<TalkSubmission> randList = dao.queryForEq("random", randInt).list(); if(randList.isEmpty()) { t.random = randInt; break; } } } } @Override protected boolean same(PersistedTask persistedTask) { return persistedTask instanceof GetTalkSubmissionPersisted; } @Override protected String errorString() { return "Something went wrong. Failed to get new talks."; } @Override protected void onComplete(Context context) { EventBusExt.getDefault().post(this); } }