diff --git a/Habitica/Habitica.iml b/Habitica/Habitica.iml
index 603d0732f..95096f444 100644
--- a/Habitica/Habitica.iml
+++ b/Habitica/Habitica.iml
@@ -81,6 +81,7 @@
+
@@ -110,18 +111,19 @@
-
+
-
+
+
@@ -140,8 +142,8 @@
-
+
diff --git a/Habitica/src/com/magicmicky/habitrpgwrapper/lib/api/TypeAdapter/TagsAdapter.java b/Habitica/src/com/magicmicky/habitrpgwrapper/lib/api/TypeAdapter/TagsAdapter.java
index defd6561f..cb30c59bf 100644
--- a/Habitica/src/com/magicmicky/habitrpgwrapper/lib/api/TypeAdapter/TagsAdapter.java
+++ b/Habitica/src/com/magicmicky/habitrpgwrapper/lib/api/TypeAdapter/TagsAdapter.java
@@ -8,6 +8,7 @@ import com.magicmicky.habitrpgwrapper.lib.models.tasks.TaskTag;
import com.raizlabs.android.dbflow.sql.language.Select;
import java.io.IOException;
+import java.lang.reflect.Array;
import java.util.ArrayList;
import java.util.List;
@@ -26,6 +27,15 @@ public class TagsAdapter extends TypeAdapter>{
out.endObject();
}
+ private boolean alreadyContainsTag(List list, String idToCheck)
+ {
+ for(TaskTag t : list)
+ if(t.getTag().getId().equals(idToCheck))
+ return true;
+
+ return false;
+ }
+
@Override
public List read(JsonReader in) throws IOException {
List tags = new ArrayList<>();
@@ -39,17 +49,20 @@ public class TagsAdapter extends TypeAdapter>{
in.beginObject();
break;
case NAME:
- String taskId = in.nextName();
+ String tagId = in.nextName();
if(in.nextBoolean()) {
TaskTag taskTag = new TaskTag();
for (Tag tag : allTags) {
- if (tag.getId().equals(taskId)) {
+ if (tag.getId().equals(tagId)) {
taskTag.setTag(tag);
+
+ if(!alreadyContainsTag(tags, tagId))
+ tags.add(taskTag);
+
break;
}
}
- tags.add(taskTag);
}
break;
case END_OBJECT:
diff --git a/Habitica/src/com/magicmicky/habitrpgwrapper/lib/models/tasks/Task.java b/Habitica/src/com/magicmicky/habitrpgwrapper/lib/models/tasks/Task.java
index 7a92f3138..e1eca1317 100644
--- a/Habitica/src/com/magicmicky/habitrpgwrapper/lib/models/tasks/Task.java
+++ b/Habitica/src/com/magicmicky/habitrpgwrapper/lib/models/tasks/Task.java
@@ -297,17 +297,20 @@ public class Task extends BaseModel {
@Override
public void save() {
+ super.save();
+
if (this.tags != null) {
for (TaskTag tag : this.tags) {
tag.setTask(this);
+ tag.save();
}
}
if (this.checklist != null) {
for (ChecklistItem item : this.checklist) {
item.setTask(this);
+ item.save();
}
}
- super.save();
}
public int getLightTaskColor()