// Load configuration from AzureStorageExplorer.config
        private void LoadConfiguration()
        {
            string name, value;
            int pos;
            List<AccountViewModel> accounts = new List<AccountViewModel>();
            AccountViewModel avm = null;

            accounts.Add(
                new AccountViewModel(
                        "-- Select a Storage Account --", String.Empty, false, false,
                        new RelayCommand(param => this.ViewStorageAccount(param as StorageAccount)))
                        );

            var useHardcodedAccount = ConfigurationManager.AppSettings.Get("UseHardcodedAccount");
            var hardcodedAccountName = ConfigurationManager.AppSettings.Get("HardcodedAccountName");
            var hardCodedKey = ConfigurationManager.AppSettings.Get("HardcodedKey");
            var hardcodedUseHttps = ConfigurationManager.AppSettings.Get("HardcodedUseHttps");
            if (useHardcodedAccount != null && useHardcodedAccount.ToLower().Equals("true") &&
                !string.IsNullOrWhiteSpace(hardcodedAccountName) &&
                !string.IsNullOrWhiteSpace(hardCodedKey))
            {
                this.UseHardcodedAccount = true;
                var https = hardcodedUseHttps != null && hardcodedUseHttps.ToLower().Equals("true");
                accounts.Add(new AccountViewModel(hardcodedAccountName, hardCodedKey, https, true,
                                                  new RelayCommand(
                                                      param =>
                                                      this.ViewStorageAccount(param as StorageAccount))));
            }

            String folder = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) + "\\AzureStorageExplorer\\";
            Directory.CreateDirectory(folder);
            string filename = folder + ConfigFilename;

            if (File.Exists(filename))
            {
                string item = String.Empty;
                string line;
                using (TextReader tr = File.OpenText(filename))
                {
                    while ((line = tr.ReadLine()) != null)
                    {
                        if (line.StartsWith("["))
                        {
                            if (avm != null && !string.IsNullOrEmpty(avm.DisplayName) && !UseHardcodedAccount)
                            {
                                accounts.Add(avm);
                            }
                            switch (line)
                            {
                                case "[Account]":
                                    if (!UseHardcodedAccount)
                                    {
                                        item = line;
                                        avm = new AccountViewModel(null, null, false, false,
                                                                   new RelayCommand(
                                                                       param =>
                                                                       this.ViewStorageAccount(param as StorageAccount)));
                                    }
                                    else
                                    {
                                        item = "[SkipAccounts]";
                                    }
                                    break;
                                case "[Options]":
                                    item = line;
                                    break;
                                case "[ContentTypes]":
                                    item = line;
                                    break;
                            }
                        }
                        else
                        {
                            pos = line.IndexOf('=');
                            if (pos != -1)
                            {
                                name = line.Substring(0, pos);
                                value = line.Substring(pos + 1);
                                double doubleValue;
                                switch (item)
                                {
                                    case "[Options]":
                                        switch (name)
                                        {
                                            case "Culture":
                                                culture = value;
                                                break;
                                            case "ShowWelcomeOnStartup":
                                                showWelcomeOnStartup = (value == "1");
                                                break;
                                            case "PreserveWindowPosition":
                                                preserveWindowPosition = (value == "1");
                                                break;
                                            case "WindowTop":
                                                if (PreserveWindowPosition && Double.TryParse(value, out doubleValue))
                                                {
                                                    MainWindow.WindowTop = doubleValue;
                                                }
                                                break;
                                            case "WindowLeft":
                                                if (PreserveWindowPosition && Double.TryParse(value, out doubleValue))
                                                {
                                                    MainWindow.WindowLeft = doubleValue;
                                                }
                                                break;
                                            case "WindowHeight":
                                                if (PreserveWindowPosition && Double.TryParse(value, out doubleValue))
                                                {
                                                    MainWindow.WindowHeight = doubleValue;
                                                }
                                                break;
                                            case "WindowWidth":
                                                if (PreserveWindowPosition && Double.TryParse(value, out doubleValue))
                                                {
                                                    MainWindow.WindowWidth = doubleValue;
                                                }
                                                break;
                                            case "CheckForNewerVersion":
                                                checkForNewerVersion = (value == "1");
                                                break;
                                            case "LastVersionOffered":
                                                lastVersionOffered = value;
                                                break;
                                        }
                                        break;
                                    case "[ContentTypes]":
                                        switch (name)
                                        {
                                            case "SetContentTypeAutomatically":
                                                ContentTypeMapping.SetContentTypeAutomatically = (value == "1");
                                                break;
                                            case "Mapping":
                                                if (ContentTypeMapping.Values == null)
                                                {
                                                    ContentTypeMapping.Values = new List<ContentTypeMapping>();
                                                }
                                                ContentTypeMapping.Values.Add(new ContentTypeMapping(value));
                                                break;
                                        }
                                        break;
                                    case "[Account]":
                                        switch (name)
                                        {
                                            case "Name":
                                                avm.AccountName = value;
                                                break;
                                            case "ConnectionString":
                                                avm.Key = value;
                                                break;
                                            case "BlobContainersUpgraded":
                                                avm.BlobContainersUpgraded = (value == "1");
                                                break;
                                            case "AutoOpen":
                                                //account.AutoOpen = Boolean.Parse(value);
                                                break;
                                            case "UseHttps":
                                                avm.UseHttps = (value == "1");
                                                break;
                                        }
                                        break;
                                    case "[SkipAccounts]":
                                        break;
                                }
                            }
                        }
                    }
                    tr.Close();

                    if (avm != null)
                    {
                        if (avm != null && !string.IsNullOrEmpty(avm.AccountName))
                        {
                            accounts.Add(avm);
                        }
                        avm = null;
                    }
                }
            }

            SetCulture();

            Accounts = new ObservableCollection<AccountViewModel>(accounts);
        }
 public void RemoveAccount(AccountViewModel avm)
 {
     Accounts.Remove(avm);
     SaveConfiguration();
     OnPropertyChanged("Accounts");
 }
        public AccountViewModel UpdateAccount(AccountViewModel avm)
        {
            List<AccountViewModel> list = new List<AccountViewModel>(_accounts.ToArray());
            list.Sort();
            _accounts = new ObservableCollection<AccountViewModel>(list);

            SaveConfiguration();

            OnPropertyChanged("Accounts");

            return avm;
        }
        public AccountViewModel AddAccount(string name, string key, bool useHttps, bool blobContainersUpgraded)
        {
            AccountViewModel avm = new AccountViewModel(name, key, useHttps, blobContainersUpgraded,
                new RelayCommand(param => this.ViewStorageAccount(param as StorageAccount))
                );

            Accounts.Add(avm);

            List<AccountViewModel> list = new List<AccountViewModel>(_accounts.ToArray());
            list.Sort();
            _accounts = new ObservableCollection<AccountViewModel>(list);

            SaveConfiguration();

            OnPropertyChanged("Accounts");

            return avm;
        }