Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package ua.leomovskii.demomessenger;
- import com.google.firebase.firestore.*;
- import com.google.android.gms.tasks.Task;
- import java.util.*;
- public class Database {
- private static final FirebaseFirestore db = FirebaseFirestore.getInstance();
- private static final CollectionReference messages = db.collection("messages");
- private static ListenerRegistration messagesListener;
- public interface OnMessagesUpdatedListener {
- void onMessagesUpdated(List<MessageModel> messages);
- void onError(String error);
- }
- public static Task<MessageModel> TryGetMessage(int id) {
- return messages.whereEqualTo("id", id).limit(1).get()
- .continueWith(task -> {
- if (!task.getResult().isEmpty()) {
- return task.getResult().getDocuments().get(0).toObject(MessageModel.class);
- }
- return null;
- });
- }
- public static Task<List<MessageModel>> GetAllMessages() {
- return messages.orderBy("timestamp", Query.Direction.ASCENDING).get()
- .continueWith(task -> {
- List<MessageModel> list = new ArrayList<>();
- for (DocumentSnapshot doc : task.getResult()) {
- MessageModel m = doc.toObject(MessageModel.class);
- if (m != null) {
- m.documentId = doc.getId();
- list.add(m);
- }
- }
- return list;
- });
- }
- public static void listenForAddedMessages(OnMessagesUpdatedListener callback) {
- if (messagesListener != null) {
- messagesListener.remove();
- }
- messagesListener = messages.orderBy("timestamp", Query.Direction.ASCENDING)
- .addSnapshotListener((snap, e) -> {
- if (e != null) {
- callback.onError("Fetch messages error: " + e.getMessage());
- return;
- }
- if (snap != null) {
- List<MessageModel> newMessages = new ArrayList<>();
- for (DocumentChange dc : snap.getDocumentChanges()) {
- if (dc.getType() == DocumentChange.Type.ADDED) {
- MessageModel m = dc.getDocument().toObject(MessageModel.class);
- if (m != null) {
- m.documentId = dc.getDocument().getId();
- newMessages.add(m);
- }
- }
- }
- if (!newMessages.isEmpty()) {
- callback.onMessagesUpdated(newMessages);
- }
- }
- });
- }
- public static Task<Void> SendMessage(String text, String userId) {
- MessageModel m = new MessageModel();
- m.text = text;
- m.userId = userId;
- m.timestamp = System.currentTimeMillis();
- return messages.add(m).continueWith(task -> null);
- }
- public static void stopListening() {
- if (messagesListener != null) {
- messagesListener.remove();
- messagesListener = null;
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment