Skip to content
This repository was archived by the owner on Jul 25, 2024. It is now read-only.

Commit 6126271

Browse files
koziodigitalincniftynei
authored andcommitted
MEssages request works now
Some moderately heavy QA-ing later, seems pretty solid. No breakage. A few requests remain but they are independent of features. Will require one more PR to wrap up Tidied up pr with some self review ID Issues have been resolved. Final touches, additionally modeled in edit history so it'll be easy to implement in the future. Removed Authorship blocks. Removed Authorship blocks.
1 parent 73fa384 commit 6126271

38 files changed

+360
-272
lines changed

app/src/androidTest/java/com/zulip/android/test/UnsortedTests.java

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,30 +1,30 @@
11
package com.zulip.android.test;
22

3-
import java.sql.SQLException;
4-
import java.util.ArrayList;
5-
import java.util.List;
6-
import java.util.concurrent.Callable;
7-
import java.util.concurrent.ExecutionException;
8-
9-
import org.json.JSONException;
10-
import org.json.JSONObject;
11-
123
import android.annotation.TargetApi;
134
import android.content.Intent;
145
import android.os.Build;
156
import android.test.ActivityUnitTestCase;
167

178
import com.j256.ormlite.dao.RuntimeExceptionDao;
189
import com.j256.ormlite.misc.TransactionManager;
10+
import com.zulip.android.ZulipApp;
11+
import com.zulip.android.activities.MessageListFragment;
1912
import com.zulip.android.activities.ZulipActivity;
2013
import com.zulip.android.models.Message;
21-
import com.zulip.android.activities.MessageListFragment;
2214
import com.zulip.android.models.MessageRange;
2315
import com.zulip.android.models.MessageType;
2416
import com.zulip.android.models.Person;
25-
import com.zulip.android.ZulipApp;
26-
import com.zulip.android.util.MessageListener.LoadPosition;
2717
import com.zulip.android.test.mutated.FakeAsyncGetOldMessages;
18+
import com.zulip.android.util.MessageListener.LoadPosition;
19+
20+
import org.json.JSONException;
21+
import org.json.JSONObject;
22+
23+
import java.sql.SQLException;
24+
import java.util.ArrayList;
25+
import java.util.List;
26+
import java.util.concurrent.Callable;
27+
import java.util.concurrent.ExecutionException;
2828

2929
public class UnsortedTests extends ActivityUnitTestCase<ZulipActivity> {
3030

@@ -216,9 +216,9 @@ public void testAGOMFetch() throws SQLException, InterruptedException,
216216

217217
private Message sampleMessage(ZulipApp app, int id) throws SQLException {
218218
Message rtr = new Message(app);
219-
rtr.setSender(Person.getOrUpdate(app, "UserConfigurationResponse User",
219+
rtr.setSender(Person.getOrUpdate(app, "Test User",
220220
TESTUSER_EXAMPLE_COM, ""));
221-
rtr.setContent("UserConfigurationResponse message");
221+
rtr.setContent("Test message");
222222
rtr.setType(MessageType.PRIVATE_MESSAGE);
223223
rtr.setRecipient(new String[] {TESTUSER_EXAMPLE_COM});
224224
rtr.setID(id);

app/src/main/java/com/zulip/android/ZulipApp.java

Lines changed: 38 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@
2828
import com.zulip.android.database.DatabaseHelper;
2929
import com.zulip.android.models.Emoji;
3030
import com.zulip.android.models.Message;
31+
import com.zulip.android.models.MessageType;
3132
import com.zulip.android.models.Person;
3233
import com.zulip.android.models.Presence;
3334
import com.zulip.android.models.Stream;
@@ -201,29 +202,49 @@ public ZulipServices getZulipServices() {
201202
}
202203

203204
public Gson buildGson() {
204-
final Gson naiveGson = new Gson();
205+
final Gson naiveGson = new GsonBuilder()
206+
.registerTypeAdapter(Date.class, new JsonDeserializer<Date>() {
207+
public Date deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException {
208+
return new Date(json.getAsJsonPrimitive().getAsLong() * 1000);
209+
}
210+
})
211+
.registerTypeAdapter(MessageType.class, new JsonDeserializer<MessageType>() {
212+
@Override
213+
public MessageType deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException {
214+
return json.getAsString().equalsIgnoreCase("stream") ? MessageType.STREAM_MESSAGE : MessageType.PRIVATE_MESSAGE;
215+
}
216+
})
217+
.create();
205218
final Gson nestedGson = new GsonBuilder()
206219
.registerTypeAdapter(Message.class, new JsonDeserializer<Message>() {
207220
@Override
208221
public Message deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException {
209-
Message msg;
210-
if("stream".equalsIgnoreCase(json.getAsJsonObject().get("type").getAsString())) {
211-
msg = naiveGson.fromJson(json, Message.ZulipStreamMessage.class);
212-
}
213-
msg = naiveGson.fromJson(json, Message.ZulipDirectMessage.class);
214222

223+
if(BuildConfig.DEBUG) {
224+
Log.d("RAW MESSAGES", json.toString());
225+
}
226+
Message genMess;
227+
if("stream".equalsIgnoreCase(json.getAsJsonObject().get("type").getAsString())) {
228+
Message.ZulipStreamMessage msg = naiveGson.fromJson(json, Message.ZulipStreamMessage.class);
229+
msg.setRecipients(msg.getDisplayRecipient());
230+
genMess = msg;
231+
} else {
232+
Message.ZulipDirectMessage msg = naiveGson.fromJson(json, Message.ZulipDirectMessage.class);
233+
if(msg.getDisplayRecipient() != null) {
234+
msg.setRecipients(msg.getDisplayRecipient().toArray(new Person[msg.getDisplayRecipient().size()]));
235+
}
215236

216-
return msg;
237+
msg.setContent(Message.formatContent(msg.getFormattedContent(), ZulipApp.get()).toString());
238+
genMess = msg;
239+
}
240+
if(genMess._history != null && genMess._history.size() != 0) {
241+
genMess.updateFromHistory(genMess._history.get(0));
242+
}
243+
return genMess;
217244
}
218245
}).create();
219246

220-
221247
return new GsonBuilder()
222-
.registerTypeAdapter(Date.class, new JsonDeserializer<Date>() {
223-
public Date deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException {
224-
return new Date(json.getAsJsonPrimitive().getAsLong());
225-
}
226-
})
227248
.registerTypeAdapter(UserConfigurationResponse.class, new TypeAdapter<UserConfigurationResponse>() {
228249

229250
@Override
@@ -257,6 +278,9 @@ public UserConfigurationResponse read(JsonReader in) throws IOException {
257278
@Override
258279
public EventsBranch deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException {
259280
EventsBranch invalid = nestedGson.fromJson(json, EventsBranch.class);
281+
if(BuildConfig.DEBUG) {
282+
Log.d("RAW EVENTS", json.toString());
283+
}
260284
Class<? extends EventsBranch> t = EventsBranch.BranchType.fromRawType(invalid);
261285
if(t != null) {
262286
return nestedGson.fromJson(json, t);
@@ -265,6 +289,7 @@ public EventsBranch deserialize(JsonElement json, Type typeOfT, JsonDeserializat
265289
return invalid;
266290
}
267291
})
292+
.registerTypeAdapter(Message.class, nestedGson.getAdapter(Message.class))
268293
.create();
269294
}
270295

@@ -506,7 +531,6 @@ public boolean isTopicMute(int id, String subject) {
506531
}
507532

508533
public void syncPointer(final int mID) {
509-
510534
getZulipServices().updatePointer(Integer.toString(mID))
511535
.enqueue(new Callback<ResponseBody>() {
512536
@Override

app/src/main/java/com/zulip/android/activities/BaseActivity.java

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,7 @@
55
import com.zulip.android.ZulipApp;
66
import com.zulip.android.service.ZulipServices;
77

8-
/**
9-
* Created by patrykpoborca on 8/25/16.
10-
*/
8+
119

1210
public class BaseActivity extends AppCompatActivity {
1311

app/src/main/java/com/zulip/android/activities/LoginActivity.java

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -148,7 +148,7 @@ protected void onStop() {
148148
}
149149

150150
private void checkForError() {
151-
String serverURL = "https://zulip.tabbott.net";//serverIn.getText().toString();
151+
String serverURL = serverIn.getText().toString();
152152
int errorMessage = R.string.invalid_server_domain;
153153
String httpScheme = (BuildConfig.DEBUG) ? "http" : "https";
154154

@@ -354,12 +354,12 @@ public void onClick(View v) {
354354
setupGoogleSignIn();
355355
break;
356356
case R.id.zulip_login:
357-
// if (!isInputValid()) {
358-
// return;
359-
// }
357+
if (!isInputValid()) {
358+
return;
359+
}
360360
connectionProgressDialog.show();
361-
String username = "@gmail.com ";//mUserName.getText().toString();
362-
String password = ""; //mPassword.getText().toString()
361+
String username = mUserName.getText().toString();
362+
String password = mPassword.getText().toString();
363363
getApp().setEmail(username);
364364
getServices()
365365
.login(username, password)

app/src/main/java/com/zulip/android/activities/RecyclerMessageAdapter.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -241,7 +241,7 @@ else if (getItem(position) instanceof Integer && (Integer) getItem(position) ==
241241
*/
242242
public boolean addOldMessage(Message message, int messageAndHeadersCount, StringBuilder lastHolderId) {
243243
if (!lastHolderId.toString().equals(message.getIdForHolder()) || lastHolderId.toString().equals("")) {
244-
MessageHeaderParent messageHeaderParent = new MessageHeaderParent((message.getStream() == null) ? null : message.getStream().getName(), message.getSubject(), message.getIdForHolder());
244+
MessageHeaderParent messageHeaderParent = new MessageHeaderParent((message.getStream() == null) ? null : message.getStream().getName(), message.getSubject(), message.getIdForHolder(), message);
245245
messageHeaderParent.setMessageType(message.getType());
246246
messageHeaderParent.setDisplayRecipent(message.getDisplayRecipient(zulipApp));
247247
if (message.getType() == MessageType.STREAM_MESSAGE) {
@@ -281,7 +281,7 @@ public void addNewMessage(Message message) {
281281
}
282282
if (item == null) {
283283
item = new MessageHeaderParent((message.getStream() == null) ? null :
284-
message.getStream().getName(), message.getSubject(), message.getIdForHolder());
284+
message.getStream().getName(), message.getSubject(), message.getIdForHolder(), message);
285285
item.setMessageType(message.getType());
286286
item.setDisplayRecipent(message.getDisplayRecipient(zulipApp));
287287
if (message.getType() == MessageType.STREAM_MESSAGE)

app/src/main/java/com/zulip/android/filters/NarrowFilter.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,15 @@
11
package com.zulip.android.filters;
22

3-
import java.sql.SQLException;
4-
5-
import org.json.JSONException;
6-
73
import android.os.Parcelable;
84

95
import com.j256.ormlite.stmt.Where;
106
import com.zulip.android.models.Message;
117
import com.zulip.android.models.Stream;
128

9+
import org.json.JSONException;
10+
11+
import java.sql.SQLException;
12+
1313
/**
1414
* A narrow that can fetch results from the local cache or server.
1515
*/

app/src/main/java/com/zulip/android/filters/NarrowFilterAllPMs.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -95,4 +95,13 @@ public String getJsonFilter() throws JSONException {
9595
ret.put(new JSONArray(Arrays.asList("is", "private")));
9696
return ret.toString();
9797
}
98+
99+
@Override
100+
public String toString() {
101+
try {
102+
return getJsonFilter();
103+
} catch (JSONException e) {
104+
return null;
105+
}
106+
}
98107
}

app/src/main/java/com/zulip/android/filters/NarrowFilterPM.java

Lines changed: 18 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,5 @@
11
package com.zulip.android.filters;
22

3-
import java.sql.SQLException;
4-
import java.util.ArrayList;
5-
import java.util.Arrays;
6-
import java.util.List;
7-
8-
import org.json.JSONArray;
9-
import org.json.JSONException;
10-
113
import android.os.Parcel;
124
import android.os.Parcelable;
135
import android.text.TextUtils;
@@ -20,6 +12,14 @@
2012
import com.zulip.android.models.Person;
2113
import com.zulip.android.models.Stream;
2214

15+
import org.json.JSONArray;
16+
import org.json.JSONException;
17+
18+
import java.sql.SQLException;
19+
import java.util.ArrayList;
20+
import java.util.Arrays;
21+
import java.util.List;
22+
2323
public class NarrowFilterPM implements NarrowFilter {
2424
private List<Person> people;
2525
private String recipientString;
@@ -67,7 +67,7 @@ public Where<Message, Object> modWhere(Where<Message, Object> where)
6767

6868
@Override
6969
public boolean matches(Message msg) {
70-
return msg.getType() == MessageType.PRIVATE_MESSAGE && msg.getRawRecipients().equals(recipientString);
70+
return msg.getType() == MessageType.PRIVATE_MESSAGE;
7171
}
7272

7373
@Override
@@ -108,4 +108,13 @@ public String getJsonFilter() throws JSONException {
108108
new JSONArray(Arrays.asList("pm-with",
109109
TextUtils.join(",", emails)))).toString();
110110
}
111+
112+
@Override
113+
public String toString() {
114+
try {
115+
return getJsonFilter();
116+
} catch (JSONException e) {
117+
return null;
118+
}
119+
}
111120
}

app/src/main/java/com/zulip/android/filters/NarrowFilterSearch.java

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,8 @@ public Where<Message, Object> modWhere(Where<Message, Object> where)
4848

4949
@Override
5050
public boolean matches(Message msg) {
51-
return msg.getContent().toLowerCase().contains(query.toLowerCase());
51+
//api matching for us
52+
return true;
5253
}
5354

5455
@Override
@@ -78,6 +79,15 @@ public String getJsonFilter() throws JSONException {
7879
return filter.toString();
7980
}
8081

82+
@Override
83+
public String toString() {
84+
try {
85+
return getJsonFilter();
86+
} catch (JSONException e) {
87+
return null;
88+
}
89+
}
90+
8191
@Override
8292
public int describeContents() {
8393
return 0;

app/src/main/java/com/zulip/android/filters/NarrowFilterStream.java

Lines changed: 15 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,5 @@
11
package com.zulip.android.filters;
22

3-
import java.sql.SQLException;
4-
import java.util.Arrays;
5-
6-
import org.json.JSONArray;
7-
import org.json.JSONException;
8-
93
import android.os.Parcel;
104
import android.os.Parcelable;
115

@@ -16,6 +10,12 @@
1610
import com.zulip.android.models.MessageType;
1711
import com.zulip.android.models.Stream;
1812

13+
import org.json.JSONArray;
14+
import org.json.JSONException;
15+
16+
import java.sql.SQLException;
17+
import java.util.Arrays;
18+
1919
public class NarrowFilterStream implements NarrowFilter {
2020
private Stream stream;
2121
private String subject;
@@ -61,6 +61,15 @@ public Where<Message, Object> modWhere(Where<Message, Object> where)
6161
return where;
6262
}
6363

64+
@Override
65+
public String toString() {
66+
try {
67+
return getJsonFilter();
68+
} catch (JSONException e) {
69+
return null;
70+
}
71+
}
72+
6473
@Override
6574
public boolean matches(Message msg) {
6675
return msg.getType() == MessageType.STREAM_MESSAGE

0 commit comments

Comments
 (0)