private async void BtnWeb_Click(object sender, RoutedEventArgs e)
        {
            var deck = await ImportDeckFromWeb();

            if (deck != null)
            {
                var reimport = EditingDeck && _newDeck != null &&
                               _newDeck.Url == deck.Url;

                if (reimport)                //keep old notes
                {
                    deck.Note = _newDeck.Note;
                }

                if (!deck.Note.Contains(deck.Url))
                {
                    deck.Note = deck.Url + "\n" + deck.Note;
                }

                SetNewDeck(deck, reimport);
                TagControlEdit.SetSelectedTags(deck.Tags);
            }
            else
            {
                await this.ShowMessageAsync("Error", "Could not load deck from specified url");
            }
        }
        public async void ImportDeck(string url = null)
        {
            if (url == null)
            {
                url = await InputDeckURL();
            }
            if (url == null)
            {
                return;
            }
            var deck = await ImportDeckFromURL(url);

            if (deck != null)
            {
                var reimport = EditingDeck && _newDeck != null && _newDeck.Url == deck.Url;

                if (reimport)                //keep old notes
                {
                    deck.Note = _newDeck.Note;
                }

                SetNewDeck(deck, reimport);
                TagControlEdit.SetSelectedTags(deck.Tags);
                if (Config.Instance.AutoSaveOnImport)
                {
                    SaveDeckWithOverwriteCheck();
                }
            }
            else
            {
                await this.ShowMessageAsync("Error", "Could not load deck from specified url");
            }
        }
Exemple #3
0
		private void BtnFile_Click(object sender, RoutedEventArgs e)
		{
			var dialog = new OpenFileDialog {Title = "Select Deck File", DefaultExt = "*.xml;*.txt", Filter = "Deck Files|*.txt;*.xml"};
			var dialogResult = dialog.ShowDialog();
			if(dialogResult == true)
			{
				try
				{
					Deck deck = null;

					if(dialog.FileName.EndsWith(".txt"))
					{
						using(var sr = new StreamReader(dialog.FileName))
							deck = ParseCardString(sr.ReadToEnd());
					}
					else if(dialog.FileName.EndsWith(".xml"))
					{
						deck = XmlManager<Deck>.Load(dialog.FileName);
						//not all required information is saved in xml
						foreach(var card in deck.Cards)
							card.Load();
						TagControlEdit.SetSelectedTags(deck.Tags);
					}
					SetNewDeck(deck);
					if(Config.Instance.AutoSaveOnImport)
						SaveDeckWithOverwriteCheck();
				}
				catch(Exception ex)
				{
					Logger.WriteLine("Error getting deck from file: \n" + ex, "Import");
				}
			}
		}
Exemple #4
0
        public async void ImportDeck(string url = null)
        {
            var result = await ImportDeckFromUrl(url);

            if (result.WasCancelled)
            {
                return;
            }
            if (result.Deck != null)
            {
                var reimport = EditingDeck && _newDeck != null && _newDeck.Url == result.Deck.Url;

                if (reimport)                //keep old notes
                {
                    result.Deck.Note = _newDeck.Note;
                }

                SetNewDeck(result.Deck, reimport);
                TagControlEdit.SetSelectedTags(result.Deck.Tags);
                if (Config.Instance.AutoSaveOnImport)
                {
                    SaveDeckWithOverwriteCheck();
                }
            }
            else
            {
                await this.ShowMessageAsync("No deck found", "Could not find a deck on" + Environment.NewLine + result.Url);
            }
        }
        private async void BtnWeb_Click(object sender, RoutedEventArgs e)
        {
            var url = await InputDeckURL();

            if (url == null)
            {
                return;
            }

            var deck = await ImportDeckFromURL(url);

            if (deck != null)
            {
                var reimport = EditingDeck && _newDeck != null && _newDeck.Url == deck.Url;

                if (reimport)                //keep old notes
                {
                    deck.Note = _newDeck.Note;
                }

                SetNewDeck(deck, reimport);
                TagControlEdit.SetSelectedTags(deck.Tags);
                if (Config.Instance.AutoSaveOnImport)
                {
                    await SaveDeckWithOverwriteCheck();
                }
            }
            else
            {
                await this.ShowMessageAsync("Error", "Could not load deck from specified url");
            }
        }
        private void DeckPickerList_OnSelectedDeckChanged(DeckPicker sender, Deck deck)
        {
            if (deck != null)
            {
                //set up notes
                DeckNotesEditor.SetDeck(deck);
                var flyoutHeader = deck.Name.Length >= 20 ? string.Join("", deck.Name.Take(17)) + "..." : deck.Name;
                FlyoutNotes.Header = flyoutHeader;
                if (Config.Instance.StatsInWindow)
                {
                    StatsWindow.Title = "Stats: " + deck.Name;
                    StatsWindow.StatsControl.SetDeck(deck);
                }
                else
                {
                    FlyoutDeckStats.Header = "Stats: " + deck.Name;
                    DeckStatsFlyout.SetDeck(deck);
                }

                //change player deck itemsource
                if (Overlay.ListViewPlayer.ItemsSource != Game.PlayerDeck)
                {
                    Overlay.ListViewPlayer.ItemsSource      = Game.PlayerDeck;
                    PlayerWindow.ListViewPlayer.ItemsSource = Game.PlayerDeck;
                    Logger.WriteLine("Set player itemsource as playerdeck");
                }
                Game.IsUsingPremade = true;
                UpdateDeckList(deck);
                UseDeck(deck);
                Logger.WriteLine("Switched to deck: " + deck.Name);

                //set and save last used deck for class
                while (DeckList.LastDeckClass.Any(ldc => ldc.Class == deck.Class))
                {
                    var lastSelected = DeckList.LastDeckClass.FirstOrDefault(ldc => ldc.Class == deck.Class);
                    if (lastSelected != null)
                    {
                        DeckList.LastDeckClass.Remove(lastSelected);
                    }
                    else
                    {
                        break;
                    }
                }
                DeckList.LastDeckClass.Add(new DeckInfo {
                    Class = deck.Class, Name = deck.Name
                });
                WriteDecks();
                EnableMenuItems(true);
                ManaCurveMyDecks.SetDeck(deck);
                TagControlEdit.SetSelectedTags(deck.Tags);
                MenuItemQuickSetTag.ItemsSource = TagControlEdit.Tags;
                MenuItemQuickSetTag.Items.Refresh();
                MenuItemUpdateDeck.IsEnabled = !string.IsNullOrEmpty(deck.Url);
            }
            else
            {
                EnableMenuItems(false);
            }
        }
 private void BtnTags_Click(object sender, RoutedEventArgs e)
 {
     FlyoutMyDecksSetTags.IsOpen = true;
     if (DeckPickerList.SelectedDeck != null)
     {
         TagControlEdit.SetSelectedTags(DeckPickerList.SelectedDeck.Tags);
     }
 }
 internal void ShowTagEditDialog(IEnumerable <Deck> decks)
 {
     if (decks == null || !decks.Any())
     {
         return;
     }
     FlyoutMyDecksSetTags.IsOpen = true;
     TagControlEdit.SetSelectedTags(decks);
 }
        internal void ImportFromFile()
        {
            var dialog = new OpenFileDialog {
                Title = "Select Deck File", DefaultExt = "*.xml;*.txt", Filter = "Deck Files|*.txt;*.xml"
            };

            dialog.Multiselect = true;
            var dialogResult = dialog.ShowDialog();

            if (dialogResult == true)
            {
                foreach (var file in dialog.FileNames)
                {
                    try
                    {
                        Deck deck = null;

                        if (file.EndsWith(".txt"))
                        {
                            using (var sr = new StreamReader(file))
                                deck = StringImporter.Import(sr.ReadToEnd());
                        }
                        else if (file.EndsWith(".xml"))
                        {
                            deck = XmlManager <Deck> .Load(file);

                            //not all required information is saved in xml
                            foreach (var card in deck.Cards)
                            {
                                card.Load();
                            }
                            TagControlEdit.SetSelectedTags(deck.Tags);
                        }
                        if (Config.Instance.AutoSaveOnImport || dialog.FileNames.Length > 1)
                        {
                            DeckManager.SaveDeck(deck);
                        }
                        else
                        {
                            ShowDeckEditorFlyout(deck, true);
                        }
                    }
                    catch (Exception ex)
                    {
                        Log.Error(ex);
                    }
                }
            }
        }
Exemple #10
0
        private void SaveImportedDeck(Deck deck)
        {
            var reimport = EditingDeck && _newDeck != null && _newDeck.Url == deck.Url;

            if (reimport)            //keep old notes
            {
                deck.Note = _newDeck.Note;
            }

            SetNewDeck(deck, reimport);
            TagControlEdit.SetSelectedTags(deck.Tags);
            if (Config.Instance.AutoSaveOnImport)
            {
                SaveDeckWithOverwriteCheck();
            }
        }
        private void BtnFile_Click(object sender, RoutedEventArgs e)
        {
            var dialog = new OpenFileDialog {
                Title = "Select Deck File", DefaultExt = "*.xml;*.txt", Filter = "Deck Files|*.txt;*.xml"
            };

            dialog.Multiselect = true;
            var dialogResult = dialog.ShowDialog();

            if (dialogResult == true)
            {
                foreach (String file in dialog.FileNames)
                {
                    try
                    {
                        Deck deck = null;

                        if (file.EndsWith(".txt"))
                        {
                            using (var sr = new StreamReader(file))
                                deck = Helper.ParseCardString(sr.ReadToEnd());
                        }
                        else if (file.EndsWith(".xml"))
                        {
                            deck = XmlManager <Deck> .Load(file);

                            //not all required information is saved in xml
                            foreach (var card in deck.Cards)
                            {
                                card.Load();
                            }
                            TagControlEdit.SetSelectedTags(deck.Tags);
                        }
                        SetNewDeck(deck);
                        if (Config.Instance.AutoSaveOnImport || dialog.FileNames.Length > 1)
                        {
                            SaveDeckWithOverwriteCheck();
                        }
                    }
                    catch (Exception ex)
                    {
                        Log.Error(ex);
                    }
                }
            }
        }
Exemple #12
0
        internal async void BtnUpdateDeck_Click(object sender, RoutedEventArgs e)
        {
            var selectedDeck = DeckPickerList.SelectedDecks.FirstOrDefault();

            if (selectedDeck == null || string.IsNullOrEmpty(selectedDeck.Url))
            {
                return;
            }
            var deck = await DeckImporter.Import(selectedDeck.Url);

            if (deck == null)
            {
                await this.ShowMessageAsync("Error", "Could not load deck from specified url.");

                return;
            }
            //this could be expanded to check against the last version of the deck that was not modified after downloading
            if (deck.Cards.All(c1 => selectedDeck.GetSelectedDeckVersion().Cards.Any(c2 => c1.Name == c2.Name && c1.Count == c2.Count)))
            {
                await this.ShowMessageAsync("Already up to date.", "No changes found.");

                return;
            }

            SetNewDeck(selectedDeck, true);
            TextBoxDeckName.Text = deck.Name;
            _newDeck.Cards.Clear();
            foreach (var card in deck.Cards)
            {
                _newDeck.Cards.Add(card);
            }
            _newDeck.Edited();

            UpdateCardCount();
            Helper.SortCardCollection(ListViewDeck.Items, Config.Instance.CardSortingClassFirst);
            ManaCurveMyDecks.UpdateValues();

            TagControlEdit.SetSelectedTags(deck.Tags);
        }
Exemple #13
0
        private async void BtnUpdateDeck_Click(object sender, RoutedEventArgs e)
        {
            var selectedDeck = DeckPickerList.SelectedDeck;

            if (selectedDeck == null || string.IsNullOrEmpty(selectedDeck.Url))
            {
                return;
            }
            var deck = await DeckImporter.Import(selectedDeck.Url);

            if (deck == null)
            {
                await this.ShowMessageAsync("Error", "Could not load deck from specified url.");

                return;
            }
            if (deck.Cards.All(c1 => selectedDeck.Cards.Any(c2 => c1.Name == c2.Name && c1.Count == c2.Count)))
            {
                await this.ShowMessageAsync("Already up to date.", "No changes found.");

                return;
            }

            SetNewDeck(selectedDeck, true);
            TextBoxDeckName.Text = deck.Name;
            _newDeck.Cards.Clear();
            foreach (var card in deck.Cards)
            {
                _newDeck.Cards.Add(card);
            }

            UpdateTitle();
            Helper.SortCardCollection(ListViewDeck.Items, Config.Instance.CardSortingClassFirst);
            ManaCurveMyDecks.UpdateValues();

            TagControlEdit.SetSelectedTags(deck.Tags);
        }
        internal async void UpdateDeckFromWeb(Deck existingDeck)
        {
            if (existingDeck == null || string.IsNullOrEmpty(existingDeck.Url))
            {
                return;
            }
            var deck = await DeckImporter.Import(existingDeck.Url);

            if (deck == null)
            {
                await this.ShowMessageAsync("Error", "Could not load deck from specified url.");

                return;
            }
            //this could be expanded to check against the last version of the deck that was not modified after downloading
            if (deck.Cards.All(c1 => existingDeck.GetSelectedDeckVersion().Cards.Any(c2 => c1.Name == c2.Name && c1.Count == c2.Count)) && deck.Name == existingDeck.Name)
            {
                await this.ShowMessageAsync("Already up to date.", "No changes found.");

                return;
            }

            var imported = (Deck)existingDeck.Clone();

            imported.Name = deck.Name;
            imported.Cards.Clear();
            foreach (var card in deck.Cards)
            {
                imported.Cards.Add(card);
            }
            ShowDeckEditorFlyout(imported, false);
            Helper.SortCardCollection(ListViewDeck.Items, Config.Instance.CardSortingClassFirst);
            ManaCurveMyDecks.UpdateValues();

            TagControlEdit.SetSelectedTags(deck.Tags);
        }
        public void SelectDeck(Deck deck, bool setActive)
        {
            if (DeckList.Instance.ActiveDeck != null)
            {
                DeckPickerList.ClearFromCache(DeckList.Instance.ActiveDeck);
            }
            if (deck != null)
            {
                //set up tags
                TagControlEdit.SetSelectedTags(DeckPickerList.SelectedDecks);
                DeckPickerList.MenuItemQuickSetTag.ItemsSource = TagControlEdit.Tags;
                DeckPickerList.MenuItemQuickSetTag.Items.Refresh();

                OnPropertyChanged(nameof(HsReplayButtonVisibility));

                //set and save last used deck for class
                if (setActive)
                {
                    while (DeckList.Instance.LastDeckClass.Any(ldc => ldc.Class == deck.Class))
                    {
                        var lastSelected = DeckList.Instance.LastDeckClass.FirstOrDefault(ldc => ldc.Class == deck.Class);
                        if (lastSelected != null)
                        {
                            DeckList.Instance.LastDeckClass.Remove(lastSelected);
                        }
                        else
                        {
                            break;
                        }
                    }
                    if (Core.Initialized)
                    {
                        DeckList.Instance.LastDeckClass.Add(new DeckInfo {
                            Class = deck.Class, Name = deck.Name, Id = deck.DeckId
                        });
                        DeckList.Save();
                    }

                    Log.Info($"Switched to deck: {deck.Name} ({deck.SelectedVersion.ShortVersionString})");
                    Core.TrayIcon.MenuItemUseNoDeck.Checked = false;
                }

                if (FlyoutDeckScreenshot.IsOpen)
                {
                    DeckScreenshotFlyout.Deck = deck.GetSelectedDeckVersion();
                }
                if (FlyoutDeckExport.IsOpen)
                {
                    DeckExportFlyout.Deck = deck.GetSelectedDeckVersion();
                }

                if (FlyoutDeckHistory.IsOpen)
                {
                    if (deck.HasVersions)
                    {
                        DeckHistoryFlyout.Deck = deck;
                    }
                    else
                    {
                        FlyoutDeckHistory.IsOpen = false;
                    }
                }
            }
            else
            {
                Core.Game.IsUsingPremade = false;

                if (DeckList.Instance.ActiveDeck != null)
                {
                    DeckList.Instance.ActiveDeck.IsSelectedInGui = false;
                }

                DeckList.Instance.ActiveDeck = null;
                if (setActive)
                {
                    DeckPickerList.DeselectDeck();
                }

                Core.TrayIcon.MenuItemUseNoDeck.Checked = true;
            }

            if (setActive)
            {
                UseDeck(deck);
            }
            DeckPickerList.SelectDeck(deck);
            UpdateDeckList(deck);
            ManaCurveMyDecks.SetDeck(deck);
            UpdatePanelVersionComboBox(deck);
            GroupBoxHsReplayDeckInfo.Visibility = deck?.IsArenaDeck == true ? Collapsed : Visible;
            if (setActive)
            {
                Core.Overlay.ListViewPlayer.Items.Refresh();
                Core.Windows.PlayerWindow.ListViewPlayer.Items.Refresh();
            }
            DeckManagerEvents.OnDeckSelected.Execute(deck);
        }
Exemple #16
0
        public void SelectDeck(Deck deck, bool setActive)
        {
            if (DeckList.Instance.ActiveDeck != null)
            {
                DeckPickerList.ClearFromCache(DeckList.Instance.ActiveDeck);
            }
            if (deck != null)
            {
                //set up notes
                DeckNotesEditor.SetDeck(deck);
                var flyoutHeader = deck.Name.Length >= 20 ? string.Join("", deck.Name.Take(17)) + "..." : deck.Name;
                FlyoutNotes.Header = flyoutHeader;

                //set up tags
                TagControlEdit.SetSelectedTags(DeckPickerList.SelectedDecks);
                MenuItemQuickSetTag.ItemsSource = TagControlEdit.Tags;
                MenuItemQuickSetTag.Items.Refresh();
                DeckPickerList.MenuItemQuickSetTag.ItemsSource = TagControlEdit.Tags;
                DeckPickerList.MenuItemQuickSetTag.Items.Refresh();


                //set and save last used deck for class
                if (setActive)
                {
                    while (DeckList.Instance.LastDeckClass.Any(ldc => ldc.Class == deck.Class))
                    {
                        var lastSelected = DeckList.Instance.LastDeckClass.FirstOrDefault(ldc => ldc.Class == deck.Class);
                        if (lastSelected != null)
                        {
                            DeckList.Instance.LastDeckClass.Remove(lastSelected);
                        }
                        else
                        {
                            break;
                        }
                    }
                    if (Core.Initialized)
                    {
                        DeckList.Instance.LastDeckClass.Add(new DeckInfo {
                            Class = deck.Class, Name = deck.Name, Id = deck.DeckId
                        });
                        DeckList.Save();
                    }

                    Log.Info("Switched to deck: " + deck.Name);

                    int useNoDeckMenuItem = Core.TrayIcon.NotifyIcon.ContextMenu.MenuItems.IndexOfKey(TrayIcon.UseNoDeckMenuItemName);
                    Core.TrayIcon.NotifyIcon.ContextMenu.MenuItems[useNoDeckMenuItem].Checked = false;
                }
            }
            else
            {
                Core.Game.IsUsingPremade = false;

                if (DeckList.Instance.ActiveDeck != null)
                {
                    DeckList.Instance.ActiveDeck.IsSelectedInGui = false;
                }

                DeckList.Instance.ActiveDeck = null;
                if (setActive)
                {
                    DeckPickerList.DeselectDeck();
                }

                var useNoDeckMenuItem = Core.TrayIcon.NotifyIcon.ContextMenu.MenuItems.IndexOfKey(TrayIcon.UseNoDeckMenuItemName);
                Core.TrayIcon.NotifyIcon.ContextMenu.MenuItems[useNoDeckMenuItem].Checked = true;
            }

            if (setActive)
            {
                UseDeck(deck);
            }
            DeckPickerList.SelectDeck(deck);
            UpdateDeckList(deck);
            EnableMenuItems(deck != null);
            ManaCurveMyDecks.SetDeck(deck);
            UpdatePanelVersionComboBox(deck);
            if (setActive)
            {
                Core.Overlay.ListViewPlayer.Items.Refresh();
                Core.Windows.PlayerWindow.ListViewPlayer.Items.Refresh();
            }
            DeckManagerEvents.OnDeckSelected.Execute(deck);
        }
        private async void SaveDeck(bool overwrite)
        {
            var deckName = TextBoxDeckName.Text;

            if (string.IsNullOrEmpty(deckName))
            {
                var settings = new MetroDialogSettings {
                    AffirmativeButtonText = "Set", DefaultText = deckName
                };

                var name = await this.ShowInputAsync("No name set", "Please set a name for the deck", settings);

                if (String.IsNullOrEmpty(name))
                {
                    return;
                }

                deckName             = name;
                TextBoxDeckName.Text = name;
            }

            while (DeckList.DecksList.Any(d => d.Name == deckName) && (!EditingDeck || !overwrite))
            {
                var settings = new MetroDialogSettings {
                    AffirmativeButtonText = "Set", DefaultText = deckName
                };
                var name =
                    await
                    this.ShowInputAsync("Name already exists", "You already have a deck with that name, please select a different one.", settings);

                if (String.IsNullOrEmpty(name))
                {
                    return;
                }

                deckName             = name;
                TextBoxDeckName.Text = name;
            }

            if (_newDeck.Cards.Sum(c => c.Count) != 30)
            {
                var settings = new MetroDialogSettings {
                    AffirmativeButtonText = "Yes", NegativeButtonText = "No"
                };

                var result =
                    await
                    this.ShowMessageAsync("Not 30 cards",
                                          string.Format("Deck contains {0} cards. Is this what you want to save anyway?",
                                                        _newDeck.Cards.Sum(c => c.Count)),
                                          MessageDialogStyle.AffirmativeAndNegative, settings);

                if (result != MessageDialogResult.Affirmative)
                {
                    return;
                }
            }

            if (EditingDeck && overwrite)
            {
                DeckList.DecksList.Remove(_newDeck);
                DeckPickerList.RemoveDeck(_newDeck);
            }

            var oldDeckName = _newDeck.Name;

            _newDeck.Name = deckName;
            _newDeck.Tags = TagControlEdit.GetTags();

            var newDeckClone = (Deck)_newDeck.Clone();

            DeckList.DecksList.Add(newDeckClone);

            newDeckClone.LastEdited = DateTime.Now;

            WriteDecks();
            Logger.WriteLine("Saved Decks");

            if (EditingDeck)
            {
                TagControlEdit.SetSelectedTags(new List <string>());
                if (deckName != oldDeckName)
                {
                    var statsEntry = DeckStatsList.Instance.DeckStats.FirstOrDefault(d => d.Name == oldDeckName);
                    if (statsEntry != null)
                    {
                        if (overwrite)
                        {
                            statsEntry.Name = deckName;
                            Logger.WriteLine("Deck has new name, updated deckstats");
                        }
                        else
                        {
                            var newStatsEntry = DeckStatsList.Instance.DeckStats.FirstOrDefault(d => d.Name == deckName);
                            if (newStatsEntry == null)
                            {
                                newStatsEntry = new DeckStats(deckName);
                                DeckStatsList.Instance.DeckStats.Add(newStatsEntry);
                            }
                            foreach (var game in statsEntry.Games)
                            {
                                newStatsEntry.AddGameResult(game.CloneWithNewId());
                            }
                            Logger.WriteLine("cloned gamestats for \"Set as new\"");
                        }
                        DeckStatsList.Save();
                    }
                }
            }

            //after cloning the stats, otherwise new stats will be generated
            DeckPickerList.AddAndSelectDeck(newDeckClone);

            EditingDeck = false;

            foreach (var tag in _newDeck.Tags)
            {
                SortFilterDecksFlyout.AddSelectedTag(tag);
            }

            DeckPickerList.UpdateList();
            DeckPickerList.SelectDeck(newDeckClone);

            CloseNewDeck();
            ClearNewDeckSection();
        }
Exemple #18
0
        private async void SaveDeck(bool overwrite, SerializableVersion newVersion)
        {
            var deckName = TextBoxDeckName.Text;

            if (string.IsNullOrEmpty(deckName))
            {
                var settings = new MetroDialogSettings {
                    AffirmativeButtonText = "Set", DefaultText = deckName
                };

                var name = await this.ShowInputAsync("No name set", "Please set a name for the deck", settings);

                if (String.IsNullOrEmpty(name))
                {
                    return;
                }

                deckName             = name;
                TextBoxDeckName.Text = name;
            }

            /*while(DeckList.DecksList.Any(d => d.Name == deckName) && (!EditingDeck || !overwrite))
             * {
             *      var settings = new MetroDialogSettings {AffirmativeButtonText = "Set", DefaultText = deckName};
             *      var name =
             *              await
             *              this.ShowInputAsync("Name already exists", "You already have a deck with that name, please select a different one.", settings);
             *
             *      if(String.IsNullOrEmpty(name))
             *              return;
             *
             *      deckName = name;
             *      TextBoxDeckName.Text = name;
             * }*/

            if (_newDeck.Cards.Sum(c => c.Count) != 30)
            {
                var settings = new MetroDialogSettings {
                    AffirmativeButtonText = "Yes", NegativeButtonText = "No"
                };

                var result =
                    await
                    this.ShowMessageAsync("Not 30 cards",
                                          string.Format("Deck contains {0} cards. Is this what you want to save anyway?",
                                                        _newDeck.Cards.Sum(c => c.Count)), MessageDialogStyle.AffirmativeAndNegative, settings);

                if (result != MessageDialogResult.Affirmative)
                {
                    return;
                }
            }

            var previousVersion = _newDeck.Version;

            if (overwrite && (_newDeck.Version != newVersion))
            {
                AddDeckHistory();
                _newDeck.Version                  = newVersion;
                _newDeck.SelectedVersion          = newVersion;
                _newDeck.HearthStatsDeckVersionId = "";
                //UpdateDeckHistoryPanel(_newDeck, false);
            }

            if (EditingDeck && overwrite)
            {
                DeckList.Instance.Decks.Remove(_newDeck);
                //DeckPickerList.RemoveDeck(_newDeck);
            }

            var oldDeckName = _newDeck.Name;

            _newDeck.Name = deckName;

            var newDeckClone = (Deck)_newDeck.Clone();

            newDeckClone.Archived = false;

            DeckList.Instance.Decks.Add(newDeckClone);

            newDeckClone.LastEdited = DateTime.Now;

            DeckList.Save();

            Logger.WriteLine("Saved Decks", "SaveDeck");

            if (EditingDeck)
            {
                TagControlEdit.SetSelectedTags(new List <string>());
                if (deckName != oldDeckName)
                {
                    var statsEntry = DeckStatsList.Instance.DeckStats.FirstOrDefault(ds => ds.BelongsToDeck(_newDeck));
                    if (statsEntry != null)
                    {
                        if (overwrite)
                        {
                            statsEntry.Name = deckName;
                            Logger.WriteLine("Deck has new name, updated deckstats", "SaveDeck");
                        }
                        else
                        {
                            var newStatsEntry = DeckStatsList.Instance.DeckStats.FirstOrDefault(ds => ds.BelongsToDeck(_newDeck));
                            if (newStatsEntry == null)
                            {
                                newStatsEntry = new DeckStats(_newDeck);
                                DeckStatsList.Instance.DeckStats.Add(newStatsEntry);
                            }
                            foreach (var game in statsEntry.Games)
                            {
                                newStatsEntry.AddGameResult(game.CloneWithNewId());
                            }
                            Logger.WriteLine("cloned gamestats for \"Set as new\"", "SaveDeck");
                        }
                        DeckStatsList.Save();
                    }
                }
            }


            if (Config.Instance.HearthStatsAutoUploadNewDecks && HearthStatsAPI.IsLoggedIn)
            {
                Logger.WriteLine("auto uploading new/edited deck", "SaveDeck");
                if (EditingDeck)
                {
                    if (previousVersion != newVersion)
                    {
                        HearthStatsManager.UploadVersionAsync(newDeckClone, _originalDeck.HearthStatsIdForUploading, background: true);
                    }
                    else
                    {
                        HearthStatsManager.UpdateDeckAsync(newDeckClone, background: true);
                    }
                }
                else
                {
                    HearthStatsManager.UploadDeckAsync(newDeckClone, background: true);
                }
            }

            //after cloning the stats, otherwise new stats will be generated
            //DeckPickerList.AddAndSelectDeck(newDeckClone);

            EditingDeck = false;

            foreach (var tag in _newDeck.Tags)
            {
                SortFilterDecksFlyout.AddSelectedTag(tag);
            }

            DeckPickerList.SelectDeckAndAppropriateView(newDeckClone);
            CloseNewDeck();
            ClearNewDeckSection();
        }
Exemple #19
0
        private void BtnFile_Click(object sender, RoutedEventArgs e)
        {
            var dialog = new OpenFileDialog
            {
                Title      = "Select Deck File",
                DefaultExt = "*.xml;*.txt",
                Filter     = "Deck Files|*.txt;*.xml"
            };
            var dialogResult = dialog.ShowDialog();

            if (dialogResult == true)
            {
                try
                {
                    Deck deck = null;

                    if (dialog.FileName.EndsWith(".txt"))
                    {
                        using (var sr = new StreamReader(dialog.FileName))
                        {
                            deck = new Deck();
                            var lines = sr.ReadToEnd().Split('\n');
                            foreach (var line in lines)
                            {
                                var card = Game.GetCardFromName(line.Trim());
                                if (card.Name == "")
                                {
                                    continue;
                                }

                                if (string.IsNullOrEmpty(deck.Class) && card.PlayerClass != "Neutral")
                                {
                                    deck.Class = card.PlayerClass;
                                }

                                if (deck.Cards.Contains(card))
                                {
                                    var deckCard = deck.Cards.First(c => c.Equals(card));
                                    deck.Cards.Remove(deckCard);
                                    deckCard.Count++;
                                    deck.Cards.Add(deckCard);
                                }
                                else
                                {
                                    deck.Cards.Add(card);
                                }
                            }
                        }
                    }
                    else if (dialog.FileName.EndsWith(".xml"))
                    {
                        deck = XmlManager <Deck> .Load(dialog.FileName);

                        //not all required information is saved in xml
                        foreach (var card in deck.Cards)
                        {
                            card.Load();
                        }
                        TagControlEdit.SetSelectedTags(deck.Tags);
                    }
                    SetNewDeck(deck);
                }
                catch (Exception ex)
                {
                    Logger.WriteLine("Error getting deck from file: \n" + ex.Message + "\n" + ex.StackTrace);
                }
            }
        }
Exemple #20
0
        public async void SaveDeck(bool overwrite, SerializableVersion newVersion, bool workInProgressDeck = false)
        {
            var deckName = TextBoxDeckName.Text;

            if (string.IsNullOrEmpty(deckName))
            {
                var settings = new MessageDialogs.Settings {
                    AffirmativeButtonText = "Set", DefaultText = deckName
                };

                var name = await this.ShowInputAsync("No name set", "Please set a name for the deck", settings);

                if (string.IsNullOrEmpty(name))
                {
                    return;
                }

                deckName             = name;
                TextBoxDeckName.Text = name;
            }

            if (_newDeck.Cards.Sum(c => c.Count) != 30 && workInProgressDeck == false)
            {
                var settings = new MessageDialogs.Settings {
                    AffirmativeButtonText = "Yes", NegativeButtonText = "No"
                };

                var result =
                    await
                    this.ShowMessageAsync("Not 30 cards",
                                          $"Deck contains {_newDeck.Cards.Sum(c => c.Count)} cards. Is this what you want to save anyway?", MessageDialogStyle.AffirmativeAndNegative, settings);

                if (result != MessageDialogResult.Affirmative)
                {
                    return;
                }
            }

            var previousVersion = _newDeck.Version;

            if (overwrite && (_newDeck.Version != newVersion))
            {
                AddDeckHistory();
                _newDeck.Version                  = newVersion;
                _newDeck.SelectedVersion          = newVersion;
                _newDeck.HearthStatsDeckVersionId = "";
            }

            if (EditingDeck && overwrite)
            {
                DeckList.Instance.Decks.Remove(_newDeck);
            }

            var oldDeckName = _newDeck.Name;

            _newDeck.Name = deckName;

            var newDeckClone = (Deck)_newDeck.Clone();

            newDeckClone.Archived = false;

            DeckList.Instance.Decks.Add(newDeckClone);

            newDeckClone.LastEdited = DateTime.Now;

            DeckList.Save();

            Log.Info("Saved Decks");

            if (EditingDeck)
            {
                TagControlEdit.SetSelectedTags(new List <string>());
                if (deckName != oldDeckName)
                {
                    var statsEntry = DeckStatsList.Instance.DeckStats.FirstOrDefault(ds => ds.BelongsToDeck(_newDeck));
                    if (statsEntry != null)
                    {
                        if (overwrite)
                        {
                            statsEntry.Name = deckName;
                            Log.Info("Deck has new name, updated deckstats");
                            foreach (var game in statsEntry.Games)
                            {
                                game.DeckName = deckName;
                            }
                        }
                        else
                        {
                            var newStatsEntry = DeckStatsList.Instance.DeckStats.FirstOrDefault(ds => ds.BelongsToDeck(_newDeck));
                            if (newStatsEntry == null)
                            {
                                newStatsEntry = new DeckStats(_newDeck);
                                DeckStatsList.Instance.DeckStats.Add(newStatsEntry);
                            }
                            foreach (var game in statsEntry.Games)
                            {
                                newStatsEntry.AddGameResult(game.CloneWithNewId());
                            }
                            Log.Info("cloned gamestats for \"Set as new\"");
                        }
                        DeckStatsList.Save();
                    }
                }
            }


            if (Config.Instance.HearthStatsAutoUploadNewDecks && HearthStatsAPI.IsLoggedIn)
            {
                Log.Info("auto uploading new/edited deck");
                if (EditingDeck)
                {
                    if (previousVersion != newVersion)
                    {
                        HearthStatsManager.UploadVersionAsync(newDeckClone, _originalDeck.HearthStatsIdForUploading, background: true).Forget();
                    }
                    else
                    {
                        HearthStatsManager.UpdateDeckAsync(newDeckClone, background: true).Forget();
                    }
                }
                else
                {
                    HearthStatsManager.UploadDeckAsync(newDeckClone, background: true).Forget();
                }
            }

            if (EditingDeck)
            {
                DeckManagerEvents.OnDeckUpdated.Execute(newDeckClone);
            }
            else
            {
                DeckManagerEvents.OnDeckCreated.Execute(newDeckClone);
            }


            EditingDeck = false;

            foreach (var tag in _newDeck.Tags)
            {
                SortFilterDecksFlyout.AddSelectedTag(tag);
            }

            DeckPickerList.SelectDeckAndAppropriateView(newDeckClone);
            DeckPickerList.UpdateDecks(forceUpdate: new[] { newDeckClone });
            SelectDeck(newDeckClone, true);
            CloseNewDeck();
            ClearNewDeckSection();
        }
Exemple #21
0
 internal void BtnTags_Click(object sender, RoutedEventArgs e)
 {
     FlyoutMyDecksSetTags.IsOpen = true;
     TagControlEdit.SetSelectedTags(DeckPickerList.SelectedDecks);
 }