/// <summary>
        /// Load the accounts from the accounts file
        /// </summary>
        private async Task LoadAccountsAsync()
        {
            string   accountFileName = GetAccountFileName();
            FileInfo fileInfo        = new FileInfo(accountFileName);

            if (!fileInfo.Exists || fileInfo.Length == 0)
            {
                using (File.Create(accountFileName))
                {
                }
                await this.SaveAccountsAsync().ConfigureAwait(false);
            }

            //Try first to deserialize using the new account deserialization mechanism, if that fails, fall back to the old way
            bool writeBackToFile = false;

            try
            {
                XmlSerializer x = new XmlSerializer(typeof(DefaultAccountSerializationContainer));
                using (StreamReader reader = new StreamReader(accountFileName))
                {
                    object deserializedObject = x.Deserialize(reader); //TODO: This is not technically async...

                    DefaultAccountSerializationContainer accountContainer = (DefaultAccountSerializationContainer)deserializedObject;

                    List <Account> accounts = accountContainer.GetAccountCollection(this);

                    //Update accounts to the new URI format if required
                    writeBackToFile = this.UpdateAccountsToNewUriFormat(accounts);

                    this.Accounts = new ObservableCollection <Account>(accounts);
                }
            }
            catch (InvalidOperationException)
            {
                writeBackToFile = true;
                XmlSerializer x = new XmlSerializer(typeof(LegacyAccountManager));
                using (StreamReader reader = new StreamReader(accountFileName))
                {
                    object deserializedObject = x.Deserialize(reader); //TODO: This is not technically async...

                    LegacyAccountManager legacyAccountManager = (LegacyAccountManager)deserializedObject;
                    this.Accounts = new ObservableCollection <Account>(legacyAccountManager.CreateAccounts(this));
                }
            }

            //One time write back to change format of the file
            if (writeBackToFile)
            {
                await this.SaveAccountsAsync().ConfigureAwait(false);
            }
        }
Пример #2
0
        /// <summary>
        /// Load the accounts from the accounts file
        /// </summary>
        private async Task LoadAccountsAsync()
        {
            string accountFileName = GetAccountFileName();

            if (!File.Exists(accountFileName))
            {
                using (var myFile = File.Create(accountFileName))
                {
                }
                await this.SaveAccountsAsync().ConfigureAwait(false);
            }

            //Try first to deserialize using the new account deserialization mechanism, if that fails, fall back to the old way
            bool initialLoadFailed = false;

            try
            {
                XmlSerializer x = new XmlSerializer(typeof(DefaultAccountSerializationContainer));
                using (StreamReader reader = new StreamReader(accountFileName))
                {
                    object deserializedObject = x.Deserialize(reader); //TODO: This is not technically async...

                    DefaultAccountSerializationContainer accountContainer = (DefaultAccountSerializationContainer)deserializedObject;

                    this.Accounts = new ObservableCollection <Account>(accountContainer.GetAccountCollection(this));
                }
            }
            catch (InvalidOperationException)
            {
                initialLoadFailed = true;
                XmlSerializer x = new XmlSerializer(typeof(LegacyAccountManager));
                using (StreamReader reader = new StreamReader(accountFileName))
                {
                    object deserializedObject = x.Deserialize(reader); //TODO: This is not technically async...

                    LegacyAccountManager legacyAccountManager = (LegacyAccountManager)deserializedObject;
                    this.Accounts = new ObservableCollection <Account>(legacyAccountManager.CreateAccounts(this));
                }
            }

            //One time write back to change format of the file
            if (initialLoadFailed)
            {
                await this.SaveAccountsAsync().ConfigureAwait(false);
            }
        }