Skip to content

Instantly share code, notes, and snippets.

@Gryzor
Last active March 25, 2020 16:44
Show Gist options
  • Save Gryzor/f9c80fdd60f9e1e2cc9b7e2e75e31b84 to your computer and use it in GitHub Desktop.
Save Gryzor/f9c80fdd60f9e1e2cc9b7e2e75e31b84 to your computer and use it in GitHub Desktop.
class Whatever {
@Nullable
private MessagesListener listener;
@NonNull
private ArrayList<String> localMessages = new ArrayList<>();
public void setListener(@Nullable MessageListener callback) {
listener = callback;
}
public void fetchMessageListFor(String activeUser) {
ParseQuery<ParseObject> query1 = new ParseQuery<ParseObject>("Message");
query1.whereEqualTo("sender",ParseUser.getCurrentUser().getUsername());
query1.whereEqualTo("recepient",activeUser);
ParseQuery<ParseObject> query2 = new ParseQuery<ParseObject>("Message");
query2.whereEqualTo("recepient",ParseUser.getCurrentUser().getUsername());
query2.whereEqualTo("sender",activeUser);
List<ParseQuery<ParseObject>> queries = new ArrayList<>();
queries.add(query1);
queries.add(query2);
ParseQuery<ParseObject> query = ParseQuery.or(queries);
query.findInBackground(new FindCallback<ParseObject>() {
@Override
public void done(List<ParseObject> objects, ParseException e) {
Log.d("XX", "Fetch: The size of this.localMessages is: " + this.localMessages.size());
ArrayList<String> messages = new ArrayList<>();
if(e == null && objects.size() > 0 ){
for(ParseObject object : objects){
String messageContenct = object.getString("message");
if(! object.getString("sender").equals(ParseUser.getCurrentUser().getUsername()) ){
messageContenct = ">"+messageContenct;
}
messages.add(messageContenct);
}
// Before notifying, update the local cache, beacuse onNewMessage needs it.
this.localMessages.clear();
this.localMessages.addAll(messages); //maybe use a different name for the "local" messages
if (listener != null) {
listener.onMessageListAvailable(messages); // pass the new local list, but keep "this.messsages"
}
}
}
});
}
public void onNewMessage(String sender, recipient, message) {
final ParseObject message = new ParseObject("Message");
message.put("sender" , sender);
message.put("recepient", recipient);
message.put("message", message);
message.saveInBackground(new SaveCallback() {
@Override
public void done(ParseException e) {
if (e == null) {
Log.d("XX", "OnNew: The size of this.localMessages is: " + this.localMessages.size());
localMessages.add(messageContent);
if (listener != null) {
listener.onMessageListAvailable(localMessages);
}
}
}
});
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment