<commit_before>﻿// https://github.com/gmamaladze/globalmousekeyhook
using System;
using System.Drawing;
using System.Windows.Forms;
using ModelTela = Model.Tela;
using CapturadorPixel = Common.CapturadorPixel;
using Common;
using ServiceColeta = Service.Coleta;
using ServiceRecurso = Service.Recurso;
using ServiceBotaoAcao = Service.BotaoAcao;
using Service;
using Gma.System.MouseKeyHook;
using Common.Lib;
using System.Threading.Tasks;
using System.Threading;
using System.Collections.Generic;
using Model.Base;
using Service.Base;
using Service.Acao;
using Model.Base.Acao;

namespace WakBoy
{
    public partial class FormularioPrincipal : Form, IDisposable
    {
        private IKeyboardMouseEvents m_GlobalHook;
        private KeyboardHook hook;
        public FormularioPrincipal()
        {
            InitializeComponent();
        }

        private void FormularioPrincipal_Load(object sender, EventArgs e)
        {
            comboBoxTipoBusca.DataSource = Enum.GetNames(typeof(EnumTipoBusca));
            comboBoxProfissao.DataSource = Enum.GetNames(typeof(EnumProfissoes));

            hook = new KeyboardHook ();
            hook.KeyPressed += new EventHandler<KeyPressedEventArgs>(gatilhoTeclaPressionadaGlobalmente);
            // register the control + alt + F12 combination as hot key.
            // hook.RegisterHotKey(Common.Lib.ModifierKeys.Control | ModifierKeys.Alt, Keys.F12);
            hook.RegisterHotKey(Common.Lib.ModifierKeys.Shift, Keys.F4);
            
            //System.Diagnostics.Debug.WriteLine("taskA Status: {0}", taskA.Status);
        }

        void gatilhoTeclaPressionadaGlobalmente(object sender, KeyPressedEventArgs e)
        {
            if (this.checkBoxCacadorPixelsLigado.Checked == true) this.checkBoxCacadorPixelsLigado.Checked = false;
            else this.checkBoxCacadorPixelsLigado.Checked = true;
            //this.checkBoxCacadorPixelsLigado_CheckedChanged(this.checkBoxCapturadorLigado, EventArgs.Empty);
        }

        #region Iniciar WakShark
        
        private void checkBoxCacadorPixelsLigado_CheckedChanged(object sender, EventArgs e)
        {
            
            if (!String.IsNullOrEmpty(comboBoxTipoBusca.SelectedValue.ToString()))
            {
                CheckBox objCheckBox = (CheckBox)sender;
                this.checkBoxCacadorPixelsLigado.Checked = objCheckBox.Checked;
                if (objCheckBox.Checked == true)
                {
                    this.checkBoxCacadorPixelsLigado.BackColor = Color.Green;

                    ImagemCaptura.obterInstancia().isUtilizarMascaraLuminosidade = checkBoxMascaraLuminosidade.Checked;

                    Common.Lib.Win32.clicarBotaoEsquerdo(Screen.PrimaryScreen.Bounds.Width / 2, Screen.PrimaryScreen.Bounds.Height / 2);

                    Camera.obterInstancia().padronizarDistanciaCamera();

                    // Modificar esse trecho utilizado para teste, porque está sendo validado somente por 'coleta'. Quem sabe um switch não caia melhor?
                    if (EnumUtil.ParseEnum<EnumTipoBusca>(comboBoxTipoBusca.SelectedValue.ToString()) == EnumTipoBusca.Coleta) {
                        ServiceRecurso objRecurso = ServiceRecurso.obterInstancia();
                        ServiceBotaoAcao objServiceBotaoAcao = ServiceBotaoAcao.obterInstancia();
                        string nomeRecurso = ((KeyValuePair<string, string>)comboBoxRecurso.SelectedItem).Key;
                        string nomeAcao = ((KeyValuePair<string, string>)comboBoxAcao.SelectedItem).Key;
                        ServiceColeta objServiceColeta = ServiceColeta.obterInstancia();
                        objServiceColeta.isAtivarModoBaixoConsumo = checkBoxAtivarBaixoConsumo.Checked;

                        string nomeRecurso2 = string.Empty;
                        string nomeAcao2 = string.Empty;
                        string nomeRecurso3 = string.Empty;
                        string nomeAcao3 = string.Empty;
                        bool isUtilizarRecursoSecundario = checkBoxUtilizarRecursoSecundario.Checked;
                        bool isUtilizarRecursoTerciario = checkBoxUtilizarRecursoTerciario.Checked;

                        if (isUtilizarRecursoSecundario == true && comboBoxAcao2.SelectedItem != null && comboBoxRecurso2.SelectedItem != null)
                        {
                            nomeRecurso2 = ((KeyValuePair<string, string>)comboBoxRecurso2.SelectedItem).Key;
                            nomeAcao2 = ((KeyValuePair<string, string>)comboBoxAcao2.SelectedItem).Key;
                            
                            if (isUtilizarRecursoTerciario == true && comboBoxAcao3.SelectedItem != null && comboBoxRecurso3.SelectedItem != null)
                            {
                                nomeRecurso3 = ((KeyValuePair<string, string>)comboBoxRecurso3.SelectedItem).Key;
                                nomeAcao3 = ((KeyValuePair<string, string>)comboBoxAcao3.SelectedItem).Key;
                            }
                        }

                        bool isMovimentarAleatoriamente = checkBoxMovimentarAleatoriamente.Checked;
                        EnumProfissoes objEnumProfissao = EnumUtil.ParseEnum<EnumProfissoes>(comboBoxProfissao.SelectedValue.ToString());
                        
                        ABotaoAcao botaAcao1 = objServiceBotaoAcao.obterBotaoAcao(nomeAcao);
                        AViewModelColeta objAViewModelColeta1 = new Colheita();
                        ABotaoAcao botaAcao2 = objServiceBotaoAcao.obterBotaoAcao(nomeAcao2);
                        AViewModelColeta objAViewModelColeta2 = new Colheita();
                        ABotaoAcao botaAcao3 = objServiceBotaoAcao.obterBotaoAcao(nomeAcao3);
                        AViewModelColeta objAViewModelColeta3 = new Colheita();
                        if(botaAcao1 != null && botaAcao1 is IPlantio)
                        {
                            objAViewModelColeta1 = new Plantio();
                        }
                        if (botaAcao2 != null && botaAcao2 is IPlantio)
                        {
                            objAViewModelColeta2 = new Plantio();
                        }
                        if (botaAcao3 != null && botaAcao3 is IPlantio)
                        {
                            objAViewModelColeta3 = new Plantio();
                        }

                        objAViewModelColeta1.objRecurso = objRecurso.obterRecurso(nomeRecurso, objEnumProfissao);
                        objAViewModelColeta1.objABotaoAcao = botaAcao1;
                        

                        // Responsável por permitir que o loop consiga ser encerrado utilizando as hotkeys ou clique no botão.
                        Task.Factory.StartNew(() =>
                        {
                            while (this.checkBoxCacadorPixelsLigado.Checked)
                            {
                                
                                bool isSucessoNaColeta = objServiceColeta.coletar(objAViewModelColeta1);
                                if (!isSucessoNaColeta) {
                                    if (isUtilizarRecursoSecundario && botaAcao2 != null)
                                    {
                                        objAViewModelColeta2.objRecurso = objRecurso.obterRecurso(nomeRecurso2, objEnumProfissao);
                                        objAViewModelColeta2.objABotaoAcao = botaAcao2;
                                        isSucessoNaColeta = true;
                                        while (isSucessoNaColeta && this.checkBoxCacadorPixelsLigado.Checked)
                                        {
                                            isSucessoNaColeta = objServiceColeta.coletar(objAViewModelColeta2);
                                        }
                                        if (!isSucessoNaColeta && isUtilizarRecursoTerciario && botaAcao3 != null)
                                        {
                                            objAViewModelColeta3.objRecurso = objRecurso.obterRecurso(nomeRecurso3, objEnumProfissao);
                                            objAViewModelColeta3.objABotaoAcao = botaAcao3;
                                            isSucessoNaColeta = true;
                                            while (isSucessoNaColeta && this.checkBoxCacadorPixelsLigado.Checked)
                                            {
                                                isSucessoNaColeta = objServiceColeta.coletar(objAViewModelColeta3);
                                            }
                                        }
                                    }
                                    
                                    if (!isSucessoNaColeta && isMovimentarAleatoriamente) {
                                        Personagem.obterInstancia().movimentarAleatoriamente();
                                        Thread.Sleep(5000);
                                    }
                                }
                            }
                        });
                    }
                }
                else
                {
                    this.checkBoxCacadorPixelsLigado.BackColor = Color.Gray;
                }
            }
            else
            {
                MessageBox.Show("Preencha os campos obrigatórios.");
            }

        }

        #endregion

        #region Capturador de  Padrões de Pixels
        private void checkBoxCapturadorLigado_CheckedChanged(object sender, EventArgs e)<commit_msg>[ update ] Diminuição de tempo de recarga do loop de busca.<commit_after>﻿// https://github.com/gmamaladze/globalmousekeyhook
using System;
using System.Drawing;
using System.Windows.Forms;
using ModelTela = Model.Tela;
using CapturadorPixel = Common.CapturadorPixel;
using Common;
using ServiceColeta = Service.Coleta;
using ServiceRecurso = Service.Recurso;
using ServiceBotaoAcao = Service.BotaoAcao;
using Service;
using Gma.System.MouseKeyHook;
using Common.Lib;
using System.Threading.Tasks;
using System.Threading;
using System.Collections.Generic;
using Model.Base;
using Service.Base;
using Service.Acao;
using Model.Base.Acao;

namespace WakBoy
{
    public partial class FormularioPrincipal : Form, IDisposable
    {
        private IKeyboardMouseEvents m_GlobalHook;
        private KeyboardHook hook;
        public FormularioPrincipal()
        {
            InitializeComponent();
        }

        private void FormularioPrincipal_Load(object sender, EventArgs e)
        {
            comboBoxTipoBusca.DataSource = Enum.GetNames(typeof(EnumTipoBusca));
            comboBoxProfissao.DataSource = Enum.GetNames(typeof(EnumProfissoes));

            hook = new KeyboardHook ();
            hook.KeyPressed += new EventHandler<KeyPressedEventArgs>(gatilhoTeclaPressionadaGlobalmente);
            // register the control + alt + F12 combination as hot key.
            // hook.RegisterHotKey(Common.Lib.ModifierKeys.Control | ModifierKeys.Alt, Keys.F12);
            hook.RegisterHotKey(Common.Lib.ModifierKeys.Shift, Keys.F4);
            
            //System.Diagnostics.Debug.WriteLine("taskA Status: {0}", taskA.Status);
        }

        void gatilhoTeclaPressionadaGlobalmente(object sender, KeyPressedEventArgs e)
        {
            if (this.checkBoxCacadorPixelsLigado.Checked == true) this.checkBoxCacadorPixelsLigado.Checked = false;
            else this.checkBoxCacadorPixelsLigado.Checked = true;
            //this.checkBoxCacadorPixelsLigado_CheckedChanged(this.checkBoxCapturadorLigado, EventArgs.Empty);
        }

        #region Iniciar WakShark
        
        private void checkBoxCacadorPixelsLigado_CheckedChanged(object sender, EventArgs e)
        {
            
            if (!String.IsNullOrEmpty(comboBoxTipoBusca.SelectedValue.ToString()))
            {
                CheckBox objCheckBox = (CheckBox)sender;
                this.checkBoxCacadorPixelsLigado.Checked = objCheckBox.Checked;
                if (objCheckBox.Checked == true)
                {
                    this.checkBoxCacadorPixelsLigado.BackColor = Color.Green;

                    ImagemCaptura.obterInstancia().isUtilizarMascaraLuminosidade = checkBoxMascaraLuminosidade.Checked;

                    Common.Lib.Win32.clicarBotaoEsquerdo(Screen.PrimaryScreen.Bounds.Width / 2, Screen.PrimaryScreen.Bounds.Height / 2);

                    Camera.obterInstancia().padronizarDistanciaCamera();

                    // Modificar esse trecho utilizado para teste, porque está sendo validado somente por 'coleta'. Quem sabe um switch não caia melhor?
                    if (EnumUtil.ParseEnum<EnumTipoBusca>(comboBoxTipoBusca.SelectedValue.ToString()) == EnumTipoBusca.Coleta) {
                        ServiceRecurso objRecurso = ServiceRecurso.obterInstancia();
                        ServiceBotaoAcao objServiceBotaoAcao = ServiceBotaoAcao.obterInstancia();
                        string nomeRecurso = ((KeyValuePair<string, string>)comboBoxRecurso.SelectedItem).Key;
                        string nomeAcao = ((KeyValuePair<string, string>)comboBoxAcao.SelectedItem).Key;
                        ServiceColeta objServiceColeta = ServiceColeta.obterInstancia();
                        objServiceColeta.isAtivarModoBaixoConsumo = checkBoxAtivarBaixoConsumo.Checked;

                        string nomeRecurso2 = string.Empty;
                        string nomeAcao2 = string.Empty;
                        string nomeRecurso3 = string.Empty;
                        string nomeAcao3 = string.Empty;
                        bool isUtilizarRecursoSecundario = checkBoxUtilizarRecursoSecundario.Checked;
                        bool isUtilizarRecursoTerciario = checkBoxUtilizarRecursoTerciario.Checked;

                        if (isUtilizarRecursoSecundario == true && comboBoxAcao2.SelectedItem != null && comboBoxRecurso2.SelectedItem != null)
                        {
                            nomeRecurso2 = ((KeyValuePair<string, string>)comboBoxRecurso2.SelectedItem).Key;
                            nomeAcao2 = ((KeyValuePair<string, string>)comboBoxAcao2.SelectedItem).Key;
                            
                            if (isUtilizarRecursoTerciario == true && comboBoxAcao3.SelectedItem != null && comboBoxRecurso3.SelectedItem != null)
                            {
                                nomeRecurso3 = ((KeyValuePair<string, string>)comboBoxRecurso3.SelectedItem).Key;
                                nomeAcao3 = ((KeyValuePair<string, string>)comboBoxAcao3.SelectedItem).Key;
                            }
                        }

                        bool isMovimentarAleatoriamente = checkBoxMovimentarAleatoriamente.Checked;
                        EnumProfissoes objEnumProfissao = EnumUtil.ParseEnum<EnumProfissoes>(comboBoxProfissao.SelectedValue.ToString());
                        
                        ABotaoAcao botaAcao1 = objServiceBotaoAcao.obterBotaoAcao(nomeAcao);
                        AViewModelColeta objAViewModelColeta1 = new Colheita();
                        ABotaoAcao botaAcao2 = objServiceBotaoAcao.obterBotaoAcao(nomeAcao2);
                        AViewModelColeta objAViewModelColeta2 = new Colheita();
                        ABotaoAcao botaAcao3 = objServiceBotaoAcao.obterBotaoAcao(nomeAcao3);
                        AViewModelColeta objAViewModelColeta3 = new Colheita();
                        if(botaAcao1 != null && botaAcao1 is IPlantio)
                        {
                            objAViewModelColeta1 = new Plantio();
                        }
                        if (botaAcao2 != null && botaAcao2 is IPlantio)
                        {
                            objAViewModelColeta2 = new Plantio();
                        }
                        if (botaAcao3 != null && botaAcao3 is IPlantio)
                        {
                            objAViewModelColeta3 = new Plantio();
                        }

                        objAViewModelColeta1.objRecurso = objRecurso.obterRecurso(nomeRecurso, objEnumProfissao);
                        objAViewModelColeta1.objABotaoAcao = botaAcao1;
                        

                        // Responsável por permitir que o loop consiga ser encerrado utilizando as hotkeys ou clique no botão.
                        Task.Factory.StartNew(() =>
                        {
                            while (this.checkBoxCacadorPixelsLigado.Checked)
                            {
                                
                                bool isSucessoNaColeta = objServiceColeta.coletar(objAViewModelColeta1);
                                if (!isSucessoNaColeta) {
                                    if (isUtilizarRecursoSecundario && botaAcao2 != null)
                                    {
                                        objAViewModelColeta2.objRecurso = objRecurso.obterRecurso(nomeRecurso2, objEnumProfissao);
                                        objAViewModelColeta2.objABotaoAcao = botaAcao2;
                                        isSucessoNaColeta = true;
                                        while (isSucessoNaColeta && this.checkBoxCacadorPixelsLigado.Checked)
                                        {
                                            isSucessoNaColeta = objServiceColeta.coletar(objAViewModelColeta2);
                                        }
                                        if (!isSucessoNaColeta && isUtilizarRecursoTerciario && botaAcao3 != null)
                                        {
                                            objAViewModelColeta3.objRecurso = objRecurso.obterRecurso(nomeRecurso3, objEnumProfissao);
                                            objAViewModelColeta3.objABotaoAcao = botaAcao3;
                                            isSucessoNaColeta = true;
                                            while (isSucessoNaColeta && this.checkBoxCacadorPixelsLigado.Checked)
                                            {
                                                isSucessoNaColeta = objServiceColeta.coletar(objAViewModelColeta3);
                                            }
                                        }
                                    }
                                    
                                    if (!isSucessoNaColeta && isMovimentarAleatoriamente) {
                                        Personagem.obterInstancia().movimentarAleatoriamente();
                                        Thread.Sleep(1000);
                                    }
                                }
                            }
                        });
                    }
                }
                else
                {
                    this.checkBoxCacadorPixelsLigado.BackColor = Color.Gray;
                }
            }
            else
            {
                MessageBox.Show("Preencha os campos obrigatórios.");
            }

        }

        #endregion

        #region Capturador de  Padrões de Pixels
        private void checkBoxCapturadorLigado_CheckedChanged(object sender, EventArgs e)
{'fraction_non_alphanumeric': 0.06504783693843594, 'fraction_numerical': 0.006551580698835275, 'mean_word_length': 1.4629273914713792, 'pattern_counts': {'":': 0, '<': 21, '<?xml version=': 0, '>': 23, 'https://': 2, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 70, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '643829', 'n_tokens_mistral': 5233, 'n_tokens_neox': 4883, 'n_words': 741}