Beispiel #1
0
        public MainPageViewModel(INavigationService navigationService, IPageDialogService pageDialogService, IGoogleService googleService, IFacebookService facebookService, IAppleService appleService)
            : base(navigationService)
        {
            _pageDialogService = pageDialogService;
            _googleService     = googleService;
            _facebookService   = facebookService;
            _appleService      = appleService;

            _multiFactorService = new MultiFactorService(this);

            Title = "Main Page";

            _registration = CrossFirebaseAuth.Current.Instance.AddAuthStateChangedListener((auth) =>
            {
                _isSignedIn.Value = auth.CurrentUser != null;
            });

            ShowUserCommand = _isSignedIn.ToAsyncReactiveCommand();

            SignUpCommand.Subscribe(SignUp);
            SignInWithEmailAndPasswordCommand.Subscribe(SignInWithEmailAndPassword);
            SignInWithGoogleCommand.Subscribe(SignInWithGoogle);
            SignInWithTwitterCommand.Subscribe(() => SignInWithProvider("twitter.com"));
            SignInWithFacebookCommand.Subscribe(SignInWithFacebook);
            SignInWithGitHubCommand.Subscribe(() => SignInWithProvider("github.com"));
            SignInWithYahooCommand.Subscribe(() => SignInWithProvider("yahoo.com"));
            SignInWithMicrosoftCommand.Subscribe(() => SignInWithProvider("microsoft.com"));
            SignInWithAppleCommand.Subscribe(SignInWithApple);
            SignInWithPhoneNumberCommand.Subscribe(SignInWithPhoneNumber);
            SignInAnonymouslyCommand.Subscribe(SignInSignInAnonymously);
            ShowUserCommand.Subscribe(async() => await NavigationService.NavigateAsync <UserPageViewModel>());
        }
Beispiel #2
0
        public MainPageViewModel(INavigationService navigationService, IPageDialogService pageDialogService, IAuthService authService)
            : base(navigationService)
        {
            _pageDialogService = pageDialogService;
            _authService       = authService;

            Title = "Main Page";

            _registration = CrossFirebaseAuth.Current.Instance.AddAuthStateChangedListener((auth) =>
            {
                _isSignedIn.Value = auth.CurrentUser != null;
            });

            ShowUserCommand = _isSignedIn.ToAsyncReactiveCommand();

            SignUpCommand.Subscribe(SignUp);
            SignInWithEmailAndPasswordCommand.Subscribe(SignInWithEmailAndPassword);
            SignInWithGoogleCommand.Subscribe(SignInWithGoogle);
            SignInWithTwitterCommand.Subscribe(SignInWithTwitter);
            SignInWithFacebookCommand.Subscribe(SignInWithFacebook);
            SignInWithGitHubCommand.Subscribe(SignInWithGitHub);
            SignInWithPhoneNumberCommand.Subscribe(SignInWithPhoneNumber);
            SignInAnonymouslyCommand.Subscribe(SignInSignInAnonymously);
            ShowUserCommand.Subscribe(async() => await NavigationService.NavigateAsync <UserPageViewModel>());
        }
Beispiel #3
0
        public Task <ObservableCollection <Board> > GetAllPinBoardMessage(string roomID)
        {
            TaskCompletionSource <ObservableCollection <Board> > ResultCompletionSource = new TaskCompletionSource <ObservableCollection <Board> >();
            Query query = Conn.Collection(pinBoardCollection).WhereEqualTo("roomId", roomID);

            ReatimeListener = query.AddSnapshotListener(new EventListener((Java.Lang.Object obj, FirebaseFirestoreException e) => {
                if (e != null)
                {
                    ResultCompletionSource.SetException(e);
                }
                else
                {
                    QuerySnapshot querySnapshot = (QuerySnapshot)obj;
                    if (!querySnapshot.IsEmpty)
                    {
                        foreach (DocumentChange documentChange in querySnapshot.DocumentChanges)
                        {
                            if (documentChange.GetType() == DocumentChange.Type.Added)
                            {
                                var temp               = documentChange.Document.Data;
                                var BoardMessageId     = documentChange.Document.Id;
                                var Attachment         = (string)temp["attachment"];
                                var AttachmentFileName = (string)temp["attachmentFileName"];
                                var Description        = (string)temp["description"];
                                var RoomId             = (string)temp["roomId"];
                                var Title              = (string)temp["title"];
                                var UserEmail          = (string)temp["userEmail"];
                                var UserName           = (string)temp["userName"];
                                var dateTime           = (Java.Util.Date)temp["dateTime"];
                                Attachment attachment  = new Attachment(AttachmentFileName, Attachment);
                                User user              = new User(UserEmail, UserName);


                                if (AttachmentFileName.EndsWith(".jpg", StringComparison.CurrentCultureIgnoreCase) || AttachmentFileName.EndsWith(".png", StringComparison.CurrentCultureIgnoreCase))
                                {
                                    attachment.Thumbnail = attachment.AttachmentUri;
                                }
                                else if (AttachmentFileName.EndsWith(".mp4", StringComparison.CurrentCultureIgnoreCase))
                                {
                                    attachment.Thumbnail = "round_movie_black_48.png";
                                }
                                else
                                {
                                    attachment.Thumbnail = "round_insert_drive_file_black_48.png";
                                }

                                board.Add(new Board(BoardMessageId, Title, Description, attachment, user, JavaTimeToCSTime(dateTime)));
                            }
                        }
                        ResultCompletionSource.TrySetResult(board);
                    }
                    else
                    {
                        ResultCompletionSource.TrySetResult(null);
                    }
                }
            }));
            return(ResultCompletionSource.Task);
        }
Beispiel #4
0
 public void ClearAllRooms()
 {
     if (ReatimeListener != null)
     {
         ReatimeListener.Remove();
         ReatimeListener = null;
     }
     this.Rooms = new ObservableCollection <object>();
 }
Beispiel #5
0
 public void ClearMessages()
 {
     if (ReatimeListener != null)
     {
         ReatimeListener.Remove();
         ReatimeListener = null;
     }
     this.messages = new ObservableCollection <Message>();
 }
Beispiel #6
0
 public void ClearAllMoments()
 {
     if (ReatimeListener != null)
     {
         ReatimeListener.Remove();
         ReatimeListener = null;
     }
     this.Moments = new ObservableCollection <Moment>();
 }
Beispiel #7
0
 public void ClearAllPinBoardMessage()
 {
     if (ReatimeListener != null)
     {
         ReatimeListener.Remove();
         ReatimeListener = null;
     }
     this.board = new ObservableCollection <Board>();
 }
Beispiel #8
0
 private static void MonitorOwnUserProfile(Firebase.CloudFirestore.DocumentReference refer)
 {
     if (_listener != null)
     {
         _listener.Remove();
     }
     _listener = refer.AddSnapshotListener((changedSnapshot, error) =>
     {
         var data = changedSnapshot.Data[new NSString("isNeedNotification")] as NSNumber;
         if (data.BoolValue)
         {
             var userProfile = LoadSaveData <UserProfile>(changedSnapshot.Data);
             App.NotifyCloudDataChanged(userProfile);
         }
     });
 }
        // Get notes data to be shown in TableView
        async Task GetNotes()
        {
            // Stop listening for changes from Firebase Cloud Firestore
            pendingChangesListener?.Remove();
            pendingChangesListener?.Dispose();
            pendingChangesListener = null;

            notes.Clear();

            var notesQuery = await notesCollection.OrderedBy("lastModified", true)
                             .GetDocumentsAsync();

            foreach (var note in notesQuery.Documents)
            {
                // When you create a new note, sometimes the data hasn't
                // been written in Firestore yet, so, we keep listening
                // until the data is written.
                if (note.Metadata.HasPendingWrites)
                {
                    pendingChangesListener = note.Reference.AddSnapshotListener(DataSavedOnFirestore);
                    return;
                }

                var data         = note.Data;
                var title        = data ["title"]?.ToString();
                var content      = data ["content"]?.ToString();
                var created      = data ["created"] as NSDate;
                var lastModified = data ["lastModified"] as NSDate;

                notes.Add(new Note {
                    Id           = note.Id,
                    Title        = title,
                    Content      = content,
                    Created      = AppDelegate.GetFormattedDate(created),
                    LastModified = AppDelegate.GetFormattedDate(lastModified)
                });
            }

            InvokeOnMainThread(() => TableView.ReloadData());
        }
Beispiel #10
0
        public Task <ObservableCollection <Moment> > GetMomentsList()
        {
            TaskCompletionSource <ObservableCollection <Moment> > ResultCompletionSource = new TaskCompletionSource <ObservableCollection <Moment> >();

            Java.Util.Calendar cal             = Java.Util.Calendar.Instance;
            Java.Util.Date     CurrentDateTime = cal.Time;
            cal.Add(Java.Util.Calendar.Date, -1);
            Java.Util.Date YesterdayDateTime = cal.Time;

            Debug.Write(CurrentDateTime);
            Debug.Write(YesterdayDateTime);

            var Path = Conn.Collection(momentCollection)
                       .WhereEqualTo("receivers." + UserSetting.UserEmail.Replace(".", ":"), false)
                       .WhereGreaterThanOrEqualTo("dateTime", YesterdayDateTime)
                       .WhereLessThanOrEqualTo("dateTime", CurrentDateTime)
                       .OrderBy("dateTime");

            ReatimeListener = Path.AddSnapshotListener(new EventListener((Java.Lang.Object obj, FirebaseFirestoreException e) => {
                if (e != null)
                {
                    Debug.Write(e.Message);
                    ResultCompletionSource.TrySetResult(null);
                    return;
                }
                else
                {
                    QuerySnapshot querySnapshot = (QuerySnapshot)obj;
                    if (!querySnapshot.IsEmpty)
                    {
                        foreach (DocumentChange documentChange in querySnapshot.DocumentChanges)
                        {
                            if (documentChange.GetType() == DocumentChange.Type.Added)
                            {
                                var temp         = documentChange.Document.Data;
                                var Id           = documentChange.Document.Id;
                                var Attachment   = (string)temp["attachment"];
                                var DateTime     = (Java.Util.Date)temp["dateTime"];
                                var Description  = (string)temp["description"];
                                var Sender       = (string)temp["sender"];
                                var SenderName   = (string)temp["senderName"];
                                string thumbnail = null;
                                if (Attachment != null)
                                {
                                    if (Attachment.Contains("jpg", StringComparison.OrdinalIgnoreCase) || Attachment.Contains("png", StringComparison.OrdinalIgnoreCase))
                                    {
                                        thumbnail = Attachment;
                                    }
                                    else
                                    {
                                        thumbnail = "round_movie_black_48.png";
                                    }
                                }
                                Attachment attachment    = new Attachment();
                                attachment.AttachmentUri = Attachment;
                                attachment.Thumbnail     = thumbnail;
                                Moments.Add(new Moment(Id, Sender, SenderName, JavaTimeToCSTime(DateTime), Description, attachment));
                            }
                        }
                    }

                    ResultCompletionSource.TrySetResult(Moments);
                }
            }));
            return(ResultCompletionSource.Task);
        }
Beispiel #11
0
        public Task <ObservableCollection <object> > GetAllRoom()
        {
            TaskCompletionSource <ObservableCollection <object> > ResultCompletionSource = new TaskCompletionSource <ObservableCollection <object> >();

            Query query = Conn.Collection("roomList").WhereEqualTo("users." + UserSetting.UserEmail.Replace(".", ":"), true);

            ReatimeListener = query.AddSnapshotListener(new EventListener(async(Java.Lang.Object obj, FirebaseFirestoreException e) =>
            {
                if (e != null)
                {
                    Debug.Write("Error In Gett All Room : " + e.Message);

                    return;
                }
                else
                {
                    QuerySnapshot querySnapshot = (QuerySnapshot)obj;
                    if (!querySnapshot.IsEmpty)
                    {
                        foreach (DocumentChange documentChange in querySnapshot.DocumentChanges)
                        {
                            if (documentChange.GetType() == DocumentChange.Type.Added)
                            {
                                var temp       = documentChange.Document.Data;
                                var Id         = documentChange.Document.Id;
                                var image      = (string)temp["image"];
                                var isDestruct = (bool)temp["isDestruct"];
                                var roomTitle  = (string)temp["roomTitle"];
                                var users      = (Android.Runtime.JavaDictionary)temp["users"];

                                string admin;
                                var isGroup = (bool)temp["isGroup"];

                                if (isGroup)
                                {
                                    admin = (string)temp["admin"];

                                    ObservableCollection <User> GroupMembers = new ObservableCollection <User>();

                                    foreach (string key in users.Keys)
                                    {
                                        GroupMembers.Add(new User(key.Replace(":", ".")));
                                    }
                                    Rooms.Add(new GroupChatRoom(Id, roomTitle, admin, GroupMembers, isDestruct));
                                }
                                else
                                {
                                    string RecipientEmail = null;
                                    if (users.Keys.Count == 2)
                                    {
                                        foreach (string key in users.Keys)
                                        {
                                            if (!key.Replace(":", ".").Equals(UserSetting.UserEmail))
                                            {
                                                RecipientEmail = key.Replace(":", ".");
                                            }
                                        }
                                    }
                                    string RecipientName = await GetUsername(RecipientEmail);
                                    Rooms.Add(new IndividualChatRoom(Id, RecipientName, new User(RecipientEmail, RecipientName), isDestruct));
                                }
                            }
                        }
                        ResultCompletionSource.TrySetResult(Rooms);
                    }
                    else
                    {
                        ResultCompletionSource.SetResult(null);
                    }
                }
            }));

            return(ResultCompletionSource.Task);
        }
Beispiel #12
0
        public Task <ObservableCollection <Message> > GetMessage(string roomId)
        {
            TaskCompletionSource <ObservableCollection <Message> > ResultCompletionSource =
                new TaskCompletionSource <ObservableCollection <Message> >();

            ReatimeListener = Conn.Collection("messages").WhereEqualTo("roomId", roomId).OrderBy("sendDateTime")
                              .AddSnapshotListener(new EventListener((Java.Lang.Object obj, FirebaseFirestoreException exception) =>
            {
                if (exception == null)
                {
                    QuerySnapshot querySnapshot = (QuerySnapshot)obj;
                    if (!querySnapshot.IsEmpty)
                    {
                        foreach (DocumentChange documentChange in querySnapshot.DocumentChanges)
                        {
                            if (documentChange.GetType() == DocumentChange.Type.Added)
                            {
                                var temp        = documentChange.Document.Data;
                                var tempMessage = InitialMessage(documentChange.Document.Id, temp);
                                messages.Add(tempMessage);

                                if (tempMessage.IsRead != null
                                    &&
                                    !tempMessage.IsRead.ContainsKey(UserSetting.UserEmail.Replace(".", ":")))
                                {
                                    SetRead(tempMessage);
                                }
                            }
                            else if (documentChange.GetType() == DocumentChange.Type.Modified)
                            {
                                messages[documentChange.OldIndex] = InitialMessage(documentChange.Document.Id, documentChange.Document.Data);
                            }
                            else if (documentChange.GetType() == DocumentChange.Type.Removed)
                            {
                                messages.RemoveAt(documentChange.OldIndex);
                            }
                        }

                        foreach (Message tempMessage in messages)
                        {
                            if (tempMessage.IsRead != null)
                            {
                                var tempStatus = tempMessage.IsRead.ContainsKey(UserSetting.UserEmail.Replace(".", ":"));
                                if (tempStatus && tempMessage.IsRead[UserSetting.UserEmail.Replace(".", ":")])
                                {
                                    var indexOf                          = messages.IndexOf(tempMessage);
                                    messages[indexOf].Text               = "--This message was destructed--";
                                    messages[indexOf].AttachmentUri      = "";
                                    messages[indexOf].AttachmentFileName = "";
                                }
                            }
                        }
                        ResultCompletionSource.TrySetResult(messages);
                    }
                    else
                    {
                        ResultCompletionSource.TrySetResult(null);
                    }
                }
            }));
            return(ResultCompletionSource.Task);
        }