1package eu.siacs.conversations.entities;
2
3import org.json.JSONArray;
4import org.json.JSONException;
5import org.json.JSONObject;
6
7import java.util.ArrayList;
8import java.util.List;
9
10public class Edit {
11
12 private final String editedId;
13 private final String serverMsgId;
14
15 Edit(String editedId, String serverMsgId) {
16 this.editedId = editedId;
17 this.serverMsgId = serverMsgId;
18 }
19
20 static String toJson(List<Edit> edits) throws JSONException {
21 JSONArray jsonArray = new JSONArray();
22 for (Edit edit : edits) {
23 jsonArray.put(edit.toJson());
24 }
25 return jsonArray.toString();
26 }
27
28 static boolean wasPreviouslyEditedRemoteMsgId(List<Edit> edits, String remoteMsgId) {
29 for (Edit edit : edits) {
30 if (edit.editedId != null && edit.editedId.equals(remoteMsgId)) {
31 return true;
32 }
33 }
34 return false;
35 }
36
37 static boolean wasPreviouslyEditedServerMsgId(List<Edit> edits, String serverMsgId) {
38 for (Edit edit : edits) {
39 if (edit.serverMsgId != null && edit.serverMsgId.equals(serverMsgId)) {
40 return true;
41 }
42 }
43 return false;
44 }
45
46 private static Edit fromJson(JSONObject jsonObject) throws JSONException {
47 String edited = jsonObject.has("edited_id") ? jsonObject.getString("edited_id") : null;
48 String serverMsgId = jsonObject.has("server_msg_id") ? jsonObject.getString("server_msg_id") : null;
49 return new Edit(edited, serverMsgId);
50 }
51
52 static List<Edit> fromJson(String input) {
53 final ArrayList<Edit> list = new ArrayList<>();
54 if (input == null) {
55 return list;
56 }
57 try {
58 final JSONArray jsonArray = new JSONArray(input);
59 for (int i = 0; i < jsonArray.length(); ++i) {
60 list.add(fromJson(jsonArray.getJSONObject(i)));
61 }
62 return list;
63 } catch (JSONException e) {
64 return list;
65 }
66 }
67
68 private JSONObject toJson() throws JSONException {
69 JSONObject jsonObject = new JSONObject();
70 jsonObject.put("edited_id", editedId);
71 jsonObject.put("server_msg_id", serverMsgId);
72 return jsonObject;
73 }
74
75 String getEditedId() {
76 return editedId;
77 }
78
79 @Override
80 public boolean equals(Object o) {
81 if (this == o) return true;
82 if (o == null || getClass() != o.getClass()) return false;
83
84 Edit edit = (Edit) o;
85
86 if (editedId != null ? !editedId.equals(edit.editedId) : edit.editedId != null)
87 return false;
88 return serverMsgId != null ? serverMsgId.equals(edit.serverMsgId) : edit.serverMsgId == null;
89 }
90
91 @Override
92 public int hashCode() {
93 int result = editedId != null ? editedId.hashCode() : 0;
94 result = 31 * result + (serverMsgId != null ? serverMsgId.hashCode() : 0);
95 return result;
96 }
97}