Esempio n. 1
0
        public static async Task Login(ListsViewController view, string inpEmail, string inpPassword)
        {
            var done = false;

            AppData.auth.SignInWithPassword(inpEmail, inpPassword, async(user, error) =>
            {
                if (error != null)
                {
                    CustomAlert.Alert(view, "Error Signing In", error.UserInfo.Description);
                    done = true;
                    return;
                }

                if (user != null)
                {
                    SetLocalUser(new User
                    {
                        Name  = user.User.DisplayName,
                        Uid   = user.User.Uid,
                        Email = user.User.Email
                    });

                    await view.ReloadData();
                    CustomAlert.Alert(view, "Login Was Successful", "Welcome back " + user.User.DisplayName);
                }

                done = true;
            });

            while (!done)
            {
                await Task.Delay(50);
            }
        }
Esempio n. 2
0
        public static void LoginAlert(ListsViewController view)
        {
            var loginAlert = UIAlertController.Create("Login Online", "Please enter your email and password", UIAlertControllerStyle.Alert);

            loginAlert.AddTextField((field) =>
            {
                field.Font          = UIFont.SystemFontOfSize(22);
                field.Placeholder   = "Email";
                field.KeyboardType  = UIKeyboardType.EmailAddress;
                field.TextAlignment = UITextAlignment.Center;
            });

            loginAlert.AddTextField((field) =>
            {
                field.Font            = UIFont.SystemFontOfSize(22);
                field.Placeholder     = "Password";
                field.SecureTextEntry = true;
                field.TextAlignment   = UITextAlignment.Center;
            });


            var loginAction = UIAlertAction.Create("Login",
                                                   UIAlertActionStyle.Default,
                                                   async _ => {
                await UserFunctions.Login(view, loginAlert.TextFields[0].Text,
                                          loginAlert.TextFields[1].Text);
                await view.ReloadData();
            });

            loginAlert.AddAction(loginAction);
            loginAlert.AddAction(UIAlertAction.Create("Cancel", UIAlertActionStyle.Destructive, null));
            view.PresentViewController(loginAlert, true, null);
        }
Esempio n. 3
0
        public static void RegisterAlert(ListsViewController view)
        {
            var alert = UIAlertController.Create("Register", "Please enter name, email, and password",
                                                 UIAlertControllerStyle.Alert);

            alert.AddTextField(field => {
                field.Placeholder = "name";
            });

            alert.AddTextField(field => {
                field.Placeholder  = "email";
                field.KeyboardType = UIKeyboardType.EmailAddress;
            });

            alert.AddTextField(field => {
                field.Placeholder     = "password";
                field.SecureTextEntry = true;
            });

            var register = UIAlertAction.Create("Register", UIAlertActionStyle.Default, async action => await UserFunctions.RegisterUser(
                                                    view,
                                                    alert.TextFields[0].Text,
                                                    alert.TextFields[1].Text,
                                                    alert.TextFields[2].Text)
                                                );

            alert.AddAction(register);
            alert.AddAction(UIAlertAction.Create("Cancel", UIAlertActionStyle.Cancel, null));
            view.PresentViewController(alert, true, null);
        }
Esempio n. 4
0
        public static async Task RegisterUser(ListsViewController view, string name, string email, string password)
        {
            var done = false;

            AppData.auth.CreateUser(email, password, (user, error) => {
                if (error != null)
                {
                    CustomAlert.Alert(view, "Error creating user", error.UserInfo.Description);
                    return;
                }

                if (user != null)
                {
                    var changeRequest         = user.User.ProfileChangeRequest();
                    changeRequest.DisplayName = name;
                    changeRequest.CommitChanges(async profileError => {
                        if (profileError != null)
                        {
                            CustomAlert.Alert(view, "Error updating user profile", profileError.UserInfo.Description);
                            return;
                        }
                        //store locally
                        SetLocalUser(new User {
                            Name  = user.User.DisplayName,
                            Email = user.User.Email,
                            Uid   = user.User.Uid
                        });

                        object[] userKeys   = { "name", "email", "uid" };
                        object[] userValues = { user.User.DisplayName, user.User.Email, user.User.Uid };
                        var userDict        = NSDictionary.FromObjectsAndKeys(userValues, userKeys);
                        //store online
                        AppData.UsersNode.GetChild(user.User.Uid).SetValue(userDict);

                        foreach (var list in AppData.currentList.Where(list => list.ListOwner.Uid == AppData.currentUser.Uid))
                        {
                            CloudFunctions.SaveList(list);
                        }

                        await view.ReloadData();
                        CustomAlert.Alert(view, "Success", "You are now registered and can share lists with your friends.");

                        done = true;
                    });
                }
            });

            while (!done)
            {
                await Task.Delay(50);
            }
        }
Esempio n. 5
0
        public static async void Logout(ListsViewController view)
        {
            var signedOut = AppData.auth.SignOut(out var error);

            if (signedOut)
            {
                CustomAlert.Alert(view, "Logged Out", "You can still work offline!");

                await view.ReloadData();

                return;
            }

            CustomAlert.Alert(view, "Error on Logout", error?.ToString());
        }
Esempio n. 6
0
        public static async Task Read(ListsViewController view)
        {
            ReadWriteDisk.ReadUser();

            if (AppData.currentUser != null)
            {
                //Read data and use that as the current list of lists
                ReadWriteDisk.ReadData();
                AppData.currentList = AppData.offlineList;
            }

            view.SetProfileButton("Offline. Login Here", UIColor.Orange);


            //if we have a logged in user, pull online data, compare it to local data and make comparison updates, then update locally and online
            if (AppData.auth.CurrentUser != null)
            {
                if (AppData.currentUser == null)
                {
                    return;
                }

                view.SetProfileButton(AppData.auth.CurrentUser.DisplayName + " is Online", UIColor.Green);

                await CloudFunctions.Read();

                AppData.currentList = ListHelpers.Compare(AppData.onlineList, AppData.offlineList);

                ReadWriteDisk.WriteData();

                foreach (var list in AppData.currentList.Where(list => list.ListOwner.Uid == AppData.currentUser.Uid))
                {
                    CloudFunctions.SaveList(list);
                }

                await Invitations.Read();                 //This gets "myInvitations" info and puts in AppData.invitationsData

                await Invitations.FetchInvitationItems(); //Uses invitationsData to get the actual list & list items and puts them in AppData.invitationsList

                foreach (var invitation in AppData.invitationsList)
                {
                    AppData.currentList.Add(invitation);
                }
            }
        }