//+------------------------------------------------------------------+ //| Main.mqh | //| Copyright 2025, Niquel Mendoza. | //| https://www.mql5.com/es/users/nique_372 | //+------------------------------------------------------------------+ #property copyright "Copyright 2025, Niquel Mendoza." #property link "https://www.mql5.com/es/users/nique_372" #property strict #ifndef AIDATATASKRUNNER_FILEINSTALER_MAIN_MQH #define AIDATATASKRUNNER_FILEINSTALER_MAIN_MQH //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ #include #include //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ //--- Idiomas #resource "res\\language_en.txt" as const string g_panelict_dep_language_en #resource "res\\language_es.txt" as const string g_panelict_dep_language_es #resource "res\\language_it.txt" as const string g_panelict_dep_language_it //--- Features editor #resource "res\\feditor\\base_template.fgblc" as const string g_panel_feditor_basetemplate #resource "res\\feditor\\complex_features.fgblc" as const string g_panel_feditor_complexfeatures #resource "res\\feditor\\ict_features.fgblc" as const string g_panel_feditor_ictfeatures //--- Temaplates #resource "res\\templates\\move_files_template.json" as const string g_panel_template_movefiles #resource "res\\templates\\config_py.json" as const string g_panel_template_config_py #resource "res\\templates\\files_inclu_exclu_cle.json" as const string g_panel_template_incexcl_cle #resource "res\\templates\\files_inclu_exclu_enc.json" as const string g_panel_template_incexcl_enc #resource "res\\templates\\basic_data_generation.yaml" as const string g_panel_template_bdata_gen //--- struct AiDataTaskRunnerConfigFile { string base_folder; bool comon_flag; AiDataTaskRunnerConfigFile() : comon_flag(true), base_folder("AiDataTaskRunner\\") {} } g_aidatatask_runner_config_g; //+------------------------------------------------------------------+ //| Archivos | //+------------------------------------------------------------------+ //--- Common flag en FSD y normal #define AIDATATASKRUNER_BASE_FOLDER (g_aidatatask_runner_config_g.base_folder) #define AIDATATASK_RUNNER_COMON_FLAG (g_aidatatask_runner_config_g.comon_flag ? FILE_COMMON : 0) #define AIDATATASK_RUNNER_FSD_COMON_FLAG (g_aidatatask_runner_config_g.comon_flag ? FSD_COMMON_FOLDER : 0) #define AIDATATASK_RUNNER_COMON_FLAG_VAL (g_aidatatask_runner_config_g.comon_flag) //--- Config // En el path config se ubican lo de los ini para el panel #define AIDATATASKRUNER_PATH_CONFIG (AIDATATASKRUNER_BASE_FOLDER + "Config\\") //--- Task // Task aqui se ubican csv de tareas que gurado del usuario o la configuracion del tab task #define AIDATATASKRUNER_PATH_TASK (AIDATATASKRUNER_BASE_FOLDER + "Task\\") //--- Feature editor // En feature editor se ubican todos los archivo FGBLC que guardo\uso el user #define AIDATATASKRUNER_PATH_FEATURES_EDITOR (AIDATATASKRUNER_BASE_FOLDER + "FeatureEditor\\") #define AIDATATASKRUNER_PATH_FEATURES_EDITOR_MY (AIDATATASKRUNER_PATH_FEATURES_EDITOR + "My\\") //--- Ai agent // Aqui s eubican los chats de ia etc (TabAi) #define TABLLMAGENT_FOLDER_AI "AiAgent\\" //--- Temaplates // Aqui se ubican los templates como archivos json listos para usar del condig de py etc #define AIDATATASKRUNER_PATH_TEMPLATES (AIDATATASKRUNER_BASE_FOLDER + "Templates\\") #define AIDATATASKRUNER_FILENAME_TEMPLATES_MOVEFILESS ("move_files_template.json") #define AIDATATASKRUNER_FILENAME_TEMPLATES_PYCONFIG ("config_py.json") #define AIDATATASKRUNER_FILENAME_TEMPLATES_FILEINCLUEXCLU_ENC ("files_inclu_exclu_enc.json") #define AIDATATASKRUNER_FILENAME_TEMPLATES_FILEINCLUEXCLU_CLE ("files_inclu_exclu_cle.json") //--- Workflows #define AIDATATASKRUNER_PATH_WORKFLOWS (AIDATATASKRUNER_BASE_FOLDER + "Workflows\\") #define AIDATATASKRUNER_FILE_NAME_WORKFLOWS_BASICGENERATION ("basic_data_generation.yaml") //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ //--- Lenguaje #define AIDATATASKRUNNER_TOTAL_LANGUAGUE (3) #define TASKRUNERAI_DEFUALT_LAN (AIDATATASKRUNNER_LAN_ES) string g_aidatatask_runner_langague_str[AIDATATASKRUNNER_TOTAL_LANGUAGUE] { "Español", "English", "Italiano" }; // Base LanguageBaseConfig g_aidatatask_runner_langague[AIDATATASKRUNNER_TOTAL_LANGUAGUE]; // Enum enum ENUM_AIDATATASKRUNER_LANGUAGE { AIDATATASKRUNNER_LAN_ES = 0, AIDATATASKRUNNER_LAN_EN = 1, AIDATATASKRUNNER_LAN_IT = 2 }; //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ class CPanelAiDataTaskRunnerIns { private: static bool WriteInFile(const string path, const string& rescr); static void InitArrays(); public: CPanelAiDataTaskRunnerIns(void) {} ~CPanelAiDataTaskRunnerIns(void) {} //--- static bool Downlad(); }; //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ static void CPanelAiDataTaskRunnerIns::InitArrays(void) { //--- g_aidatatask_runner_langague[AIDATATASKRUNNER_LAN_ES].base_file = AIDATATASKRUNER_PATH_CONFIG + "language_es.ini"; g_aidatatask_runner_langague[AIDATATASKRUNNER_LAN_ES].content = g_panelict_dep_language_es; g_aidatatask_runner_langague[AIDATATASKRUNNER_LAN_EN].base_file = AIDATATASKRUNER_PATH_CONFIG + "language_en.ini"; g_aidatatask_runner_langague[AIDATATASKRUNNER_LAN_EN].content = g_panelict_dep_language_en; g_aidatatask_runner_langague[AIDATATASKRUNNER_LAN_IT].base_file = AIDATATASKRUNER_PATH_CONFIG + "language_it.ini"; g_aidatatask_runner_langague[AIDATATASKRUNNER_LAN_IT].content = g_panelict_dep_language_it; } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ static bool CPanelAiDataTaskRunnerIns::WriteInFile(const string path, const string &rescr) { //--- ::GetLastError(); const int fh = FileOpen(path, FILE_TXT | FILE_WRITE | AIDATATASK_RUNNER_COMON_FLAG, 0); if(fh == INVALID_HANDLE) { FastLog(FUNCION_ACTUAL, ERROR_TEXT, StringFormat("Fallo al abrir el archivo = %s, ultimo error = %d", path, ::GetLastError())); return false; } //--- FileWrite(fh, rescr); //--- FileClose(fh); //--- return true; } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ static bool CPanelAiDataTaskRunnerIns::Downlad(void) { //--- InitArrays(); //--- const string file = AIDATATASKRUNER_PATH_CONFIG + "last_date.bin"; if(FileIsExist(file, AIDATATASK_RUNNER_COMON_FLAG)) { // Ya existe FastLog(FUNCION_ACTUAL, WARNING_TEXT, "The ini files have already been created"); return true; } else { FastLog(FUNCION_ACTUAL, WARNING_TEXT, "Creating init files for the panel"); } //--- Instalacion de archivos for(int i = 0; i < AIDATATASKRUNNER_TOTAL_LANGUAGUE; i++) { if(!WriteInFile(g_aidatatask_runner_langague[i].base_file, g_aidatatask_runner_langague[i].content)) return false; } //--- Folders // Task if(!CreateFolder(AIDATATASKRUNER_PATH_TASK, g_aidatatask_runner_config_g.comon_flag)) // Folder de utilidad por si el usuario crea tareas o guarda return false; // Folder ai if(!CreateFolder(g_aidatatask_runner_config_g.base_folder + TABLLMAGENT_FOLDER_AI, g_aidatatask_runner_config_g.comon_flag)) return false; // Feature editor = My (Donde el user pone sus archivos) if(!CreateFolder(AIDATATASKRUNER_PATH_FEATURES_EDITOR_MY, g_aidatatask_runner_config_g.comon_flag)) // Folder de utilidad por si el usuario crea tareas o guarda return false; //--- Archivos relacioneanos a las features // Features editor if(!WriteInFile(AIDATATASKRUNER_PATH_FEATURES_EDITOR + "base_template.fgblc", g_panel_feditor_basetemplate)) return false; if(!WriteInFile(AIDATATASKRUNER_PATH_FEATURES_EDITOR + "complex_features.fgblc", g_panel_feditor_complexfeatures)) return false; if(!WriteInFile(AIDATATASKRUNER_PATH_FEATURES_EDITOR + "ict_features.fgblc", g_panel_feditor_ictfeatures)) return false; //--- Templates if(!WriteInFile(AIDATATASKRUNER_PATH_TEMPLATES + AIDATATASKRUNER_FILENAME_TEMPLATES_MOVEFILESS, g_panel_template_movefiles)) return false; if(!WriteInFile(AIDATATASKRUNER_PATH_TEMPLATES + AIDATATASKRUNER_FILENAME_TEMPLATES_PYCONFIG, g_panel_template_config_py)) return false; if(!WriteInFile(AIDATATASKRUNER_PATH_TEMPLATES + AIDATATASKRUNER_FILENAME_TEMPLATES_FILEINCLUEXCLU_CLE, g_panel_template_incexcl_cle)) return false; if(!WriteInFile(AIDATATASKRUNER_PATH_TEMPLATES + AIDATATASKRUNER_FILENAME_TEMPLATES_FILEINCLUEXCLU_ENC, g_panel_template_incexcl_enc)) return false; if(!WriteInFile(AIDATATASKRUNER_PATH_TEMPLATES + AIDATATASKRUNER_FILE_NAME_WORKFLOWS_BASICGENERATION, g_panel_template_bdata_gen)) return false; //--- Finalizamos creando const int fh = FileOpen(file, FILE_BIN | FILE_WRITE | AIDATATASK_RUNNER_COMON_FLAG); if(fh == INVALID_HANDLE) { FastLog(FUNCION_ACTUAL, ERROR_TEXT, StringFormat("Fallo al abrir el archivo = %s, ultimo error = %d", file, ::GetLastError())); return false; } FileWriteLong(fh, long(TimeCurrent())); FileClose(fh); //--- return true; } //+------------------------------------------------------------------+ #endif // AIDATATASKRUNNER_FILEINSTALER_MAIN_MQH