leomovskii

Database

Apr 19th, 2026
62
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 3.37 KB | None | 0 0
  1. package ua.leomovskii.demomessenger;
  2.  
  3. import com.google.firebase.firestore.*;
  4. import com.google.android.gms.tasks.Task;
  5. import java.util.*;
  6.  
  7. public class Database {
  8.  
  9.     private static final FirebaseFirestore db = FirebaseFirestore.getInstance();
  10.     private static final CollectionReference messages = db.collection("messages");
  11.  
  12.     private static ListenerRegistration messagesListener;
  13.  
  14.     public interface OnMessagesUpdatedListener {
  15.         void onMessagesUpdated(List<MessageModel> messages);
  16.         void onError(String error);
  17.     }
  18.  
  19.     public static Task<MessageModel> TryGetMessage(int id) {
  20.         return messages.whereEqualTo("id", id).limit(1).get()
  21.                 .continueWith(task -> {
  22.                     if (!task.getResult().isEmpty()) {
  23.                         return task.getResult().getDocuments().get(0).toObject(MessageModel.class);
  24.                     }
  25.                     return null;
  26.                 });
  27.     }
  28.  
  29.     public static Task<List<MessageModel>> GetAllMessages() {
  30.         return messages.orderBy("timestamp", Query.Direction.ASCENDING).get()
  31.                 .continueWith(task -> {
  32.                     List<MessageModel> list = new ArrayList<>();
  33.                     for (DocumentSnapshot doc : task.getResult()) {
  34.                         MessageModel m = doc.toObject(MessageModel.class);
  35.                         if (m != null) {
  36.                             m.documentId = doc.getId();
  37.                             list.add(m);
  38.                         }
  39.                     }
  40.                     return list;
  41.                 });
  42.     }
  43.  
  44.     public static void listenForAddedMessages(OnMessagesUpdatedListener callback) {
  45.         if (messagesListener != null) {
  46.             messagesListener.remove();
  47.         }
  48.  
  49.         messagesListener = messages.orderBy("timestamp", Query.Direction.ASCENDING)
  50.                 .addSnapshotListener((snap, e) -> {
  51.                     if (e != null) {
  52.                         callback.onError("Fetch messages error: " + e.getMessage());
  53.                         return;
  54.                     }
  55.  
  56.                     if (snap != null) {
  57.                         List<MessageModel> newMessages = new ArrayList<>();
  58.  
  59.                         for (DocumentChange dc : snap.getDocumentChanges()) {
  60.                             if (dc.getType() == DocumentChange.Type.ADDED) {
  61.                                 MessageModel m = dc.getDocument().toObject(MessageModel.class);
  62.                                 if (m != null) {
  63.                                     m.documentId = dc.getDocument().getId();
  64.                                     newMessages.add(m);
  65.                                 }
  66.                             }
  67.                         }
  68.  
  69.                         if (!newMessages.isEmpty()) {
  70.                             callback.onMessagesUpdated(newMessages);
  71.                         }
  72.                     }
  73.                 });
  74.     }
  75.  
  76.     public static Task<Void> SendMessage(String text, String userId) {
  77.         MessageModel m = new MessageModel();
  78.         m.text = text;
  79.         m.userId = userId;
  80.         m.timestamp = System.currentTimeMillis();
  81.  
  82.         return messages.add(m).continueWith(task -> null);
  83.     }
  84.  
  85.     public static void stopListening() {
  86.         if (messagesListener != null) {
  87.             messagesListener.remove();
  88.             messagesListener = null;
  89.         }
  90.     }
  91. }
Advertisement
Add Comment
Please, Sign In to add comment