public Task GetUserInformationSecondaryActionThumbnail(string address, Action <byte[]> result) { return(Task.Factory.StartNew(() => { foreach (var user in _dialogs.Users) { var userId = TelegramUtils.GetUserId(user); if (userId == address) { var phoneNumber = TelegramUtils.GetUserPhoneNumber(user); if (!string.IsNullOrWhiteSpace(phoneNumber)) { if (PhoneBookHasNumber(phoneNumber)) { result(Platform.GetIcon(IconType.People)); } else { result(Platform.GetIcon(IconType.AddContact)); } } else { result(null); } return; } } result(null); })); }
public Task GetContactsFavorites(Action <List <Contact> > result) { return(Task.Factory.StartNew(async() => { var count = 0; var inputUsers = new List <IInputUser>(); foreach (var bubbleGroup in BubbleGroupManager.SortByMostPopular(this, true)) { var address = bubbleGroup.Address; foreach (var user in _dialogs.Users) { var userId = TelegramUtils.GetUserId(user); if (userId == address) { var inputUser = TelegramUtils.CastUserToInputUser(user); if (inputUser != null) { inputUsers.Add(inputUser); break; } } } count++; if (count > 6) { break; } } if (!inputUsers.Any()) { result(null); } else { using (var client = new FullClientDisposable(this)) { var users = await GetUsers(inputUsers, client.Client); var contacts = users.Select(x => new TelegramContact { Available = TelegramUtils.GetAvailable(x), LastSeen = TelegramUtils.GetLastSeenTime(x), FirstName = TelegramUtils.GetUserName(x), Ids = new List <Contact.ID> { new Contact.ID { Service = this, Id = TelegramUtils.GetUserId(x).ToString(CultureInfo.InvariantCulture) } }, }).OfType <Contact>().OrderBy(x => x.FirstName).ToList(); result(contacts); } } })); }
public Task GetContactFromAddress(string address, Action <Contact, Contact.ID> result) { return(Task.Factory.StartNew(async() => { Func <IUser, Tuple <TelegramContact, TelegramContact.ID> > buildContact = user => { var id = new TelegramContact.ID { Service = this, Id = address, }; var contact = new TelegramContact { FirstName = TelegramUtils.GetUserName(user), Ids = new List <Contact.ID> { id }, }; return Tuple.Create(contact, id); }; if (address == null) { return; } var userTuple = _dialogs.GetUser(uint.Parse(address)); if (userTuple != null) { var tuple = buildContact(userTuple); result(tuple.Item1, tuple.Item2); return; } var userContacts = await FetchContacts(); foreach (var userContact in userContacts) { var userId = TelegramUtils.GetUserId(userContact); if (userId == address) { var tuple = buildContact(userContact); result(tuple.Item1, tuple.Item2); return; } } result(null, null); })); }
/// <summary> /// Adds a single user to the database, if the user already exists it updates the current user /// </summary> /// <param name="user">the user to be added or updated</param> public void AddUser(IUser user) { lock (_userLock) { using (var database = new SqlDatabase <CachedUser>(GetDatabasePath(true))) { var userIdString = TelegramUtils.GetUserId(user); if (userIdString == null) { return; } var userId = Convert.ToUInt32(userIdString); CreateCachedUserAndAdd(user, userId, database); } } }
public Task GetContactsFavorites(Action <List <Contact> > result) { return(Task.Factory.StartNew(() => { var count = 0; var users = new List <IUser>(); foreach (var bubbleGroup in BubbleGroupManager.SortByMostPopular(this, true)) { var address = bubbleGroup.Address; var user = _dialogs.GetUser(uint.Parse(address)); if (user != null) { users.Add(user); } count++; if (count > 6) { break; } } if (!users.Any()) { result(null); return; } var contacts = users.Select(x => new TelegramContact { Available = TelegramUtils.GetAvailable(x), LastSeen = TelegramUtils.GetLastSeenTime(x), FirstName = TelegramUtils.GetUserName(x), Ids = new List <Contact.ID> { new Contact.ID { Service = this, Id = TelegramUtils.GetUserId(x).ToString(CultureInfo.InvariantCulture) } }, User = x as User }).OfType <Contact>().OrderBy(x => x.FirstName).ToList(); result(contacts); })); }
/// <summary> /// Adds a list of users to the current users database in a thread safe way. /// </summary> /// <param name="users">List of user objects to be added</param> public void AddUsers(List <IUser> users) { lock (_userLock) { using (var database = new SqlDatabase <CachedUser>(GetDatabasePath(true))) { foreach (var user in users) { var userId = TelegramUtils.GetUserId(user); if (userId == null) { continue; } CreateCachedUserAndAdd(user, Convert.ToUInt32(userId), database); } } } }
public Task GetUserInformationPrimaryActionThumbnail(string address, Action <byte[]> result) { return(Task.Factory.StartNew(() => { foreach (var user in _dialogs.Users) { var userId = TelegramUtils.GetUserId(user); if (userId == address) { var phoneNumber = TelegramUtils.GetUserPhoneNumber(user); if (!string.IsNullOrWhiteSpace(phoneNumber)) { result(Platform.GetIcon(IconType.Call)); return; } } } result(null); })); }
public Task ClickUserInformationSecondaryAction(string address) { return(Task.Factory.StartNew(() => { foreach (var user in _dialogs.Users) { var userId = TelegramUtils.GetUserId(user); if (userId == address) { var phoneNumber = TelegramUtils.GetUserPhoneNumber(user); if (!string.IsNullOrWhiteSpace(phoneNumber)) { Platform.OpenContact( TelegramUtils.ConvertTelegramPhoneNumberIntoInternational(phoneNumber)); return; } } } })); }
public Task GetUserInformation(string address, Action <Disa.Framework.UserInformation> result) { return(Task.Factory.StartNew(async() => { foreach (var user in _dialogs.Users) { var userId = TelegramUtils.GetUserId(user); if (userId == address) { using (var client = new FullClientDisposable(this)) { var inputUser = TelegramUtils.CastUserToInputUser(user); var updatedUser = await GetUser(inputUser, client.Client); var name = TelegramUtils.GetUserName(updatedUser); var lastSeen = TelegramUtils.GetLastSeenTime(updatedUser); var presence = TelegramUtils.GetAvailable(updatedUser); var phoneNumber = TelegramUtils.GetUserPhoneNumber(updatedUser); if (string.IsNullOrWhiteSpace(name)) { result(null); //TODO: ensure this doesn't crash Disa return; } result(new UserInformation { Title = name, SubtitleType = string.IsNullOrWhiteSpace(phoneNumber) ? UserInformation.TypeSubtitle.Other : UserInformation.TypeSubtitle.PhoneNumber, Subtitle = string.IsNullOrWhiteSpace(phoneNumber) ? address : TelegramUtils.ConvertTelegramPhoneNumberIntoInternational(phoneNumber), LastSeen = lastSeen, Presence = presence, }); return; } } } result(null); //TODO: ensure this doesn't crash Disa })); }