Пример #1
0
        public Task <object> SearchChatRoomById(string roomId)
        {
            ChatRoom chatRoom = null;
            TaskCompletionSource <object> ResultCompletionSource = new TaskCompletionSource <object>();

            Conn.Collection("roomList").Document(roomId).Get().AddOnCompleteListener(new OnCompleteEventHandleListener(async(Android.Gms.Tasks.Task obj) => {
                if (obj.IsSuccessful)
                {
                    DocumentSnapshot documentSnapshot = (DocumentSnapshot)obj.Result;

                    var temp       = documentSnapshot.Data;
                    var Id         = documentSnapshot.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(":", ".")));
                        }
                        chatRoom = 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);
                            chatRoom             = new IndividualChatRoom(Id, RecipientName, new User(RecipientEmail, RecipientName), isDestruct);
                        }
                    }
                }
            }));
            ResultCompletionSource.SetResult(chatRoom);
            return(ResultCompletionSource.Task);
        }
Пример #2
0
 private void SetChatRoomType(object objChatRoom)
 {
     if (objChatRoom.GetType() == typeof(IndividualChatRoom))
     {
         ChatRoom = (IndividualChatRoom)objChatRoom;
     }
     else
     {
         ChatRoom      = (GroupChatRoom)objChatRoom;
         GroupChatRoom = (GroupChatRoom)objChatRoom;
     }
 }
Пример #3
0
        public async Task CreateNewGroup()
        {
            if (string.IsNullOrWhiteSpace(RoomTitle))
            {
                await App.Current.MainPage.DisplayAlert("Something happen....", "Must have a room title.", "Ok");
            }
            else
            {
                GroupChatRoom groupChatRoom = new GroupChatRoom("", RoomTitle, UserSetting.UserEmail, InvitedFriends, false);
                var           NewGroupChat  = await DependencyService.Get <IFirebaseDatabase>().AddGroupChatRoom(groupChatRoom);

                await App.Current.MainPage.Navigation.PopToRootAsync();

                await App.Current.MainPage.Navigation.PushAsync(new GroupChatContents(NewGroupChat));
            }
        }
Пример #4
0
        public Task <GroupChatRoom> AddGroupChatRoom(GroupChatRoom groupChat)
        {
            TaskCompletionSource <GroupChatRoom> ResultCompletionSource = new TaskCompletionSource <GroupChatRoom>();
            var members = new Android.Runtime.JavaDictionary <string, Java.Lang.Object> {
                { UserSetting.UserEmail.ToLower().Replace(".", ":"), true }
            };

            foreach (User user in groupChat._Users)
            {
                members.Add(user.Email.ToLower().Replace(".", ":"), true);
            }

            var GroupChatRoom = new Dictionary <string, Java.Lang.Object> {
                { "image", null },
                { "roomTitle", groupChat.RoomTilte },
                { "admin", UserSetting.UserEmail.ToLower() },
                { "users", members },
                { "isGroup", true },
                { "isDestruct", false }
            };

            Conn.Collection("roomList").Add(GroupChatRoom)
            .AddOnCompleteListener(new OnCompleteEventHandleListener((Android.Gms.Tasks.Task task) => {
                if (task.IsSuccessful)
                {
                    DocumentReference documentReference = (DocumentReference)task.Result;
                    GroupChatRoom temp =
                        new GroupChatRoom(documentReference.Id, groupChat.RoomTilte,
                                          UserSetting.UserEmail.ToLower(), groupChat._Users, false);
                    ResultCompletionSource.SetResult(temp);
                }
                else
                {
                    ResultCompletionSource.SetResult(null);
                }
            }));
            return(ResultCompletionSource.Task);
        }
Пример #5
0
 public AddPinBoardMessage(GroupChatRoom groupChatRoom)
 {
     InitializeComponent();
     BindingContext = VM = new PinBoardViewModel(groupChatRoom);
 }
Пример #6
0
 public PollView(GroupChatRoom groupChatRoom)
 {
     InitializeComponent();
     VM             = new PollViewModel(groupChatRoom);
     BindingContext = VM;
 }
Пример #7
0
        public PollViewModel(GroupChatRoom groupChatRoom)
        {
            this.groupChatRoom = groupChatRoom;
            if (groupChatRoom.Admin.Equals(UserSetting.UserEmail))
            {
                IsAdmin = true;
                OnPropertyChanged("IsAdmin");
            }

            OnCreatePollCommand = new Command(async() => {
                Option = new ObservableCollection <SelectableData <string> >();
                if (_Poll.PollId != null)
                {
                    if (!_Poll.IsClose)
                    {
                        await App.Current.MainPage.DisplayAlert("Something wrong....", "Please close this poll first. ", "Ok");
                        return;
                    }
                }

                await App.Current.MainPage.Navigation.PushAsync(new CreatePollView(this.groupChatRoom));
            });

            OnAddOptionCommand = new Command(() =>
            {
                if (!string.IsNullOrWhiteSpace(InputOption))
                {
                    TempOption.Add(InputOption);
                }
                InputOption = string.Empty;
                OnPropertyChanged("TempOption");
                OnPropertyChanged("InputOption");
            });

            OnPostCommand = new Command(async() =>
            {
                if (string.IsNullOrWhiteSpace(StrTitle))
                {
                    await App.Current.MainPage.DisplayAlert("Title is required.", "Please entry title.", "Ok");
                    return;
                }
                else if (TempOption.Count < 2)
                {
                    await App.Current.MainPage.DisplayAlert("Option is required.", "At least 2 option is required.", "Ok");
                    return;
                }

                Poll poll  = new Poll("", groupChatRoom.RoomID, StrTitle, false, TempOption, null);
                var status = await DependencyService.Get <IFirebaseDatabase>().AddPoll(poll);
                if (status)
                {
                    await App.Current.MainPage.DisplayAlert("Done", "Poll created", "Ok");
                    await App.Current.MainPage.Navigation.PopAsync();
                    await App.Current.MainPage.Navigation.PopAsync();
                }
                else
                {
                    await App.Current.MainPage.DisplayAlert("Something wrong....", "Poll Unable to create, Please try again", "Ok");
                }
            });

            OnCheckResult = new Command(async() => {
                bool status = false;

                foreach (string VotedUser in _Poll.Result.Keys)
                {
                    if (UserSetting.UserEmail.Equals(VotedUser.Replace(":", ".")))
                    {
                        status = true;
                    }
                }

                if (!status)
                {
                    await App.Current.MainPage.DisplayAlert("Something need to do first.", "Please vote first", "Ok");
                }
                else
                {
                    string FinalResult  = "";
                    int Count           = 0;
                    string OptionResult = "";
                    foreach (string option in _Poll._Option)
                    {
                        OptionResult = option;
                        foreach (string key in _Poll.Result.Keys)
                        {
                            if (_Poll.Result[key].Equals(option))
                            {
                                Count++;
                            }
                        }
                        FinalResult += OptionResult + ": " + Count + "\n";
                        Count        = 0;
                    }

                    await App.Current.MainPage.DisplayAlert("Result", FinalResult, "Ok");
                }
            });

            OnCloseCommand = new Command(async() =>
            {
                if (_Poll.IsClose)
                {
                    await App.Current.MainPage.DisplayAlert("Something wrong....", "This Poll already closed", "Ok");
                    return;
                }

                var status = await DependencyService.Get <IFirebaseDatabase>().UpdatePollCloseStatus(_Poll.PollId);
                if (status)
                {
                    await App.Current.MainPage.DisplayAlert("Done", "The poll had been closed.", "Ok");
                    _Poll.IsClose = true;
                    IsClosed      = true;
                    IsEnablePoll  = false;
                    OnPropertyChanged("IsEnablePoll");
                    OnPropertyChanged("IsClosed");
                }
                else
                {
                    await App.Current.MainPage.DisplayAlert("Something wrong....", "Poll unable to close, Please try again.", "Ok");
                }
            });
        }
Пример #8
0
 public GroupChatContents(GroupChatRoom groupChatRoom)
 {
     InitializeComponent();
     this.BindingContext = VM = new ChatContentsViewModel(groupChatRoom);
     this.Title          = groupChatRoom.RoomTilte;
 }
Пример #9
0
        public PinBoardViewModel(GroupChatRoom groupChatRoom)
        {
            CurrentGroupChat = groupChatRoom;
            if (CurrentGroupChat.Admin.Equals(UserSetting.UserEmail))
            {
                IsAdmin = true;
            }
            else
            {
                IsAdmin = false;
            }

            OnRemoveAttachmentCommand = new Command(() => {
                RemoveAttachment();
            });

            OnAddAttachmentCommand = new Command(async() => {
                await AddAttachment();
            });

            OnAddCommand = new Command(async() =>
            {
                await App.Current.MainPage.Navigation.PushAsync(new AddPinBoardMessage(CurrentGroupChat));
            });

            OnPostCommand = new Command(async() =>
            {
                if (string.IsNullOrWhiteSpace(BoardMessageTitle))
                {
                    await App.Current.MainPage.DisplayAlert("Something wrong....", "Need a Title for this message.", "OK");
                    return;
                }


                if (!string.IsNullOrEmpty(BoardMessageAttachment.FileName))
                {
                    BoardMessageAttachment = await DependencyService.Get <IFirebaseStorage>().UploadFile(BoardMessageAttachment._FileData);
                }

                User MessageByUser = new User(UserSetting.UserEmail, UserSetting.UserName);
                Board boardMessage = new Board("", BoardMessageTitle, Description, BoardMessageAttachment, MessageByUser, new DateTime());
                var Status         = await DependencyService.Get <IFirebaseDatabase>().AddPinBoardMessage(CurrentGroupChat.RoomID, boardMessage);
                if (!Status)
                {
                    await App.Current.MainPage.DisplayAlert("Something wrong.....", "Message not able to Pin,Please try again", "OK");
                }
                else
                {
                    await App.Current.MainPage.DisplayAlert("Done", "Posted", "OK");
                    await App.Current.MainPage.Navigation.PopAsync();
                }
            });

            OnClickAttachment = new Command <string>(async(string parameter) =>
            {
                await App.Current.MainPage.Navigation.PushAsync(new WebViewAttachment(parameter));
            });

            OnContextActionCommand = new Command <string>(async(string parameter) => {
                if (!groupChatRoom.Admin.Equals(UserSetting.UserEmail))
                {
                    await App.Current.MainPage.DisplayAlert("You are not admin", "Only admin can do it", "Ok");
                    return;
                }

                var status = await DependencyService.Get <IFirebaseDatabase>().RemovePinBoardMessage(parameter);

                if (status)
                {
                    await App.Current.MainPage.DisplayAlert("Done", "Message deleted.", "Ok");
                }
                else
                {
                    await App.Current.MainPage.DisplayAlert("Something wrong ....", "Message unable to delete, Please try again.", "Ok");
                }
            });
        }