Exemple #1
0
        public void UserGetterTest()
        {
            LocalUser user   = UnitTestAuth.Login();
            var       status = UserGetStatus.UnknownError;
            bool      done   = false;
            User      user1  = null;

            var getter = UserSystemManager.UserGetter();

            getter.Result += (_status, _user) =>
            {
                status = _status;
                user1  = _user;
                done   = true;
            };
            getter.Get(user.Username);
            while (!done)
            {
            }
            Assert.AreEqual(status, UserGetStatus.Success);
            Assert.AreEqual(user.Username, user1.Username);
        }
        private void RankingsListGetter()
        {
            var rankingsGetter = UserSystemManager.NewRankingsGetter();

            rankingsGetter.Result += (status, rankings) =>
            {
                if (status == RankingsGetStatus.Success)
                {
                    Device.BeginInvokeOnMainThread(() =>
                    {
                        Items.Clear();
                        rankings.ForEach(user =>
                        {
                            Items.Add(new RankingsModel
                            {
                                Username               = user.Username,
                                Name                   = user.FirstName + " " + user.LastName,
                                KarmaPoints            = user.KarmaPoints,
                                IsLecturer             = user.IsLecturer,
                                ProfilePictureLocation = user.ProfilePictureLocation,
                                User                   = user
                            });
                        });
                        RankingsList.IsRefreshing = false;
                    });
                }
                else
                {
                    Device.BeginInvokeOnMainThread(() =>
                    {
                        RankingsList.IsRefreshing = false;
                    });
                }
            };
            rankingsGetter.Get();
        }
 private void buttonSaveEdit_Clicked(object sender, EventArgs e)
 {
     if (entryFirstName.Text != null || entryLastName.Text != null)
     {
         LoadingIndicator.IsRunning = true;
         if (entryFirstName.Text == null)
         {
             entryFirstName.Text = localUser.FirstName;
         }
         if (entryLastName.Text == null)
         {
             entryLastName.Text = localUser.LastName;
         }
         var userUpdater = UserSystemManager.UserUpdater();
         userUpdater.Result +=
             (status, firstName, lastName) =>
         {
             Device.BeginInvokeOnMainThread(() =>        //Grįžtama į main Thread !! SVARBU
             {
                 if (status == UserUpdateStatus.Success) //Pavyko
                 {
                     localUser.FirstName = firstName;
                     localUser.LastName  = lastName;
                     localUser.OnUpdateHandler?.Invoke(localUser);
                     DependencyService.Get <IToast>().LongToast("Pakeitimai išsaugoti");
                 }
                 else     //Ne
                 {
                     Application.Current.MainPage.DisplayAlert("Klaida", "woops, kažkas netaip", "tęsti");
                 }
                 LoadingIndicator.IsRunning = false;
             });
         };
         userUpdater.Update(entryFirstName.Text, entryLastName.Text);
     }
 }
        /*if you want to take a picture use this
         * if(!CrossMedia.Current.isTakePhotoSupported || !CrossMedia.Current.IsCameraAvailable)
         */
        private async void buttonChangeProfilePicture_Clicked(object sender, EventArgs e)
        {
            await CrossMedia.Current.Initialize(); //Initialize plugin

            if (!CrossMedia.Current.IsPickPhotoSupported)
            {
                await DisplayAlert("Not supported", "Your device does not currently support this functionality", "Ok");

                return;
            }
            string action = await DisplayActionSheet("Iš kur norite įkelti nuotrauką?", "Atšaukti", null, "Iš telefono", "Nusifotografuoti dabar");

            if (action == null)
            {
                return;
            }
            photoFromCamera = action.Equals("Nusifotografuoti dabar");
            /*if you want to take a picture use StoreCameraMediaOptions instead of PickMediaOptions*/
            var cameraMediaOptions = new StoreCameraMediaOptions()
            {
                PhotoSize = PhotoSize.Medium
            };
            var mediaOptions = new PickMediaOptions()
            {
                PhotoSize = PhotoSize.Medium
            };
            //if you want to take a picture use TakePhotoAsync instead of PickPhotoAsync

            var selectedImageFile =
                photoFromCamera ? await CrossMedia.Current.TakePhotoAsync(cameraMediaOptions) : await CrossMedia.Current.PickPhotoAsync(mediaOptions);

            if (selectedImageFile == null)
            {
                await DisplayAlert("Klaida", "Nepasirinkta nuotrauka, bandykite dar kartą", "Tęsti");

                return;
            }
            selectedImage.Source = ImageSource.FromStream(() => selectedImageFile.GetStream());
            if (selectedImage != null)
            {
                LoadingIndicator.IsRunning = true;
                var base64String          = Convert.ToBase64String(ReadFully(selectedImageFile.GetStream()));
                var profilePictureUpdater = UserSystemManager.UserProfilePictureUpdater();

                profilePictureUpdater.Result +=
                    (status, pictureLocation) =>
                {
                    Device.BeginInvokeOnMainThread(() =>           //Grįžtama į main Thread !! SVARBU
                    {
                        if (status == PictureUpdateStatus.Success) //Pavyko
                        {
                            localUser.ProfilePictureLocation = pictureLocation;
                            ProfilePicture.Source            = pictureLocation;
                            localUser.OnUpdateHandler?.Invoke(localUser);
                            DependencyService.Get <IToast>().LongToast("Nuotrauka įkelta");
                        }
                        else //Ne
                        {
                            Console.WriteLine(status);
                            DisplayAlert("Nepavyko įkelti pic:(", "oof", "OK");
                        }
                        LoadingIndicator.IsRunning = false;
                    });
                };
                profilePictureUpdater.Upload(base64String);
            }
        }
Exemple #5
0
        public void UserUpdaterTest()
        {
            LocalUser user          = UnitTestAuth.Login(username: "******", password: "******");
            var       statusUpdater = UserUpdateStatus.UnknownError;
            var       statusGetter  = UserGetStatus.UnknownError;
            bool      done          = false;
            User      user1         = null;
            string    firstName     = "";
            string    lastName      = "";
            var       random        = new Random();

            var updater = UserSystemManager.UserUpdater();

            updater.Result += (_status, _firstName, _lastName) =>
            {
                statusUpdater = _status;
                firstName     = _firstName;
                lastName      = _lastName;
                done          = true;
            };

            var getter = UserSystemManager.UserGetter();

            getter.Result += (_status, _user) =>
            {
                statusGetter = _status;
                user1        = _user;
                done         = true;
            };

            firstName = random.Next().ToString();
            lastName  = random.Next().ToString();

            done = false;
            updater.Update(firstName, lastName);

            while (!done)
            {
            }
            Assert.AreEqual(statusUpdater, UserUpdateStatus.Success);
            Assert.AreNotEqual(firstName, null);
            Assert.AreNotEqual(lastName, null);

            done = false;
            getter.Get(user.Username);

            while (!done)
            {
            }
            Assert.AreEqual(statusGetter, UserGetStatus.Success);
            Assert.AreEqual(user.Username, user1.Username);
            Assert.AreNotEqual(user.FirstName, user1.FirstName);
            Assert.AreNotEqual(user.LastName, user1.LastName);
            Assert.AreEqual(firstName, user1.FirstName);
            Assert.AreEqual(lastName, user1.LastName);

            done = false;
            updater.Update(user.FirstName, user.LastName);

            while (!done)
            {
            }
            Assert.AreEqual(statusUpdater, UserUpdateStatus.Success);
            Assert.AreNotEqual(firstName, null);
            Assert.AreNotEqual(lastName, null);

            done = false;
            getter.Get(user.Username);

            while (!done)
            {
            }
            Assert.AreEqual(statusGetter, UserGetStatus.Success);
            Assert.AreEqual(user.Username, user1.Username);
            Assert.AreEqual(user.FirstName, user1.FirstName);
            Assert.AreEqual(user.LastName, user1.LastName);
        }
Exemple #6
0
        public override StartCommandResult OnStartCommand(Intent intent, [GeneratedEnum] StartCommandFlags flags, int startId)
        {
            Device.BeginInvokeOnMainThread(() =>
            {
                DependencyService.Get <IToast>().ShortToast("starting service");
            });

            if (messageGetter != null)
            {
                return(StartCommandResult.Sticky);
            }
            if (App.Current.Properties.ContainsKey("notificationTimestamp"))
            {
                notificationTimestamp = (long)App.Current.Properties["notificationTimestamp"];
            }
            if (LocalUserManager.LocalUser == null)
            {
                if (Xamarin.Forms.Application.Current.Properties.ContainsKey("PrivateKey"))
                {
                    LocalUserManager.LocalUser = new LocalUser {
                        PrivateKey = (string)Xamarin.Forms.Application.Current.Properties["PrivateKey"]
                    };
                }
                else
                {
                    Device.BeginInvokeOnMainThread(() =>
                    {
                        DependencyService.Get <IToast>().ShortToast("no private key");
                    });
                    Stop();
                }
            }
            Device.BeginInvokeOnMainThread(() =>
            {
                DependencyService.Get <IToast>().ShortToast("started service");
            });
            messageGetter = ConversationSystemManager.NewMessageGetter();
            messageSender = ConversationSystemManager.NewMessageSender();
            //Message getter result
            messageGetter.Result += (status, conversations, messages, users) => {
                Device.BeginInvokeOnMainThread(() =>
                {
                    //DependencyService.Get<IToast>().ShortToast(status.ToString());
                });
                //Got messages
                if (status == MessageGetAllStatus.Success && conversations.Count != 0)
                {
                    //joining conversations
                    this.conversations = conversations
                                         .Union(this.conversations, new EntityComparer())
                                         .OrderByDescending(conv => conv.LastActivity)
                                         .ToList();
                    //Joining messages
                    foreach (KeyValuePair <int, List <Message> > entry in messages)
                    {
                        if (this.messages.ContainsKey(entry.Key))
                        {
                            this.messages[entry.Key].AddRange(entry.Value);
                        }
                        else
                        {
                            this.messages[entry.Key] = entry.Value;
                        }
                    }
                    //Joining users
                    this.users = users
                                 .Concat(this.users.Where(pair => !users.ContainsKey(pair.Key)))
                                 .ToDictionary(x => x.Key, x => x.Value);
                    //Sending messages back to ui
                    Device.BeginInvokeOnMainThread(() =>
                    {
                        MessagingCenter.Send(new MessagingTask(messagesDict: messages, users: this.users), MessagingTask.NewMessages);
                        DependencyService.Get <IToast>().ShortToast("New message");
                    });

                    //Saving values
                    try
                    {
                        foreach (var entry in users)
                        {
                            if (db.Users.Any(user => user.Username == entry.Value.Username))
                            {
                                db.Users.Update(entry.Value);
                            }
                            else
                            {
                                db.Users.Add(entry.Value);
                            }
                        }
                        foreach (var entry in conversations)
                        {
                            if (db.Conversations.Any(conv => conv.Id == entry.Id))
                            {
                                db.Conversations.Update(entry);
                            }
                            else
                            {
                                db.Conversations.Add(entry);
                            }
                        }
                        foreach (var entry in messages)
                        {
                            foreach (var message in entry.Value)
                            {
                                if (db.Messages.Any(_message => _message.Id == message.Id))
                                {
                                    db.Messages.Update(message);
                                }
                                else
                                {
                                    db.Messages.Add(message);
                                }
                            }
                        }

                        db.SaveChanges();
                        //Untracking values
                        foreach (var entry in users)
                        {
                            db.Entry(entry.Value).State = EntityState.Detached;
                        }
                        foreach (var entry in conversations)
                        {
                            db.Entry(entry).State = EntityState.Detached;
                        }
                        foreach (var entry in messages)
                        {
                            foreach (var message in entry.Value)
                            {
                                db.Entry(message).State = EntityState.Detached;
                            }
                        }
                    }
                    catch (SqliteException e)
                    {
                        Console.WriteLine("Table not found, the user might have logged off mid writing");
                    }
                    //Creating notifications
                    long temp = notificationTimestamp;
                    conversations.ForEach((conversation) =>
                    {
                        Message message = messages[conversation.Id].FindLast(m => users.ContainsKey(m.Username) && m.Timestamp > notificationTimestamp);
                        if (message != null)
                        {
                            if (notificationTimestamp != -1)
                            {
                                Device.BeginInvokeOnMainThread(() =>
                                {
                                    DependencyService.Get <INotification>().DisplayMessageNotification(conversation, message, users);
                                });
                            }
                            temp = Math.Max(message.Timestamp, temp);
                        }
                    });
                    //New notification timestamp limit
                    if (temp != notificationTimestamp)
                    {
                        notificationTimestamp = temp;
                        App.Current.Properties["notificationTimestamp"] = notificationTimestamp;
                        App.Current.SavePropertiesAsync();
                    }
                }
                //Failed to get stopping service
                else if (status == MessageGetAllStatus.InvalidPrivateKey)
                {
                    if (LocalUserManager.LocalUser != null)
                    {
                        messageGetter.PrivateKey = LocalUserManager.LocalUser.PrivateKey;
                    }
                    else
                    {
                        messageGetter.Result = null;
                        messageGetter.StopGetting();
                        messageSender.Result = null;
                        messageSender.StopSending();
                        Stop();
                    }
                }
            };
            //Get all messages request
            MessagingCenter.Subscribe <MessagingTask>(this, MessagingTask.GetMessages, (task) =>
            {
                MessagingCenter.Send(new MessagingTask(messagesDict: messages, users: users), MessagingTask.LocalMessages);
            });
            //Get specfic amoount of messages
            MessagingCenter.Subscribe <MessagingTask>(this, MessagingTask.GetMessagesLimited, (task) =>
            {
                List <Message> messagesList = null;
                if (messages.ContainsKey(task.Conversation.Id))
                {
                    int toRemove = (task.Message == null ? 0 : messages[task.Conversation.Id].Count - messages[task.Conversation.Id].FindIndex((m) => task.Message.Id == m.Id));
                    messagesList = messages[task.Conversation.Id].AsEnumerable().Reverse().Skip(toRemove).Take(task.GetCount).Reverse().ToList();
                }
                else
                {
                    messagesList = new List <Message>();
                }
                MessagingCenter.Send(new MessagingTask(messages: messagesList, users: users, conversation: task.Conversation), MessagingTask.LocalMessagesLimited);
            });
            // Get all conversations
            MessagingCenter.Subscribe <MessagingTask>(this, MessagingTask.GetConversations, (task) =>
            {
                MessagingCenter.Send(new MessagingTask(conversations: conversations, users: users), MessagingTask.LocalConversations);
            });
            //Sender result
            messageSender.Result += (status, message) =>
            {
                //If failed stop
                if (status == MessageSendStatus.InvalidPrivateKey)
                {
                    if (LocalUserManager.LocalUser != null)
                    {
                        messageGetter.PrivateKey = LocalUserManager.LocalUser.PrivateKey;
                    }
                    else
                    {
                        messageGetter.Result = null;
                        messageGetter.StopGetting();
                        messageSender.Result = null;
                        messageSender.StopSending();
                    }
                }
            };

            //Enqueue message to sender
            MessagingCenter.Subscribe <MessagingTask>(this, MessagingTask.AddMessageToQueue, (task) =>
            {
                messageSender.AddMessageToQueue(task.Message);
            });

            //Stop the service
            MessagingCenter.Subscribe <MessagingTask>(this, MessagingTask.Stop, (task) =>
            {
                Device.BeginInvokeOnMainThread(() =>
                {
                    messageGetter.Result = null;
                    messageGetter.StopGetting();
                    messageSender.Result = null;
                    messageSender.StopSending();
                    Stop();
                });
            });
            new Thread(() =>
            {
                var temp = users.ToDictionary(entry => entry.Key,
                                              entry => entry.Value);
                LoadData();
                Device.BeginInvokeOnMainThread(() =>
                {
                    MessagingCenter.Send(new MessagingTask(messagesDict: messages, users: users), MessagingTask.NewMessages);
                });
                foreach (var entry in temp)
                {
                    var getter = UserSystemManager.UserGetter();
                    if (getter != null)
                    {
                        getter.Result += (status, user) =>
                        {
                            if (status == UserGetStatus.Success)
                            {
                                users[user.Username] = user;
                            }
                        };
                        getter.Get(entry.Value.Username);
                    }
                }

                conversations.ForEach(conv =>
                {
                    messageGetter.TimeStamp = Math.Max(conv.LastActivity, messageGetter.TimeStamp);
                });
                messageGetter.GetUsers = true;
                if (!stoppedSelf)
                {
                    messageGetter.StartGetting();
                    messageSender.StartSending();
                }
                Device.BeginInvokeOnMainThread(() =>
                {
                    MessagingCenter.Send(new MessagingTask(), MessagingTask.Started);
                });
                Console.WriteLine("SERVICE STARTED");
            }).Start();
            ;           return(StartCommandResult.Sticky);
        }