remove PostChallenge & use custom Challenge-serializer

This commit is contained in:
Negue 2017-04-24 23:58:25 +02:00
parent 1034b2471c
commit aebb9125d1
9 changed files with 41 additions and 71 deletions

View file

@ -28,7 +28,6 @@ import com.habitrpg.android.habitica.models.responses.UnlockResponse;
import com.habitrpg.android.habitica.models.tasks.ItemData;
import com.habitrpg.android.habitica.models.tasks.Task;
import com.habitrpg.android.habitica.models.tasks.TaskList;
import com.habitrpg.android.habitica.models.social.PostChallenge;
import java.util.ArrayList;
import java.util.List;
@ -289,7 +288,7 @@ public interface ApiService {
Observable<HabitResponse<Void>> leaveChallenge(@Path("challengeId") String challengeId, @Body LeaveChallengeBody body);
@POST("challenges")
Observable<HabitResponse<Challenge>> createChallenge(@Body PostChallenge challenge);
Observable<HabitResponse<Challenge>> createChallenge(@Body Challenge challenge);
@POST("tasks/challenge/{challengeId}")
Observable<HabitResponse<Task>> createChallengeTask(@Path("challengeId") String challengeId, @Body Task task);
@ -298,7 +297,7 @@ public interface ApiService {
Observable<HabitResponse<List<Task>>> createChallengeTasks(@Path("challengeId") String challengeId, @Body List<Task> tasks);
@PUT("challenges/{challengeId}")
Observable<HabitResponse<Challenge>> updateChallenge(@Path("challengeId") String challengeId, @Body PostChallenge challenge);
Observable<HabitResponse<Challenge>> updateChallenge(@Path("challengeId") String challengeId, @Body Challenge challenge);
@DELETE("challenges/{challengeId}")
Observable<HabitResponse<Void>> deleteChallenge(@Path("challengeId") String challengeId);

View file

@ -8,7 +8,6 @@ import com.habitrpg.android.habitica.models.social.Challenge;
import com.habitrpg.android.habitica.models.social.ChatMessage;
import com.habitrpg.android.habitica.models.ContentResult;
import com.habitrpg.android.habitica.models.social.Group;
import com.habitrpg.android.habitica.models.social.PostChallenge;
import com.habitrpg.android.habitica.models.user.HabitRPGUser;
import com.habitrpg.android.habitica.models.user.Items;
import com.habitrpg.android.habitica.models.LeaveChallengeBody;
@ -201,11 +200,11 @@ public interface ApiClient {
Observable<Void> leaveChallenge(String challengeId, LeaveChallengeBody body);
Observable<Challenge> createChallenge(PostChallenge challenge);
Observable<Challenge> createChallenge(Challenge challenge);
Observable<Task> createChallengeTask(String challengeId, Task task);
Observable<List<Task>> createChallengeTasks(String challengeId, List<Task> tasks);
Observable<Challenge> updateChallenge(PostChallenge challenge);
Observable<Challenge> updateChallenge(Challenge challenge);
Observable<Void> deleteChallenge(String challengeId);
//DEBUG: These calls only work on a local development server

View file

@ -2,7 +2,6 @@ package com.habitrpg.android.habitica.data;
import com.habitrpg.android.habitica.models.social.Challenge;
import com.habitrpg.android.habitica.models.social.Group;
import com.habitrpg.android.habitica.models.social.PostChallenge;
import com.habitrpg.android.habitica.models.tasks.Task;
import com.habitrpg.android.habitica.models.tasks.TaskList;
@ -14,7 +13,7 @@ public interface ChallengeRepository extends BaseRepository {
Observable<Challenge> getChallenge(String challengeId);
Observable<TaskList> getChallengeTasks(String challengeId);
Observable<Challenge> createChallenge(PostChallenge challenge, List<Task> taskList);
Observable<Challenge> createChallenge(Challenge challenge, List<Task> taskList);
/**
*
@ -25,7 +24,7 @@ public interface ChallengeRepository extends BaseRepository {
* @param removedTaskList tasks that has be to be removed
* @return
*/
Observable<Challenge> updateChallenge(PostChallenge challenge, List<Task> fullTaskList,
Observable<Challenge> updateChallenge(Challenge challenge, List<Task> fullTaskList,
List<Task> addedTaskList, List<Task> updatedTaskList, List<String> removedTaskList);
Observable<Void> deleteChallenge(String challengeId);

View file

@ -18,7 +18,6 @@ import com.habitrpg.android.habitica.R;
import com.habitrpg.android.habitica.data.ApiClient;
import com.habitrpg.android.habitica.database.CheckListItemExcludeStrategy;
import com.habitrpg.android.habitica.helpers.PopupNotificationsManager;
import com.habitrpg.android.habitica.models.social.PostChallenge;
import com.habitrpg.android.habitica.proxy.ifce.CrashlyticsProxy;
import com.habitrpg.android.habitica.api.ApiService;
import com.habitrpg.android.habitica.api.Server;
@ -66,7 +65,7 @@ import com.habitrpg.android.habitica.models.tasks.Task;
import com.habitrpg.android.habitica.models.tasks.TaskList;
import com.habitrpg.android.habitica.models.tasks.TaskTag;
import com.habitrpg.android.habitica.utils.BooleanAsIntAdapter;
import com.habitrpg.android.habitica.utils.ChallengeDeserializer;
import com.habitrpg.android.habitica.utils.ChallengeSerializer;
import com.habitrpg.android.habitica.utils.ChatMessageDeserializer;
import com.habitrpg.android.habitica.utils.ChecklistItemSerializer;
import com.habitrpg.android.habitica.utils.ContentDeserializer;
@ -268,7 +267,7 @@ public class ApiClientImpl implements Action1<Throwable>, ApiClient {
.registerTypeAdapter(Task.class, new TaskSerializer())
.registerTypeAdapter(ContentResult.class, new ContentDeserializer())
.registerTypeAdapter(FeedResponse.class, new FeedResponseDeserializer())
.registerTypeAdapter(Challenge.class, new ChallengeDeserializer())
.registerTypeAdapter(Challenge.class, new ChallengeSerializer())
.setDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'")
.create();
return GsonConverterFactory.create(gson);
@ -828,7 +827,7 @@ public class ApiClientImpl implements Action1<Throwable>, ApiClient {
}
@Override
public Observable<Challenge> createChallenge(PostChallenge challenge) {
public Observable<Challenge> createChallenge(Challenge challenge) {
return apiService.createChallenge(challenge).compose(configureApiCallObserver());
}
@ -844,7 +843,7 @@ public class ApiClientImpl implements Action1<Throwable>, ApiClient {
}
@Override
public Observable<Challenge> updateChallenge(PostChallenge challenge) {
public Observable<Challenge> updateChallenge(Challenge challenge) {
return apiService.updateChallenge(challenge.id, challenge).compose(configureApiCallObserver());
}

View file

@ -6,7 +6,6 @@ import com.habitrpg.android.habitica.data.ChallengeRepository;
import com.habitrpg.android.habitica.data.local.ChallengeLocalRepository;
import com.habitrpg.android.habitica.models.social.Challenge;
import com.habitrpg.android.habitica.models.social.Group;
import com.habitrpg.android.habitica.models.social.PostChallenge;
import com.habitrpg.android.habitica.models.tasks.Task;
import com.habitrpg.android.habitica.models.tasks.TaskList;
import com.habitrpg.android.habitica.models.tasks.TasksOrder;
@ -72,7 +71,7 @@ public class ChallengeRepositoryImpl extends BaseRepositoryImpl<ChallengeLocalRe
}
@Override
public Observable<Challenge> createChallenge(PostChallenge challenge, List<Task> taskList) {
public Observable<Challenge> createChallenge(Challenge challenge, List<Task> taskList) {
challenge.tasksOrder = getTaskOrders(taskList);
return Observable.create(subscriber -> {
@ -87,7 +86,7 @@ public class ChallengeRepositoryImpl extends BaseRepositoryImpl<ChallengeLocalRe
}
@Override
public Observable<Challenge> updateChallenge(PostChallenge challenge, List<Task> fullTaskList,
public Observable<Challenge> updateChallenge(Challenge challenge, List<Task> fullTaskList,
List<Task> addedTaskList, List<Task> updatedTaskList, List<String> removedTaskList) {
ArrayList<Observable> observablesToWait = new ArrayList<>($.map(updatedTaskList, t -> apiClient.updateTask(t.getId(), t)));

View file

@ -1,7 +1,7 @@
package com.habitrpg.android.habitica.models.social;
import com.habitrpg.android.habitica.HabitDatabase;
import com.habitrpg.android.habitica.models.social.Group;
import com.habitrpg.android.habitica.models.tasks.TasksOrder;
import com.habitrpg.android.habitica.models.user.HabitRPGUser;
import com.raizlabs.android.dbflow.annotation.Column;
import com.raizlabs.android.dbflow.annotation.NotNull;
@ -9,8 +9,6 @@ import com.raizlabs.android.dbflow.annotation.PrimaryKey;
import com.raizlabs.android.dbflow.annotation.Table;
import com.raizlabs.android.dbflow.structure.BaseModel;
import java.util.HashMap;
@Table(databaseName = HabitDatabase.NAME)
public class Challenge extends BaseModel {
@ -73,25 +71,5 @@ public class Challenge extends BaseModel {
public HabitRPGUser leader;
public HashMap<String, String[]> getTasksOrder() {
HashMap<String, String[]> map = new HashMap();
if (!dailyList.isEmpty()) {
map.put(TASK_ORDER_DAILYS, dailyList.split(","));
}
if (!habitList.isEmpty()) {
map.put(TASK_ORDER_HABITS, habitList.split(","));
}
if (!rewardList.isEmpty()) {
map.put(TASK_ORDER_REWARDS, rewardList.split(","));
}
if (!todoList.isEmpty()) {
map.put(TASK_ORDER_TODOS, todoList.split(","));
}
return map;
}
public TasksOrder tasksOrder;
}

View file

@ -1,23 +0,0 @@
package com.habitrpg.android.habitica.models.social;
import com.habitrpg.android.habitica.models.tasks.TasksOrder;
/**
* Needs to be a separate Class, the normal Challenge has the group as Object
* The Challenge for adding/updating just has the group as id
*/
public class PostChallenge {
public String id;
public String name;
public String shortName;
public String description;
public String group;
public int prize;
public TasksOrder tasksOrder;
}

View file

@ -33,10 +33,10 @@ import com.habitrpg.android.habitica.data.ChallengeRepository;
import com.habitrpg.android.habitica.events.TaskSaveEvent;
import com.habitrpg.android.habitica.events.TaskTappedEvent;
import com.habitrpg.android.habitica.events.commands.DeleteTaskCommand;
import com.habitrpg.android.habitica.models.social.Challenge;
import com.habitrpg.android.habitica.models.social.Group;
import com.habitrpg.android.habitica.models.tasks.Task;
import com.habitrpg.android.habitica.ui.adapter.social.challenges.ChallengeTasksRecyclerViewAdapter;
import com.habitrpg.android.habitica.models.social.PostChallenge;
import org.greenrobot.eventbus.EventBus;
import org.greenrobot.eventbus.Subscribe;
@ -436,8 +436,8 @@ public class CreateChallengeActivity extends BaseActivity {
startActivityForResult(intent, 1);
}
private PostChallenge getChallengeData() {
PostChallenge c = new PostChallenge();
private Challenge getChallengeData() {
Challenge c = new Challenge();
int locationPos = challengeLocationSpinner.getSelectedItemPosition();
Group locationGroup = locationAdapter.getItem(locationPos);
@ -446,7 +446,7 @@ public class CreateChallengeActivity extends BaseActivity {
c.id = challengeId;
}
c.group = locationGroup.id;
c.groupId = locationGroup.id;
c.name = createChallengeTitle.getText().toString();
c.description = createChallengeDescription.getText().toString();
c.shortName = createChallengeTag.getText().toString();
@ -456,7 +456,7 @@ public class CreateChallengeActivity extends BaseActivity {
}
private void createChallenge() {
PostChallenge c = getChallengeData();
Challenge c = getChallengeData();
List<Task> taskList = challengeTasks.getTaskList();
taskList.remove(addHabit);
@ -472,7 +472,7 @@ public class CreateChallengeActivity extends BaseActivity {
}
private void updateChallenge() {
PostChallenge c = getChallengeData();
Challenge c = getChallengeData();
List<Task> taskList = challengeTasks.getTaskList();
taskList.remove(addHabit);

View file

@ -6,13 +6,15 @@ import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
import com.google.gson.JsonParseException;
import com.google.gson.JsonSerializationContext;
import com.google.gson.JsonSerializer;
import com.habitrpg.android.habitica.models.social.Challenge;
import android.text.TextUtils;
import java.lang.reflect.Type;
public class ChallengeDeserializer implements JsonDeserializer<Challenge> {
public class ChallengeSerializer implements JsonDeserializer<Challenge>, JsonSerializer<Challenge> {
@Override
public Challenge deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException {
@ -93,4 +95,22 @@ public class ChallengeDeserializer implements JsonDeserializer<Challenge> {
return "";
}
@Override
public JsonElement serialize(Challenge src, Type typeOfSrc, JsonSerializationContext context) {
JsonObject object = new JsonObject();
object.addProperty("id", src.id);
object.addProperty("name", src.name);
object.addProperty("shortName", src.shortName);
object.addProperty("description", src.description);
object.addProperty("memberCount", src.memberCount);
object.addProperty("prize", src.prize);
object.addProperty("official", src.official);
object.addProperty("group", src.groupId);
object.add("tasksOrder", context.serialize(src.tasksOrder));
return object;
}
}