package com.app.sample.fchat.data; import android.content.Context; import com.app.sample.fchat.model.ChatMessage; import com.app.sample.fchat.model.Friend; import com.app.sample.fchat.util.Constants; import com.google.firebase.database.DataSnapshot; import java.util.ArrayList; import java.util.List; import static com.app.sample.fchat.util.Constants.NODE_IS_READ; import static com.app.sample.fchat.util.Constants.NODE_NAME; import static com.app.sample.fchat.util.Constants.NODE_PHOTO; import static com.app.sample.fchat.util.Constants.NODE_RECEIVER_ID; import static com.app.sample.fchat.util.Constants.NODE_RECEIVER_NAME; import static com.app.sample.fchat.util.Constants.NODE_RECEIVER_PHOTO; import static com.app.sample.fchat.util.Constants.NODE_SENDER_ID; import static com.app.sample.fchat.util.Constants.NODE_SENDER_NAME; import static com.app.sample.fchat.util.Constants.NODE_SENDER_PHOTO; import static com.app.sample.fchat.util.Constants.NODE_TEXT; import static com.app.sample.fchat.util.Constants.NODE_TIMESTAMP; import static com.app.sample.fchat.util.Constants.NODE_USER_ID; /** * Created by Bibaswann on 23-06-2017. */ public class ParseFirebaseData { private SettingsAPI set; public ParseFirebaseData(Context context) { set = new SettingsAPI(context); } public ArrayList<Friend> getAllUser(DataSnapshot dataSnapshot) { ArrayList<Friend> frnds = new ArrayList<>(); String name = null, id = null, photo = null; for (DataSnapshot data : dataSnapshot.getChildren()) { name = data.child(NODE_NAME).getValue().toString(); id = data.child(NODE_USER_ID).getValue().toString(); photo = data.child(NODE_PHOTO).getValue().toString(); if (!set.readSetting(Constants.PREF_MY_ID).equals(id)) { frnds.add(new Friend(id, name, photo)); } } return frnds; } public List<ChatMessage> getMessagesForSingleUser(DataSnapshot dataSnapshot) { List<ChatMessage> chats = new ArrayList<>(); String text = null, msgTime = null, senderId = null, senderName = null, senderPhoto = null, receiverId = null, receiverName = null, receiverPhoto = null; Boolean read = Boolean.TRUE; for (DataSnapshot data : dataSnapshot.getChildren()) { text = data.child(NODE_TEXT).getValue().toString(); msgTime = data.child(NODE_TIMESTAMP).getValue().toString(); senderId = data.child(NODE_SENDER_ID).getValue().toString(); senderName = data.child(NODE_SENDER_NAME).getValue().toString(); senderPhoto = data.child(NODE_SENDER_PHOTO).getValue().toString(); receiverId = data.child(NODE_RECEIVER_ID).getValue().toString(); receiverName = data.child(NODE_RECEIVER_NAME).getValue().toString(); receiverPhoto = data.child(NODE_RECEIVER_PHOTO).getValue().toString(); //Node isRead is added later, may be null read = data.child(NODE_IS_READ).getValue() == null || Boolean.parseBoolean(data.child(NODE_IS_READ).getValue().toString()); chats.add( new ChatMessage(text, msgTime, receiverId, receiverName, receiverPhoto, senderId, senderName, senderPhoto, read)); } return chats; } public ArrayList<ChatMessage> getAllLastMessages(DataSnapshot dataSnapshot) { // TODO: 11/09/18 Return only last messages of every conversation current user is // involved in ArrayList<ChatMessage> lastChats = new ArrayList<>(); ArrayList<ChatMessage> tempMsgList; long lastTimeStamp; String text = null, msgTime = null, senderId = null, senderName = null, senderPhoto = null, receiverId = null, receiverName = null, receiverPhoto = null; Boolean read = Boolean.TRUE; for (DataSnapshot wholeChatData : dataSnapshot.getChildren()) { tempMsgList = new ArrayList<>(); lastTimeStamp = 0; for (DataSnapshot data : wholeChatData.getChildren()) { msgTime = data.child(NODE_TIMESTAMP).getValue().toString(); if (Long.parseLong(msgTime) > lastTimeStamp) { lastTimeStamp = Long.parseLong(msgTime); } text = data.child(NODE_TEXT).getValue().toString(); senderId = data.child(NODE_SENDER_ID).getValue().toString(); senderName = data.child(NODE_SENDER_NAME).getValue().toString(); senderPhoto = data.child(NODE_SENDER_PHOTO).getValue().toString(); receiverId = data.child(NODE_RECEIVER_ID).getValue().toString(); receiverName = data.child(NODE_RECEIVER_NAME).getValue().toString(); receiverPhoto = data.child(NODE_RECEIVER_PHOTO).getValue().toString(); //Node isRead is added later, may be null read = data.child(NODE_IS_READ).getValue() == null || Boolean.parseBoolean(data.child(NODE_IS_READ).getValue().toString()); tempMsgList.add( new ChatMessage(text, msgTime, receiverId, receiverName, receiverPhoto, senderId, senderName, senderPhoto, read)); } for (ChatMessage oneTemp : tempMsgList) { if ((set.readSetting(Constants.PREF_MY_ID).equals(oneTemp.getReceiver().getId())) || (set.readSetting("myid").equals(oneTemp.getSender().getId()))) { if (oneTemp.getTimestamp().equals(String.valueOf(lastTimeStamp))) { lastChats.add(oneTemp); } } } } return lastChats; } public ArrayList<ChatMessage> getAllUnreadReceivedMessages(DataSnapshot dataSnapshot) { ArrayList<ChatMessage> lastChats = new ArrayList<>(); ArrayList<ChatMessage> tempMsgList; long lastTimeStamp; String text, msgTime, senderId, senderName, senderPhoto, receiverId, receiverName, receiverPhoto; Boolean read; for (DataSnapshot wholeChatData : dataSnapshot.getChildren()) { tempMsgList = new ArrayList<>(); lastTimeStamp = 0; for (DataSnapshot data : wholeChatData.getChildren()) { msgTime = data.child(NODE_TIMESTAMP).getValue().toString(); if (Long.parseLong(msgTime) > lastTimeStamp) { lastTimeStamp = Long.parseLong(msgTime); } text = data.child(NODE_TEXT).getValue().toString(); senderId = data.child(NODE_SENDER_ID).getValue().toString(); senderName = data.child(NODE_SENDER_NAME).getValue().toString(); senderPhoto = data.child(NODE_SENDER_PHOTO).getValue().toString(); receiverId = data.child(NODE_RECEIVER_ID).getValue().toString(); receiverName = data.child(NODE_RECEIVER_NAME).getValue().toString(); receiverPhoto = data.child(NODE_RECEIVER_PHOTO).getValue().toString(); //Node isRead is added later, may be null read = data.child(NODE_IS_READ).getValue() == null || Boolean.parseBoolean(data.child(NODE_IS_READ).getValue().toString()); tempMsgList.add( new ChatMessage(text, msgTime, receiverId, receiverName, receiverPhoto, senderId, senderName, senderPhoto, read)); } for (ChatMessage oneTemp : tempMsgList) { if ((set.readSetting(Constants.PREF_MY_ID).equals(oneTemp.getReceiver().getId()))) { if (oneTemp.getTimestamp().equals(String.valueOf(lastTimeStamp)) && !oneTemp.isRead()) { lastChats.add(oneTemp); } } } } return lastChats; } private String encodeText(String msg) { return msg.replace(",", "#comma#").replace("{", "#braceopen#").replace("}", "#braceclose#") .replace("=", "#equals#"); } private String decodeText(String msg) { return msg.replace("#comma#", ",").replace("#braceopen#", "{").replace("#braceclose#", "}") .replace("#equals#", "="); } }