Exemplo n.º 1
0
        private async Task <ContactList> GetContactListAsync(UserDataAccount userDataAccount, ContactStore store)
        {
            try
            {
                var user        = _cacheService.GetUser(_cacheService.Options.MyId);
                var displayName = user?.GetFullName() ?? "Unigram";

                ContactList contactList = null;
                if (_cacheService.Options.TryGetValue("x_contact_list", out string id))
                {
                    contactList = await store.GetContactListAsync(id);
                }

                if (contactList == null)
                {
                    contactList = await store.CreateContactListAsync(displayName, userDataAccount.Id);

                    await _protoService.SendAsync(new Telegram.Td.Api.SetOption("x_contact_list", new Telegram.Td.Api.OptionValueString(contactList.Id)));
                }

                contactList.DisplayName         = displayName;
                contactList.OtherAppWriteAccess = ContactListOtherAppWriteAccess.None;
                await contactList.SaveAsync();

                return(contactList);
            }
            catch
            {
                return(null);
            }
        }
Exemplo n.º 2
0
        private async Task <ContactAnnotationList> GetAnnotationListAsync(UserDataAccount userDataAccount)
        {
            try
            {
                var store = await ContactManager.RequestAnnotationStoreAsync(ContactAnnotationStoreAccessType.AppAnnotationsReadWrite);

                if (store == null)
                {
                    return(null);
                }

                ContactAnnotationList contactList = null;
                if (_cacheService.Options.TryGetValue("x_annotation_list", out string id))
                {
                    contactList = await store.GetAnnotationListAsync(id);
                }

                if (contactList == null)
                {
                    contactList = await store.CreateAnnotationListAsync(userDataAccount.Id);

                    await _protoService.SendAsync(new Telegram.Td.Api.SetOption("x_annotation_list", new Telegram.Td.Api.OptionValueString(contactList.Id)));
                }

                return(contactList);
            }
            catch
            {
                return(null);
            }
        }
Exemplo n.º 3
0
        private async Task <UserDataAccount> GetUserDataAccountAsync()
        {
            try
            {
                var store = await UserDataAccountManager.RequestStoreAsync(UserDataAccountStoreAccessType.AppAccountsReadWrite);

                UserDataAccount userDataAccount = null;
                if (_cacheService.Options.TryGetValue("x_user_data_account", out string id))
                {
                    userDataAccount = await store.GetAccountAsync(id);
                }

                if (userDataAccount == null)
                {
                    userDataAccount = await store.CreateAccountAsync($"{_cacheService.Options.MyId}");

                    await _protoService.SendAsync(new Telegram.Td.Api.SetOption("x_user_data_account", new Telegram.Td.Api.OptionValueString(userDataAccount.Id)));
                }

                return(userDataAccount);
            }
            catch
            {
                return(null);
            }
        }
Exemplo n.º 4
0
        /// <summary>
        /// Check the mailboxes, calendars, and contact lists for sync errors
        /// </summary>
        /// <param name="selectedAccount"></param>
        /// <returns>True if there is an sync error for email, calendar, or contacts. False if nothing is syncing or everything is syncing correctly</returns>
        private async Task <bool> IsFixNeededAsync(UserDataAccount selectedAccount)
        {
            foreach (EmailMailbox mailbox in await selectedAccount.FindEmailMailboxesAsync())
            {
                if (mailbox.SyncManager != null)
                {
                    switch (mailbox.SyncManager.Status)
                    {
                    case EmailMailboxSyncStatus.AuthenticationError:
                    case EmailMailboxSyncStatus.PolicyError:
                    case EmailMailboxSyncStatus.UnknownError:
                        return(true);
                    }
                }
            }

            foreach (AppointmentCalendar calendar in await selectedAccount.FindAppointmentCalendarsAsync())
            {
                if (calendar.SyncManager != null)
                {
                    switch (calendar.SyncManager.Status)
                    {
                    case AppointmentCalendarSyncStatus.AuthenticationError:
                    case AppointmentCalendarSyncStatus.PolicyError:
                    case AppointmentCalendarSyncStatus.UnknownError:
                        return(true);
                    }
                }
            }

            foreach (ContactList contactList in await selectedAccount.FindContactListsAsync())
            {
                if (contactList.SyncManager != null)
                {
                    switch (contactList.SyncManager.Status)
                    {
                    case ContactListSyncStatus.AuthenticationError:
                    case ContactListSyncStatus.PolicyError:
                    case ContactListSyncStatus.UnknownError:
                        return(true);
                    }
                }
            }

            return(false);
        }
Exemplo n.º 5
0
        private async Task DisplayUserInformationAsync(String id)
        {
            // Requires the email, contacts, or appointments in the app's manifest
            UserDataAccountStore store = await UserDataAccountManager.RequestStoreAsync(UserDataAccountStoreAccessType.AllAccountsReadOnly);

            // If the store is null, that means all access to Contacts, Calendar and Email data
            // has been revoked.
            if (store == null)
            {
                rootPage.NotifyUser("Access to Contacts, Calendar and Email has been revoked", NotifyType.ErrorMessage);
                return;
            }

            UserDataAccount account = await store.GetAccountAsync(id);

            rootPage.NotifyUser("Added account: " + account.UserDisplayName, NotifyType.StatusMessage);
        }
        /// <summary>
        /// Check the mailboxes, calendars, and contact lists for sync errors
        /// </summary>
        /// <param name="selectedAccount"></param>
        /// <returns>True if there is an sync error for email, calendar, or contacts. False if nothing is syncing or everything is syncing correctly</returns>
        private async Task<bool> IsFixNeededAsync(UserDataAccount selectedAccount)
        {
            foreach (EmailMailbox mailbox in await selectedAccount.FindEmailMailboxesAsync())
            {
                if (mailbox.SyncManager != null)
                {
                    switch (mailbox.SyncManager.Status)
                    {
                        case EmailMailboxSyncStatus.AuthenticationError:
                        case EmailMailboxSyncStatus.PolicyError:
                        case EmailMailboxSyncStatus.UnknownError:
                            return true;
                    }
                }
            }

            foreach (AppointmentCalendar calendar in await selectedAccount.FindAppointmentCalendarsAsync())
            {
                if (calendar.SyncManager != null)
                {
                    switch (calendar.SyncManager.Status)
                    {
                        case AppointmentCalendarSyncStatus.AuthenticationError:
                        case AppointmentCalendarSyncStatus.PolicyError:
                        case AppointmentCalendarSyncStatus.UnknownError:
                            return true;
                    }
                }
            }

            foreach (ContactList contactList in await selectedAccount.FindContactListsAsync())
            {
                if (contactList.SyncManager != null)
                {
                    switch (contactList.SyncManager.Status)
                    {
                        case ContactListSyncStatus.AuthenticationError:
                        case ContactListSyncStatus.PolicyError:
                        case ContactListSyncStatus.UnknownError:
                            return true;
                    }
                }
            }

            return false;
        }
Exemplo n.º 7
0
        private async Task <UserDataAccount> GetUserDataAccountAsync()
        {
            var store = await UserDataAccountManager.RequestStoreAsync(UserDataAccountStoreAccessType.AppAccountsReadWrite);

            UserDataAccount userDataAccount = null;
            var             id = _cacheService.GetOption <Telegram.Td.Api.OptionValueString>("x_user_data_account");

            if (id != null)
            {
                userDataAccount = await store.GetAccountAsync(id.Value);
            }

            if (userDataAccount == null)
            {
                userDataAccount = await store.CreateAccountAsync($"{_cacheService.GetMyId()}");

                await _protoService.SendAsync(new Telegram.Td.Api.SetOption("x_user_data_account", new Telegram.Td.Api.OptionValueString(userDataAccount.Id)));
            }

            return(userDataAccount);
        }
Exemplo n.º 8
0
        private async void buttonAdd_Click(object sender, RoutedEventArgs e)
        {
            // 弹出账号添加界面,如果添加成功会返回新建的数据账号的在本地设备上的唯一标识
            string userDataAccountId = await UserDataAccountManager.ShowAddAccountAsync(UserDataAccountContentKinds.Email | UserDataAccountContentKinds.Appointment | UserDataAccountContentKinds.Contact);

            if (string.IsNullOrEmpty(userDataAccountId))
            {
                lblMsg.Text += "用户取消了或添加账号失败";
                lblMsg.Text += Environment.NewLine;
            }
            else
            {
                UserDataAccountStore store = await UserDataAccountManager.RequestStoreAsync(UserDataAccountStoreAccessType.AllAccountsReadOnly);

                if (store != null)
                {
                    // 通过数据账号在本地设备上的唯一标识来获取 UserDataAccount 对象
                    UserDataAccount account = await store.GetAccountAsync(userDataAccountId);

                    lblMsg.Text += "新增的数据账号:" + account.UserDisplayName;
                }
            }
        }
Exemplo n.º 9
0
 public UserDataAccountAdapter(UserDataAccount userDataAccount)
 {
     UserDataAccount = userDataAccount;
 }