public static async Task<bool> Export(Deck deck) { if(deck == null) return false; var currentClipboard = ""; var altScreenCapture = Config.Instance.AlternativeScreenCapture; try { Log.Info("Exporting " + deck.GetDeckInfo()); if(Config.Instance.ExportPasteClipboard && Clipboard.ContainsText()) currentClipboard = Clipboard.GetText(); var info = new ExportingInfo(); LogDebugInfo(info); var inForeground = await ExportingHelper.EnsureHearthstoneInForeground(info.HsHandle); if(!inForeground) return false; Log.Info($"Waiting for {Config.Instance.ExportStartDelay} seconds before starting the export process"); await Task.Delay(Config.Instance.ExportStartDelay * 1000); if(!altScreenCapture) Core.Overlay.ForceHide(true); await ClearDeck(info); await SetDeckName(deck, info); await ClearFilters(info); var lostFocus = await CreateDeck(deck, info); if(lostFocus) return false; await ClearSearchBox(info.HsHandle, info.SearchBoxPos); if(Config.Instance.ExportPasteClipboard) Clipboard.Clear(); Log.Info("Success exporting deck."); return true; } catch(Exception e) { Log.Error("Error exporting deck: " + e); return false; } finally { if(!altScreenCapture) Core.Overlay.ForceHide(false); try { if(Config.Instance.ExportPasteClipboard && currentClipboard != "") Clipboard.SetText(currentClipboard); } catch(Exception ex) { Log.Error("Could not restore clipboard content after export: " + ex); } } }
public static async Task<bool> Export(Deck deck, Func<Task<bool>> onInterrupt) { if(deck == null) return false; var currentClipboard = ""; try { Log.Info("Exporting " + deck.GetDeckInfo()); if(Config.Instance.ExportPasteClipboard && Clipboard.ContainsText()) currentClipboard = Clipboard.GetText(); var info = new ExportingInfo(); LogDebugInfo(info); info = await ExportingHelper.EnsureHearthstoneInForeground(info); if(info == null) return false; LogDebugInfo(info); Log.Info($"Waiting for {Config.Instance.ExportStartDelay} seconds before starting the export process"); await Task.Delay(Config.Instance.ExportStartDelay*1000); var exporter = new ExportingActions(info, deck, onInterrupt); await exporter.ClearDeck(); await exporter.SetDeckName(); await exporter.ClearFilters(); await exporter.CreateDeck(); await exporter.ClearSearchBox(); if(Config.Instance.ExportPasteClipboard) Clipboard.Clear(); Log.Info("Success exporting deck."); return true; } catch(ExportingInterruptedException e) { Log.Warn(e.Message); return false; } catch(Exception e) { Log.Error("Error exporting deck: " + e); return false; } finally { try { if(Config.Instance.ExportPasteClipboard && currentClipboard != "") Clipboard.SetText(currentClipboard); } catch(Exception ex) { Log.Error("Could not restore clipboard content after export: " + ex); } } }
public static async Task Export(Deck deck) { if(deck == null) return; var currentClipboard = ""; try { Logger.WriteLine("Exporting " + deck.GetDeckInfo(), "DeckExporter"); if(Config.Instance.ExportPasteClipboard && Clipboard.ContainsText()) currentClipboard = Clipboard.GetText(); var info = new ExportingInfo(); LogDebugInfo(info); var inForeground = await ExportingHelper.EnsureHearthstoneInForeground(info.HsHandle); if(!inForeground) return; Logger.WriteLine($"Waiting for {Config.Instance.ExportStartDelay} seconds before starting the export process", "DeckExporter"); await Task.Delay(Config.Instance.ExportStartDelay * 1000); Core.Overlay.ForceHide(true); await ClearDeck(info); await SetDeckName(deck, info); await ClearFilters(info); var lostFocus = await CreateDeck(deck, info); if(lostFocus) return; await ClearSearchBox(info.HsHandle, info.SearchBoxPos); if(Config.Instance.ExportPasteClipboard) Clipboard.Clear(); Logger.WriteLine("Success exporting deck.", "DeckExporter"); } catch(Exception e) { Logger.WriteLine("Error exporting deck: " + e, "DeckExporter"); } finally { Core.Overlay.ForceHide(false); if(Config.Instance.ExportPasteClipboard && currentClipboard != "") Clipboard.SetText(currentClipboard); } }
public static async Task Export(Deck deck) { if(deck == null) return; string Current_Clipboard = ""; try { if(Config.Instance.ExportPasteClipboard && Clipboard.ContainsText()) Current_Clipboard = Clipboard.GetText(); Logger.WriteLine(string.Format("Exporting " + deck.GetDeckInfo()), "DeckExporter"); var hsHandle = User32.GetHearthstoneWindow(); if(!User32.IsHearthstoneInForeground()) { //restore window and bring to foreground User32.ShowWindow(hsHandle, User32.SwRestore); User32.SetForegroundWindow(hsHandle); //wait it to actually be in foreground, else the rect might be wrong await Task.Delay(500); } if(!User32.IsHearthstoneInForeground()) { MessageBox.Show("Can't find Hearthstone window."); Logger.WriteLine("Can't find Hearthstone window.", "DeckExporter"); return; } Logger.WriteLine("Waiting for " + Config.Instance.ExportStartDelay + " seconds before starting the export process", "DeckExporter"); await Task.Delay(Config.Instance.ExportStartDelay * 1000); var hsRect = User32.GetHearthstoneRect(false); var ratio = (4.0 / 3.0) / ((double)hsRect.Width / hsRect.Height); var searchBoxPos = new Point((int)(GetXPos(Config.Instance.ExportSearchBoxX, hsRect.Width, ratio)), (int)(Config.Instance.ExportSearchBoxY * hsRect.Height)); var cardPosX = GetXPos(Config.Instance.ExportCard1X, hsRect.Width, ratio); var card2PosX = GetXPos(Config.Instance.ExportCard2X, hsRect.Width, ratio); var cardPosY = Config.Instance.ExportCardsY * hsRect.Height; Helper.MainWindow.Overlay.ForceHidden = true; Helper.MainWindow.Overlay.UpdatePosition(); if(Config.Instance.AutoClearDeck) await ClearDeck(hsRect.Width, hsRect.Height, hsHandle, ratio); if(Config.Instance.ExportSetDeckName && !deck.TagList.ToLower().Contains("brawl")) await SetDeckName(deck.Name, ratio, hsRect.Width, hsRect.Height, hsHandle); await ClickAllCrystal(ratio, hsRect.Width, hsRect.Height, hsHandle); Logger.WriteLine("Creating deck...", "DeckExporter"); deck.MissingCards.Clear(); foreach(var card in deck.Cards) { var missingCardsCount = await AddCardToDeck(card, searchBoxPos, cardPosX, card2PosX, cardPosY, hsRect.Height, hsRect.Width, hsHandle); if(missingCardsCount < 0) return; if(missingCardsCount > 0) { var missingCard = (Card)card.Clone(); missingCard.Count = missingCardsCount; deck.MissingCards.Add(missingCard); } } if(deck.MissingCards.Any()) DeckList.Save(); // Clear search field now all cards have been entered await ClickOnPoint(hsHandle, searchBoxPos); SendKeys.SendWait("{DELETE}"); SendKeys.SendWait("{ENTER}"); if(Config.Instance.ExportPasteClipboard) Clipboard.Clear(); Logger.WriteLine("Done creating deck.", "DeckExporter"); } catch(Exception e) { Logger.WriteLine("Error exporting deck: " + e, "DeckExporter"); } finally { Helper.MainWindow.Overlay.ForceHidden = false; Helper.MainWindow.Overlay.UpdatePosition(); if(Config.Instance.ExportPasteClipboard && Current_Clipboard != "") Clipboard.SetText(Current_Clipboard); } }