package ca.ualberta.cs.cmput301f14t14.questionapp.data.threading; import java.io.IOException; import ca.ualberta.cs.cmput301f14t14.questionapp.data.DataManager; import ca.ualberta.cs.cmput301f14t14.questionapp.data.IDataStore; import ca.ualberta.cs.cmput301f14t14.questionapp.data.eventbus.EventBus; import ca.ualberta.cs.cmput301f14t14.questionapp.data.eventbus.events.QuestionPushDelayedEvent; import ca.ualberta.cs.cmput301f14t14.questionapp.model.Question; import android.content.Context; import android.util.Log; public class AddQuestionTask extends AbstractDataManagerTask<Question, Void, Void>{ public AddQuestionTask(Context c) { super(c); } @Override protected Void doInBackground(Question... qin) { Question q = qin[0]; // Ignore other questions inputted IDataStore remote = DataManager.getInstance(getContext()).getRemoteDataStore(); IDataStore local = DataManager.getInstance(getContext()).getLocalDataStore(); try { remote.putQuestion(q); } catch (IOException e) { //Need to check if this exact question is already queued for uploading. If not, //then upload. Else, silently return. if (EventBus.getInstance().getEventQueue().contains(new QuestionPushDelayedEvent(q))){ return null; } tryPushLater(new QuestionPushDelayedEvent(q)); } try { // All questions created by the user should be saved locally local.putQuestion(q); local.save(); } catch (IOException e) { Log.e("AddQuestionTask", "Failed to create question."); } return null; } }