1package eu.siacs.conversations.entities;
2
3import java.util.ArrayList;
4import java.util.List;
5import java.util.Objects;
6import org.json.JSONArray;
7import org.json.JSONException;
8import org.json.JSONObject;
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 =
49 jsonObject.has("server_msg_id") ? jsonObject.getString("server_msg_id") : null;
50 return new Edit(edited, serverMsgId);
51 }
52
53 static List<Edit> fromJson(String input) {
54 final ArrayList<Edit> list = new ArrayList<>();
55 if (input == null) {
56 return list;
57 }
58 try {
59 final JSONArray jsonArray = new JSONArray(input);
60 for (int i = 0; i < jsonArray.length(); ++i) {
61 list.add(fromJson(jsonArray.getJSONObject(i)));
62 }
63 return list;
64 } catch (JSONException e) {
65 return list;
66 }
67 }
68
69 private JSONObject toJson() throws JSONException {
70 JSONObject jsonObject = new JSONObject();
71 jsonObject.put("edited_id", editedId);
72 jsonObject.put("server_msg_id", serverMsgId);
73 return jsonObject;
74 }
75
76 String getEditedId() {
77 return editedId;
78 }
79
80 @Override
81 public boolean equals(Object o) {
82 if (this == o) return true;
83 if (o == null || getClass() != o.getClass()) return false;
84
85 Edit edit = (Edit) o;
86
87 if (!Objects.equals(editedId, edit.editedId)) return false;
88 return Objects.equals(serverMsgId, edit.serverMsgId);
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}