コード例 #1
0
 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);
     }));
 }
コード例 #2
0
 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);
             }
         }
     }));
 }
コード例 #3
0
        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);
            }));
        }
コード例 #4
0
 /// <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);
         }
     }
 }
コード例 #5
0
        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);
            }));
        }
コード例 #6
0
 /// <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);
             }
         }
     }
 }
コード例 #7
0
 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);
     }));
 }
コード例 #8
0
 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;
                 }
             }
         }
     }));
 }
コード例 #9
0
        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
            }));
        }