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); }
private void SetChatRoomType(object objChatRoom) { if (objChatRoom.GetType() == typeof(IndividualChatRoom)) { ChatRoom = (IndividualChatRoom)objChatRoom; } else { ChatRoom = (GroupChatRoom)objChatRoom; GroupChatRoom = (GroupChatRoom)objChatRoom; } }
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)); } }
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); }
public AddPinBoardMessage(GroupChatRoom groupChatRoom) { InitializeComponent(); BindingContext = VM = new PinBoardViewModel(groupChatRoom); }
public PollView(GroupChatRoom groupChatRoom) { InitializeComponent(); VM = new PollViewModel(groupChatRoom); BindingContext = VM; }
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"); } }); }
public GroupChatContents(GroupChatRoom groupChatRoom) { InitializeComponent(); this.BindingContext = VM = new ChatContentsViewModel(groupChatRoom); this.Title = groupChatRoom.RoomTilte; }
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"); } }); }