void CopyNamePhoto (Friend src, Message dst)
		{
			dst.FriendPhoto = src.Photo;
			dst.FriendName = src.Name;
		}
		async Task<Friend> GetFriend (Message msg)
		{
			long id = GetFriendId (msg);
			var friend = await DataManager.GetFriendAsync (id);

			if (friend == null) {
				friend = new Friend { FriendId = id, Name = string.Empty };
				await App.FriendsViewModel.UpdateFriendInfoAsync (friend);
			}

			return friend;
		}
		void Bind(Friend friend, UICollectionViewFriendCell cell)
		{
			cell.AvatarUrl = friend.Photo;
			cell.Name = friend.Name;
		}
Example #4
0
		public async Task ExecuteSearchForFriendCommand (string search)
		{
			search.Trim ();

			if (IsBusy)
				return;

			LoadingMessage = "Finding Friend...";

			using (BusyContext ()) {
				using (App.Logger.TrackTimeContext ("FriendSearch")) {
					try {
						App.Logger.Track ("FriendSearch");

						if (!search.IsValidEmail ()) {
							App.MessageDialog.SendToast ("Please enter a valide email address.");
							return;
						}

						if (!await RefreshToken ())
							return;

						var userManager = new UserManager (Settings.AccessToken);

						var result = await userManager.GetUserViaEmail (search);
						IsBusy = false;

						//did not find anyone
						//add them and send invite
						if (result == null || result.Devices == null) {
							var newFriend = new Friend {
								FriendId = Settings.GenerateTempFriendId (),
								Name = search
							};

							await DataManager.AddOrSaveFriendAsync (newFriend);
							await FriendsSemaphore.WaitAsync();
							Friends.Add (newFriend);
							FriendsSemaphore.Release ();
							await userManager.SendUserInvite (search);
							RaiseNotification ("Your friend hasn't signed up for Kinder Chat yet. We have sent them an invite!", "Friend Request Sent");
							App.Logger.Track ("FriendRequestSent");
							return;
						}

						//did you enter yourself?
						if (!string.IsNullOrWhiteSpace(Settings.Email) 
                            && result.Email.ToLowerInvariant () == Settings.Email.ToLowerInvariant ()) {
							RaiseNotification ("This is you!");
							return;
						}

						//did you already friend them?
						await FriendsSemaphore.WaitAsync ();
						var alreadyFriend = Friends.FirstOrDefault (f => f.FriendId == result.Id) != null;
						FriendsSemaphore.Release ();

						if (alreadyFriend) {
							RaiseNotification ("Friend already added.");
							return;
						}

						//new friend found and we want to add them.
						var msg = string.Format ("We found {0} do you want to add to friend list?", result.NickName);
						App.MessageDialog.SendConfirmation (msg, "Friend found!",
							async add => {
								if (!add)
									return;

								var newFriend = new Friend {
									FriendId = result.Id,
									Name = result.NickName,
									Photo = EndPoints.BaseUrl + result.Avatar.Location,
									AvatarType = result.Avatar.Type
								};

								await DataManager.AddOrSaveFriendAsync (newFriend);

								await FriendsSemaphore.WaitAsync ();
								Friends.Add (newFriend);
								FriendsSemaphore.Release ();

								RaiseNotification ("Friend added!");
								App.Logger.Track ("FriendAdded");
							});
					} catch (Exception ex) {
						App.Logger.Report (ex);
						RaiseError ("Something has gone wrong, please try to search again.");
					}
				}
			}
		}
Example #5
0
	    public async Task UpdateFriendInfoAsync(Friend item)
        {
			if (App.FakeSignup)
				return;
			
            var userManager = new UserManager(Settings.AccessToken);  //should it be cached?
            User user = null;
            if (item.FriendId < 0)
				user = await userManager.GetUserViaEmail(item.Name).ConfigureAwait (false);
            else
				user = await userManager.GetUserViaEmail((int)item.FriendId).ConfigureAwait (false);

            if (user != null && user.Devices != null)
            {

				//update messages for newly connected friends)
				if(item.FriendId < 0){
					var messages = await DataManager.GetUnsentMessagesAsync (item.FriendId).ConfigureAwait (false);

					//update each message with new information.
					foreach (var message in messages) {
						message.FriendName = user.NickName;
						message.FriendPhoto = EndPoints.BaseUrl + user.Avatar.Location;
						message.Recipient = user.Id;
						message.RecipientName = user.NickName;
						await DataManager.AddMessageAsync (message).ConfigureAwait (false);
					}
				}

                //user found
                item.FriendId = user.Id;
                item.Name = user.NickName;
                item.Photo = EndPoints.BaseUrl + user.Avatar.Location;
				item.AvatarType = user.Avatar.Type;
				await SaveUserDevices(user).ConfigureAwait (false);
				await DataManager.AddOrSaveFriendAsync(item).ConfigureAwait (false);
            }
	    }
Example #6
0
		public Task<int> AddOrSaveFriendAsync (Friend friend)
		{
			return database.SaveItemAsync<Friend> (friend);
		}